]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/iconpalette.C
partial fonts fix. Like Juergen said we really need our own dialog.
[lyx.git] / src / frontends / qt2 / iconpalette.C
index bc8e8fe9611b9827f9f10750ff2dcd3c8f7ebb82..8f09504414eca60732800bafa4de4d01325117c1 100644 (file)
@@ -1,13 +1,21 @@
 /**
  * \file iconpalette.C
- * Copyright 2001 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
  * \author John Levon
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 #include <config.h>
 
+#ifdef __GNUG__
+#pragma implementation
+#endif
+
+#include "debug.h"
+
 #include "iconpalette.h"
 
 #include <qlayout.h>
 #include <qpixmap.h>
 #include <qtooltip.h>
 
+using std::endl;
+using std::make_pair;
+using std::vector;
+using std::max;
+
+int const button_size = 40;
+
+
 IconPalette::IconPalette(QWidget * parent, char const * name)
-       : QWidget(parent, name), crow_(0), ccol_(0)
+       : QWidget(parent, name), maxcol_(-1)
 {
        QVBoxLayout * top = new QVBoxLayout(this);
        QHBoxLayout * row = new QHBoxLayout(top);
        layout_ = new QGridLayout(row);
-       //row->addLayout(layout_);
        row->addStretch(0);
-       //top->addLayout(row);
        top->addStretch(0);
 }
 
@@ -31,21 +45,75 @@ IconPalette::IconPalette(QWidget * parent, char const * name)
 void IconPalette::add(QPixmap const & pixmap, string name, string tooltip)
 {
        QPushButton * p = new QPushButton(this);
-       p->setFixedSize(35, 35);
+       p->setFixedSize(button_size, button_size);
        p->setPixmap(pixmap);
        QToolTip::add(p, tooltip.c_str());
-       layout_->addWidget(p, crow_, ccol_);
-       if (++ccol_ == 6) {
-               ccol_ = 0;
-               ++crow_;
-       }
-       button_map_[p] = name;
-       connect(p, SIGNAL(clicked()), this, SLOT(clicked())); 
+       connect(p, SIGNAL(clicked()), this, SLOT(clicked()));
+       buttons_.push_back(make_pair(p, name));
 }
 
 
 void IconPalette::clicked()
 {
-       string name = button_map_[(QPushButton*)(sender())];
-       emit button_clicked(name);
+       vector<Button>::const_iterator it(buttons_.begin());
+       vector<Button>::const_iterator const end(buttons_.end());
+       for (; it != end; ++it) {
+               if (sender() == it->first) {
+                       emit button_clicked(it->second);
+                       return;
+               }
+       }
+}
+
+
+void IconPalette::resizeEvent(QResizeEvent * e)
+{
+       QWidget::resizeEvent(e);
+
+       lyxerr[Debug::GUI] << "resize panel to "
+               << e->size().width() << "," << e->size().height() << endl;
+
+       int maxcol = e->size().width() / button_size;
+
+       if (!layout_->isEmpty() && maxcol == maxcol_)
+               return;
+
+       int cols(width() / button_size);
+       int rows = max(int(buttons_.size() / cols), 1);
+       if (buttons_.size() % cols)
+               ++rows;
+
+       lyxerr[Debug::GUI] << "Laying out " << buttons_.size() << " widgets in a "
+               << cols << "x" << rows << " grid." << endl;
+
+       setUpdatesEnabled(false);
+
+       // clear layout
+       QLayoutIterator lit = layout_->iterator();
+       while (lit.current()) {
+               lit.takeCurrent();
+       }
+
+       layout_->invalidate();
+
+       vector<Button>::const_iterator it(buttons_.begin());
+       vector<Button>::const_iterator const end(buttons_.end());
+
+       for (int i = 0; i < rows; ++i) {
+               for (int j = 0; j < cols; ++j) {
+                       layout_->addWidget(it->first, i, j);
+                       ++it;
+                       if (it == end)
+                               goto out;
+               }
+       }
+
+out:
+
+       resize(cols * button_size, rows * button_size);
+
+       maxcol_ = cols;
+
+       setUpdatesEnabled(true);
+       update();
 }