Hi, The paragraph dialog. Note that this is the first instant-apply dialog I've done: hopefully that should all work okay.
John
Index: ChangeLog =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/gtk/ChangeLog,v retrieving revision 1.62 diff -u -3 -p -r1.62 ChangeLog --- ChangeLog 2004/09/27 19:04:17 1.62 +++ ChangeLog 2004/09/29 12:51:55 @@ -1,3 +1,8 @@ +2004-09-29 John Spray <[EMAIL PROTECTED]> + + * The Paragraph dialog + * Dialogs.C, GParagraph.C, GParagraph.h, Makefile.am + 2004-09-27 Lars Gullik Bjønnes <[EMAIL PROTECTED]> * lyx_gui.C (start): change comment Index: Makefile.am =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/gtk/Makefile.am,v retrieving revision 1.19 diff -u -3 -p -r1.19 Makefile.am --- Makefile.am 2004/09/27 18:52:43 1.19 +++ Makefile.am 2004/09/29 12:51:55 @@ -38,6 +38,8 @@ libgtk_la_SOURCES = \ GMiniBuffer.h \ GPainter.C \ GPainter.h \ + GParagraph.C \ + GParagraph.h \ GPrint.C \ GPrint.h \ GScreen.C \ @@ -109,7 +111,6 @@ xforms_objects = \ ../xforms/FormMathsSpace.lo \ ../xforms/FormMathsStyle.lo \ ../xforms/FormNote.lo \ - ../xforms/FormParagraph.lo \ ../xforms/FormPreamble.lo \ ../xforms/FormPreferences.lo \ ../xforms/FormRef.lo \ Index: Dialogs.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/gtk/Dialogs.C,v retrieving revision 1.21 diff -u -3 -p -r1.21 Dialogs.C --- Dialogs.C 2004/09/27 18:52:43 1.21 +++ Dialogs.C 2004/09/29 12:51:55 @@ -73,7 +73,7 @@ #include "FormMathsSpace.h" #include "FormMathsStyle.h" #include "FormNote.h" -#include "FormParagraph.h" +#include "GParagraph.h" #include "FormPreamble.h" #include "FormPreferences.h" #include "GPrint.h" @@ -452,8 +452,9 @@ Dialogs::DialogPtr Dialogs::build(string dialog->setView(new FormBranch(*dialog)); dialog->bc().bp(new OkApplyCancelReadOnlyPolicy); } else if (name == "paragraph") { + dialog->bc().view(new GBC(dialog->bc())); dialog->setController(new ControlParagraph(*dialog)); - dialog->setView(new FormParagraph(*dialog)); + dialog->setView(new GParagraph(*dialog)); dialog->bc().bp(new OkApplyCancelReadOnlyPolicy); } else if (name == "preamble") { dialog->setController(new ControlPreamble(*dialog));
/** * \file GParagraph.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> #include "GParagraph.h" #include "ControlParagraph.h" #include "ghelpers.h" #include <gtkmm.h> #include "controllers/helper_funcs.h" #include "ParagraphParameters.h" #include "Spacing.h" #include "support/lstrings.h" #include "support/tostr.h" #include "lyx_forms.h" using std::string; namespace lyx { namespace frontend { namespace { } // namespace anon GParagraph::GParagraph(Dialog & parent) : GViewCB<ControlParagraph, GViewGladeB>(parent, _("Paragraph Settings"), false) {} GParagraph::~GParagraph() { if (spacingadj_) delete spacingadj_; } void GParagraph::doBuild() { string const gladeName = findGladeFile("paragraph"); xml_ = Gnome::Glade::Xml::create(gladeName); xml_->get_widget("LineSpacing", spacingspin_); xml_->get_widget("DefaultLineSpacing", defaultspacingcheck_); xml_->get_widget("MaxLabelWidth", maxlabelwidthentry_); xml_->get_widget("Indent", indentcheck_); xml_->get_widget("AlignBlock", blockradio_); xml_->get_widget("AlignLeft", leftradio_); xml_->get_widget("AlignRight", rightradio_); xml_->get_widget("AlignCenter", centerradio_); // Manage the Close button Gtk::Button * button; xml_->get_widget("Close", button); setCancel(button); //Make the main hbox sensitive to readonly Gtk::HBox * controlbox; xml_->get_widget("ControlBox", controlbox); bcview().addReadOnly(controlbox); //This is deleted in destructor spacingadj_ = new Gtk::Adjustment(1.0f,0.0f,20.0f,0.1f); spacingspin_->set_adjustment(*spacingadj_); defaultspacingcheck_->signal_toggled().connect( sigc::mem_fun(*this, &GParagraph::onDefaultSpacingToggled)); indentcheck_->signal_toggled().connect( sigc::mem_fun(*this, &GParagraph::onIndentToggled)); spacingadj_->signal_value_changed().connect( sigc::mem_fun(*this, &GParagraph::onSpacingChanged)); maxlabelwidthentry_->signal_changed().connect( sigc::mem_fun(*this, &GParagraph::onMaxLabelWidthChanged)); blockradio_->signal_toggled().connect( sigc::mem_fun(*this, &GParagraph::onAlignToggled)); leftradio_->signal_toggled().connect( sigc::mem_fun(*this, &GParagraph::onAlignToggled)); rightradio_->signal_toggled().connect( sigc::mem_fun(*this, &GParagraph::onAlignToggled)); centerradio_->signal_toggled().connect( sigc::mem_fun(*this, &GParagraph::onAlignToggled)); //Load status from controller update(); } void GParagraph::update() { // label width string const labelwidth = controller().params().labelWidthString(); maxlabelwidthentry_->set_text(labelwidth); maxlabelwidthentry_->set_sensitive( labelwidth != _("Senseless with this layout!")); // alignment LyXAlignment const current_alignment = controller().params().align(); switch (current_alignment) { case LYX_ALIGN_BLOCK: blockradio_->set_active(true); break; case LYX_ALIGN_LEFT: leftradio_->set_active(true); break; case LYX_ALIGN_RIGHT: rightradio_->set_active(true); break; case LYX_ALIGN_CENTER: centerradio_->set_active(true); break; default: //LYX_ALIGN_SPECIAL or so? Don't ask, don't tell. centerradio_->set_active(false); blockradio_->set_active(false); rightradio_->set_active(false); leftradio_->set_active(false); } //Find out which alignments options are available LyXAlignment alignpos = controller().alignPossible(); blockradio_->set_sensitive(bool(alignpos & LYX_ALIGN_BLOCK)); centerradio_->set_sensitive(bool(alignpos & LYX_ALIGN_CENTER)); leftradio_->set_sensitive(bool(alignpos & LYX_ALIGN_LEFT)); rightradio_->set_sensitive(bool(alignpos & LYX_ALIGN_RIGHT)); //We give the user a checkbox with an affirmative description, so //invert the setting indentcheck_->set_active(!controller().params().noindent()); // linespacing Spacing const space = controller().params().spacing(); if (space.getSpace() == Spacing::Default) { //This emits the toggled signal, setting up sensitivities defaultspacingcheck_->set_active(true); } spacingadj_->set_value(space.getValue()); } void GParagraph::onDefaultSpacingToggled() { if (defaultspacingcheck_->get_active()) { spacingspin_->set_sensitive(false); Spacing const spacing(Spacing::Default, spacingadj_->get_value()); controller().params().spacing(spacing); } else { spacingspin_->set_sensitive(true); Spacing const spacing(Spacing::Other, spacingadj_->get_value()); controller().params().spacing(spacing); } controller().dispatchParams(); } void GParagraph::onIndentToggled() { controller().params().noindent(!indentcheck_->get_active()); controller().dispatchParams(); } void GParagraph::onSpacingChanged() { Spacing const spacing(Spacing::Other, spacingadj_->get_value()); controller().params().spacing(spacing); controller().dispatchParams(); } void GParagraph::onMaxLabelWidthChanged() { controller().params().labelWidthString( maxlabelwidthentry_->get_text()); controller().dispatchParams(); } void GParagraph::onAlignToggled() { if (blockradio_->get_active()) controller().params().align(LYX_ALIGN_BLOCK); else if (leftradio_->get_active()) controller().params().align(LYX_ALIGN_LEFT); else if (rightradio_->get_active()) controller().params().align(LYX_ALIGN_RIGHT); else if (centerradio_->get_active()) controller().params().align(LYX_ALIGN_CENTER); controller().dispatchParams(); } } // namespace frontend } // namespace lyx
// -*- C++ -*- /** * \file GParagraph.h * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * * \auther John Spray * * Full author contact details are available in file CREDITS. */ #ifndef GPARAGRAPH_H #define GPARAGRAPH_H #include "GViewBase.h" #include <gtkmm.h> namespace lyx { namespace frontend { class ControlParagraph; /** This class provides a gtk implementation of the paragraph dialog. */ class GParagraph : public GViewCB<ControlParagraph, GViewGladeB> { public: /// GParagraph(Dialog &); ~GParagraph(); private: /// Build the dialog virtual void doBuild(); /// Apply from dialog virtual void apply() {} /// Update the dialog virtual void update(); Gtk::SpinButton * spacingspin_; Gtk::Entry * maxlabelwidthentry_; Gtk::CheckButton * indentcheck_; Gtk::CheckButton * defaultspacingcheck_; Gtk::RadioButton * blockradio_; Gtk::RadioButton * leftradio_; Gtk::RadioButton * rightradio_; Gtk::RadioButton * centerradio_; Gtk::Adjustment * spacingadj_; void onDefaultSpacingToggled(); void onMaxLabelWidthChanged(); void onSpacingChanged(); void onIndentToggled(); void onAlignToggled(); }; } // namespace frontend } // namespace lyx #endif
paragraph.glade
Description: application/glade