QtiPlot 0.9.8.2
|
00001 /*************************************************************************** 00002 File : SelectionMoveResizer.h 00003 Project : QtiPlot 00004 -------------------------------------------------------------------- 00005 Copyright : (C) 2007 by Knut Franke, 2008 by Ion Vasilief 00006 Email (use @ for *) : knut.franke*gmx.de, ion_vasilief*yahoo.fr 00007 Description : Selection of Widgets and QwtPlotMarkers 00008 00009 ***************************************************************************/ 00010 00011 /*************************************************************************** 00012 * * 00013 * This program is free software; you can redistribute it and/or modify * 00014 * it under the terms of the GNU General Public License as published by * 00015 * the Free Software Foundation; either version 2 of the License, or * 00016 * (at your option) any later version. * 00017 * * 00018 * This program is distributed in the hope that it will be useful, * 00019 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00020 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 00021 * GNU General Public License for more details. * 00022 * * 00023 * You should have received a copy of the GNU General Public License * 00024 * along with this program; if not, write to the Free Software * 00025 * Foundation, Inc., 51 Franklin Street, Fifth Floor, * 00026 * Boston, MA 02110-1301 USA * 00027 * * 00028 ***************************************************************************/ 00029 00030 #ifndef SELECTION_MOVE_RESIZER_H 00031 #define SELECTION_MOVE_RESIZER_H 00032 00033 #include <QWidget> 00034 #include <QList> 00035 #include <QRect> 00036 00037 class QPoint; 00038 class QwtPlotMarker; 00039 class QwtPlotCanvas; 00040 class LegendWidget; 00041 class ArrowMarker; 00042 00089 class SelectionMoveResizer : public QWidget 00090 { 00091 Q_OBJECT 00092 00093 public: 00095 SelectionMoveResizer(ArrowMarker *target); 00097 SelectionMoveResizer(QWidget *target); 00099 ~SelectionMoveResizer(); 00102 virtual bool eventFilter(QObject *o, QEvent *e); 00104 bool contains(QWidget *w) const { return d_widgets.contains(w); }; 00106 bool contains(ArrowMarker *m) const { return d_line_markers.contains(m); }; 00107 void raiseTargets(bool on = true); 00108 00109 public slots: 00111 void add(ArrowMarker *target); 00113 void add(QWidget *target); 00115 int removeAll(ArrowMarker *target); 00117 int removeAll(QWidget *target); 00119 void recalcBoundingRect(); 00120 00121 signals: 00123 void targetsChanged(); 00124 00125 protected: 00127 enum Operation { None=-2, Move, Resize_N, Resize_NE, Resize_E, Resize_SE, Resize_S, Resize_SW, Resize_W, Resize_NW }; 00128 00134 virtual void paintEvent(QPaintEvent *e); 00140 virtual void mousePressEvent(QMouseEvent *e); 00146 virtual void mouseMoveEvent(QMouseEvent *e); 00151 virtual void mouseReleaseEvent(QMouseEvent *e); 00156 virtual void keyPressEvent(QKeyEvent *e); 00158 virtual void mouseDoubleClickEvent(QMouseEvent *e); 00159 00160 private: 00162 static const int handler_size = 10; 00164 static const QRect handlerRect(QRect rect, Operation op); 00166 QRect operateOn(const QRect in); 00168 void operateOnTargets(); 00170 void init(); 00172 QRect boundingRectOf(QwtPlotMarker *target) const; 00174 QRect boundingRectOf(QwtPlotCanvas *canvas) const; 00175 00177 QList <ArrowMarker *> d_line_markers; 00179 QList <QWidget *> d_widgets; 00181 QRect d_bounding_rect; 00183 Operation d_op; 00185 QPoint d_op_start; 00187 QPoint d_op_dp; 00188 00189 private slots: 00191 void removeWidget(QObject* w) { removeAll((QWidget*) w); } 00192 }; 00193 00194 #endif // ifndef SELECTION_MOVE_RESIZER_H