SelectionMoveResizer.h

Go to the documentation of this file.
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 
00108     public slots:
00110         void add(ArrowMarker *target);
00112         void add(QWidget *target);
00114         int removeAll(ArrowMarker *target);
00116         int removeAll(QWidget *target);
00118         void recalcBoundingRect();
00119 
00120     signals:
00122         void targetsChanged();
00123 
00124     protected:
00126         enum Operation { None=-2, Move, Resize_N, Resize_NE, Resize_E, Resize_SE, Resize_S, Resize_SW, Resize_W, Resize_NW };
00127 
00133         virtual void paintEvent(QPaintEvent *e);
00139         virtual void mousePressEvent(QMouseEvent *e);
00145         virtual void mouseMoveEvent(QMouseEvent *e);
00150         virtual void mouseReleaseEvent(QMouseEvent *e);
00155         virtual void keyPressEvent(QKeyEvent *e);
00157         virtual void mouseDoubleClickEvent(QMouseEvent *e);
00158 
00159     private:
00161         static const int handler_size = 10;
00163         static const QRect handlerRect(QRect rect, Operation op);
00165         QRect operateOn(const QRect in);
00167         void operateOnTargets();
00169         void init();
00171         QRect boundingRectOf(QwtPlotMarker *target) const;
00173         QRect boundingRectOf(QwtPlotCanvas *canvas) const;
00174 
00176         QList <ArrowMarker *> d_line_markers;
00178         QList <QWidget *> d_widgets;
00180         QRect d_bounding_rect;
00182         Operation d_op;
00184         QPoint d_op_start;
00186         QPoint d_op_dp;
00187 
00188     private slots:
00190         void removeWidget(QObject* w) { removeAll((QWidget*) w); }
00191 };
00192 
00193 #endif // ifndef SELECTION_MOVE_RESIZER_H

Generated by  doxygen 1.6.2