2 * \file BulletsModule.C
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.
13 #include "BulletsModule.h"
14 #include "qt_helpers.h"
16 #include "support/filetools.h"
20 #include <boost/assert.hpp>
22 using lyx::support::libFileSearch;
26 BulletsModule::BulletsModule(QWidget * , char const * , Qt::WFlags)
30 for (int iter = 0; iter < 4; ++iter) {
31 bullets_[iter] = ITEMIZE_DEFAULTS[iter];
35 levelLW->addItem("1");
36 levelLW->addItem("2");
37 levelLW->addItem("3");
38 levelLW->addItem("4");
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");
48 connect(levelLW, SIGNAL(currentRowChanged(int)), this, SLOT(showLevel(int)));
49 connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW, SLOT(setCurrentIndex(int)));
53 BulletsModule::~BulletsModule()
58 void BulletsModule::setupPanel(QListWidget * lw, QString panelname, std::string fname)
60 connect(lw, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
61 this, SLOT(bulletSelected(QListWidgetItem *, QListWidgetItem*)));
63 // add panelname to combox
64 bulletpaneCO->addItem(panelname);
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;
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);
82 // get individual bullets from pixmap
83 for (int row = 0; row < 6; ++row) {
84 for (int col = 0; col < 6; ++col) {
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));
93 // add bulletpanel to stackedwidget
94 bulletpaneSW->addWidget(lw);
98 void BulletsModule::showLevel(int level)
100 unselectPreviousItem();
101 current_font_ = bullets_[level].getFont();
103 if (bullets_[level].getFont()<0) {
104 customCB->setCheckState(Qt::Checked);
105 customLE->setText(toqstr(bullets_[level].getText()));
108 customCB->setCheckState(Qt::Unchecked);
110 bulletpaneCO->setCurrentIndex(current_font_);
111 bulletpaneSW->setCurrentIndex(current_font_);
113 bulletsizeCO->setCurrentIndex(bullets_[level].getSize() + 1);
117 void BulletsModule::selectBullet(int level)
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);
132 void BulletsModule::init()
134 levelLW->setCurrentRow(0);
139 void BulletsModule::bulletSelected(QListWidgetItem * item, QListWidgetItem *)
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;
151 void BulletsModule::unselectPreviousItem()
156 QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(current_font_));
157 lw->setItemSelected(current_item_, false);
161 void BulletsModule::on_customCB_toggled(bool custom)
165 current_font_ = bulletpaneCO->currentIndex();
169 unselectPreviousItem();
175 void BulletsModule::on_customLE_textEdited(const QString & text)
177 if (customCB->checkState() == Qt::Unchecked)
180 bullets_[levelLW->currentRow()].setFont(current_font_);
181 bullets_[levelLW->currentRow()].setText(fromqstr(text));
186 void BulletsModule::on_bulletsizeCO_activated(int size)
188 // -1 apparently means default...
189 bullets_[levelLW->currentRow()].setSize(size - 1);
193 void BulletsModule::setBullet(int level, Bullet const & bullet)
195 bullets_[level] = bullet;
199 Bullet const & BulletsModule::getBullet(int level) const
201 return bullets_[level];
205 #include "BulletsModule_moc.cpp"