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

Attachment: paragraph.glade
Description: application/glade

Reply via email to