2 * \file BulletsModule.cpp
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
15 #include "BulletsModule.h"
16 #include "GuiApplication.h"
17 #include "qt_helpers.h"
30 int const CHARMAX = 36;
31 int const FONTMAX = 6;
33 BulletsModule::BulletsModule(QWidget * parent)
38 for (int iter = 0; iter < 4; ++iter)
39 bullets_[iter] = ITEMIZE_DEFAULTS[iter];
45 levelLW->addItem("1");
46 levelLW->addItem("2");
47 levelLW->addItem("3");
48 levelLW->addItem("4");
51 setupPanel(new QListWidget(bulletpaneSW), qt_("Standard[[Bullets]]"), 0);
52 setupPanel(new QListWidget(bulletpaneSW), qt_("Maths"), 1, "math");
53 setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 1"), 2);
54 setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 2"), 3);
55 setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 3"), 4);
56 setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 4"), 5);
58 connect(levelLW, SIGNAL(currentRowChanged(int)),
59 this, SLOT(showLevel(int)));
60 connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW,
61 SLOT(setCurrentIndex(int)));
65 string const bulletIcon(int f, int c)
67 static char const * BulletPanelIcons0[CHARMAX] = {
69 "bfendash", "vdash", "dashv", "flat", "natural",
70 "sharp", "ast", "star", "bullet", "circ", "cdot",
71 "dagger", "bigtriangleup", "bigtriangledown", "triangleleft",
72 "triangleright", "lhd", "rhd", "oplus", "ominus", "otimes",
73 "oslash", "odot", "spadesuit", "diamond", "diamond2", "box",
74 "diamondsuit", "heartsuit", "clubsuit", "rightarrow", "leadsto",
75 "rightharpoonup", "rightharpoondown", "rightarrow2", "succ"
77 static char const * BulletPanelIcons1[CHARMAX] = {
79 "Rrightarrow", "rightarrowtail", "twoheadrightarrow", "rightsquigarrow",
80 "looparrowright", "multimap", "boxtimes", "boxplus", "boxminus",
81 "boxdot", "divideontimes", "Vvdash", "lessdot", "gtrdot", "maltese",
82 "bigstar", "checkmark", "vdash2", "backsim", "thicksim",
83 "centerdot", "circleddash", "circledast", "circledcirc",
84 "vartriangleleft", "vartriangleright", "vartriangle", "triangledown",
85 "lozenge", "square", "blacktriangleleft", "blacktriangleright", "blacktriangle",
86 "blacktriangledown", "blacklozenge", "blacksquare"
88 static char const * BulletPanelIcons2[CHARMAX] = {
90 "ding108", "ding109", "ding119", "pisymbol_psy197",
91 "pisymbol_psy196", "pisymbol_psy183", "ding71", "ding70",
92 "ding118", "ding117", "pisymbol_psy224", "pisymbol_psy215",
93 "ding111", "ding112", "ding113", "ding114",
94 "pisymbol_psy68", "pisymbol_psy209", "ding120", "ding121",
95 "ding122", "ding110", "ding115", "ding116",
96 "pisymbol_psy42", "ding67", "ding66", "ding82",
97 "ding81", "ding228", "ding162", "ding163",
98 "ding166", "ding167", "ding226", "ding227"
100 static char const * BulletPanelIcons3[CHARMAX] = {
102 "ding37", "ding38", "ding34", "ding36",
103 "ding39", "ding40", "ding41", "ding42",
104 "ding43", "ding44", "ding45", "ding47",
105 "ding53", "ding54", "ding59", "ding57",
106 "ding62", "ding61", "ding55", "ding56",
107 "ding58", "ding60", "ding63", "ding64",
108 "ding51", "ding52", "pisymbol_psy170", "pisymbol_psy167",
109 "pisymbol_psy168", "pisymbol_psy169", "ding164", "ding165",
110 "ding171", "ding168", "ding169", "ding170"
112 static char const * BulletPanelIcons4[CHARMAX] = {
114 "ding65", "ding76", "ding75", "ding72",
115 "ding80", "ding74", "ding78", "ding77",
116 "ding79", "ding85", "ding90", "ding98",
117 "ding83", "ding84", "ding86", "ding87",
118 "ding88", "ding89", "ding92", "ding91",
119 "ding93", "ding105", "ding94", "ding99",
120 "ding103", "ding104", "ding106", "ding107",
121 "ding68", "ding69", "ding100", "ding101",
122 "ding102", "ding96", "ding95", "ding97"
124 static char const * BulletPanelIcons5[CHARMAX] = {
126 "ding223", "ding224", "ding225", "ding232",
127 "ding229", "ding230", "ding238", "ding237",
128 "ding236", "ding235", "ding234", "ding233",
129 "ding239", "ding241", "ding250", "ding251",
130 "ding49", "ding50", "ding217", "ding245",
131 "ding243", "ding248", "ding252", "ding253",
132 "ding219", "ding213", "ding221", "ding222",
133 "ding220", "ding212", "pisymbol_psy174", "pisymbol_psy222",
134 "ding254", "ding242", "ding231", "pisymbol_psy45"
137 static char const ** BulletPanelIcons[FONTMAX] = {
138 BulletPanelIcons0, BulletPanelIcons1,
139 BulletPanelIcons2, BulletPanelIcons3,
140 BulletPanelIcons4, BulletPanelIcons5
143 return BulletPanelIcons[f][c];
147 QPixmap getSelectedPixmap(QPixmap pixmap, QSize const icon_size)
149 QPalette palette = QPalette();
150 QColor text_color = (guiApp->isInDarkMode())
151 ? palette.color(QPalette::Active, QPalette::WindowText)
153 QColor highlight_color = palette.color(QPalette::Active, QPalette::HighlightedText);
154 QColor highlight_bg = palette.color(QPalette::Active, QPalette::Highlight);
156 // create a layer with black text turned to QPalette::HighlightedText
157 QPixmap hl_overlay(pixmap.size());
158 hl_overlay.fill(highlight_color);
159 hl_overlay.setMask(pixmap.createMaskFromColor(text_color, Qt::MaskOutColor));
161 // Create highlighted background
162 QPixmap hl_background(icon_size);
163 hl_background.fill(highlight_bg);
165 // put layers on top of existing pixmap
166 QPainter painter(&pixmap);
167 painter.drawPixmap(pixmap.rect(), hl_background);
168 painter.drawPixmap(pixmap.rect(), hl_overlay);
174 void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname,
175 int const font, string const folder)
177 connect(lw, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
178 this, SLOT(bulletSelected(QListWidgetItem *, QListWidgetItem*)));
180 // add panelname to combox
181 bulletpaneCO->addItem(panelname);
183 lw->setViewMode(QListView::IconMode);
184 lw->setDragDropMode(QAbstractItemView::NoDragDrop);
185 lw->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
186 lw->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
187 lw->setFlow(QListView::LeftToRight);
189 lw->setUniformItemSizes(true);
191 QSize icon_size(26, 26);
192 lw->setIconSize(icon_size);
194 // we calculate the appropriate width to fit 6 icons in a row
195 lw->setFixedWidth((6 * (icon_size.width() + lw->spacing()))
196 + (lw->frameWidth() * 2)
197 + lw->verticalScrollBar()->height());
199 lw->setFixedHeight((6 * (icon_size.height() + lw->spacing()))
200 + (lw->frameWidth() * 2)
201 + lw->horizontalScrollBar()->height());
203 for (int i = 0; i < CHARMAX; ++i) {
204 string const iconname = bulletIcon(font, i);
205 // get pixmap with bullets
206 QPixmap pixmap = getPixmap("images/" + toqstr(folder) + "/", toqstr(iconname), "svgz");
208 icon.addPixmap(getSelectedPixmap(pixmap, icon_size), QIcon::Selected);
209 QListWidgetItem * lwi = new QListWidgetItem(icon, QString());
210 lwi->setToolTip(toqstr(Bullet::bulletEntry(font, i)));
211 lwi->setSizeHint(icon_size);
215 // add bulletpanel to stackedwidget
216 bulletpaneSW->addWidget(lw);
220 void BulletsModule::showLevel(int level)
222 // unselect previous item
223 selectItem(current_font_, current_char_, false);
225 current_font_ = bullets_[level].getFont();
227 if (bullets_[level].getFont() < 0) {
228 customCB->setCheckState(Qt::Checked);
229 customLE->setText(toqstr(bullets_[level].getText()));
231 customCB->setCheckState(Qt::Unchecked);
233 current_char_ = bullets_[level].getCharacter();
234 selectItem(current_font_, current_char_, true);
235 bulletpaneCO->setCurrentIndex(current_font_);
236 bulletpaneSW->setCurrentIndex(current_font_);
238 bulletsizeCO->setCurrentIndex(bullets_[level].getSize() + 1);
242 void BulletsModule::init()
244 levelLW->setCurrentRow(0);
249 void BulletsModule::bulletSelected(QListWidgetItem * item, QListWidgetItem *)
251 // unselect previous item
252 selectItem(current_font_, current_char_, false);
254 int const level = levelLW->currentRow();
255 bullets_[level].setCharacter(item->type());
256 bullets_[level].setFont(bulletpaneCO->currentIndex());
257 current_font_ = bulletpaneCO->currentIndex();
258 current_char_ = item->type();
263 void BulletsModule::on_customCB_clicked(bool custom)
266 if (current_font_ < 0)
267 current_font_ = bulletpaneCO->currentIndex();
271 // unselect previous item
272 selectItem(current_font_, current_char_, false);
278 void BulletsModule::selectItem(int font, int character, bool select)
283 QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(font));
284 lw->item(character)->setSelected(select);
288 void BulletsModule::on_customLE_textEdited(const QString & text)
290 if (customCB->checkState() == Qt::Unchecked)
293 bullets_[levelLW->currentRow()].setFont(current_font_);
294 bullets_[levelLW->currentRow()].setText(qstring_to_ucs4(text));
299 void BulletsModule::on_bulletsizeCO_activated(int size)
301 // -1 apparently means default...
302 bullets_[levelLW->currentRow()].setSize(size - 1);
307 void BulletsModule::setBullet(int level, Bullet const & bullet)
309 bullets_[level] = bullet;
313 Bullet const & BulletsModule::bullet(int level) const
315 return bullets_[level];
318 } // namespace frontend
323 #include "moc_BulletsModule.cpp"