3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
8 * Full author contact details are available in file CREDITS.
13 #include "QMathDialog.h"
17 #include <QScrollArea>
19 #include <QPushButton>
20 #include <QListWidget>
21 #include <QListWidgetItem>
24 #include "iconpalette.h"
25 #include "qt_helpers.h"
26 #include "controllers/ControlMath.h"
28 #include "support/filetools.h"
34 using support::FileName;
35 using support::libFileSearch;
42 char const ** panels[] = {
43 latex_bop, latex_varsz, latex_brel, latex_greek, latex_arrow,
44 latex_dots, latex_deco, latex_misc, latex_ams_ops,
45 latex_ams_rel, latex_ams_nrel, latex_ams_arrows,
49 int const nr_panels = sizeof(panels)/sizeof(panels[0]);
51 int panel_index[nr_panels];
56 QMathDialog::QMathDialog(QMath * form)
61 // enlarge the symbols ComboBox (no scrollbar)
62 //symbolsCO->setSizeLimit(13);
64 connect( tearoffPB, SIGNAL( clicked() ), this, SLOT( expandClicked() ) );
65 connect( closePB, SIGNAL( clicked() ), this, SLOT( accept() ) );
66 connect( fracPB, SIGNAL( clicked() ), this, SLOT( fracClicked() ) );
67 connect( superscriptPB, SIGNAL( clicked() ), this, SLOT( superscriptClicked() ) );
68 connect( subscriptPB, SIGNAL( clicked() ), this, SLOT( subscriptClicked() ) );
69 connect( delimitersPB, SIGNAL( clicked() ), this, SLOT( delimiterClicked() ) );
70 connect( matrixPB, SIGNAL( clicked() ), this, SLOT( matrixClicked() ) );
71 connect( functionsLW, SIGNAL( itemActivated(QListWidgetItem *) ), this, SLOT( functionSelected(QListWidgetItem *) ) );
72 connect( equationPB, SIGNAL( clicked() ), this, SLOT( equationClicked() ) );
73 connect( symbolsCO, SIGNAL(activated(int)), this, SLOT(showingPanel(int)));
75 FileName icon_path = libFileSearch("images/math", "sqrt-square", "xpm");
76 sqrtPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
77 icon_path = libFileSearch("images/math", "space", "xpm");
78 spacePB->setIcon(QIcon(toqstr(icon_path.absFilename())));
79 icon_path = libFileSearch("images/math", "style", "xpm");
80 stylePB->setIcon(QIcon(toqstr(icon_path.absFilename())));
81 icon_path = libFileSearch("images/math", "font", "xpm");
82 fontPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
83 icon_path = libFileSearch("images/math", "equation", "xpm");
84 equationPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
85 icon_path = libFileSearch("images/math", "frac-square", "xpm");
86 fracPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
87 icon_path = libFileSearch("images/math", "sub", "xpm");
88 subscriptPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
89 icon_path = libFileSearch("images/math", "super", "xpm");
90 superscriptPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
91 icon_path = libFileSearch("images/math", "matrix", "xpm");
92 matrixPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
93 icon_path = libFileSearch("images/math", "delim", "xpm");
94 delimitersPB->setIcon(QIcon(toqstr(icon_path.absFilename())));
97 for (int i = 0; *function_names[i]; ++i) {
98 functionsLW->addItem(function_names[i]);
100 //functionsLW->setFixedWidth(functionsLW->sizeHint().width());
102 // show first symbol panel
105 // add menu's to the buttons
106 QMenu * m = new QMenu(spacePB);
107 m->setTitle(qt_("LyX: Math Spacing"));
108 m->setTearOffEnabled(true);
109 addMenuItem(m, qt_("Thin space \\,"), ",");
110 addMenuItem(m, qt_("Medium space \\:"), ":");
111 addMenuItem(m, qt_("Thick space \\;"), ";");
112 addMenuItem(m, qt_("Quadratin space \\quad"), "quad");
113 addMenuItem(m, qt_("Double quadratin space \\qquad"), "qquad");
114 addMenuItem(m, qt_("Negative space \\!"), "!");
117 m = new QMenu(sqrtPB);
118 m->setTitle(qt_("LyX: Math Roots"));
119 m->setTearOffEnabled(true);
120 addMenuItem(m, qt_("Square root \\sqrt"), "sqrt");
121 QAction * ma = new QAction(qt_("Cube root \\root"), this);
122 connect(ma, SIGNAL(triggered()), this, SLOT(insertCubeRoot()));
124 addMenuItem(m, qt_("Other root \\root"), "root");
127 m = new QMenu(stylePB);
128 m->setTitle(qt_("LyX: Math Styles"));
129 m->setTearOffEnabled(true);
130 addMenuItem(m, qt_("Display style \\displaystyle"), "displaystyle");
131 addMenuItem(m, qt_("Normal text style \\textstyle"), "textstyle");
132 addMenuItem(m, qt_("Script (small) style \\scriptstyle"), "scriptstyle");
133 addMenuItem(m, qt_("Scriptscript (smaller) style \\scriptscriptstyle"), "scriptscriptstyle");
136 m = new QMenu(fracPB);
137 m->setTitle(qt_("LyX: Fractions"));
138 m->setTearOffEnabled(true);
139 addMenuItem(m, qt_("Standard \\frac"), "frac");
140 addMenuItem(m, qt_("No hor. line \\atop"), "atop");
141 addMenuItem(m, qt_("Nice \\nicefrac"), "nicefrac");
142 addMenuItem(m, qt_("Text frac (amsmath) \\tfrac"), "tfrac");
143 addMenuItem(m, qt_("Display frac (amsmath) \\dfrac"), "dfrac");
144 addMenuItem(m, qt_("Binomial \\choose"), "choose");
147 m = new QMenu(fontPB);
148 m->setTitle(qt_("LyX: Math Fonts"));
149 m->setTearOffEnabled(true);
150 addMenuItem(m, qt_("Roman \\mathrm"), "mathrm");
151 addMenuItem(m, qt_("Bold \\mathbf"), "mathbf");
152 addMenuItem(m, qt_("Bold symbol \\boldsymbol"), "boldsymbol");
153 addMenuItem(m, qt_("Sans serif \\mathsf"), "mathsf");
154 addMenuItem(m, qt_("Italic \\mathit"), "mathit");
155 addMenuItem(m, qt_("Typewriter \\mathtt"), "mathtt");
156 addMenuItem(m, qt_("Blackboard \\mathbb"), "mathbb");
157 addMenuItem(m, qt_("Fraktur \\mathfrak"), "mathfrak");
158 addMenuItem(m, qt_("Calligraphic \\mathcal"), "mathcal");
159 addMenuItem(m, qt_("Normal text mode \\textrm"), "textrm");
163 void QMathDialog::addMenuItem(QMenu * menu, const QString & label, const std::string & action)
165 QMAction * ma = new QMAction(label,action, this);
166 connect(ma, SIGNAL(action(const std::string &)), this, SLOT(symbol_clicked(const std::string &)));
170 void QMathDialog::showingPanel(int num)
172 if (!panel_index[num])
175 symbolWS->setCurrentIndex(panel_index[num]);
179 IconPalette * QMathDialog::makePanel(QWidget * parent, char const ** entries)
181 IconPalette * p = new IconPalette(parent, entries);
182 // Leave these std:: qualifications alone !
183 connect(p, SIGNAL(button_clicked(const std::string &)),
184 this, SLOT(symbol_clicked(const std::string &)));
190 void QMathDialog::addPanel(int num)
192 QScrollArea * sc = new QScrollArea(symbolWS);
193 IconPalette * p = makePanel(this, panels[num]);
195 panel_index[num] = symbolWS->addWidget(sc);
199 void QMathDialog::symbol_clicked(const string & str)
201 form_->controller().dispatchInsert(str);
205 void QMathDialog::fracClicked()
207 form_->controller().dispatchInsert("frac");
211 void QMathDialog::delimiterClicked()
213 form_->controller().showDialog("mathdelimiter");
217 void QMathDialog::expandClicked()
219 int const id = symbolsCO->currentIndex();
220 IconPalette * p = makePanel(this, panels[id]);
222 s += fromqstr(symbolsCO->currentText());
223 p->setWindowTitle(toqstr(s));
224 p->setWindowFlags(Qt::Dialog);
229 void QMathDialog::functionSelected(QListWidgetItem * item)
231 form_->controller().dispatchInsert(fromqstr(item->text()));
235 void QMathDialog::matrixClicked()
237 form_->controller().showDialog("mathmatrix");
241 void QMathDialog::equationClicked()
243 form_->controller().dispatchToggleDisplay();
247 void QMathDialog::subscriptClicked()
249 form_->controller().dispatchSubscript();
253 void QMathDialog::superscriptClicked()
255 form_->controller().dispatchSuperscript();
259 void QMathDialog::insertCubeRoot()
261 form_->controller().dispatchCubeRoot();
265 } // namespace frontend
268 #include "QMathDialog_moc.cpp"