HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BM_State.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: Direct manipulation library (C++)
7  *
8  * COMMENTS:
9  * The base class of a BM state.
10  *
11  */
12 #ifndef __BM_State_H__
13 #define __BM_State_H__
14 
15 #include "BM_API.h"
16 #include "BM_ParmState.h"
17 #include "BM_MoveTool.h"
18 #include <RE/RE_RenderContext.h>
19 #include <PY/PY_Result.h>
20 #include <UI/UI_Keyboard.h>
21 #include <UT/UT_Array.h>
22 #include <UT/UT_HUDInfoArgs.h>
23 #include <UT/UT_StringMap.h>
24 #include <UT/UT_UniquePtr.h>
25 
26 class DD_ChoiceList;
27 class DD_Source;
28 class UT_Options;
29 class UT_StringHolder;
30 class UT_Undo;
31 class UI_KeyResolveInfo;
32 class PI_StateTemplate;
33 class OP_Node;
34 class OP_Network;
35 class BM_OpHandleLink;
36 class BM_HUDInfoArgsCopy;
37 class bmQtNotifier;
38 class bmViewNotifier;
39 
40 // A dummy base class for GUI_DetailLook.
42 {
43 public:
44  virtual ~BM_DetailLook() { }
45 };
46 
48 {
49 public:
51  sticky = 1; // must be sticky by default (obsolete)
52  entered = 0;
53  scratch = 0;
54  requestnew = 0;
55  preempted = 0;
56  busybuild = 0;
57  wantlocate = 0;
58  modifier = 0;
59  concealed = 0;
60  }
61  unsigned sticky:1, // does not pop back after an operation
62  entered:3, // the way it was entered (BM_EntryType)
63  scratch:3, // entered from scratch
64  requestnew:1, // a new node is requested when generating
65  exsitu:1, // ex situ when generating
66  preempted:1, // have I been interrupted or not
67  busybuild:1, // I'm in the building stage (not editing)
68  wantlocate:1, // want to get locate events
69  modifier:1, // changes geometry, etc or not?
70  concealed:1; // are we concealed in a non-visible desktop?
71 };
72 
74 {
75 public:
76  enum BM_GenerateMode { BM_INLINE = 0x01,
77  BM_OUTLINE = 0x02,
78  BM_REGENERATE = 0x04
79  };
80 
81  // Class constructor and destructor.
82  BM_State( BM_SceneManager &app,
83  PI_StateTemplate &templ,
84  const char *cursor = 0,
85  const char *const *vnames = 0,
86  UI_EventMethod const *vmethods = 0);
87  ~BM_State() override;
88 
89  int getUniqueId() const { return myUniqueId; }
90 
91  // Return the current status string for this state. This is used by the
92  // viewport rendering code to display some extra information in the
93  // viewport instead of in the blue status bar. If this string is
94  // returned empty (the default), it is ignored.
95  virtual void status(UT_String &s) const { s.harden(""); }
96 
97  // Render whatever extra things may be needed beside the status string.
98  // You can assume that translations to that location have been performed
99  // already (i.e., you can render without moving).
101 
102  int isHandle() const override { return 0; }
103 
104  // Enter or exit this state. There are 2 entry types:
105  // 1. fulltime (BM_FULLTIME_ENTRY): the state stays on until another one
106  // is invoked; that other state replaces the current.
107  // 2. overlay (BM_OVERLAY_ENTRY): also known as "volatile", it gets
108  // triggered by pressing a key and stays on until the key is released.
109  // Upon exiting it returns control to the previous state. It is not
110  // allowed to overlay the current state with itself or to have
111  // nested overlay states. When starting the overlay state, the
112  // previous state is _interrupted_, not exited; then, it is _resumed_.
113  // enter() returns 0 if entered and -1 if not.
114  int enter(BM_SimpleState::BM_EntryType how) override;
115  void exit() override;
116 
117 
118  //
119  // When the current desktop is changed, it's possible that the state might
120  // have to clean up some stuff. The concealed() method is called when the
121  // desktop is changed, the revealed() method when the desktop is re-opened.
122  // Note, it may be possible to get a revealed() called without having the
123  // concealed called.
124  //
125  virtual void concealState();
126  virtual void revealState();
127 
128  // Interrupt this state or resume its activity. These methods should
129  // be called by overlay states when entering and exiting respectively.
130  // Interrupt will leave the state in limbo and will usually turn off
131  // the feed from the app; resume will do the opposite. interrupt()
132  // should not change the modeler's current state. If 'state' is given, it
133  // is the state that has interrupted/resumed us. This may be particularly
134  // useful if we are interrupted by a handle (possibly ours).
135  void interrupt(BM_SimpleState *state = 0) override;
136  void resume(BM_SimpleState *state = 0) override;
137  virtual void handleVolatileChanges() {}
138  // Gives the opportunity to a state to react when a volatile state
139  // is invoked.
140  virtual void onVolatileState(BM_SimpleState const* volatile_state, bool overriding_state);
141 
142  // Pre-process a mouse start event, in case we wish to push/position a
143  // handle so the mouse event is processed by the handle.
144  virtual int preprocessSelect(UI_Event *event);
145 
146  // Deal with the events the modeler has sent me. Scene events imply use
147  // of the mouse. Return 1 if consumed and 0 otherwise.
148  int handleMouseEvent (UI_Event *event) override;
149 
150  // This is where mouse wheel events get sent.
151  // Integer deltas are stored into event->state.values[DEVICE_DIM_Z] where 1 step is a
152  // multiple of 100. Positive values indicates that the wheel rotated
153  // forwards away from the use, while negative values are the opposite.
154  // Return 1 if consumed and 0 otherwise.
155  virtual int handleMouseWheelEvent(UI_Event *event);
156 
157  // Return false if un-handled.
158  virtual bool handleDoubleClickEvent(UI_Event *);
159 
160  // Called whenever the geometry changed (but not when the change was
161  // caused by modelling in this state)
162  virtual void handleGeoChangedEvent(UI_Event *);
163 
164  // Called when a detail look's geometry is modified.
165  virtual void handleDetailLookGeoChanged(BM_DetailLook *look);
166 
167  // Called by the viewer to pass the handleDetailLookGeoChanged() calls
168  // down to any other saved (interrupted) states.
169  void propagateDetailLookGeoChanged(BM_DetailLook *look);
170 
171  // Called by the viewport to allow the state to render its own bits.
172  // It calls doRender(), which is what derived classes should implement.
173  void render(RE_RenderContext, int x, int y) override;
174 
175  // The state might contain something that it wants to display in a
176  // non-destructive manner (eg. by xor'ing). Note that this method is not
177  // called during the normal rendering of the workbench.
178  virtual void renderPartialOverlay(RE_RenderContext r, int x, int y);
179 
181  {
182  public:
184  : myInsertMode(true), myRequestNew(false), myExSitu(false) {}
185 
186  // We can start generating either in inline (insert) mode
187  // or in branching-off mode. The generation mode is relevant only when
188  // generating ops in a network.
189  void setInsertMode(bool insert_mode) { myInsertMode = insert_mode; }
190  bool insertMode() const { return myInsertMode; }
191 
192  // Some states reuse existing ops when possible instead of generating
193  // new ones. A request can be made for new ops here, but it is up to
194  // the individual state to interpret it.
195  void setRequestNew(bool request_new) { myRequestNew = request_new; }
196  bool requestNew() const { return myRequestNew; }
197 
198  // When the ex situ flag is true, this call is being made after the tool
199  // that the user triggered did something like change the viewer network
200  // so that the generate() is occuring in a different context to the one
201  // the user had when initially triggering the tool.
202  void setExSitu(bool ex_situ) { myExSitu = ex_situ; }
203  bool isExSitu() const { return myExSitu; }
204 
205  private:
206  bool myInsertMode;
207  bool myRequestNew;
208  bool myExSitu;
209  };
210 
211  // Similar to enter, but totally from scratch. At this level, it's the
212  // same as doing an enter. It cannot be entered in volatile mode.
213  virtual int generate(BM_SimpleState::BM_EntryType how,
214  const GenerateParms &parms);
215 
216  // Start or stop the generation process. At this level, generating doesn't
217  // mean a thing. We can start generating either in inline (insert) mode
218  // or in branching-off mode. The inline mode is the default. The mode
219  // is relevant only when generating ops in a network.
222  bool requestnew = false,
223  bool exsitu = false)
224  {
225  myFlags.scratch = how;
226  myFlags.requestnew = requestnew;
227  myFlags.exsitu = exsitu;
228  }
229  virtual void stopGenerating()
230  {
231  myFlags.scratch = 0;
232  myFlags.requestnew = 0;
233  myFlags.exsitu = 0;
234  }
235 
236  // Restart cancels what is currently being done and starts generating anew.
237  virtual void restart();
238 
239  // Also, find out whether you meet the overlay conditions to be entered.
240  int meetsOverlayEntryConditions(
241  const UI_Event &event) const;
242 
243  virtual void getKeyResolveInfo(UI_KeyResolveInfo &info);
244 
245  // Override this to handle transitory key presses, default implementation
246  // does nothing. Return true if key was handled. The key is in
247  // event.state.id and the keypress state is in event.state.data.
248  virtual bool handleTransitoryKey(const UI_Event & /*event*/,
249  int /*hotkey_id*/)
250  { return false; }
251 
252  // Called if the state needs to handle changes in op parameters
253  virtual int hasOpNode(const OP_Node &/*node*/) const;
254  virtual void handleOpNodeChange(OP_Node &/*node*/);
255  virtual void handleOpUIChange(OP_Node &/*node*/);
256  virtual void handleOpNetChange(OP_Network &/*net*/);
257  virtual void handleOpNetClear();
258 
259  // See how you can handle a node being deleted. If it's an implicit
260  // node we might be OK. Return 0 if we can handle it, -1 if we must be
261  // exited or restarted from scratch.
262  virtual int handleNodeDeleted(OP_Node &/*node*/);
263 
264  // Set or get the "locate" flag, which determines whether we're interested
265  // in locate events or not.
266  void wantsLocates(int yesNo) { myFlags.wantlocate=yesNo; }
267  virtual int hasLocates() const{ return myFlags.wantlocate;}
268  virtual bool doesHandleLocates() const { return false; }
269 
270  // Query some of the flags:
271  int isPreempted() const { return myFlags.preempted; }
272  int isBuilding () const { return myFlags.busybuild; }
273  int isEntered() const { return myFlags.entered; }
274  bool isConcealed() const { return myFlags.concealed; }
275 
276  int isGenerating() const { return myFlags.scratch; }
277  int isGeneratingInline() const
278  { return myFlags.scratch==BM_State::BM_INLINE; }
279  bool isRequestingNew() const
280  { return myFlags.requestnew; }
281  bool isGeneratingExSitu() const
282  { return myFlags.exsitu; }
283  int isRegenerating() const
284  { return myFlags.scratch==BM_State::BM_REGENERATE; }
285 
286  bool isOverlay() const override
287  {
288  return (myFlags.entered &
290  }
291  int isFullTime() const
292  {
293  return myFlags.entered &
295  }
296  int isModifier() const override
297  {
298  return myFlags.modifier;
299  }
300 
301  // If a state generates a sop and displays it (eg. a hide sop), it
302  // will want the state controller to ignore the change so the state
303  // doesn't exit.
304  virtual bool ignoreDisplayFlagChange() const { return false; }
305 
306  // Return 1 if the pointer to the feel containing the extra buttons of the
307  // state is on the myPIs.
308  // If a state has no extra buttons, 0 will be returned.
309  // This is different than BM_SceneManager::findPI(int id, OP_Node&node)
310  // which returns a pointer.
311  virtual int findPI(BM_OpHandleLink *pi) const;
312 
313  // Find out if the state is inherently sticky whether entered FULLTIME or
314  // not. Non-sticky (ie oneTime) states pop back to the view state after
315  // they've completed an operation. A state is sticky by default.
316  int isSticky() const { return myFlags.sticky; }
317 
318  // Check if MMB can be used for indirect handle drags. Some states use
319  // the MMB themselves.
320  virtual bool getAllowIndirectHandleDrag() const { return true; }
321 
322  // Checks if and how an RMB menu can be popped up. Usually, when the state
323  // is in building mode, the RMB menus are not allowed (since RMB is used
324  // to complete building/drawing/selection).
326  {
327  BM_RMB_MENU_ALLOWED, // show the menu right away
328  BM_RMB_MENU_DELAYED, // wait and show menu if mouse was not dragged
329  BM_RMB_MENU_DENIED // don't show the menu at all
330  };
331  virtual BM_RMBMenuPopupMode getRMBMenuPopupMode(short altflags) const;
332 
333  // The name of this class:
334  const char *className() const override;
335 
336  const PI_StateTemplate &getTemplate() const { return myTemplate; }
337  PI_StateTemplate &getTemplate() { return myTemplate; }
338 
339  // For most states, op dependency is determined entirely by the state
340  // template. It is possible, however, for the state instance itself
341  // to dynamically change whether or not it is op dependent on the fly.
342  // Any state changing its op dependency in this fashion must notify the
343  // appropriate BM_OpStateControl by calling its updateOpDependence()
344  // method. In general, getTemplate().opIndependent() should be false
345  // for such states to allow use of switchToOpDependent().
346  virtual int isOpIndependent() const;
347 
348  // Normally, when a user wants to switch to a node's default state, say
349  // by hitting BM_KEY_ACCEPT, when already in that state, we have to use
350  // a new instance whenever the current instance is not op dependent.
351  //
352  // These methods make it possible to override that behavior and change
353  // the current instance to be op dependent.
354  //
355  // NB: Only used when !getTemplate().opIndependent() && isOpIndependent(),
356  // i.e., it is registered as an op dependent state that is currently
357  // not op dependent, and hasOpNode() returns true for the target node.
358  virtual bool canSwitchToOpDependent() const { return false; }
359  virtual void switchToOpDependent();
360 
361  // Returns the state HUD Info.
362  const char *getHotkeyString() const override;
363  const char *getIconName() const override;
364  const char *getLabel() const override;
365  const char *getDescription() const override;
366 
367  virtual void afterUndo();
368 
369  // The user can dynamically change the bindings from the textport
370  // We need to refresh the current handles in the viewport because
371  // they could be affected.
372  virtual void refreshBindings(int id, const char *op_type);
373  // This method is called reload the stored settings of any attached
374  // PIs when these settings may have been changed.
375  virtual void refreshSettings(int id, const char *op_type);
376 
377  const char *replaceCursor(const char *newcursor) override;
378 
379  // Return the help for this state in the string that's passed in.
380  // (Note that custom states may override getHelp() to
381  // provide help, even though there is no actual help file.) is_html
382  // will be set to indicate if the help is in html or not.
383  // NOTE: The help file may contain unexpanded hotkey variables.
384  virtual void getHelp(UT_String &help_text, bool &is_html);
385 
386  // Find all help file information, see FUSE:openHdoxURL().
387  virtual void getHelpDirAndNameOrUrl(UT_StringHolder &dir,
389  UT_StringHolder &url);
390 
391  // Show persistent handles in this state?
392  virtual bool showPersistent() const { return true; }
393 
394  // Return true if we would like to receive an event intended for the
395  // click-orienter but was not consumed by it. All normal states should
396  // only want this event if they are overlay states.
397  virtual bool wantFailedOrienterEvent() const { return isOverlay(); }
398 
399  // Show the geometry of the selected operator in this state?
400  virtual bool getShowSelectedOp() const { return true; }
401 
402  // Reset and clear any remembered state data. Used mainly for states such
403  // as view, which would like to home on world origin again, etc.
404  virtual void resetStateForNew() { };
405 
406  // A state can override what appears in the select mode side bar of the
407  // viewer.
408  virtual UI_Feel *getCustomSelectModeSideBar() const { return 0; }
409 
410  // Returns true if the state respects the secure selection setting.
411  virtual bool useSecureSelection() const { return true; }
412 
413  // Returns true if the state supports volatile selections.
414  virtual bool useVolatileSelection() const { return false; }
415 
416  // Get the global state preferences. Preferences for individual states
417  // should be prefixed with "<getTemplate().name()>.".
418  static UT_Options &getGlobalPrefs();
419 
420  // returns true if this instance is executing code in a 'busy' mode
421  bool isBusyProcessing() const
422  {
423  return myBusyCounter > 0;
424  }
425 
426  // Drag and drop support
427  virtual int testDragDrop(DD_Source &)
428  {
429  return 0;
430  }
432  {
433  }
434  virtual int acceptDragDrop(DD_Source &, const char * /*label*/)
435  {
436  return 0;
437  }
438 
439  // Virtual method to let the state handle Move tool switching.
440  // Return false to let the view check the current handle and PIs do the handling.
441  // Return true to consume the event and have your state do the handling.
442  // 'tool' is the move tool mode to switch to.
443  // 'reveal_updated_handles' should be true for almost all calls and false
444  // only when called from JEDI_View::resetMoveToolIfNeeded. Your state can
445  // choose to keep handles invisible if needed.
447  bool reveal_updated_handles)
448  {
449  return false;
450  }
451 
452  // Virtual method to let the state override the default select state.
453  // Return true to override and use a new state name in 'new_state'.
454  // Return false to keep the default select state.
455  // 'new_state' is used as an in/out value and it holds the current select
456  // state name when the method is called.
457  // Set 'new_state' to the name of a volatile state or set it to the name
458  // of the current BM_State to avoid select state switching.
459  virtual bool overrideSelectState(UT_StringHolder &new_state)
460  {
461  return false;
462  }
463 
464  // Called when the state should first initialize its HUDs. This will be
465  // during enter()/generate(). This base implementation runs any updates
466  // that were stashed during construction.
467  //
468  // More specifically, this is called by the enter()/generate() methods at
469  // this level.
470  virtual void initializeHUDs();
471 
472  // This method updates a HUD at render time.
473  int updateHUD(UT_HUDInfoArgs const& args);
474 
475  // Called by BM_ResourceManager::newState() to pass over ownership of
476  // the HUD info args stashed for any HUD updates during construction.
478  void stealNewStateHUDQueue(UT_Array<HUDInfoArgsCopyUPtr> &&queue);
479 
480  void enterHUD();
481  void exitHUD();
482  void renderHUD();
483 
485  {
486  return myViewportEventIDStack;
487  }
488 
490  {
491  return myViewportEventIDStack;
492  }
493 
494 protected:
495  friend class Busy;
496 
497  // The state might contain some geometry it wants to display, but may not
498  // want it to be part of the main gdp. This method allows the state to
499  // "sneak in" this special geometry that it might have (eg. a rubber band
500  // when building curves). This method is called by DM_State::render().
501  virtual void doRender(RE_RenderContext r, int x, int y, int ghost);
502 
503  // Similar to doRender() but called on a saved (interrupted) state for
504  // states which may want to handle it.
505  virtual void doRenderSaved(RE_RenderContext r, int x, int y, int ghost);
506 
507  // Make this a state that changes data or not (0 by default):
508  void setModifier(int yn) { myFlags.modifier = yn; }
509 
510  // Find out whether the general entry conditions for overlay states
511  // are met (before you test for your specific key conditions).
512  // The basic conditions are that:
513  // - the event type is key up/down
514  // - no mouse button is down
515  // - we're not the current state
516  // - the current state is not an overlay itself
517  int meetsBasicOverlayEntryConditions(
518  const UI_Event &e) const;
519 
520  // Set the build flag, ie. whether we're actually building something now
521  // or making changes to geometry that is linked to this state.
522  virtual void setBuild(int onOff);
523 
524  void handleMouseEventVoidRet(UI_Event *event);
525 
526  // Call doRenderSaved on saved states recursively in case they want to
527  // handle it.
528  void renderSaved(RE_RenderContext r, int x, int y, int ghost);
529 
530  // This class is intended for classes deriving from BM_State to execute
531  // their code in a 'busy' mode. While the code executes, calling
532  // BM_State::isBusyProcessing() will return true. The 'busy' mode gets reset
533  // when the derived class method using Busy goes out of scope.
534  struct Busy
535  {
536  Busy() = delete;
537 
538  Busy( BM_State & state ) : myState(state)
539  {
540  myState.myBusyCounter++;
541  }
542 
544  {
545  if (myState.myBusyCounter > 0)
546  {
547  myState.myBusyCounter--;
548  }
549  }
550 
552  };
553 
554  BM_StateFlags myFlags; // useful flags
555 
558 
559 private:
560  friend class bmQtNotifier;
561 
562  template<typename T = bmQtNotifier>
563  void processHUDCommand(UT_HUDInfoArgs::Command hud_cmd);
564 
565  PI_StateTemplate &myTemplate;
566 
567  bool myCursorPushed;
568  int myBusyCounter;
569  UT_Array<int> myViewportEventIDStack;
570  int myUniqueId;
571 
572  // HUD info updates queued while this state was being constructed in
573  // BM_ResourceManager::newState().
574  UT_Array<HUDInfoArgsCopyUPtr> myNewStateHUDQueue;
575 
576  // Specific data member for handling the HUD notifications.
577  UT_SharedPtr<bmQtNotifier> myQtNotifier;
578  UT_SharedPtr<bmViewNotifier> myViewNotifier;
579 
580 };
581 
582 #endif
virtual void stopGenerating()
Definition: BM_State.h:229
virtual ~BM_DetailLook()
Definition: BM_State.h:44
void setExSitu(bool ex_situ)
Definition: BM_State.h:202
PXL_API const char * getDescription(const ColorSpace *space)
Return the description of the color space.
virtual bool ignoreDisplayFlagChange() const
Definition: BM_State.h:304
virtual void status(UT_String &s) const
Definition: BM_State.h:95
static UI_Event theDelayedSelectionEvent
Definition: BM_State.h:557
int isPreempted() const
Definition: BM_State.h:271
virtual bool getShowSelectedOp() const
Definition: BM_State.h:400
int isGenerating() const
Definition: BM_State.h:276
bool insertMode() const
Definition: BM_State.h:190
virtual bool switchHandleTool(BM_MoveTool::Type tool, bool reveal_updated_handles)
Definition: BM_State.h:446
BM_RMBMenuPopupMode
Definition: BM_State.h:325
PI_StateTemplate & getTemplate()
Definition: BM_State.h:337
virtual int testDragDrop(DD_Source &)
Definition: BM_State.h:427
bool requestNew() const
Definition: BM_State.h:196
GLdouble s
Definition: glad.h:3009
int isRegenerating() const
Definition: BM_State.h:283
GLint y
Definition: glcorearb.h:103
void setModifier(int yn)
Definition: BM_State.h:508
virtual void resume(BM_SimpleState *=0)
virtual bool useVolatileSelection() const
Definition: BM_State.h:414
virtual bool overrideSelectState(UT_StringHolder &new_state)
Definition: BM_State.h:459
bool isGeneratingExSitu() const
Definition: BM_State.h:281
Temporary container for either a RV_Render and an RE_Render.
static bool theDelayedSelectionEventIsValid
Definition: BM_State.h:556
bool isBusyProcessing() const
Definition: BM_State.h:421
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
int getUniqueId() const
Definition: BM_State.h:89
struct _cl_event * event
Definition: glcorearb.h:2961
bool isExSitu() const
Definition: BM_State.h:203
virtual int enter(BM_EntryType how=BM_SimpleState::BM_OVERLAY_ENTRY)=0
int isEntered() const
Definition: BM_State.h:273
void wantsLocates(int yesNo)
Definition: BM_State.h:266
void setInsertMode(bool insert_mode)
Definition: BM_State.h:189
int isBuilding() const
Definition: BM_State.h:272
virtual UI_Feel * getCustomSelectModeSideBar() const
Definition: BM_State.h:408
UT_UniquePtr< BM_HUDInfoArgsCopy > HUDInfoArgsCopyUPtr
Definition: BM_State.h:477
void startGenerating(BM_State::BM_GenerateMode how=BM_State::BM_INLINE, bool requestnew=false, bool exsitu=false)
Definition: BM_State.h:220
BM_GenerateMode
Definition: BM_State.h:76
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36
bool isOverlay() const override
Definition: BM_State.h:286
virtual void resetStateForNew()
Definition: BM_State.h:404
virtual bool useSecureSelection() const
Definition: BM_State.h:411
bool isConcealed() const
Definition: BM_State.h:274
virtual void render(RE_RenderContext rc, int x, int y)
void harden()
Take shallow copy and make it deep.
Definition: UT_String.h:225
virtual void interrupt(BM_SimpleState *=0)
*get result *(waiting if necessary)*A common idiom is to fire a bunch of sub tasks at the queue
Definition: thread.h:632
void setRequestNew(bool request_new)
Definition: BM_State.h:195
GLuint const GLchar * name
Definition: glcorearb.h:786
virtual bool wantFailedOrienterEvent() const
Definition: BM_State.h:397
GLint GLenum GLint x
Definition: glcorearb.h:409
UT_Array< int > & viewportEventIDs()
Definition: BM_State.h:489
Busy(BM_State &state)
Definition: BM_State.h:538
virtual bool handleTransitoryKey(const UI_Event &, int)
Definition: BM_State.h:248
#define BM_API
Definition: BM_API.h:10
BM_State & myState
Definition: BM_State.h:551
bool isRequestingNew() const
Definition: BM_State.h:279
A map of string to various well defined value types.
Definition: UT_Options.h:87
GA_API const UT_StringHolder parms
int isGeneratingInline() const
Definition: BM_State.h:277
const PI_StateTemplate & getTemplate() const
Definition: BM_State.h:336
virtual void exit()=0
BM_StateFlags myFlags
Definition: BM_State.h:554
int isModifier() const override
Definition: BM_State.h:296
virtual bool getAllowIndirectHandleDrag() const
Definition: BM_State.h:320
__hostdev__ constexpr T pi()
Pi constant taken from Boost to match old behaviour.
Definition: NanoVDB.h:976
virtual int handleMouseEvent(UI_Event *event)=0
virtual void getDragDropChoice(DD_Source &, DD_ChoiceList &)
Definition: BM_State.h:431
virtual int acceptDragDrop(DD_Source &, const char *)
Definition: BM_State.h:434
int isHandle() const override
Definition: BM_State.h:102
void(UI_Object::* UI_EventMethod)(UI_Event *)
Definition: UI_Object.h:36
**If you just want to fire and args
Definition: thread.h:618
virtual bool showPersistent() const
Definition: BM_State.h:392
virtual void handleVolatileChanges()
Definition: BM_State.h:137
GLboolean r
Definition: glcorearb.h:1222
virtual void renderStatusExtras(RE_RenderContext)
Definition: BM_State.h:100
virtual bool canSwitchToOpDependent() const
Definition: BM_State.h:358
int isFullTime() const
Definition: BM_State.h:291
virtual bool doesHandleLocates() const
Definition: BM_State.h:268
state
Definition: core.h:2289
int isSticky() const
Definition: BM_State.h:316
UT_Array< int > const & viewportEventIDs() const
Definition: BM_State.h:484
virtual int hasLocates() const
Definition: BM_State.h:267