diff --git a/sources/conductorpropertieswidget.cpp b/sources/conductorpropertieswidget.cpp deleted file mode 100644 index 10136fde5..000000000 --- a/sources/conductorpropertieswidget.cpp +++ /dev/null @@ -1,376 +0,0 @@ -/* - Copyright 2006-2014 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 . -*/ -#include "conductorpropertieswidget.h" -#include -#include "qetgraphicsitem/conductor.h" -#include "qeticons.h" -#include "qetapp.h" - -/** - Constructeur - @param parent QWidget parent -*/ -ConductorPropertiesWidget::ConductorPropertiesWidget(QWidget *parent) : - QWidget(parent) -{ - buildInterface(); -} - -/** - Constructeur - @param parent QWidget parent - @param cp Proprietes a editer -*/ -ConductorPropertiesWidget::ConductorPropertiesWidget(const ConductorProperties &cp, QWidget *parent) : - QWidget(parent) -{ - buildInterface(); - setConductorProperties(cp); -} - -/// construit l'interface du widget -void ConductorPropertiesWidget::buildInterface() { - - setFocusPolicy(Qt::StrongFocus); - - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout -> setContentsMargins(0, 0, 0, 0); - - QGroupBox *groupbox = new QGroupBox(tr("Type de conducteur")); - main_layout -> addWidget(groupbox); - - QVBoxLayout *groupbox_layout = new QVBoxLayout(); - groupbox -> setLayout(groupbox_layout); - - simple = new QRadioButton(tr("Simple")); - multiline = new QRadioButton(tr("Multifilaire")); - - QHBoxLayout *multiline_layout = new QHBoxLayout(); - QLabel *text = new QLabel(tr("Texte :")); - text_field = new QLineEdit(); - QLabel *size_text = new QLabel(tr("Taille"), this); - text_size_sb = new QSpinBox(this); - text_size_sb->setRange(5,9); - multiline_layout -> addWidget(text); - multiline_layout -> addWidget(text_field); - multiline_layout -> addWidget(size_text); - multiline_layout -> addWidget(text_size_sb); - - QGridLayout *rotate_text_layout = new QGridLayout; - QLabel *rotate_label = new QLabel(tr("Rotation du texte sur conducteur :")); - rotate_text_layout -> addWidget(rotate_label, 0, 0); - - QLabel *verti_text = new QLabel(tr("Vertical")); - verti_select = QETApp::createTextOrientationSpinBoxWidget(); - rotate_text_layout -> addWidget(verti_text, 1, 0); - rotate_text_layout -> setAlignment(verti_text, Qt::AlignCenter); - rotate_text_layout -> addWidget(verti_select, 2, 0); - - QLabel *horiz_text = new QLabel(tr("Horizontal")); - horiz_select = QETApp::createTextOrientationSpinBoxWidget(); - rotate_text_layout -> addWidget(horiz_text, 1, 1); - rotate_text_layout -> setAlignment(horiz_text, Qt::AlignCenter); - rotate_text_layout -> addWidget(horiz_select, 2, 1); - - singleline = new QRadioButton(tr("Unifilaire")); - - ground_checkbox = new QCheckBox(tr("terre")); - ground_checkbox -> setIcon(QET::Icons::Ground); - neutral_checkbox = new QCheckBox(tr("neutre")); - neutral_checkbox -> setIcon(QET::Icons::Neutral); - merge_checkbox = new QCheckBox(tr("PEN", "Protective Earth Neutral")); - merge_checkbox -> setToolTip(tr("Protective Earth Neutral", "Tooltip displaying the meaning of the 'PEN' acronym")); - - QVBoxLayout *singleline_layout5 = new QVBoxLayout(); - singleline_layout5 -> addWidget(ground_checkbox); - singleline_layout5 -> addWidget(neutral_checkbox); - - QHBoxLayout *singleline_layout4 = new QHBoxLayout(); - singleline_layout4 -> addLayout(singleline_layout5); - singleline_layout4 -> addWidget(merge_checkbox, 4, Qt::AlignVCenter | Qt::AlignLeft); - - QHBoxLayout *singleline_layout3 = new QHBoxLayout(); - phase_checkbox = new QCheckBox(tr("phase")); - phase_checkbox -> setIcon(QET::Icons::Phase); - phase_slider = new QSlider(Qt::Horizontal); - phase_slider -> setRange(1, 3); - phase_spinbox = new QSpinBox(); - phase_spinbox -> setRange(1, 3); - singleline_layout3 -> addWidget(phase_checkbox); - singleline_layout3 -> addWidget(phase_slider); - singleline_layout3 -> addWidget(phase_spinbox); - - QVBoxLayout *singleline_layout2 = new QVBoxLayout(); - singleline_layout2 -> addLayout(singleline_layout4); - singleline_layout2 -> addLayout(singleline_layout3); - - QHBoxLayout *singleline_layout1 = new QHBoxLayout(); - preview = new QLabel(); - preview -> setFixedSize(150, 150); - singleline_layout1 -> addWidget(preview); - singleline_layout1 -> addLayout(singleline_layout2); - - QGroupBox *groupbox2 = new QGroupBox(tr("Apparence du conducteur")); - main_layout -> addWidget(groupbox2); - - QVBoxLayout *groupbox2_layout = new QVBoxLayout(); - groupbox2 -> setLayout(groupbox2_layout); - - QHBoxLayout *color_layout = new QHBoxLayout(); - QLabel *text1 = new QLabel(tr("Couleur :")); - color_button = new QPushButton(""); - color_layout -> addWidget(text1); - color_layout -> addWidget(color_button); - - QHBoxLayout *style_layout = new QHBoxLayout(); - QLabel *text2 = new QLabel(tr("Style :", "conductor line style")); - line_style = new QComboBox(); - line_style -> addItem(tr("Trait plein", "conductor style: solid line"), Qt::SolidLine); - line_style -> addItem(tr("Trait en pointill\351s", "conductor style: dashed line"), Qt::DashLine); - line_style -> addItem(tr("Traits et points", "conductor style: dashed and dotted line"), Qt::DashDotLine); - style_layout -> addWidget(text2); - style_layout -> addWidget(line_style); - - setColorButton(properties_.color); - int index = line_style -> findData(properties_.style); - if (index != -1) line_style -> setCurrentIndex(index); - - groupbox_layout -> addWidget(simple); - groupbox_layout -> addWidget(multiline); - groupbox_layout -> addLayout(multiline_layout); - groupbox_layout -> addLayout(rotate_text_layout); - groupbox_layout -> addWidget(singleline); - groupbox_layout -> addLayout(singleline_layout1); - - groupbox2_layout -> addLayout(color_layout); - groupbox2_layout -> addLayout(style_layout); - - radio_buttons = new QButtonGroup(this); - radio_buttons -> addButton(simple, ConductorProperties::Simple); - radio_buttons -> addButton(multiline, ConductorProperties::Multi); - radio_buttons -> addButton(singleline, ConductorProperties::Single); - - buildConnections(); - setConductorType(ConductorProperties::Multi); -} - -/// Met en place les connexions signaux/slots -void ConductorPropertiesWidget::buildConnections() { - connect(phase_slider, SIGNAL(valueChanged(int)), phase_spinbox, SLOT(setValue(int))); - connect(phase_spinbox, SIGNAL(valueChanged(int)), phase_slider, SLOT(setValue(int))); - connect(ground_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - connect(neutral_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - connect(merge_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - connect(phase_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - connect(phase_slider, SIGNAL(valueChanged(int)), this, SLOT(updateConfig())); - connect(radio_buttons, SIGNAL(buttonClicked(int)), this, SLOT(updateConfig())); - connect(text_field, SIGNAL(textChanged(const QString &)), this, SLOT(updateConfig())); - connect(line_style, SIGNAL(currentIndexChanged(int)), this, SLOT(updateConfig())); - connect(color_button, SIGNAL(clicked()), this, SLOT(chooseColor())); - connect(verti_select, SIGNAL(editingFinished(double)), this, SLOT(updateConfig())); - connect(horiz_select, SIGNAL(editingFinished(double)), this, SLOT(updateConfig())); - connect(text_size_sb, SIGNAL(valueChanged(int)), this, SLOT(updateConfig())); -} - -/** - Demande a l'utilisateur de choisir une couleur via un dialogue approprie. -*/ -void ConductorPropertiesWidget::chooseColor() { - QColor user_chosen_color = QColorDialog::getColor(properties_.color); - if (user_chosen_color.isValid()) { - setColorButton(user_chosen_color); - updateConfig(); - } -} - -/** - @return la couleur actuelle du bouton permettant de choisir la couleur du - conducteur -*/ -QColor ConductorPropertiesWidget::colorButton() const { - return(color_button -> palette().color(QPalette::Button)); -} - -/** - Change la couleur du bouton permettant de choisir la couleur du conducteur - @param color Nouvelle couleur a afficher -*/ -void ConductorPropertiesWidget::setColorButton(const QColor &color) { - QPalette palette; - palette.setColor(QPalette::Button, color); - color_button -> setPalette(palette); -} - -/// Enleve les connexions signaux/slots -void ConductorPropertiesWidget::destroyConnections() { - disconnect(phase_slider, SIGNAL(valueChanged(int)), phase_spinbox, SLOT(setValue(int))); - disconnect(phase_spinbox, SIGNAL(valueChanged(int)), phase_slider, SLOT(setValue(int))); - disconnect(ground_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - disconnect(neutral_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - disconnect(merge_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - disconnect(phase_checkbox, SIGNAL(toggled(bool)), this, SLOT(updateConfig())); - disconnect(phase_slider, SIGNAL(valueChanged(int)), this, SLOT(updateConfig())); - disconnect(radio_buttons, SIGNAL(buttonClicked(int)), this, SLOT(updateConfig())); - disconnect(text_field, SIGNAL(textChanged(const QString &)), this, SLOT(updateConfig())); - disconnect(color_button, SIGNAL(clicked()), this, SLOT(chooseColor())); - disconnect(line_style, SIGNAL(currentIndexChanged(int)), this, SLOT(updateConfig())); - disconnect(verti_select, SIGNAL(editingFinished(double)), this, SLOT(updateConfig())); - disconnect(horiz_select, SIGNAL(editingFinished(double)), this, SLOT(updateConfig())); - disconnect(text_size_sb, SIGNAL(valueChanged(int)), this, SLOT(updateConfig())); -} - -/// Destructeur -ConductorPropertiesWidget::~ConductorPropertiesWidget() { - delete verti_select; - delete horiz_select; -} - -/// Met a jour les proprietes -void ConductorPropertiesWidget::updateConfig() { - properties_.type = static_cast(radio_buttons -> checkedId()); - properties_.color = colorButton(); - properties_.style = static_cast(line_style -> itemData(line_style -> currentIndex()).toInt()); - properties_.text = text_field -> text(); - properties_.text_size = text_size_sb->value(); - properties_.verti_rotate_text = verti_select -> value(); - properties_.horiz_rotate_text = horiz_select -> value(); - properties_.singleLineProperties.hasGround = ground_checkbox -> isChecked(); - properties_.singleLineProperties.hasNeutral = neutral_checkbox -> isChecked(); - properties_.singleLineProperties.is_pen = merge_checkbox -> isChecked(); - properties_.singleLineProperties.setPhasesCount(phase_checkbox -> isChecked() ? phase_spinbox -> value() : 0); - - updateDisplay(); -} - -/// Met a jour l'affichage des proprietes -void ConductorPropertiesWidget::updateDisplay() { - destroyConnections(); - - setConductorType(properties_.type); - setColorButton(properties_.color); - int index = line_style -> findData(properties_.style); - if (index != -1) line_style -> setCurrentIndex(index); - text_field -> setText(properties_.text); - text_size_sb -> setValue(properties_.text_size); - ground_checkbox -> setChecked(properties_.singleLineProperties.hasGround); - neutral_checkbox -> setChecked(properties_.singleLineProperties.hasNeutral); - merge_checkbox -> setChecked(properties_.singleLineProperties.is_pen); - merge_checkbox -> setEnabled(!isReadOnly() && properties_.type == ConductorProperties::Single && ground_checkbox -> isChecked() && neutral_checkbox -> isChecked()); - phase_spinbox -> setValue(properties_.singleLineProperties.phasesCount()); - phase_slider -> setValue(properties_.singleLineProperties.phasesCount()); - phase_checkbox -> setChecked(properties_.singleLineProperties.phasesCount()); - verti_select -> setValue(properties_.verti_rotate_text); - horiz_select -> setValue(properties_.horiz_rotate_text); - - buildConnections(); - updatePreview(); -} - -/// Met a jour la previsualisation des attributs unifilaires -void ConductorPropertiesWidget::updatePreview() { - const QRect pixmap_rect(0, 0, 96, 96); - QPixmap pixmap(pixmap_rect.width(), pixmap_rect.height()); - QPainter painter; - painter.begin(&pixmap); - painter.eraseRect(pixmap_rect); - painter.drawRect(pixmap_rect.adjusted(0,0,-1,-1)); - painter.drawLine(QLineF(0, pixmap_rect.height() / 2, pixmap_rect.width(), pixmap_rect.height() / 2)); - properties_.singleLineProperties.draw(&painter, QET::Horizontal, pixmap_rect); - painter.end(); - preview -> setPixmap(pixmap); -} - -/** - Passe le widget en mode simple, unifilaire ou multifilaire - @param t le type de conducteur -*/ -void ConductorPropertiesWidget::setConductorType(ConductorProperties::ConductorType t) { - - // widgets lies au simple - simple -> setChecked(t == ConductorProperties::Simple); - - // widgets lies au mode multifilaire - multiline -> setChecked(t == ConductorProperties::Multi); - text_field -> setEnabled(t == ConductorProperties::Multi); - - // widgets lies au mode unifilaire - bool sl = (t == ConductorProperties::Single); - singleline -> setChecked(sl); - preview -> setEnabled(sl); - phase_checkbox -> setEnabled(sl); - phase_slider -> setEnabled(sl); - phase_spinbox -> setEnabled(sl); - ground_checkbox -> setEnabled(sl); - neutral_checkbox -> setEnabled(sl); - merge_checkbox -> setEnabled(sl); -} - -/// @param p les nouvelles proprietes -void ConductorPropertiesWidget::setConductorProperties(const ConductorProperties &p) { - properties_ = p; - updateDisplay(); -} - -/// @return les proprietes editees -ConductorProperties ConductorPropertiesWidget::conductorProperties() const { - return(properties_); -} - -/** - @return true si ce widget est en lecture seule, false sinon -*/ -bool ConductorPropertiesWidget::isReadOnly() const { - return(text_field -> isReadOnly()); -} - -/** - @param ro true pour passer ce widget en lecture seule, false sinon -*/ -void ConductorPropertiesWidget::setReadOnly(bool ro) { - // enable or disable all child widgets according to the read only state - simple -> setDisabled(ro); - multiline -> setDisabled(ro); - singleline -> setDisabled(ro); - text_field -> setReadOnly(ro); - text_size_sb -> setReadOnly(ro); - phase_checkbox -> setDisabled(ro); - phase_spinbox -> setReadOnly(ro); - ground_checkbox -> setDisabled(ro); - neutral_checkbox -> setDisabled(ro); - merge_checkbox -> setDisabled(ro); - color_button -> setDisabled(ro); - line_style -> setDisabled(ro); - // if the widget is not read-only, we still need to disable some widgets for consistency - if (!ro) { - updateDisplay(); - } -} - -/** - Gere le focus de ce widget -*/ -void ConductorPropertiesWidget::focusInEvent(QFocusEvent *event) { - if (properties_.type == ConductorProperties::Multi) { - text_field -> setFocus(Qt::ActiveWindowFocusReason); - text_field -> selectAll(); - } else if (properties_.type == ConductorProperties::Single) { - phase_spinbox -> setFocus(Qt::ActiveWindowFocusReason); - phase_spinbox -> selectAll(); - } - QWidget::focusInEvent(event); -} diff --git a/sources/conductorpropertieswidget.h b/sources/conductorpropertieswidget.h deleted file mode 100644 index 75ad693eb..000000000 --- a/sources/conductorpropertieswidget.h +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright 2006-2014 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 . -*/ -#ifndef CONDUCTOR_PROPERTIES_WIDGET_H -#define CONDUCTOR_PROPERTIES_WIDGET_H -#include "conductorproperties.h" -#include "qtextorientationspinboxwidget.h" -#include -/** - This widget enables users to change the properties of a particular - conductor; these properties include singleline symbols, style, color, and - conductor type but exclude the path it draws. -*/ -class ConductorPropertiesWidget : public QWidget { - Q_OBJECT - // constructors, destructor - public: - ConductorPropertiesWidget(QWidget * = 0); - ConductorPropertiesWidget(const ConductorProperties &, QWidget * = 0); - virtual ~ConductorPropertiesWidget(); - - private: - ConductorPropertiesWidget(const ConductorPropertiesWidget &); - - // methods - public: - void setConductorProperties(const ConductorProperties &); - ConductorProperties conductorProperties() const; - bool isReadOnly() const; - void setReadOnly(bool); - - private: - void setConductorType(ConductorProperties::ConductorType); - void setColorButton(const QColor &); - QColor colorButton() const; - - public slots: - void updatePreview(); - void updateConfig(); - void updateDisplay(); - void chooseColor(); - - protected: - void focusInEvent(QFocusEvent *); - - // private attributes - private: - QButtonGroup *radio_buttons; - QRadioButton *simple; - QRadioButton *multiline; - QLineEdit *text_field; - QTextOrientationSpinBoxWidget *verti_select; - QTextOrientationSpinBoxWidget *horiz_select; - QRadioButton *singleline; - QCheckBox *phase_checkbox; - QSlider *phase_slider; - QSpinBox *phase_spinbox; - QCheckBox *ground_checkbox; - QCheckBox *neutral_checkbox; - QLabel *preview; - QPushButton *color_button; - QComboBox *line_style; - QCheckBox *merge_checkbox; - QSpinBox *text_size_sb; - - ConductorProperties properties_; - - // private methods - void buildInterface(); - void buildConnections(); - void destroyConnections(); -}; -#endif diff --git a/sources/configpages.cpp b/sources/configpages.cpp index 3d1a0f7e2..10e2a978b 100644 --- a/sources/configpages.cpp +++ b/sources/configpages.cpp @@ -81,7 +81,7 @@ void NewDiagramPage::applyConf() { ipw-> properties().toSettings(settings, "diagrameditor/default"); // proprietes par defaut des conducteurs - cpw -> conductorProperties().toSettings(settings, "diagrameditor/defaultconductor"); + cpw -> properties().toSettings(settings, "diagrameditor/defaultconductor"); // default report propertie rpw->toSettings(settings, "diagrameditor/defaultreport"); diff --git a/sources/diagramview.cpp b/sources/diagramview.cpp index ef0d0bbb7..39236d176 100644 --- a/sources/diagramview.cpp +++ b/sources/diagramview.cpp @@ -675,7 +675,7 @@ void DiagramView::editDiagramProperties() { if (popup.exec() == QDialog::Accepted && !diagram_is_read_only) { TitleBlockProperties new_titleblock = titleblock_infos -> properties(); BorderProperties new_border = border_infos -> properties(); - ConductorProperties new_conductors = cpw -> conductorProperties(); + ConductorProperties new_conductors = cpw -> properties(); bool adjust_scene = false; @@ -1016,7 +1016,7 @@ void DiagramView::editConductor(Conductor *edited_conductor) { // execute le dialogue et met a jour le conducteur if (conductor_dialog.exec() == QDialog::Accepted) { // recupere les nouvelles proprietes - ConductorProperties new_properties = cpw -> conductorProperties(); + ConductorProperties new_properties = cpw -> properties(); if (new_properties != old_properties) { if (cb_apply_all -> isChecked()) { diff --git a/sources/projectconfigpages.cpp b/sources/projectconfigpages.cpp index 609fea970..6e1f4832b 100644 --- a/sources/projectconfigpages.cpp +++ b/sources/projectconfigpages.cpp @@ -250,9 +250,9 @@ void ProjectNewDiagramConfigPage::applyProjectConf() { modified_project = true; } - ConductorProperties new_conductor_prop = conductor_ -> conductorProperties(); + ConductorProperties new_conductor_prop = conductor_ -> properties(); if (project_ -> defaultConductorProperties() != new_conductor_prop) { - project_ -> setDefaultConductorProperties(conductor_ -> conductorProperties()); + project_ -> setDefaultConductorProperties(conductor_ -> properties()); modified_project = true; } @@ -319,7 +319,7 @@ void ProjectNewDiagramConfigPage::initLayout() { */ void ProjectNewDiagramConfigPage::readValuesFromProject() { border_ -> setProperties (project_ -> defaultBorderProperties()); - conductor_ -> setConductorProperties (project_ -> defaultConductorProperties()); + conductor_ -> setProperties (project_ -> defaultConductorProperties()); titleblock_ -> setProperties (project_ -> defaultTitleBlockProperties()); report_ -> setReportProperties (project_ -> defaultReportProperties()); xref_ -> setProperties (project_ -> defaultXRefProperties()); diff --git a/sources/ui/conductorpropertieswidget.cpp b/sources/ui/conductorpropertieswidget.cpp new file mode 100644 index 000000000..c1e0f4431 --- /dev/null +++ b/sources/ui/conductorpropertieswidget.cpp @@ -0,0 +1,233 @@ +/* + Copyright 2006-2014 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 . +*/ +#include "conductorpropertieswidget.h" +#include "ui_conductorpropertieswidget.h" +#include "conductorproperties.h" +#include "qetapp.h" +#include "qtextorientationspinboxwidget.h" + +/** + * @brief ConductorPropertiesWidget::ConductorPropertiesWidget + * Constructor + * @param parent, paretn widget + */ +ConductorPropertiesWidget::ConductorPropertiesWidget(QWidget *parent) : + QWidget(parent), + ui(new Ui::ConductorPropertiesWidget) +{ + ui->setupUi(this); + initWidget(); +} + +/** + * @brief ConductorPropertiesWidget::ConductorPropertiesWidget + * Constructor with properties + * @param properties, properties to edit + * @param parent, parent widget + */ +ConductorPropertiesWidget::ConductorPropertiesWidget(const ConductorProperties &properties, QWidget *parent) : + QWidget(parent), + ui(new Ui::ConductorPropertiesWidget) +{ + ui -> setupUi(this); + initWidget(); + setProperties(properties); +} + +/** + * @brief ConductorPropertiesWidget::~ConductorPropertiesWidget + * destructor + */ +ConductorPropertiesWidget::~ConductorPropertiesWidget() +{ + delete ui; +} + +/** + * @brief ConductorPropertiesWidget::setProperties + * Set the properties + * @param properties + */ +void ConductorPropertiesWidget::setProperties(const ConductorProperties &properties) { + if (m_properties == properties) return; + m_properties = properties; + + setColorButton(m_properties.color); + int index = ui -> m_line_style_cb->findData(m_properties.style); + if (index != -1) ui -> m_line_style_cb -> setCurrentIndex(index); + ui -> m_text_le -> setText (m_properties.text); + ui -> m_text_size_sb -> setValue (m_properties.text_size); + ui -> m_earth_cb -> setChecked (m_properties.singleLineProperties.hasGround); + ui -> m_neutral_cb -> setChecked (m_properties.singleLineProperties.hasNeutral); + ui -> m_pen_cb -> setChecked (m_properties.singleLineProperties.isPen()); + ui -> m_phase_cb -> setChecked (m_properties.singleLineProperties.phasesCount()); + ui -> m_phase_slider -> setValue (m_properties.singleLineProperties.phasesCount()); + m_verti_select -> setValue (m_properties.verti_rotate_text); + m_horiz_select -> setValue (m_properties.horiz_rotate_text); + + setConductorType(m_properties.type); + updatePreview(false); +} + +/** + * @brief ConductorPropertiesWidget::properties + * @return the edited properties + */ +ConductorProperties ConductorPropertiesWidget::properties() const { + ConductorProperties properties_; + if (ui -> m_simple_rb -> isChecked()) properties_.type = ConductorProperties::Simple; + else if (ui -> m_multi_rb -> isChecked()) properties_.type = ConductorProperties::Multi; + else if (ui -> m_single_rb -> isChecked()) properties_.type = ConductorProperties::Single; + properties_.color = ui->m_color_pb->palette().color(QPalette::Button); + properties_.style = static_cast(ui->m_line_style_cb->itemData(ui->m_line_style_cb->currentIndex()).toInt()); + properties_.text = ui -> m_text_le -> text(); + properties_.text_size = ui -> m_text_size_sb -> value(); + properties_.verti_rotate_text = m_verti_select -> value(); + properties_.horiz_rotate_text = m_horiz_select -> value(); + properties_.singleLineProperties.hasGround = ui -> m_earth_cb -> isChecked(); + properties_.singleLineProperties.hasNeutral = ui -> m_neutral_cb -> isChecked(); + properties_.singleLineProperties.is_pen = ui -> m_pen_cb -> isChecked(); + properties_.singleLineProperties.setPhasesCount(ui -> m_phase_cb -> isChecked() ? ui -> m_phase_sb -> value() : 0); + + return properties_; +} + +/** + * @brief ConductorPropertiesWidget::setReadOnly + * @param ro if true this widget is disabled + */ +void ConductorPropertiesWidget::setReadOnly(const bool &ro) { + this->setDisabled(ro); +} + +/** + * @brief ConductorPropertiesWidget::initWidget + */ +void ConductorPropertiesWidget::initWidget() { + m_verti_select = QETApp::createTextOrientationSpinBoxWidget(); + ui -> m_text_angle_gl -> addWidget(m_verti_select, 2, 0, Qt::AlignHCenter); + m_horiz_select = QETApp::createTextOrientationSpinBoxWidget(); + ui -> m_text_angle_gl -> addWidget(m_horiz_select, 2, 1, Qt::AlignHCenter); + + ui -> m_line_style_cb -> addItem(tr("Trait plein", "conductor style: solid line"), Qt::SolidLine); + ui -> m_line_style_cb -> addItem(tr("Trait en pointill\351s", "conductor style: dashed line"), Qt::DashLine); + ui -> m_line_style_cb -> addItem(tr("Traits et points", "conductor style: dashed and dotted line"), Qt::DashDotLine); + + ui -> m_update_preview_pb -> setHidden(true); + //Check this checkbox for init the associated groupbox + ui -> m_single_rb -> setChecked(true); + ui -> m_multi_rb -> setChecked(true); +} + +/** + * @brief ConductorPropertiesWidget::setConductorType + * Update this widget to the new conductor type + * @param type + */ +void ConductorPropertiesWidget::setConductorType(ConductorProperties::ConductorType type) { + switch (type) { + case ConductorProperties::Simple: + ui -> m_simple_rb -> setChecked(true); + break; + case ConductorProperties::Multi: + ui -> m_multi_rb -> setChecked(true); + break; + case ConductorProperties::Single: + ui -> m_single_rb -> setChecked(true); + break; + default: + ui -> m_multi_rb -> setChecked(true); + break; + } +} + +/** + * @brief ConductorPropertiesWidget::updatePreview + * Update the preview for single lien + * @param b true: update from the value displayed by this widget + * false: update from the properties given at the constructor of this widget + */ +void ConductorPropertiesWidget::updatePreview(bool b) { + const QRect pixmap_rect(0, 0, 96, 96); + QPixmap pixmap(pixmap_rect.width(), pixmap_rect.height()); + QPainter painter; + painter.begin(&pixmap); + painter.eraseRect(pixmap_rect); + painter.drawRect(pixmap_rect.adjusted(0,0,-1,-1)); + painter.drawLine(QLineF(0, pixmap_rect.height() / 2, pixmap_rect.width(), pixmap_rect.height() / 2)); + + if (b) properties().singleLineProperties.draw(&painter, QET::Horizontal, pixmap_rect); + else m_properties.singleLineProperties.draw(&painter, QET::Horizontal, pixmap_rect); + + painter.end(); + ui -> m_preview_label -> setPixmap(pixmap); +} + +/** + * @brief ConductorPropertiesWidget::on_m_earth_cb_toggled + * Update the widget when toggled + * @param checked + */ +void ConductorPropertiesWidget::on_m_earth_cb_toggled(bool checked) { + if (checked && ui -> m_neutral_cb -> isChecked()) + ui -> m_pen_cb -> setEnabled(true); + else ui -> m_pen_cb -> setDisabled(true); +} + +/** + * @brief ConductorPropertiesWidget::on_m_neutral_cb_toggled + * Update the widget when toggled + * @param checked + */ +void ConductorPropertiesWidget::on_m_neutral_cb_toggled(bool checked) { + if (checked && ui -> m_earth_cb -> isChecked()) + ui -> m_pen_cb -> setEnabled(true); + else ui -> m_pen_cb -> setDisabled(true); +} + +/** + * @brief ConductorPropertiesWidget::on_m_color_pb_clicked + * Open a color dialog, for choose the color of conductor + */ +void ConductorPropertiesWidget::on_m_color_pb_clicked() { + QColor color = QColorDialog::getColor(m_properties.color, this); + if (color.isValid()) + setColorButton(color); +} + +/** + * @brief ConductorPropertiesWidget::setColorButton + * Set m_color_pb to @color + * @param color + */ +void ConductorPropertiesWidget::setColorButton(const QColor &color) { + QPalette palette; + palette.setColor(QPalette::Button, color); + ui -> m_color_pb -> setPalette(palette); +} + +/** + * @brief ConductorPropertiesWidget::on_m_update_preview_pb_clicked + * Update the preview of single line. + * m_update_preview_pb is a no used button and hidden, his role is only + * to centralize signal from various widget to edit single ligne properties, + * for update the preview + */ +void ConductorPropertiesWidget::on_m_update_preview_pb_clicked() { + updatePreview(); +} diff --git a/sources/ui/conductorpropertieswidget.h b/sources/ui/conductorpropertieswidget.h new file mode 100644 index 000000000..7d574db15 --- /dev/null +++ b/sources/ui/conductorpropertieswidget.h @@ -0,0 +1,64 @@ +/* + Copyright 2006-2014 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 . +*/ +#ifndef CONDUCTORPROPERTIESWIDGET_H +#define CONDUCTORPROPERTIESWIDGET_H + +#include +#include "conductorproperties.h" +class QTextOrientationSpinBoxWidget; + +namespace Ui { + class ConductorPropertiesWidget; +} + +class ConductorPropertiesWidget : public QWidget +{ + Q_OBJECT + + public: + explicit ConductorPropertiesWidget(QWidget *parent = 0); + explicit ConductorPropertiesWidget(const ConductorProperties &properties, QWidget *parent = 0); + ~ConductorPropertiesWidget(); + + //METHODS + void setProperties(const ConductorProperties &properties); + ConductorProperties properties() const; + void setReadOnly(const bool &ro); + + private: + void initWidget(); + void setConductorType(ConductorProperties::ConductorType type); + + //SLOTS + public slots: + void updatePreview(bool b = true); + + private slots: + void on_m_earth_cb_toggled(bool checked); + void on_m_neutral_cb_toggled(bool checked); + void on_m_color_pb_clicked(); + void setColorButton (const QColor &color); + void on_m_update_preview_pb_clicked(); + + private: + Ui::ConductorPropertiesWidget *ui; + ConductorProperties m_properties; + QTextOrientationSpinBoxWidget *m_verti_select, *m_horiz_select; +}; + +#endif // CONDUCTORPROPERTIESWIDGET_H diff --git a/sources/ui/conductorpropertieswidget.ui b/sources/ui/conductorpropertieswidget.ui new file mode 100644 index 000000000..b7a8639aa --- /dev/null +++ b/sources/ui/conductorpropertieswidget.ui @@ -0,0 +1,466 @@ + + + ConductorPropertiesWidget + + + + 0 + 0 + 430 + 571 + + + + Form + + + Protective Earth Neutral + + + + + + Type de conducteur + + + + + + Simple + + + + + + + Multifilaire + + + + + + + + + + + 0 + + + 0 + + + 0 + + + + + + + Texte : + + + + + + + + + + Taille : + + + + + + + 5 + + + 9 + + + + + + + + + Rotation du texte de conducteur : + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + + Vertical + + + Qt::AlignCenter + + + + + + + Horizontal + + + Qt::AlignCenter + + + + + + + + + + + + Unifilaire + + + + + + + + + + + 0 + + + 9 + + + 0 + + + 0 + + + 0 + + + + + + + + 0 + 0 + + + + 1 + + + 3 + + + Qt::Horizontal + + + + + + + neutre + + + + :/ico/16x16/neutral.png:/ico/16x16/neutral.png + + + + + + + phase + + + + :/ico/16x16/phase.png:/ico/16x16/phase.png + + + + + + + 1 + + + 3 + + + + + + + Protective Earth Neutral + + + PEN + + + + + + + terre + + + + :/ico/16x16/ground.png:/ico/16x16/ground.png + + + + + + + TextLabel + + + Qt::AlignCenter + + + + + + + + + + + + + + + + + + + + + + Apparence du conducteur + + + + + + + + + Couleur : + + + + + + + + + + + + + + Style : + + + + + + + + + + + + + + m_multi_rb + toggled(bool) + m_multi_gb + setEnabled(bool) + + + 88 + 73 + + + 54 + 99 + + + + + m_phase_slider + valueChanged(int) + m_phase_sb + setValue(int) + + + 238 + 324 + + + 337 + 332 + + + + + m_phase_sb + valueChanged(int) + m_phase_slider + setValue(int) + + + 356 + 322 + + + 207 + 325 + + + + + m_single_rb + toggled(bool) + m_single_gb + setEnabled(bool) + + + 78 + 192 + + + 81 + 250 + + + + + m_phase_cb + toggled(bool) + m_phase_slider + setEnabled(bool) + + + 152 + 328 + + + 208 + 329 + + + + + m_phase_cb + toggled(bool) + m_phase_sb + setEnabled(bool) + + + 106 + 326 + + + 338 + 323 + + + + + m_earth_cb + clicked() + m_update_preview_pb + click() + + + 142 + 249 + + + 228 + 249 + + + + + m_neutral_cb + clicked() + m_update_preview_pb + click() + + + 158 + 304 + + + 269 + 246 + + + + + m_phase_cb + clicked() + m_update_preview_pb + click() + + + 126 + 340 + + + 254 + 248 + + + + + m_pen_cb + clicked() + m_update_preview_pb + click() + + + 222 + 276 + + + 242 + 245 + + + + + m_phase_sb + valueChanged(int) + m_update_preview_pb + click() + + + 357 + 340 + + + 305 + 248 + + + + +