math stuff

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@20826 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
André Pönitz 2007-10-07 20:34:09 +00:00
parent cd64f187e6
commit f1c1cba9c3
12 changed files with 84 additions and 105 deletions

View File

@ -22,8 +22,6 @@
#include <boost/bind.hpp>
#include <algorithm>
#include "frontends/controllers/ControlMath.h"
namespace lyx {
using support::compare_ascii_no_case;

View File

@ -9,13 +9,11 @@ noinst_LTLIBRARIES = liblyxcontrollers.la
SOURCEFILES = \
Dialog.cpp \
ButtonPolicy.cpp \
ControlMath.cpp \
frontend_helpers.cpp
HEADERFILES = \
Dialog.h \
ButtonPolicy.h \
ControlMath.h \
frontend_helpers.h
if MONOLITHIC_CONTROLLERS

View File

@ -13,17 +13,6 @@
#include "Dialogs.h"
#include "GuiDialog.h"
#include "ButtonController.h"
#include "DialogView.h"
#include "DockView.h"
#include "GuiDelimiter.h"
#include "GuiIndex.h"
#include "GuiMathMatrix.h"
#include "GuiView.h"
// Uncomment this if you prefer dock widget
//#define USE_DOCK_WIDGET
#include "qt_helpers.h"
#include <boost/assert.hpp>
@ -90,7 +79,7 @@ Dialog * createGuiIndex(LyXView & lv);
Dialog * createGuiLabel(LyXView & lv);
Dialog * createGuiListings(LyXView & lv);
Dialog * createGuiLog(LyXView & lv);
Dialog * createGuiMath(LyXView & lv);
Dialog * createGuiMathMatrix(LyXView & lv);
Dialog * createGuiNomenclature(LyXView & lv);
Dialog * createGuiNote(LyXView & lv);
Dialog * createGuiParagraph(LyXView & lv);
@ -170,9 +159,9 @@ Dialog * Dialogs::build(string const & name)
if (name == "view-source")
return createGuiViewSource(lyxview_);
if (name == "mathdelimiter")
return new GuiDelimiterDialog(lyxview_);
return createGuiDelimiter(lyxview_);
if (name == "mathmatrix")
return new GuiMathMatrixDialog(lyxview_);
return createGuiMathMatrix(lyxview_);
if (name == "note")
return createGuiNote(lyxview_);
if (name == "paragraph")

View File

@ -69,12 +69,12 @@ namespace lyx {
namespace frontend {
GuiDelimiterDialog::GuiDelimiterDialog(LyXView & lv)
: GuiDialog(lv, "mathdelimiter")
GuiDelimiter::GuiDelimiter(LyXView & lv)
: GuiMath(lv, "mathdelimiter")
{
setupUi(this);
setViewTitle(_("Math Delimiter"));
setController(new ControlMath(*this));
setController(this, false);
connect(closePB, SIGNAL(clicked()), this, SLOT(accept()));
@ -89,7 +89,7 @@ GuiDelimiterDialog::GuiDelimiterDialog(LyXView & lv)
int const end = nr_latex_delimiters - 1;
for (int i = 0; i < end; ++i) {
string const delim = latex_delimiters[i];
MathSymbol const & ms = controller().mathSymbol(delim);
MathSymbol const & ms = mathSymbol(delim);
QString symbol(ms.fontcode?
QChar(ms.fontcode) : toqstr(docstring(1, ms.unicode)));
QListWidgetItem * lwi = new QListWidgetItem(symbol);
@ -103,7 +103,7 @@ GuiDelimiterDialog::GuiDelimiterDialog(LyXView & lv)
}
for (int i = 0; i != leftLW->count(); ++i) {
MathSymbol const & ms = controller().mathSymbol(
MathSymbol const & ms = mathSymbol(
fromqstr(leftLW->item(i)->toolTip()));
rightLW->addItem(list_items[doMatch(ms.unicode)]->clone());
}
@ -122,15 +122,9 @@ GuiDelimiterDialog::GuiDelimiterDialog(LyXView & lv)
}
ControlMath & GuiDelimiterDialog::controller()
char_type GuiDelimiter::doMatch(char_type const symbol)
{
return static_cast<ControlMath &>(GuiDialog::controller());
}
char_type GuiDelimiterDialog::doMatch(char_type const symbol)
{
string const & str = controller().texName(symbol);
string const & str = texName(symbol);
string match;
if (str == "(") match = ")";
else if (str == ")") match = "(";
@ -149,11 +143,11 @@ char_type GuiDelimiterDialog::doMatch(char_type const symbol)
else if (str == "/") match = "backslash";
else return symbol;
return controller().mathSymbol(match).unicode;
return mathSymbol(match).unicode;
}
void GuiDelimiterDialog::updateTeXCode(int size)
void GuiDelimiter::updateTeXCode(int size)
{
bool const bigsize = size != 0;
@ -191,39 +185,39 @@ void GuiDelimiterDialog::updateTeXCode(int size)
}
void GuiDelimiterDialog::on_insertPB_clicked()
void GuiDelimiter::on_insertPB_clicked()
{
if (sizeCO->currentIndex() == 0)
controller().dispatchDelim(fromqstr(tex_code_));
dispatchDelim(fromqstr(tex_code_));
else {
QString command = '"' + tex_code_ + '"';
command.replace(' ', "\" \"");
controller().dispatchBigDelim(fromqstr(command));
dispatchBigDelim(fromqstr(command));
}
}
void GuiDelimiterDialog::on_sizeCO_activated(int index)
void GuiDelimiter::on_sizeCO_activated(int index)
{
updateTeXCode(index);
}
void GuiDelimiterDialog::on_leftLW_itemActivated(QListWidgetItem *)
void GuiDelimiter::on_leftLW_itemActivated(QListWidgetItem *)
{
on_insertPB_clicked();
accept();
}
void GuiDelimiterDialog::on_rightLW_itemActivated(QListWidgetItem *)
void GuiDelimiter::on_rightLW_itemActivated(QListWidgetItem *)
{
on_insertPB_clicked();
accept();
}
void GuiDelimiterDialog::on_leftLW_currentRowChanged(int item)
void GuiDelimiter::on_leftLW_currentRowChanged(int item)
{
if (matchCB->isChecked())
rightLW->setCurrentRow(item);
@ -232,7 +226,7 @@ void GuiDelimiterDialog::on_leftLW_currentRowChanged(int item)
}
void GuiDelimiterDialog::on_rightLW_currentRowChanged(int item)
void GuiDelimiter::on_rightLW_currentRowChanged(int item)
{
if (matchCB->isChecked())
leftLW->setCurrentRow(item);
@ -241,7 +235,7 @@ void GuiDelimiterDialog::on_rightLW_currentRowChanged(int item)
}
void GuiDelimiterDialog::on_matchCB_stateChanged(int state)
void GuiDelimiter::on_matchCB_stateChanged(int state)
{
if (state == Qt::Checked)
on_leftLW_currentRowChanged(leftLW->currentRow());
@ -250,6 +244,9 @@ void GuiDelimiterDialog::on_matchCB_stateChanged(int state)
}
Dialog * createGuiDelimiter(LyXView & lv) { return new GuiDelimiter(lv); }
} // namespace frontend
} // namespace lyx

View File

@ -1,6 +1,6 @@
// -*- C++ -*-
/**
* \file GuiDelimiterDialog.h
* \file GuiDelimiter.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
@ -12,8 +12,7 @@
#ifndef GUIDELIMITERDIALOG_H
#define GUIDELIMITERDIALOG_H
#include "GuiDialog.h"
#include "ControlMath.h"
#include "GuiMath.h"
#include "ui_DelimiterUi.h"
class QListWidgetItem;
@ -21,12 +20,12 @@ class QListWidgetItem;
namespace lyx {
namespace frontend {
class GuiDelimiterDialog : public GuiDialog, public Ui::DelimiterUi
class GuiDelimiter : public GuiMath, public Ui::DelimiterUi
{
Q_OBJECT
public:
GuiDelimiterDialog(LyXView & lv);
GuiDelimiter(LyXView & lv);
public Q_SLOTS:
void on_leftLW_itemActivated(QListWidgetItem *);
@ -42,8 +41,6 @@ private:
char_type doMatch(char_type const symbol);
///
void updateTeXCode(int size);
/// parent controller
ControlMath & controller();
/// TeX code that will be inserted.
QString tex_code_;

View File

@ -1,5 +1,5 @@
/**
* \file ControlMath.cpp
* \file GuiMath.cpp
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
@ -10,7 +10,7 @@
#include <config.h>
#include "ControlMath.h"
#include "GuiMath.h"
#include "debug.h"
#include "FuncRequest.h"
@ -20,8 +20,8 @@ using std::map;
namespace lyx {
namespace frontend {
ControlMath::ControlMath(Dialog & dialog)
: Controller(dialog)
GuiMath::GuiMath(LyXView & lv, std::string const & name)
: GuiDialog(lv, name), Controller(this)
{
// FIXME: Ideally, those unicode codepoints would be defined
// in "lib/symbols". Unfortunately, some of those are already
@ -62,31 +62,31 @@ ControlMath::ControlMath(Dialog & dialog)
}
void ControlMath::dispatchFunc(kb_action action, string const & arg) const
void GuiMath::dispatchFunc(kb_action action, string const & arg) const
{
dispatch(FuncRequest(action, arg));
}
void ControlMath::dispatchInsert(string const & name) const
void GuiMath::dispatchInsert(string const & name) const
{
dispatchFunc(LFUN_MATH_INSERT, '\\' + name);
}
void ControlMath::dispatchSubscript() const
void GuiMath::dispatchSubscript() const
{
dispatchFunc(LFUN_MATH_INSERT, "_");
}
void ControlMath::dispatchSuperscript() const
void GuiMath::dispatchSuperscript() const
{
dispatchFunc(LFUN_MATH_INSERT, "^");
}
void ControlMath::dispatchCubeRoot() const
void GuiMath::dispatchCubeRoot() const
{
dispatchFunc(LFUN_MATH_INSERT, "\\root");
dispatchFunc(LFUN_SELF_INSERT, "3");
@ -94,37 +94,37 @@ void ControlMath::dispatchCubeRoot() const
}
void ControlMath::dispatchMatrix(string const & str) const
void GuiMath::dispatchMatrix(string const & str) const
{
dispatchFunc(LFUN_MATH_MATRIX, str);
}
void ControlMath::dispatchDelim(string const & str) const
void GuiMath::dispatchDelim(string const & str) const
{
dispatchFunc(LFUN_MATH_DELIM, str);
}
void ControlMath::dispatchBigDelim(string const & str) const
void GuiMath::dispatchBigDelim(string const & str) const
{
dispatchFunc(LFUN_MATH_BIGDELIM, str);
}
void ControlMath::dispatchToggleDisplay() const
void GuiMath::dispatchToggleDisplay() const
{
dispatchFunc(LFUN_MATH_DISPLAY);
}
void ControlMath::showDialog(string const & name) const
void GuiMath::showDialog(string const & name) const
{
dispatchFunc(LFUN_DIALOG_SHOW, name);
}
MathSymbol const & ControlMath::mathSymbol(string tex_name) const
MathSymbol const & GuiMath::mathSymbol(string tex_name) const
{
map<string, MathSymbol>::const_iterator it =
math_symbols_.find(tex_name);
@ -137,7 +137,7 @@ MathSymbol const & ControlMath::mathSymbol(string tex_name) const
}
std::string const & ControlMath::texName(char_type math_symbol) const
std::string const & GuiMath::texName(char_type math_symbol) const
{
map<char_type, string>::const_iterator it =
tex_names_.find(math_symbol);

View File

@ -1,6 +1,6 @@
// -*- C++ -*-
/**
* \file ControlMath.h
* \file GuiMath.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
@ -9,10 +9,10 @@
* Full author contact details are available in file CREDITS.
*/
#ifndef CONTROLMATH_H
#define CONTROLMATH_H
#ifndef GUIMATH_H
#define GUIMATH_H
#include "Dialog.h"
#include "GuiDialog.h"
#include "lfuns.h" // for kb_action
#include "Font.h"
@ -33,18 +33,22 @@ struct MathSymbol {
};
class ControlMath : public Controller {
class GuiMath : public GuiDialog, public Controller
{
public:
ControlMath(Dialog &);
GuiMath(LyXView & lv, std::string const & name);
/// Nothing to initialise in this case.
virtual bool initialiseParams(std::string const &) { return true; }
virtual void clearParams() {}
virtual void dispatchParams() {}
virtual bool isBufferDependent() const { return true; }
bool initialiseParams(std::string const &) { return true; }
void clearParams() {}
void dispatchParams() {}
bool isBufferDependent() const { return true; }
Controller & controller() { return *this; }
/// dispatch an LFUN
void dispatchFunc(kb_action action, std::string const & arg = std::string()) const;
void dispatchFunc(kb_action action,
std::string const & arg = std::string()) const;
/// Insert a math symbol into the doc.
void dispatchInsert(std::string const & name) const;
/// Insert a subscript.
@ -84,4 +88,4 @@ private:
} // namespace frontend
} // namespace lyx
#endif // NOT CONTROLMATH
#endif // GUIMATH_H

View File

@ -12,7 +12,6 @@
#include "GuiMathMatrix.h"
#include "ControlMath.h"
#include "EmptyTable.h"
#include "qt_helpers.h"
#include "gettext.h"
@ -29,12 +28,12 @@ using std::string;
namespace lyx {
namespace frontend {
GuiMathMatrixDialog::GuiMathMatrixDialog(LyXView & lv)
: GuiDialog(lv, "mathmatrix")
GuiMathMatrix::GuiMathMatrix(LyXView & lv)
: GuiMath(lv, "mathmatrix")
{
setupUi(this);
setViewTitle(_("Math Matrix"));
setController(new ControlMath(*this));
setController(this, false);
table->setMinimumSize(100, 100);
rowsSB->setValue(5);
@ -65,13 +64,7 @@ GuiMathMatrixDialog::GuiMathMatrixDialog(LyXView & lv)
}
ControlMath & GuiMathMatrixDialog::controller()
{
return static_cast<ControlMath &>(GuiDialog::controller());
}
void GuiMathMatrixDialog::columnsChanged(int)
void GuiMathMatrix::columnsChanged(int)
{
char h_align_str[80] = "c";
int const nx = int(columnsSB->value());
@ -83,18 +76,18 @@ void GuiMathMatrixDialog::columnsChanged(int)
}
void GuiMathMatrixDialog::rowsChanged(int)
void GuiMathMatrix::rowsChanged(int)
{
}
void GuiMathMatrixDialog::change_adaptor()
void GuiMathMatrix::change_adaptor()
{
// FIXME: We need a filter for the halign input
}
void GuiMathMatrixDialog::slotOK()
void GuiMathMatrix::slotOK()
{
char v_align_c[] = "tcb";
char const c = v_align_c[valignCO->currentIndex()];
@ -104,18 +97,22 @@ void GuiMathMatrixDialog::slotOK()
ostringstream os;
os << nx << ' ' << ny << ' ' << c << ' ' << sh;
controller().dispatchMatrix(os.str().c_str());
dispatchMatrix(os.str().c_str());
// close the dialog
close();
}
void GuiMathMatrixDialog::slotClose()
void GuiMathMatrix::slotClose()
{
close();
}
Dialog * createGuiMathMatrix(LyXView & lv) { return new GuiMathMatrix(lv); }
} // namespace frontend
} // namespace lyx

View File

@ -1,6 +1,6 @@
// -*- C++ -*-
/**
* \file GuiMathMatrixDialog.h
* \file GuiMathMatrix.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
@ -11,11 +11,10 @@
* Full author contact details are available in file CREDITS.
*/
#ifndef GUIMATHMATRIXDIALOG_H
#define GUIMATHMATRIXDIALOG_H
#ifndef GUIMATHMATRIX_H
#define GUIMATHMATRIX_H
#include "GuiDialog.h"
#include "ControlMath.h"
#include "GuiMath.h"
#include "ui_MathMatrixUi.h"
#include <QDialog>
@ -23,12 +22,12 @@
namespace lyx {
namespace frontend {
class GuiMathMatrixDialog : public GuiDialog, public Ui::MathMatrixUi
class GuiMathMatrix : public GuiMath, public Ui::MathMatrixUi
{
Q_OBJECT
public:
GuiMathMatrixDialog(LyXView & lv);
GuiMathMatrix(LyXView & lv);
public Q_SLOTS:
void slotOK();
@ -36,9 +35,6 @@ public Q_SLOTS:
void columnsChanged(int);
void rowsChanged(int);
void change_adaptor();
/// parent controller
ControlMath & controller();
};
} // namespace frontend

View File

@ -14,6 +14,9 @@
#ifndef GUIPARAGRAPH_H
#define GUIPARAGRAPH_H
// Uncomment this if you prefer dock widget
//#define USE_DOCK_WIDGET
#include "Layout.h"
#include "ui_ParagraphUi.h"
#include "Dialog.h"

View File

@ -37,8 +37,6 @@
#include "support/lstrings.h"
#include "support/lyxalgo.h" // sorted
#include "controllers/ControlMath.h"
#include <QComboBox>
#include <QToolBar>
#include <QToolButton>

View File

@ -88,6 +88,7 @@ SOURCEFILES = \
GuiKeySymbol.cpp \
GuiListings.cpp \
GuiLog.cpp \
GuiMath.cpp \
GuiMathMatrix.cpp \
GuiMenubar.cpp \
GuiNomencl.cpp \
@ -175,6 +176,7 @@ MOCHEADER = \
GuiKeySymbol.h \
GuiListings.h \
GuiLog.h \
GuiMath.h \
GuiMathMatrix.h \
GuiMenubar.h \
GuiNomencl.h \