#include "QMathDialog.h"
#include "QMath.h"
-//Added by qt3to4:
+
#include <QPixmap>
#include <QResizeEvent>
+#include <QScrollArea>
+#include <QMenu>
+#include <QPushButton>
+#include <QListWidget>
+#include <QListWidgetItem>
+#include <QIcon>
#include "iconpalette.h"
#include "qt_helpers.h"
-
#include "controllers/ControlMath.h"
-
#include "frontends/lyx_gui.h"
-
-#include <q3widgetstack.h>
-#include <qpushbutton.h>
-#include <q3listbox.h>
-#include <q3popupmenu.h>
+#include "support/filetools.h"
using std::string;
+using lyx::support::libFileSearch;
+
namespace lyx {
namespace frontend {
-class QScrollViewSingle : public Q3ScrollView {
-public:
- QScrollViewSingle(QWidget * p)
- : Q3ScrollView(p), w_(0) {
- setResizePolicy(Manual);
- setHScrollBarMode(AlwaysOff);
- setVScrollBarMode(AlwaysOn);
- setBackgroundMode(Qt::PaletteBackground);
- viewport()->setBackgroundMode(Qt::PaletteBackground);
- }
-
- void setChild(QWidget * w) {
- w_ = w;
- setMinimumWidth(verticalScrollBar()->width() + w_->width() + 4);
- addChild(w_);
- }
-protected:
- virtual void resizeEvent(QResizeEvent * e) {
- Q3ScrollView::resizeEvent(e);
- if (!w_)
- return;
-
- w_->resize(viewport()->width(), w_->height());
- // force the resize to get accurate scrollbar
- lyx_gui::sync_events();
- resizeContents(w_->width(), w_->height());
- }
-private:
- QWidget * w_;
-};
namespace {
// enlarge the symbols ComboBox (no scrollbar)
//symbolsCO->setSizeLimit(13);
- connect(symbolsCO, SIGNAL(activated(int)), symbolsWS, SLOT(raiseWidget(int)));
-
- connect( tearoffPB, SIGNAL( clicked() ), this, SLOT( expandClicked() ) );
- connect( closePB, SIGNAL( clicked() ), this, SLOT( accept() ) );
- connect( fracPB, SIGNAL( clicked() ), this, SLOT( fracClicked() ) );
- connect( superscriptPB, SIGNAL( clicked() ), this, SLOT( superscriptClicked() ) );
- connect( subscriptPB, SIGNAL( clicked() ), this, SLOT( subscriptClicked() ) );
- connect( delimitersPB, SIGNAL( clicked() ), this, SLOT( delimiterClicked() ) );
- connect( matrixPB, SIGNAL( clicked() ), this, SLOT( matrixClicked() ) );
- connect( functionsLB, SIGNAL( selected(const QString&) ), this, SLOT( functionSelected(const QString &) ) );
- connect( equationPB, SIGNAL( clicked() ), this, SLOT( equationClicked() ) );
-
+ connect( tearoffPB, SIGNAL( clicked() ), this, SLOT( expandClicked() ) );
+ connect( closePB, SIGNAL( clicked() ), this, SLOT( accept() ) );
+ connect( fracPB, SIGNAL( clicked() ), this, SLOT( fracClicked() ) );
+ connect( superscriptPB, SIGNAL( clicked() ), this, SLOT( superscriptClicked() ) );
+ connect( subscriptPB, SIGNAL( clicked() ), this, SLOT( subscriptClicked() ) );
+ connect( delimitersPB, SIGNAL( clicked() ), this, SLOT( delimiterClicked() ) );
+ connect( matrixPB, SIGNAL( clicked() ), this, SLOT( matrixClicked() ) );
+ connect( functionsLW, SIGNAL( itemActivated(QListWidgetItem *) ), this, SLOT( functionSelected(QListWidgetItem *) ) );
+ connect( equationPB, SIGNAL( clicked() ), this, SLOT( equationClicked() ) );
+ connect( symbolsCO, SIGNAL(activated(int)), this, SLOT(showingPanel(int)));
+
+ string icon_path = libFileSearch("images/math", "sqrt-square", "xpm");
+ sqrtPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "space", "xpm");
+ spacePB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "style", "xpm");
+ stylePB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "font", "xpm");
+ fontPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "equation", "xpm");
+ equationPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "frac-square", "xpm");
+ fracPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "sub", "xpm");
+ subscriptPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "super", "xpm");
+ superscriptPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "matrix", "xpm");
+ matrixPB->setIcon(QIcon(toqstr(icon_path)));
+ icon_path = libFileSearch("images/math", "delim", "xpm");
+ delimitersPB->setIcon(QIcon(toqstr(icon_path)));
+
+ // function list
for (int i = 0; *function_names[i]; ++i) {
- functionsLB->insertItem(function_names[i]);
+ functionsLW->addItem(function_names[i]);
}
+ //functionsLW->setFixedWidth(functionsLW->sizeHint().width());
- for (int i = 0; i < nr_panels; ++i) {
- QScrollViewSingle * view = new QScrollViewSingle(symbolsWS);
- symbolsWS->addWidget(view, i);
- }
-
- // aboutToShow() only fires when != 0 in Qt 2 !
- symbolsWS->raiseWidget(0);
+ // add first symbol panel
addPanel(0);
- panel_initialised[0] = true;
-
- connect(symbolsWS, SIGNAL(aboutToShow(int)), this, SLOT(showingPanel(int)));
-
- Q3PopupMenu * m = new Q3PopupMenu(spacePB);
- m->setCaption(qt_("LyX: Math Spacing"));
- m->insertTearOffHandle();
- m->insertItem(qt_("Thin space \\,"), 1);
- m->insertItem(qt_("Medium space \\:"), 2);
- m->insertItem(qt_("Thick space \\;"), 3);
- m->insertItem(qt_("Quadratin space \\quad"), 4);
- m->insertItem(qt_("Double quadratin space \\qquad"), 5);
- m->insertItem(qt_("Negative space \\!"), 6);
- connect(m, SIGNAL(activated(int)), this, SLOT(insertSpace(int)));
- spacePB->setPopup(m);
-
- m = new Q3PopupMenu(sqrtPB);
- m->setCaption(qt_("LyX: Math Roots"));
- m->insertTearOffHandle();
- m->insertItem(qt_("Square root \\sqrt"), 1);
- m->insertItem(qt_("Cube root \\root"), 2);
- m->insertItem(qt_("Other root \\root"), 3);
- connect(m, SIGNAL(activated(int)), this, SLOT(insertRoot(int)));
+ showingPanel(0);
+ // 5 buttons + 2 margins + 1 scrollbar
+ symbolWS->setFixedWidth(5*40 + 2*10 + 15 );
+
+ // add menu's to the buttons
+ QMenu * m = new QMenu(spacePB);
+ m->setTitle(qt_("LyX: Math Spacing"));
+ m->setTearOffEnabled(true);
+ addMenuItem(m, qt_("Thin space \\,"), ",");
+ addMenuItem(m, qt_("Medium space \\:"), ":");
+ addMenuItem(m, qt_("Thick space \\;"), ";");
+ addMenuItem(m, qt_("Quadratin space \\quad"), "quad");
+ addMenuItem(m, qt_("Double quadratin space \\qquad"), "qquad");
+ addMenuItem(m, qt_("Negative space \\!"), "!");
+ spacePB->setMenu(m);
+
+ m = new QMenu(sqrtPB);
+ m->setTitle(qt_("LyX: Math Roots"));
+ m->setTearOffEnabled(true);
+ addMenuItem(m, qt_("Square root \\sqrt"), "sqrt");
+ QAction * ma = new QAction(qt_("Cube root \\root"), this);
+ connect(ma, SIGNAL(triggered()), this, SLOT(insertCubeRoot()));
+ m->addAction(ma);
+ addMenuItem(m, qt_("Other root \\root"), "root");
sqrtPB->setPopup(m);
- m = new Q3PopupMenu(stylePB);
- m->setCaption(qt_("LyX: Math Styles"));
- m->insertTearOffHandle();
- m->insertItem(qt_("Display style \\displaystyle"), 1);
- m->insertItem(qt_("Normal text style \\textstyle"), 2);
- m->insertItem(qt_("Script (small) style \\scriptstyle"), 3);
- m->insertItem(qt_("Scriptscript (smaller) style \\scriptscriptstyle"), 4);
- connect(m, SIGNAL(activated(int)), this, SLOT(insertStyle(int)));
+ m = new QMenu(stylePB);
+ m->setTitle(qt_("LyX: Math Styles"));
+ m->setTearOffEnabled(true);
+ addMenuItem(m, qt_("Display style \\displaystyle"), "displaystyle");
+ addMenuItem(m, qt_("Normal text style \\textstyle"), "textstyle");
+ addMenuItem(m, qt_("Script (small) style \\scriptstyle"), "scriptstyle");
+ addMenuItem(m, qt_("Scriptscript (smaller) style \\scriptscriptstyle"), "scriptscriptstyle");
stylePB->setPopup(m);
- m = new Q3PopupMenu(fontPB);
- m->setCaption(qt_("LyX: Math Fonts"));
- m->insertTearOffHandle();
- m->insertItem(qt_("Roman \\mathrm"), 1);
- m->insertItem(qt_("Bold \\mathbf"), 2);
- m->insertItem(qt_("Bold symbol \\boldsymbol"), 3);
- m->insertItem(qt_("Sans serif \\mathsf"), 4);
- m->insertItem(qt_("Italic \\mathit"), 5);
- m->insertItem(qt_("Typewriter \\mathtt"), 6);
- m->insertItem(qt_("Blackboard \\mathbb"), 7);
- m->insertItem(qt_("Fraktur \\mathfrak"), 8);
- m->insertItem(qt_("Calligraphic \\mathcal"), 9);
- m->insertItem(qt_("Normal text mode \\textrm"), 10);
- connect(m, SIGNAL(activated(int)), this, SLOT(insertFont(int)));
+ m = new QMenu(fontPB);
+ m->setTitle(qt_("LyX: Math Fonts"));
+ m->setTearOffEnabled(true);
+ addMenuItem(m, qt_("Roman \\mathrm"), "mathrm");
+ addMenuItem(m, qt_("Bold \\mathbf"), "mathbf");
+ addMenuItem(m, qt_("Bold symbol \\boldsymbol"), "boldsymbol");
+ addMenuItem(m, qt_("Sans serif \\mathsf"), "mathsf");
+ addMenuItem(m, qt_("Italic \\mathit"), "mathit");
+ addMenuItem(m, qt_("Typewriter \\mathtt"), "mathtt");
+ addMenuItem(m, qt_("Blackboard \\mathbb"), "mathbb");
+ addMenuItem(m, qt_("Fraktur \\mathfrak"), "mathfrak");
+ addMenuItem(m, qt_("Calligraphic \\mathcal"), "mathcal");
+ addMenuItem(m, qt_("Normal text mode \\textrm"), "textrm");
fontPB->setPopup(m);
}
+void QMathDialog::addMenuItem(QMenu * menu, const QString & label, const std::string & action)
+{
+ QMAction * ma = new QMAction(label,action, this);
+ connect(ma, SIGNAL(action(const std::string &)), this, SLOT(symbol_clicked(const std::string &)));
+ menu->addAction(ma);
+}
void QMathDialog::showingPanel(int num)
{
- if (panel_initialised[num])
- return;
-
- addPanel(num);
+ if (!panel_initialised[num])
+ addPanel(num);
- panel_initialised[num] = true;
+ symbolWS->setCurrentIndex(num);
}
void QMathDialog::addPanel(int num)
{
- QScrollViewSingle * view = static_cast<QScrollViewSingle*>(symbolsWS->widget(num));
- IconPalette * p = makePanel(view->viewport(), panels[num]);
- view->setChild(p);
+ QScrollArea * sc = new QScrollArea(symbolWS);
+ IconPalette * p = makePanel(this, panels[num]);
+ p->resize(40 * 5, p->height());
+ sc->setWidget(p);
+ symbolWS->insertWidget(num,sc);
+ panel_initialised[num] = true;
}
void QMathDialog::expandClicked()
{
- int const id = symbolsWS->id(symbolsWS->visibleWidget());
+ int const id = symbolsCO->currentIndex();
IconPalette * p = makePanel(0, panels[id]);
string s = "LyX: ";
- s += fromqstr(symbolsCO->text(id));
+ s += fromqstr(symbolsCO->currentText());
p->setCaption(toqstr(s));
p->resize(40 * 5, p->height());
p->show();
}
-void QMathDialog::functionSelected(const QString & str)
+void QMathDialog::functionSelected(QListWidgetItem * item)
{
- form_->controller().dispatchInsert(fromqstr(str));
+ form_->controller().dispatchInsert(fromqstr(item->text()));
}
}
-void QMathDialog::insertSpace(int id)
-{
- string str;
- switch (id) {
- case 1: str = ","; break;
- case 2: str = ":"; break;
- case 3: str = ";"; break;
- case 4: str = "quad"; break;
- case 5: str = "qquad"; break;
- case 6: str = "!"; break;
- default: return;
- }
- form_->controller().dispatchInsert(str);
-}
-
-
-void QMathDialog::insertRoot(int id)
+void QMathDialog::insertCubeRoot()
{
- switch (id) {
- case 1:
- form_->controller().dispatchInsert("sqrt");
- break;
- case 2:
- form_->controller().dispatchCubeRoot();
- break;
- case 3:
- form_->controller().dispatchInsert("root");
- break;
- }
+ form_->controller().dispatchCubeRoot();
}
-void QMathDialog::insertStyle(int id)
-{
- string str;
- switch (id) {
- case 1: str = "displaystyle"; break;
- case 2: str = "textstyle"; break;
- case 3: str = "scriptstyle"; break;
- case 4: str = "scriptscriptstyle"; break;
- default: return;
- }
- form_->controller().dispatchInsert(str);
-}
-
-
-void QMathDialog::insertFont(int id)
-{
- string str;
- switch (id) {
- case 1: str = "mathrm"; break;
- case 2: str = "mathbf"; break;
- case 3: str = "boldsymbol"; break;
- case 4: str = "mathsf"; break;
- case 5: str = "mathit"; break;
- case 6: str = "mathtt"; break;
- case 7: str = "mathbb"; break;
- case 8: str = "mathfrak"; break;
- case 9: str = "mathcal"; break;
- case 10: str = "textrm"; break;
- default: return;
- }
- form_->controller().dispatchInsert(str);
-}
-
} // namespace frontend
} // namespace lyx