[qet] qet/qet: [5561] DiagramContextWidget : The widget is now made with th ui file instead of C++ |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 5561
Author: blacksun
Date: 2018-10-16 17:49:18 +0200 (Tue, 16 Oct 2018)
Log Message:
-----------
DiagramContextWidget : The widget is now made with th ui file instead of C++
Added Paths:
-----------
trunk/sources/ui/diagramcontextwidget.cpp
trunk/sources/ui/diagramcontextwidget.h
trunk/sources/ui/diagramcontextwidget.ui
Removed Paths:
-------------
trunk/sources/diagramcontextwidget.cpp
trunk/sources/diagramcontextwidget.h
Deleted: trunk/sources/diagramcontextwidget.cpp
===================================================================
--- trunk/sources/diagramcontextwidget.cpp 2018-10-13 18:02:18 UTC (rev 5560)
+++ trunk/sources/diagramcontextwidget.cpp 2018-10-16 15:49:18 UTC (rev 5561)
@@ -1,200 +0,0 @@
-/*
- Copyright 2006-2017 The QElectroTech Team
- This file is part of QElectroTech.
-
- QElectroTech is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- QElectroTech is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
-*/
-#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(1, 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 -> setContentsMargins(0, 0, 0, 0);
- vlayout0 -> addWidget(format_label);
- vlayout0 -> addWidget(table_);
- setLayout(vlayout0);
-}
-
-/**
- Set Sorting on the table.
-*/
-void DiagramContextWidget::setSorting(bool enable, int column, Qt::SortOrder order ) {
- table_ -> setSortingEnabled(enable);
- table_ -> sortByColumn(column, order);
-}
-
Deleted: trunk/sources/diagramcontextwidget.h
===================================================================
--- trunk/sources/diagramcontextwidget.h 2018-10-13 18:02:18 UTC (rev 5560)
+++ trunk/sources/diagramcontextwidget.h 2018-10-16 15:49:18 UTC (rev 5561)
@@ -1,66 +0,0 @@
-/*
- Copyright 2006-2017 The QElectroTech Team
- This file is part of QElectroTech.
-
- QElectroTech is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 2 of the License, or
- (at your option) any later version.
-
- QElectroTech is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
-*/
-#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 = nullptr);
- ~DiagramContextWidget() override;
- private:
- DiagramContextWidget(const DiagramContextWidget &);
-
- // methods
- public:
- bool isReadOnly();
- DiagramContext context() const;
- void setContext(const DiagramContext &);
- int nameLessRowsCount() const;
- void setSorting(bool enable, int column, Qt::SortOrder order );
-
- 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
Added: trunk/sources/ui/diagramcontextwidget.cpp
===================================================================
--- trunk/sources/ui/diagramcontextwidget.cpp (rev 0)
+++ trunk/sources/ui/diagramcontextwidget.cpp 2018-10-16 15:49:18 UTC (rev 5561)
@@ -0,0 +1,180 @@
+/*
+ Copyright 2006-2018 The QElectroTech Team
+ This file is part of QElectroTech.
+
+ QElectroTech is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ QElectroTech is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
+*/
+#include "diagramcontextwidget.h"
+#include "ui_diagramcontextwidget.h"
+
+DiagramContextWidget::DiagramContextWidget(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::DiagramContextWidget)
+{
+ ui->setupUi(this);
+ connect(ui->m_table, SIGNAL(itemChanged(QTableWidgetItem *)), this, SLOT(checkTableRows()));
+}
+
+DiagramContextWidget::~DiagramContextWidget()
+{
+ delete ui;
+}
+
+/**
+ * @brief DiagramContextWidget::context
+ * @return The diagram context object edited by this widget
+ */
+DiagramContext DiagramContextWidget::context() const
+{
+ DiagramContext context;
+
+ for (int i = 0 ; i < ui->m_table-> rowCount() ; ++ i)
+ {
+ QTableWidgetItem *qtwi_name = ui->m_table-> item(i, 0);
+ QTableWidgetItem *qtwi_value = ui->m_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);
+}
+
+/**
+ * @brief DiagramContextWidget::setContext
+ * Load the content from @context into this widget
+ * @param context
+ */
+void DiagramContextWidget::setContext (const DiagramContext &context)
+{
+ clear();
+
+ int i = 0;
+ for (QString key : context.keys(DiagramContext::Alphabetical))
+ {
+ ui->m_table->setItem(i, 0, new QTableWidgetItem(key));
+ ui->m_table->setItem(i, 1, new QTableWidgetItem(context[key].toString()));
+ ++ i;
+ }
+
+ checkTableRows();
+}
+
+/**
+ * @brief DiagramContextWidget::nameLessRowsCount
+ * @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 < ui->m_table->rowCount() ; ++ i)
+ {
+ QTableWidgetItem *qtwi_name = ui->m_table->item(i, 0);
+ if (qtwi_name && qtwi_name -> text().isEmpty()) {
+ ++ name_less_rows_count;
+ }
+ }
+
+ return(name_less_rows_count);
+}
+
+/**
+ * @brief DiagramContextWidget::clear
+ * Clear any values entered within this widget
+ */
+void DiagramContextWidget::clear()
+{
+ ui->m_table->clearContents();
+ for (int i = 1 ; i < ui->m_table->rowCount() ; ++ i) {
+ ui->m_table->removeRow(i);
+ }
+
+ refreshFormatLabel();
+}
+
+/**
+ * @brief DiagramContextWidget::highlightNonAcceptableKeys
+ * 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 = ui->m_table->palette().brush(QPalette::WindowText);
+
+ int invalid_keys = 0;
+ for (int i = 0 ; i < ui->m_table->rowCount() ; ++ i)
+ {
+ QTableWidgetItem *qtwi_name = ui->m_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);
+}
+
+/**
+ * @brief DiagramContextWidget::refreshFormatLabel
+ * 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);
+ }
+ ui->m_label->setText(format_text);
+}
+
+/**
+ * @brief DiagramContextWidget::checkTableRows
+ * Adds a row in the additional fields table if needed
+ */
+void DiagramContextWidget::checkTableRows()
+{
+ refreshFormatLabel();
+ if (!nameLessRowsCount())
+ {
+ int new_idx = ui->m_table->rowCount();
+ ui->m_table->setRowCount(new_idx + 1);
+ ui->m_table->setItem(new_idx, 0, new QTableWidgetItem(""));
+ ui->m_table->setItem(new_idx, 1, new QTableWidgetItem(""));
+ }
+}
Added: trunk/sources/ui/diagramcontextwidget.h
===================================================================
--- trunk/sources/ui/diagramcontextwidget.h (rev 0)
+++ trunk/sources/ui/diagramcontextwidget.h 2018-10-16 15:49:18 UTC (rev 5561)
@@ -0,0 +1,52 @@
+/*
+ Copyright 2006-2018 The QElectroTech Team
+ This file is part of QElectroTech.
+
+ QElectroTech is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 2 of the License, or
+ (at your option) any later version.
+
+ QElectroTech is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
+*/
+#ifndef DIAGRAMCONTEXTWIDGET_H
+#define DIAGRAMCONTEXTWIDGET_H
+
+#include <QWidget>
+#include "diagramcontext.h"
+
+namespace Ui {
+ class DiagramContextWidget;
+}
+
+class DiagramContextWidget : public QWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit DiagramContextWidget(QWidget *parent = nullptr);
+ ~DiagramContextWidget();
+
+ DiagramContext context() const;
+ void setContext (const DiagramContext &context);
+ int nameLessRowsCount() const;
+
+ public slots:
+ void clear();
+ int highlightNonAcceptableKeys();
+ void refreshFormatLabel();
+
+ private slots:
+ void checkTableRows();
+
+ private:
+ Ui::DiagramContextWidget *ui;
+};
+
+#endif // DIAGRAMCONTEXTWIDGET_H
Added: trunk/sources/ui/diagramcontextwidget.ui
===================================================================
--- trunk/sources/ui/diagramcontextwidget.ui (rev 0)
+++ trunk/sources/ui/diagramcontextwidget.ui 2018-10-16 15:49:18 UTC (rev 5561)
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DiagramContextWidget</class>
+ <widget class="QWidget" name="DiagramContextWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="m_label">
+ <property name="text">
+ <string>Les noms ne peuvent contenir que des lettres minuscules, des chiffres et des tirets.</string>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QTableWidget" name="m_table">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::SingleSelection</enum>
+ </property>
+ <property name="rowCount">
+ <number>1</number>
+ </property>
+ <property name="columnCount">
+ <number>2</number>
+ </property>
+ <attribute name="horizontalHeaderVisible">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="horizontalHeaderStretchLastSection">
+ <bool>true</bool>
+ </attribute>
+ <attribute name="verticalHeaderVisible">
+ <bool>false</bool>
+ </attribute>
+ <row/>
+ <column>
+ <property name="text">
+ <string>Nom</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Valeur</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>