Fwd: [qet] [755] Il est desormais possible de choisir la couleur de chaque conducteur. |
[ Thread Index | Date Index | More lists.tuxfamily.org/qet Archives ]
Bonjour Said, Plusieurs mois après ta proposition, ton patch a finalement été intégré dans le trunk du projet QElectroTech (après modifications, cf patch ci-joint). En conséquence, souhaites-tu figurer dans le fichier CREDIT de l'application ? @+ -- Xavier G. Développeur du projet QElectroTech ---------- Message transmis ---------- Sujet : [qet] [755] Il est desormais possible de choisir la couleur de chaque conducteur. Date : dimanche 27 septembre 2009 De : subversion@xxxxxxxxxxxxx À : qet@xxxxxxxxxxxxxxxxxxx Revision: 755 Author: xavier Date: 2009-09-27 17:04:17 +0200 (Sun, 27 Sep 2009) Log Message: ----------- Il est desormais possible de choisir la couleur de chaque conducteur. Modified Paths: -------------- trunk/sources/conductor.cpp trunk/sources/conductorproperties.cpp trunk/sources/conductorproperties.h trunk/sources/conductorpropertieswidget.cpp trunk/sources/conductorpropertieswidget.h -------------------------------------------------------
Modified: trunk/sources/conductor.cpp =================================================================== --- trunk/sources/conductor.cpp 2009-09-20 14:16:38 UTC (rev 754) +++ trunk/sources/conductor.cpp 2009-09-27 15:04:17 UTC (rev 755) @@ -451,26 +451,27 @@ qp -> save(); qp -> setRenderHint(QPainter::Antialiasing, false); + // determine la couleur du conducteur + QColor final_conductor_color = isSelected() ? Qt::red : properties_.color; + // affectation du QPen et de la QBrush modifies au QPainter qp -> setBrush(conductor_brush); - qp -> setPen(conductor_pen); - if (isSelected()) { - QPen tmp = qp -> pen(); - tmp.setColor(Qt::red); - qp -> setPen(tmp); - } + QPen final_conductor_pen = conductor_pen; + // modification du QPen generique pour lui affecter la couleur adequate + final_conductor_pen.setColor(final_conductor_color); + // utilisation d'un trait "cosmetique" en-dessous d'un certain zoom if (options && options -> levelOfDetail < 1.0) { - QPen tmp = qp -> pen(); - tmp.setCosmetic(true); - qp -> setPen(tmp); + final_conductor_pen.setCosmetic(true); } + qp -> setPen(final_conductor_pen); + // dessin du conducteur qp -> drawPath(path()); if (properties_.type == ConductorProperties::Single) { - if (isSelected()) qp -> setBrush(Qt::red); + qp -> setBrush(final_conductor_color); properties_.singleLineProperties.draw( qp, middleSegment() -> isHorizontal() ? QET::Horizontal : QET::Vertical, @@ -509,7 +510,7 @@ QList<QPointF> junctions_list = junctions(); if (!junctions_list.isEmpty()) { QBrush junction_brush(Qt::SolidPattern); - junction_brush.setColor(isSelected() ? Qt::red : Qt::black); + junction_brush.setColor(final_conductor_color); qp -> setBrush(junction_brush); qp -> setRenderHint(QPainter::Antialiasing, true); foreach(QPointF point, junctions_list) { @@ -1100,6 +1101,7 @@ Relit les proprietes et les applique */ void Conductor::readProperties() { + // la couleur n'est vraiment applicable que lors du rendu du conducteur setText(properties_.text); text_item -> setVisible(properties_.type == ConductorProperties::Multi); } Modified: trunk/sources/conductorproperties.cpp =================================================================== --- trunk/sources/conductorproperties.cpp 2009-09-20 14:16:38 UTC (rev 754) +++ trunk/sources/conductorproperties.cpp 2009-09-27 15:04:17 UTC (rev 755) @@ -181,12 +181,30 @@ } /** + Constructeur : par defaut, les proprietes font un conducteur + multifilaire noir dont le texte est "_" +*/ +ConductorProperties::ConductorProperties() : + type(Multi), + color(Qt::black), + text("_") +{ +} + +/** + Destructeur +*/ +ConductorProperties::~ConductorProperties() { +} + +/** Exporte les parametres du conducteur sous formes d'attributs XML ajoutes a l'element e. @param e Element XML auquel seront ajoutes des attributs */ void ConductorProperties::toXml(QDomElement &e) const { e.setAttribute("type", typeToString(type)); + e.setAttribute("color", color.name()); if (type == Single) { singleLineProperties.toXml(e); } else if (type == Multi) { @@ -200,6 +218,14 @@ @param e Element XML dont les attributs seront lus */ void ConductorProperties::fromXml(QDomElement &e) { + // recupere la couleur du conducteur + QColor xml_color= QColor(e.attribute("color")); + if (xml_color.isValid()) { + color = xml_color; + } else { + color = QColor(Qt::black); + } + if (e.attribute("type") == typeToString(Single)) { // recupere les parametres specifiques a un conducteur unifilaire singleLineProperties.fromXml(e); @@ -218,6 +244,7 @@ @param prefix prefixe a ajouter devant les noms des parametres */ void ConductorProperties::toSettings(QSettings &settings, const QString &prefix) const { + settings.setValue(prefix + "color", color.name()); settings.setValue(prefix + "type", typeToString(type)); settings.setValue(prefix + "text", text); singleLineProperties.toSettings(settings, prefix); @@ -228,6 +255,14 @@ @param prefix prefixe a ajouter devant les noms des parametres */ void ConductorProperties::fromSettings(QSettings &settings, const QString &prefix) { + // recupere la couleur dans les parametres + QColor settings_color = QColor(settings.value(prefix + "color").toString()); + if (settings_color.isValid()) { + color = settings_color; + } else { + color = QColor(Qt::black); + } + QString setting_type = settings.value(prefix + "type", typeToString(Multi)).toString(); if (setting_type == typeToString(Single)) { type = Single; @@ -259,6 +294,7 @@ int ConductorProperties::operator==(const ConductorProperties &other) { return( other.type == type &&\ + other.color == color &&\ other.text == text &&\ other.singleLineProperties == singleLineProperties ); @@ -271,6 +307,7 @@ int ConductorProperties::operator!=(const ConductorProperties &other) { return( other.type != type ||\ + other.color != color ||\ other.text != text ||\ other.singleLineProperties != singleLineProperties ); Modified: trunk/sources/conductorproperties.h =================================================================== --- trunk/sources/conductorproperties.h 2009-09-20 14:16:38 UTC (rev 754) +++ trunk/sources/conductorproperties.h 2009-09-27 15:04:17 UTC (rev 755) @@ -57,17 +57,9 @@ class ConductorProperties { // constructeurs, destructeur public: - /** - Constructeur : par defaut, les proprietes font un conducteur - multifilaire dont le texte est "_" - */ - ConductorProperties() : type(Multi), text("_") { - } + ConductorProperties(); + virtual ~ConductorProperties(); - /// Destructeur - virtual ~ConductorProperties() { - } - /** Represente le type d'un conducteur : * Simple : ni symbole ni champ de texte @@ -79,7 +71,8 @@ // attributs /// type du conducteur ConductorType type; - + /// couleur du conducteur + QColor color; /// texte affiche si le conducteur est multifilaire QString text; Modified: trunk/sources/conductorpropertieswidget.cpp =================================================================== --- trunk/sources/conductorpropertieswidget.cpp 2009-09-20 14:16:38 UTC (rev 754) +++ trunk/sources/conductorpropertieswidget.cpp 2009-09-27 15:04:17 UTC (rev 755) @@ -45,7 +45,7 @@ /// construit l'interface du widget void ConductorPropertiesWidget::buildInterface() { - setMinimumSize(380, 280); + setMinimumSize(380, 320); QVBoxLayout *main_layout = new QVBoxLayout(this); main_layout -> setContentsMargins(0, 0, 0, 0); @@ -93,12 +93,28 @@ 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); + setColorButton(properties_.color); + groupbox_layout -> addWidget(simple); groupbox_layout -> addWidget(multiline); groupbox_layout -> addLayout(multiline_layout); groupbox_layout -> addWidget(singleline); groupbox_layout -> addLayout(singleline_layout1); + groupbox2_layout -> addLayout(color_layout); + radio_buttons = new QButtonGroup(this); radio_buttons -> addButton(simple, ConductorProperties::Simple); radio_buttons -> addButton(multiline, ConductorProperties::Multi); @@ -118,8 +134,38 @@ 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(color_button, SIGNAL(clicked()), this, SLOT(chooseColor())); } +/** + 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))); @@ -130,6 +176,7 @@ 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())); } /// Destructeur @@ -139,6 +186,7 @@ /// Met a jour les proprietes void ConductorPropertiesWidget::updateConfig() { properties_.type = static_cast<ConductorProperties::ConductorType>(radio_buttons -> checkedId()); + properties_.color = colorButton(); properties_.text = text_field -> text(); properties_.singleLineProperties.hasGround = ground_checkbox -> isChecked(); properties_.singleLineProperties.hasNeutral = neutral_checkbox -> isChecked(); @@ -152,6 +200,7 @@ destroyConnections(); setConductorType(properties_.type); + setColorButton(properties_.color); text_field -> setText(properties_.text); ground_checkbox -> setChecked(properties_.singleLineProperties.hasGround); neutral_checkbox -> setChecked(properties_.singleLineProperties.hasNeutral); Modified: trunk/sources/conductorpropertieswidget.h =================================================================== --- trunk/sources/conductorpropertieswidget.h 2009-09-20 14:16:38 UTC (rev 754) +++ trunk/sources/conductorpropertieswidget.h 2009-09-27 15:04:17 UTC (rev 755) @@ -43,11 +43,14 @@ private: void setConductorType(ConductorProperties::ConductorType); + void setColorButton(const QColor &); + QColor colorButton() const; public slots: void updatePreview(); void updateConfig(); void updateDisplay(); + void chooseColor(); // attributs prives private: @@ -62,6 +65,7 @@ QCheckBox *ground_checkbox; QCheckBox *neutral_checkbox; QLabel *preview; + QPushButton *color_button; ConductorProperties properties_;
Attachment:
signature.asc
Description: This is a digitally signed message part.
Mail converted by MHonArc 2.6.19+ | http://listengine.tuxfamily.org/ |