public virtual void Add(T handler)
{
+ if (handlers == null)
+ {
+ handlers = new List<WeakHandler<T>>();
+ }
+
handlers.Add(new WeakHandler<T>(handler));
+
+ OnCountIncreased();
}
public virtual void Remove(T handler)
{
+ if (handlers == null)
+ {
+ return;
+ }
+
+ int count = handlers.Count;
+
handlers.RemoveAll(item => !item.IsAlive || item.Equals(handler));
+
+ if (count > handlers.Count)
+ {
+ OnCountDicreased();
+ }
}
public void Invoke(object sender, EventArgs args)
{
+ if (handlers == null)
+ {
+ return;
+ }
+
var disposed = new HashSet<WeakHandler<T>>();
+ int count = handlers.Count;
+
foreach (var item in handlers)
{
if (item.IsAlive)
}
handlers.RemoveAll(disposed.Contains);
+
+ if (count > handlers.Count)
+ {
+ OnCountDicreased();
+ }
+ }
+
+ protected virtual void OnCountIncreased()
+ {
+ }
+
+
+ protected virtual void OnCountDicreased()
+ {
}
internal class WeakHandler<U>
}
}
}
-
- /// <summary>
- /// Internal class that helps to make a proxy weak event connecting to a normal source event.
- /// Note that the source event will have a strong reference of the WeakEventProxy instance instead of handler's.
- /// Please replace it to WeakEventManager after version up.
- /// </summary>
- internal abstract class WeakEventProxy<EventArgsT> : WeakEvent<EventHandler<EventArgsT>>
- {
- protected abstract void ConnectToEvent(EventHandler<EventArgsT> handler);
-
- protected abstract void DisconnectToEvent(EventHandler<EventArgsT> handler);
-
- public override void Add(EventHandler<EventArgsT> handler)
- {
- if (Count == 0)
- {
- ConnectToEvent(OnEventInvoked);
- }
-
- base.Add(handler);
- }
-
- public override void Remove(EventHandler<EventArgsT> handler)
- {
- base.Remove(handler);
-
- if (Count == 0)
- {
- DisconnectToEvent(OnEventInvoked);
- }
- }
-
- private void OnEventInvoked(object sender, EventArgsT args)
- {
- Invoke(sender, args as EventArgs);
- }
- }
-
- /// <summary>
- /// The non-generic version of <see cref="WeakEventProxy"/>.
- /// </summary>
- internal abstract class WeakEventProxy : WeakEvent<EventHandler>
- {
- protected abstract void ConnectToEvent(EventHandler handler);
-
- protected abstract void DisconnectToEvent(EventHandler handler);
-
- public override void Add(EventHandler handler)
- {
- if (Count == 0)
- {
- ConnectToEvent(OnEventInvoked);
- }
-
- base.Add(handler);
- }
-
- public override void Remove(EventHandler handler)
- {
- base.Remove(handler);
-
- if (Count == 0)
- {
- DisconnectToEvent(OnEventInvoked);
- }
- }
-
- private void OnEventInvoked(object sender, EventArgs args)
- {
- Invoke(sender, args);
- }
- }
}
--- /dev/null
+/*
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+extern alias TizenSystemSettings;
+using TizenSystemSettings.Tizen.System;
+
+using System;
+
+namespace Tizen.NUI
+{
+ /// <summary>
+ /// Internal class that helps to make a proxy weak event connecting to a normal source event.
+ /// Note that the source event will have a strong reference of the WeakEventProxy instance instead of handler's.
+ /// Please replace it to WeakEventManager after version up.
+ /// </summary>
+ internal abstract class WeakEventProxy<EventArgsT> : WeakEvent<EventHandler<EventArgsT>>
+ {
+ protected abstract void ConnectToEvent(EventHandler<EventArgsT> handler);
+
+ protected abstract void DisconnectToEvent(EventHandler<EventArgsT> handler);
+
+ protected override void OnCountIncreased()
+ {
+ if (Count == 1)
+ {
+ ConnectToEvent(OnEventInvoked);
+ }
+ }
+
+ protected override void OnCountDicreased()
+ {
+ if (Count == 0)
+ {
+ DisconnectToEvent(OnEventInvoked);
+ }
+ }
+
+ private void OnEventInvoked(object sender, EventArgsT args)
+ {
+ Invoke(sender, args as EventArgs);
+ }
+ }
+
+ /// <summary>
+ /// The non-generic version of <see cref="WeakEventProxy"/>.
+ /// </summary>
+ internal abstract class WeakEventProxy : WeakEvent<EventHandler>
+ {
+ protected abstract void ConnectToEvent(EventHandler handler);
+
+ protected abstract void DisconnectToEvent(EventHandler handler);
+
+ protected override void OnCountIncreased()
+ {
+ if (Count == 1)
+ {
+ ConnectToEvent(OnEventInvoked);
+ }
+ }
+
+ protected override void OnCountDicreased()
+ {
+ if (Count == 0)
+ {
+ DisconnectToEvent(OnEventInvoked);
+ }
+ }
+
+ private void OnEventInvoked(object sender, EventArgs args)
+ {
+ Invoke(sender, args);
+ }
+ }
+
+ internal class SystemFontTypeChanged : WeakEventProxy<FontTypeChangedEventArgs>
+ {
+ protected override void ConnectToEvent(EventHandler<FontTypeChangedEventArgs> handler)
+ {
+ SystemSettings.FontTypeChanged += handler;
+ }
+
+ protected override void DisconnectToEvent(EventHandler<FontTypeChangedEventArgs> handler)
+ {
+ SystemSettings.FontTypeChanged -= handler;
+ }
+ }
+
+ internal class SystemFontSizeChanged : WeakEventProxy<FontSizeChangedEventArgs>
+ {
+ protected override void ConnectToEvent(EventHandler<FontSizeChangedEventArgs> handler)
+ {
+ SystemSettings.FontSizeChanged += handler;
+ }
+
+ protected override void DisconnectToEvent(EventHandler<FontSizeChangedEventArgs> handler)
+ {
+ SystemSettings.FontSizeChanged -= handler;
+ }
+ }
+
+ internal class SystemLocaleLanguageChanged : WeakEventProxy<LocaleLanguageChangedEventArgs>
+ {
+ protected override void ConnectToEvent(EventHandler<LocaleLanguageChangedEventArgs> handler)
+ {
+ SystemSettings.LocaleLanguageChanged += handler;
+ }
+
+ protected override void DisconnectToEvent(EventHandler<LocaleLanguageChangedEventArgs> handler)
+ {
+ SystemSettings.LocaleLanguageChanged -= handler;
+ }
+ }
+}
{
static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextEditor";
static private string defaultFontFamily = "TizenSans";
+ private static SystemFontTypeChanged systemFontTypeChanged = new SystemFontTypeChanged();
+ private static SystemFontSizeChanged systemFontSizeChanged = new SystemFontSizeChanged();
+ private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged();
private string textEditorTextSid = null;
private string textEditorPlaceHolderTextSid = null;
private InputMethodContext inputMethodContext = null;
if (hasSystemLanguageChanged)
{
- SystemSettings.LocaleLanguageChanged -= SystemSettings_LocaleLanguageChanged;
+ systemLocaleLanguageChanged.Remove(SystemSettings_LocaleLanguageChanged);
}
RemoveSystemSettingsFontTypeChanged();
{
if (hasSystemLanguageChanged == false)
{
- SystemSettings.LocaleLanguageChanged += SystemSettings_LocaleLanguageChanged;
+ systemLocaleLanguageChanged.Add(SystemSettings_LocaleLanguageChanged);
hasSystemLanguageChanged = true;
}
return translatableText;
{
try
{
- SystemSettings.FontSizeChanged += SystemSettingsFontSizeChanged;
+ systemFontSizeChanged.Add(SystemSettingsFontSizeChanged);
hasSystemFontSizeChanged = true;
}
catch (Exception e)
{
try
{
- SystemSettings.FontSizeChanged -= SystemSettingsFontSizeChanged;
+ systemFontSizeChanged.Remove(SystemSettingsFontSizeChanged);
hasSystemFontSizeChanged = false;
}
catch (Exception e)
{
try
{
- SystemSettings.FontTypeChanged += SystemSettingsFontTypeChanged;
+ systemFontTypeChanged.Add(SystemSettingsFontTypeChanged);
hasSystemFontTypeChanged = true;
}
catch (Exception e)
{
try
{
- SystemSettings.FontTypeChanged -= SystemSettingsFontTypeChanged;
+ systemFontTypeChanged.Remove(SystemSettingsFontTypeChanged);
hasSystemFontTypeChanged = false;
}
catch (Exception e)
{
static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextField";
static private string defaultFontFamily = "TizenSans";
+ private static SystemFontTypeChanged systemFontTypeChanged = new SystemFontTypeChanged();
+ private static SystemFontSizeChanged systemFontSizeChanged = new SystemFontSizeChanged();
+ private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged();
private string textFieldTextSid = null;
private string textFieldPlaceHolderTextSid = null;
private string textFieldPlaceHolderTextFocusedSid = null;
if (hasSystemLanguageChanged)
{
- SystemSettings.LocaleLanguageChanged -= SystemSettingsLocaleLanguageChanged;
+ systemLocaleLanguageChanged.Remove(SystemSettingsLocaleLanguageChanged);
}
RemoveSystemSettingsFontTypeChanged();
{
if (hasSystemLanguageChanged == false)
{
- SystemSettings.LocaleLanguageChanged += SystemSettingsLocaleLanguageChanged;
+ systemLocaleLanguageChanged.Add(SystemSettingsLocaleLanguageChanged);
hasSystemLanguageChanged = true;
}
return translatableText;
{
try
{
- SystemSettings.FontSizeChanged += SystemSettingsFontSizeChanged;
+ systemFontSizeChanged.Add(SystemSettingsFontSizeChanged);
hasSystemFontSizeChanged = true;
}
catch (Exception e)
{
try
{
- SystemSettings.FontSizeChanged -= SystemSettingsFontSizeChanged;
+ systemFontSizeChanged.Remove(SystemSettingsFontSizeChanged);
hasSystemFontSizeChanged = false;
}
catch (Exception e)
{
try
{
- SystemSettings.FontTypeChanged += SystemSettingsFontTypeChanged;
+ systemFontTypeChanged.Add(SystemSettingsFontTypeChanged);
hasSystemFontTypeChanged = true;
}
catch (Exception e)
{
try
{
- SystemSettings.FontTypeChanged -= SystemSettingsFontTypeChanged;
+ systemFontTypeChanged.Remove(SystemSettingsFontTypeChanged);
hasSystemFontTypeChanged = false;
}
catch (Exception e)
static TextLabel() { }
+ private static SystemFontTypeChanged systemFontTypeChanged = new SystemFontTypeChanged();
+ private static SystemFontSizeChanged systemFontSizeChanged = new SystemFontSizeChanged();
+ private static SystemLocaleLanguageChanged systemLocaleLanguageChanged = new SystemLocaleLanguageChanged();
static private string defaultStyleName = "Tizen.NUI.BaseComponents.TextLabel";
static private string defaultFontFamily = "BreezeSans";
private string textLabelSid = null;
Text = translatableText;
if (hasSystemLanguageChanged == false)
{
- SystemSettings.LocaleLanguageChanged += SystemSettingsLocaleLanguageChanged;
+ systemLocaleLanguageChanged.Add(SystemSettingsLocaleLanguageChanged);
hasSystemLanguageChanged = true;
}
}
if (hasSystemLanguageChanged)
{
- SystemSettings.LocaleLanguageChanged -= SystemSettingsLocaleLanguageChanged;
+ systemLocaleLanguageChanged.Remove(SystemSettingsLocaleLanguageChanged);
}
RemoveSystemSettingsFontTypeChanged();
{
try
{
- SystemSettings.FontSizeChanged += SystemSettingsFontSizeChanged;
+ systemFontSizeChanged.Add(SystemSettingsFontSizeChanged);
hasSystemFontSizeChanged = true;
}
catch (Exception e)
{
try
{
- SystemSettings.FontSizeChanged -= SystemSettingsFontSizeChanged;
+ systemFontSizeChanged.Remove(SystemSettingsFontSizeChanged);
hasSystemFontSizeChanged = false;
}
catch (Exception e)
{
try
{
- SystemSettings.FontTypeChanged += SystemSettingsFontTypeChanged;
+ systemFontTypeChanged.Add(SystemSettingsFontTypeChanged);
hasSystemFontTypeChanged = true;
}
catch (Exception e)
{
try
{
- SystemSettings.FontTypeChanged -= SystemSettingsFontTypeChanged;
+ systemFontTypeChanged.Remove(SystemSettingsFontTypeChanged);
hasSystemFontTypeChanged = false;
}
catch (Exception e)