]> git.lyx.org Git - features.git/blob - src/frontends/qt/BulletsModule.cpp
Move BulletsModule to frontend namespace
[features.git] / src / frontends / qt / BulletsModule.cpp
1 /**
2  * \file BulletsModule.cpp
3  * This file is part of LyX, the document processor.
4  * Licence details can be found in the file COPYING.
5  *
6  * \author Edwin Leuven
7  *
8  * Full author contact details are available in file CREDITS.
9  */
10
11 #include <config.h>
12
13 #include "BulletsModule.h"
14 #include "qt_helpers.h"
15
16 #include <QPixmap>
17 #include <QPainter>
18
19 using namespace std;
20
21 namespace lyx {
22
23 namespace frontend {
24
25 BulletsModule::BulletsModule(QWidget * parent)
26     : QWidget(parent)
27 {
28         setupUi(this);
29
30         for (int iter = 0; iter < 4; ++iter)
31                 bullets_[iter] = ITEMIZE_DEFAULTS[iter];
32
33         current_font_ = -1;
34         current_char_ = 0;
35
36         // add levels
37         levelLW->addItem("1");
38         levelLW->addItem("2");
39         levelLW->addItem("3");
40         levelLW->addItem("4");
41
42         // insert pixmaps
43         setupPanel(new QListWidget(bulletpaneSW), qt_("Standard[[Bullets]]"), "standard");
44         setupPanel(new QListWidget(bulletpaneSW), qt_("Maths"), "amssymb");
45         setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 1"), "psnfss1");
46         setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 2"), "psnfss2");
47         setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 3"), "psnfss3");
48         setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 4"), "psnfss4");
49
50         connect(levelLW, SIGNAL(currentRowChanged(int)),
51                 this, SLOT(showLevel(int)));
52         connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW,
53                 SLOT(setCurrentIndex(int)));
54 }
55
56
57 void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname,
58         string const & fname)
59 {
60         connect(lw, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
61                 this, SLOT(bulletSelected(QListWidgetItem *, QListWidgetItem*)));
62
63         // add panelname to combox
64         bulletpaneCO->addItem(panelname);
65
66         // get pixmap with bullets
67         QPixmap pixmap(":/images/" + toqstr(fname) + ".png");
68
69         int const w = pixmap.width() / 6;
70         int const h = pixmap.height() / 6;
71
72         // apply setting to listwidget
73         lw->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
74         lw->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
75         lw->setViewMode(QListView::IconMode);
76         lw->setFlow(QListView::LeftToRight);
77         lw->setMovement(QListView::Static);
78         lw->setUniformItemSizes(true);
79         lw->setGridSize(QSize(w, h));
80         // the widening by 21 is needed to avoid wrapping
81         lw->resize(6 * w + 21, 6 * h);
82         bulletpaneSW->setMinimumSize(6 * w + 5, 6 * h + 6);
83
84         // get individual bullets from pixmap
85         for (int row = 0; row < 6; ++row) {
86                 for (int col = 0; col < 6; ++col) {
87                         QPixmap small(w, h);
88                         small.fill();
89                         QPainter painter(&small);
90                         painter.drawPixmap(small.rect(), pixmap, QRect(col * w, row * h, w, h));
91                         new QListWidgetItem(QIcon(small), "" , lw, (6 * row + col));
92                 }
93         }
94
95         // add bulletpanel to stackedwidget
96         bulletpaneSW->addWidget(lw);
97 }
98
99
100 void BulletsModule::showLevel(int level)
101 {
102         // unselect previous item
103         selectItem(current_font_, current_char_, false);
104
105         current_font_ = bullets_[level].getFont();
106
107         if (bullets_[level].getFont() < 0) {
108                 customCB->setCheckState(Qt::Checked);
109                 customLE->setText(toqstr(bullets_[level].getText()));
110         } else {
111                 customCB->setCheckState(Qt::Unchecked);
112                 customLE->clear();
113                 current_char_ = bullets_[level].getCharacter();
114                 selectItem(current_font_, current_char_, true);
115                 bulletpaneCO->setCurrentIndex(current_font_);
116                 bulletpaneSW->setCurrentIndex(current_font_);
117         }
118         bulletsizeCO->setCurrentIndex(bullets_[level].getSize() + 1);
119 }
120
121
122 void BulletsModule::init()
123 {
124         levelLW->setCurrentRow(0);
125         showLevel(0);
126 }
127
128
129 void BulletsModule::bulletSelected(QListWidgetItem * item, QListWidgetItem *)
130 {
131         // unselect previous item
132         selectItem(current_font_, current_char_, false);
133
134         int const level = levelLW->currentRow();
135         bullets_[level].setCharacter(item->type());
136         bullets_[level].setFont(bulletpaneCO->currentIndex());
137         current_font_ = bulletpaneCO->currentIndex();
138         current_char_ = item->type();
139         changed();
140 }
141
142
143 void BulletsModule::on_customCB_clicked(bool custom)
144 {
145         if (!custom) {
146                 if (current_font_ < 0)
147                         current_font_ = bulletpaneCO->currentIndex();
148                 return;
149         }
150
151         // unselect previous item
152         selectItem(current_font_, current_char_, false);
153         current_font_ = -1;
154         changed();
155 }
156
157
158 void BulletsModule::selectItem(int font, int character, bool select)
159 {
160         if (font < 0)
161                 return;
162
163         QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(font));
164         lw->item(character)->setSelected(select);
165 }
166
167
168 void BulletsModule::on_customLE_textEdited(const QString & text)
169 {
170         if (customCB->checkState() == Qt::Unchecked)
171                 return;
172
173         bullets_[levelLW->currentRow()].setFont(current_font_);
174         bullets_[levelLW->currentRow()].setText(qstring_to_ucs4(text));
175         changed();
176 }
177
178
179 void BulletsModule::on_bulletsizeCO_activated(int size)
180 {
181         // -1 apparently means default...
182         bullets_[levelLW->currentRow()].setSize(size - 1);
183         changed();
184 }
185
186
187 void BulletsModule::setBullet(int level, Bullet const & bullet)
188 {
189         bullets_[level] = bullet;
190 }
191
192
193 Bullet const & BulletsModule::bullet(int level) const
194 {
195         return bullets_[level];
196 }
197
198 } // namespace frontend
199
200 } // namespace lyx
201
202
203 #include "moc_BulletsModule.cpp"