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