![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /***************************************************************************** 00002 * Copyright (c) 2012 MAK Technologies, Inc. 00003 * All rights reserved. 00004 *****************************************************************************/ 00005 00009 00010 #pragma once 00011 00012 #include <vrvCoreQt/vrvCoreQt.h> 00013 00014 #include <QtGui/QDialog> 00015 #include <QtGui/QLabel> 00016 #include <vrvCoreQt/DtKeyMappingEditorWidgetInterface.h> 00017 #include <vrvCore/DtKeyMap.h> 00018 00019 class QAbstractButton; 00020 class QActionGroup; 00021 class QButtonGroup; 00022 class QHBoxLayout; 00023 class QLineEdit; 00024 class QMenu; 00025 class QPushButton; 00026 class QRadioButton; 00027 class QSplitter; 00028 class QTreeWidget; 00029 class QTreeWidgetItem; 00030 class QVBoxLayout; 00031 class QWidget; 00032 class QListWidget; 00033 class QFocusEvent; 00034 00035 namespace makVrv 00036 { 00037 00038 class DtRequestKeyMapKeyDialog; 00039 class DtRequestKeyValidationDialog; 00040 00043 class DT_DLL_VRVCOREQT DtKeyMappingEditorWidget : public QWidget, 00044 public DtKeyMappingEditorWidgetInterface 00045 { 00046 00047 Q_OBJECT 00048 00049 public: 00050 00052 DtKeyMappingEditorWidget( DtDe& de, QWidget* parent = 0, 00053 Qt::WindowFlags flags = 0 ); 00054 00056 virtual ~DtKeyMappingEditorWidget(); 00057 00059 virtual void addKeyFunction(const std::string& name, const std::string& keyString); 00060 00062 virtual void updateKeyFunction(const std::string& name, const std::string& keyString); 00063 00064 virtual void addChildKeyFunction(const std::string& name, const std::string& parentName, 00065 const std::string& keyString); 00066 00068 virtual void deleteKeyFunction(const std::string& name); 00069 00071 virtual void clearKeyFunctions(); 00072 00074 virtual void selectKeyFunction(const std::string& name); 00075 00077 virtual void selectKeyMapping( const DtKeyMapping& keyMapping, bool isBinary ); 00078 00082 virtual void setEnableFilterEditor(bool filters); 00083 00085 virtual void setFilters(const std::vector<std::pair<int,bool> >& filters); 00086 00088 virtual void sortKeyFunctions(); 00089 00091 virtual void addKeyMapping( const DtKeyMapping& keyMapping, 00092 bool suppressUpDown ); 00093 00095 virtual void removeKeyMapping( const DtKeyMapping& keyMapping ); 00096 00098 virtual void clearKeyMappings(); 00099 00101 virtual void setEnableAddMappingButton( bool enabled ); 00102 00104 virtual void setEnableRemoveMappingButton( bool enabled ); 00105 00107 virtual void setEnableEditMappingButton( bool enabled ); 00108 00110 virtual void requestInput( const std::string functionName, 00111 const DtKeyMapping& keyMapping, bool isBinary ); 00112 00114 virtual void requestInput( const std::string functionName, bool isBinary ); 00115 00117 virtual void closeEditor(); 00118 00121 virtual std::string unmappedString(); 00122 00126 virtual void requestKeyValidation( const DtKeyMapping& keyMapping, 00127 const std::string functionName, const DtKeyFunctionNameList& fnList, bool isEdit ); 00128 00130 virtual void disableEditor(); 00131 00133 virtual void enableEditor(); 00134 00136 virtual QWidget* widget(); 00137 00138 protected slots: 00139 00141 virtual void onFunctionItemSelectionChanged(); 00142 00144 virtual void onEditItemSelectionChanged(); 00145 00147 virtual void onFilterGroupTriggered(QAction* action); 00148 00150 virtual void onAddMappingClicked(); 00151 00153 virtual void onRemoveMappingClicked(); 00154 00156 virtual void onEditMappingClicked(); 00157 00158 protected: 00159 00161 void slot_requestInputAccepted(const DtKeyMapping&, bool); 00162 void slot_requestInputCanceled(); 00163 00165 void slot_requestKeyValidationAccepted( const DtKeyMapping& keyMapping, 00166 const DtKeyFunctionNameList& fnList, bool isEdit, bool replace); 00167 00168 QString selectedKeyFunctionName() const; 00169 void functionCategoryToCategoryName( int category, QString& categoryName ); 00170 void setupGui(); 00171 QTreeWidgetItem* findItem( const std::string& key ); 00172 QTreeWidgetItem* findKeyMapping( const DtKeyMapping& mapping, bool isBinary ); 00173 00174 protected: 00175 00176 DtDe& myDe; 00177 std::string myKeyMapName; 00178 00179 QPushButton* myFilterButton; 00180 QLabel* myFilterLabel; 00181 QActionGroup* myFilterGroup; 00182 QMenu* myFilterMenu; 00183 QWidget* myFunctionWidget; 00184 QWidget* myEditWidget; 00185 QTreeWidget* myFunctionTreeWidget; 00186 QTreeWidget* myEditTreeWidget; 00187 00188 QSplitter* myTreeWidgetSplitter; 00189 QVBoxLayout* myFunctionLayout; 00190 QVBoxLayout* myMappingEditorLayout; 00191 QHBoxLayout* myMappingEditorButtonLayout; 00192 QHBoxLayout* myButtonLayout; 00193 QPushButton* myEditMappingButton; 00194 QPushButton* myAddMappingButton; 00195 QPushButton* myRemoveMappingButton; 00196 DtRequestKeyMapKeyDialog* myRequestDialog; 00197 DtRequestKeyValidationDialog* myRequestKeyValidationDialog; 00198 00199 bool mySaveFilterEnabledState; 00200 bool mySaveFunctionListEnabledState; 00201 bool mySaveMappingListEnabledState; 00202 bool mySaveEditMappingButtonEnabledState; 00203 bool mySaveAddMappingButtonEnabledState; 00204 bool mySaveRemoveMappingButtonEnabledState; 00205 bool myEditorDisabled; 00206 bool myIsClosing; 00207 00208 }; 00209 00210 00214 class DT_DLL_VRVCOREQT DtRequestKeyMapKeyDialog : public QDialog 00215 { Q_OBJECT; 00216 public: 00217 00219 DtRequestKeyMapKeyDialog( QWidget* parent = 0, Qt::WindowFlags flags = Qt::Tool | Qt::SubWindow ); 00220 00222 virtual ~DtRequestKeyMapKeyDialog(); 00223 00225 virtual void keyPressEvent( QKeyEvent * event ); 00226 00228 virtual void closeEvent(QCloseEvent *event); 00229 00231 void show( std::string functionName, bool isBinary ); 00232 00234 void show( std::string functionName, const DtKeyMapping& keyMapping, 00235 bool isBinary ); 00236 00237 protected slots: 00238 00240 void onOkClicked(); 00241 00243 void onCancelClicked(); 00244 00246 void onUpRadioButtonClicked(); 00247 00249 void onDownRadioButtonClicked(); 00250 00251 public: 00252 00253 boost::signal<void ()> signal_requestInputCanceled; 00254 boost::signal<void (const DtKeyMapping&, bool)> signal_requestInputAccepted; 00255 boost::signal<void (const DtKeyMapping&, 00256 const DtKeyFunctionNameList&, bool, bool)> signal_requestKeyValidationAccepted; 00257 00258 protected: 00259 00260 void setupGui(); 00261 QString keyMappingToQString( const DtKeyMapping& keyMapping ); 00262 00263 protected: 00264 00265 QLabel* myFunctionNameLabel; 00266 QLineEdit* myKeyTextLineEdit; 00267 QButtonGroup* myUpDownButtonGroup; 00268 QRadioButton* myUpRadioButton; 00269 QRadioButton* myDownRadioButton; 00270 QVBoxLayout* myUpDownLayout; 00271 QHBoxLayout* myEntryLayout; 00272 QPushButton* myOkButton; 00273 QPushButton* myCancelButton; 00274 QHBoxLayout* myBottomButtonLayout; 00275 QVBoxLayout* myDialogLayout; 00276 00277 DtKeyMapping myKeyMapping; 00278 DtKeyMapping myInitialEditKeyMapping; 00279 bool myUserTyped; 00280 00281 bool myIsBinary; 00282 bool myIsClosing; 00283 bool myIsEdit; 00284 00285 }; 00286 00287 00291 class DT_DLL_VRVCOREQT DtRequestKeyValidationDialog : public QDialog 00292 { Q_OBJECT; 00293 public: 00294 00296 DtRequestKeyValidationDialog( QWidget* parent = 0, Qt::WindowFlags flags = Qt::Tool | Qt::SubWindow ); 00297 00299 virtual ~DtRequestKeyValidationDialog(); 00300 00302 virtual void closeEvent( QCloseEvent *event ); 00303 00305 void show( const DtKeyMapping& keyMapping, const std::string functionName, 00306 const DtKeyFunctionNameList& fnList, bool isEdit ); 00307 00308 protected slots: 00309 00311 void onAddClicked(); 00312 00315 void onReplaceClicked(); 00316 00318 void onCancelClicked(); 00319 00320 public: 00321 00322 boost::signal<void ()> signal_requestInputCanceled; 00323 boost::signal<void (const DtKeyMapping&, bool)> signal_requestInputAccepted; 00324 boost::signal<void (const DtKeyMapping&, 00325 const DtKeyFunctionNameList&, bool, bool)> signal_requestKeyValidationAccepted; 00326 00327 protected: 00328 00329 void setupGui(); 00330 00332 QString keyMappingToQString( const DtKeyMapping& keyMapping ); 00333 00334 protected: 00335 00336 QLabel* myFunctionNamePrefixLabel; 00337 QLabel* myFunctionNameSuffixLabel; 00338 QListWidget* myFunctionNameList; 00339 QPushButton* myAddButton; 00340 QPushButton* myReplaceButton; 00341 QPushButton* myCancelButton; 00342 QHBoxLayout* myBottomButtonLayout; 00343 QVBoxLayout* myMainLayout; 00344 00345 DtKeyMapping myKeyMapping; 00346 DtKeyFunctionNameList myFnList; 00347 bool myIsClosing; 00348 bool myIsEdit; 00349 00350 }; 00351 00352 }