Remove all xforms code from gtk frontends

Add GTabular class
Add GtkLengthEntry class


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10772 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
John Spray 2006-01-24 14:05:09 +00:00
parent 4d753da194
commit d3b2da29c1
10 changed files with 2056 additions and 391 deletions

View File

@ -1,4 +1,10 @@
2006-01-24 John Spray <spray@lyx.org>
* GTabular.[Ch], glade/tabular.glade: Add tabular dialog (incomplete)
* LyXGtkLengthEntry.[Ch]: Add length entry widget
* Dialogs.C, Makefile.am, lyx_gui.C: Remove xforms references
2006-01-23 John Spray <spray@lyx.org>
* LyXGdkImage.[Ch]: replace xforms Image class
* Makefile.am: build LyXGdkImage
* GPainter.C: use new Gdk Image class

View File

@ -1,5 +1,5 @@
/**
* \file xforms/Dialogs.C
// * \file xforms/Dialogs.C
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
@ -21,8 +21,6 @@
#include "Dialogs.h"
#include "Dialog.h"
#include "Tooltips.h"
#include "ControlAboutlyx.h"
#include "ControlBibtex.h"
#include "ControlBox.h"
@ -61,34 +59,34 @@
#include "GText.h"
#include "GMathDelim.h"
#include "GBibItem.h"
#include "FormBibtex.h"
//#include "FormBibtex.h"
#include "GBox.h"
#include "FormBranch.h"
//#include "FormBranch.h"
#include "GChanges.h"
#include "GCharacter.h"
#include "GCitation.h"
#include "GDocument.h"
#include "GErrorList.h"
#include "GERT.h"
#include "FormExternal.h"
//#include "FormExternal.h"
#include "GFloat.h"
#include "GGraphics.h"
#include "GInclude.h"
#include "GLog.h"
#include "GMathPanel.h"
#include "FormMathsBitmap.h"
//#include "FormMathsBitmap.h"
#include "GMathsMatrix.h"
#include "FormMathsSpace.h"
#include "FormMathsStyle.h"
//#include "FormMathsSpace.h"
//#include "FormMathsStyle.h"
#include "GNote.h"
#include "GParagraph.h"
#include "FormPreamble.h"
#include "FormPreferences.h"
//#include "FormPreamble.h"
//#include "FormPreferences.h"
#include "GPrint.h"
#include "GRef.h"
#include "GSearch.h"
#include "GSendto.h"
#include "FormTabular.h"
#include "GTabular.h"
#include "GTexinfo.h"
#include "GShowFile.h"
#include "GSpellchecker.h"
@ -96,14 +94,14 @@
#include "GToc.h"
#include "GUrl.h"
#include "GVSpace.h"
#include "FormWrap.h"
//#include "FormWrap.h"
#ifdef HAVE_LIBAIKSAURUS
#include "ControlThesaurus.h"
#include "GThesaurus.h"
#endif
#include "xformsBC.h"
//#include "xformsBC.h"
#include "ButtonController.h"
#include "arrows.xbm"
@ -130,12 +128,12 @@ using namespace lyx::frontend;
namespace {
FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
char const * const * data, int size)
{
char const * const * const end = data + size;
return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
}
//FormMathsBitmap * createFormBitmap(Dialog & parent, string const & title,
// char const * const * data, int size)
//{
// char const * const * const end = data + size;
// return new FormMathsBitmap(parent, title, std::vector<string>(data, end));
//}
char const * const dialognames[] = {
@ -194,9 +192,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GBibItem(*dialog));
dialog->bc().bp(new OkCancelReadOnlyPolicy);
} else if (name == "bibtex") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlBibtex(*dialog));
dialog->setView(new FormBibtex(*dialog));
// dialog->setView(new FormBibtex(*dialog));
dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
} else if (name == "box") {
dialog->bc().view(new GBC(dialog->bc()));
@ -234,9 +232,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GERT(*dialog));
dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
} else if (name == "external") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlExternal(*dialog));
dialog->setView(new FormExternal(*dialog));
// dialog->setView(new FormExternal(*dialog));
dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
} else if (name == "file") {
dialog->bc().view(new GBC(dialog->bc()));
@ -288,176 +286,176 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathaccents") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Maths Decorations & Accents"),
latex_deco, nr_latex_deco);
bitmap->addBitmap(
BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
bitmap->addBitmap(
BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Maths Decorations & Accents"),
// latex_deco, nr_latex_deco);
// bitmap->addBitmap(
// BitmapStore(12, 3, 4, deco1_width, deco1_height, deco1_bits, true));
// bitmap->addBitmap(
// BitmapStore(10, 4, 3, deco2_width, deco2_height, deco2_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "matharrows") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
bitmap->addBitmap(
BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
bitmap->addBitmap(
BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
bitmap->addBitmap(
BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Arrows"), latex_arrow, nr_latex_arrow);
// bitmap->addBitmap(
// BitmapStore(20, 5, 4, arrow_width, arrow_height, arrow_bits, true));
// bitmap->addBitmap(
// BitmapStore(7, 2, 4, larrow_width, larrow_height, larrow_bits, false));
// bitmap->addBitmap(
// BitmapStore(4, 2, 2, darrow_width, darrow_height, darrow_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathoperators") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Binary Ops"),
latex_bop, nr_latex_bop);
bitmap->addBitmap(
BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Binary Ops"),
// latex_bop, nr_latex_bop);
// bitmap->addBitmap(
// BitmapStore(31, 4, 8, bop_width, bop_height, bop_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathrelations") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Binary Relations"),
latex_brel, nr_latex_brel);
bitmap->addBitmap(
BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Binary Relations"),
// latex_brel, nr_latex_brel);
// bitmap->addBitmap(
// BitmapStore(35, 4, 9, brel_width, brel_height, brel_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathgreek") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Greek"),
latex_greek, nr_latex_greek);
bitmap->addBitmap(
BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
bitmap->addBitmap(
BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Greek"),
// latex_greek, nr_latex_greek);
// bitmap->addBitmap(
// BitmapStore(11, 6, 2, Greek_width, Greek_height, Greek_bits, true));
// bitmap->addBitmap(
// BitmapStore(28, 7, 4, greek_width, greek_height, greek_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathmisc") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Misc"),
latex_misc, nr_latex_misc);
bitmap->addBitmap(
BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
bitmap->addBitmap(
BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
bitmap->addBitmap(
BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
bitmap->addBitmap(
BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Misc"),
// latex_misc, nr_latex_misc);
// bitmap->addBitmap(
// BitmapStore(29, 5, 6, misc_width, misc_height, misc_bits, true));
// bitmap->addBitmap(
// BitmapStore(5, 5, 1, misc4_width, misc4_height, misc4_bits, true));
// bitmap->addBitmap(
// BitmapStore(6, 3, 2, misc2_width, misc2_height, misc2_bits, false));
// bitmap->addBitmap(
// BitmapStore(4, 2, 2, misc3_width, misc3_height, misc3_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathdots") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Dots"),
latex_dots, nr_latex_dots);
bitmap->addBitmap(
BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Dots"),
// latex_dots, nr_latex_dots);
// bitmap->addBitmap(
// BitmapStore(4, 4, 1, dots_width, dots_height, dots_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathbigoperators") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("Big Operators"),
latex_varsz, nr_latex_varsz);
bitmap->addBitmap(
BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("Big Operators"),
// latex_varsz, nr_latex_varsz);
// bitmap->addBitmap(
// BitmapStore(14, 3, 5, varsz_width, varsz_height, varsz_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathamsmisc") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("AMS Misc"),
latex_ams_misc, nr_latex_ams_misc);
bitmap->addBitmap(
BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
bitmap->addBitmap(
BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("AMS Misc"),
// latex_ams_misc, nr_latex_ams_misc);
// bitmap->addBitmap(
// BitmapStore(9, 5, 2, ams1_width, ams1_height, ams1_bits, true));
// bitmap->addBitmap(
// BitmapStore(26, 3, 9, ams7_width, ams7_height, ams7_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathamsarrows") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("AMS Arrows"),
latex_ams_arrows, nr_latex_ams_arrows);
bitmap->addBitmap(
BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
bitmap->addBitmap(
BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("AMS Arrows"),
// latex_ams_arrows, nr_latex_ams_arrows);
// bitmap->addBitmap(
// BitmapStore(32, 3, 11, ams2_width, ams2_height, ams2_bits, true));
// bitmap->addBitmap(
// BitmapStore(6, 3, 2, ams3_width, ams3_height, ams3_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathamsrelations") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("AMS Relations"),
latex_ams_rel, nr_latex_ams_rel);
bitmap->addBitmap(
BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("AMS Relations"),
// latex_ams_rel, nr_latex_ams_rel);
// bitmap->addBitmap(
// BitmapStore(66, 6, 11, ams_rel_width, ams_rel_height, ams_rel_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathamsnegatedrelations") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("AMS Negated Rel"),
latex_ams_nrel, nr_latex_ams_nrel);
bitmap->addBitmap(
BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("AMS Negated Rel"),
// latex_ams_nrel, nr_latex_ams_nrel);
// bitmap->addBitmap(
// BitmapStore(51, 6, 9, ams_nrel_width, ams_nrel_height, ams_nrel_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathamsoperators") {
FormMathsBitmap * bitmap =
createFormBitmap(*dialog, _("AMS Operators"),
latex_ams_ops, nr_latex_ams_ops);
bitmap->addBitmap(
BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
// FormMathsBitmap * bitmap =
// createFormBitmap(*dialog, _("AMS Operators"),
// latex_ams_ops, nr_latex_ams_ops);
// bitmap->addBitmap(
// BitmapStore(23, 3, 8, ams_ops_width, ams_ops_height, ams_ops_bits, true));
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(bitmap);
// dialog->setView(bitmap);
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathdelimiter") {
@ -471,14 +469,14 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GMathsMatrix(*dialog));
dialog->bc().bp(new OkCancelReadOnlyPolicy);
} else if (name == "mathspace") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(new FormMathsSpace(*dialog));
// dialog->setView(new FormMathsSpace(*dialog));
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "mathstyle") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlMath(*dialog));
dialog->setView(new FormMathsStyle(*dialog));
// dialog->setView(new FormMathsStyle(*dialog));
dialog->bc().bp(new IgnorantPolicy);
} else if (name == "note") {
dialog->bc().view(new GBC(dialog->bc()));
@ -486,9 +484,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GNote(*dialog));
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
} else if (name == "branch") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlBranch(*dialog));
dialog->setView(new FormBranch(*dialog));
// dialog->setView(new FormBranch(*dialog));
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
} else if (name == "paragraph") {
dialog->bc().view(new GBC(dialog->bc()));
@ -496,14 +494,14 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GParagraph(*dialog));
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
} else if (name == "preamble") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlPreamble(*dialog));
dialog->setView(new FormPreamble(*dialog));
// dialog->setView(new FormPreamble(*dialog));
dialog->bc().bp(new OkApplyCancelPolicy);
} else if (name == "prefs") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlPrefs(*dialog));
dialog->setView(new FormPreferences(*dialog));
// dialog->setView(new FormPreferences(*dialog));
dialog->bc().bp(new PreferencesPolicy);
} else if (name == "print") {
dialog->bc().view(new GBC(dialog->bc()));
@ -526,9 +524,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GSpellchecker(*dialog));
dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
} else if (name == "tabular") {
dialog->bc().view(new xformsBC(dialog->bc()));
dialog->bc().view(new GBC(dialog->bc()));
dialog->setController(new ControlTabular(*dialog));
dialog->setView(new FormTabular(*dialog));
dialog->setView(new GTabular(*dialog));
dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
} else if (name == "tabularcreate") {
dialog->bc().view(new GBC(dialog->bc()));
@ -563,9 +561,9 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
dialog->setView(new GVSpace(*dialog));
dialog->bc().bp(new OkApplyCancelReadOnlyPolicy);
} else if (name == "wrap") {
dialog->bc().view(new xformsBC(dialog->bc()));
// dialog->bc().view(new xformsBC(dialog->bc()));
dialog->setController(new ControlWrap(*dialog));
dialog->setView(new FormWrap(*dialog));
// dialog->setView(new FormWrap(*dialog));
dialog->bc().bp(new NoRepeatedApplyReadOnlyPolicy);
}
@ -575,12 +573,14 @@ Dialogs::DialogPtr Dialogs::build(string const & name)
void Dialogs::toggleTooltips()
{
Tooltips::toggleEnabled();
// Turning off tooltips is not necessary and will
// not be implemented by me - jcs
// Tooltips::toggleEnabled();
}
/// Are the tooltips on or off?
bool Dialogs::tooltipsEnabled()
{
return Tooltips::enabled();
// return Tooltips::enabled();
}

View File

@ -0,0 +1,200 @@
/**
* \file GTabular.C
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author John Spray
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
// Too hard to make concept checks work with this file
#ifdef _GLIBCXX_CONCEPT_CHECKS
#undef _GLIBCXX_CONCEPT_CHECKS
#endif
#ifdef _GLIBCPP_CONCEPT_CHECKS
#undef _GLIBCPP_CONCEPT_CHECKS
#endif
#include "GTabular.h"
#include "ControlTabular.h"
#include "ghelpers.h"
#include "controllers/helper_funcs.h"
#include "debug.h"
using std::string;
using std::vector;
/*
class GtkLengthEntry : public Gtk::HBox {
public:
GtkLengthEntry::GtkLengthEntry(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
protected:
Gtk::SpinButton spin_;
Gtk::ComboBoxText combo_;
};
GtkLengthEntry::GtkLengthEntry(
BaseObjectType* cobject,
const Glib::RefPtr<Gnome::Glade::Xml>& refGlade)
: Gtk::HBox(cobject), spin_(0.1, 2)
{
pack_start (spin_, true, true, 0);
pack_start (combo_, true, true, 0);
spin_.set_range(0.0, 99999.0f);
set_spacing(6);
show_all();
}*/
namespace lyx {
namespace frontend {
namespace {
string defaultUnit("cm");
} // namespace anon
GTabular::GTabular(Dialog & parent)
: GViewCB<ControlTabular, GViewGladeB>(parent, _("Table Settings"), false)
{}
void GTabular::doBuild()
{
string const gladeName = findGladeFile("tabular");
xml_ = Gnome::Glade::Xml::create(gladeName);
Gtk::Button * button;
xml_->get_widget("Close", button);
setCancel(button);
// **** Current cell coords ****
xml_->get_widget("CurrentRow", cellrowspin_);
xml_->get_widget("CurrentColumn", cellcolspin_);
// **** Table tab ****
xml_->get_widget("HorizontalAlignment", horzaligncombo_);
xml_->get_widget("VerticalAlignment", vertaligncombo_);
xml_->get_widget("SpecifyWidth", specifywidthcheck_);
xml_->get_widget_derived ("Width", widthlength_);
xml_->get_widget("LaTeXArgument", latexargsentry_);
xml_->get_widget("RotateTable", rotatetablecheck_);
// **** This Cell tab ****
xml_->get_widget("UpperBorder", upperbordercheck_);
xml_->get_widget("LowerBorder", lowerbordercheck_);
xml_->get_widget("LeftBorder", leftbordercheck_);
xml_->get_widget("RightBorder", rightbordercheck_);
xml_->get_widget("RotateCell", rotatecellcheck_);
xml_->get_widget("MultiColumn", multicolcheck_);
xml_->get_widget("NoBorders", button);
button->signal_clicked().connect(
sigc::bind(sigc::mem_fun(*this, &GTabular::allBorders), false));
xml_->get_widget("AllBorders", button);
button->signal_clicked().connect(
sigc::bind(sigc::mem_fun(*this, &GTabular::allBorders), true));
// **** Longtable tab ****
// Disable for read-only documents.
// bcview().addReadOnly(browsebutton_);
}
void GTabular::apply()
{
}
void GTabular::update()
{
LyXTabular const & tabular = controller().tabular();
LyXTabular::idx_type const cell = controller().getActiveCell();
bool multicol = tabular.isMultiColumn(cell);
cellcolspin_->get_adjustment()->set_value(tabular.column_of_cell (cell)+1);
cellrowspin_->get_adjustment()->set_value(tabular.row_of_cell (cell));
// **** Table tab ****
int align = tabular.getAlignment(cell);
if (align == LYX_ALIGN_RIGHT)
horzaligncombo_->set_active(2);
else if (align == LYX_ALIGN_CENTER)
horzaligncombo_->set_active(1);
else
horzaligncombo_->set_active(0);
align = tabular.getVAlignment(cell);
if (align == LyXTabular::LYX_VALIGN_BOTTOM)
vertaligncombo_->set_active(2);
else if (align == LyXTabular::LYX_VALIGN_MIDDLE)
vertaligncombo_->set_active(1);
else
vertaligncombo_->set_active(0);
LyXLength pwidth;
string special;
if (multicol) {
special = tabular.getAlignSpecial(cell, LyXTabular::SET_SPECIAL_MULTI);
pwidth = tabular.getMColumnPWidth(cell);
} else {
special = tabular.getAlignSpecial(cell, LyXTabular::SET_SPECIAL_COLUMN);
pwidth = tabular.getColumnPWidth(cell);
}
latexargsentry_->set_text(special);
specifywidthcheck_->set_active(!pwidth.zero());
widthlength_->set_length(pwidth);
rotatetablecheck_->set_active(tabular.getRotateTabular());
//TODO: insert 'Block' entry into halign as neccessary
// **** This Cell tab ****
multicolcheck_->set_active(multicol);
rotatecellcheck_->set_active(tabular.getRotateCell(cell));
}
void GTabular::onInput()
{
updateSensitivity();
}
void GTabular::allBorders(bool borders)
{
if (upperbordercheck_->is_sensitive())
upperbordercheck_->set_active(borders);
if (lowerbordercheck_->is_sensitive())
lowerbordercheck_->set_active(borders);
if (leftbordercheck_->is_sensitive())
leftbordercheck_->set_active(borders);
if (rightbordercheck_->is_sensitive())
rightbordercheck_->set_active(borders);
}
void GTabular::updateSensitivity()
{
bool specifywidth = specifywidthcheck_->get_active();
widthlength_->set_sensitive(specifywidth);
vertaligncombo_->set_sensitive(specifywidth);
}
} // namespace frontend
} // namespace lyx

View File

@ -0,0 +1,77 @@
// -*- C++ -*-
/**
* \file GTabular.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author John Spray
*
* Full author contact details are available in file CREDITS.
*/
#ifndef GTABULAR_H
#define GTABULAR_H
#include "GViewBase.h"
#include "GtkLengthEntry.h"
#include "lyxlength.h"
#include <boost/scoped_ptr.hpp>
#include <vector>
namespace lyx {
namespace frontend {
class ControlTabular;
/** This class provides a GTK+ implementation of the Tabular Dialog.
*/
class GTabular
: public GViewCB<ControlTabular, GViewGladeB> {
public:
///
GTabular(Dialog &);
private:
/// Set the Params variable for the Controller.
virtual void apply();
/// Build the dialog.
virtual void doBuild();
/// Update dialog before/whilst showing it.
virtual void update();
void onInput();
void allBorders(bool borders);
void updateSensitivity();
bool updating_;
// **** Current cell coords ****
Gtk::SpinButton *cellrowspin_;
Gtk::SpinButton *cellcolspin_;
// **** Table tab ****
Gtk::ComboBox *horzaligncombo_;
Gtk::ComboBox *vertaligncombo_;
Gtk::CheckButton *specifywidthcheck_;
GtkLengthEntry *widthlength_;
Gtk::Entry *latexargsentry_;
Gtk::CheckButton *rotatetablecheck_;
// **** This Cell tab ****
Gtk::CheckButton *upperbordercheck_;
Gtk::CheckButton *lowerbordercheck_;
Gtk::CheckButton *leftbordercheck_;
Gtk::CheckButton *rightbordercheck_;
Gtk::CheckButton *rotatecellcheck_;
Gtk::CheckButton *multicolcheck_;
// **** Longtable tab ****
};
} // namespace frontend
} // namespace lyx
#endif // GTABULAR_H

View File

@ -0,0 +1,81 @@
/**
* \file GtkLengthEntry.C
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author John Spray
*
* Full author contact details are available in file CREDITS.
*/
#include <config.h>
// Too hard to make concept checks work with this file
#ifdef _GLIBCXX_CONCEPT_CHECKS
#undef _GLIBCXX_CONCEPT_CHECKS
#endif
#ifdef _GLIBCPP_CONCEPT_CHECKS
#undef _GLIBCPP_CONCEPT_CHECKS
#endif
#include "GtkLengthEntry.h"
namespace lyx {
namespace frontend {
GtkLengthEntry::GtkLengthEntry(
BaseObjectType* cobject,
const Glib::RefPtr<Gnome::Glade::Xml>& refGlade)
: Gtk::HBox(cobject), spin_(0.1, 2)
{
spin_.set_range(0.0, 99999.0f);
populateUnitCombo (combo_, true);
relative_ = true;
set_spacing(6);
pack_start (spin_, true, true, 0);
pack_start (combo_, true, true, 0);
show_all();
}
void GtkLengthEntry::set_length(LyXLength const & length)
{
setWidgetsFromLength (*spin_.get_adjustment(), combo_, length);
}
void GtkLengthEntry::set_length(std::string const & length)
{
setWidgetsFromLength (*spin_.get_adjustment(), combo_, LyXLength(length));
}
LyXLength const GtkLengthEntry::get_length()
{
return LyXLength(getLengthFromWidgets(*spin_.get_adjustment(), combo_));
}
std::string const GtkLengthEntry::get_length_string()
{
return getLengthFromWidgets(*spin_.get_adjustment(), combo_);
}
void GtkLengthEntry::set_relative(bool rel)
{
combo_.clear();
if (rel != relative_) {
populateUnitCombo (combo_, rel);
relative_ = rel;
}
}
} // namespace frontend
} // namespace lyx

View File

@ -0,0 +1,51 @@
// -*- C++ -*-
/**
* \file GtkLengthEntry.h
* This file is part of LyX, the document processor.
* Licence details can be found in the file COPYING.
*
* \author John Spray
*
* Full author contact details are available in file CREDITS.
*/
#ifndef GLENGTHENTRY_H
#define GLENGTHENTRY_H
#include "ghelpers.h"
#include "lengthcommon.h"
#include <gtkmm.h>
#include <libglademm.h>
class FuncRequest;
namespace lyx {
namespace frontend {
class GtkLengthEntry : public Gtk::HBox {
public:
GtkLengthEntry::GtkLengthEntry(BaseObjectType* cobject, const Glib::RefPtr<Gnome::Glade::Xml>& refGlade);
void set_length(LyXLength const & length);
void set_length(std::string const & length);
LyXLength const get_length();
std::string const get_length_string();
void set_relative(bool rel);
Gtk::SpinButton *get_spin();
Gtk::ComboBoxText *get_combo();
protected:
Gtk::SpinButton spin_;
Gtk::ComboBoxText combo_;
bool relative_;
};
} // namespace frontend
} // namespace lyx
#endif // NOT GTKLENGTHENTRY_H

View File

@ -14,11 +14,9 @@ AM_CPPFLAGS += \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/frontends \
-I$(top_srcdir)/src/frontends/controllers \
-I../xforms \
-I$(top_srcdir)/src/frontends/xforms \
$(BOOST_INCLUDES) @GTK_FRONTEND_CFLAGS@
libgtk_la_LIBADD = $(xforms_objects) ../xforms/forms/*.lo @GTK_FRONTEND_LIBS@ @XFORMS_LIBS@
libgtk_la_LIBADD = @GTK_FRONTEND_LIBS@
# Alphabetical order please. It makes it easier to figure out what's missing.
libgtk_la_SOURCES = \
@ -89,6 +87,8 @@ libgtk_la_SOURCES = \
GSpellchecker.h \
GTableCreate.C \
GTableCreate.h \
GTabular.C \
GTabular.h \
GTexinfo.C \
GTexinfo.h \
GText.C \
@ -113,6 +113,10 @@ libgtk_la_SOURCES = \
GWorkArea.h \
GXpmBtnTbl.C \
GXpmBtnTbl.h \
LyXGdkImage.C \
LyXGdkImage.h \
GtkLengthEntry.C \
GtkLengthEntry.h \
GtkmmX.h \
IdSc.C \
IdSc.h \
@ -131,35 +135,3 @@ libgtk_la_SOURCES = \
xftFontLoader.h \
xftFontMetrics.C
xforms_objects = \
../xforms/bmtable.lo \
../xforms/checkedwidgets.lo \
../xforms/ColorHandler.lo \
../xforms/Color.lo \
../xforms/combox.lo \
../xforms/fdesign_base.lo \
../xforms/FormBibtex.lo \
../xforms/FormBranch.lo \
../xforms/FormBrowser.lo \
../xforms/FormColorpicker.lo \
../xforms/FormDialogView.lo \
../xforms/FormExternal.lo \
../xforms/FormMathsBitmap.lo \
../xforms/FormMathsDelim.lo \
../xforms/FormMathsSpace.lo \
../xforms/FormMathsStyle.lo \
../xforms/FormPreamble.lo \
../xforms/FormPreferences.lo \
../xforms/forms_gettext.lo \
../xforms/FormTabular.lo \
../xforms/FormText.lo \
../xforms/FormWrap.lo \
../xforms/freebrowser.lo \
../xforms/input_validators.lo \
../xforms/RadioButtonGroup.lo \
../xforms/Tooltips.lo \
../xforms/xformsBC.lo \
../xforms/xforms_helpers.lo \
../xforms/xformsImage.lo \
../xforms/xforms_resize.lo

View File

@ -28,6 +28,7 @@ dist_glade_DATA = \
sendto.glade \
showfile.glade \
spellcheck.glade \
tabular.glade \
tableCreate.glade \
texinfo.glade \
text.glade \

File diff suppressed because it is too large Load Diff

View File

@ -48,10 +48,6 @@
#include "xftFontLoader.h"
#include "GWorkArea.h"
//just for xforms
#include "lyx_forms.h"
#include "xforms_helpers.h"
#include "support/lyxlib.h"
#include "support/os.h"
#include "support/filetools.h"
@ -79,7 +75,6 @@ using lyx::support::package;
using lyx::frontend::colorCache;
using lyx::frontend::GView;
using lyx::frontend::XformsColor;
extern BufferList bufferlist;
@ -99,60 +94,14 @@ bool finished = false;
/// estimate DPI from X server
int getDPI()
{
//TODO use GDK instead
Screen * scr = ScreenOfDisplay(getDisplay(), getScreen());
return int(((HeightOfScreen(scr) * 25.4 / HeightMMOfScreen(scr)) +
(WidthOfScreen(scr) * 25.4 / WidthMMOfScreen(scr))) / 2);
}
/// set default GUI configuration
void setDefaults()
{
FL_IOPT cntl;
cntl.buttonFontSize = FL_NORMAL_SIZE;
cntl.browserFontSize = FL_NORMAL_SIZE;
cntl.labelFontSize = FL_NORMAL_SIZE;
cntl.choiceFontSize = FL_NORMAL_SIZE;
cntl.inputFontSize = FL_NORMAL_SIZE;
cntl.menuFontSize = FL_NORMAL_SIZE;
cntl.borderWidth = -1;
cntl.vclass = FL_DefaultVisual;
fl_set_defaults(FL_PDVisual
| FL_PDButtonFontSize
| FL_PDBrowserFontSize
| FL_PDLabelFontSize
| FL_PDChoiceFontSize
| FL_PDInputFontSize
| FL_PDMenuFontSize
| FL_PDBorderWidth, &cntl);
}
extern "C" {
int LyX_XErrHandler(Display * display, XErrorEvent * xeev) {
// We don't abort on BadWindow
if (xeev->error_code == BadWindow) {
lyxerr << "BadWindow received !" << std::endl;
lyxerr << "If you're using xforms 1.0 or greater, "
<< " please report this to lyx-devel@lists.lyx.org"
<< std::endl;
return 0;
}
// emergency cleanup
LyX::cref().emergencyCleanup();
// Get the reason for the crash.
char etxt[513];
XGetErrorText(display, xeev->error_code, etxt, 512);
lyxerr << etxt << " id: " << xeev->resourceid << std::endl;
// By doing an abort we get a nice backtrace. (hopefully)
lyx::support::abort();
return 0;
}
}
/// read in geometry specification
@ -161,47 +110,10 @@ char geometry[40];
} // namespace anon
void parse_init_xforms(int & argc, char * argv[])
{
setDefaults();
FL_CMD_OPT cmdopt[] = {
{"-geometry", "*.geometry", XrmoptionSepArg, "690x510"}
};
FL_resource res[] = {
{"geometry", "geometryClass", FL_STRING, geometry, "", 40}
};
const int num_res = sizeof(res)/sizeof(FL_resource);
fl_initialize(&argc, argv, "LyX", cmdopt, num_res);
// It appears that, in xforms >=0.89.5, fl_initialize()
// calls setlocale() and ruins our LC_NUMERIC setting.
fl_get_app_resources(res, num_res);
Display * display = fl_get_display();
if (!display) {
lyxerr << "LyX: unable to access X display, exiting"
<< std::endl;
::exit(1);
}
fcntl(ConnectionNumber(display), F_SETFD, FD_CLOEXEC);
XSetErrorHandler(LyX_XErrHandler);
}
void lyx_gui::parse_init(int & argc, char * argv[])
{
new Gtk::Main(argc, argv);
parse_init_xforms(argc, argv);
using namespace lyx::graphics;
Image::newImage = boost::bind(&LyXGdkImage::newImage);
Image::loadableFormats = boost::bind(&LyXGdkImage::loadableFormats);
@ -213,130 +125,13 @@ void lyx_gui::parse_init(int & argc, char * argv[])
}
void parse_lyxrc_xforms()
{
XformsColor::read(lyx::support::AddName(package().user_support(),
"preferences.xform"));
if (lyxrc.popup_font_encoding.empty())
lyxrc.popup_font_encoding = lyxrc.font_norm;
// Set the font name for popups and menus
string boldfontname = lyxrc.popup_bold_font
+ "-*-*-*-?-*-*-*-*-"
+ lyxrc.popup_font_encoding;
// "?" means "scale that font"
string fontname = lyxrc.popup_normal_font
+ "-*-*-*-?-*-*-*-*-"
+ lyxrc.popup_font_encoding;
int bold = fl_set_font_name(FL_BOLD_STYLE, boldfontname.c_str());
int normal = fl_set_font_name(FL_NORMAL_STYLE, fontname.c_str());
if (bold < 0)
lyxerr << "Could not set menu font to "
<< boldfontname << std::endl;
if (normal < 0)
lyxerr << "Could not set popup font to "
<< fontname << std::endl;
if (bold < 0 && normal < 0) {
lyxerr << "Using 'helvetica' font for menus" << std::endl;
boldfontname = "-*-helvetica-bold-r-*-*-*-?-*-*-*-*-iso8859-1";
fontname = "-*-helvetica-medium-r-*-*-*-?-*-*-*-*-iso8859-1";
bold = fl_set_font_name(FL_BOLD_STYLE, boldfontname.c_str());
normal = fl_set_font_name(FL_NORMAL_STYLE, fontname.c_str());
if (bold < 0 && normal < 0) {
lyxerr << "Could not find helvetica font. Using 'fixed'."
<< std::endl;
fl_set_font_name(FL_NORMAL_STYLE, "fixed");
normal = bold = 0;
}
}
if (bold < 0)
fl_set_font_name(FL_BOLD_STYLE, fontname.c_str());
else if (normal < 0)
fl_set_font_name(FL_NORMAL_STYLE, boldfontname.c_str());
fl_setpup_fontstyle(FL_NORMAL_STYLE);
fl_setpup_fontsize(FL_NORMAL_SIZE);
fl_setpup_color(FL_MCOL, FL_BLACK);
fl_set_goodies_font(FL_NORMAL_STYLE, FL_NORMAL_SIZE);
fl_set_tooltip_font(FL_NORMAL_STYLE, FL_NORMAL_SIZE);
}
void lyx_gui::parse_lyxrc()
{
parse_lyxrc_xforms();
}
void start_xforms()
{
// initial geometry
int xpos = -1;
int ypos = -1;
unsigned int width = 690;
unsigned int height = 510;
int const geometryBitmask =
XParseGeometry(geometry,
&xpos, &ypos, &width, &height);
// if width is not set by geometry, check it against monitor width
if (!(geometryBitmask & WidthValue)) {
Screen * scr = ScreenOfDisplay(fl_get_display(), fl_screen);
if (WidthOfScreen(scr) - 8 < int(width))
width = WidthOfScreen(scr) - 8;
}
// if height is not set by geometry, check it against monitor height
if (!(geometryBitmask & HeightValue)) {
Screen * scr = ScreenOfDisplay(fl_get_display(), fl_screen);
if (HeightOfScreen(scr) - 24 < int(height))
height = HeightOfScreen(scr) - 24;
}
Screen * s = ScreenOfDisplay(fl_get_display(), fl_screen);
// recalculate xpos if it's not set
if (xpos == -1)
xpos = (WidthOfScreen(s) - width) / 2;
// recalculate ypos if it's not set
if (ypos == -1)
ypos = (HeightOfScreen(s) - height) / 2;
lyxerr[Debug::GUI] << "Creating view: " << width << 'x' << height
<< '+' << xpos << '+' << ypos << std::endl;
// XFormsView view(width, height);
// view.show(xpos, ypos, "LyX");
// view.init();
}
static void events_xforms()
{
if (fl_check_forms() == FL_EVENT) {
XEvent ev;
fl_XNextEvent(&ev);
lyxerr[Debug::GUI]
<< "Received unhandled X11 event" << std::endl
<< "Type: " << ev.xany.type
<< " Target: 0x" << std::hex << ev.xany.window
<< std::dec << std::endl;
}
}
void lyx_gui::start(string const & batch, std::vector<string> const & files)
{
start_xforms();
// just for debug
//XSynchronize(getDisplay(), true);
boost::shared_ptr<GView> view_ptr(new GView);
LyX::ref().addLyXView(view_ptr);
@ -362,7 +157,6 @@ void lyx_gui::start(string const & batch, std::vector<string> const & files)
while (!finished) {
while (Gtk::Main::events_pending())
Gtk::Main::iteration(false);
events_xforms();
}
// FIXME: breaks emergencyCleanup
@ -381,7 +175,7 @@ FuncStatus lyx_gui::getStatus(FuncRequest const & ev)
{
FuncStatus flag;
switch (ev.action) {
// Add this back if the gtk doc prefs dialog includes preamble - jcs
// TODO: Add this back if the gtk doc prefs dialog includes preamble - jcs
/*case LFUN_DIALOG_SHOW:
if (ev.argument == "preamble")
flag.unknown(true);