BALL  1.4.1
editableScene.h
Go to the documentation of this file.
00001 #ifndef BALL_VIEW_WIDGETS_EDITABLESCENE_H
00002 #define BALL_VIEW_WIDGETS_EDITABLESCENE_H
00003 
00004 
00005 #ifndef BALL_KERNEL_SYSTME_H
00006 #include <BALL/KERNEL/system.h>
00007 #endif
00008 
00009 #ifndef BALL_VIEW_WIDGETS_SCENE_H
00010 #include <BALL/VIEW/WIDGETS/scene.h>
00011 #endif
00012 
00013 #ifndef BALL_KERNEL_MOLECULE_H
00014 #include <BALL/KERNEL/molecule.h>
00015 #endif
00016 
00017 #ifndef BALL_VIEW_KERNEL_COMMON_H
00018 # include <BALL/VIEW/KERNEL/common.h>
00019 #endif 
00020 
00021 #ifndef BALL_MATHS_VECTOR2_H
00022 # include <BALL/MATHS/vector2.h>
00023 #endif
00024 
00025 #ifndef BALL_STRUCTURE_FRAGMENTDB_H
00026 # include <BALL/STRUCTURE/fragmentDB.h>
00027 #endif
00028 
00029 #include <QtGui/QCursor>
00030 
00031 namespace BALL
00032 {
00033   namespace VIEW
00034   {
00035 
00036 class EditSettings;
00037 
00042 class BALL_VIEW_EXPORT EditableScene
00043   : public Scene
00044 {
00045   Q_OBJECT //macro for QT-Messages
00046 
00047   public:
00048 
00049   BALL_EMBEDDABLE(EditableScene, ModularWidget) 
00050 
00051   // This class represents a single edit operation and stores its type and
00052   // parameters. This can be used to implement undo functionality.
00053   class BALL_VIEW_EXPORT EditOperation
00054   {
00055     public:
00056 
00058     EditOperation();
00059 
00061     EditOperation(Atom* atom, Bond* bond, String description= "Added Object", int operation=0);
00062 
00064     EditOperation(const EditOperation& eOperation);
00065 
00067     virtual ~EditOperation();
00068 
00070     enum OperationType
00071     {
00072       DEFAULT,
00073       ADDED__ATOM,
00074       ADDED__BOND,
00075       CHANGED__TYPE
00076         // DELETED__ATOM
00077         // DELETED__BOND
00078         //CHANGED__SYSTEM
00079         //MOVED__ATOM
00080     };
00081 
00082     int operationType;
00083     Atom* atom;
00084     Bond* bond;
00085     String description;
00086   };
00087 
00089   enum EditMode
00090   {
00091     // 
00092     EDIT__MODE = PICKING__MODE + 1
00093   };
00094 
00096   EditableScene();
00097 
00099   EditableScene(QWidget* parent_widget, const char* name = NULL, Qt::WFlags w_flags = 0);
00100 
00102   EditableScene (const EditableScene& eScene, QWidget* parent_widget = NULL, const char* name = NULL, Qt::WFlags wflags = 0);
00103 
00105   virtual ~EditableScene();
00106 
00108   void initializeWidget(MainControl& main_control);
00109 
00111   void checkMenu(MainControl& main_control);
00112 
00114   void initializePreferencesTab(Preferences &preferences);
00115   
00117   void finalizePreferencesTab(Preferences &preferences);
00118 
00120   virtual void applyPreferences();
00121   
00123   void showContextMenu(QPoint pos);
00124 
00126   virtual void setMode(ModeType mode);
00127 
00128   void addStructure(String name);
00129 
00131   void setCursor(String c);
00132 
00134   void setElementCursor();
00135 
00137   public slots:
00138 
00139   virtual void mousePressEvent(QMouseEvent* e);
00140   virtual void mouseMoveEvent(QMouseEvent *e);
00141   virtual void mouseReleaseEvent(QMouseEvent *e);
00142   virtual void wheelEvent(QWheelEvent* qmouse_event);
00143   void createNewMolecule();
00144   void saturateWithHydrogens();
00145   void optimizeStructure();
00146   void computeBondOrders();
00147 
00148   // slots for communication with PTEDialog
00149   void setEditElementType(int element_number);
00150   int getEditElementType();
00151               
00153   protected slots:
00154 
00155   virtual void editMode_();
00156   void deleteAtom_();
00157   void changeElement_();
00158   void changeAtomElement_();
00159   void createBond_();
00160   void deleteBond_();
00161   void changeBondOrder_();
00162   void activatedOrderItem_(QAction* action);
00163   void moveAtom_();
00164   void atomProperties_();
00165   void createMolecule_();
00166   void addStructure_();
00167   void setFormalCharge_();
00168 
00170   signals:
00171 
00172   // signal for communication with EditOperationDialog
00173   void newEditOperation(EditableScene::EditOperation &eo);
00174 
00176   protected:
00177 
00178   virtual void addToolBarEntries(QToolBar* tb);
00179 
00181   virtual void keyPressEvent(QKeyEvent* e);
00182   virtual void mouseDoubleClickEvent(QMouseEvent* e);
00183   virtual bool reactToKeyEvent_(QKeyEvent* e);
00184 
00185   virtual void onNotify(Message *message);
00186 
00192   void insert_(int x_, int y_, PDBAtom &atom_);
00193 
00194   void merge_(Composite* a1, Composite* a2);
00195 
00200   TVector2<float> getScreenPosition_(Vector3 vec);
00201 
00202   void getClickedItems_(int x, int y);
00203 
00204   void init_();
00205 
00206   String getBondOrderString_(Index order);
00207 
00208   std::list<AtomContainer*> getContainers_();
00209 
00210   void changeBondOrder_(Index delta);
00211   void deselect_(bool update=true);
00212   void renderGrid_();
00213 
00214   QAction* edit_id_, *new_molecule_action_, *optimize_action_, *add_hydrogens_action_, *element_action_;  
00215   QAction* bondorders_action_, *bond_action_;
00216   
00217   Atom* current_atom_;
00218   Bond* current_bond_;
00219 
00220   Vector3 atom_pos_;
00221 
00222   // pick atoms/bonds only in highlighted AtomContainer?
00223   static bool only_highlighted_;
00224   // element for new atoms
00225   int atomic_number_;
00226   // name for newly created atoms
00227   Position atom_number_;
00228   // order for new bonds
00229   int bond_order_;
00230   Position last_y_;
00231   Qt::MouseButtons last_buttons_;
00232 
00233   //undo stack
00234   vector<EditOperation> undo_;
00235   EditSettings* edit_settings_;
00236   QPoint   menu_point_;
00237   FragmentDB fragment_db_;
00238   bool fragment_db_initialized_;
00239   bool temp_move_;
00240   QToolBar* toolbar_edit_controls_;
00241   QList<QAction*> toolbar_actions_edit_controls_;
00242 };
00243 
00244   }//end of namespace
00245 } // end of namespace
00246 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines