00001
00002
00003
00004
00005 #ifndef BALL_VIEW_WIDGETS_GEOMETRICCONTROL_H
00006 #define BALL_VIEW_WIDGETS_GEOMETRICCONTROL_H
00007
00008 #ifndef BALL_COMMON_H
00009 # include <BALL/common.h>
00010 #endif
00011
00012 #ifndef BALL_VIEW_WIDGETS_GENERICCONTROL_H
00013 # include <BALL/VIEW/WIDGETS/genericControl.h>
00014 #endif
00015
00016 #ifndef BALL_VIEW_KERNEL_COMMON_H
00017 # include <BALL/VIEW/KERNEL/common.h>
00018 #endif
00019
00020
00021 #include <QtCore/QPoint>
00022 #include <QtGui/QMenu>
00023
00024 namespace BALL
00025 {
00026 namespace VIEW
00027 {
00028 class Representation;
00029 class ModifyRepresentationDialog;
00030 class ClippingPlane;
00031 class TransformationMessage;
00032
00042 class BALL_VIEW_EXPORT GeometricControl
00043 : public GenericControl
00044 {
00045 Q_OBJECT
00046
00047 public:
00048
00049 BALL_EMBEDDABLE(GeometricControl, GenericControl)
00050
00051
00054
00070 GeometricControl(QWidget* parent = 0, const char* name = 0);
00071
00073 virtual ~GeometricControl();
00074
00078 virtual void clear(){};
00079
00081 virtual void initializeWidget(MainControl& main_control);
00082
00084
00085
00088 virtual void addRepresentation(Representation& rep);
00089
00092 virtual void removeRepresentation(Representation& rep);
00093
00096 virtual void updateRepresentation(Representation& rep);
00097
00103 std::list<Representation*> getHighlightedRepresentations() const;
00104
00108 virtual void onNotify(Message *message);
00109
00116 virtual void buildContextMenu();
00117
00119 virtual void checkMenu(MainControl& main_control);
00120
00122 void moveItems(const TransformationMessage& msg);
00123
00124 void updateClippingPlanes();
00125
00126 public slots:
00127
00129
00132
00134 virtual void renameRepresentation();
00135
00137 virtual void selectAtoms();
00138
00140 virtual void selectedRepresentation(Representation& representation, bool state);
00141
00143 virtual void updateSelection();
00144
00146 virtual void focus();
00147
00149 virtual void enterMoveMode();
00150
00152 virtual void flipClippingCapping();
00153
00155 virtual void flipClippingPlane();
00156
00158 virtual void setClippingPosition();
00159
00161 virtual void setClippingPlaneX();
00162
00164 virtual void setClippingPlaneY();
00165
00167 virtual void setClippingPlaneZ();
00168
00170 void hideShowClippingPlane();
00171
00173 virtual void selectClipRepresentations();
00174
00176 void createNewClippingPlane();
00177
00179 void duplicate();
00180
00182 void saveSurface();
00183
00185 void loadSurface();
00186
00188 ModifyRepresentationDialog* getModifySurfaceDialog();
00189
00190 protected slots:
00191
00193
00194
00195
00197 virtual void modifyRepresentation_();
00198
00201 virtual void generateListViewItem_(Representation& rep);
00202
00204 virtual void deleteCurrentItems();
00205
00207
00208 protected slots:
00209
00210 virtual void onItemClicked(QTreeWidgetItem* item, int col);
00211 void showGuestContextMenu(const QPoint& pos);
00212
00213 protected:
00214
00215 void addItem_(const String& text, const char* member, QWidget* widget = 0);
00216
00217
00218 GeometricControl(const GeometricControl& control);
00219
00220 enum ColumnID
00221 {
00222 COLUMN_ID__TYPE = 0,
00223 COLUMN_ID__Properties
00224 };
00225
00226 void setClippingPlane_(const Vector3& n);
00227
00228
00229 QMenu context_menu_;
00230 QMenu clipping_plane_context_menu_;
00231
00232 Representation* context_representation_;
00233 ClippingPlane* context_plane_;
00234
00235 HashMap<Representation*, QTreeWidgetItem*> representation_to_item_;
00236 HashMap<ClippingPlane*, QTreeWidgetItem*> plane_to_item_;
00237 HashMap<QTreeWidgetItem*, Representation*> item_to_representation_;
00238 HashMap<QTreeWidgetItem*, ClippingPlane*> item_to_plane_;
00239
00240 ModifyRepresentationDialog* modify_rep_dialog_;
00241
00242 bool creating_representations_;
00243 bool ignore_change_;
00244
00245 QAction* menu_clipping_plane_, *menu_load_surface_, *modify_surface_;
00246 vector<QAction*> context_menu_actions_;
00247 };
00248
00249 } }
00250
00251 #endif // BALL_VIEW_WIDGETS_GEOMETRICCONTROL_H