00001 00032 #ifndef LL_TOOLMGR_H 00033 #define LL_TOOLMGR_H 00034 00035 #include "llkeyboard.h" 00036 00037 class LLTool; 00038 class LLToolset; 00039 00040 // Key bindings for common operations 00041 const MASK MASK_VERTICAL = MASK_CONTROL; 00042 const MASK MASK_SPIN = MASK_CONTROL | MASK_SHIFT; 00043 const MASK MASK_ZOOM = MASK_NONE; 00044 const MASK MASK_ORBIT = MASK_CONTROL; 00045 const MASK MASK_PAN = MASK_CONTROL | MASK_SHIFT; 00046 const MASK MASK_COPY = MASK_SHIFT; 00047 00048 class LLToolMgr : public LLSingleton<LLToolMgr> 00049 { 00050 public: 00051 LLToolMgr(); 00052 ~LLToolMgr(); 00053 00054 // Must be called after gSavedSettings set up. 00055 void initTools(); 00056 00057 LLTool* getCurrentTool(); // returns active tool, taking into account keyboard state 00058 LLTool* getBaseTool(); // returns active tool when overrides are deactivated 00059 00060 BOOL inEdit(); 00061 00062 /* Determines if we are in Build mode or not. */ 00063 bool inBuildMode(); 00064 00065 void setTransientTool(LLTool* tool); 00066 void clearTransientTool(); 00067 BOOL usingTransientTool(); 00068 00069 void setCurrentToolset(LLToolset* current); 00070 LLToolset* getCurrentToolset(); 00071 00072 void onAppFocusGained(); 00073 void onAppFocusLost(); 00074 00075 void clearSavedTool(); 00076 00077 protected: 00078 friend class LLToolset; // to allow access to setCurrentTool(); 00079 void setCurrentTool(LLTool* tool); 00080 void updateToolStatus(); 00081 00082 protected: 00083 LLTool* mBaseTool; 00084 LLTool* mSavedTool; // The current tool at the time application focus was lost. 00085 LLTool* mTransientTool; 00086 LLTool* mOverrideTool; // Tool triggered by keyboard override 00087 LLTool* mSelectedTool; // last known active tool 00088 LLToolset* mCurrentToolset; 00089 }; 00090 00091 // Sets of tools for various modes 00092 class LLToolset 00093 { 00094 public: 00095 LLToolset() : mSelectedTool(NULL) {} 00096 00097 LLTool* getSelectedTool() { return mSelectedTool; } 00098 00099 void addTool(LLTool* tool); 00100 00101 void selectTool( LLTool* tool ); 00102 void selectToolByIndex( S32 index ); 00103 void selectFirstTool(); 00104 void selectNextTool(); 00105 void selectPrevTool(); 00106 00107 void handleScrollWheel(S32 clicks); 00108 00109 BOOL isToolSelected( S32 index ); 00110 00111 protected: 00112 LLTool* mSelectedTool; 00113 typedef std::vector<LLTool*> tool_list_t; 00114 tool_list_t mToolList; 00115 }; 00116 00117 // Handy callbacks for switching tools 00118 void select_tool(void *tool); 00119 00120 00121 // Globals 00122 00123 extern LLToolset* gBasicToolset; 00124 extern LLToolset *gCameraToolset; 00125 //extern LLToolset *gLandToolset; 00126 extern LLToolset* gMouselookToolset; 00127 extern LLToolset* gFaceEditToolset; 00128 00129 extern LLTool* gToolNull; 00130 00131 #endif