00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef KIG_MODES_CONSTRUCT_MODE_H
00019 #define KIG_MODES_CONSTRUCT_MODE_H
00020
00021 #include "base_mode.h"
00022
00023 #include "../objects/object_calcer.h"
00024
00025 class ArgsParserObjectType;
00026 class ObjectConstructor;
00027 class ObjectCalcer;
00028
00029 class PointConstructMode
00030 : public BaseMode
00031 {
00036 ObjectTypeCalcer::shared_ptr mpt;
00037 public:
00038 PointConstructMode( KigPart& d );
00039 ~PointConstructMode();
00040 protected:
00041 void leftClickedObject( ObjectHolder* o, const QPoint& p,
00042 KigWidget& w, bool ctrlOrShiftDown );
00043 void midClicked( const QPoint& p, KigWidget& w );
00044 void rightClicked( const std::vector<ObjectHolder*>& oco, const QPoint& p, KigWidget& w );
00045 void mouseMoved( const std::vector<ObjectHolder*>& os, const QPoint& p, KigWidget& w, bool shiftpressed );
00046
00047 void enableActions();
00048 void cancelConstruction();
00049
00050 void redrawScreen( KigWidget* );
00051 };
00052
00053 class BaseConstructMode
00054 : public BaseMode
00055 {
00060 ObjectTypeCalcer::shared_ptr mpt;
00069 ObjectTypeCalcer* mcursor;
00070
00071
00072
00073
00074 std::vector<ObjectHolder*> mparents;
00075
00076 void leftReleased( QMouseEvent* e, KigWidget* v );
00077
00078 public:
00079 void selectObject( ObjectHolder* o, KigWidget& w );
00080 void selectObjects( const std::vector<ObjectHolder*>& os, KigWidget& w );
00081 virtual ~BaseConstructMode();
00082 protected:
00083 BaseConstructMode( KigPart& d );
00084 protected:
00085 void leftClickedObject( ObjectHolder* o, const QPoint& p,
00086 KigWidget& w, bool ctrlOrShiftDown );
00087 void midClicked( const QPoint& p, KigWidget& w );
00088 void rightClicked( const std::vector<ObjectHolder*>& oco, const QPoint& p, KigWidget& w );
00089 void mouseMoved( const std::vector<ObjectHolder*>& os, const QPoint& p, KigWidget& w, bool shiftpressed );
00090
00091 void enableActions();
00092 void cancelConstruction();
00093 void finish();
00094
00095 protected:
00096 virtual void handlePrelim( const std::vector<ObjectCalcer*>& os, const QPoint& p, KigPainter&, KigWidget& w ) = 0;
00097 virtual QString selectStatement( const std::vector<ObjectCalcer*>& args, const KigWidget& w ) = 0;
00098 virtual int isAlreadySelectedOK( const std::vector<ObjectCalcer*>&, const int& ) = 0;
00099 virtual int wantArgs( const std::vector<ObjectCalcer*>&, KigDocument& d, KigWidget& w ) = 0;
00100 virtual void handleArgs( const std::vector<ObjectCalcer*>& args, KigWidget& w ) = 0;
00101
00102 void redrawScreen( KigWidget* );
00103 };
00104
00105 class ConstructMode
00106 : public BaseConstructMode
00107 {
00108 const ObjectConstructor* mctor;
00109 public:
00110 ConstructMode( KigPart& d, const ObjectConstructor* ctor );
00111 ~ConstructMode();
00112
00113 void handlePrelim( const std::vector<ObjectCalcer*>& os, const QPoint& p, KigPainter&, KigWidget& w );
00114 QString selectStatement( const std::vector<ObjectCalcer*>& args, const KigWidget& w );
00115 int isAlreadySelectedOK( const std::vector<ObjectCalcer*>&, const int& );
00116 int wantArgs( const std::vector<ObjectCalcer*>&, KigDocument& d, KigWidget& w );
00117 void handleArgs( const std::vector<ObjectCalcer*>& args, KigWidget& w );
00118 };
00119
00132 class TestConstructMode
00133 : public BaseConstructMode
00134 {
00135 const ArgsParserObjectType* mtype;
00136 ObjectCalcer::shared_ptr mresult;
00137 public:
00138 TestConstructMode( KigPart& d, const ArgsParserObjectType* type );
00139 ~TestConstructMode();
00140
00141 void handlePrelim( const std::vector<ObjectCalcer*>& os, const QPoint& p, KigPainter&, KigWidget& w );
00142 QString selectStatement( const std::vector<ObjectCalcer*>& args, const KigWidget& w );
00143 int isAlreadySelectedOK( const std::vector<ObjectCalcer*>&, const int& );
00144 int wantArgs( const std::vector<ObjectCalcer*>&, KigDocument& d, KigWidget& w );
00145 void handleArgs( const std::vector<ObjectCalcer*>& args, KigWidget& w );
00146
00147 void leftClickedObject( ObjectHolder* o, const QPoint& p,
00148 KigWidget& w, bool ctrlOrShiftDown );
00149 void midClicked( const QPoint& p, KigWidget& w );
00150 void rightClicked( const std::vector<ObjectHolder*>& oco, const QPoint& p, KigWidget& w );
00151 void mouseMoved( const std::vector<ObjectHolder*>& os, const QPoint& p, KigWidget& w, bool shiftpressed );
00152 };
00153
00154 #endif