2 * Copyright(c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.Runtime.InteropServices;
20 using Tizen.NUI.BaseComponents;
21 using System.ComponentModel;
26 /// The StyleManager informs applications of the system theme change, and supports application theme change at runtime.<br />
27 /// Applies various styles to controls using the properties system.<br />
28 /// On theme change, it automatically updates all controls, then raises a event to inform the application.<br />
29 /// If the application wants to customize the theme, RequestThemeChange needs to be called.<br />
30 /// It provides the path to the application resource root folder, from there the filename can be specified along with any subfolders, for example, Images, Models, etc.<br />
32 /// <since_tizen> 3 </since_tizen>
33 public class StyleManager : BaseHandle
35 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
37 internal StyleManager(global::System.IntPtr cPtr, bool cMemoryOwn) : base(NDalicPINVOKE.StyleManager_SWIGUpcast(cPtr), cMemoryOwn)
39 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
42 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(StyleManager obj)
44 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
47 private static readonly StyleManager instance = StyleManager.Get();
50 /// Gets the singleton of the StyleManager object.
52 /// <since_tizen> 5 </since_tizen>
53 /// This will be released at Tizen.NET API Level 5, so currently this would be used as inhouse API.
54 [EditorBrowsable(EditorBrowsableState.Never)]
55 public static StyleManager Instance
66 /// Please DO NOT use! This will be deprecated!
67 /// Dispose() method in Singletone classes (ex: FocusManager, StyleManager, VisualFactory, IMFManager, TtsPlayer, Window) is not required.
68 /// Because it is Sigletone, so it is alive for one thread until the NUI is terminated, so it never be disposed.
69 /// <since_tizen> 3 </since_tizen>
70 [Obsolete("Please do not use! This will be deprecated!")]
71 [EditorBrowsable(EditorBrowsableState.Never)]
72 protected override void Dispose(DisposeTypes type)
79 if (type == DisposeTypes.Explicit)
82 //Release your own managed resources here.
83 //You should release all of your own disposable objects here.
86 //Release your own unmanaged resources here.
87 //You should not access any managed member here except static instance.
88 //because the execution order of Finalizes is non-deterministic.
90 if (_styleManagerStyleChangedCallbackDelegate != null)
92 StyleChangedSignal().Disconnect(_styleManagerStyleChangedCallbackDelegate);
95 if (swigCPtr.Handle != global::System.IntPtr.Zero)
100 NDalicPINVOKE.delete_StyleManager(swigCPtr);
102 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
109 /// Style changed event arguments.
111 /// <since_tizen> 3 </since_tizen>
112 public class StyleChangedEventArgs : EventArgs
114 private StyleManager _styleManager;
115 private StyleChangeType _styleChange;
120 /// <since_tizen> 3 </since_tizen>
121 public StyleManager StyleManager
125 return _styleManager;
129 _styleManager = value;
134 /// StyleChange - contains the style change information (default font changed or
135 /// default font size changed or theme has changed).<br />
137 /// <since_tizen> 3 </since_tizen>
138 public StyleChangeType StyleChange
146 _styleChange = value;
152 [UnmanagedFunctionPointer(CallingConvention.StdCall)]
153 private delegate void StyleChangedCallbackDelegate(IntPtr styleManager, Tizen.NUI.StyleChangeType styleChange);
154 private EventHandler<StyleChangedEventArgs> _styleManagerStyleChangedEventHandler;
155 private StyleChangedCallbackDelegate _styleManagerStyleChangedCallbackDelegate;
158 /// An event for the StyleChanged signal which can be used to subscribe or unsubscribe the
159 /// event handler provided by the user.<br />
160 /// The StyleChanged signal is emitted after the style (for example, theme or font change) has changed
161 /// and the controls have been informed.<br />
163 /// <since_tizen> 3 </since_tizen>
164 public event EventHandler<StyleChangedEventArgs> StyleChanged
168 if (_styleManagerStyleChangedEventHandler == null)
170 _styleManagerStyleChangedCallbackDelegate = (OnStyleChanged);
171 StyleChangedSignal().Connect(_styleManagerStyleChangedCallbackDelegate);
173 _styleManagerStyleChangedEventHandler += value;
177 _styleManagerStyleChangedEventHandler -= value;
178 if (_styleManagerStyleChangedEventHandler == null && StyleChangedSignal().Empty() == false)
180 StyleChangedSignal().Disconnect(_styleManagerStyleChangedCallbackDelegate);
185 // Callback for StyleManager StyleChangedsignal
186 private void OnStyleChanged(IntPtr styleManager, StyleChangeType styleChange)
188 StyleChangedEventArgs e = new StyleChangedEventArgs();
190 // Populate all members of "e" (StyleChangedEventArgs) with real data
191 e.StyleManager = Registry.GetManagedBaseHandleFromNativePtr(styleManager) as StyleManager;
192 e.StyleChange = styleChange;
194 if (_styleManagerStyleChangedEventHandler != null)
196 //here we send all data to user event handlers
197 _styleManagerStyleChangedEventHandler(this, e);
202 /// Creates a StyleManager handle.<br />
203 /// This can be initialized with StyleManager::Get().<br />
205 /// <since_tizen> 3 </since_tizen>
206 public StyleManager() : this(NDalicPINVOKE.new_StyleManager(), true)
208 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
212 /// Gets the singleton of StyleManager object.
214 /// <returns>A handle to the StyleManager control.</returns>
215 /// <since_tizen> 3 </since_tizen>
216 public static StyleManager Get()
218 StyleManager ret = new StyleManager(NDalicPINVOKE.StyleManager_Get(), true);
219 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
224 /// Applies a new theme to the application.<br />
225 /// This will be merged on the top of the default Toolkit theme.<br />
226 /// If the application theme file doesn't style all controls that the
227 /// application uses, then the default Toolkit theme will be used
228 /// instead for those controls.<br />
230 /// <param name="themeFile">A relative path is specified for style theme.</param>
231 /// <since_tizen> 3 </since_tizen>
232 public void ApplyTheme(string themeFile)
234 NDalicPINVOKE.StyleManager_ApplyTheme(swigCPtr, themeFile);
235 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
239 /// Applies the default Toolkit theme.
241 /// <since_tizen> 3 </since_tizen>
242 public void ApplyDefaultTheme()
244 NDalicPINVOKE.StyleManager_ApplyDefaultTheme(swigCPtr);
245 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
249 /// Sets a constant for use when building styles.
251 /// <param name="key">The key of the constant.</param>
252 /// <param name="value">The value of the constant.</param>
253 /// <since_tizen> 3 </since_tizen>
254 public void AddConstant(string key, PropertyValue value)
256 NDalicPINVOKE.StyleManager_SetStyleConstant(swigCPtr, key, PropertyValue.getCPtr(value));
257 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
261 /// Returns the style constant set for a specific key.
263 /// <param name="key">The key of the constant.</param>
264 /// <param name="valueOut">The value of the constant if it exists.</param>
265 /// <returns></returns>
266 /// <since_tizen> 3 </since_tizen>
267 public bool GetConstant(string key, PropertyValue valueOut)
269 bool ret = NDalicPINVOKE.StyleManager_GetStyleConstant(swigCPtr, key, PropertyValue.getCPtr(valueOut));
270 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
275 /// Applies the specified style to the control.
277 /// <param name="control">The control to which to apply the style.</param>
278 /// <param name="jsonFileName">The name of the JSON style file to apply.</param>
279 /// <param name="styleName">The name of the style within the JSON file to apply.</param>
280 /// <since_tizen> 3 </since_tizen>
281 public void ApplyStyle(View control, string jsonFileName, string styleName)
283 NDalicPINVOKE.StyleManager_ApplyStyle(swigCPtr, View.getCPtr(control), jsonFileName, styleName);
284 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
287 internal StyleChangedSignal StyleChangedSignal()
289 StyleChangedSignal ret = new StyleChangedSignal(NDalicPINVOKE.StyleManager_StyleChangedSignal(swigCPtr), false);
290 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();