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