BALL
1.4.1
|
00001 // -*- Mode: C++; tab-width: 2; -*- 00002 // vi: set ts=2: 00003 // 00004 00005 #ifndef BALL_VIEW_WIDGETS_MOLECULARCONTROL_H 00006 #define BALL_VIEW_WIDGETS_MOLECULARCONTROL_H 00007 00008 #ifndef BALL_VIEW_WIDGETS_GENERICCONTROL_H 00009 # include <BALL/VIEW/WIDGETS/genericControl.h> 00010 #endif 00011 00012 #ifndef BALL_CONCEPT_MOLECULARINFORMATION_H 00013 # include <BALL/CONCEPT/molecularInformation.h> 00014 #endif 00015 00016 #ifndef BALL_VIEW_KERNEL_COMMON_H 00017 # include <BALL/VIEW/KERNEL/common.h> 00018 #endif 00019 00020 #ifndef BALL_MATHS_MATRIX44_H 00021 #include <BALL/MATHS/matrix44.h> 00022 #endif 00023 00024 #include <QtCore/QPoint> 00025 #include <QtGui/QMenu> 00026 #include <QtGui/QTreeView> 00027 #include <QtGui/QComboBox> 00028 00029 00030 namespace BALL 00031 { 00032 namespace VIEW 00033 { 00034 00035 class BondProperties; 00036 00045 class BALL_VIEW_EXPORT MolecularControl 00046 : public GenericControl 00047 { 00048 // for internal usage only: 00049 class MyTreeWidgetItem 00050 : public QTreeWidgetItem 00051 { 00052 public: 00053 00054 MyTreeWidgetItem(QTreeWidget* parent, QStringList& sl, Composite* composite); 00055 00056 MyTreeWidgetItem(QTreeWidgetItem* parent, QStringList& sl, Composite* composite); 00057 00058 void init_(); 00059 00060 Composite* composite; 00061 }; 00062 00064 enum MolecularMenuEntries 00065 { 00067 CREATE_REPRESENTATION, 00068 OBJECT__MOVE, 00069 SELECT, 00070 DESELECT, 00071 EDIT_MENU, 00072 CUT, 00073 COPY, 00074 DELETE_ENTRY, 00075 PASTE, 00076 00077 00079 CAMERA__CENTER, 00081 COMPOSITE__PROPERTIES, 00083 COUNT__ITEMS, 00085 BOND__PROPERTIES, 00087 COLLAPSE_ALL, 00089 EXPAND_ALL 00090 }; 00091 00092 Q_OBJECT 00093 00094 public: 00095 00096 BALL_EMBEDDABLE(MolecularControl,GenericControl) 00097 00098 friend class BondProperties; 00099 00103 00108 MolecularControl(QWidget* parent = 0, const char* name = 0); 00109 00112 virtual ~MolecularControl(); 00113 00115 00118 00125 virtual void checkMenu(VIEW::MainControl& main_control); 00126 00133 void addComposite(Composite& composite, String given_name = ""); 00134 00137 Size removeComposite(Composite& composite); 00138 00141 const std::list<Composite*>& getSelection() const; 00142 00148 virtual void onNotify(Message *message); 00149 00159 virtual void updateContextMenu(Composite& composite); 00160 00172 virtual void initializeWidget(MainControl& main_control); 00173 00177 Size applySelector(const String& expression); 00178 00180 void writePreferences(INIFile& inifile); 00181 00183 void fetchPreferences(INIFile& inifile); 00184 00186 void showDistance(Atom* a1, Atom* a2); 00187 00189 void showAngle(Atom* a1, Atom* a2, Atom* a3, Atom* a4 = 0); 00190 00191 public slots: 00192 00194 00197 00199 void createRepresentation(); 00200 00202 void compositeProperties(); 00203 00205 void bondProperties(); 00206 00209 void checkResidue(); 00210 00213 void buildBonds(); 00214 00217 void centerCamera(); 00218 00220 void countItems(); 00221 00223 void showFilename(); 00224 00228 virtual void updateSelection(); 00229 00231 void highlightSelection(); 00232 00234 void highlight(const std::list<Composite*>& composite); 00235 00245 void cut(); 00246 00251 void copy(); 00252 00257 void paste(); 00258 00261 void clearClipboard(); 00262 00265 void select(); 00266 00269 void deselect(); 00270 00272 void moveItems(); 00273 00275 void collapseAll(); 00276 00278 void expandAll(); 00279 00283 Size applySelector(); 00284 00286 void showSelectorHelp(); 00287 00289 virtual void deleteCurrentItems(); 00290 00292 virtual void clearSelector(); 00293 00294 void switchShowSecondaryStructure(); 00295 00297 void showAtomOverview(); 00298 00300 void showAtomOverviewForSelection(); 00301 00303 void showDistance(); 00304 00306 void showAngle(); 00307 00309 00312 protected slots: 00313 00314 /*_ Controlling method for context menus. 00315 Clear the previously created context menu. 00316 Calls buildContextMenu for the Composite object belonging 00317 to the <tt>item</tt> and executes the context menu if menu entries are available. 00318 \param point the position to which the context menu should be drawn 00319 \param column not used at the moment 00320 \see buildContextMenu 00321 */ 00322 void showGuestContextMenu(const QPoint& pos); 00323 00324 //_ called when a model is selected in the context menu 00325 void activatedItem_(QAction* action); 00326 00327 //_ 00328 void createRepresentation_(); 00329 00330 // 00331 void onItemClicked(QTreeWidgetItem* item, int); 00332 00333 protected: 00334 00336 void buildContextMenu_(); 00337 00344 void setSelection_(bool open, bool force = false); 00345 00353 virtual MolecularInformation& getInformationVisitor_(); 00354 00361 virtual void recurseGeneration_(QTreeWidgetItem* item, Composite& composite); 00362 00377 virtual bool reactToMessages_(Message* message); 00378 00392 QTreeWidgetItem* generateListViewItem_(QTreeWidgetItem* parent, 00393 Composite& composite, QString* default_name = 0); 00394 00395 //_ Test, if its allowed to paste the copy liste into the current selected context item. 00396 bool pasteAllowedFor_(Composite& composite); 00397 00398 // 00399 inline void removeRecursive_(QTreeWidgetItem* item); 00400 00401 // only for Python Interface 00402 MolecularControl(const MolecularControl& mc); 00403 00404 // 00405 std::list<QTreeWidgetItem*> getAllItems_(); 00406 00407 void enableUpdates_(bool state); 00408 void newSelection_(std::list<Composite*>& sel, bool selected); 00409 00410 bool allowPaste_(); 00411 00413 00416 00417 //_ 00418 QAction* cut_id_, *copy_id_, *paste_id_, *delete_id_, *clipboard_id_, *select_id_, *deselect_id_, 00419 *show_ss_id_; 00420 00422 00423 std::list<Composite*> selected_; 00424 std::list<Composite*> copy_list_; 00425 00426 MolecularInformation information_; 00427 00428 QComboBox* selector_edit_; 00429 QComboBox* smarts_edit_; 00430 00431 // the context menus 00432 QMenu context_menu_, 00433 model_menu_, 00434 edit_menu_, 00435 color_menu_[MODEL_LABEL - MODEL_LINES]; 00436 00437 Composite* context_composite_; 00438 00439 QTreeWidgetItem* context_item_; 00440 00441 ModelType selected_model_; 00442 ColoringMethod selected_coloring_method_; 00443 std::map<Composite*, MyTreeWidgetItem*> composite_to_item_; 00444 00445 // let cut know to delete the entries, set by deleteCurrentItems() 00446 bool was_delete_; 00447 00448 Size nr_items_removed_; 00449 00450 bool show_ss_; 00451 QAction* center_camera_action_, *composite_properties_action_, *bond_propertes_action_, 00452 *select_action_, *deselect_action_, *count_items_action_, *atom_overview_, *atom_overview_selection_, 00453 *angle_action_, *distance_action_, *paste_action_; 00454 00455 bool ignore_messages_; 00456 }; 00457 00458 }} // namespaces 00459 00460 #endif // BALL_VIEW_WIDGETS_MOLECULARCONTROL_H