/* QAD - Qt ADvanced Ivan Pelipenko peri4ko@yandex.ru, Andrey Bychkov work.a.b@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef DRAWTOOLS_H #define DRAWTOOLS_H #include #include #include #include #include #include #include "blockview.h" #include "qad_blockview_export.h" class QComboBox; class QAD_BLOCKVIEW_EXPORT _DTSizeItem: public QGraphicsObject { Q_OBJECT public: _DTSizeItem(); ~_DTSizeItem(); void assignObject(QGraphicsItem * item); protected: void moveRects(); void applyRect(); void doubleClick(); void resizeHandles(); QRectF itemRect(const QGraphicsItem * item) const; QRectF boundingRect() const; void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget = 0) {} bool sceneEventFilter(QGraphicsItem * watched, QEvent * event); QGraphicsItem * cur_item; QGraphicsView * view_; QGraphicsRectItem rects[8]; QPointF pp, sp; QRectF nrect; qreal grid; bool in_process, can_drag, is_line; signals: void sizeChanged(); void textEditRequest(); void pixmapEditRequest(); }; namespace Ui { class DrawTools; } class QAD_BLOCKVIEW_EXPORT DrawTools: public QWidget { Q_OBJECT Q_PROPERTY(bool resizeHandlesEnabled READ isResizeHandlesEnabled WRITE setResizeHandlesEnabled) public: explicit DrawTools(BlockView * parent = 0); ~DrawTools(); void setBlockView(BlockView * v); void resetSizeTool() {size_item.assignObject(0);} bool isResizeHandlesEnabled() const {return resize_enabled;} void setAlignCompact(bool yes); QComboBox * textEditCombo() const; QList actionsForAdd() const {return actions_add;} QList actionsForZ() const {return QList() << &actions_Z_bottom << &actions_Z_down << &actions_Z_up << &actions_Z_top;} QWidget * propertyWidget() const {return widget_props;} protected: bool eventFilter(QObject * o, QEvent * e); void changeEvent(QEvent * e); QAction * newAction(const QIcon & icon, int type); void setToolButtonsEnabled(bool pen, bool brush, bool wid_hei); void blockPropSignals(bool block_); void actionAlignTrigger(bool vert, Qt::AlignmentFlag value); void emitZAvailabe(QGraphicsItem * item = 0); QWidget * widget_props; Ui::DrawTools * ui; BlockView * view_; QList actions_add; mutable QAction actions_Z_up, actions_Z_top, actions_Z_down, actions_Z_bottom; QList buttons_align; QGraphicsItem * new_item, * cur_item; QFontDialog font_dlg; QPointF pp; QDialog text_dlg; QPlainTextEdit text_edit; QMenu menu_hor, menu_ver; _DTSizeItem size_item; Qt::Alignment align; int new_type; bool resize_enabled; QString prev_dir; private slots: void toggleNewItem(bool on); void alignClicked(); void selectionChanged(); void sizeChanged(); void propertyChanged(); void comboLineStyleChanged(); void changeFinished() {if (cur_item) emit itemEdited(cur_item);} void moveZUpAvailable(bool yes) {actions_Z_up.setEnabled(yes); actions_Z_top.setEnabled(yes);} void moveZDownAvailable(bool yes) {actions_Z_down.setEnabled(yes); actions_Z_bottom.setEnabled(yes);} void buttonImage_clicked(); void buttonImagePaste_clicked(); void buttonFont_clicked(); void buttonTextEdit_clicked(); void actionTop_triggered(bool on) {actionAlignTrigger(true, Qt::AlignTop);} void actionVCenter_triggered(bool on) {actionAlignTrigger(true, Qt::AlignVCenter);} void actionBottom_triggered(bool on) {actionAlignTrigger(true, Qt::AlignBottom);} void actionLeft_triggered(bool on) {actionAlignTrigger(false, Qt::AlignLeft);} void actionHCenter_triggered(bool on) {actionAlignTrigger(false, Qt::AlignHCenter);} void actionRight_triggered(bool on) {actionAlignTrigger(false, Qt::AlignRight);} void actionZ_triggered(); public slots: void setResizeHandlesEnabled(bool on); signals: void itemCreated(QGraphicsItem * item); void itemAddConfirm(QGraphicsItem * item); void itemEdited(QGraphicsItem * item); void itemZChanged(QGraphicsItem * item); private: void retranslate(); }; #endif // DRAWTOOLS_H