]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt4/QMathDialog.C
rename LFUN enum values according to their command (as used in th minibuffer/bind...
[lyx.git] / src / frontends / qt4 / QMathDialog.C
index 2353de891e00e6aaa62365afbd0d658dba256272..26c9a0cc2aae706bd4eb5f05e31c05b6601257b3 100644 (file)
 
 #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 {
 
@@ -88,91 +60,110 @@ QMathDialog::QMathDialog(QMath * form)
        // 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);
 }
 
 
@@ -192,9 +183,12 @@ IconPalette * QMathDialog::makePanel(QWidget * parent, char const ** entries)
 
 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;
 }
 
 
@@ -218,10 +212,10 @@ void QMathDialog::delimiterClicked()
 
 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();
@@ -229,9 +223,9 @@ void QMathDialog::expandClicked()
 }
 
 
-void QMathDialog::functionSelected(const QString & str)
+void QMathDialog::functionSelected(QListWidgetItem * item)
 {
-       form_->controller().dispatchInsert(fromqstr(str));
+       form_->controller().dispatchInsert(fromqstr(item->text()));
 }
 
 
@@ -259,70 +253,11 @@ void QMathDialog::superscriptClicked()
 }
 
 
-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