3 * Copyright 2001 the LyX Team
4 * Read the file COPYING
6 * \author John Levon <moz@compsoc.man.ac.uk>
11 #include "support/filetools.h"
15 #include "QMathDialog.h"
18 #include "ControlMath.h"
19 #include "iconpalette.h"
21 #include <qapplication.h>
22 #include <qwidgetstack.h>
23 #include <qcombobox.h>
24 #include <qpushbutton.h>
27 #include <qscrollview.h>
29 #include <qpopupmenu.h>
36 class QScrollViewSingle : public QScrollView {
38 QScrollViewSingle(QWidget * p)
39 : QScrollView(p), w_(0) {
40 setResizePolicy(Manual);
41 setHScrollBarMode(AlwaysOff);
42 setVScrollBarMode(AlwaysOn);
43 setBackgroundMode(PaletteBackground);
44 viewport()->setBackgroundMode(PaletteBackground);
47 void setChild(QWidget * w) {
49 setMinimumWidth(verticalScrollBar()->width() + w_->width() + 4);
54 virtual void resizeEvent(QResizeEvent * e) {
55 QScrollView::resizeEvent(e);
59 w_->resize(viewport()->width(), w_->height());
60 // force the resize to get accurate scrollbars
61 qApp->processEvents();
62 resizeContents(w_->width(), w_->height());
70 char const ** panels[] = {
71 latex_bop, latex_varsz, latex_brel, latex_greek, latex_arrow,
72 latex_dots, latex_deco, latex_misc, latex_ams_ops,
73 latex_ams_rel, latex_ams_nrel, latex_ams_arrows,
76 int const nr_panels = sizeof(panels)/sizeof(panels[0]);
78 bool panel_initialised[nr_panels];
82 QMathDialog::QMathDialog(QMath * form)
83 : QMathDialogBase(0, 0, false, 0),
86 connect(symbolsCO, SIGNAL(activated(int)), symbolsWS, SLOT(raiseWidget(int)));
88 for (int i = 0; *function_names[i]; ++i) {
89 functionsLB->insertItem(function_names[i]);
92 for (int i = 0; i < nr_panels; ++i) {
93 QScrollViewSingle * view = new QScrollViewSingle(symbolsWS);
94 symbolsWS->addWidget(view, i);
97 // aboutToShow() only fires when != 0 in Qt 2 !
98 symbolsWS->raiseWidget(0);
100 panel_initialised[0] = true;
102 connect(symbolsWS, SIGNAL(aboutToShow(int)), this, SLOT(showingPanel(int)));
104 space_menu_ = new QPopupMenu(spacePB);
105 space_menu_->insertItem(_("Thin space \\,"), 1);
106 space_menu_->insertItem(_("Medium space \\:"), 2);
107 space_menu_->insertItem(_("Thick space \\;"), 3);
108 space_menu_->insertItem(_("Quadratin space \\quad"), 4);
109 space_menu_->insertItem(_("Double quadratin space \\qquad"), 5);
110 space_menu_->insertItem(_("Negative space \\!"), 6);
111 connect(space_menu_, SIGNAL(activated(int)), this, SLOT(insertSpace(int)));
115 void QMathDialog::showingPanel(int num)
117 if (panel_initialised[num])
122 // Qt needs to catch up. Dunno why.
123 qApp->processEvents();
125 panel_initialised[num] = true;
129 IconPalette * QMathDialog::makePanel(QWidget * parent, char const ** entries)
131 IconPalette * p = new IconPalette(parent);
132 for (int i = 0; *entries[i]; ++i) {
133 string xpm_name = LibFileSearch("images/math/", entries[i], "xpm");
134 p->add(QPixmap(xpm_name.c_str()), entries[i], string("\\") + entries[i]);
136 connect(p, SIGNAL(button_clicked(string)), this, SLOT(symbol_clicked(string)));
142 void QMathDialog::addPanel(int num)
144 QScrollViewSingle * view = static_cast<QScrollViewSingle*>(symbolsWS->visibleWidget());
145 IconPalette * p = makePanel(view->viewport(), panels[num]);
150 void QMathDialog::insertSpace(int id)
154 case 1: str = ","; break;
155 case 2: str = ":"; break;
156 case 3: str = ";"; break;
157 case 4: str = "quad"; break;
158 case 5: str = "qquad"; break;
159 case 6: str = "!"; break;
161 form_->insert_symbol(str);
165 void QMathDialog::symbol_clicked(string str)
167 form_->insert_symbol(str);
171 void QMathDialog::fracClicked()
173 form_->insert_symbol("frac");
177 void QMathDialog::sqrtClicked()
179 form_->insert_symbol("sqrt");
183 void QMathDialog::delimiterClicked()
188 void QMathDialog::expandClicked()
190 int const id = symbolsWS->id(symbolsWS->visibleWidget());
191 IconPalette * p = makePanel(0, panels[id]);
193 s += symbolsCO->text(id).latin1();
194 p->setCaption(s.c_str());
195 p->resize(40 * 5, p->height());
197 p->setMaximumSize(p->width(), p->height());
201 void QMathDialog::functionSelected(const QString & str)
203 form_->insert_symbol(str.latin1());
207 void QMathDialog::matrixClicked()
212 void QMathDialog::spaceClicked()
214 space_menu_->exec(QCursor::pos());
218 void QMathDialog::styleClicked()
223 void QMathDialog::subscriptClicked()
229 void QMathDialog::superscriptClicked()
231 form_->superscript();