#include "support/filetools.h"
#include <QPixmap>
+#include <QPainter>
#include <boost/assert.hpp>
-using lyx::support::libFileSearch;
+namespace lyx {
+
+using support::libFileSearch;
using std::string;
{
setupUi(this);
- for (int iter = 0; iter < 4; ++iter) {
+ for (int iter = 0; iter < 4; ++iter)
bullets_[iter] = ITEMIZE_DEFAULTS[iter];
- }
+
+ current_font_ = -1;
+ current_char_ = 0;
// add levels
levelLW->addItem("1");
setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 3"), "psnfss3");
setupPanel(new QListWidget(bulletpaneSW), qt_("Dings 4"), "psnfss4");
- connect(levelLW, SIGNAL(currentRowChanged(int)), this, SLOT(showLevel(int)));
- connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW, SLOT(setCurrentIndex(int)));
-}
-
-
-BulletsModule::~BulletsModule()
-{
+ connect(levelLW, SIGNAL(currentRowChanged(int)),
+ this, SLOT(showLevel(int)));
+ connect(bulletpaneCO, SIGNAL(activated(int)), bulletpaneSW,
+ SLOT(setCurrentIndex(int)));
}
-void BulletsModule::setupPanel(QListWidget * lw, QString panelname, std::string fname)
+void BulletsModule::setupPanel(QListWidget * lw, QString const & panelname,
+ std::string const & fname)
{
connect(lw, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
this, SLOT(bulletSelected(QListWidgetItem *, QListWidgetItem*)));
bulletpaneCO->addItem(panelname);
// get pixmap with bullets
- QPixmap pixmap = QPixmap(toqstr(libFileSearch("images", fname, "xpm")));
+ QPixmap pixmap = QPixmap(toqstr(libFileSearch("images", fname, "xpm").absFilename()));
+
int const w = pixmap.width() / 6;
int const h = pixmap.height() / 6;
lw->setFlow(QListView::LeftToRight);
lw->setMovement(QListView::Static);
lw->setUniformItemSizes(true);
- lw->setGridSize( QSize(w , h) );
- lw->resize( 6 * w + 6 , 6* h);
- bulletpaneSW->setMinimumSize( 6 * w + 6 , 6 * h);
+ lw->setGridSize(QSize(w, h));
+ // the widening by 21 is needed to avoid wrapping
+ lw->resize(6 * w + 21, 6 * h);
+ bulletpaneSW->setMinimumSize(6 * w, 6 * h + 6);
// get individual bullets from pixmap
for (int row = 0; row < 6; ++row) {
for (int col = 0; col < 6; ++col) {
- QPixmap small(w,h);
- // FIXME: how to get the good color?
- small.fill(QColor(Qt::white));
- bitBlt(&small, 0, 0, &pixmap, col * w, row * h, w, h);
- new QListWidgetItem(QIcon(small), "" , lw, (6*row + col));
+ QPixmap small(w, h);
+ small.fill();
+ QPainter painter(&small);
+ painter.drawPixmap(small.rect(), pixmap, QRect(col * w, row * h, w, h));
+ new QListWidgetItem(QIcon(small), "" , lw, (6 * row + col));
}
}
void BulletsModule::showLevel(int level)
{
- unselectPreviousItem();
+ // unselect previous item
+ selectItem(current_font_, current_char_, false);
+
current_font_ = bullets_[level].getFont();
- if (bullets_[level].getFont()<0) {
+ if (bullets_[level].getFont() < 0) {
customCB->setCheckState(Qt::Checked);
customLE->setText(toqstr(bullets_[level].getText()));
} else {
- selectBullet(level);
customCB->setCheckState(Qt::Unchecked);
customLE->clear();
+ current_char_ = bullets_[level].getCharacter();
+ selectItem(current_font_, current_char_, true);
bulletpaneCO->setCurrentIndex(current_font_);
bulletpaneSW->setCurrentIndex(current_font_);
}
}
-void BulletsModule::selectBullet(int level)
-{
- int const bullet = bullets_[level].getCharacter();
- QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(current_font_));
- // get all items (FIXME: is there a better way? this looks too complicated)
- QList<QListWidgetItem *> items = lw->findItems("", Qt::MatchContains);
- for (int i = 0 ; i < items.size() ; ++i) {
- if (items.at(i)->type() == bullet) {
- current_item_ = items.at(i);
- lw->setItemSelected(current_item_, true);
- }
- }
-}
-
-
void BulletsModule::init()
{
levelLW->setCurrentRow(0);
void BulletsModule::bulletSelected(QListWidgetItem * item, QListWidgetItem *)
{
- unselectPreviousItem();
+ // unselect previous item
+ selectItem(current_font_, current_char_, false);
+
int const level = levelLW->currentRow();
bullets_[level].setCharacter(item->type());
bullets_[level].setFont(bulletpaneCO->currentIndex());
current_font_ = bulletpaneCO->currentIndex();
- current_item_ = item;
+ current_char_ = item->type();
changed();
}
-void BulletsModule::unselectPreviousItem()
-{
- if (current_font_<0)
- return;
-
- QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(current_font_));
- lw->setItemSelected(current_item_, false);
-}
-
-
-void BulletsModule::on_customCB_toggled(bool custom)
+void BulletsModule::on_customCB_clicked(bool custom)
{
if (!custom) {
- if (current_font_<0)
+ if (current_font_ < 0)
current_font_ = bulletpaneCO->currentIndex();
return;
}
- unselectPreviousItem();
+ // unselect previous item
+ selectItem(current_font_, current_char_, false);
current_font_ = -1;
changed();
}
+void BulletsModule::selectItem(int font, int character, bool select)
+{
+ if (font < 0)
+ return;
+
+ QListWidget * lw = static_cast<QListWidget *>(bulletpaneSW->widget(font));
+ lw->setItemSelected(lw->item(character), select);
+}
+
+
void BulletsModule::on_customLE_textEdited(const QString & text)
{
if (customCB->checkState() == Qt::Unchecked)
return;
bullets_[levelLW->currentRow()].setFont(current_font_);
- bullets_[levelLW->currentRow()].setText(fromqstr(text));
+ bullets_[levelLW->currentRow()].setText(qstring_to_ucs4(text));
changed();
}
return bullets_[level];
}
+} // namespace lyx
+
#include "BulletsModule_moc.cpp"