OpendTect  6.3
menuhandler.h
Go to the documentation of this file.
1 #pragma once
2 
3 /*+
4 ________________________________________________________________________
5 
6  (C) dGB Beheer B.V.; (LICENSE) http://opendtect.org/OpendTect_license.txt
7  Author: N. Hemstra
8  Date: May 2003
9 ________________________________________________________________________
10 
11 -*/
12 
13 #include "generalmod.h"
14 #include "refcount.h"
15 #include "position.h"
16 #include "notify.h"
17 #include "bufstring.h"
18 #include "uistring.h"
19 
20 class BufferStringSet;
21 class MenuItem;
22 class MenuHandler;
23 
25 {
26 public:
28  virtual ~MenuItemHolder();
32  virtual void addItem(MenuItem*,bool manage=false);
43  void removeItems();
44  int nrItems() const;
45 
46  const MenuItem* getItem(int idx) const;
47  MenuItem* getItem(int idx);
48  int itemIndex(const MenuItem*) const;
49  int itemIndex(int id) const;
50  MenuItem* findItem(int id);
51  const MenuItem* findItem(int id) const;
52  MenuItem* findItem(const char*);
54  const MenuItem* findItem(const char*) const;
56 
57  const ObjectSet<MenuItem>& getItems() const;
58 
59 protected:
60  friend class MenuHandler;
61  void itemIsDeletedCB(CallBacker*);
62  virtual void assignItemID(MenuItem&);
66 
67 private:
70 };
71 
75 {
76 public:
77  MenuItem(const uiString&
78  text=uiString::emptyString(),
79  int placement=-1);
80  MenuItem(const uiString& text,
81  CallBack cb,int placement=-1);
82  MenuItem(const uiString& text,
83  const char* iconnm,
84  const uiString& tooltip,
85  CallBack cb=CallBack(),
86  int placement=-1);
87  void createItems(const BufferStringSet&);
88  void createItems(const uiStringSet&);
89 
91  /*< The text that should be on the item. */
92  int placement;
97  int id;
99  bool checkable;
101  bool checked;
104  bool enabled;
108  //*!< Icon identifier
110  //*!< Tooltip if item is used in toolbar
112  //*!< Callback function to be called
113 };
114 
115 
118 public:
119  SeparatorItem(int plmnt=-1)
120  : MenuItem(tr("Separator"),plmnt) {}
121 };
122 
123 
185 mExpClass(General) MenuHandler : public RefCount::Referenced
186  , public MenuItemHolder
187 {
188 public:
189  MenuHandler( int id );
190 
191  virtual bool executeMenu() = 0;
192 
193  int menuID() const { return id_; }
194  /*<Each menu has an unique id where the
195  that identifies it. */
196  void setMenuID( int newid ) { id_=newid; }
197 
201  bool isHandled() const;
207  void setIsHandled(bool);
214  int queueID() const { return queueid_; }
218 protected:
219  ~MenuHandler();
220  void assignItemID(MenuItem&);
221  void executeQueue();
222 
223  int id_;
225  int queueid_;
226 };
227 
228 
237 {
238 public:
240  const CallBack&,const char* parenttxt=0,
241  int placement=-1);
242  ~MenuItemHandler();
243  bool doadd_;
253  void setIcon(const char* fnm);
254 
255 protected:
256 
257  virtual void createMenuCB(CallBacker*);
258  virtual void handleMenuCB(CallBacker*);
259 
260  virtual bool shouldAddMenu() const { return true; }
261  virtual bool shouldBeEnabled() const { return true;}
262  virtual bool shouldBeChecked() const { return false;}
263 
268 };
269 
270 
271 
272 #define mResetMenuItem( item ) \
273 { \
274  (item)->enabled = true; \
275  (item)->checked = false; \
276  (item)->id = -1; \
277  (item)->removeItems(); \
278 }
279 
280 #define mAddMenuItemWithManageFlag( parent, item, manage, enab, check ) \
281 { \
282  MenuItem* _item = item; \
283  MenuItemHolder* _parent = parent; \
284  if ( _parent && (_parent)->itemIndex(_item)==-1 ) \
285  (_parent)->addItem( _item ); \
286  \
287  (_item)->enabled = (enab); \
288  (_item)->checked = (check); \
289 }
290 
291 #define mAddMenuItem( parent, item, enab, check ) \
292 mAddMenuItemWithManageFlag( parent, item, false, enab, check )
293 
294 
295 #define mAddManagedMenuItem( parent, item, enab, check ) \
296 mAddMenuItemWithManageFlag( parent, item, true, enab, check )
297 
298 
299 #define mAddMenuItemCond( menu, item, enab, check, cond ) { \
300  if ( menu && cond ) \
301  mAddMenuItem( menu, item, enab, check ) \
302  else \
303  mResetMenuItem( item ) } \
304 
305 //Macro that can poplulate both a toolbar and a menu.
306 #define mAddMenuOrTBItem( istoolbar, tbparent, popupparent, item, enab, check )\
307  mAddMenuItem( \
308  istoolbar?(MenuItemHolder*)(tbparent):(MenuItemHolder*)(popupparent), \
309  item, enab, check )
#define mExpClass(module)
Definition: commondefs.h:157
bool checked
Definition: menuhandler.h:101
bool checkable
Definition: menuhandler.h:99
Inherit from this class to be able to send and/or receive CallBacks.
Definition: callback.h:182
int menuID() const
Definition: menuhandler.h:193
bool ishandled_
Definition: menuhandler.h:224
uiString tooltip
Definition: menuhandler.h:109
Definition: menuhandler.h:185
MenuItem * findItem(int id)
void assignItemID(MenuItem &)
void itemIsDeletedCB(CallBacker *)
#define mODTextTranslationClass(clss)
Definition: uistring.h:37
virtual void addItem(MenuItem *, bool manage=false)
ObjectSet< MenuItem > items_
Definition: menuhandler.h:68
MenuItem menuitem_
Definition: menuhandler.h:264
Definition: menuhandler.h:236
BufferString parenttext_
Definition: menuhandler.h:267
bool isHandled() const
virtual ~MenuItemHolder()
bool ischecked_
Definition: menuhandler.h:249
static const uiString & emptyString()
Definition: uistring.h:107
int id_
Definition: menuhandler.h:223
Definition: uistring.h:88
virtual bool shouldBeChecked() const
Definition: menuhandler.h:262
Set of BufferString objects.
Definition: bufstringset.h:25
bool doadd_
Definition: menuhandler.h:243
int itemIndex(const MenuItem *) const
SeparatorItem(int plmnt=-1)
Definition: menuhandler.h:119
bool isenabled_
Definition: menuhandler.h:246
MenuHandler(int id)
MenuHandler & menuhandler_
Definition: menuhandler.h:265
BoolTypeSet manageitems_
Definition: menuhandler.h:69
void setMenuID(int newid)
Definition: menuhandler.h:196
void removeItems()
Definition: menuhandler.h:74
Definition: menuhandler.h:116
int placement
Definition: menuhandler.h:92
int id
Definition: menuhandler.h:97
BufferString iconfnm
Definition: menuhandler.h:107
CNotifier< MenuHandler, int > handlenotifier
Definition: menuhandler.h:200
void executeQueue()
CallBack cb
Definition: menuhandler.h:111
MenuItemHolder * parent_
Definition: menuhandler.h:65
int nrItems() const
Notifier< MenuHandler > initnotifier
Definition: menuhandler.h:198
bool enabled
Definition: menuhandler.h:104
Notifier< MenuHandler > createnotifier
Definition: menuhandler.h:199
virtual bool executeMenu()=0
CallBack cb_
Definition: menuhandler.h:266
OD::String with its own variable length buffer. The buffer has a guaranteed minimum size...
Definition: bufstring.h:38
Definition: menuhandler.h:24
virtual bool shouldBeEnabled() const
Definition: menuhandler.h:261
const ObjectSet< MenuItem > & getItems() const
Definition: uistring.h:235
virtual bool shouldAddMenu() const
Definition: menuhandler.h:260
uiString text
Definition: menuhandler.h:90
void setIsHandled(bool)
CallBacks object-oriented (object + method).
Definition: callback.h:62
const MenuItem * getItem(int idx) const
int queueid_
Definition: menuhandler.h:225
int queueID() const
Definition: menuhandler.h:214
Notifier< MenuItemHolder > removal
Definition: menuhandler.h:29

Generated at for the OpendTect seismic interpretation project. Copyright (C): dGB Beheer B. V. 2017