[qet] [3944] Image can be edited in the dock widget |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/qet Archives
]
Revision: 3944
Author: blacksun
Date: 2015-05-08 19:49:29 +0200 (Fri, 08 May 2015)
Log Message:
-----------
Image can be edited in the dock widget
Modified Paths:
--------------
trunk/sources/qetgraphicsitem/diagramimageitem.cpp
trunk/sources/qetgraphicsitem/diagramimageitem.h
trunk/sources/qetgraphicsitem/qetgraphicsitem.h
trunk/sources/ui/diagrampropertieseditordockwidget.cpp
Added Paths:
-----------
trunk/sources/ui/imagepropertiesdialog.cpp
trunk/sources/ui/imagepropertiesdialog.h
trunk/sources/ui/imagepropertiesdialog.ui
trunk/sources/ui/imagepropertieswidget.cpp
trunk/sources/ui/imagepropertieswidget.h
trunk/sources/ui/imagepropertieswidget.ui
Modified: trunk/sources/qetgraphicsitem/diagramimageitem.cpp
===================================================================
--- trunk/sources/qetgraphicsitem/diagramimageitem.cpp 2015-05-07 22:15:00 UTC (rev 3943)
+++ trunk/sources/qetgraphicsitem/diagramimageitem.cpp 2015-05-08 17:49:29 UTC (rev 3944)
@@ -16,8 +16,8 @@
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
*/
#include "diagramimageitem.h"
-#include "diagramcommands.h"
#include "diagram.h"
+#include "imagepropertiesdialog.h"
/**
* @brief DiagramImageItem::DiagramImageItem
@@ -27,10 +27,7 @@
DiagramImageItem::DiagramImageItem(QetGraphicsItem *parent_item):
QetGraphicsItem(parent_item)
{
- setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
-#if QT_VERSION >= 0x040600
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
-#endif
+ setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemSendsGeometryChanges);
}
/**
@@ -44,10 +41,7 @@
pixmap_(pixmap)
{
setTransformOriginPoint(boundingRect().center());
- setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable);
-#if QT_VERSION >= 0x040600
- setFlag(QGraphicsItem::ItemSendsGeometryChanges, true);
-#endif
+ setFlags(QGraphicsItem::ItemIsSelectable|QGraphicsItem::ItemIsMovable|QGraphicsItem::ItemSendsGeometryChanges);
}
/**
@@ -85,76 +79,14 @@
}
/**
- * @brief DiagramImageItem::setScale
- * @param scale the value of @scale must be betwen 1 and 200
+ * @brief DiagramImageItem::editProperty
+ * Open the approriate dialog to edit this image
*/
-void DiagramImageItem::PreviewScale(int scale) {
- if (scale >= 1 && scale <= 200) {
- qreal new_scale = scale;
- new_scale /= 100;
- setScale(new_scale);
- }
-}
-
-/**
- * @brief Edit the image with ....
- */
-void DiagramImageItem::editProperty() {
+void DiagramImageItem::editProperty()
+{
if (diagram() -> isReadOnly()) return;
- //the range for scale image and divisor factor
- int min_range = 1;
- int max_range = 200;
- int factor_range = 100;
-
- //the dialog
- QDialog property_dialog(diagram()->views().at(0));
- property_dialog.setWindowTitle(tr("Éditer les propriétés d'une image", "window title"));
- //the main layout
- QVBoxLayout dialog_layout(&property_dialog);
-
- //GroupBox for resizer image
- QGroupBox resize_groupe(tr("Dimension de l'image", "image size"));
- dialog_layout.addWidget(&resize_groupe);
- QHBoxLayout resize_layout(&resize_groupe);
-
- //slider
- QSlider slider(Qt::Horizontal, &property_dialog);
- slider.setRange(min_range, max_range);
- qreal scale_= scale();
- slider.setValue(scale_*factor_range);
- //spinbox
- QSpinBox spin_box(&property_dialog);
- spin_box.setRange(min_range, max_range);
- spin_box.setValue(scale_*factor_range);
- spin_box.setSuffix(" %");
- //synchro slider with spinbox
- connect(&slider, SIGNAL(valueChanged(int)), &spin_box, SLOT(setValue(int)));
- connect(&slider, SIGNAL(valueChanged(int)), this, SLOT(PreviewScale(int)));
- connect(&spin_box, SIGNAL(valueChanged(int)), &slider, SLOT(setValue(int)));
- //add slider and spinbox to layout
- resize_layout.addWidget(&slider);
- resize_layout.addWidget(&spin_box);
- //check box for disable move
- QCheckBox cb(tr("Verrouiller la position"), &property_dialog);
- cb.setChecked(!is_movable_);
- dialog_layout.addWidget(&cb);
-
- //dialog button, box
- QDialogButtonBox dbb(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
- dialog_layout.addWidget(&dbb);
- connect(&dbb, SIGNAL(accepted()), &property_dialog, SLOT(accept()));
- connect(&dbb, SIGNAL(rejected()), &property_dialog, SLOT(reject()));
-
- //dialog is accepted...
- if (property_dialog.exec() == QDialog::Accepted) {
- cb.isChecked() ? is_movable_=false : is_movable_=true;
- qreal new_scale = slider.value();
- new_scale /= factor_range;
- if (scale_ != new_scale) diagram()->undoStack().push(new ItemResizerCommand(this, scale_, new_scale, tr("une image")));
- }
- //...or not
- else setScale(scale_);
- return;
+ ImagePropertiesDialog dialog(this, QApplication::activeWindow());
+ dialog.exec();
}
/**
Modified: trunk/sources/qetgraphicsitem/diagramimageitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/diagramimageitem.h 2015-05-07 22:15:00 UTC (rev 3943)
+++ trunk/sources/qetgraphicsitem/diagramimageitem.h 2015-05-08 17:49:29 UTC (rev 3944)
@@ -60,11 +60,6 @@
protected:
virtual void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *);
- signals:
-
- private slots:
- void PreviewScale(int);
-
protected:
QPixmap pixmap_;
};
Modified: trunk/sources/qetgraphicsitem/qetgraphicsitem.h
===================================================================
--- trunk/sources/qetgraphicsitem/qetgraphicsitem.h 2015-05-07 22:15:00 UTC (rev 3943)
+++ trunk/sources/qetgraphicsitem/qetgraphicsitem.h 2015-05-08 17:49:29 UTC (rev 3944)
@@ -32,11 +32,15 @@
virtual ~QetGraphicsItem() = 0;
//public methode
- Diagram *diagram () const;
+ Diagram *diagram () const;
virtual void setPos (const QPointF &p);
virtual void setPos (qreal x, qreal y);
virtual void rotateBy (const qreal &);
virtual void applyRotation (const qreal &);
+
+ virtual bool isMovable () const {return is_movable_;}
+ virtual void setMovable (bool movable) { is_movable_ = movable;}
+
virtual void editProperty () {}
virtual QString name ()const {return QString("");}
Modified: trunk/sources/ui/diagrampropertieseditordockwidget.cpp
===================================================================
--- trunk/sources/ui/diagrampropertieseditordockwidget.cpp 2015-05-07 22:15:00 UTC (rev 3943)
+++ trunk/sources/ui/diagrampropertieseditordockwidget.cpp 2015-05-08 17:49:29 UTC (rev 3944)
@@ -19,6 +19,8 @@
#include "elementpropertieswidget.h"
#include "diagram.h"
#include "element.h"
+#include "diagramimageitem.h"
+#include "imagepropertieswidget.h"
/**
* @brief DiagramPropertiesEditorDockWidget::DiagramPropertiesEditorDockWidget
@@ -69,11 +71,15 @@
{
if (!m_diagram) return;
clear();
+
if (m_diagram->selectedItems().size() == 1)
{
QGraphicsItem *item = m_diagram->selectedItems().first();
+
if (Element *elmt = dynamic_cast<Element*>(item))
addEditor(new ElementPropertiesWidget(elmt, this));
+ else if (DiagramImageItem *image = dynamic_cast<DiagramImageItem *>(item))
+ addEditor(new ImagePropertiesWidget(image, this));
}
}
Added: trunk/sources/ui/imagepropertiesdialog.cpp
===================================================================
--- trunk/sources/ui/imagepropertiesdialog.cpp (rev 0)
+++ trunk/sources/ui/imagepropertiesdialog.cpp 2015-05-08 17:49:29 UTC (rev 3944)
@@ -0,0 +1,29 @@
+#include "imagepropertiesdialog.h"
+#include "ui_imagepropertiesdialog.h"
+#include "imagepropertieswidget.h"
+#include "diagramimageitem.h"
+
+ImagePropertiesDialog::ImagePropertiesDialog(DiagramImageItem *image, QWidget *parent) :
+ QDialog(parent),
+ ui(new Ui::ImagePropertiesDialog)
+{
+ ui->setupUi(this);
+ m_editor = new ImagePropertiesWidget(image, this);
+ ui->verticalLayout->insertWidget(0, m_editor);
+}
+
+ImagePropertiesDialog::~ImagePropertiesDialog() {
+ delete ui;
+}
+
+void ImagePropertiesDialog::setImageItem(DiagramImageItem *image) {
+ m_editor->setImageItem(image);
+}
+
+void ImagePropertiesDialog::on_buttonBox_accepted() {
+ m_editor->apply();
+}
+
+void ImagePropertiesDialog::on_buttonBox_rejected() {
+ m_editor->reset();
+}
Added: trunk/sources/ui/imagepropertiesdialog.h
===================================================================
--- trunk/sources/ui/imagepropertiesdialog.h (rev 0)
+++ trunk/sources/ui/imagepropertiesdialog.h 2015-05-08 17:49:29 UTC (rev 3944)
@@ -0,0 +1,31 @@
+#ifndef IMAGEPROPERTIESDIALOG_H
+#define IMAGEPROPERTIESDIALOG_H
+
+#include <QDialog>
+
+class ImagePropertiesWidget;
+class DiagramImageItem;
+
+namespace Ui {
+ class ImagePropertiesDialog;
+}
+
+class ImagePropertiesDialog : public QDialog
+{
+ Q_OBJECT
+
+ public:
+ explicit ImagePropertiesDialog(DiagramImageItem *image = nullptr, QWidget *parent = 0);
+ ~ImagePropertiesDialog();
+ void setImageItem (DiagramImageItem *image);
+
+ private slots:
+ void on_buttonBox_accepted();
+ void on_buttonBox_rejected();
+
+ private:
+ Ui::ImagePropertiesDialog *ui;
+ ImagePropertiesWidget *m_editor;
+};
+
+#endif // IMAGEPROPERTIESDIALOG_H
Added: trunk/sources/ui/imagepropertiesdialog.ui
===================================================================
--- trunk/sources/ui/imagepropertiesdialog.ui (rev 0)
+++ trunk/sources/ui/imagepropertiesdialog.ui 2015-05-08 17:49:29 UTC (rev 3944)
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ImagePropertiesDialog</class>
+ <widget class="QDialog" name="ImagePropertiesDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>194</width>
+ <height>52</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Éditer les propriétés de image</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>ImagePropertiesDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>ImagePropertiesDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
Added: trunk/sources/ui/imagepropertieswidget.cpp
===================================================================
--- trunk/sources/ui/imagepropertieswidget.cpp (rev 0)
+++ trunk/sources/ui/imagepropertieswidget.cpp 2015-05-08 17:49:29 UTC (rev 3944)
@@ -0,0 +1,137 @@
+/*
+ Copyright 2006-2015 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 <http://www.gnu.org/licenses/>.
+*/
+#include "imagepropertieswidget.h"
+#include "ui_imagepropertieswidget.h"
+#include "diagramimageitem.h"
+#include "diagramcommands.h"
+#include <QUndoCommand>
+
+/**
+ * @brief ImagePropertiesWidget::ImagePropertiesWidget
+ * Constructor
+ * @param image : image to edit properties
+ * @param parent : parent widget
+ */
+ImagePropertiesWidget::ImagePropertiesWidget(DiagramImageItem *image, QWidget *parent) :
+ PropertiesEditorWidget(parent),
+ ui(new Ui::ImagePropertiesWidget),
+ m_image(nullptr)
+{
+ ui->setupUi(this);
+ this->setDisabled(true);
+ setImageItem(image);
+}
+
+/**
+ * @brief ImagePropertiesWidget::~ImagePropertiesWidget
+ * Destructor
+ */
+ImagePropertiesWidget::~ImagePropertiesWidget() {
+ delete ui;
+}
+
+/**
+ * @brief ImagePropertiesWidget::setImageItem
+ * Set the image to edit properties
+ * @param image : image to edit
+ */
+void ImagePropertiesWidget::setImageItem(DiagramImageItem *image)
+{
+ if(!image) return;
+ this->setEnabled(true);
+ if (m_image == image) return;
+ if (m_image)
+ disconnect(m_image, SIGNAL(destroyed()), this, SLOT(imageWasDeleted()));
+
+ m_image = image;
+ connect(m_image, SIGNAL(destroyed()), this, SLOT(imageWasDeleted()));
+ m_movable = image->isMovable();
+ m_scale = m_image->scale();
+ updateUi();
+}
+
+/**
+ * @brief ImagePropertiesWidget::apply
+ * Apply the change
+ */
+void ImagePropertiesWidget::apply()
+{
+ if(!m_image) return;
+
+ if (m_image->diagram())
+ m_image->diagram()->undoStack().push(associatedUndo());
+
+ m_scale = m_image->scale();
+}
+
+/**
+ * @brief ImagePropertiesWidget::reset
+ * Reset the change
+ */
+void ImagePropertiesWidget::reset()
+{
+ if(!m_image) return;
+
+ m_image->setScale(m_scale);
+ m_image->setMovable(m_movable);
+ updateUi();
+}
+
+/**
+ * @brief ImagePropertiesWidget::associatedUndo
+ * @return the change in an undo command (ItemResizerCommand)
+ */
+QUndoCommand* ImagePropertiesWidget::associatedUndo()
+{
+ qreal value = ui->m_scale_slider->value();
+ value /= 100;
+ return new ItemResizerCommand(m_image, m_scale, value, tr("une image"));
+}
+
+/**
+ * @brief ImagePropertiesWidget::updateUi
+ * Udpdate the ui, notably when the image to edit change
+ */
+void ImagePropertiesWidget::updateUi()
+{
+ ui->m_scale_slider->setValue(m_scale * 100);
+ ui->m_lock_pos_cb->setChecked(!m_movable);
+}
+
+/**
+ * @brief ImagePropertiesWidget::on_m_scale_slider_valueChanged
+ * Update the size of image when move slider.
+ * @param value
+ */
+void ImagePropertiesWidget::on_m_scale_slider_valueChanged(int value)
+{
+ qreal scale = value;
+ m_image->setScale(scale / 100);
+}
+
+void ImagePropertiesWidget::imageWasDeleted() {
+ m_image = nullptr;
+}
+
+/**
+ * @brief ImagePropertiesWidget::on_m_lock_pos_cb_clicked
+ * Set movable or not the image according to corresponding check box
+ */
+void ImagePropertiesWidget::on_m_lock_pos_cb_clicked() {
+ m_image->setMovable(!ui->m_lock_pos_cb->isChecked());
+}
Added: trunk/sources/ui/imagepropertieswidget.h
===================================================================
--- trunk/sources/ui/imagepropertieswidget.h (rev 0)
+++ trunk/sources/ui/imagepropertieswidget.h 2015-05-08 17:49:29 UTC (rev 3944)
@@ -0,0 +1,63 @@
+/*
+ Copyright 2006-2015 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 <http://www.gnu.org/licenses/>.
+*/
+#ifndef IMAGEPROPERTIESWIDGET_H
+#define IMAGEPROPERTIESWIDGET_H
+
+#include <QWidget>
+#include "PropertiesEditor/propertieseditorwidget.h"
+
+class DiagramImageItem;
+
+namespace Ui {
+ class ImagePropertiesWidget;
+}
+
+/**
+ * @brief The ImagePropertiesWidget class
+ * This class provide a widget to edit the propertie of a DiagramImageItem
+ */
+class ImagePropertiesWidget : public PropertiesEditorWidget
+{
+ Q_OBJECT
+
+ public:
+ explicit ImagePropertiesWidget(DiagramImageItem *image = nullptr, QWidget *parent = 0);
+ ~ImagePropertiesWidget();
+ void setImageItem (DiagramImageItem *image);
+
+ void apply();
+ void reset();
+ QUndoCommand* associatedUndo();
+
+ private:
+ void updateUi();
+
+ private slots:
+ void on_m_scale_slider_valueChanged(int value);
+ void imageWasDeleted();
+
+ void on_m_lock_pos_cb_clicked();
+
+ private:
+ Ui::ImagePropertiesWidget *ui;
+ DiagramImageItem *m_image;
+ bool m_movable;
+ qreal m_scale;
+};
+
+#endif // IMAGEPROPERTIESWIDGET_H
Added: trunk/sources/ui/imagepropertieswidget.ui
===================================================================
--- trunk/sources/ui/imagepropertieswidget.ui (rev 0)
+++ trunk/sources/ui/imagepropertieswidget.ui 2015-05-08 17:49:29 UTC (rev 3944)
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ImagePropertiesWidget</class>
+ <widget class="QWidget" name="ImagePropertiesWidget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>231</width>
+ <height>94</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetMinimumSize</enum>
+ </property>
+ <item row="2" column="0">
+ <widget class="QCheckBox" name="m_lock_pos_cb">
+ <property name="text">
+ <string>Verrouiller la position</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Dimension de l'image</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QSlider" name="m_scale_slider">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="m_scale_sb">
+ <property name="suffix">
+ <string>%</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>200</number>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>m_scale_slider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>m_scale_sb</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>81</x>
+ <y>40</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>190</x>
+ <y>40</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>m_scale_sb</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>m_scale_slider</receiver>
+ <slot>setValue(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>190</x>
+ <y>40</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>81</x>
+ <y>40</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>