José Matos wrote:
Hi all,
I will start looking to remaining issues before RC2, AFAIR there are two patches that I would like to have before the release, one by Jürgen that has a file format change and another related with reverting documents to 1.4.

        Is there anything else that I am missing before RC2?

tearing of math panels using attached patch?
Index: src/frontends/qt4/IconPalette.cpp
===================================================================
--- src/frontends/qt4/IconPalette.cpp	(revision 18792)
+++ src/frontends/qt4/IconPalette.cpp	(working copy)
@@ -24,17 +24,100 @@
 #include <QPainter>
 #include <QStyle>
 #include <QStyleOptionFrame>
+#include <QMouseEvent>
 
 namespace lyx {
 namespace frontend {
 
+#if QT_VERSION >= 0x040200
+
+
+class MathButton : public QToolButton
+{
+public:
+	MathButton(QWidget * parent = 0) {}
+	void mouseReleaseEvent(QMouseEvent *event); 
+	void mousePressEvent(QMouseEvent *event); 
+};
+
+
+void MathButton::mouseReleaseEvent(QMouseEvent *event)
+{
+	QToolButton::mouseReleaseEvent(event);
+	event->ignore();
+}
+
+
+void MathButton::mousePressEvent(QMouseEvent *event)
+{
+	QToolButton::mousePressEvent(event);
+	event->ignore();
+}
+
+
 IconPalette::IconPalette(QWidget * parent)
+	: QWidgetAction(parent), size_(QSize(22, 22))
+{
+}
+
+
+void IconPalette::addButton(QAction * action)
+{
+	actions_.push_back(action);
+}
+
+
+QWidget * IconPalette::createWidget(QWidget * parent)
+{
+	QWidget * widget = new QWidget(parent);
+	QGridLayout * layout = new QGridLayout(widget);
+	layout->setSpacing(0);
+
+	for (int i = 0; i < actions_.size(); ++i) {
+		MathButton * tb = new MathButton(widget);
+		tb->setAutoRaise(true);
+		tb->setDefaultAction(actions_.at(i));
+		tb->setIconSize(size_);
+		connect(this, SIGNAL(iconSizeChanged(const QSize &)),
+			tb, SLOT(setIconSize(const QSize &)));
+	
+		int const row = i/qMin(6, i + 1) + 1;
+		int const col = qMax(1, i + 1 - (row - 1) * 6);
+		layout->addWidget(tb, row, col);
+	}
+
+	return widget;
+}
+
+
+void IconPalette::setIconSize(const QSize & size)
+{
+	size_ = size;
+	// signal
+	iconSizeChanged(size);
+}
+
+
+void IconPalette::updateParent()
+{
+	bool enable = false;
+	for (int i = 0; i < actions_.size(); ++i)
+		if (actions_.at(i)->isEnabled()) {
+			enable = true;
+			break;
+		}
+	// signal
+	enabled(enable);
+}
+
+#else  // QT_VERSION >= 0x040200
+
+IconPalette::IconPalette(QWidget * parent)
 	: QWidget(parent, Qt::Popup)
 {
 	layout_ = new QGridLayout(this);
-	layout_->setSpacing(0);
-	layout_->setMargin(3);
-	setLayout(layout_);
+	layout->setSpacing(0);
+	layout->setMargin(3);
 }
 
 
@@ -151,6 +234,7 @@
 	// draw the rest (buttons)
 	QWidget::paintEvent(event);
 }
+#endif // QT_VERSION >= 0x040200
 
 
 ButtonMenu::ButtonMenu(const QString & title, QWidget * parent)
Index: src/frontends/qt4/IconPalette.h
===================================================================
--- src/frontends/qt4/IconPalette.h	(revision 18792)
+++ src/frontends/qt4/IconPalette.h	(working copy)
@@ -17,12 +17,40 @@
 #include <QLayout>
 #include "Action.h"
 
+// FIXME: this can go when we move to Qt 4.3
+#define QT_VERSION_CHECK(major, minor, patch) ((major<<16)|(minor<<8)|(patch))
+
+#if QT_VERSION >= QT_VERSION_CHECK(4, 2, 0)
+#include <QWidgetAction>
+#endif
+
 namespace lyx {
 namespace frontend {
 
 /**
  * For holding an arbitrary set of icons.
  */
+#if QT_VERSION >= QT_VERSION_CHECK(4, 2, 0)
+
+class IconPalette : public QWidgetAction {
+	Q_OBJECT
+public:
+	IconPalette(QWidget * parent);
+	void addButton(QAction *);
+	QWidget * createWidget(QWidget * parent);
+public Q_SLOTS:
+	void updateParent();
+	void setIconSize(const QSize &);
+Q_SIGNALS:
+	void enabled(bool);
+	void iconSizeChanged(const QSize &);
+private:
+	QList<QAction *> actions_;
+	QSize size_;
+};
+
+#else
+
 class IconPalette : public QWidget {
 	Q_OBJECT
 public:
@@ -49,6 +77,8 @@
 	QList<QAction *> actions_;
 };
 
+#endif // QT_VERSION >= QT_VERSION_CHECK(4, 2, 0)
+
 /**
  * Popup menu for a toolbutton.
  * We need this to keep track whether
Index: src/frontends/qt4/QLToolbar.cpp
===================================================================
--- src/frontends/qt4/QLToolbar.cpp	(revision 18792)
+++ src/frontends/qt4/QLToolbar.cpp	(working copy)
@@ -40,7 +40,6 @@
 #include <QAction>
 #include <QPixmap>
 
-
 namespace lyx {
 
 using std::string;
@@ -207,14 +206,21 @@
 		}
 	case ToolbarItem::ICONPALETTE: {
 		QToolButton * tb = new QToolButton(this);
-		tb->setCheckable(true);
 		tb->setToolTip(qt_(to_ascii(item.label_)));
 		tb->setStatusTip(qt_(to_ascii(item.label_)));
 		tb->setText(qt_(to_ascii(item.label_)));
 		connect(this, SIGNAL(iconSizeChanged(const QSize &)),
 			tb, SLOT(setIconSize(const QSize &)));
 
+#if QT_VERSION >= 0x040200
+		IconPalette * panel = new IconPalette(&owner_);
+		connect(panel, SIGNAL(enabled(bool)),
+			tb, SLOT(setEnabled(bool)));
+		connect(this, SIGNAL(iconSizeChanged(const QSize &)),
+			panel, SLOT(setIconSize(const QSize &)));
+#else
 		IconPalette * panel = new IconPalette(tb);
+#endif
 		connect(this, SIGNAL(updated()), panel, SLOT(updateParent()));
 		ToolbarInfo const & tbinfo = toolbarbackend.getToolbar(item.name_);
 		ToolbarInfo::item_iterator it = tbinfo.items.begin();
@@ -232,8 +238,20 @@
 				if (it == tbinfo.items.begin())
 					tb->setIcon(QPixmap(getIcon(it->func_).c_str()));
 			}
+
+#if QT_VERSION >= 0x040200
+		QMenu * m = new QMenu(tb);
+		m->addAction(panel);
+		m->setTearOffEnabled(true);
+		m->setWindowTitle(qt_(to_ascii(item.label_)));
+		tb->setPopupMode(QToolButton::InstantPopup);
+		tb->setMenu(m);
+#else
+		tb->setCheckable(true);
 		connect(tb, SIGNAL(clicked(bool)), panel, SLOT(setVisible(bool)));
 		connect(panel, SIGNAL(visible(bool)), tb, SLOT(setChecked(bool)));
+#endif // QT_VERSION >= 0x040200
+
 		addWidget(tb);
 		break;
 		}
@@ -249,6 +267,9 @@
 			tb, SLOT(setIconSize(const QSize &)));
 
 		ButtonMenu * m = new ButtonMenu(qt_(to_ascii(item.label_)), tb);
+		m->setWindowTitle(qt_(to_ascii(item.label_)));
+		m->setTearOffEnabled(true);
+		//m->setStyleSheet("padding-top: 2px");
 		connect(this, SIGNAL(updated()), m, SLOT(updateParent()));
 		ToolbarInfo const & tbinfo = toolbarbackend.getToolbar(item.name_);
 		ToolbarInfo::item_iterator it = tbinfo.items.begin();

Reply via email to