[qet] [755] Il est desormais possible de choisir la couleur de chaque conducteur. |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
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_;