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