[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_;
};