[qet] [1887] TitleBlockPropertiesWidget: moved the table used for custom variables into a new DiagramContextWidget class .

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


Revision: 1887
Author:   xavier
Date:     2012-07-01 23:54:00 +0200 (Sun, 01 Jul 2012)
Log Message:
-----------
TitleBlockPropertiesWidget: moved the table used for custom variables into a new DiagramContextWidget class.

Modified Paths:
--------------
    trunk/sources/titleblockpropertieswidget.cpp
    trunk/sources/titleblockpropertieswidget.h

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

Added: trunk/sources/diagramcontextwidget.cpp
===================================================================
--- trunk/sources/diagramcontextwidget.cpp	                        (rev 0)
+++ trunk/sources/diagramcontextwidget.cpp	2012-07-01 21:54:00 UTC (rev 1887)
@@ -0,0 +1,173 @@
+#include "diagramcontextwidget.h"
+#include <QHeaderView>
+#include <QLabel>
+#include <QTableWidget>
+#include <QVBoxLayout>
+
+/**
+	Constructor
+	@param parent Parent QWidget
+*/
+DiagramContextWidget::DiagramContextWidget(QWidget *parent) :
+	QWidget(parent)
+{
+	initWidgets();
+	initLayout();
+}
+
+/**
+	Destructor
+*/
+DiagramContextWidget::~DiagramContextWidget() {
+}
+
+/**
+	@return Whether this widget is read-only.
+*/
+bool DiagramContextWidget::isReadOnly() {
+	return(table_ -> isEnabled());
+}
+
+/**
+	@return the DiagramContext object edited by this widget.
+*/
+DiagramContext DiagramContextWidget::context() const {
+	DiagramContext context;
+	for (int i = 0 ; i < table_ -> rowCount() ; ++ i) {
+		QTableWidgetItem *qtwi_name  = table_ -> item(i, 0);
+		QTableWidgetItem *qtwi_value = table_ -> item(i, 1);
+		if (!qtwi_name || !qtwi_value) continue;
+		
+		QString key = qtwi_name -> text();
+		if (key.isEmpty()) continue;
+		
+		QString value = qtwi_value -> text();
+		context.addValue(key, value);
+	}
+	return(context);
+}
+
+/**
+	Load the content from \a context into this widget.
+*/
+void DiagramContextWidget::setContext(const DiagramContext &context) {
+	clear();
+	int i = 0;
+	foreach (QString key, context.keys(DiagramContext::Alphabetical)) {
+		table_ -> setItem(i, 0, new QTableWidgetItem(key));
+		table_ -> setItem(i, 1, new QTableWidgetItem(context[key].toString()));
+		++ i;
+	}
+	checkTableRows();
+}
+
+/**
+	@return The count of name-less rows in the table.
+*/
+int DiagramContextWidget::nameLessRowsCount() const {
+	int name_less_rows_count = 0;
+	for (int i = 0 ; i < table_ -> rowCount() ; ++ i) {
+		QTableWidgetItem *qtwi_name  = table_ -> item(i, 0);
+		if (qtwi_name && qtwi_name -> text().isEmpty()) ++ name_less_rows_count;
+	}
+	return(name_less_rows_count);
+}
+
+/**
+	@param ro Whether this widget should be read-only.
+*/
+void DiagramContextWidget::setReadOnly(bool ro) {
+	table_ -> setEnabled(!ro);
+}
+
+/**
+	Clear any value entered within this widget.
+*/
+void DiagramContextWidget::clear() {
+	table_ -> clearContents();
+	for (int i = 1 ; i < table_ -> rowCount() ; ++ i) {
+		table_ -> removeRow(i);
+	}
+	refreshFormatLabel();
+}
+
+
+/**
+	Highlight keys that would not be accepted by a DiagramContext object.
+	@return the number of highlighted keys.
+*/
+int DiagramContextWidget::highlightNonAcceptableKeys() {
+	static QRegExp re(DiagramContext::validKeyRegExp());
+	
+	QBrush fg_brush = table_ -> palette().brush(QPalette::WindowText);
+	
+	int invalid_keys = 0;
+	for (int i = 0 ; i < table_ -> rowCount() ; ++ i) {
+		QTableWidgetItem *qtwi_name  = table_ -> item(i, 0);
+		if (!qtwi_name) continue;
+		bool highlight = false;
+		if (!qtwi_name -> text().isEmpty()) {
+			if (!re.exactMatch(qtwi_name -> text())) {
+				highlight = true;
+				++ invalid_keys;
+			}
+		}
+		qtwi_name -> setForeground(highlight ? Qt::red : fg_brush);
+	}
+	return(invalid_keys);
+}
+
+/**
+	Sets the text describing the acceptable format for keys when adding extra
+	key/value pairs.
+*/
+void DiagramContextWidget::refreshFormatLabel() {
+	QString format_text = tr(
+		"Les noms ne peuvent contenir que des lettres minuscules, des "
+		"chiffres et des tirets."
+	);
+	
+	if (highlightNonAcceptableKeys()) {
+		format_text = QString("<span style=\"color: red;\">%1</span>").arg(format_text);
+	}
+	format_label -> setText(format_text);
+}
+
+/**
+	Adds a row in the additional fields table if needed.
+*/
+void DiagramContextWidget::checkTableRows() {
+	refreshFormatLabel();
+	if (!nameLessRowsCount()) {
+		int new_idx = table_ -> rowCount();
+		table_ -> setRowCount(new_idx + 1);
+		table_ -> setItem(new_idx, 0, new QTableWidgetItem(""));
+		table_ -> setItem(new_idx, 1, new QTableWidgetItem(""));
+	}
+}
+
+/**
+	Initialize child widgets.
+*/
+void DiagramContextWidget::initWidgets() {
+	format_label = new QLabel();
+	format_label -> setWordWrap(true);
+	format_label -> setAlignment(Qt::AlignJustify);
+	
+	table_ = new QTableWidget(0, 2);
+	table_ -> setSelectionMode(QAbstractItemView::SingleSelection);
+	table_ -> setHorizontalHeaderLabels(QStringList() << tr("Nom", "table header") << tr("Valeur", "table header"));
+	table_ -> horizontalHeader() -> setStretchLastSection(true);
+	
+	connect(table_, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(checkTableRows()));
+}
+
+/**
+	Initialize the layout of this widget.
+*/
+void DiagramContextWidget::initLayout() {
+	QVBoxLayout *vlayout0 = new QVBoxLayout();
+	vlayout0 -> addWidget(format_label);
+	vlayout0 -> addWidget(table_);
+	setLayout(vlayout0);
+}

Added: trunk/sources/diagramcontextwidget.h
===================================================================
--- trunk/sources/diagramcontextwidget.h	                        (rev 0)
+++ trunk/sources/diagramcontextwidget.h	2012-07-01 21:54:00 UTC (rev 1887)
@@ -0,0 +1,48 @@
+#ifndef DIAGRAMCONTEXTWIDGET_H
+#define DIAGRAMCONTEXTWIDGET_H
+#include <QWidget>
+#include "diagramcontext.h"
+class QLabel;
+class QTableWidget;
+/**
+	This class provides a table which enables end users to edit the key/value
+	pairs of a DiagamContext.
+*/
+class DiagramContextWidget : public QWidget {
+	Q_OBJECT
+	// Constructor, destructor
+	public:
+	DiagramContextWidget(QWidget *parent = 0);
+	virtual ~DiagramContextWidget();
+	private:
+	DiagramContextWidget(const DiagramContextWidget &);
+	
+	// methods
+	public:
+	bool isReadOnly();
+	DiagramContext context() const;
+	void setContext(const DiagramContext &);
+	int nameLessRowsCount() const;
+	
+	signals:
+	
+	public slots:
+	void setReadOnly(bool);
+	void clear();
+	int highlightNonAcceptableKeys();
+	void refreshFormatLabel();
+	
+	private slots:
+	void checkTableRows();
+	
+	private:
+	void initWidgets();
+	void initLayout();
+	
+	// attributes
+	private:
+	QLabel *format_label; ///< label used to detail keys format
+	QTableWidget *table_; ///< table used to enter key/value pairs
+};
+
+#endif

Modified: trunk/sources/titleblockpropertieswidget.cpp
===================================================================
--- trunk/sources/titleblockpropertieswidget.cpp	2012-06-29 05:26:29 UTC (rev 1886)
+++ trunk/sources/titleblockpropertieswidget.cpp	2012-07-01 21:54:00 UTC (rev 1887)
@@ -16,9 +16,9 @@
 	along with QElectroTech.  If not, see <http://www.gnu.org/licenses/>.
 */
 #include "titleblockpropertieswidget.h"
+#include "diagramcontextwidget.h"
 #include "qeticons.h"
 #include "templatescollection.h"
-
 /**
 	Constructeur
 	@param titleblock TitleBlockProperties a afficher
@@ -70,17 +70,7 @@
 	QString current_template_name = currentTitleBlockTemplateName();
 	if (!current_template_name.isEmpty()) prop.template_name = current_template_name;
 	
-	for (int i = 0 ; i < additional_fields_table -> rowCount() ; ++ i) {
-		QTableWidgetItem *qtwi_name  = additional_fields_table -> item(i, 0);
-		QTableWidgetItem *qtwi_value = additional_fields_table -> item(i, 1);
-		if (!qtwi_name || !qtwi_value) continue;
-		
-		QString key = qtwi_name -> text();
-		if (key.isEmpty()) continue;
-		
-		QString value = qtwi_value -> text();
-		prop.context.addValue(key, value);
-	}
+	prop.context = additional_fields_ -> context();
 	
 	return(prop);
 }
@@ -133,24 +123,14 @@
 	Clear the custom variables list.
 */
 void TitleBlockPropertiesWidget::clearDiagramContext() {
-	additional_fields_table -> clearContents();
-	for (int i = 1 ; i < additional_fields_table -> rowCount() ; ++ i) {
-		additional_fields_table -> removeRow(i);
-	}
+	additional_fields_ -> clear();
 }
 
 /**
 	Clear the custom variables table then add the key/value pairs from \a context to it.
 */
 void TitleBlockPropertiesWidget::setDiagramContext(const DiagramContext &context) {
-	clearDiagramContext();
-	int i = 0;
-	foreach (QString key, context.keys(DiagramContext::Alphabetical)) {
-		additional_fields_table -> setItem(i, 0, new QTableWidgetItem(key));
-		additional_fields_table -> setItem(i, 1, new QTableWidgetItem(context[key].toString()));
-		++ i;
-	}
-	checkTableRows();
+	additional_fields_ -> setContext(context);
 }
 
 /**
@@ -180,7 +160,7 @@
 	titleblock_current_date -> setDisabled(ro);
 	titleblock_fixed_date   -> setDisabled(ro);
 	titleblock_template_name -> setDisabled(ro);
-	additional_fields_table  -> setDisabled(ro);
+	additional_fields_       -> setDisabled(ro);
 }
 
 /**
@@ -243,35 +223,6 @@
 }
 
 /**
-	Sets the text describing the acceptable format for keys when adding extra
-	key/value pairs.
-*/
-void TitleBlockPropertiesWidget::refreshFieldsFormatLabel() {
-	QString format_text = tr(
-		"Les noms ne peuvent contenir que des lettres minuscules, des "
-		"chiffres et des tirets."
-	);
-	
-	if (highlightNonAcceptableKeys()) {
-		format_text = QString("<span style=\"color: red;\">%1</span>").arg(format_text);
-	}
-	additional_fields_format_label -> setText(format_text);
-}
-
-/**
-	Adds a row in the additional fields table if needed.
-*/
-void TitleBlockPropertiesWidget::checkTableRows() {
-	refreshFieldsFormatLabel();
-	if (!nameLessRowsCount()) {
-		int new_idx = additional_fields_table -> rowCount();
-		additional_fields_table -> setRowCount(new_idx + 1);
-		additional_fields_table -> setItem(new_idx, 0, new QTableWidgetItem(""));
-		additional_fields_table -> setItem(new_idx, 1, new QTableWidgetItem(""));
-	}
-}
-
-/**
 	Update the title block templates list.
 */
 void TitleBlockPropertiesWidget::updateTemplateList() {
@@ -370,20 +321,9 @@
 	);
 	additional_fields_label -> setWordWrap(true);
 	additional_fields_label -> setAlignment(Qt::AlignJustify);
-	additional_fields_format_label = new QLabel();
-	additional_fields_format_label -> setWordWrap(true);
-	additional_fields_format_label -> setAlignment(Qt::AlignJustify);
+	additional_fields_ = new DiagramContextWidget();
+	additional_fields_ -> setContext(titleblock.context);
 	
-	additional_fields_table = new QTableWidget(0, 2);
-	additional_fields_table -> setSelectionMode(QAbstractItemView::SingleSelection);
-	additional_fields_table -> setHorizontalHeaderLabels(QStringList() << tr("Nom") << tr("Valeur"));
-	additional_fields_table -> horizontalHeader() -> setStretchLastSection(true);
-	
-	setDiagramContext(titleblock.context);
-	
-	refreshFieldsFormatLabel();
-	connect(additional_fields_table, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(checkTableRows()));
-	
 	tabbar = new QTabBar(this);
 	tabbar -> addTab(tr("Principales"));
 	tabbar -> addTab(tr("Personnalis\351es"));
@@ -423,8 +363,7 @@
 	QWidget *widget_user_fields = new QWidget(this);
 	QVBoxLayout *layout_user_fields = new QVBoxLayout(widget_user_fields);
 	layout_user_fields -> addWidget(additional_fields_label);
-	layout_user_fields -> addWidget(additional_fields_format_label);
-	layout_user_fields -> addWidget(additional_fields_table);
+	layout_user_fields -> addWidget(additional_fields_);
 	layout_user_fields -> setContentsMargins(0, 0, 0, 0);
 	
 	// stacked layout
@@ -459,40 +398,3 @@
 	this_layout -> addWidget(titleblock_infos);
 	setLayout(this_layout);
 }
-
-/**
-	@return The count of name-less rows in the additional fields table.
-*/
-int TitleBlockPropertiesWidget::nameLessRowsCount() const {
-	int name_less_rows_count = 0;
-	for (int i = 0 ; i < additional_fields_table -> rowCount() ; ++ i) {
-		QTableWidgetItem *qtwi_name  = additional_fields_table -> item(i, 0);
-		if (qtwi_name && qtwi_name -> text().isEmpty()) ++ name_less_rows_count;
-	}
-	return(name_less_rows_count);
-}
-
-/**
-	Highlight keys that would not be accepted by a DiagramContext object.
-	@return the number of highlighted keys.
-*/
-int TitleBlockPropertiesWidget::highlightNonAcceptableKeys() {
-	static QRegExp re(DiagramContext::validKeyRegExp());
-	
-	QBrush fg_brush = additional_fields_table -> palette().brush(QPalette::WindowText);
-	
-	int invalid_keys = 0;
-	for (int i = 0 ; i < additional_fields_table -> rowCount() ; ++ i) {
-		QTableWidgetItem *qtwi_name  = additional_fields_table -> item(i, 0);
-		if (!qtwi_name) continue;
-		bool highlight = false;
-		if (!qtwi_name -> text().isEmpty()) {
-			if (!re.exactMatch(qtwi_name -> text())) {
-				highlight = true;
-				++ invalid_keys;
-			}
-		}
-		qtwi_name -> setForeground(highlight ? Qt::red : fg_brush);
-	}
-	return(invalid_keys);
-}

Modified: trunk/sources/titleblockpropertieswidget.h
===================================================================
--- trunk/sources/titleblockpropertieswidget.h	2012-06-29 05:26:29 UTC (rev 1886)
+++ trunk/sources/titleblockpropertieswidget.h	2012-07-01 21:54:00 UTC (rev 1887)
@@ -19,6 +19,7 @@
 #define TITLEBLOCK_PROPERTIES_WIDGET_H
 #include <QtGui>
 #include "titleblockproperties.h"
+class DiagramContextWidget;
 class TitleBlockTemplatesCollection;
 /**
 	Ce widget permet d'editer un objet TitleBlockProperties, c'est-a-dire les
@@ -50,8 +51,6 @@
 	
 	// slots:
 	private slots:
-	void refreshFieldsFormatLabel();
-	void checkTableRows();
 	void updateTemplateList();
 	void editCurrentTitleBlockTemplate();
 	void duplicateCurrentTitleBlockTemplate();
@@ -60,8 +59,6 @@
 	private:
 	void initWidgets(const TitleBlockProperties &);
 	void initLayouts();
-	int nameLessRowsCount() const;
-	int highlightNonAcceptableKeys();
 	
 	signals:
 	void editTitleBlockTemplate(const QString &, bool);
@@ -86,8 +83,7 @@
 	QRadioButton *titleblock_fixed_date;
 	bool display_current_date;
 	QLabel       *additional_fields_label;
-	QLabel       *additional_fields_format_label;
-	QTableWidget *additional_fields_table;
+	DiagramContextWidget *additional_fields_;
 	QTabBar      *tabbar;
 	TitleBlockTemplatesCollection *tbt_collection_;
 };


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