]> git.lyx.org Git - lyx.git/blob - src/frontends/qt4/BulletsModule.C
* furter simplifications:
[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         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"), "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)), this, SLOT(showLevel(int)));
51         connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW, SLOT(setCurrentIndex(int)));
52 }
53
54
55 BulletsModule::~BulletsModule()
56 {
57 }
58
59
60 void BulletsModule::setupPanel(QListWidget * lw, QString panelname, std::string fname)
61 {
62         connect(lw, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
63                 this, SLOT(bulletSelected(QListWidgetItem *, QListWidgetItem*)));
64
65         // add panelname to combox
66         bulletpaneCO->addItem(panelname);
67
68         // get pixmap with bullets
69         QPixmap pixmap = QPixmap(toqstr(libFileSearch("images", fname, "xpm")));
70         int const w = pixmap.width() / 6;
71         int const h = pixmap.height() / 6;
72
73         // apply setting to listwidget
74         lw->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
75         lw->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
76         lw->setViewMode(QListView::IconMode);
77         lw->setFlow(QListView::LeftToRight);
78         lw->setMovement(QListView::Static);
79         lw->setUniformItemSizes(true);
80         lw->setGridSize( QSize(w , h) );
81         lw->resize( 6 * w + 6 , 6* h);
82         bulletpaneSW->setMinimumSize( 6 * w + 6 , 6 * h);
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                         bitBlt(&small, 0, 0, &pixmap, col * w, row * h, w, h);
90                         new QListWidgetItem(QIcon(small), "" , lw, (6*row + col));
91                 }
92         }
93
94         // add bulletpanel to stackedwidget
95         bulletpaneSW->addWidget(lw);
96 }
97
98
99 void BulletsModule::showLevel(int level)
100 {
101         // unselect previous item
102         selectItem(current_font_, current_char_, false);
103
104         current_font_ = bullets_[level].getFont();
105
106         if (bullets_[level].getFont()<0) {
107                 customCB->setCheckState(Qt::Checked);
108                 customLE->setText(toqstr(bullets_[level].getText()));
109         } else {
110                 customCB->setCheckState(Qt::Unchecked);
111                 customLE->clear();
112                 current_char_ = bullets_[level].getCharacter();
113                 selectItem(current_font_, current_char_, true);
114                 bulletpaneCO->setCurrentIndex(current_font_);
115                 bulletpaneSW->setCurrentIndex(current_font_);
116         }
117         bulletsizeCO->setCurrentIndex(bullets_[level].getSize() + 1);
118 }
119
120
121 void BulletsModule::init()
122 {
123         levelLW->setCurrentRow(0);
124         showLevel(0);
125 }
126
127
128 void BulletsModule::bulletSelected(QListWidgetItem * item, QListWidgetItem *)
129 {
130         // unselect previous item
131         selectItem(current_font_, current_char_, false);
132
133         int const level = levelLW->currentRow();
134         bullets_[level].setCharacter(item->type());
135         bullets_[level].setFont(bulletpaneCO->currentIndex());
136         current_font_ = bulletpaneCO->currentIndex();
137         current_char_ = item->type();
138         changed();
139 }
140
141
142 void BulletsModule::on_customCB_toggled(bool custom)
143 {
144         if (!custom) {
145                 if (current_font_<0)
146                         current_font_ = bulletpaneCO->currentIndex();
147                 return;
148         }
149                 
150         // unselect previous item
151         selectItem(current_font_, current_char_, false);
152         current_font_ = -1;
153         changed();
154 }
155
156
157 void BulletsModule::selectItem(int font, int character, bool select)
158 {
159         if (font<0)
160                 return;
161
162         QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(font));
163         lw->setItemSelected(lw->item(character), select);
164 }
165
166
167 void BulletsModule::on_customLE_textEdited(const QString & text)
168 {
169         if (customCB->checkState() == Qt::Unchecked)
170                 return;
171
172         bullets_[levelLW->currentRow()].setFont(current_font_);
173         bullets_[levelLW->currentRow()].setText(fromqstr(text));
174         changed();
175 }
176
177
178 void BulletsModule::on_bulletsizeCO_activated(int size)
179 {
180         // -1 apparently means default...
181         bullets_[levelLW->currentRow()].setSize(size - 1);
182 }
183
184
185 void BulletsModule::setBullet(int level, Bullet const & bullet)
186 {
187         bullets_[level] = bullet;
188 }
189
190
191 Bullet const & BulletsModule::getBullet(int level) const
192 {
193         return bullets_[level];
194 }
195
196
197 #include "BulletsModule_moc.cpp"