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