1 /*************************************************************************** 2 File : PlotToolInterface.h 3 Project : QtiPlot 4 -------------------------------------------------------------------- 5 Copyright : (C) 2007 by Knut Franke, Ion Vasilief 6 Email (use @ for *) : knut.franke*gmx.de, ion_vasilief*yahoo.fr 7 Description : Interface for tools operating on a Graph 8 9 ***************************************************************************/ 10 11 /*************************************************************************** 12 * * 13 * This program is free software; you can redistribute it and/or modify * 14 * it under the terms of the GNU General Public License as published by * 15 * the Free Software Foundation; either version 2 of the License, or * 16 * (at your option) any later version. * 17 * * 18 * This program is distributed in the hope that it will be useful, * 19 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 21 * GNU General Public License for more details. * 22 * * 23 * You should have received a copy of the GNU General Public License * 24 * along with this program; if not, write to the Free Software * 25 * Foundation, Inc., 51 Franklin Street, Fifth Floor, * 26 * Boston, MA 02110-1301 USA * 27 * * 28 ***************************************************************************/ 29 #ifndef PLOT_TOOL_INTERFACE_H 30 #define PLOT_TOOL_INTERFACE_H 31 32 class Graph; 33 #include <QObject> 34 35 /*! Interface for tools operating on a Graph. 36 * 37 * The basic idea is to have one PlotToolInterface subclass per user-visible tool operating on a Graph, 38 * although there may be cases where exceptions to this rule are appropriate. 39 * %Note that tools can be presented to the user via icons (like DataPickerTool) or via menu entries 40 * (like TranslateCurveTool); the basic concept is quite similar. 41 * The main point in managing plot tools as subclasses of this class (as opposed to using void pointers) 42 * is the virtual destructor that allows tools to clean up after themselves. 43 * Additionally, a pointer to the parent Graph (#d_graph) is managed. 44 * In the future, this class may provide other generic tool functionality. 45 * 46 * %Note that zooming and range selection are somewhat special in that they can be active in addition 47 * to other tools. These are handled as special cases, while all other tools are rendered mutually exclusive 48 * by having Graph manage a pointer to the currently active tool (Graph::d_active_tool). 49 * 50 * It would be nice for some of the plot tools (like TranslateCurveTool or MultiPeakFitTool) to send a signal 51 * when they are finished and to generalize the statusText signal provided by most tools, but having 52 * PlotToolInterface inherit from QObject would make it impossible for 53 * plot tools to also inherit from other QObject decendants (such as QwtPlotPicker). 54 * As a workaround, plot tools can call Graph::setActiveTool(), carefully noting that they are deleted 55 * during this call. 56 * 57 * Currently, plot tools are instantiated by ApplicationWindow and handed to the Graph in question; 58 * this scheme will have to be revised for dynamically adding new tools via plugins. 59 */ 60 class PlotToolInterface 61 { 62 public: 63 64 enum RttiValues 65 { 66 Rtti_PlotTool = 0, 67 68 Rtti_RangeSelector, 69 Rtti_DataPicker, 70 Rtti_TranslateCurveTool, 71 Rtti_MultiPeakFitTool, 72 Rtti_LineProfileTool, 73 Rtti_AddWidgetTool, 74 Rtti_DrawDataPoints, 75 Rtti_ImageProfilesTool, 76 Rtti_SubtractLineTool, 77 Rtti_PlotUserTool = 1000 78 }; 79 80 PlotToolInterface(Graph *graph, const QObject *status_target = NULL, const char *status_slot = "") {d_status_target = status_target; d_status_slot = status_slot; d_graph = graph;}; ~PlotToolInterface()81 virtual ~PlotToolInterface() {}; 82 rtti()83 virtual int rtti() const { return Rtti_PlotTool;}; 84 85 protected: 86 Graph *d_graph; 87 const QObject *d_status_target; 88 const char *d_status_slot; 89 }; 90 91 #endif // ifndef PLOT_TOOL_INTERFACE_H 92