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"
14 #include "QMathDialog.h"
17 #include "ControlMath.h"
18 #include "iconpalette.h"
20 #include <qapplication.h>
21 #include <qwidgetstack.h>
22 #include <qcombobox.h>
25 #include <qscrollview.h>
32 class QScrollViewSingle : public QScrollView {
34 QScrollViewSingle(QWidget * p)
35 : QScrollView(p), w_(0) {
36 setResizePolicy(Manual);
37 setHScrollBarMode(AlwaysOff);
38 setVScrollBarMode(AlwaysOn);
39 setBackgroundMode(PaletteBackground);
40 viewport()->setBackgroundMode(PaletteBackground);
43 void setChild(QWidget * w) {
45 setMinimumWidth(verticalScrollBar()->width() + w_->width() + 4);
50 virtual void resizeEvent(QResizeEvent * e) {
51 QScrollView::resizeEvent(e);
55 w_->resize(viewport()->width(), w_->height());
56 // force the resize to get accurate scrollbars
57 qApp->processEvents();
58 resizeContents(w_->width(), w_->height());
66 char const ** panels[] = {
67 latex_bop, latex_varsz, latex_brel, latex_greek, latex_arrow,
68 latex_dots, latex_deco, latex_misc, latex_ams_ops,
69 latex_ams_rel, latex_ams_nrel, latex_ams_arrows,
72 int const nr_panels = sizeof(panels)/sizeof(panels[0]);
74 bool panel_initialised[nr_panels];
78 QMathDialog::QMathDialog(QMath * form)
79 : QMathDialogBase(0, 0, false, 0),
82 connect(symbolsCO, SIGNAL(activated(int)), symbolsWS, SLOT(raiseWidget(int)));
84 for (int i = 0; *function_names[i]; ++i) {
85 functionsLB->insertItem(function_names[i]);
88 for (int i = 0; i < nr_panels; ++i) {
89 QScrollViewSingle * view = new QScrollViewSingle(symbolsWS);
90 symbolsWS->addWidget(view, i);
93 // aboutToShow() only fires when != 0 in Qt 2 !
94 symbolsWS->raiseWidget(0);
96 panel_initialised[0] = true;
98 connect(symbolsWS, SIGNAL(aboutToShow(int)), this, SLOT(showingPanel(int)));
102 void QMathDialog::showingPanel(int num)
104 if (panel_initialised[num])
108 panel_initialised[num] = true;
112 IconPalette * QMathDialog::makePanel(QWidget * parent, char const ** entries)
114 IconPalette * p = new IconPalette(parent);
115 for (int i = 0; *entries[i]; ++i) {
116 string xpm_name = LibFileSearch("images/math/", entries[i], "xpm");
117 p->add(QPixmap(xpm_name.c_str()), entries[i], string("\\") + entries[i]);
119 connect(p, SIGNAL(button_clicked(string)), this, SLOT(symbol_clicked(string)));
125 void QMathDialog::addPanel(int num)
127 QScrollViewSingle * view = static_cast<QScrollViewSingle*>(symbolsWS->visibleWidget());
128 IconPalette * p = makePanel(view->viewport(), panels[num]);
133 void QMathDialog::symbol_clicked(string str)
135 form_->insert_symbol(str);
139 void QMathDialog::fracClicked()
141 form_->insert_symbol("frac");
145 void QMathDialog::sqrtClicked()
147 form_->insert_symbol("sqrt");
151 void QMathDialog::delimiterClicked()
156 void QMathDialog::expandClicked()
158 int const id = symbolsWS->id(symbolsWS->visibleWidget());
159 IconPalette * p = makePanel(0, panels[id]);
161 s += symbolsCO->text(id).latin1();
162 p->setCaption(s.c_str());
163 p->resize(40 * 5, p->height());
165 p->setMaximumSize(p->width(), p->height());
169 void QMathDialog::functionSelected(const QString & str)
171 form_->insert_symbol(str.latin1());
175 void QMathDialog::matrixClicked()
180 void QMathDialog::spaceClicked()
185 void QMathDialog::styleClicked()
190 void QMathDialog::subscriptClicked()
196 void QMathDialog::superscriptClicked()
198 form_->superscript();