summaryrefslogtreecommitdiff
path: root/indra/llui/llfocusmgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llui/llfocusmgr.h')
-rw-r--r--indra/llui/llfocusmgr.h102
1 files changed, 102 insertions, 0 deletions
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
new file mode 100644
index 0000000000..cb555fca91
--- /dev/null
+++ b/indra/llui/llfocusmgr.h
@@ -0,0 +1,102 @@
+/**
+ * @file llfocusmgr.h
+ * @brief LLFocusMgr base class
+ *
+ * Copyright (c) 2002-$CurrentYear$, Linden Research, Inc.
+ * $License$
+ */
+
+// Singleton that manages keyboard and mouse focus
+
+#ifndef LL_LLFOCUSMGR_H
+#define LL_LLFOCUSMGR_H
+
+#include "llstring.h"
+#include "llframetimer.h"
+#include "llview.h"
+
+class LLUICtrl;
+class LLMouseHandler;
+
+class LLFocusMgr
+{
+public:
+ typedef void (*FocusLostCallback)(LLUICtrl*);
+
+ LLFocusMgr();
+ ~LLFocusMgr();
+
+ // Mouse Captor
+ void setMouseCapture(LLMouseHandler* new_captor,void (*on_capture_lost)(LLMouseHandler* old_captor)); // new_captor = NULL to release the mouse.
+ LLMouseHandler* getMouseCapture() { return mMouseCaptor; }
+ void removeMouseCaptureWithoutCallback( LLMouseHandler* captor );
+ BOOL childHasMouseCapture( LLView* parent );
+
+ // Keyboard Focus
+ void setKeyboardFocus(LLUICtrl* new_focus, FocusLostCallback on_focus_lost, BOOL lock = FALSE); // new_focus = NULL to release the focus.
+ LLUICtrl* getKeyboardFocus() const { return mKeyboardFocus; }
+ BOOL childHasKeyboardFocus( const LLView* parent ) const;
+ void removeKeyboardFocusWithoutCallback( LLView* focus );
+ FocusLostCallback getFocusCallback() { return mKeyboardFocusLostCallback; }
+ F32 getFocusTime() const { return mFocusTimer.getElapsedTimeF32(); }
+ F32 getFocusFlashAmt();
+ LLColor4 getFocusColor();
+ void triggerFocusFlash();
+ BOOL getAppHasFocus() { return mAppHasFocus; }
+ void setAppHasFocus(BOOL focus);
+ LLUICtrl* getLastFocusForGroup(LLView* subtree_root);
+ void clearLastFocusForGroup(LLView* subtree_root);
+
+ // If setKeyboardFocus(NULL) is called, and there is a non-NULL default
+ // keyboard focus view, focus goes there. JC
+ void setDefaultKeyboardFocus(LLUICtrl* default_focus);
+ LLUICtrl* getDefaultKeyboardFocus() const { return mDefaultKeyboardFocus; }
+
+
+ // Top View
+ void setTopView(LLView* new_top, void (*on_top_lost)(LLView* old_top));
+ LLView* getTopView() const { return mTopView; }
+ void removeTopViewWithoutCallback( LLView* top_view );
+ BOOL childIsTopView( LLView* parent );
+
+ // All Three
+ void releaseFocusIfNeeded( LLView* top_view );
+ void unlockFocus();
+ BOOL focusLocked() { return mLockedView != NULL; }
+
+protected:
+ LLUICtrl* mLockedView;
+ FocusLostCallback mKeyboardLockedFocusLostCallback;
+
+ // Mouse Captor
+ LLMouseHandler* mMouseCaptor; // Mouse events are premptively routed to this object
+ void (*mMouseCaptureLostCallback)(LLMouseHandler*); // The object to which mouse events are routed is called before another object takes its place
+
+ // Keyboard Focus
+ LLUICtrl* mKeyboardFocus; // Keyboard events are preemptively routed to this object
+ LLUICtrl* mDefaultKeyboardFocus;
+ FocusLostCallback mKeyboardFocusLostCallback; // The object to which keyboard events are routed is called before another object takes its place
+
+ // Top View
+ LLView* mTopView;
+ void (*mTopViewLostCallback)(LLView*);
+
+ LLFrameTimer mFocusTimer;
+ F32 mFocusWeight;
+
+ BOOL mAppHasFocus;
+
+ typedef std::map<LLViewHandle, LLViewHandle> focus_history_map_t;
+ focus_history_map_t mFocusHistory;
+
+ #ifdef _DEBUG
+ LLString mMouseCaptorName;
+ LLString mKeyboardFocusName;
+ LLString mTopViewName;
+ #endif
+};
+
+extern LLFocusMgr gFocusMgr;
+
+#endif // LL_LLFOCUSMGR_H
+