1 /*
2 this code is Public Domain
3 */
4
5 #include <QFileInfoList>
6 #include <QFileInfo>
7 #include <QLabel>
8 #include <QPushButton>
9 #include <QMenu>
10 #include <QStringList>
11 #include <QAction>
12
13 #include "gui_utils.h"
14 #include "utils.h"
15
16
17
create_menu_from_list(QObject * handler,QMenu * menu,const QStringList & list,const char * method)18 void create_menu_from_list (QObject *handler,
19 QMenu *menu,
20 const QStringList &list,
21 const char *method
22 )
23 {
24 menu->setTearOffEnabled (true);
25
26 for (QList <QString>::const_iterator i = list.begin(); i != list.end(); ++i)
27 {
28 if (! i->startsWith ("#"))
29 {
30 QAction *act = menu->addAction (*i);
31 handler->connect (act, SIGNAL(triggered()), handler, method);
32 }
33 }
34 }
35
36
37 //uses dir name as menuitem, no recursion
create_menu_from_themes(QObject * handler,QMenu * menu,const QString & dir,const char * method)38 void create_menu_from_themes (QObject *handler,
39 QMenu *menu,
40 const QString &dir,
41 const char *method
42 )
43 {
44 menu->setTearOffEnabled (true);
45 QDir d (dir);
46 QFileInfoList lst_fi = d.entryInfoList (QDir::NoDotAndDotDot | QDir::Dirs,
47 QDir::IgnoreCase | QDir::LocaleAware | QDir::Name);
48
49 for (QList <QFileInfo>::iterator fi = lst_fi.begin(); fi != lst_fi.end(); ++fi)
50 {
51 if (fi->isDir())
52 {
53 if (has_css_file (fi->absoluteFilePath()))
54 {
55 QAction *act = menu->addAction (fi->fileName());
56 act->setData (fi->filePath());
57 handler->connect (act, SIGNAL(triggered()), handler, method);
58 }
59 else
60 {
61 QMenu *mni_temp = menu->addMenu (fi->fileName());
62 create_menu_from_themes (handler, mni_temp, fi->filePath(), method);
63 }
64 }
65 }
66 }
67
68
create_menu_from_dir(QObject * handler,QMenu * menu,const QString & dir,const char * method)69 void create_menu_from_dir (QObject *handler,
70 QMenu *menu,
71 const QString &dir,
72 const char *method
73 )
74 {
75 menu->setTearOffEnabled (true);
76
77 QDir d (dir);
78 if (! d.exists())
79 return;
80
81 QFileInfoList lst_fi = d.entryInfoList (QDir::NoDotAndDotDot | QDir::AllEntries,
82 QDir::DirsFirst | QDir::IgnoreCase |
83 QDir::LocaleAware | QDir::Name);
84
85 for (QList <QFileInfo>::iterator fi = lst_fi.begin(); fi != lst_fi.end(); ++fi)
86 {
87 if (fi->isDir())
88 {
89 QMenu *mni_temp = menu->addMenu (fi->fileName());
90 create_menu_from_dir (handler, mni_temp, fi->filePath(), method);
91 }
92 else
93 {
94 QAction *act = menu->addAction (fi->fileName());
95 act->setData (fi->filePath());
96 handler->connect (act, SIGNAL(triggered()), handler, method);
97 }
98 }
99 }
100
101
image_scale_by(const QImage & source,bool by_side,int value,Qt::TransformationMode mode)102 QImage image_scale_by (const QImage &source,
103 bool by_side,
104 int value,
105 Qt::TransformationMode mode)
106 {
107 if (source.isNull())
108 return source;
109
110 bool horisontal = (source.width() > source.height());
111
112 int width;
113 int height;
114
115 if (by_side)
116 {
117 width = value;
118 height = value;
119 }
120 else
121 {
122 width = get_value (source.width(), value);
123 height = get_value (source.height(), value);
124 }
125
126 if (horisontal)
127 return source.scaledToWidth (width, mode);
128 else
129 return source.scaledToHeight (height, mode);
130 }
131
132
new_line_edit(QBoxLayout * layout,const QString & label,const QString & def_value)133 QLineEdit* new_line_edit (QBoxLayout *layout, const QString &label, const QString &def_value)
134 {
135 QHBoxLayout *lt_h = new QHBoxLayout;
136 QLabel *l = new QLabel (label);
137 QLineEdit *r = new QLineEdit;
138
139 r->setText (def_value);
140
141 lt_h->insertWidget (-1, l, 0, Qt::AlignLeft);
142 lt_h->insertWidget (-1, r, 1, Qt::AlignLeft);
143
144 layout->addLayout (lt_h);
145
146 return r;
147 }
148
149
new_spin_box(QBoxLayout * layout,const QString & label,int min,int max,int value,int step)150 QSpinBox* new_spin_box (QBoxLayout *layout, const QString &label, int min, int max, int value, int step)
151 {
152 QHBoxLayout *lt_h = new QHBoxLayout;
153 QLabel *l = new QLabel (label);
154 QSpinBox *r = new QSpinBox;
155
156 r->setSingleStep (step);
157 r->setRange (min, max);
158 r->setValue (value);
159
160 lt_h->insertWidget (-1, l, 0, Qt::AlignLeft);
161 lt_h->insertWidget (-1, r, 1, Qt::AlignLeft);
162
163 layout->addLayout (lt_h, 1);
164
165 return r;
166 }
167
168
new_combobox(QBoxLayout * layout,const QString & label,const QStringList & items,const QString & def_value)169 QComboBox* new_combobox (QBoxLayout *layout,
170 const QString &label,
171 const QStringList &items,
172 const QString &def_value)
173 {
174 QHBoxLayout *lt_h = new QHBoxLayout;
175 QLabel *l = new QLabel (label);
176 QComboBox *r = new QComboBox;
177
178 r->addItems (items);
179 r->setCurrentIndex (r->findText (def_value));
180
181 lt_h->insertWidget (-1, l, 0, Qt::AlignLeft);
182 lt_h->insertWidget (-1, r, 1, Qt::AlignLeft);
183
184 layout->addLayout (lt_h);
185
186 return r;
187 }
188
189
new_combobox(QBoxLayout * layout,const QString & label,const QStringList & items,int index)190 QComboBox* new_combobox (QBoxLayout *layout,
191 const QString &label,
192 const QStringList &items,
193 int index)
194 {
195 QHBoxLayout *lt_h = new QHBoxLayout;
196 QLabel *l = new QLabel (label);
197 QComboBox *r = new QComboBox;
198
199 r->addItems (items);
200 r->setCurrentIndex (index);
201
202 lt_h->insertWidget (-1, l, 0, Qt::AlignLeft);
203 lt_h->insertWidget (-1, r, 1, Qt::AlignLeft);
204
205 layout->addLayout (lt_h);
206
207 return r;
208 }
209