[qet] [1882] Converted the "project properties" dialog to ConfigDialog.

[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]


Revision: 1882
Author:   xavier
Date:     2012-06-29 07:21:41 +0200 (Fri, 29 Jun 2012)
Log Message:
-----------
Converted the "project properties" dialog to ConfigDialog.

Modified Paths:
--------------
    trunk/sources/projectview.cpp

Added Paths:
-----------
    trunk/sources/projectconfigpages.cpp
    trunk/sources/projectconfigpages.h

Added: trunk/sources/projectconfigpages.cpp
===================================================================
--- trunk/sources/projectconfigpages.cpp	                        (rev 0)
+++ trunk/sources/projectconfigpages.cpp	2012-06-29 05:21:41 UTC (rev 1882)
@@ -0,0 +1,252 @@
+#include "projectconfigpages.h"
+#include "qeticons.h"
+#include "qetproject.h"
+#include "borderpropertieswidget.h"
+#include "conductorpropertieswidget.h"
+#include "titleblockpropertieswidget.h"
+#include <QtGui>
+
+/**
+	Constructor
+	@param project Project this page is editing.
+	@param parent Parent QWidget
+*/
+ProjectConfigPage::ProjectConfigPage(QETProject *project, QWidget *parent) :
+	ConfigPage(parent),
+	project_(project)
+{
+}
+
+/**
+	Destructor
+*/
+ProjectConfigPage::~ProjectConfigPage() {
+}
+
+/**
+	@return the project being edited by this page
+*/
+QETProject *ProjectConfigPage::project() const {
+	return(project_);
+}
+
+/**
+	Set \a new_project as the project being edited by this page.
+	@param read_values True to read values from the project into widgets before setting them read only accordingly, false otherwise. Defaults to true.
+	@return the former project
+*/
+QETProject *ProjectConfigPage::setProject(QETProject *new_project, bool read_values) {
+	if (new_project == project_) return(project_);
+	
+	QETProject *former_project = project_;
+	project_ = new_project;
+	if (project_ && read_values) {
+		readValuesFromProject();
+		adjustReadOnly();
+	}
+	return(former_project);
+}
+
+/**
+	Apply the configuration after user input
+*/
+void ProjectConfigPage::applyConf() {
+	if (!project_ || project_ -> isReadOnly()) return;
+	applyProjectConf();
+}
+
+/**
+	Initialize the page by calling initWidgets() and initLayout(). Also call
+	readValuesFromProject() and adjustReadOnly() if a non-zero project has been
+	set. Typically, you should call this function in your subclass constructor.
+*/
+void ProjectConfigPage::init() {
+	initWidgets();
+	initLayout();
+	if (project_) {
+		readValuesFromProject();
+		adjustReadOnly();
+	}
+}
+
+/**
+	Constructor
+	@param project Project this page is editing.
+	@param parent Parent QWidget
+*/
+ProjectMainConfigPage::ProjectMainConfigPage(QETProject *project, QWidget *parent) :
+	ProjectConfigPage(project, parent)
+{
+	init();
+}
+
+/**
+	Destructor
+*/
+ProjectMainConfigPage::~ProjectMainConfigPage() {
+}
+
+/**
+	@return the title for this page
+*/
+QString ProjectMainConfigPage::title() const {
+	return(tr("G\351n\351ral", "configuration page title"));
+}
+
+/**
+	@return the icon for this page
+*/
+QIcon ProjectMainConfigPage::icon() const {
+	return(QET::Icons::Settings);
+}
+
+/**
+	Apply the configuration after user input
+*/
+void ProjectMainConfigPage::applyProjectConf() {
+	project_ -> setTitle(title_value_ -> text());
+}
+
+/**
+	@return the project title entered by the user
+*/
+QString ProjectMainConfigPage::projectTitle() const {
+	return(title_value_ -> text());
+}
+
+/**
+	Initialize widgets displayed by the page.
+*/
+void ProjectMainConfigPage::initWidgets() {
+	title_label_ = new QLabel(tr("Titre du projet\240:", "label when configuring"));
+	title_value_ = new QLineEdit();
+}
+
+/**
+	Initialize the layout of this page.
+*/
+void ProjectMainConfigPage::initLayout() {
+	QVBoxLayout *main_layout0 = new QVBoxLayout();
+	QHBoxLayout *title_layout0 = new QHBoxLayout();
+	title_layout0 -> addWidget(title_label_);
+	title_layout0 -> addWidget(title_value_);
+	main_layout0 -> addLayout(title_layout0);
+	main_layout0 -> addStretch();
+	setLayout(main_layout0);
+}
+
+/**
+	Read properties from the edited project then fill widgets with them.
+*/
+void ProjectMainConfigPage::readValuesFromProject() {
+	title_value_ -> setText(project_ -> title());
+}
+
+/**
+	Set the content of this page read only if the project is read only,
+	editable if the project is editable.
+ */
+void ProjectMainConfigPage::adjustReadOnly() {
+	bool is_read_only = project_ -> isReadOnly();
+	title_value_ -> setReadOnly(is_read_only);
+}
+
+/**
+	Constructor
+	@param project Project this page is editing.
+	@param parent Parent QWidget
+*/
+ProjectNewDiagramConfigPage::ProjectNewDiagramConfigPage(QETProject *project, QWidget *parent) :
+	ProjectConfigPage(project, parent)
+{
+	init();
+}
+
+/**
+	Destructor
+*/
+ProjectNewDiagramConfigPage::~ProjectNewDiagramConfigPage() {
+}
+
+/**
+	@return the title for this page
+*/
+QString ProjectNewDiagramConfigPage::title() const {
+	return(tr("Nouveau sch\351ma", "project configuration page title"));
+}
+
+/**
+	@return the icon for this page
+*/
+QIcon ProjectNewDiagramConfigPage::icon() const {
+	return(QET::Icons::NewDiagram);
+}
+
+/**
+	Apply the configuration after user input
+*/
+void ProjectNewDiagramConfigPage::applyProjectConf() {
+	project_ -> setDefaultBorderProperties(border_ -> borderProperties());
+	project_ -> setDefaultTitleBlockProperties(titleblock_ -> titleBlockProperties());
+	project_ -> setDefaultConductorProperties(conductor_ -> conductorProperties());
+}
+
+/**
+	Initialize widgets displayed by the page.
+*/
+void ProjectNewDiagramConfigPage::initWidgets() {
+	informative_label_ = new QLabel(
+		tr(
+			"Propri\351t\351s \340 utiliser lors de l'ajout d'un nouveau sch\351ma au projet :",
+			"explicative label"
+		)
+	);
+	border_ = new BorderPropertiesWidget(BorderProperties()); 
+	titleblock_ = new TitleBlockPropertiesWidget(TitleBlockProperties(), true);
+	conductor_ = new ConductorPropertiesWidget();
+	conductor_ -> setContentsMargins(0, 0, 0, 0);
+}
+
+/**
+	Initialize the layout of this page.
+*/
+void ProjectNewDiagramConfigPage::initLayout() {
+	// put border properties above title block properties
+	QVBoxLayout *vlayout2 = new QVBoxLayout();
+	vlayout2 -> addWidget(border_);
+	vlayout2 -> addWidget(titleblock_);
+	vlayout2 -> setSpacing(5);
+	
+	// add conductor properties on the right
+	QHBoxLayout *hlayout1 = new QHBoxLayout();
+	hlayout1 -> addLayout(vlayout2);
+	hlayout1 -> addWidget(conductor_);
+	hlayout1 -> setAlignment(conductor_, Qt::AlignTop);
+	
+	// add the informative label above previous widgets
+	QVBoxLayout *vlayout1 = new QVBoxLayout();
+	vlayout1 -> addWidget(informative_label_);
+	vlayout1 -> addLayout(hlayout1);
+	vlayout1 -> addStretch();
+	setLayout(vlayout1);
+}
+
+/**
+	Read properties from the edited project then fill widgets with them.
+*/
+void ProjectNewDiagramConfigPage::readValuesFromProject() {
+	border_ -> setEditedBorder(project_ -> defaultBorderProperties());
+	conductor_ -> setConductorProperties(project_ -> defaultConductorProperties());
+	titleblock_ -> setTitleBlockProperties(project_ -> defaultTitleBlockProperties());
+}
+
+/**
+	Set the content of this page read only if the project is read only,
+	editable if the project is editable.
+ */
+void ProjectNewDiagramConfigPage::adjustReadOnly() {
+	bool is_read_only = project_ -> isReadOnly();
+	border_ -> setReadOnly(is_read_only);
+	titleblock_ -> setReadOnly(is_read_only);
+	conductor_ -> setReadOnly(is_read_only);
+}

Added: trunk/sources/projectconfigpages.h
===================================================================
--- trunk/sources/projectconfigpages.h	                        (rev 0)
+++ trunk/sources/projectconfigpages.h	2012-06-29 05:21:41 UTC (rev 1882)
@@ -0,0 +1,126 @@
+#ifndef PROJECTCONFIGPAGES_H
+#define PROJECTCONFIGPAGES_H
+#include "configpage.h"
+class QLabel;
+class QLineEdit;
+class QETProject;
+class BorderPropertiesWidget;
+class TitleBlockPropertiesWidget;
+class ConductorPropertiesWidget;
+
+/**
+	This class, derived from ConfigPage, aims at providing the basic skeleton
+	for a project configuration page.
+*/
+class ProjectConfigPage : public ConfigPage {
+	Q_OBJECT
+	// Constructor, destructor
+	public:
+	ProjectConfigPage(QETProject *, QWidget * = 0);
+	virtual ~ProjectConfigPage();
+	private:
+	ProjectConfigPage(const ProjectConfigPage &);
+	
+	// methods
+	public:
+	virtual QETProject *project() const;
+	virtual QETProject *setProject(QETProject *project, bool = true);
+	virtual void applyConf();
+	/**
+		Apply configuration to the project after user input. This method is
+		automatically called when the ConfigDialog is validated, and only if the
+		project is both non-zero and not read-only.
+	*/
+	virtual void applyProjectConf() = 0;
+	
+	protected:
+	virtual void init();
+	/**
+		Use this pure virtual method to initialize your page widgets.
+	*/
+	virtual void initWidgets() = 0;
+	/**
+		Use this pure virtual method to initialize your page layout. This method is
+		always called after initWidgets().
+	*/
+	virtual void initLayout() = 0;
+	/**
+		Use this pure virtual method to fill widgets with project values.
+	*/
+	virtual void readValuesFromProject()  = 0;
+	/**
+		Use this pure virtual method to adjust the "read only" state of your page
+		widgets according to the currently edited project.
+	*/
+	virtual void adjustReadOnly() = 0;
+	
+	// attributes
+	protected:
+	QETProject *project_; ///< Currently edited project
+};
+
+/**
+	This page enables users to configure the main properties of a project.
+*/
+class ProjectMainConfigPage : public ProjectConfigPage {
+	Q_OBJECT
+	// Constructor, destructor
+	public:
+	ProjectMainConfigPage(QETProject *, QWidget * = 0);
+	virtual ~ProjectMainConfigPage();
+	private:
+	ProjectMainConfigPage(const ProjectMainConfigPage &);
+	
+	// methods
+	public:
+	QString title() const;
+	QIcon icon() const;
+	void applyProjectConf();
+	QString projectTitle() const;
+	
+	protected:
+	void initWidgets();
+	void initLayout();
+	void readValuesFromProject();
+	void adjustReadOnly();
+	
+	// attributes
+	protected:
+	QLabel *title_label_;
+	QLineEdit *title_value_;
+};
+
+/**
+	This page enables users to configure the default properties of diagrams
+	newly added to the edited project.
+*/
+class ProjectNewDiagramConfigPage : public ProjectConfigPage {
+	Q_OBJECT
+	// Constructor, destructor
+	public:
+	ProjectNewDiagramConfigPage(QETProject *, QWidget * = 0);
+	virtual ~ProjectNewDiagramConfigPage();
+	private:
+	ProjectNewDiagramConfigPage(const ProjectNewDiagramConfigPage &);
+	
+	// methods
+	public:
+	QString title() const;
+	QIcon icon() const;
+	void applyProjectConf();
+	
+	protected:
+	void initWidgets();
+	void initLayout();
+	void readValuesFromProject();
+	void adjustReadOnly();
+	
+	// attributes
+	private:
+	QLabel *informative_label_;
+	BorderPropertiesWidget *border_;
+	TitleBlockPropertiesWidget *titleblock_;
+	ConductorPropertiesWidget *conductor_;
+};
+
+#endif

Modified: trunk/sources/projectview.cpp
===================================================================
--- trunk/sources/projectview.cpp	2012-06-29 05:21:39 UTC (rev 1881)
+++ trunk/sources/projectview.cpp	2012-06-29 05:21:41 UTC (rev 1882)
@@ -17,6 +17,8 @@
 */
 #include "projectview.h"
 #include "qetproject.h"
+#include "configdialog.h"
+#include "projectconfigpages.h"
 #include "diagramview.h"
 #include "diagram.h"
 #include "diagramprintdialog.h"
@@ -400,85 +402,18 @@
 }
 
 /**
-	Affiche un dialogue permettant a l'utilisateur d'editer les proprietes du
-	projet.
+	Enable the user to edit properties of the current project through a
+	configuration dialog.
 */
 void ProjectView::editProjectProperties() {
 	if (!project_) return;
 	
-	bool project_is_read_only = project_ -> isReadOnly();
-	
-	// dialogue d'edition des proprietes du projet
-	QDialog properties_dialog(parentWidget());
-#ifdef Q_WS_MAC
-	properties_dialog.setWindowFlags(Qt::Sheet);
-#endif
-	
-	properties_dialog.setMinimumWidth(786);
-	properties_dialog.setMinimumHeight(585);
+	ConfigDialog properties_dialog(parentWidget());
+	properties_dialog.setMinimumSize(786, 585);
 	properties_dialog.setWindowTitle(tr("Propri\351t\351s du projet", "window title"));
-	
-	// titre du projet
-	QLabel *title_label = new QLabel(tr("Titre du projet :"));
-	QLineEdit *title_field = new QLineEdit(project_ -> title());
-	title_field -> setReadOnly(project_is_read_only);
-	
-	// proprietes des nouveaux schemas
-	QLabel *new_diagrams_prop = new QLabel(tr("Propri\351t\351s \340 utiliser lors de l'ajout d'un nouveau sch\351ma au projet :"));
-	
-	// dimensions par defaut d'un schema
-	BorderPropertiesWidget *bpw = new BorderPropertiesWidget(project_ -> defaultBorderProperties());
-	bpw -> setReadOnly(project_is_read_only);
-	
-	// proprietes par defaut d'un cartouche
-	TitleBlockPropertiesWidget *ipw = new TitleBlockPropertiesWidget(project_ -> defaultTitleBlockProperties(), true);
-	ipw -> setReadOnly(project_is_read_only);
-	
-	// proprietes par defaut des conducteurs
-	ConductorPropertiesWidget *cpw = new ConductorPropertiesWidget(project_ -> defaultConductorProperties());
-	cpw -> setContentsMargins(0, 0, 0, 0);
-	cpw -> setReadOnly(project_is_read_only);
-	
-	// boutons pour valider le dialogue
-	QDialogButtonBox *buttons = new QDialogButtonBox(project_is_read_only ? QDialogButtonBox::Ok : QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
-	
-	connect(buttons, SIGNAL(accepted()), &properties_dialog, SLOT(accept()));
-	connect(buttons, SIGNAL(rejected()), &properties_dialog, SLOT(reject()));
-	
-	// agencement avec deux layouts : un vertical, un horizontal
-	QHBoxLayout *horiz_layout = new QHBoxLayout();
-	horiz_layout -> addWidget(title_label);
-	horiz_layout -> addWidget(title_field);
-	
-	QVBoxLayout *vlayout1 = new QVBoxLayout();
-	
-	vlayout1 -> addWidget(new_diagrams_prop);
-	
-	QHBoxLayout *hlayout1 = new QHBoxLayout();
-	QVBoxLayout *vlayout2 = new QVBoxLayout();
-	
-	vlayout2 -> addWidget(bpw);
-	vlayout2 -> addWidget(ipw);
-	vlayout2 -> setSpacing(5);
-	hlayout1 -> addLayout(vlayout2);
-	hlayout1 -> addWidget(cpw);
-	vlayout1 -> addLayout(hlayout1);
-	vlayout1 -> addStretch(1);
-	hlayout1 -> setAlignment(cpw, Qt::AlignTop);
-	
-	QVBoxLayout *vert_layout = new QVBoxLayout(&properties_dialog);
-	vert_layout -> addLayout(horiz_layout);
-	vert_layout -> addLayout(vlayout1);
-	vert_layout -> addStretch();
-	vert_layout -> addWidget(buttons);
-	
-	// si le dialogue est accepte
-	if (properties_dialog.exec() == QDialog::Accepted && !project_is_read_only) {
-		project_ -> setTitle(title_field -> text());
-		project_ -> setDefaultBorderProperties(bpw -> borderProperties());
-		project_ -> setDefaultTitleBlockProperties(ipw -> titleBlockProperties());
-		project_ -> setDefaultConductorProperties(cpw -> conductorProperties());
-	}
+	properties_dialog.addPage(new ProjectMainConfigPage(project_));
+	properties_dialog.addPage(new ProjectNewDiagramConfigPage(project_));
+	properties_dialog.exec();
 }
 
 /**


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/