[qet] qet/qet: [4999] Add bicolor conductor |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 4999
Author: blacksun
Date: 2017-08-01 21:09:31 +0200 (Tue, 01 Aug 2017)
Log Message:
-----------
Add bicolor conductor
Modified Paths:
--------------
trunk/sources/conductorproperties.cpp
trunk/sources/conductorproperties.h
trunk/sources/qetgraphicsitem/conductor.cpp
trunk/sources/ui/conductorpropertieswidget.cpp
trunk/sources/ui/conductorpropertieswidget.h
trunk/sources/ui/conductorpropertieswidget.ui
Modified: trunk/sources/conductorproperties.cpp
===================================================================
--- trunk/sources/conductorproperties.cpp 2017-08-01 13:41:26 UTC (rev 4998)
+++ trunk/sources/conductorproperties.cpp 2017-08-01 19:09:31 UTC (rev 4999)
@@ -250,6 +250,10 @@
if (color != QColor(Qt::black))
e.setAttribute("color", color.name());
+ e.setAttribute("bicolor", m_bicolor? "true" : "false");
+ e.setAttribute("color2", m_color_2.name());
+ e.setAttribute("dash-size", QString::number(m_dash_size));
+
if (type == Single)
singleLineProperties.toXml(e);
@@ -281,6 +285,14 @@
QColor xml_color= QColor(e.attribute("color"));
color = (xml_color.isValid()? xml_color : QColor(Qt::black));
+ QString bicolor_str = e.attribute("bicolor", "false");
+ m_bicolor = bicolor_str == "true"? true : false;
+
+ QColor xml_color_2 = QColor(e.attribute("color2"));
+ m_color_2 = xml_color_2.isValid()? xml_color_2 : QColor(Qt::black);
+
+ m_dash_size = e.attribute("dash-size", QString::number(1)).toInt();
+
// read style of conductor
readStyle(e.attribute("style"));
@@ -317,6 +329,9 @@
void ConductorProperties::toSettings(QSettings &settings, const QString &prefix) const
{
settings.setValue(prefix + "color", color.name());
+ settings.setValue(prefix + "bicolor", m_bicolor);
+ settings.setValue(prefix + "color2", m_color_2.name());
+ settings.setValue(prefix + "dash-size", m_dash_size);
settings.setValue(prefix + "style", writeStyle());
settings.setValue(prefix + "type", typeToString(type));
settings.setValue(prefix + "text", text);
@@ -341,6 +356,12 @@
QColor settings_color = QColor(settings.value(prefix + "color").toString());
color = (settings_color.isValid()? settings_color : QColor(Qt::black));
+ QColor settings_color_2 = QColor(settings.value(prefix + "color2").toString());
+ m_color_2 = (settings_color_2.isValid()? settings_color_2 : QColor(Qt::black));
+
+ m_bicolor = settings.value(prefix + "bicolor", false).toBool();
+ m_dash_size = settings.value(prefix + "dash-size", 1).toInt();
+
QString setting_type = settings.value(prefix + "type", typeToString(Multi)).toString();
type = (setting_type == typeToString(Single)? Single : Multi);
@@ -388,13 +409,18 @@
*/
void ConductorProperties::applyForEqualAttributes(QList<ConductorProperties> list)
{
- if (list.isEmpty())
+ const QList<ConductorProperties> clist = list;
+
+ if (clist.isEmpty())
return;
- if (list.size() == 1)
+ if (clist.size() == 1)
{
- ConductorProperties cp = list.first();
+ ConductorProperties cp = clist.first();
color = cp.color;
+ m_bicolor = cp.m_bicolor;
+ m_color_2 = cp.m_color_2;
+ m_dash_size = cp.m_dash_size;
text = cp.text;
m_formula = cp.m_formula;
m_function = cp.m_function;
@@ -410,9 +436,15 @@
}
bool equal = true;
+ QColor c_value;
+ bool b_value;
+ QString s_value;
+ int i_value;
+ double d_value;
+
//Color
- QColor c_value = list.first().color;
- foreach(ConductorProperties cp, list)
+ c_value = clist.first().color;
+ for(ConductorProperties cp : clist)
{
if (cp.color != c_value)
equal = false;
@@ -420,10 +452,43 @@
if (equal)
color = c_value;
equal = true;
+
+ //bicolor
+ b_value = clist.first().m_bicolor;
+ for(ConductorProperties cp : clist)
+ {
+ if (cp.m_bicolor != b_value)
+ equal = false;
+ }
+ if (equal)
+ m_bicolor = b_value;
+ equal = true;
+
+ //second color
+ c_value = clist.first().m_color_2;
+ for(ConductorProperties cp : clist)
+ {
+ if (cp.m_color_2 != c_value)
+ equal = false;
+ }
+ if (equal)
+ m_color_2 = c_value;
+ equal = true;
+
+ //Dash size
+ i_value = clist.first().m_dash_size;
+ for(ConductorProperties cp : clist)
+ {
+ if (cp.m_dash_size != i_value)
+ equal = false;
+ }
+ if (equal)
+ m_dash_size = i_value;
+ equal = true;
//text
- QString s_value = list.first().text;
- foreach(ConductorProperties cp, list)
+ s_value = clist.first().text;
+ for(ConductorProperties cp : clist)
{
if (cp.text != s_value)
equal = false;
@@ -433,8 +498,8 @@
equal = true;
//formula
- s_value = list.first().m_formula;
- foreach(ConductorProperties cp, list)
+ s_value = clist.first().m_formula;
+ for(ConductorProperties cp : clist)
{
if (cp.m_formula != s_value)
equal = false;
@@ -444,8 +509,8 @@
equal = true;
//function
- s_value = list.first().m_function;
- foreach(ConductorProperties cp, list)
+ s_value = clist.first().m_function;
+ for(ConductorProperties cp : clist)
{
if (cp.m_function != s_value)
equal = false;
@@ -455,8 +520,8 @@
equal = true;
//Tension protocol
- s_value = list.first().m_tension_protocol;
- foreach(ConductorProperties cp, list)
+ s_value = clist.first().m_tension_protocol;
+ for(ConductorProperties cp : clist)
{
if (cp.m_tension_protocol != s_value)
equal = false;
@@ -466,8 +531,8 @@
equal = true;
//text size
- int i_value = list.first().text_size;
- foreach(ConductorProperties cp, list)
+ i_value = clist.first().text_size;
+ for(ConductorProperties cp : clist)
{
if (cp.text_size != i_value)
equal = false;
@@ -477,8 +542,8 @@
equal = true;
//conductor size
- double d_value = list.first().cond_size;
- foreach(ConductorProperties cp, list)
+ d_value = clist.first().cond_size;
+ for(ConductorProperties cp : clist)
{
if (cp.cond_size != d_value)
equal = false;
@@ -488,8 +553,8 @@
equal = true;
//show text
- bool b_value = list.first().m_show_text;
- foreach(ConductorProperties cp, list)
+ b_value = clist.first().m_show_text;
+ for(ConductorProperties cp : clist)
{
if (cp.m_show_text != b_value)
equal = false;
@@ -499,8 +564,8 @@
equal = true;
//One text per folio
- b_value = list.first().m_one_text_per_folio;
- foreach(ConductorProperties cp, list)
+ b_value = clist.first().m_one_text_per_folio;
+ for(ConductorProperties cp : clist)
{
if (cp.m_one_text_per_folio != b_value)
equal = false;
@@ -510,8 +575,8 @@
equal = true;
//Text rotation for vertical conducor
- d_value = list.first().verti_rotate_text;
- foreach(ConductorProperties cp, list)
+ d_value = clist.first().verti_rotate_text;
+ for(ConductorProperties cp : clist)
{
if (cp.verti_rotate_text != d_value)
equal = false;
@@ -521,8 +586,8 @@
equal = true;
//Text rotation for horizontal conducor
- d_value = list.first().horiz_rotate_text;
- foreach(ConductorProperties cp, list)
+ d_value = clist.first().horiz_rotate_text;
+ for(ConductorProperties cp : clist)
{
if (cp.horiz_rotate_text != d_value)
equal = false;
@@ -556,6 +621,9 @@
return(
other.type == type &&\
other.color == color &&\
+ other.m_bicolor == m_bicolor &&\
+ other.m_color_2 == m_color_2 &&\
+ other.m_dash_size == m_dash_size &&\
other.style == style &&\
other.text == text &&\
other.m_formula == m_formula &&\
Modified: trunk/sources/conductorproperties.h
===================================================================
--- trunk/sources/conductorproperties.h 2017-08-01 13:41:26 UTC (rev 4998)
+++ trunk/sources/conductorproperties.h 2017-08-01 19:09:31 UTC (rev 4999)
@@ -77,18 +77,28 @@
//Attributes
ConductorType type;
- QColor color;
+
+ QColor color,
+ m_color_2;
+
QString text,
m_function,
m_tension_protocol,
m_formula;
- int text_size;
- double cond_size;
- double verti_rotate_text;
- double horiz_rotate_text;
- bool m_show_text;
- bool m_one_text_per_folio;
+
+ int text_size,
+ m_dash_size = 1;
+
+ double cond_size,
+ verti_rotate_text,
+ horiz_rotate_text;
+
+ bool m_show_text,
+ m_one_text_per_folio,
+ m_bicolor = false;
+
Qt::PenStyle style;
+
SingleLineProperties singleLineProperties;
// methods
Modified: trunk/sources/qetgraphicsitem/conductor.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/conductor.cpp 2017-08-01 13:41:26 UTC (rev 4998)
+++ trunk/sources/qetgraphicsitem/conductor.cpp 2017-08-01 19:09:31 UTC (rev 4999)
@@ -456,11 +456,12 @@
}
/**
- Dessine le conducteur sans antialiasing.
- @param qp Le QPainter a utiliser pour dessiner le conducteur
- @param options Les options de style pour le conducteur
- @param qw Le QWidget sur lequel on dessine
-*/
+ * @brief Conductor::paint
+ * Draw the conductor
+ * @param qp
+ * @param options
+ * @param qw
+ */
void Conductor::paint(QPainter *qp, const QStyleOptionGraphicsItem *options, QWidget *qw)
{
Q_UNUSED(qw);
@@ -467,7 +468,7 @@
qp -> save();
qp -> setRenderHint(QPainter::Antialiasing, false);
- // determine la couleur du conducteur
+ // Set the color of conductor
QColor final_conductor_color(m_properties.color);
if (must_highlight_ == Normal) {
final_conductor_color = QColor::fromRgb(69, 137, 255, 255);
@@ -486,24 +487,38 @@
//Draw the conductor bigger when is hovered
conductor_pen.setWidthF(m_mouse_over? (m_properties.cond_size) +4 : (m_properties.cond_size));
- // affectation du QPen et de la QBrush modifies au QPainter
+ //Set the QPen and QBrush to the QPainter
qp -> setBrush(conductor_brush);
QPen final_conductor_pen = conductor_pen;
- // modification du QPen generique pour lui affecter la couleur et le style adequats
+ //Set the conductor style
final_conductor_pen.setColor(final_conductor_color);
final_conductor_pen.setStyle(m_properties.style);
- final_conductor_pen.setJoinStyle(Qt::SvgMiterJoin); // meilleur rendu des pointilles
+ final_conductor_pen.setJoinStyle(Qt::SvgMiterJoin); // better rendering with dot
- // utilisation d'un trait "cosmetique" en-dessous d'un certain zoom
+ //Use a cosmetique line, below a certain zoom
if (options && options -> levelOfDetail < 1.0) {
final_conductor_pen.setCosmetic(true);
}
- qp -> setPen(final_conductor_pen);
+ qp->setPen(final_conductor_pen);
- // dessin du conducteur
+ //Draw the conductor
qp -> drawPath(path());
+ //Draw the second color
+ if(m_properties.m_bicolor)
+ {
+ final_conductor_pen.setColor(m_properties.m_color_2);
+ final_conductor_pen.setStyle(Qt::CustomDashLine);
+ QVector<qreal> dash_pattern;
+ dash_pattern << m_properties.m_dash_size-2 << m_properties.m_dash_size;
+ final_conductor_pen.setDashPattern(dash_pattern);
+ qp->save();
+ qp->setPen(final_conductor_pen);
+ qp->drawPath(path());
+ qp->restore();
+ }
+
if (m_properties.type == ConductorProperties::Single) {
qp -> setBrush(final_conductor_color);
m_properties.singleLineProperties.draw(
@@ -518,17 +533,18 @@
if (isSelected())
m_handler.drawHandler(qp, handlerPoints());
- // dessine les eventuelles jonctions
- QList<QPointF> junctions_list = junctions();
- if (!junctions_list.isEmpty()) {
+ //Draw the junctions
+ const QList<QPointF> junctions_list = junctions();
+ if (!junctions_list.isEmpty())
+ {
final_conductor_pen.setStyle(Qt::SolidLine);
QBrush junction_brush(final_conductor_color, Qt::SolidPattern);
qp -> setPen(final_conductor_pen);
qp -> setBrush(junction_brush);
qp -> setRenderHint(QPainter::Antialiasing, true);
- foreach(QPointF point, junctions_list) {
+
+ for(QPointF point : junctions_list)
qp -> drawEllipse(QRectF(point.x() - 1.5, point.y() - 1.5, 3.0, 3.0));
- }
}
qp -> restore();
Modified: trunk/sources/ui/conductorpropertieswidget.cpp
===================================================================
--- trunk/sources/ui/conductorpropertieswidget.cpp 2017-08-01 13:41:26 UTC (rev 4998)
+++ trunk/sources/ui/conductorpropertieswidget.cpp 2017-08-01 19:09:31 UTC (rev 4999)
@@ -68,13 +68,18 @@
*/
void ConductorPropertiesWidget::setProperties(const ConductorProperties &properties)
{
- if (m_properties == properties) return;
+ if (m_properties == properties)
+ return;
+
m_properties = properties;
setColorButton(m_properties.color);
+ setColorButton2(m_properties.m_color_2);
int index = ui -> m_line_style_cb -> findData(QPen(m_properties.style));
if (index != -1) ui -> m_line_style_cb -> setCurrentIndex(index);
+ ui->m_color_2_gb -> setChecked (m_properties.m_bicolor);
+ ui->m_dash_size_sb -> setValue (m_properties.m_dash_size);
ui->m_formula_le -> setText (m_properties.m_formula);
ui->m_text_le -> setText (m_properties.text);
ui->m_function_le -> setText (m_properties.m_function);
@@ -107,6 +112,9 @@
else if (ui -> m_singlewire_gb -> isChecked()) properties_.type = ConductorProperties::Single;
properties_.color = ui -> m_color_pb->palette().color(QPalette::Button);
+ properties_.m_bicolor = ui->m_color_2_gb->isChecked();
+ properties_.m_color_2 = ui->m_color_2_pb->palette().color(QPalette::Button);
+ properties_.m_dash_size = ui->m_dash_size_sb->value();
properties_.style = ui -> m_line_style_cb->itemData(ui->m_line_style_cb->currentIndex()).value<QPen>().style();
properties_.m_formula = ui->m_formula_le->text();
properties_.text = ui -> m_text_le -> text();
@@ -295,7 +303,7 @@
* Set m_color_pb to @color
* @param color
*/
-void ConductorPropertiesWidget::setColorButton(const QColor &color) {
+void ConductorPropertiesWidget::setColorButton(const QColor &color){
QPalette palette;
palette.setColor(QPalette::Button, color);
ui -> m_color_pb -> setStyleSheet(QString("background-color: %1; min-height: 1.5em; border-style: outset; border-width: 2px; border-color: gray; border-radius: 4px;").arg(color.name()));
@@ -302,6 +310,18 @@
}
/**
+ * @brief ConductorPropertiesWidget::setColorButton2
+ * Set m_color_2_pb to @color
+ * @param color
+ */
+void ConductorPropertiesWidget::setColorButton2(const QColor &color)
+{
+ QPalette palette;
+ palette.setColor(QPalette::Button, color);
+ ui->m_color_2_pb->setStyleSheet(QString("background-color: %1; min-height: 1.5em; border-style: outset; border-width: 2px; border-color: gray; border-radius: 4px;").arg(color.name()));
+}
+
+/**
* @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
@@ -311,3 +331,14 @@
void ConductorPropertiesWidget::on_m_update_preview_pb_clicked() {
updatePreview();
}
+
+/**
+ * @brief ConductorPropertiesWidget::on_m_color_2_pb_clicked
+ * Open a color dialog, for choose the second color of conductor
+ */
+void ConductorPropertiesWidget::on_m_color_2_pb_clicked()
+{
+ QColor color = QColorDialog::getColor(m_properties.m_color_2, this);
+ if (color.isValid())
+ setColorButton2(color);
+}
Modified: trunk/sources/ui/conductorpropertieswidget.h
===================================================================
--- trunk/sources/ui/conductorpropertieswidget.h 2017-08-01 13:41:26 UTC (rev 4998)
+++ trunk/sources/ui/conductorpropertieswidget.h 2017-08-01 19:09:31 UTC (rev 4999)
@@ -65,8 +65,11 @@
void on_m_neutral_cb_toggled(bool checked);
void on_m_color_pb_clicked();
void setColorButton (const QColor &color);
+ void setColorButton2 (const QColor &color);
void on_m_update_preview_pb_clicked();
+ void on_m_color_2_pb_clicked();
+
private:
Ui::ConductorPropertiesWidget *ui;
ConductorProperties m_properties;
Modified: trunk/sources/ui/conductorpropertieswidget.ui
===================================================================
--- trunk/sources/ui/conductorpropertieswidget.ui 2017-08-01 13:41:26 UTC (rev 4998)
+++ trunk/sources/ui/conductorpropertieswidget.ui 2017-08-01 19:09:31 UTC (rev 4999)
@@ -390,7 +390,7 @@
</property>
</widget>
</item>
- <item row="3" column="0">
+ <item row="4" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -426,6 +426,55 @@
</property>
</widget>
</item>
+ <item row="3" column="0" colspan="2">
+ <widget class="QGroupBox" name="m_color_2_gb">
+ <property name="title">
+ <string>Couleur secondaire :</string>
+ </property>
+ <property name="flat">
+ <bool>true</bool>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="m_dash_size_sb">
+ <property name="suffix">
+ <string>px</string>
+ </property>
+ <property name="minimum">
+ <number>2</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPushButton" name="m_color_2_pb">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_12">
+ <property name="text">
+ <string>Couleur :</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_13">
+ <property name="text">
+ <string>Taille de trait :</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
</layout>
</widget>
</widget>