1 /*! 2 @file 3 @author Albert Semenov 4 @date 09/2010 5 */ 6 7 #include "Precompiled.h" 8 #include "BackwardCompatibilityManager.h" 9 #include "SettingsManager.h" 10 11 template <> tools::BackwardCompatibilityManager* MyGUI::Singleton<tools::BackwardCompatibilityManager>::msInstance = nullptr; 12 template <> const char* MyGUI::Singleton<tools::BackwardCompatibilityManager>::mClassTypeName = "BackwardCompatibilityManager"; 13 14 namespace tools 15 { 16 BackwardCompatibilityManager()17 BackwardCompatibilityManager::BackwardCompatibilityManager() 18 { 19 mVersions.push_back("3.2.0"); 20 mVersions.push_back("3.1.0"); 21 22 mPropertyNames["3.1.0-StateSelected"] = "Button_Pressed"; 23 mPropertyNames["3.1.0-ModeImage"] = "Button_ModeImage"; 24 mPropertyNames["3.1.0-ImageResource"] = "Button_ImageResource"; 25 26 mPropertyNames["3.1.0-ModeDrop"] = "Combo_ModeDrop"; 27 28 mPropertyNames["3.1.0-NeedDragDrop"] = "DDContainer_NeedDragDrop"; 29 30 mPropertyNames["3.1.0-CursorPosition"] = "Edit_CursorPosition"; 31 mPropertyNames["3.1.0-TextSelect"] = "Edit_TextSelect"; 32 mPropertyNames["3.1.0-ReadOnly"] = "Edit_ReadOnly"; 33 mPropertyNames["3.1.0-Password"] = "Edit_Password"; 34 mPropertyNames["3.1.0-MultiLine"] = "Edit_MultiLine"; 35 mPropertyNames["3.1.0-PasswordChar"] = "Edit_PasswordChar"; 36 mPropertyNames["3.1.0-MaxTextLength"] = "Edit_MaxTextLength"; 37 mPropertyNames["3.1.0-OverflowToTheLeft"] = "Edit_OverflowToTheLeft"; 38 mPropertyNames["3.1.0-Static"] = "Edit_Static"; 39 mPropertyNames["3.1.0-WordWrap"] = "Edit_WordWrap"; 40 mPropertyNames["3.1.0-TabPrinting"] = "Edit_TabPrinting"; 41 mPropertyNames["3.1.0-InvertSelected"] = "Edit_InvertSelected"; 42 43 mPropertyNames["3.1.0-MenuItemId"] = "MenuItem_Id"; 44 mPropertyNames["3.1.0-MenuItemType"] = "MenuItem_Type"; 45 46 mPropertyNames["3.1.0-MessageText"] = "Message_Message"; 47 mPropertyNames["3.1.0-Modal"] = "Message_Modal"; 48 mPropertyNames["3.1.0-MessageButton"] = "Message_Button"; 49 mPropertyNames["3.1.0-SmoothShow"] = "Message_SmoothShow"; 50 mPropertyNames["3.1.0-Fade"] = "Message_Fade"; 51 52 mPropertyNames["3.1.0-Range"] = "Progress_Range"; 53 mPropertyNames["3.1.0-RangePosition"] = "Progress_Position"; 54 mPropertyNames["3.1.0-AutoTrack"] = "Progress_AutoTrack"; 55 56 mPropertyNames["3.1.0-CanvasAlign"] = "ScrollView_CanvasAlign"; 57 mPropertyNames["3.1.0-CanvasSize"] = "ScrollView_CanvasSize"; 58 59 mPropertyNames["3.1.0-ImageTexture"] = "Image_Texture"; 60 mPropertyNames["3.1.0-ImageRegion"] = "Image_Region"; 61 mPropertyNames["3.1.0-ImageTile"] = "Image_Tile"; 62 mPropertyNames["3.1.0-ImageIndex"] = "Image_Index"; 63 mPropertyNames["3.1.0-ImageResource"] = "Image_Resource"; 64 mPropertyNames["3.1.0-ImageGroup"] = "Image_Group"; 65 mPropertyNames["3.1.0-ImageName"] = "Image_Name"; 66 67 mPropertyNames["3.1.0-TextColour"] = "Text_TextColour"; 68 mPropertyNames["3.1.0-TextAlign"] = "Text_TextAlign"; 69 mPropertyNames["3.1.0-FontName"] = "Text_FontName"; 70 mPropertyNames["3.1.0-FontHeight"] = "Text_FontHeight"; 71 72 mPropertyNames["3.1.0-ButtonWidth"] = "Tab_ButtonWidth"; 73 mPropertyNames["3.1.0-ButtonAutoWidth"] = "Tab_ButtonAutoWidth"; 74 mPropertyNames["3.1.0-SmoothShow"] = "Tab_SmoothShow"; 75 mPropertyNames["3.1.0-SelectItem"] = "Tab_SelectItem"; 76 77 mPropertyNames["3.1.0-ButtonWidth"] = "TabItem_ButtonWidth"; 78 79 mPropertyNames["3.1.0-Page"] = "Scroll_Page"; 80 mPropertyNames["3.1.0-ViewPage"] = "Scroll_ViewPage"; 81 mPropertyNames["3.1.0-MoveToClick"] = "Scroll_MoveToClick"; 82 83 mPropertyNames["3.1.0-Caption"] = "Widget_Caption"; 84 mPropertyNames["3.1.0-Position"] = "Widget_Position"; 85 mPropertyNames["3.1.0-Size"] = "Widget_Size"; 86 mPropertyNames["3.1.0-Coord"] = "Widget_Coord"; 87 mPropertyNames["3.1.0-Visible"] = "Widget_Visible"; 88 mPropertyNames["3.1.0-Alpha"] = "Widget_Alpha"; 89 mPropertyNames["3.1.0-Colour"] = "Widget_Colour"; 90 mPropertyNames["3.1.0-InheritsAlpha"] = "Widget_InheritsAlpha"; 91 mPropertyNames["3.1.0-InheritsPick"] = "Widget_InheritsPick"; 92 mPropertyNames["3.1.0-MaskPick"] = "Widget_MaskPick"; 93 mPropertyNames["3.1.0-State"] = "Widget_State"; 94 mPropertyNames["3.1.0-NeedKey"] = "Widget_NeedKey"; 95 mPropertyNames["3.1.0-NeedMouse"] = "Widget_NeedMouse"; 96 mPropertyNames["3.1.0-Enabled"] = "Widget_Enabled"; 97 mPropertyNames["3.1.0-NeedToolTip"] = "Widget_NeedToolTip"; 98 mPropertyNames["3.1.0-Pointer"] = "Widget_Pointer"; 99 100 mPropertyNames["3.1.0-AutoAlpha"] = "Window_AutoAlpha"; 101 mPropertyNames["3.1.0-Snap"] = "Window_Snap"; 102 mPropertyNames["3.1.0-MinSize"] = "Window_MinSize"; 103 mPropertyNames["3.1.0-MaxSize"] = "Window_MaxSize"; 104 105 mPropertyNames["3.1.0-VScroll-Range"] = "Scroll_Range"; 106 mPropertyNames["3.1.0-VScroll-RangePosition"] = "Scroll_Position"; 107 mPropertyNames["3.1.0-HScroll-Range"] = "Scroll_Range"; 108 mPropertyNames["3.1.0-HScroll-RangePosition"] = "Scroll_Position"; 109 mPropertyNames["3.1.0-Progress-Range"] = "Progress_Range"; 110 mPropertyNames["3.1.0-Progress-RangePosition"] = "Progress_Position"; 111 mPropertyNames["3.1.0-ProgressBar-Range"] = "Progress_Range"; 112 mPropertyNames["3.1.0-ProgressBar-RangePosition"] = "Progress_Position"; 113 mPropertyNames["3.1.0-Edit-VisibleVScroll"] = "Edit_ShowVScroll"; 114 mPropertyNames["3.1.0-Edit-VisibleHScroll"] = "Edit_ShowHScroll"; 115 mPropertyNames["3.1.0-EditBox-VisibleVScroll"] = "Edit_ShowVScroll"; 116 mPropertyNames["3.1.0-EditBox-VisibleHScroll"] = "Edit_ShowHScroll"; 117 mPropertyNames["3.1.0-Message-Caption"] = "Message_Caption"; 118 mPropertyNames["3.1.0-ScrollView-VisibleVScroll"] = "ScrollView_VScroll"; 119 mPropertyNames["3.1.0-ScrollView-VisibleHScroll"] = "ScrollView_HScroll"; 120 121 mPropertyNames["3.1.0-List-AddItem"] = "List_AddItem"; 122 mPropertyNames["3.1.0-ListBox-AddItem"] = "List_AddItem"; 123 mPropertyNames["3.1.0-ComboBox-AddItem"] = "Combo_AddItem"; 124 } 125 initialise()126 void BackwardCompatibilityManager::initialise() 127 { 128 if (!SettingsManager::getInstance().tryGetValue("Settings/LayoutVersion", mCurrentVersion)) 129 mCurrentVersion = getDefaultVersion(); 130 131 SettingsManager::getInstance().eventSettingsChanged.connect(this, &BackwardCompatibilityManager::notifySettingsChanged); 132 } 133 shutdown()134 void BackwardCompatibilityManager::shutdown() 135 { 136 SettingsManager::getInstance().eventSettingsChanged.disconnect(this); 137 SettingsManager::getInstance().setValue("Settings/LayoutVersion", mCurrentVersion); 138 } 139 serialiseProperty(MyGUI::xml::Element * _node,const std::string & _widgetType,const MyGUI::PairString & _property,bool _compatibility)140 void BackwardCompatibilityManager::serialiseProperty(MyGUI::xml::Element* _node, const std::string& _widgetType, const MyGUI::PairString& _property, bool _compatibility) 141 { 142 std::string propertyName = _property.first; 143 144 if (_compatibility && getDefaultVersion() != getCurrentVersion()) 145 { 146 std::string key = MyGUI::utility::toString(getCurrentVersion(), "-", propertyName); 147 148 MyGUI::MapString::const_iterator item = mPropertyNames.find(key); 149 if (item != mPropertyNames.end()) 150 { 151 propertyName = (*item).second; 152 } 153 else 154 { 155 key = MyGUI::utility::toString(getCurrentVersion(), "-", _widgetType, "-", propertyName); 156 157 item = mPropertyNames.find(key); 158 if (item != mPropertyNames.end()) 159 { 160 propertyName = (*item).second; 161 } 162 else 163 { 164 MYGUI_LOG(Warning, "Property key not found '" << key << "'"); 165 } 166 } 167 } 168 169 MyGUI::xml::ElementPtr nodeProp = _node->createChild("Property"); 170 nodeProp->addAttribute("key", propertyName); 171 nodeProp->addAttribute("value", _property.second); 172 } 173 getVersions() const174 const MyGUI::VectorString& BackwardCompatibilityManager::getVersions() const 175 { 176 return mVersions; 177 } 178 notifySettingsChanged(const std::string & _path)179 void BackwardCompatibilityManager::notifySettingsChanged(const std::string& _path) 180 { 181 if (_path == "Settings/LayoutVersion") 182 mCurrentVersion = SettingsManager::getInstance().getValue("Settings/LayoutVersion"); 183 } 184 getDefaultVersion() const185 const std::string& BackwardCompatibilityManager::getDefaultVersion() const 186 { 187 return mVersions.front(); 188 } 189 getCurrentVersion() const190 const std::string& BackwardCompatibilityManager::getCurrentVersion() const 191 { 192 return mCurrentVersion; 193 } 194 setCurrentVersion(const std::string & _value)195 void BackwardCompatibilityManager::setCurrentVersion(const std::string& _value) 196 { 197 mCurrentVersion = _value; 198 } 199 200 } 201