/* 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 "styleeditor.h" #include "customelementgraphicpart.h" /** Constructeur @param editor L'editeur d'element concerne @param p La partie a editer @param parent le Widget parent */ StyleEditor::StyleEditor(QETElementEditor *editor, CustomElementGraphicPart *p, QWidget *parent) : ElementItemEditor(editor, parent), part(p) { // couleur outline_color = new QComboBox(this); outline_color -> addItem(tr("Noir", "element part color"), CustomElementGraphicPart::BlackColor); outline_color -> addItem(tr("Blanc", "element part color"), CustomElementGraphicPart::WhiteColor); outline_color -> addItem(tr("Vert", "element part color"), CustomElementGraphicPart::GreenColor); outline_color -> addItem(tr("Rouge", "element part color"), CustomElementGraphicPart::RedColor); outline_color -> addItem(tr("Bleu", "element part color"), CustomElementGraphicPart::BlueColor); // style line_style = new QComboBox(this); line_style -> addItem(tr("Normal", "element part line style"), CustomElementGraphicPart::NormalStyle); line_style -> addItem(tr("Tiret", "element part line style"), CustomElementGraphicPart::DashedStyle); line_style -> addItem(tr("Pointill\351", "element part line style"), CustomElementGraphicPart::DottedStyle); line_style -> addItem(tr("Traits et points", "element part line style"), CustomElementGraphicPart::DashdottedStyle); //normal_style -> setChecked(true); // epaisseur size_weight = new QComboBox(this); size_weight -> addItem(tr("Nulle", "element part weight"), CustomElementGraphicPart::NoneWeight); size_weight -> addItem(tr("Fine", "element part weight"), CustomElementGraphicPart::ThinWeight); size_weight -> addItem(tr("Normale", "element part weight"), CustomElementGraphicPart::NormalWeight); size_weight -> addItem(tr("Forte", "element part weight"), CustomElementGraphicPart::UltraWeight); size_weight -> addItem(tr("\311lev\351", "element part weight"), CustomElementGraphicPart::BigWeight); // remplissage filling_color = new QComboBox (this); filling_color -> addItem(tr("Aucun", "element part filling"), CustomElementGraphicPart::NoneFilling); filling_color -> addItem(tr("Noir", "element part filling"), CustomElementGraphicPart::BlackFilling); filling_color -> addItem(tr("Blanc", "element part filling"), CustomElementGraphicPart::WhiteFilling); filling_color -> addItem(tr("Vert", "element part filling"), CustomElementGraphicPart::GreenFilling); filling_color -> addItem(tr("Rouge", "element part filling"), CustomElementGraphicPart::RedFilling); filling_color -> addItem(tr("Bleu", "element part filling"), CustomElementGraphicPart::BlueFilling); // antialiasing antialiasing = new QCheckBox(tr("Antialiasing")); updateForm(); main_layout = new QVBoxLayout(); main_layout -> setMargin(0); main_layout -> addWidget(new QLabel("" + tr("Apparence :") + " ")); QHBoxLayout *color_layout = new QHBoxLayout(); color_layout -> addWidget(new QLabel(tr("Contour :")), 0, Qt::AlignRight); color_layout -> addWidget(outline_color); color_layout -> addSpacing(10); color_layout -> addWidget(new QLabel(tr("Remplissage :")), 0, Qt::AlignRight); color_layout -> addWidget(filling_color); main_layout -> addLayout(color_layout); QHBoxLayout *style_layout = new QHBoxLayout(); style_layout -> addWidget(new QLabel(tr("Style : ")), 0, Qt::AlignRight); style_layout -> addWidget(line_style); style_layout -> addSpacing(10); style_layout -> addWidget(new QLabel(tr("\311paisseur : ")), 0, Qt::AlignRight); style_layout -> addWidget(size_weight); main_layout -> addLayout(style_layout); main_layout -> addWidget(antialiasing); main_layout -> addSpacing(10); main_layout -> addWidget(new QLabel("" + tr("G\351om\351trie :") + " ")); main_layout -> addStretch(); setLayout(main_layout); } /// Destructeur StyleEditor::~StyleEditor() { } /** * @brief StyleEditor::updatePart * Update the part from the content of the form */ void StyleEditor::updatePart() { if (!part) return; part->setProperty("antialias", antialiasing -> isChecked()); part->setProperty("color", outline_color -> itemData(outline_color -> currentIndex())); part->setProperty("line_style", line_style -> itemData(line_style -> currentIndex())); part->setProperty("line_weight", size_weight -> itemData(size_weight -> currentIndex())); part->setProperty("filling", filling_color -> itemData(filling_color -> currentIndex())); } /// Update antialiasing with undo command void StyleEditor::updatePartAntialiasing() { if (part) addChangePartCommand(tr("style antialiasing"), part, "antialias", antialiasing -> isChecked()); else if (!m_part_list.isEmpty()) addChangePartCommand(tr("style antialiasing"), m_cep_list, "antialias", antialiasing -> isChecked()); } /// Update color with undo command void StyleEditor::updatePartColor() { if (part) addChangePartCommand(tr("style couleur"), part, "color", outline_color->itemData(outline_color -> currentIndex())); else if (!m_part_list.isEmpty()) addChangePartCommand(tr("style couleur"), m_cep_list, "color", outline_color->itemData(outline_color -> currentIndex())); } /// Update style with undo command void StyleEditor::updatePartLineStyle() { if (part) addChangePartCommand(tr("style ligne"), part, "line_style", line_style->itemData(line_style -> currentIndex())); else if (!m_part_list.isEmpty()) addChangePartCommand(tr("style ligne"), m_cep_list, "line_style", line_style->itemData(line_style -> currentIndex())); } /// Update weight with undo command void StyleEditor::updatePartLineWeight() { if (part) addChangePartCommand(tr("style epaisseur"), part, "line_weight", size_weight->itemData(size_weight -> currentIndex())); else if (!m_part_list.isEmpty()) addChangePartCommand(tr("style epaisseur"), m_cep_list, "line_weight", size_weight->itemData(size_weight -> currentIndex())); } /// Update color filling with undo command void StyleEditor::updatePartFilling() { if(part) addChangePartCommand(tr("style remplissage"), part, "filling", filling_color->itemData(filling_color -> currentIndex())); else if (!m_part_list.isEmpty()) addChangePartCommand(tr("style remplissage"), m_cep_list, "filling", filling_color->itemData(filling_color -> currentIndex())); } /** * @brief StyleEditor::updateForm * Update the edition form according to the value of edited part(s) */ void StyleEditor::updateForm() { if (!part && m_part_list.isEmpty()) return; activeConnections(false); if (part) { antialiasing -> setChecked(part -> antialiased()); outline_color -> setCurrentIndex(part -> color()); line_style -> setCurrentIndex(part -> lineStyle()); size_weight -> setCurrentIndex(part -> lineWeight()); filling_color -> setCurrentIndex(part -> filling()); } else if (m_part_list.size()) { CustomElementGraphicPart *first_part = m_part_list.first(); antialiasing -> setChecked(first_part -> antialiased()); outline_color -> setCurrentIndex(first_part -> color()); line_style -> setCurrentIndex(first_part -> lineStyle()); size_weight -> setCurrentIndex(first_part -> lineWeight()); filling_color -> setCurrentIndex(first_part -> filling()); foreach (CustomElementGraphicPart *cegp, m_part_list) { if (first_part -> antialiased() != cegp -> antialiased()) antialiasing -> setChecked(false); if (first_part -> color() != cegp -> color()) outline_color -> setCurrentIndex(-1); if (first_part -> lineStyle() != cegp -> lineStyle()) line_style -> setCurrentIndex(-1); if (first_part -> lineWeight() != cegp -> lineWeight()) size_weight -> setCurrentIndex(-1); if (first_part -> filling() != cegp -> filling()) filling_color -> setCurrentIndex(-1); } } activeConnections(true); } /** * @brief StyleEditor::setPart * Set the part to edit by this editor. * Note : editor can accept or refuse to edit a part * @param new_part : part to edit * @return true if editor accept to edit this CustomElementPart otherwise false */ bool StyleEditor::setPart(CustomElementPart *new_part) { m_part_list.clear(); if (!new_part) { part = nullptr; return(true); } if (CustomElementGraphicPart *part_graphic = dynamic_cast(new_part)) { part = part_graphic; updateForm(); return(true); } return(false); } /** * @brief StyleEditor::setParts * Set several parts to edit by this editor. * Note : editor can accept or refuse to edit several parts. * @param part_list * @return true if every customeElementPart stored in part_list can * be edited by this part editor, otherwise return false * (see StyleEditor::isStyleEditable) */ bool StyleEditor::setParts(QList part_list) { if (part_list.isEmpty()) return false; if (part_list.size() == 1) return setPart(part_list.first()); part = nullptr; m_part_list.clear(); m_cep_list.clear(); if (!isStyleEditable(part_list)) return false; foreach (CustomElementPart *cep, part_list) { if (CustomElementGraphicPart *cegp = dynamic_cast(cep)) m_part_list << cegp; else return false; } foreach (CustomElementGraphicPart *cegp, m_part_list) m_cep_list << cegp; updateForm(); return true; } /** @return la primitive actuellement editee, ou 0 si ce widget n'en edite pas */ CustomElementPart *StyleEditor::currentPart() const { return(part); } /** * @brief StyleEditor::isStyleEditable * @param cep_list * @return true if all of the content of cep_list can be edited by style editor, else return false. */ bool StyleEditor::isStyleEditable(QList cep_list) { QStringList str; str << "arc" << "ellipse" << "line" << "polygon" << "rect"; foreach (CustomElementPart *cep, cep_list) if (!str.contains(cep -> xmlName())) return false; return true; } /** Active ou desactive les connexionx signaux/slots entre les widgets internes. @param active true pour activer les connexions, false pour les desactiver */ void StyleEditor::activeConnections(bool active) { if (active) { connect (outline_color, SIGNAL(activated(int)), this, SLOT(updatePartColor())); connect(line_style, SIGNAL(activated(int)), this, SLOT(updatePartLineStyle())); connect(size_weight, SIGNAL(activated(int)), this, SLOT(updatePartLineWeight())); connect(filling_color, SIGNAL(activated(int)), this, SLOT(updatePartFilling())); connect(antialiasing, SIGNAL(stateChanged(int)), this, SLOT(updatePartAntialiasing())); } else { disconnect(outline_color, SIGNAL(activated(int)), this, SLOT(updatePartColor())); disconnect(line_style, SIGNAL(activated(int)), this, SLOT(updatePartLineStyle())); disconnect(size_weight, SIGNAL(activated(int)), this, SLOT(updatePartLineWeight())); disconnect(filling_color, SIGNAL(activated(int)), this, SLOT(updatePartFilling())); disconnect(antialiasing, SIGNAL(stateChanged(int)), this, SLOT(updatePartAntialiasing())); } }