_unrealized = new Interop.SmartEvent<GenGridItemEventArgs>(this, Handle, "unrealized", GenGridItemEventArgs.CreateFromSmartEvent);
_longpressed = new Interop.SmartEvent<GenGridItemEventArgs>(this, Handle, "longpressed", GenGridItemEventArgs.CreateFromSmartEvent);
- _selected.On += (s, e) => { ItemSelected?.Invoke(this, e); };
- _unselected.On += (s, e) => { ItemUnselected?.Invoke(this, e); };
- _activated.On += (s, e) => { ItemActivated?.Invoke(this, e); };
- _pressed.On += (s, e) => { ItemPressed?.Invoke(this, e); };
- _released.On += (s, e) => { ItemReleased?.Invoke(this, e); };
- _doubleClicked.On += (s, e) => { ItemDoubleClicked?.Invoke(this, e); };
- _realized.On += (s, e) => { ItemRealized?.Invoke(this, e); };
- _unrealized.On += (s, e) => { ItemUnrealized?.Invoke(this, e); };
- _longpressed.On += (s, e) => { ItemLongPressed?.Invoke(this, e); };
+ _selected.On += (s, e) => { if (e.Item != null) ItemSelected?.Invoke(this, e); };
+ _unselected.On += (s, e) => { if (e.Item != null) ItemUnselected?.Invoke(this, e); };
+ _activated.On += (s, e) => { if (e.Item != null) ItemActivated?.Invoke(this, e); };
+ _pressed.On += (s, e) => { if (e.Item != null) ItemPressed?.Invoke(this, e); };
+ _released.On += (s, e) => { if (e.Item != null) ItemReleased?.Invoke(this, e); };
+ _doubleClicked.On += (s, e) => { if (e.Item != null) ItemDoubleClicked?.Invoke(this, e); };
+ _realized.On += (s, e) => { if (e.Item != null) ItemRealized?.Invoke(this, e); };
+ _unrealized.On += (s, e) => { if (e.Item != null) ItemUnrealized?.Invoke(this, e); };
+ _longpressed.On += (s, e) => { if (e.Item != null) ItemLongPressed?.Invoke(this, e); };
}
-using System;
+using System;
namespace ElmSharp
{
public abstract void Update();
protected override void OnInvalidate()
{
+ ItemClass?.SendItemDeleted(Data);
Data = null;
ItemClass = null;
}
GC.SuppressFinalize(this);
}
+ internal void SendItemDeleted(object data)
+ {
+ // data is user inserted value with GenItem
+ DeleteHandler?.Invoke(data);
+ }
+
private string GetTextCallback(IntPtr data, IntPtr obj, IntPtr part)
{
GenItem item = ItemObject.GetItemById((int)data) as GenItem;
}
private void DelCallback(IntPtr data, IntPtr obj)
{
- GenItem item = ItemObject.GetItemById((int)data) as GenItem;
- DeleteHandler?.Invoke(item?.Data);
+ // We can't use this callback
+ // because, when item was deleted
+ // First, ItemObject deleted callback was called
+ // and We need to clean up ItemObject related objects
+ // This callback was called after ItemObject deleted callback was completed.
+ // So, We can't get resource reletated with ItemObject
}
}
_scrollAnimationStopped = new Interop.SmartEvent(this, Handle, "scroll,anim,stop");
_changed = new Interop.SmartEvent(this, Handle, "changed");
- _selected.On += (s, e) => { ItemSelected?.Invoke(this, e); };
- _unselected.On += (s, e) => { ItemUnselected?.Invoke(this, e); };
- _activated.On += (s, e) => { ItemActivated?.Invoke(this, e); };
- _pressed.On += (s, e) => { ItemPressed?.Invoke(this, e); };
- _released.On += (s, e) => { ItemReleased?.Invoke(this, e); };
- _doubleClicked.On += (s, e) => { ItemDoubleClicked?.Invoke(this, e); };
- _expanded.On += (s, e) => { ItemExpanded?.Invoke(this, e); };
- _realized.On += (s, e) => { ItemRealized?.Invoke(this, e); };
- _unrealized.On += (s, e) => { ItemUnrealized?.Invoke(this, e); };
- _longpressed.On += (s, e) => { ItemLongPressed?.Invoke(this, e); };
+ _selected.On += (s, e) => { if (e.Item != null) ItemSelected?.Invoke(this, e); };
+ _unselected.On += (s, e) => { if (e.Item != null) ItemUnselected?.Invoke(this, e); };
+ _activated.On += (s, e) => { if (e.Item != null) ItemActivated?.Invoke(this, e); };
+ _pressed.On += (s, e) => { if (e.Item != null) ItemPressed?.Invoke(this, e); };
+ _released.On += (s, e) => { if (e.Item != null) ItemReleased?.Invoke(this, e); };
+ _doubleClicked.On += (s, e) => { if (e.Item != null) ItemDoubleClicked?.Invoke(this, e); };
+ _expanded.On += (s, e) => { if (e.Item != null) ItemExpanded?.Invoke(this, e); };
+ _realized.On += (s, e) => { if (e.Item != null) ItemRealized?.Invoke(this, e); };
+ _unrealized.On += (s, e) => { if (e.Item != null) ItemUnrealized?.Invoke(this, e); };
+ _longpressed.On += (s, e) => { if (e.Item != null) ItemLongPressed?.Invoke(this, e); };
}
void AddInternal(GenListItem item)
{
Deleted?.Invoke(this, EventArgs.Empty);
OnInvalidate();
+ if (s_IdToItemTable.ContainsKey(Id))
+ {
+ s_IdToItemTable.Remove(Id);
+ }
+ if (s_HandleToItemTable.ContainsKey(_handle))
+ {
+ s_HandleToItemTable.Remove(_handle);
+ }
_handle = IntPtr.Zero;
}
<Compile Include="TC\GenListTest2.cs" />\r
<Compile Include="TC\GenListTest3.cs" />\r
<Compile Include="TC\GenListTest4.cs" />\r
+ <Compile Include="TC\GenListTest6.cs" />\r
<Compile Include="TC\PerformanceTest.cs" />\r
<Compile Include="TC\GenListTest5.cs" />\r
<Compile Include="TC\IconTest1.cs" />\r
<_FullFrameworkReferenceAssemblyPaths>$(MSBuildThisFileDirectory)</_FullFrameworkReferenceAssemblyPaths>\r
<AutoUnifyAssemblyReferences>true</AutoUnifyAssemblyReferences>\r
</PropertyGroup>\r
-</Project>
+ <ProjectExtensions>\r
+ <VisualStudio>\r
+ <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Debug|Any CPU">\r
+ <ProjectCorporateFlavorCfg />\r
+ </FlavorProperties>\r
+ <FlavorProperties GUID="{2F98DAC9-6F16-457B-AED7-D43CAC379341}" Configuration="Release|Any CPU">\r
+ <ProjectCorporateFlavorCfg />\r
+ </FlavorProperties>\r
+ </VisualStudio>\r
+ </ProjectExtensions>\r
+</Project>
\ No newline at end of file
--- /dev/null
+using System;
+using ElmSharp;
+
+namespace ElmSharp.Test
+{
+ class GenListTest6 : TestCaseBase
+ {
+ public override string TestName => "GenListTest6";
+ public override string TestDescription => "To test deletion of GenListItem";
+ GenListItem selected = null;
+
+
+ public override void Run(Window window)
+ {
+ Conformant conformant = new Conformant(window);
+ conformant.Show();
+ Box box = new Box(window)
+ {
+ AlignmentX = -1,
+ AlignmentY = -1,
+ WeightX = 1,
+ WeightY = 1,
+ };
+ box.Show();
+ conformant.SetContent(box);
+
+
+ GenList list = new GenList(window)
+ {
+ Homogeneous = true,
+ AlignmentX = -1,
+ AlignmentY = -1,
+ WeightX = 1,
+ WeightY = 1
+ };
+
+ GenItemClass defaultClass = new GenItemClass("default")
+ {
+ GetTextHandler = (obj, part) =>
+ {
+ return string.Format("{0} - {1}", (string)obj, part);
+ },
+ DeleteHandler = new GenItemClass.DeleteDelegate((obj) =>
+ {
+ Console.WriteLine("DeleteHandler was called with... {0}", (string)obj);
+ }),
+ };
+ GenListItem[] items = new GenListItem[100];
+ for (int i = 0; i < 100; i++)
+ {
+ items[i] = list.Append(defaultClass, string.Format("{0} Item", i));
+ }
+ list.Show();
+ list.ItemSelected += List_ItemSelected;
+ list.ItemActivated += List_ItemActivated;
+ list.ItemUnselected += List_ItemUnselected;
+ list.ItemPressed += List_ItemPressed;
+ list.ItemRealized += List_ItemRealized;
+ list.ItemReleased += List_ItemReleased;
+ list.ItemUnrealized += List_ItemUnrealized;
+ list.ItemLongPressed += List_ItemLongPressed;
+ list.ItemDoubleClicked += List_ItemDoubleClicked;
+ box.PackEnd(list);
+ Button first = new Button(window)
+ {
+ Text = "Delete",
+ AlignmentX = -1,
+ WeightX = 1,
+ };
+ first.Clicked += (s, e) =>
+ {
+ selected?.Delete();
+ };
+ first.Show();
+ box.PackEnd(first);
+
+ }
+
+ private void List_ItemSelected(object sender, GenListItemEventArgs e)
+ {
+ selected = e.Item;
+ Console.WriteLine("{0} Item was selected", (string)(e.Item.Data));
+ }
+ private void List_ItemDoubleClicked(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was double clicked", (string)(e.Item.Data));
+ }
+
+ private void List_ItemLongPressed(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was Long pressed", (string)(e.Item.Data));
+ }
+
+ private void List_ItemUnrealized(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("!!!! Item was Unrealized!!!");
+ Console.WriteLine("{0} Item was unrealzed", (string)(e.Item.Data));
+ }
+
+ private void List_ItemReleased(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was released", (string)(e.Item.Data));
+ }
+
+ private void List_ItemRealized(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was Realized", (string)(e.Item.Data));
+ }
+
+ private void List_ItemPressed(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was Pressed", (string)(e.Item.Data));
+ }
+
+ private void List_ItemUnselected(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was unselected", (string)(e.Item.Data));
+ }
+
+ private void List_ItemActivated(object sender, GenListItemEventArgs e)
+ {
+ Console.WriteLine("{0} Item was Activated", (string)(e.Item.Data));
+ }
+ }
+}