aboutsummaryrefslogtreecommitdiffstatsci
path: root/Samples/common/src/SampleBase.cs
diff options
context:
space:
mode:
authorJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-06-05 16:52:53 +0200
committerJean-Philippe Bruyère <jp_bruyere@hotmail.com>2021-06-05 16:52:53 +0200
commitf738cf0f78c57750cce8fd5744825b0591f24bb8 (patch)
tree47c3313d26151e53cbef822ac602132fb77b88dd /Samples/common/src/SampleBase.cs
parenta515e31998f64f537e29cd30fdb7e9bfc7d4a02f (diff)
ItemsScroller for list, layouting changes, editor suggestions
Diffstat (limited to 'Samples/common/src/SampleBase.cs')
-rw-r--r--Samples/common/src/SampleBase.cs383
1 files changed, 383 insertions, 0 deletions
diff --git a/Samples/common/src/SampleBase.cs b/Samples/common/src/SampleBase.cs
new file mode 100644
index 00000000..1e849d6f
--- /dev/null
+++ b/Samples/common/src/SampleBase.cs
@@ -0,0 +1,383 @@
+using Crow;
+using Glfw;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Net.NetworkInformation;
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace Crow
+{
+ public class SampleBase : Interface
+ {
+#if NETCOREAPP
+ static IntPtr resolveUnmanaged(Assembly assembly, String libraryName)
+ {
+
+ switch (libraryName)
+ {
+ case "glfw3":
+ return NativeLibrary.Load("glfw", assembly, null);
+ case "rsvg-2.40":
+ return NativeLibrary.Load("rsvg-2", assembly, null);
+ }
+ Console.WriteLine($"[UNRESOLVE] {assembly} {libraryName}");
+ return IntPtr.Zero;
+ }
+
+ static SampleBase()
+ {
+ System.Runtime.Loader.AssemblyLoadContext.GetLoadContext(Assembly.GetExecutingAssembly()).ResolvingUnmanagedDll += resolveUnmanaged;
+ }
+#endif
+ public SampleBase(IntPtr hWin) : base(800, 600, hWin) { }
+ public SampleBase() : base(800, 600, true, true) { }
+ public SampleBase(int width, int height, bool startUIThread, bool createSurface) :
+ base(width, height, startUIThread, createSurface)
+ {
+
+ }
+
+ public Version CrowVersion => Assembly.GetAssembly(typeof(Widget)).GetName().Version;
+
+ #region Test values for Binding
+ public CommandGroup Commands, AllCommands;
+ public CommandGroup EditCommands = new CommandGroup("Edit Commands",
+ new Command("Edit command 1", (sender) => MessageBox.ShowModal((sender as Widget).IFace, MessageBox.Type.Information, "Edit comand 1 clicked")),
+ new Command("Edit command 2 a bit longer", (sender) => MessageBox.ShowModal((sender as Widget).IFace, MessageBox.Type.Information, "Edit comand 2 clicked"), null, false),
+ new Command("Edit command three", (sender) => MessageBox.ShowModal((sender as Widget).IFace, MessageBox.Type.Information, "Edit comand 3 clicked"))
+ );
+ public CommandGroup FileCommands = new CommandGroup("File Commands",
+ new Command("File command 1", (sender) => MessageBox.ShowModal((sender as Widget).IFace, MessageBox.Type.Information, "File comand 1 clicked")),
+ new Command("File command 2 a bit longer", (sender) => MessageBox.ShowModal((sender as Widget).IFace, MessageBox.Type.Information, "File comand 2 clicked")),
+ new Command("File command three", (sender) => MessageBox.ShowModal((sender as Widget).IFace, MessageBox.Type.Information, "File comand 3 clicked"))
+ );
+
+ void initCommands()
+ {
+ Commands = new CommandGroup("commands msg boxes",
+ new Command("Action 1", () => MessageBox.ShowModal(this, MessageBox.Type.Information, "context menu 1 clicked")),
+ new Command("Action two", () => MessageBox.ShowModal(this, MessageBox.Type.Information, "context menu 2 clicked"), null, false),
+ new Command("Action three", () => MessageBox.ShowModal(this, MessageBox.Type.Information, "context menu 3 clicked"))
+ );
+ AllCommands = new CommandGroup ("All Commands",
+ FileCommands,
+ EditCommands,
+ new CommandGroup ("Combined commands", FileCommands, EditCommands),
+ new Command("Action A", () => MessageBox.ShowModal(this, MessageBox.Type.Information, "context menu A clicked"))
+ );
+ }
+ public int intValue = 500;
+ VerticalAlignment currentVAlign;
+
+ DirectoryInfo curDir = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location));
+ public FileSystemInfo[] CurDirectory => curDir.GetFileSystemInfos();
+ public string MultilineText =
+ $"Lorem ipsum dolor sit amet,\nconsectetur adipiscing elit. Sed non risus.\n\nSuspendisse lectus tortor,\nLorem ipsum dolor sit amet,\nconsectetur adipiscing elit. Sed non risus.\n\nSuspendisse lectus tortor,";
+ //public string MultilineText = $"a\n";
+ TextAlignment textAlignment = TextAlignment.Left;
+ public TextAlignment TextAlignment
+ {
+ get => textAlignment;
+ set
+ {
+ if (textAlignment == value)
+ return;
+ textAlignment = value;
+ NotifyValueChanged(textAlignment);
+ }
+ }
+
+ public int IntValue
+ {
+ get => intValue;
+ set
+ {
+ if (IntValue == value)
+ return;
+ intValue = value;
+ NotifyValueChanged("IntValue", intValue);
+ }
+ }
+ public VerticalAlignment CurrentVAlign
+ {
+ get => currentVAlign;
+ set
+ {
+ if (currentVAlign == value)
+ return;
+ currentVAlign = value;
+ NotifyValueChanged("CurrentVAlign", currentVAlign);
+ }
+ }
+ void onSpinnerValueChange(object sender, ValueChangeEventArgs e)
+ {
+ if (e.MemberName != "Value")
+ return;
+ intValue = Convert.ToInt32(e.NewValue);
+ }
+ void change_alignment(object sender, EventArgs e)
+ {
+ RadioButton rb = sender as RadioButton;
+ if (rb == null)
+ return;
+ NotifyValueChanged("alignment", Enum.Parse(typeof(Alignment), rb.Caption));
+ }
+ public IEnumerable<String> List2 = new List<string>(new string[]
+ {
+ "string1",
+ "string2",
+ "string3",
+ "string4",
+ "string5",
+ "string6",
+ "string7",
+ "string8",
+ "string8",
+ "string8",
+ "string8",
+ "string8",
+ "string8",
+ "string9"
+ }
+ );
+ public IEnumerable<String> TestList2
+ {
+ set
+ {
+ List2 = value;
+ NotifyValueChanged("TestList2", testList);
+ }
+ get { return List2; }
+ }
+ public class TestClass
+ {
+ public string Prop1 { get; set; }
+ public string Prop2 { get; set; }
+
+ public override string ToString()
+ => $"{Prop1}, {Prop2}";
+
+ public void OnValidateCommand(Object sender, ValidateEventArgs e)
+ {
+ Console.WriteLine($"Validation: {e.ValidatedText}");
+ }
+ }
+ public class TestClassVC : IValueChange
+ {
+ public event EventHandler<ValueChangeEventArgs> ValueChanged;
+ public void NotifyValueChanged(object _value, [CallerMemberName] string caller = null)
+ => ValueChanged.Raise(this, new ValueChangeEventArgs(caller, _value));
+ string prop1, prop2;
+ public string Prop1
+ {
+ get => prop1;
+ set
+ {
+ if (prop1 == value)
+ return;
+ prop1 = value;
+ NotifyValueChanged(prop1);
+ }
+ }
+ public string Prop2
+ {
+ get => prop2;
+ set
+ {
+ if (prop2 == value)
+ return;
+ prop2 = value;
+ NotifyValueChanged(prop2);
+ }
+
+
+
+ }
+
+ public override string ToString()
+ => $"{Prop1}, {Prop2}";
+
+ }
+ TestClass tcInstance = new TestClass() { Prop1 = "instance 0 prop1 value", Prop2 = "instance 0 prop2 value" };
+ TestClassVC tcVCInstance;// = new TestClassVC () { Prop1 = "instance 0 prop1 value", Prop2 = "instance 0 prop2 value" };
+ TestClass tcInstance1 = new TestClass() { Prop1 = "instance 1 prop1 value", Prop2 = "instance 1 prop2 value" };
+ TestClassVC tcVCInstance1 = new TestClassVC() { Prop1 = "instance 1 prop1 value", Prop2 = "instance 1 prop2 value" };
+ TestClass tcInstance2 = new TestClass() { Prop1 = "instance 2 prop1 value", Prop2 = "instance 2 prop2 value" };
+ TestClassVC tcVCInstance2 = new TestClassVC() { Prop1 = "instance 2 prop1 value", Prop2 = "instance 2 prop2 value" };
+
+ public TestClass TcInstance
+ {
+ get => tcInstance;
+ set
+ {
+ if (tcInstance == value)
+ return;
+ tcInstance = value;
+ NotifyValueChanged(tcInstance);
+ }
+ }
+ public TestClassVC TcVCInstance
+ {
+ get => tcVCInstance;
+ set
+ {
+ if (tcVCInstance == value)
+ return;
+ tcVCInstance = value;
+ NotifyValueChanged(tcVCInstance);
+ }
+ }
+
+ void tcInstance_ChangeProperties_MouseClick(object sender, MouseButtonEventArgs e)
+ {
+ }
+ public void tcInstance_ChangeInstance_MouseClick(object sender, MouseButtonEventArgs e)
+ {
+ if (TcInstance == tcInstance1)
+ TcInstance = tcInstance2;
+ else
+ TcInstance = tcInstance1;
+ }
+ void tcVCInstance_ChangeInstance_MouseClick(object sender, MouseButtonEventArgs e)
+ {
+ TcVCInstance = new TestClassVC() { Prop1 = "prop1 value changed", Prop2 = "prop2 value changed" };
+ }
+
+ public IEnumerable<TestClass> List3 = new List<TestClass>(new TestClass[]
+ {
+ new TestClass { Prop1 = "string1", Prop2="prop2-1" },
+ new TestClass { Prop1 = "string2", Prop2="prop2-2" },
+ new TestClass { Prop1 = "string3", Prop2="prop2-3" },
+ }
+ );
+ public IEnumerable<string> TestList3Props1 => List3.Select(sc => sc.Prop1).ToList();
+ public IEnumerable<TestClass> TestList3
+ {
+ set
+ {
+ List3 = value;
+ NotifyValueChanged("TestList3", testList);
+ }
+ get { return List3; }
+ }
+ string testString;
+ public string TestString
+ {
+ get => testString;
+ set
+ {
+ if (testString == value)
+ return;
+ testString = value;
+
+ NotifyValueChanged(testString);
+ }
+ }
+ string prop1;
+ public string TestList3SelProp1
+ {
+ get => prop1;
+ set
+ {
+ if (prop1 == value)
+ return;
+ prop1 = value;
+
+ NotifyValueChanged(prop1);
+ }
+ }
+
+ string selString;
+ public string TestList2SelectedString
+ {
+ get => selString;
+ set
+ {
+ if (selString == value)
+ return;
+ selString = value;
+ NotifyValueChanged(selString);
+ }
+ }
+
+
+ IList<Colors> testList = (IList<Colors>)FastEnumUtility.FastEnum.GetValues<Colors>().ToList();//.ColorDic.Values//.OrderBy(c=>c.Hue)
+ //.ThenBy(c=>c.Value).ThenBy(c=>c.Saturation)
+ //.ToList ();
+ public IList<Colors> TestList
+ {
+ set
+ {
+ testList = value;
+ NotifyValueChanged("TestList", testList);
+ }
+ get { return testList; }
+ }
+ void OnClear(object sender, MouseButtonEventArgs e) => TestList = null;
+ void OnLoadList(object sender, MouseButtonEventArgs e) => TestList = (IList<Colors>)FastEnumUtility.FastEnum.GetValues<Colors>().ToList();
+
+
+ string curSources = "";
+ public string CurSources
+ {
+ get { return curSources; }
+ set
+ {
+ if (value == curSources)
+ return;
+ curSources = value;
+ NotifyValueChanged(curSources);
+ }
+ }
+ bool boolVal = true;
+ public bool BoolVal
+ {
+ get { return boolVal; }
+ set
+ {
+ if (boolVal == value)
+ return;
+ boolVal = value;
+ NotifyValueChanged(boolVal);
+ }
+ }
+
+
+
+ #endregion
+
+ protected override void OnInitialized()
+ {
+ initCommands();
+ base.OnInitialized();
+ }
+
+ public override bool OnKeyDown(Key key)
+ {
+
+ switch (key)
+ {
+ case Key.F5:
+ Load("Interfaces/Divers/testFileDialog.crow").DataSource = this;
+ return true;
+ case Key.F6:
+ Load("Interfaces/Divers/0.crow").DataSource = this;
+ return true;
+ case Key.F7:
+ Load("Interfaces/Divers/perfMeasures.crow").DataSource = this;
+ return true;
+ case Key.F2:
+ if (IsKeyDown(Key.LeftShift))
+ DbgLogger.Reset();
+ DbgLogger.Save(this);
+ return true;
+ }
+ return base.OnKeyDown(key);
+ }
+ }
+} \ No newline at end of file