diff --git a/.vs/Effector.Plugin.Lib/FileContentIndex/47e36499-a976-4ac4-87f7-0d96a9c3b5e9.vsidx b/.vs/Effector.Plugin.Lib/FileContentIndex/47e36499-a976-4ac4-87f7-0d96a9c3b5e9.vsidx
new file mode 100644
index 0000000..a5e4af2
Binary files /dev/null and b/.vs/Effector.Plugin.Lib/FileContentIndex/47e36499-a976-4ac4-87f7-0d96a9c3b5e9.vsidx differ
diff --git a/.vs/Effector.Plugin.Lib/FileContentIndex/828d5703-c62f-47b2-907d-b3f891f62570.vsidx b/.vs/Effector.Plugin.Lib/FileContentIndex/828d5703-c62f-47b2-907d-b3f891f62570.vsidx
new file mode 100644
index 0000000..4a73cef
Binary files /dev/null and b/.vs/Effector.Plugin.Lib/FileContentIndex/828d5703-c62f-47b2-907d-b3f891f62570.vsidx differ
diff --git a/.vs/Effector.Plugin.Lib/FileContentIndex/b2ea713a-8221-408a-8d21-5ed95b655ed4.vsidx b/.vs/Effector.Plugin.Lib/FileContentIndex/b2ea713a-8221-408a-8d21-5ed95b655ed4.vsidx
new file mode 100644
index 0000000..379d146
Binary files /dev/null and b/.vs/Effector.Plugin.Lib/FileContentIndex/b2ea713a-8221-408a-8d21-5ed95b655ed4.vsidx differ
diff --git a/.vs/Effector.Plugin.Lib/FileContentIndex/b6ade251-2b30-4eef-84d7-9d65f2fe34ab.vsidx b/.vs/Effector.Plugin.Lib/FileContentIndex/b6ade251-2b30-4eef-84d7-9d65f2fe34ab.vsidx
new file mode 100644
index 0000000..6f794ac
Binary files /dev/null and b/.vs/Effector.Plugin.Lib/FileContentIndex/b6ade251-2b30-4eef-84d7-9d65f2fe34ab.vsidx differ
diff --git a/.vs/Effector.Plugin.Lib/FileContentIndex/c9d252b2-8443-447a-8da8-a468e7179fe2.vsidx b/.vs/Effector.Plugin.Lib/FileContentIndex/c9d252b2-8443-447a-8da8-a468e7179fe2.vsidx
new file mode 100644
index 0000000..0506973
Binary files /dev/null and b/.vs/Effector.Plugin.Lib/FileContentIndex/c9d252b2-8443-447a-8da8-a468e7179fe2.vsidx differ
diff --git a/.vs/Effector.Plugin.Lib/v17/.suo b/.vs/Effector.Plugin.Lib/v17/.suo
new file mode 100644
index 0000000..53f7b4b
Binary files /dev/null and b/.vs/Effector.Plugin.Lib/v17/.suo differ
diff --git a/.vs/Effector.Plugin.Lib/v17/DocumentLayout.backup.json b/.vs/Effector.Plugin.Lib/v17/DocumentLayout.backup.json
new file mode 100644
index 0000000..b3a37d2
--- /dev/null
+++ b/.vs/Effector.Plugin.Lib/v17/DocumentLayout.backup.json
@@ -0,0 +1,171 @@
+{
+ "Version": 1,
+ "WorkspaceRootPath": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\",
+ "Documents": [
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\processmanager\\processmanagervm.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\processmanager\\processmanagervm.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\multiplecopywnd\\multiplecopywndv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\multiplecopywnd\\multiplecopywndv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\processmanager\\processmanagerv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\processmanager\\processmanagerv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\egtwindow\\egtwindow.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\egtwindow\\egtwindow.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\utility\\inifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\utility\\inifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\themes\\generic.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\themes\\generic.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\constants\\pluginconstini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\constants\\pluginconstini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\utility\\plugininifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\utility\\plugininifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\constants\\constini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\constants\\constini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ }
+ ],
+ "DocumentGroupContainers": [
+ {
+ "Orientation": 0,
+ "VerticalTabListWidth": 256,
+ "DocumentGroups": [
+ {
+ "DockedWidth": 200,
+ "SelectedChildIndex": 2,
+ "Children": [
+ {
+ "$type": "Bookmark",
+ "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 1,
+ "Title": "MultipleCopyWndV.xaml",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "RelativeToolTip": "Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+ "WhenOpened": "2025-01-16T14:20:02.087Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 0,
+ "Title": "ProcessManagerVM.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-16T14:19:17.625Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "ProcessManagerV.xaml",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "RelativeToolTip": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+ "WhenOpened": "2025-01-16T14:19:13.496Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "EgtWindow.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "ViewState": "AgIAADkAAAAAAAAAAAAAAH8AAAAtAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T15:16:31.177Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 5,
+ "Title": "Generic.xaml",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+ "WhenOpened": "2025-01-09T14:50:37.334Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
+ "Title": "PluginConstIni.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAABAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T14:19:08.316Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 8,
+ "Title": "ConstIni.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T14:17:20.215Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 7,
+ "Title": "PluginIniFile.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAUAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T12:12:44.529Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 4,
+ "Title": "IniFile.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T12:09:43.898Z",
+ "EditorCaption": ""
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vs/Effector.Plugin.Lib/v17/DocumentLayout.json b/.vs/Effector.Plugin.Lib/v17/DocumentLayout.json
new file mode 100644
index 0000000..b3a37d2
--- /dev/null
+++ b/.vs/Effector.Plugin.Lib/v17/DocumentLayout.json
@@ -0,0 +1,171 @@
+{
+ "Version": 1,
+ "WorkspaceRootPath": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\",
+ "Documents": [
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\processmanager\\processmanagervm.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\processmanager\\processmanagervm.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\multiplecopywnd\\multiplecopywndv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\multiplecopywnd\\multiplecopywndv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\processmanager\\processmanagerv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\processmanager\\processmanagerv.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\egtwindow\\egtwindow.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\egtwindow\\egtwindow.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\utility\\inifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\utility\\inifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|c:\\egtdev\\effector\\effector.plugin.lib\\effector.plugin.lib\\themes\\generic.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\themes\\generic.xaml||{F11ACC28-31D1-4C80-A34B-F4E09D3D753C}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\constants\\pluginconstini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\constants\\pluginconstini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\utility\\plugininifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\utility\\plugininifile.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\effector.plugin.lib\\constants\\constini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}",
+ "RelativeMoniker": "D:0:0:{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}|Effector.Plugin.Lib\\Effector.Plugin.Lib.vbproj|solutionrelative:effector.plugin.lib\\constants\\constini.vb||{2C015C70-C72C-11D0-88C3-00A0C9110049}"
+ }
+ ],
+ "DocumentGroupContainers": [
+ {
+ "Orientation": 0,
+ "VerticalTabListWidth": 256,
+ "DocumentGroups": [
+ {
+ "DockedWidth": 200,
+ "SelectedChildIndex": 2,
+ "Children": [
+ {
+ "$type": "Bookmark",
+ "Name": "ST:128:0:{116d2292-e37d-41cd-a077-ebacac4c8cc4}"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 1,
+ "Title": "MultipleCopyWndV.xaml",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "RelativeToolTip": "Effector.Plugin.Lib\\MultipleCopyWnd\\MultipleCopyWndV.xaml",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+ "WhenOpened": "2025-01-16T14:20:02.087Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 0,
+ "Title": "ProcessManagerVM.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerVM.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-16T14:19:17.625Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "ProcessManagerV.xaml",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "RelativeToolTip": "Effector.Plugin.Lib\\ProcessManager\\ProcessManagerV.xaml",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+ "WhenOpened": "2025-01-16T14:19:13.496Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "EgtWindow.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\EgtWindow\\EgtWindow.vb",
+ "ViewState": "AgIAADkAAAAAAAAAAAAAAH8AAAAtAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T15:16:31.177Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 5,
+ "Title": "Generic.xaml",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Themes\\Generic.xaml",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003549|",
+ "WhenOpened": "2025-01-09T14:50:37.334Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
+ "Title": "PluginConstIni.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Constants\\PluginConstIni.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAcAAAABAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T14:19:08.316Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 8,
+ "Title": "ConstIni.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Constants\\ConstIni.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T14:17:20.215Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 7,
+ "Title": "PluginIniFile.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Utility\\PluginIniFile.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABAAAAAUAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T12:12:44.529Z"
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 4,
+ "Title": "IniFile.vb",
+ "DocumentMoniker": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "RelativeDocumentMoniker": "Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "ToolTip": "C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "RelativeToolTip": "Effector.Plugin.Lib\\Utility\\IniFile.vb",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.003361|",
+ "WhenOpened": "2025-01-09T12:09:43.898Z",
+ "EditorCaption": ""
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/Effector.Plugin.Lib.sln b/Effector.Plugin.Lib.sln
new file mode 100644
index 0000000..ad8c935
--- /dev/null
+++ b/Effector.Plugin.Lib.sln
@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35514.174 d17.12
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "Effector.Plugin.Lib", "Effector.Plugin.Lib\Effector.Plugin.Lib.vbproj", "{E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Effector.Plugin.Lib/.vs/Effector.Plugin.Lib.vbproj.dtbcache.json b/Effector.Plugin.Lib/.vs/Effector.Plugin.Lib.vbproj.dtbcache.json
new file mode 100644
index 0000000..be0c1c3
--- /dev/null
+++ b/Effector.Plugin.Lib/.vs/Effector.Plugin.Lib.vbproj.dtbcache.json
@@ -0,0 +1 @@
+{"RootPath":"C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib","ProjectFileName":"Effector.Plugin.Lib.vbproj","Configuration":"Debug|AnyCPU","FrameworkPath":"","Sources":[{"SourceFile":"Constants\\ConstGen.vb"},{"SourceFile":"Constants\\ConstIni.vb"},{"SourceFile":"Constants\\PluginConstIni.vb"},{"SourceFile":"EgtWindow\\EgtWindow.vb"},{"SourceFile":"MultipleCopyWnd\\MultipleCopyWndV.xaml.vb"},{"SourceFile":"MultipleCopyWnd\\MultipleCopyWndVM.vb"},{"SourceFile":"My Project\\AssemblyInfo.vb"},{"SourceFile":"My Project\\Resources.Designer.vb"},{"SourceFile":"My Project\\Settings.Designer.vb"},{"SourceFile":"TitleBar\\TitleBarV.xaml.vb"},{"SourceFile":"Utility\\Command.vb"},{"SourceFile":"Utility\\ExecProcessManager.vb"},{"SourceFile":"Utility\\GenInterface.vb"},{"SourceFile":"Utility\\IdNameStruct.vb"},{"SourceFile":"Utility\\IniFile.vb"},{"SourceFile":"Utility\\PluginIniFile.vb"},{"SourceFile":"Utility\\StringConversion.vb"},{"SourceFile":"Utility\\VMBase.vb"},{"SourceFile":"obj\\Debug\\.NETFramework,Version=v4.7.2.AssemblyAttributes.vb"},{"SourceFile":"C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\obj\\Debug\\MultipleCopyWnd\\MultipleCopyWndV.g.vb"},{"SourceFile":"C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\obj\\Debug\\TitleBar\\TitleBarV.g.vb"},{"SourceFile":"C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\obj\\Debug\\GeneratedInternalTypeHelper.g.vb"}],"References":[{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationCore.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\PresentationFramework.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Core.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.DataSetExtensions.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Data.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Net.Http.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xaml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\System.Xml.Linq.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""},{"Reference":"C:\\Program Files (x86)\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v4.7.2\\WindowsBase.dll","ResolvedFrom":"","OriginalItemSpec":"","Name":"","EmbedInteropTypes":false,"CopyLocal":false,"IsProjectReference":false,"ProjectPath":""}],"Analyzers":[],"Outputs":[{"OutputItemFullPath":"C:\\EgtDev\\Effector\\Effector.Plugin.Lib\\Effector.Plugin.Lib\\bin\\Debug\\Effector.Plugin.Lib.dll","OutputItemRelativePath":"Effector.Plugin.Lib.dll"},{"OutputItemFullPath":"","OutputItemRelativePath":""}],"CopyToOutputEntries":[]}
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/Constants/ConstGen.vb b/Effector.Plugin.Lib/Constants/ConstGen.vb
new file mode 100644
index 0000000..7cc6083
--- /dev/null
+++ b/Effector.Plugin.Lib/Constants/ConstGen.vb
@@ -0,0 +1,66 @@
+'----------------------------------------------------------------------------
+' EgalTech 2015-2017
+'----------------------------------------------------------------------------
+' File : ConstGen.vb Data : 08.05.24 Versione : 2.6e1
+' Contenuto : Modulo costanti generali.
+'
+'
+'
+' Modifiche : 08.05.24 ES Creazione modulo.
+'
+'
+'----------------------------------------------------------------------------
+
+Public Module ConstGen
+
+ ' File con direttorio radice dei dati
+ Public Const DAT_FILE_NAME As String = "DataRoot.Ini"
+ Public Const S_DATA As String = "Data"
+ Public Const K_DATAROOT As String = "DataRoot"
+
+ '' File con dati di licenza
+ 'Public Const LIC_FILE_NAME As String = "EgtBEAMWALL.lic"
+ 'Public Const S_LICENCE As String = "Licence"
+ 'Public Const K_LOCKID As String = "LockId"
+ 'Public Const K_KEY As String = "Key"
+
+
+ ' Abilitazioni licenza
+ Public Enum KEY_OPT As UInteger
+ SUPERVISOR = 1
+ End Enum
+
+ ' Sottodirettorio di configurazione
+ Public Const CONF_DIR As String = "Config"
+ ' Sottodirettorio delle risorse
+ Public Const RES_DIR As String = "Resources"
+ ' Sottodirettorio script
+ Public Const SCRIPT_DIR As String = "Script"
+ ' Sottodirettorio temporaneo
+ Public Const TEMP_DIR As String = "Temp"
+ '' Sottodirettorio per Cam automatico
+ 'Public Const PROJS_DIR As String = "Projs"
+ '' Sottodirettorio per Csv automatico
+ 'Public Const PRODS_DIR As String = "Prods"
+ '' Sottodirettorio per Macro
+ 'Public Const MACRO_DIR As String = "Macro"
+ '' Sottodirettorio per Magazzino
+ 'Public Const WAREHOUSE_DIR As String = "Warehouse"
+ '' Sottodirettorio per lavorazioni travi
+ 'Public Const BEAM_DIR As String = "Beam"
+ '' Sottodirettorio per lavorazioni pareti
+ 'Public Const WALL_DIR As String = "Wall"
+ '' Sottodirettorio di default per il salvataggio con nome
+ 'Public Const SAVE_DFL_NAMEDIR As String = "MyProjects"
+ '' Sottodirettorio di default per le macchine
+ 'Public Const MACHINES_DFL_DIR As String = "Machines"
+ '' Sottodirettorio di default per toolmakers
+ 'Public Const TOOLMAKERS_DFL_DIR As String = "ToolMakers"
+ '' Nome file Lua con le funzioni di attrezzaggio
+ 'Public Const SETUP_LUA As String = "SetUp.lua"
+ '' Nome eseguibile per stampa
+ 'Public Const ZEBRAPRINTER_EXE As String = "ZebraPrinterUtilitiesD32.exe"
+ '' Sottodirettorio di default per macro
+ 'Public Const MACRO_DFL_DIR As String = "Macro"
+
+End Module
diff --git a/Effector.Plugin.Lib/Constants/ConstIni.vb b/Effector.Plugin.Lib/Constants/ConstIni.vb
new file mode 100644
index 0000000..052941f
--- /dev/null
+++ b/Effector.Plugin.Lib/Constants/ConstIni.vb
@@ -0,0 +1,39 @@
+'----------------------------------------------------------------------------
+' EgalTech 2015-2024
+'----------------------------------------------------------------------------
+' File : ConstIni.vb Data : 08.05.24 Versione : 2.6e1
+' Contenuto : Modulo costanti sezione e chiavi per file Ini.
+'
+'
+'
+' Modifiche : 08.05.24 ES Creazione modulo.
+'
+'
+'----------------------------------------------------------------------------
+Module ConstIni
+
+ Public Const INI_FILE_NAME As String = "Effector.ini"
+
+ Public Const S_GENERAL As String = "General"
+ 'Public Const K_DEBUG As String = "Debug"
+ Public Const K_LICENCE As String = "Licence"
+ 'Public Const K_USERLEVEL As String = "UserLevel"
+ 'Public Const K_MAXINST As String = "MaxInstances"
+ Public Const K_INSTANCES As String = "Instances"
+ Public Const K_PREPROC As String = "PreProc"
+ Public Const K_POSTPROC As String = "PostProc"
+ Public Const K_MACHINESTATE As String = "MachineState"
+ Public Const K_INITLUA As String = "InitLua"
+ Public Const K_PLUGINNAME As String = "PluginName"
+ Public Const K_WINPLACE = "WinPlace"
+
+ Public Const S_REDIS As String = "Redis"
+ Public Const K_ENABLED As String = "Enabled"
+ Public Const K_DBINDEX As String = "DbIndex"
+
+
+ Public Const S_NC As String = "NC"
+ Public Const K_NC_SIMULATE As String = "NcSimulate"
+ Public Const K_MACHINE As String = "Machine"
+
+End Module
diff --git a/Effector.Plugin.Lib/Constants/PluginConstIni.vb b/Effector.Plugin.Lib/Constants/PluginConstIni.vb
new file mode 100644
index 0000000..3739f92
--- /dev/null
+++ b/Effector.Plugin.Lib/Constants/PluginConstIni.vb
@@ -0,0 +1,51 @@
+'----------------------------------------------------------------------------
+' EgalTech 2015-2024
+'----------------------------------------------------------------------------
+' File : ConstIni.vb Data : 08.05.24 Versione : 2.6e1
+' Contenuto : Modulo costanti sezione e chiavi per file Ini.
+'
+'
+'
+' Modifiche : 08.05.24 ES Creazione modulo.
+'
+'
+'----------------------------------------------------------------------------
+Module PluginConstIni
+
+ 'Public Const S_GENERAL As String = "General"
+ Public Const K_CAMEXEPATH As String = "CAMExePath"
+ Public Const K_DOORCREATOREXEPATH As String = "DoorCreatorExePath"
+ Public Const K_BACKUPDIR As String = "BackupDir"
+ Public Const K_RESOURCESDIR As String = "ResourcesDir"
+ Public Const K_DDFDIR As String = "DDFDir"
+ Public Const K_DDTDIR As String = "DDTDir"
+ Public Const K_GENDDFDIR As String = "GenDDFDir"
+ Public Const K_CSVOUTPUT As String = "CSVOutput"
+
+
+ Public Const S_CSV As String = "CSV"
+ Public Const K_DDFNAME As String = "DDFName"
+ Public Const K_QUANTITY As String = "Quantity"
+ Public Const K_HEIGHT As String = "Height"
+ Public Const K_WIDTH As String = "Width"
+ Public Const K_THICKNESS As String = "Thickness"
+ Public Const K_SWING As String = "Swing"
+ Public Const K_PHASE As String = "Phase"
+ Public Const K_STATE As String = "State"
+ Public Const K_PROGRAMSENT As String = "ProgramSent"
+ Public Const K_PROGRAMSTART As String = "ProgramStart"
+ Public Const K_PROGRAMEND As String = "ProgramEnd"
+ Public Const K_MANUALADDEDDOORNAME As String = "ManualAddedDoorName"
+ Public Const K_DELIMITER As String = "Delimiter"
+
+ Public Const S_DEBUG As String = "Debug"
+ Public Const K_VARIABLELIST As String = "VariableList"
+ Public Const K_VARIABLEONDRAW As String = "VariableOnDraw"
+ Public Const K_MACHINECOMMANDS As String = "MachineCommands"
+ Public Const K_DOORCIRCLIST As String = "DoorCircList"
+ Public Const K_EXECUTEWINDOW As String = "ExecuteWindow"
+
+ Public Const S_NC As String = "NC"
+ Public Const K_NC_SIMULATE As String = "NcSimulate"
+
+End Module
diff --git a/Effector.Plugin.Lib/Effector.Plugin.Lib.vbproj b/Effector.Plugin.Lib/Effector.Plugin.Lib.vbproj
new file mode 100644
index 0000000..552efb1
--- /dev/null
+++ b/Effector.Plugin.Lib/Effector.Plugin.Lib.vbproj
@@ -0,0 +1,163 @@
+
+
+
+ Debug
+ AnyCPU
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}
+ Effector.Plugin.Lib
+ Effector.Plugin.Lib
+ Library
+ v4.7.2
+ Custom
+ true
+ {E5ECC5E1-EA7B-447D-9A07-F5EE25D27779}
+
+
+ true
+ full
+ true
+ true
+ true
+ bin\Debug\
+ Effector.Plugin.Lib.xml
+ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314
+
+
+ pdbonly
+ false
+ false
+ true
+ false
+ true
+ bin\Release\
+ Effector.Plugin.Lib.xml
+ 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314
+
+
+ On
+
+
+ Binary
+
+
+ Off
+
+
+ On
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MultipleCopyWndV.xaml
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ProcessManagerV.xaml
+
+
+
+ TitleBarV.xaml
+
+
+
+
+
+
+
+
+
+
+
+ VbMyResourcesResXFileCodeGenerator
+ Resources.Designer.vb
+ My.Resources
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.vb
+
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ Designer
+ XamlIntelliSenseFileGenerator
+
+
+ Designer
+ MSBuild:Compile
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+
+
+
+
+ copy $(TargetPath) c:\EgtData\Effector\Plugin\Effector.Plugin.DoorArreda\Effector.Plugin.Lib.dll
+copy $(TargetPath) c:\EgtData\Effector\Plugin\Effector.Plugin.FiveLakes\Effector.Plugin.Lib.dll
+copy $(TargetPath) c:\EgtProg\Effector\Effector.Plugin.Lib.dll
+
+
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/Effector.Plugin.Lib.vbproj.user b/Effector.Plugin.Lib/Effector.Plugin.Lib.vbproj.user
new file mode 100644
index 0000000..31847db
--- /dev/null
+++ b/Effector.Plugin.Lib/Effector.Plugin.Lib.vbproj.user
@@ -0,0 +1,10 @@
+
+
+
+ ShowAllFiles
+
+
+ Program
+ C:\EgtProg\Effector\EffectorD32.exe
+
+
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/EgtWindow/EgtWindow.vb b/Effector.Plugin.Lib/EgtWindow/EgtWindow.vb
new file mode 100644
index 0000000..3d2611d
--- /dev/null
+++ b/Effector.Plugin.Lib/EgtWindow/EgtWindow.vb
@@ -0,0 +1,360 @@
+' Follow steps 1a or 1b and then 2 to use this custom control in a XAML file.
+'
+' Step 1a) Using this custom control in a XAML file that exists in the current project.
+' Add this XmlNamespace attribute to the root element of the markup file where it is
+' to be used:
+'
+' xmlns:MyNamespace="clr-namespace:Effector.Plugin.Lib"
+'
+'
+' Step 1b) Using this custom control in a XAML file that exists in a different project.
+' Add this XmlNamespace attribute to the root element of the markup file where it is
+' to be used:
+'
+' xmlns:MyNamespace="clr-namespace:Effector.Plugin.Lib;assembly=Effector.Plugin.Lib"
+'
+' You will also need to add a project reference from the project where the XAML file lives
+' to this project and Rebuild to avoid compilation errors:
+'
+' Right click on the target project in the Solution Explorer and
+' "Add Reference"->"Projects"->[Browse to and select this project]
+'
+'
+' Step 2)
+' Go ahead and use your control in the XAML file. Note that Intellisense in the
+' XML editor does not currently work on custom controls and its child elements.
+'
+'
+'
+
+Imports System.Globalization
+Imports System.Runtime.InteropServices
+Imports System.Text
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Interop
+Imports System.Xml.Serialization
+
+
+
+
+Public Class EgtWindow
+ Inherits System.Windows.Window
+
+ Private Const WM_GETMINMAXINFO As Integer = &H24
+ Private Const MONITOR_DEFAULTTONEAREST As UInteger = &H2
+ Private Const SW_SHOWNORMAL As Integer = 1
+ Private Const SW_SHOWMINIMIZED As Integer = 2
+
+
+
+ Public Structure RECT
+
+ Public Left As Integer
+ Public Top As Integer
+ Public Right As Integer
+ Public Bottom As Integer
+
+ Public Sub New(ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer)
+ Me.Left = left
+ Me.Top = top
+ Me.Right = right
+ Me.Bottom = bottom
+ End Sub
+
+ End Structure
+
+
+ Public Structure MONITORINFO
+
+ Public cbSize As Integer
+ Public rcMonitor As RECT
+ Public rcWork As RECT
+ Public dwFlags As UInteger
+
+ End Structure
+
+
+
+ Public Structure POINT
+
+ Public X As Integer
+ Public Y As Integer
+
+ Public Sub New(ByVal x As Integer, ByVal y As Integer)
+ Me.X = x
+ Me.Y = y
+ End Sub
+
+ End Structure
+
+
+ Public Structure MINMAXINFO
+
+ Public ptReserved As POINT
+ Public ptMaxSize As POINT
+ Public ptMaxPosition As POINT
+ Public ptMinTrackSize As POINT
+ Public ptMaxTrackSize As POINT
+
+ End Structure
+
+
+
+ Public Structure WINDOWPLACEMENT
+
+ Public length As Integer
+ Public flags As Integer
+ Public showCmd As Integer
+ Public minPosition As POINT
+ Public maxPosition As POINT
+ Public normalPosition As RECT
+
+ End Structure
+
+ ' Proprietà che permette di impostare l'altezza della TitleBar
+ Public Shared ReadOnly TitleBarHeightProperty As DependencyProperty = DependencyProperty.Register("TitleBarHeight", GetType(Double), GetType(EgtWindow), New PropertyMetadata(0.0))
+ Public Property TitleBarHeight() As Double
+ Get
+ Return CType(GetValue(TitleBarHeightProperty), Double)
+ End Get
+ Set(ByVal value As Double)
+ SetValue(TitleBarHeightProperty, value)
+ End Set
+ End Property
+
+ 'Private Shared encoding As Encoding = New UTF8Encoding()
+ 'Private Shared serializer As XmlSerializer = New XmlSerializer(GetType(WINDOWPLACEMENT))
+
+ Private m_Placement_AppName As String = ""
+ Public Sub SetPlacementAppName(Placement_AppName As String)
+ m_Placement_AppName = Placement_AppName
+ End Sub
+ Private m_Placement_KeyName As String = ""
+ Public Sub SetPlacementKeyName(Placement_KeyName As String)
+ m_Placement_KeyName = Placement_KeyName
+ End Sub
+ Private m_Placement_FileName As String = ""
+ Public Sub SetPlacementFileName(Placement_FileName As String)
+ m_Placement_FileName = Placement_FileName
+ End Sub
+
+
+#Region "CONSTRUCTOR"
+
+ Shared Sub New()
+ 'This OverrideMetadata call tells the system that this element wants to provide a style that is different than its base class.
+ 'This style is defined in themes\generic.xaml
+ DefaultStyleKeyProperty.OverrideMetadata(GetType(EgtWindow), New FrameworkPropertyMetadata(GetType(EgtWindow)))
+ End Sub
+
+ Sub New()
+ AddHandler Me.Closing, AddressOf OnWindowClosing
+ End Sub
+
+#End Region ' CONSTRUCTOR
+
+#Region "METHODS"
+
+
+ Private Shared Function MonitorFromWindow(ByVal handle As IntPtr, ByVal flags As UInteger) As IntPtr
+ End Function
+
+ Private Shared Function GetMonitorInfo(ByVal hMonitor As IntPtr, ByRef lpmi As MONITORINFO) As Boolean
+ End Function
+
+ Private Shared Function SetWindowPlacement(ByVal hWnd As IntPtr, <[In]> ByRef lpwndpl As WINDOWPLACEMENT) As Boolean
+ End Function
+
+ Private Shared Function GetWindowPlacement(ByVal hWnd As IntPtr, ByRef lpwndpl As WINDOWPLACEMENT) As Boolean
+ End Function
+
+ Protected Overrides Sub OnSourceInitialized(ByVal e As EventArgs)
+ MyBase.OnSourceInitialized(e)
+ CType(PresentationSource.FromVisual(Me), HwndSource).AddHook(AddressOf HookProc)
+ If Me.SizeToContent = SizeToContent.Manual Then
+ Dim sPlacement As String = ""
+ GetPrivateProfileString(m_Placement_AppName, m_Placement_KeyName, "", sPlacement, m_Placement_FileName)
+ If Not String.IsNullOrWhiteSpace(sPlacement) Then
+ SetPlacement(sPlacement)
+ End If
+ End If
+ Me.InvalidateMeasure()
+ End Sub
+
+ Public Shared Function HookProc(ByVal hwnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr, ByRef handled As Boolean) As IntPtr
+ If msg = WM_GETMINMAXINFO Then
+ Dim mmi As MINMAXINFO = CType(Marshal.PtrToStructure(lParam, GetType(MINMAXINFO)), MINMAXINFO)
+ Dim monitor As IntPtr = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST)
+
+ If monitor <> IntPtr.Zero Then
+ Dim monitorInfo As MONITORINFO = New MONITORINFO()
+ monitorInfo.cbSize = Marshal.SizeOf(GetType(MONITORINFO))
+ GetMonitorInfo(monitor, monitorInfo)
+ Dim rcWorkArea As RECT = monitorInfo.rcWork
+ Dim rcMonitorArea As RECT = monitorInfo.rcMonitor
+ mmi.ptMaxPosition.X = Math.Abs(rcWorkArea.Left - rcMonitorArea.Left)
+ mmi.ptMaxPosition.Y = Math.Abs(rcWorkArea.Top - rcMonitorArea.Top)
+ mmi.ptMaxSize.X = Math.Abs(rcWorkArea.Right - rcWorkArea.Left)
+ mmi.ptMaxSize.Y = Math.Abs(rcWorkArea.Bottom - rcWorkArea.Top)
+ End If
+
+ Marshal.StructureToPtr(mmi, lParam, True)
+ End If
+
+ Return IntPtr.Zero
+ End Function
+
+ Shared Sub SetPlacement(ByVal windowHandle As IntPtr, ByVal placementXml As String)
+ If String.IsNullOrEmpty(placementXml) Then
+ Return
+ End If
+
+ Dim placement As WINDOWPLACEMENT
+ Try
+ placement = StringToPlacement(placementXml)
+ 'Using memoryStream As TextReader = New StringReader(placementXml)
+ ' placement = CType(serializer.Deserialize(memoryStream), WINDOWPLACEMENT)
+ 'End Using
+
+ placement.length = Marshal.SizeOf(GetType(WINDOWPLACEMENT))
+ placement.flags = 0
+ placement.showCmd = (If(placement.showCmd = SW_SHOWMINIMIZED, SW_SHOWNORMAL, placement.showCmd))
+ SetWindowPlacement(windowHandle, placement)
+ Catch __unusedInvalidOperationException1__ As InvalidOperationException
+ End Try
+
+ End Sub
+
+ Private Shared Function PlacementToString(Placement As WINDOWPLACEMENT) As String
+ Dim sPlacement As String = ""
+ sPlacement = Placement.length.ToString() & ";" &
+ Placement.flags.ToString() & ";" &
+ Placement.showCmd.ToString() & ";"
+ sPlacement &= PointToString(Placement.minPosition) & ";"
+ sPlacement &= PointToString(Placement.maxPosition) & ";"
+ sPlacement &= RectToString(Placement.normalPosition)
+ Return sPlacement
+ End Function
+
+ Private Shared Function PointToString(Point As POINT) As String
+ Dim sPoint As String = ""
+ sPoint = Point.X.ToString() & "," &
+ Point.Y.ToString()
+ Return sPoint
+ End Function
+
+ Private Shared Function RectToString(Rect As RECT) As String
+ Dim sRect As String = ""
+ sRect = Rect.Left.ToString() & "," &
+ Rect.Top.ToString() & "," &
+ Rect.Right.ToString() & "," &
+ Rect.Bottom.ToString()
+ Return sRect
+ End Function
+
+ Shared Function GetPlacement(ByVal windowHandle As IntPtr) As String
+ Dim placement As WINDOWPLACEMENT = New WINDOWPLACEMENT()
+ GetWindowPlacement(windowHandle, placement)
+ Return PlacementToString(placement)
+
+ 'Using TextWriter As StringWriter = New StringWriter()
+ ' serializer.Serialize(TextWriter, placement)
+ ' Return TextWriter.ToString().Replace(Environment.NewLine, "")
+ 'End Using
+
+ End Function
+
+ Private Shared Function StringToPlacement(sPlacement As String) As WINDOWPLACEMENT
+ Dim Placement As WINDOWPLACEMENT
+ Dim sPlacementArray As String() = sPlacement.Split(";"c)
+ If sPlacementArray.Length < 5 Then
+ Placement.normalPosition = New RECT(100, 100, 800, 800)
+ Return Placement
+ End If
+ Integer.TryParse(sPlacementArray(0), Placement.length)
+ Integer.TryParse(sPlacementArray(1), Placement.flags)
+ Integer.TryParse(sPlacementArray(2), Placement.showCmd)
+ Placement.minPosition = StringToPoint(sPlacementArray(3))
+ Placement.maxPosition = StringToPoint(sPlacementArray(4))
+ Placement.normalPosition = StringToRect(sPlacementArray(5))
+ Return Placement
+ End Function
+
+ Private Shared Function StringToPoint(sPoint As String) As POINT
+ Dim sPointArray As String() = sPoint.Split(","c)
+ Dim nX As Integer = 0
+ Dim nY As Integer = 0
+ Integer.TryParse(sPointArray(0), nX)
+ Integer.TryParse(sPointArray(1), nY)
+ Return New POINT(nX, nY)
+ End Function
+
+ Private Shared Function StringToRect(sRect As String) As RECT
+ Dim sRectArray As String() = sRect.Split(","c)
+ Dim nLeft As Integer = 0
+ Dim nTop As Integer = 0
+ Dim nRight As Integer = 0
+ Dim nBottom As Integer = 0
+ Integer.TryParse(sRectArray(0), nLeft)
+ Integer.TryParse(sRectArray(1), nTop)
+ Integer.TryParse(sRectArray(2), nRight)
+ Integer.TryParse(sRectArray(3), nBottom)
+ Return New RECT(nLeft, nTop, nRight, nBottom)
+ End Function
+
+ Public Sub SetPlacement(ByVal placementXml As String)
+ SetPlacement(New WindowInteropHelper(Me).Handle, placementXml)
+ End Sub
+
+ Public Function GetPlacement() As String
+ Return GetPlacement(New WindowInteropHelper(Me).Handle)
+ End Function
+
+#End Region ' METHODS
+
+#Region "EVENTS"
+
+ Public Sub OnMinimizeButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
+ Me.WindowState = WindowState.Minimized
+ End Sub
+
+ Public Sub OnMaximizeRestoreButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
+ If Me.WindowState = WindowState.Maximized Then
+ Me.WindowState = WindowState.Normal
+ Else
+ Me.WindowState = WindowState.Maximized
+ End If
+ End Sub
+
+ Public Overridable Sub OnCloseButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
+ Me.Close()
+ End Sub
+
+ Private Sub OnWindowClosing(sender As Object, e As System.ComponentModel.CancelEventArgs)
+ If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then
+ e.Cancel = True
+ Return
+ End If
+ If Me.SizeToContent = SizeToContent.Manual Then
+ WritePrivateProfileString(m_Placement_AppName, m_Placement_KeyName, GetPlacement(), m_Placement_FileName)
+ End If
+ End Sub
+
+#End Region ' EVENTS
+
+End Class
+
+Public Class CaptionHeightConverter
+ Implements IValueConverter
+
+ Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.Convert
+ If Not TypeOf value Is Double Then Return 39
+ Dim dValue As Double = CDbl(value)
+ Return dValue + 7
+ End Function
+
+ Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IValueConverter.ConvertBack
+ Throw New NotImplementedException()
+ End Function
+
+End Class
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/EgtWindow/EgtWindowV.xaml b/Effector.Plugin.Lib/EgtWindow/EgtWindowV.xaml
new file mode 100644
index 0000000..a0500ae
--- /dev/null
+++ b/Effector.Plugin.Lib/EgtWindow/EgtWindowV.xaml
@@ -0,0 +1,4 @@
+
+
diff --git a/Effector.Plugin.Lib/EgtWindow/EgtWindowV.xaml.vb b/Effector.Plugin.Lib/EgtWindow/EgtWindowV.xaml.vb
new file mode 100644
index 0000000..c7823f1
--- /dev/null
+++ b/Effector.Plugin.Lib/EgtWindow/EgtWindowV.xaml.vb
@@ -0,0 +1,301 @@
+Imports System.Runtime.InteropServices
+Imports System.Text
+Imports System.Windows.Interop
+Imports System.Xml.Serialization
+
+Public Class EgtWindowV
+
+ Private Const WM_GETMINMAXINFO As Integer = &H24
+ Private Const MONITOR_DEFAULTTONEAREST As UInteger = &H2
+ Private Const SW_SHOWNORMAL As Integer = 1
+ Private Const SW_SHOWMINIMIZED As Integer = 2
+
+
+
+ Public Structure RECT
+
+ Public Left As Integer
+ Public Top As Integer
+ Public Right As Integer
+ Public Bottom As Integer
+
+ Public Sub New(ByVal left As Integer, ByVal top As Integer, ByVal right As Integer, ByVal bottom As Integer)
+ Me.Left = left
+ Me.Top = top
+ Me.Right = right
+ Me.Bottom = bottom
+ End Sub
+
+ End Structure
+
+
+ Public Structure MONITORINFO
+
+ Public cbSize As Integer
+ Public rcMonitor As RECT
+ Public rcWork As RECT
+ Public dwFlags As UInteger
+
+ End Structure
+
+
+
+ Public Structure POINT
+
+ Public X As Integer
+ Public Y As Integer
+
+ Public Sub New(ByVal x As Integer, ByVal y As Integer)
+ Me.X = x
+ Me.Y = y
+ End Sub
+
+ End Structure
+
+
+ Public Structure MINMAXINFO
+
+ Public ptReserved As POINT
+ Public ptMaxSize As POINT
+ Public ptMaxPosition As POINT
+ Public ptMinTrackSize As POINT
+ Public ptMaxTrackSize As POINT
+
+ End Structure
+
+
+
+ Public Structure WINDOWPLACEMENT
+
+ Public length As Integer
+ Public flags As Integer
+ Public showCmd As Integer
+ Public minPosition As POINT
+ Public maxPosition As POINT
+ Public normalPosition As RECT
+
+ End Structure
+
+ Private Shared encoding As Encoding = New UTF8Encoding()
+ Private Shared serializer As XmlSerializer = New XmlSerializer(GetType(WINDOWPLACEMENT))
+
+
+#Region "CONSTRUCTOR"
+
+ Sub New()
+ ' Funzione che interpreta l'xaml
+ InitializeComponent()
+ AddHandler Me.Loaded, AddressOf MainWindowV_Loaded
+ AddHandler Me.ContentRendered, AddressOf MainWindowV_ContentRendered
+ AddHandler Me.StateChanged, AddressOf Window_StateChanged
+ AddHandler Me.Closing, AddressOf MainWindowV_Closing
+ AddHandler Me.Closed, AddressOf MainWindowV_Closed
+ Me.RefreshMaximizeRestoreButton()
+ End Sub
+
+#End Region ' CONSTRUCTOR
+
+#Region "METHODS"
+
+
+ Private Shared Function MonitorFromWindow(ByVal handle As IntPtr, ByVal flags As UInteger) As IntPtr
+ End Function
+
+ Private Shared Function GetMonitorInfo(ByVal hMonitor As IntPtr, ByRef lpmi As MONITORINFO) As Boolean
+ End Function
+
+ Private Shared Function SetWindowPlacement(ByVal hWnd As IntPtr, <[In]> ByRef lpwndpl As WINDOWPLACEMENT) As Boolean
+ End Function
+
+ Private Shared Function GetWindowPlacement(ByVal hWnd As IntPtr, ByRef lpwndpl As WINDOWPLACEMENT) As Boolean
+ End Function
+
+ Protected Overrides Sub OnSourceInitialized(ByVal e As EventArgs)
+ MyBase.OnSourceInitialized(e)
+ CType(PresentationSource.FromVisual(Me), HwndSource).AddHook(AddressOf HookProc)
+ Dim sPlacement As String = ""
+ GetMainPrivateProfileString(S_GENERAL, K_WINPLACE, "", sPlacement)
+ If Not String.IsNullOrWhiteSpace(sPlacement) Then
+ SetPlacement(sPlacement)
+ End If
+
+ End Sub
+
+ Public Shared Function HookProc(ByVal hwnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr, ByRef handled As Boolean) As IntPtr
+ If msg = WM_GETMINMAXINFO Then
+ Dim mmi As MINMAXINFO = CType(Marshal.PtrToStructure(lParam, GetType(MINMAXINFO)), MINMAXINFO)
+ Dim monitor As IntPtr = MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST)
+
+ If monitor <> IntPtr.Zero Then
+ Dim monitorInfo As MONITORINFO = New MONITORINFO()
+ monitorInfo.cbSize = Marshal.SizeOf(GetType(MONITORINFO))
+ GetMonitorInfo(monitor, monitorInfo)
+ Dim rcWorkArea As RECT = monitorInfo.rcWork
+ Dim rcMonitorArea As RECT = monitorInfo.rcMonitor
+ mmi.ptMaxPosition.X = Math.Abs(rcWorkArea.Left - rcMonitorArea.Left)
+ mmi.ptMaxPosition.Y = Math.Abs(rcWorkArea.Top - rcMonitorArea.Top)
+ mmi.ptMaxSize.X = Math.Abs(rcWorkArea.Right - rcWorkArea.Left)
+ mmi.ptMaxSize.Y = Math.Abs(rcWorkArea.Bottom - rcWorkArea.Top)
+ End If
+
+ Marshal.StructureToPtr(mmi, lParam, True)
+ End If
+
+ Return IntPtr.Zero
+ End Function
+
+ Shared Sub SetPlacement(ByVal windowHandle As IntPtr, ByVal placementXml As String)
+ If String.IsNullOrEmpty(placementXml) Then
+ Return
+ End If
+
+ Dim placement As WINDOWPLACEMENT
+ Try
+ placement = StringToPlacement(placementXml)
+ 'Using memoryStream As TextReader = New StringReader(placementXml)
+ ' placement = CType(serializer.Deserialize(memoryStream), WINDOWPLACEMENT)
+ 'End Using
+
+ placement.length = Marshal.SizeOf(GetType(WINDOWPLACEMENT))
+ placement.flags = 0
+ placement.showCmd = (If(placement.showCmd = SW_SHOWMINIMIZED, SW_SHOWNORMAL, placement.showCmd))
+ SetWindowPlacement(windowHandle, placement)
+ Catch __unusedInvalidOperationException1__ As InvalidOperationException
+ End Try
+
+ End Sub
+
+ Private Shared Function PlacementToString(Placement As WINDOWPLACEMENT) As String
+ Dim sPlacement As String = ""
+ sPlacement = Placement.length.ToString() & ";" &
+ Placement.flags.ToString() & ";" &
+ Placement.showCmd.ToString() & ";"
+ sPlacement &= PointToString(Placement.minPosition) & ";"
+ sPlacement &= PointToString(Placement.maxPosition) & ";"
+ sPlacement &= RectToString(Placement.normalPosition)
+ Return sPlacement
+ End Function
+
+ Private Shared Function PointToString(Point As POINT) As String
+ Dim sPoint As String = ""
+ sPoint = Point.X.ToString() & "," &
+ Point.Y.ToString()
+ Return sPoint
+ End Function
+
+ Private Shared Function RectToString(Rect As RECT) As String
+ Dim sRect As String = ""
+ sRect = Rect.Left.ToString() & "," &
+ Rect.Top.ToString() & "," &
+ Rect.Right.ToString() & "," &
+ Rect.Bottom.ToString()
+ Return sRect
+ End Function
+
+ Shared Function GetPlacement(ByVal windowHandle As IntPtr) As String
+ Dim placement As WINDOWPLACEMENT = New WINDOWPLACEMENT()
+ GetWindowPlacement(windowHandle, placement)
+ Return PlacementToString(placement)
+
+ 'Using TextWriter As StringWriter = New StringWriter()
+ ' serializer.Serialize(TextWriter, placement)
+ ' Return TextWriter.ToString().Replace(Environment.NewLine, "")
+ 'End Using
+
+ End Function
+
+ Private Shared Function StringToPlacement(sPlacement As String) As WINDOWPLACEMENT
+ Dim Placement As WINDOWPLACEMENT
+ Dim sPlacementArray As String() = sPlacement.Split(";"c)
+ If sPlacementArray.Length < 5 Then
+ Placement.normalPosition = New RECT(100, 100, 800, 800)
+ Return Placement
+ End If
+ Integer.TryParse(sPlacementArray(0), Placement.length)
+ Integer.TryParse(sPlacementArray(1), Placement.flags)
+ Integer.TryParse(sPlacementArray(2), Placement.showCmd)
+ Placement.minPosition = StringToPoint(sPlacementArray(3))
+ Placement.maxPosition = StringToPoint(sPlacementArray(4))
+ Placement.normalPosition = StringToRect(sPlacementArray(5))
+ Return Placement
+ End Function
+
+ Private Shared Function StringToPoint(sPoint As String) As POINT
+ Dim sPointArray As String() = sPoint.Split(","c)
+ Dim nX As Integer = 0
+ Dim nY As Integer = 0
+ Integer.TryParse(sPointArray(0), nX)
+ Integer.TryParse(sPointArray(1), nY)
+ Return New POINT(nX, nY)
+ End Function
+
+ Private Shared Function StringToRect(sRect As String) As RECT
+ Dim sRectArray As String() = sRect.Split(","c)
+ Dim nLeft As Integer = 0
+ Dim nTop As Integer = 0
+ Dim nRight As Integer = 0
+ Dim nBottom As Integer = 0
+ Integer.TryParse(sRectArray(0), nLeft)
+ Integer.TryParse(sRectArray(1), nTop)
+ Integer.TryParse(sRectArray(2), nRight)
+ Integer.TryParse(sRectArray(3), nBottom)
+ Return New RECT(nLeft, nTop, nRight, nBottom)
+ End Function
+
+ Public Sub SetPlacement(ByVal placementXml As String)
+ SetPlacement(New WindowInteropHelper(Me).Handle, placementXml)
+ End Sub
+
+ Public Function GetPlacement() As String
+ Return GetPlacement(New WindowInteropHelper(Me).Handle)
+ End Function
+
+ Private Sub RefreshMaximizeRestoreButton()
+ If Me.WindowState = WindowState.Maximized Then
+ Me.maximizeButton.Visibility = Visibility.Collapsed
+ Me.restoreButton.Visibility = Visibility.Visible
+ Else
+ Me.maximizeButton.Visibility = Visibility.Visible
+ Me.restoreButton.Visibility = Visibility.Collapsed
+ End If
+ End Sub
+
+#End Region ' METHODS
+
+#Region "EVENTS"
+
+ Private Sub OnMinimizeButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
+ Me.WindowState = WindowState.Minimized
+ End Sub
+
+ Private Sub OnMaximizeRestoreButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
+ If Me.WindowState = WindowState.Maximized Then
+ Me.WindowState = WindowState.Normal
+ Else
+ Me.WindowState = WindowState.Maximized
+ End If
+ End Sub
+
+ Private Sub Window_StateChanged(ByVal sender As Object, ByVal e As EventArgs)
+ Me.RefreshMaximizeRestoreButton()
+ End Sub
+
+ Private Sub OnCloseButtonClick(ByVal sender As Object, ByVal e As RoutedEventArgs)
+ Me.Close()
+ End Sub
+
+ Private Sub MainWindowV_Closing(sender As Object, e As System.ComponentModel.CancelEventArgs)
+ If (Keyboard.Modifiers And ModifierKeys.Alt) = ModifierKeys.Alt OrElse Keyboard.IsKeyDown(Key.F4) Then
+ e.Cancel = True
+ Return
+ End If
+ WriteMainPrivateProfileString(S_GENERAL, K_WINPLACE, GetPlacement())
+ End Sub
+
+ Private Sub MainWindowV_Closed(sender As Object, e As EventArgs)
+ EgtOutLog("Exit")
+ End Sub
+
+#End Region ' EVENTS
+
+End Class
diff --git a/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndV.xaml b/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndV.xaml
new file mode 100644
index 0000000..2b0fd0c
--- /dev/null
+++ b/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndV.xaml
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndV.xaml.vb b/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndV.xaml.vb
new file mode 100644
index 0000000..4c4923d
--- /dev/null
+++ b/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndV.xaml.vb
@@ -0,0 +1,19 @@
+Public Class MultipleCopyWndV
+
+ Private WithEvents m_MultipleCopyWndVM As MultipleCopyWndVM
+
+ Sub New(Owner As Window, MultipleCopyWndVM As MultipleCopyWndVM)
+ 'MyBase.New(Owner)
+ Me.Owner = Owner
+ ' This call is required by the designer.
+ InitializeComponent()
+ Me.DataContext = MultipleCopyWndVM
+ ' Assegno al riferimento locale al VM il VM preso dal DataContext
+ m_MultipleCopyWndVM = MultipleCopyWndVM
+ End Sub
+
+ Private Sub CloseWindow(bDialogResult As Boolean) Handles m_MultipleCopyWndVM.m_CloseWindow
+ Me.DialogResult = bDialogResult
+ End Sub
+
+End Class
diff --git a/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndVM.vb b/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndVM.vb
new file mode 100644
index 0000000..8295d3f
--- /dev/null
+++ b/Effector.Plugin.Lib/MultipleCopyWnd/MultipleCopyWndVM.vb
@@ -0,0 +1,66 @@
+Public Class MultipleCopyWndVM
+ Inherits VMBase
+
+ Friend Event m_CloseWindow(bDialogResult As Boolean)
+
+ Private m_nCopyNumber As Integer
+ Public ReadOnly Property nCopyNumber As Integer
+ Get
+ Return m_nCopyNumber
+ End Get
+ End Property
+ Public Property sCopyNumber As String
+ Get
+ Return m_nCopyNumber.ToString()
+ End Get
+ Set(value As String)
+ If Not Integer.TryParse(value, m_nCopyNumber) Then
+ MessageBox.Show("Valore non impostabile come quantita' di porte!", "Errore!", MessageBoxButton.OK, MessageBoxImage.Error)
+ NotifyPropertyChanged(sCopyNumber)
+ End If
+ End Set
+ End Property
+
+ ' Definizione comandi
+ Private m_cmdOk As ICommand
+ Private m_cmdCancel As ICommand
+
+#Region "COMMANDS"
+
+#Region "Ok"
+
+ Public ReadOnly Property Ok_Command As ICommand
+ Get
+ If m_cmdOk Is Nothing Then
+ m_cmdOk = New Command(AddressOf Ok)
+ End If
+ Return m_cmdOk
+ End Get
+ End Property
+
+ Public Sub Ok()
+ If m_nCopyNumber > 0 Then RaiseEvent m_CloseWindow(True)
+ End Sub
+
+#End Region ' Ok
+
+#Region "Cancel"
+
+ Public ReadOnly Property Cancel_Command As ICommand
+ Get
+ If m_cmdCancel Is Nothing Then
+ m_cmdCancel = New Command(AddressOf Cancel)
+ End If
+ Return m_cmdCancel
+ End Get
+ End Property
+
+ Public Sub Cancel()
+ RaiseEvent m_CloseWindow(False)
+ End Sub
+
+#End Region ' Cancel
+
+#End Region ' COMMANDS
+
+End Class
diff --git a/Effector.Plugin.Lib/My Project/AssemblyInfo.vb b/Effector.Plugin.Lib/My Project/AssemblyInfo.vb
new file mode 100644
index 0000000..bd37533
--- /dev/null
+++ b/Effector.Plugin.Lib/My Project/AssemblyInfo.vb
@@ -0,0 +1,56 @@
+Imports System
+Imports System.Reflection
+Imports System.Runtime.InteropServices
+Imports System.Globalization
+Imports System.Resources
+Imports System.Windows
+
+' General Information about an assembly is controlled through the following
+' set of attributes. Change these attribute values to modify the information
+' associated with an assembly.
+
+' Review the values of the assembly attributes
+
+
+
+
+
+
+
+
+
+'In order to begin building localizable applications, set
+'CultureYouAreCodingWith in your .vbproj file
+'inside a . For example, if you are using US english
+'in your source files, set the to "en-US". Then uncomment the
+'NeutralResourceLanguage attribute below. Update the "en-US" in the line
+'below to match the UICulture setting in the project file.
+
+'
+
+
+'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found.
+'1st parameter: where theme specific resource dictionaries are located
+'(used if a resource is not found in the page,
+' or application resource dictionaries)
+
+'2nd parameter: where the generic resource dictionary is located
+'(used if a resource is not found in the page,
+'app, and any theme specific resource dictionaries)
+
+
+
+
+'The following GUID is for the ID of the typelib if this project is exposed to COM
+
+
+' Version information for an assembly consists of the following four values:
+'
+' Major Version
+' Minor Version
+' Build Number
+' Revision
+'
+
+
+
diff --git a/Effector.Plugin.Lib/My Project/Resources.Designer.vb b/Effector.Plugin.Lib/My Project/Resources.Designer.vb
new file mode 100644
index 0000000..e7ecddc
--- /dev/null
+++ b/Effector.Plugin.Lib/My Project/Resources.Designer.vb
@@ -0,0 +1,62 @@
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:$clrversion$
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My.Resources
+
+ 'This class was auto-generated by the StronglyTypedResourceBuilder
+ 'class via a tool like ResGen or Visual Studio.
+ 'To add or remove a member, edit your .ResX file then rerun ResGen
+ 'with the /str option, or rebuild your VS project.
+ '''
+ ''' A strongly-typed resource class, for looking up localized strings, etc.
+ '''
+ _
+ Friend Module Resources
+
+ Private resourceMan As Global.System.Resources.ResourceManager
+
+ Private resourceCulture As Global.System.Globalization.CultureInfo
+
+ '''
+ ''' Returns the cached ResourceManager instance used by this class.
+ '''
+ _
+ Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
+ Get
+ If Object.ReferenceEquals(resourceMan, Nothing) Then
+ Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("$safeprojectname$.Resources", GetType(Resources).Assembly)
+ resourceMan = temp
+ End If
+ Return resourceMan
+ End Get
+ End Property
+
+ '''
+ ''' Overrides the current thread's CurrentUICulture property for all
+ ''' resource lookups using this strongly typed resource class.
+ '''
+ _
+ Friend Property Culture() As Global.System.Globalization.CultureInfo
+ Get
+ Return resourceCulture
+ End Get
+ Set(ByVal value As Global.System.Globalization.CultureInfo)
+ resourceCulture = value
+ End Set
+ End Property
+ End Module
+End Namespace
diff --git a/Effector.Plugin.Lib/My Project/Resources.resx b/Effector.Plugin.Lib/My Project/Resources.resx
new file mode 100644
index 0000000..af7dbeb
--- /dev/null
+++ b/Effector.Plugin.Lib/My Project/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/My Project/Settings.Designer.vb b/Effector.Plugin.Lib/My Project/Settings.Designer.vb
new file mode 100644
index 0000000..6a4df08
--- /dev/null
+++ b/Effector.Plugin.Lib/My Project/Settings.Designer.vb
@@ -0,0 +1,73 @@
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict On
+Option Explicit On
+
+
+Namespace My
+
+ _
+ Partial Friend NotInheritable Class MySettings
+ Inherits Global.System.Configuration.ApplicationSettingsBase
+
+ Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings), MySettings)
+
+#Region "My.Settings Auto-Save Functionality"
+#If _MyType = "WindowsForms" Then
+ Private Shared addedHandler As Boolean
+
+ Private Shared addedHandlerLockObject As New Object
+
+ _
+ Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs)
+ If My.Application.SaveMySettingsOnExit Then
+ My.Settings.Save()
+ End If
+ End Sub
+#End If
+#End Region
+
+ Public Shared ReadOnly Property [Default]() As MySettings
+ Get
+
+#If _MyType = "WindowsForms" Then
+ If Not addedHandler Then
+ SyncLock addedHandlerLockObject
+ If Not addedHandler Then
+ AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings
+ addedHandler = True
+ End If
+ End SyncLock
+ End If
+#End If
+ Return defaultInstance
+ End Get
+ End Property
+ End Class
+End Namespace
+
+Namespace My
+
+ _
+ Friend Module MySettingsProperty
+
+ _
+ Friend ReadOnly Property Settings() As Global.Effector.Plugin.Lib.My.MySettings
+ Get
+ Return Global.Effector.Plugin.Lib.My.MySettings.Default
+ End Get
+ End Property
+ End Module
+End Namespace
diff --git a/Effector.Plugin.Lib/My Project/Settings.settings b/Effector.Plugin.Lib/My Project/Settings.settings
new file mode 100644
index 0000000..40ed9fd
--- /dev/null
+++ b/Effector.Plugin.Lib/My Project/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/ProcessManager/ProcessManagerV.xaml b/Effector.Plugin.Lib/ProcessManager/ProcessManagerV.xaml
new file mode 100644
index 0000000..0918a67
--- /dev/null
+++ b/Effector.Plugin.Lib/ProcessManager/ProcessManagerV.xaml
@@ -0,0 +1,67 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Effector.Plugin.Lib/ProcessManager/ProcessManagerV.xaml.vb b/Effector.Plugin.Lib/ProcessManager/ProcessManagerV.xaml.vb
new file mode 100644
index 0000000..20886ee
--- /dev/null
+++ b/Effector.Plugin.Lib/ProcessManager/ProcessManagerV.xaml.vb
@@ -0,0 +1,19 @@
+Public Class ProcessManagerV
+
+ Private WithEvents m_ProcessManagerVM As ProcessManagerVM
+
+ Sub New(Owner As Window, ProcessManagerVM As ProcessManagerVM)
+ 'MyBase.New(Owner)
+ Me.Owner = Owner
+ ' This call is required by the designer.
+ InitializeComponent()
+ Me.DataContext = ProcessManagerVM
+ ' Assegno al riferimento locale al VM il VM preso dal DataContext
+ m_ProcessManagerVM = ProcessManagerVM
+ End Sub
+
+ 'Private Sub CloseWindow(bDialogResult As Boolean) Handles m_ProcessManagerVM.m_CloseWindow
+ ' Me.DialogResult = bDialogResult
+ 'End Sub
+
+End Class
diff --git a/Effector.Plugin.Lib/ProcessManager/ProcessManagerVM.vb b/Effector.Plugin.Lib/ProcessManager/ProcessManagerVM.vb
new file mode 100644
index 0000000..87b6492
--- /dev/null
+++ b/Effector.Plugin.Lib/ProcessManager/ProcessManagerVM.vb
@@ -0,0 +1,75 @@
+Imports System.Windows.Threading
+Imports System.Collections.ObjectModel
+
+Public Class ProcessManagerVM
+ Inherits VMBase
+
+ Private m_nTaskQuantity As Integer = 3
+
+ Private m_UpdateDataTimer As New DispatcherTimer
+ Public ReadOnly Property UpdateDataTimer As DispatcherTimer
+ Get
+ Return m_UpdateDataTimer
+ End Get
+ End Property
+
+ Private m_ExecProcessManager As ExecProcessManager
+ Public ReadOnly Property ExecProcessManager As ExecProcessManager
+ Get
+ Return m_ExecProcessManager
+ End Get
+ End Property
+
+ Public ReadOnly Property ArgumentsQueue As String
+ Get
+ Return m_ExecProcessManager.ArgumentsQueueCount.ToString()
+ End Get
+ End Property
+
+ Public ReadOnly Property ResultQueue As String
+ Get
+ Return m_ExecProcessManager.ArgumentsResultQueueCount.ToString()
+ End Get
+ End Property
+
+ Public ReadOnly Property ThreadList As ObservableCollection(Of ThreadData)
+ Get
+ If Not IsNothing(m_ExecProcessManager.ThreadDataList) Then
+ Return New ObservableCollection(Of ThreadData)(m_ExecProcessManager.ThreadDataList.ToList())
+ Else
+ Return New ObservableCollection(Of ThreadData)
+ End If
+ End Get
+ End Property
+
+ Private m_dProgress_Value As Double
+ Public ReadOnly Property dProgress_Value As Double
+ Get
+ Return (m_dProgress_Maximum - m_nTaskQuantity - m_ExecProcessManager.ArgumentsQueueCount) '/ m_dProgress_Maximum * 100
+ End Get
+ End Property
+
+ Private m_dProgress_Maximum As Double
+ Public ReadOnly Property dProgress_Maximum As Double
+ Get
+ Return m_dProgress_Maximum
+ End Get
+ End Property
+
+ Sub New(ExecProcessManager As ExecProcessManager)
+ m_ExecProcessManager = ExecProcessManager
+ m_dProgress_Maximum = m_ExecProcessManager.ArgumentsQueueCount + m_nTaskQuantity
+ m_UpdateDataTimer.Interval = New TimeSpan(0, 0, 1)
+ AddHandler m_UpdateDataTimer.Tick, AddressOf UpdateDataTimer_Tick
+ m_UpdateDataTimer.Start()
+ End Sub
+
+ Private Sub UpdateDataTimer_Tick(sender As Object, e As EventArgs)
+ NotifyPropertyChanged(NameOf(ArgumentsQueue))
+ NotifyPropertyChanged(NameOf(ResultQueue))
+ NotifyPropertyChanged(NameOf(ThreadList))
+ NotifyPropertyChanged(NameOf(dProgress_Value))
+ End Sub
+
+End Class
+
diff --git a/Effector.Plugin.Lib/Resources/Effector.ico b/Effector.Plugin.Lib/Resources/Effector.ico
new file mode 100644
index 0000000..ab35208
Binary files /dev/null and b/Effector.Plugin.Lib/Resources/Effector.ico differ
diff --git a/Effector.Plugin.Lib/Resources/EgalwareLogo.png b/Effector.Plugin.Lib/Resources/EgalwareLogo.png
new file mode 100644
index 0000000..209a58e
Binary files /dev/null and b/Effector.Plugin.Lib/Resources/EgalwareLogo.png differ
diff --git a/Effector.Plugin.Lib/Resources/Fonts/AdventPro-Light.ttf b/Effector.Plugin.Lib/Resources/Fonts/AdventPro-Light.ttf
new file mode 100644
index 0000000..61bba6c
Binary files /dev/null and b/Effector.Plugin.Lib/Resources/Fonts/AdventPro-Light.ttf differ
diff --git a/Effector.Plugin.Lib/Resources/Fonts/AdventPro-Regular.ttf b/Effector.Plugin.Lib/Resources/Fonts/AdventPro-Regular.ttf
new file mode 100644
index 0000000..60c8762
Binary files /dev/null and b/Effector.Plugin.Lib/Resources/Fonts/AdventPro-Regular.ttf differ
diff --git a/Effector.Plugin.Lib/Resources/Fonts/Roboto-Light.ttf b/Effector.Plugin.Lib/Resources/Fonts/Roboto-Light.ttf
new file mode 100644
index 0000000..d43e943
Binary files /dev/null and b/Effector.Plugin.Lib/Resources/Fonts/Roboto-Light.ttf differ
diff --git a/Effector.Plugin.Lib/Resources/Fonts/Roboto-Regular.ttf b/Effector.Plugin.Lib/Resources/Fonts/Roboto-Regular.ttf
new file mode 100644
index 0000000..7d9a6c4
Binary files /dev/null and b/Effector.Plugin.Lib/Resources/Fonts/Roboto-Regular.ttf differ
diff --git a/Effector.Plugin.Lib/Themes/Generic.xaml b/Effector.Plugin.Lib/Themes/Generic.xaml
new file mode 100644
index 0000000..7886ec9
--- /dev/null
+++ b/Effector.Plugin.Lib/Themes/Generic.xaml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
diff --git a/Effector.Plugin.Lib/TitleBar/TitleBarV.xaml b/Effector.Plugin.Lib/TitleBar/TitleBarV.xaml
new file mode 100644
index 0000000..7aab6f0
--- /dev/null
+++ b/Effector.Plugin.Lib/TitleBar/TitleBarV.xaml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Effector.Plugin.Lib/TitleBar/TitleBarV.xaml.vb b/Effector.Plugin.Lib/TitleBar/TitleBarV.xaml.vb
new file mode 100644
index 0000000..ee0dbae
--- /dev/null
+++ b/Effector.Plugin.Lib/TitleBar/TitleBarV.xaml.vb
@@ -0,0 +1,3 @@
+Public Class TitleBar
+
+End Class
diff --git a/Effector.Plugin.Lib/Utility/Command.vb b/Effector.Plugin.Lib/Utility/Command.vb
new file mode 100644
index 0000000..f9e3baf
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/Command.vb
@@ -0,0 +1,69 @@
+
+'''
+''' A command whose sole purpose is to
+''' relay its functionality to other
+''' objects by invoking delegates. The
+''' default return value for the CanExecute
+''' method is 'true'.
+'''
+Public Class Command
+ Implements ICommand
+
+#Region "Fields"
+
+ Private ReadOnly _execute As Action(Of Object)
+ Private ReadOnly _canExecute As Predicate(Of Object)
+
+#End Region ' Fields
+
+#Region "Constructors"
+
+ '''
+ ''' Creates a new command that can always execute.
+ '''
+ ''' The execution logic.
+ Public Sub New(ByVal execute As Action(Of Object))
+ Me.New(execute, Nothing)
+ End Sub
+
+ '''
+ ''' Creates a new command.
+ '''
+ ''' The execution logic.
+ ''' The execution status logic.
+ Public Sub New(ByVal execute As Action(Of Object), ByVal canExecute As Predicate(Of Object))
+ If execute Is Nothing Then
+ Throw New ArgumentNullException("execute")
+ End If
+
+ _execute = execute
+ _canExecute = canExecute
+ End Sub
+
+#End Region ' Constructors
+
+#Region "ICommand Members"
+
+ _
+ Public Function CanExecute(ByVal parameter As Object) As Boolean Implements ICommand.CanExecute
+ Return If(_canExecute Is Nothing, True, _canExecute(parameter))
+ End Function
+
+ Public Custom Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged
+ AddHandler(ByVal value As EventHandler)
+ AddHandler CommandManager.RequerySuggested, value
+ End AddHandler
+ RemoveHandler(ByVal value As EventHandler)
+ RemoveHandler CommandManager.RequerySuggested, value
+ End RemoveHandler
+ RaiseEvent(ByVal sender As System.Object, ByVal e As System.EventArgs)
+ End RaiseEvent
+ End Event
+
+ Public Sub Execute(ByVal parameter As Object) Implements ICommand.Execute
+ _execute(parameter)
+ End Sub
+
+#End Region ' ICommand Members
+
+End Class
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/Utility/ExecProcessManager.vb b/Effector.Plugin.Lib/Utility/ExecProcessManager.vb
new file mode 100644
index 0000000..3236005
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/ExecProcessManager.vb
@@ -0,0 +1,649 @@
+Imports System.IO
+Imports System.Threading
+Imports MS.Internal
+Imports Effector.Plugin.Lib.ThreadData
+Imports System.Windows.Threading
+Imports Effector.Plugin.Lib
+
+Public Class ExecProcessManager
+
+ Public Event m_AllArgsProcessed()
+
+ Public Enum ExecutionThreadStatuses As Integer
+ RUNNING = 1
+ STOPPED = 2
+ End Enum
+
+ Private Enum ProcessManagerStates
+ NULL = 0
+ OPEN = 1
+ CLOSE = 2
+ End Enum
+
+ Private m_ProcessManagerTimer As New DispatcherTimer
+ Private m_ProcessManagerState As ProcessManagerStates
+ Private m_ProcessManagerV As ProcessManagerV
+ Public ReadOnly Property ProcessManagerV As ProcessManagerV
+ Get
+ Return m_ProcessManagerV
+ End Get
+ End Property
+
+ ' riferimento al thread principale
+ Private m_ExecutionThread As Thread
+ Private m_ExecutionThreadStatus As ExecutionThreadStatuses = ExecutionThreadStatuses.STOPPED
+ Public ReadOnly Property ExecutionThreadStatus As ExecutionThreadStatuses
+ Get
+ Return m_ExecutionThreadStatus
+ End Get
+ End Property
+ ' array dei thread
+ Private m_ThreadList As Thread()
+ ' array dei dati dei thread
+ Private m_ThreadDataList As ThreadData()
+ Friend ReadOnly Property ThreadDataList As ThreadData()
+ Get
+ Return m_ThreadDataList
+ End Get
+ End Property
+ ' variabile che ferma i processi
+ Private m_bStopProcess As Boolean = False
+ ' variabile che conferma chiusura dei processi
+ Private m_bExecutionThreadStoped As Boolean = False
+ ' numero massimo di istanze del cam
+ Private m_MaxCamInstances As Integer = 1
+ ' nome dell'eseguibile da lanciare
+ Private m_sProcessFileName As String = ""
+ ' stringa di argomenti dell'eseguibile da lanciare
+ Private m_sProcessArguments As String = ""
+ ' coda delle cose da eseguire
+ Private ArgumentsQueueLock As New Object
+ Private m_ArgumentsQueue As New Queue(Of ProcessArgs)
+ Public ReadOnly Property ArgumentsQueue As Queue(Of ProcessArgs)
+ Get
+ Return m_ArgumentsQueue
+ End Get
+ End Property
+ ' coda dei risultati
+ Private ArgumentsResultQueueLock As New Object
+ Private m_ArgumentsResultQueue As New Queue(Of ProcessArgsResult)
+ Public ReadOnly Property ArgumentsResultQueue As Queue(Of ProcessArgsResult)
+ Get
+ Return m_ArgumentsResultQueue
+ End Get
+ End Property
+
+ ' funzione che richiede prossimo elemento da processare
+ Private m_delGetNextProcessArgs As Func(Of ProcessArgs)
+ Public Sub SetGetNextProcessArgs(GetNextProcessArgs As Func(Of ProcessArgs))
+ m_delGetNextProcessArgs = GetNextProcessArgs
+ End Sub
+ ' funzione di pre processing dell'elemento
+ Private m_delPreProcess As Func(Of ProcessArgs, ProcessArgs)
+ Public Sub SetPreProcess(PreProcess As Func(Of ProcessArgs, ProcessArgs))
+ m_delPreProcess = PreProcess
+ End Sub
+ ' funzione di post processing dell'elemento
+ Private m_delPostProcess As Action(Of ProcessArgsResult)
+ Public Sub SetPostProcess(PostProcess As Action(Of ProcessArgsResult))
+ m_delPostProcess = PostProcess
+ End Sub
+
+ Private m_nExecutedArgsCounter As Integer = 0
+ Public ReadOnly Property nExecutedArgsCounter As Integer
+ Get
+ Return m_nExecutedArgsCounter
+ End Get
+ End Property
+
+ Public ReadOnly Property nArgsInQueue As Integer
+ Get
+ Return ArgumentsQueueCount() + nCalculatingProcesses
+ End Get
+ End Property
+
+ Public ReadOnly Property nCalculatingProcesses As Integer
+ Get
+ Return ThreadDataList.Count(Function(x) Not IsNothing(x) AndAlso x.ProcessStatus = ProcessStatuses.WAITINGANSWER)
+ End Get
+ End Property
+
+#Region "CONSTRUCTORS"
+
+ Sub New(sProcessFileName As String, sProcessArguments As String)
+ m_sProcessFileName = sProcessFileName
+ m_sProcessArguments = sProcessArguments
+ m_ProcessManagerTimer.Interval = New TimeSpan(0, 0, 1)
+ AddHandler m_ProcessManagerTimer.Tick, AddressOf ProcessManagerTimer_Tick
+ m_ProcessManagerTimer.Start()
+ End Sub
+
+#End Region ' CONSTRUCTORS
+
+ Private Sub ProcessManagerTimer_Tick(sender As Object, e As EventArgs)
+ Select Case m_ProcessManagerState
+ Case ProcessManagerStates.OPEN
+ ' se in debug
+ If GetPluginPrivateProfileInt(S_DEBUG, K_EXECUTEWINDOW, 0) = 1 Then
+ ' creo finestra statistiche processi
+ m_ProcessManagerV = New ProcessManagerV(Application.Current.MainWindow, New ProcessManagerVM(Me))
+ ProcessManagerV.Show()
+ m_ProcessManagerState = ProcessManagerStates.NULL
+ End If
+ Case ProcessManagerStates.CLOSE
+ ' chiudo finestra statistiche processi
+ If Not IsNothing(m_ProcessManagerV) Then
+ ProcessManagerV.Close()
+ m_ProcessManagerV = Nothing
+ End If
+ m_nExecutedArgsCounter = 0
+ m_ProcessManagerState = ProcessManagerStates.NULL
+ End Select
+ End Sub
+
+ Public Function ArgumentsEnqueue(ProcessArgs As ProcessArgs) As Boolean
+ If ProcessArgs.nId <= 0 OrElse String.IsNullOrWhiteSpace(ProcessArgs.sArgs) Then Return False
+ SyncLock ArgumentsQueueLock
+ m_ArgumentsQueue.Enqueue(ProcessArgs)
+ End SyncLock
+ Return True
+ End Function
+
+ Public Function ArgumentsDequeue() As ProcessArgs
+ Dim DequeueProcessArgs As ProcessArgs = Nothing
+ SyncLock ArgumentsQueueLock
+ If m_ArgumentsQueue.Count > 0 Then
+ DequeueProcessArgs = m_ArgumentsQueue.Dequeue()
+ End If
+ End SyncLock
+ Return DequeueProcessArgs
+ End Function
+
+ Public Function ArgumentsQueueCount() As Integer
+ Dim nCount As Integer = 0
+ SyncLock ArgumentsQueueLock
+ nCount = m_ArgumentsQueue.Count
+ End SyncLock
+ Return nCount
+ End Function
+
+ Public Function ArgumentsResultEnqueue(ProcessArgsResult As ProcessArgsResult) As Boolean
+ SyncLock ArgumentsResultQueueLock
+ m_ArgumentsResultQueue.Enqueue(ProcessArgsResult)
+ End SyncLock
+ Return True
+ End Function
+
+ Public Function ArgumentsResultDequeue() As ProcessArgsResult
+ Dim DequeueProcessArgsResult As ProcessArgsResult = Nothing
+ SyncLock ArgumentsResultQueueLock
+ If m_ArgumentsResultQueue.Count > 0 Then
+ DequeueProcessArgsResult = m_ArgumentsResultQueue.Dequeue()
+ End If
+ End SyncLock
+ Return DequeueProcessArgsResult
+ End Function
+
+ Public Function ArgumentsResultQueueCount() As Integer
+ Dim nCount As Integer = 0
+ SyncLock ArgumentsResultQueueLock
+ nCount = m_ArgumentsResultQueue.Count
+ End SyncLock
+ Return nCount
+ End Function
+
+ Public Sub SetMaxCamInstances(nValue As Integer)
+ ' Numero di core logici da utilizzare (minimo tra presenti sul PC e imposti da INI)
+ Dim nMaxThread As Integer = Math.Min(Environment.ProcessorCount, nValue)
+ m_MaxCamInstances = nMaxThread
+ End Sub
+
+ ' funzione che avvia thread principale
+ Public Sub StartExecutionThread()
+ If m_ExecutionThreadStatus = ExecutionThreadStatuses.RUNNING Then Return
+ m_bStopProcess = False
+ m_bExecutionThreadStoped = False
+ m_ExecutionThread = New Thread(Sub()
+ ExecutionProcess()
+ End Sub)
+
+ m_ExecutionThread.SetApartmentState(ApartmentState.STA)
+ ' avvio thread di gestione della macchina che avvia la connessione
+ m_ExecutionThread.Start()
+
+ m_ExecutionThreadStatus = ExecutionThreadStatuses.RUNNING
+ ' lancio apertura finestra statistiche processi
+ m_ProcessManagerState = ProcessManagerStates.OPEN
+ End Sub
+
+ Public Sub StopExecutionThread()
+ If m_ExecutionThreadStatus = ExecutionThreadStatuses.STOPPED Then Return
+ m_bStopProcess = True
+ While Not m_bExecutionThreadStoped
+ Thread.Sleep(100)
+ End While
+ If Not IsNothing(m_ExecutionThread) Then
+ m_ExecutionThread.Abort()
+ While Not m_ExecutionThread.ThreadState = ThreadState.Aborted
+ Thread.Sleep(100)
+ End While
+ m_ExecutionThread = Nothing
+ End If
+ m_ThreadList = Nothing
+ m_ExecutionThreadStatus = ExecutionThreadStatuses.STOPPED
+ ' lancio chiusura finestra statistiche processi
+ m_ProcessManagerState = ProcessManagerStates.CLOSE
+ End Sub
+
+ ' funzione di esecuzione del thread principale che gestice i processi
+ Private Sub ExecutionProcess()
+ Dim bStopMainProcess As Boolean = False
+ Dim nStartingProc As Integer = 0
+ While Not bStopMainProcess
+ bStopMainProcess = m_bStopProcess
+ ' se processo fermato, fermo i thread
+ If bStopMainProcess Then
+ If Not IsNothing(m_ThreadList) AndAlso m_ThreadList.Count > 0 AndAlso Not IsNothing(m_ThreadList(0)) Then
+ ' li fermo
+ m_bStopProcess = True
+ ' verifico siano terminati
+ Dim bOneNotEnded As Boolean = True
+ While bOneNotEnded
+ bOneNotEnded = False
+ For Each Thread In m_ThreadList
+ If Not IsNothing(Thread) Then
+ If Thread.IsAlive Then
+ bOneNotEnded = True
+ End If
+ End If
+ Next
+ End While
+ ' pulisco la lista
+ For ThreadIndex = 0 To m_ThreadList.Count - 1
+ m_ThreadList(ThreadIndex) = Nothing
+ Next
+ m_bStopProcess = False
+ End If
+ m_bExecutionThreadStoped = True
+ Return
+ End If
+ ' se lista processi nulla o vuota, li faccio partire
+ If (IsNothing(m_ThreadList) OrElse m_ThreadList.Count = 0) Then
+ m_ThreadList = New Thread(m_MaxCamInstances - 1) {}
+ m_ThreadDataList = New ThreadData(m_MaxCamInstances - 1) {}
+ For nThreadIndex = 0 To m_MaxCamInstances - 1
+ Dim ThreadId As Integer = nThreadIndex
+ m_ThreadList(nThreadIndex) = New Thread(Sub()
+ ThreadFunction(ThreadId)
+ End Sub)
+ m_ThreadList(nThreadIndex).SetApartmentState(ApartmentState.STA)
+ ' avvio thread di gestione della macchina che avvia la connessione
+ m_ThreadList(nThreadIndex).Start()
+ Thread.Sleep(100)
+ Next
+ End If
+ ' se qualche processo in stop, lo faccio ripartire
+ For ThreadIndex = 0 To m_ThreadList.Count - 1
+ If ThreadIndex < m_ThreadList.Count Then
+ Dim Thread = m_ThreadList(ThreadIndex)
+ If Not IsNothing(Thread) Then
+ If Thread.ThreadState = ThreadState.Stopped OrElse
+ Thread.ThreadState = ThreadState.Aborted OrElse
+ Thread.ThreadState = ThreadState.Suspended OrElse
+ (Not m_ThreadDataList(ThreadIndex).ProcessStatus = ProcessStatuses.TOBESTARTED AndAlso
+ (IsNothing(m_ThreadDataList(ThreadIndex).Process) OrElse
+ (Not IsNothing(m_ThreadDataList(ThreadIndex).Process) AndAlso m_ThreadDataList(ThreadIndex).Process.HasExited))) Then
+ ' inserire un ritardo di rilancio?
+ ' lo chiudo e rilancio
+ 'Thread.Sleep(500)
+ Thread.Abort()
+ Thread.Sleep(100)
+ While Not Thread.ThreadState = ThreadState.Aborted
+ Thread.Sleep(100)
+ End While
+ Thread = Nothing
+ Dim ThreadId As Integer = ThreadIndex
+ m_ThreadList(ThreadIndex) = New Thread(Sub()
+ ThreadFunction(ThreadId)
+ End Sub)
+ m_ThreadList(ThreadIndex).SetApartmentState(ApartmentState.STA)
+ ' avvio thread di gestione della macchina che avvia la connessione
+ m_ThreadList(ThreadIndex).Start()
+ End If
+ Else
+ Dim ThreadId As Integer = ThreadIndex
+ If ThreadIndex < m_ThreadList.Count Then
+ m_ThreadList(ThreadIndex) = New Thread(Sub()
+ ThreadFunction(ThreadId)
+ End Sub)
+ m_ThreadList(ThreadIndex).SetApartmentState(ApartmentState.STA)
+ ' avvio thread di gestione della macchina che avvia la connessione
+ m_ThreadList(ThreadIndex).Start()
+ End If
+ End If
+ End If
+ Next
+ ' verifico se coda vuota e tutti i processi hanno finito
+ Dim nQueueArgs As Integer = 0
+ SyncLock ArgumentsQueueLock
+ nQueueArgs = m_ArgumentsQueue.Count
+ End SyncLock
+ If nQueueArgs = 0 Then
+ Dim bProcessWaiting As Boolean = False
+ For Each ThreadData In m_ThreadDataList
+ If ThreadData.ProcessStatus = ProcessStatuses.WAITINGANSWER OrElse ThreadData.ProcessStatus = ProcessStatuses.ANSWERRECEIVED Then
+ bProcessWaiting = True
+ Exit For
+ End If
+ Next
+ If Not bProcessWaiting Then
+ ' creo thread per lanciare evento asincrono di fine calcolo
+ Dim AllArgsProcessedThread = New Thread(Sub()
+ RaiseEvent m_AllArgsProcessed()
+ End Sub)
+ AllArgsProcessedThread.SetApartmentState(ApartmentState.STA)
+ AllArgsProcessedThread.Start()
+ End If
+ End If
+ Thread.Sleep(1000)
+ End While
+ End Sub
+
+ ' funzione di esecuzione del singolo processo che comunica con il programma
+ Private Sub ThreadFunction(ThreadIndex As Integer)
+ Dim MyThreadData As New ThreadData
+ m_ThreadDataList(ThreadIndex) = MyThreadData
+ 'Dim CurrThreadStat As New ThreadStat(ThreadIndex, DateTime.Now)
+ 'HistoryThreadDataList.Add(CurrThreadStat)
+ 'MyThreadData.SetThreadStat(CurrThreadStat)
+ 'Dim sDrive As String = "c" ' If(ThreadIndex Mod 2 = 0, "A", "B")
+ 'Dim sCurrDdfDir As String = sDrive & ":\EgtData\WebDoor\Ddf"
+ 'Dim stopWatch As New Stopwatch()
+ 'Dim lExeTime As Long = 0
+ 'Dim lOtherTime As Long = 0
+
+ ' avvio processo
+ Dim Proc As Process = New Process()
+ Proc.StartInfo.FileName = m_sProcessFileName
+ Proc.StartInfo.RedirectStandardInput = True
+ Proc.StartInfo.RedirectStandardOutput = True
+ Proc.StartInfo.Arguments = ThreadIndex.ToString() & " " & m_sProcessArguments
+ Proc.StartInfo.UseShellExecute = False
+ Proc.StartInfo.CreateNoWindow = True
+ AddHandler Proc.OutputDataReceived, AddressOf Thread_OutputDataReceived
+
+ If Proc.Start() Then
+ 'Dim CurrPocStat As New ProcStat(DateTime.Now)
+ 'CurrThreadStat.ProcExecutionList.Add(CurrPocStat)
+ Proc.BeginOutputReadLine()
+ MyThreadData.SetProcess(Proc)
+ MyThreadData.SetProcessStatus(ProcessStatuses.NULL)
+
+ 'Dim nProc0Wait As Integer = 0
+ ' ciclo per leggere coda ed eseguire
+ While Not m_bStopProcess AndAlso Not Proc.HasExited
+ Select Case MyThreadData.ProcessStatus
+ Case ThreadData.ProcessStatuses.NULL
+ 'MyThreadData.SetThreadOperation(ThreadOperations.WaitingData)
+ ' se c'e' qualcosa da processare
+ 'Dim nNumTaskToProcess As Integer = 0
+ 'If ThreadIndex = 0 Then
+ ' nNumTaskToProcess = currWDC.numTask2proc
+ ' If nNumTaskToProcess > 0 Then
+ ' If Not m_bCheckOrder Then m_bCheckOrder = True
+ ' Else
+ ' If m_bCheckOrder Then m_bCheckOrder = False
+ ' Thread.Sleep(100)
+ ' End If
+ 'ElseIf m_bCheckOrder Then
+ ' nNumTaskToProcess = currWDC.numTask2proc
+ ' If nNumTaskToProcess = 0 Then
+ ' m_bCheckOrder = False
+ ' End If
+ 'End If
+ Dim NextProcessArgs As ProcessArgs = Nothing
+ If Not IsNothing(m_delGetNextProcessArgs) Then
+ NextProcessArgs = m_delGetNextProcessArgs()
+ Else
+ NextProcessArgs = ArgumentsDequeue()
+ End If
+
+ If Not IsNothing(NextProcessArgs) AndAlso NextProcessArgs.nId > 0 AndAlso Not String.IsNullOrWhiteSpace(NextProcessArgs.sArgs) Then
+ If Not IsNothing(m_delPreProcess) Then
+ NextProcessArgs = m_delPreProcess(NextProcessArgs)
+ End If
+ MyThreadData.SetCurrRequest(NextProcessArgs)
+ Proc.StandardInput.WriteLine(ThreadIndex & "," & NextProcessArgs.sArgs)
+ MyThreadData.SetProcessStatus(ThreadData.ProcessStatuses.WAITINGANSWER)
+ End If
+ 'If m_bCheckOrder Then
+ ' Dim LastRequest As Dictionary(Of String, CalcReqtDTO) = currWDC.queueList(1)
+ ' If LastRequest.Count > 0 Then
+ ' MyThreadData.SetThreadOperation(ThreadOperations.FoundRequest)
+
+ ' Dim ConvItem As KeyValuePair(Of String, String)
+ ' ConvItem = New KeyValuePair(Of String, String)(LastRequest.First().Key, LastRequest.First().Value.DDF)
+ ' MyThreadData.SetCurrRequest(ConvItem)
+
+ ' ' vecchia versione
+ ' 'MyThreadData.SetCurrRequest(LastRequest.First())
+
+ ' Dim Item As KeyValuePair(Of String, String) = MyThreadData.CurrRequest
+ ' Dim bOk As Boolean = Not IsNothing(Item)
+ ' If bOk Then
+
+ ' ' avvio cronometro
+ ' 'stopWatch.Reset()
+ ' stopWatch.Restart()
+ ' ' svuoto vecchio set file della porta richiesta
+ ' Dim fileList As String() = Directory.GetFiles(sCurrDdfDir, Item.Key + ".*")
+ ' ' elimino vecchi
+ ' If Not IsNothing(fileList) Then
+ ' For Each sFile In fileList
+ ' Try
+ ' File.Delete(sFile)
+ ' Catch ex As Exception
+ ' End Try
+ ' Next
+ ' End If
+
+ ' ' scrivo ddf
+ ' MyThreadData.SetThreadOperation(ThreadOperations.WritingDdf)
+ ' MyThreadData.SetDdfPath(sCurrDdfDir & "\" & Item.Key & ".ddf")
+ ' Dim sDdfPath As String = MyThreadData.sDdfPath
+ ' Try
+ ' File.WriteAllText(sDdfPath, Item.Value)
+ ' Catch ex As Exception
+ ' bOk = False
+ ' End Try
+
+ ' If bOk Then
+ ' MyThreadData.SetThreadOperation(ThreadOperations.ProcessingDdf)
+
+ ' Proc.StandardInput.WriteLine(ThreadIndex & "," & sDdfPath)
+
+ ' MyThreadData.SetWaitProcAnswer(ThreadData.ProcComm.WaitingAnswer)
+ ' End If
+ ' End If
+ ' Else
+ ' Thread.Sleep(100)
+ ' End If
+ 'Else
+ ' Thread.Sleep(100)
+ 'End If
+ Case ThreadData.ProcessStatuses.WAITINGANSWER
+ Thread.Sleep(10)
+ Case ThreadData.ProcessStatuses.ANSWERRECEIVED
+ Dim NewProcessArgsResult As New ProcessArgsResult(MyThreadData.CurrRequest, MyThreadData.nProcResult)
+ If Not IsNothing(m_delPostProcess) Then
+ m_delPostProcess(NewProcessArgsResult)
+ End If
+ m_nExecutedArgsCounter += 1
+ ArgumentsResultEnqueue(NewProcessArgsResult)
+ 'Dim Item As ProcessArgs = MyThreadData.CurrRequest
+ 'Dim sDdfPath As String = MyThreadData.sDdfPath
+ 'Dim bOk As Boolean = True
+ '' salvo exe time...
+ 'stopWatch.Stop()
+ 'lExeTime = stopWatch.ElapsedMilliseconds
+ 'stopWatch.Restart()
+ 'Dim procResults As New List(Of CalcResultDTO)
+ 'Dim currRes As New CalcResultDTO
+ 'Dim fContent As String = ""
+ 'MyThreadData.SetThreadOperation(ThreadOperations.ReadingSvg)
+ '' verifico esistenza file svg e lo carico
+ 'bOk = GetFileContent(Path.ChangeExtension(sDdfPath, "svg"), fContent)
+ '' !!! ToDo: inserire TIPO di richiesta secondo quanto ricevuto....
+ '' invio risposta
+ 'currRes.Validated = MyThreadData.nProcResult = 0 AndAlso bOk
+ 'currRes.DoorIdVers = Item.Key
+ '' per ora cablato a svg, prendere da MimeType richiesta...
+ 'currRes.MimeType = "svg"
+
+ '' se NON fosse validato --> messo il messaggio...
+ 'If (currRes.Validated) Then
+ ' currRes.RawContent = fContent
+ 'Else
+ ' bOk = GetFileContent(Path.ChangeExtension(sDdfPath, "txt"), fContent)
+ ' currRes.ErrorMsg = fContent
+ 'End If
+ 'MyThreadData.SetThreadOperation(ThreadOperations.SendResult)
+
+ 'procResults.Add(currRes)
+ 'Dim respPut As String = currWDC.SendProcResults(procResults)
+
+ 'stopWatch.Stop()
+ 'lOtherTime = stopWatch.ElapsedMilliseconds
+ 'CurrPocStat.IncrementDoneRequest()
+ '' aggiorno thread display...
+ 'UpdateThreadList(Item.Key, lExeTime, lOtherTime)
+ '' cambio nomi file generati in old
+ 'Dim OldSvg As String = Path.ChangeExtension(sDdfPath, "svg")
+ 'Dim NewSvg As String = Path.GetDirectoryName(sDdfPath) & "\" & Path.GetFileNameWithoutExtension(sDdfPath) & "_old.svg"
+ 'Try
+ ' File.Delete(NewSvg)
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Delete(Path.ChangeExtension(NewSvg, "txt"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Delete(Path.ChangeExtension(NewSvg, "log"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Delete(Path.ChangeExtension(NewSvg, "nge"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Delete(Path.ChangeExtension(NewSvg, "ddf"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Move(OldSvg, NewSvg)
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Move(Path.ChangeExtension(OldSvg, "txt"), Path.ChangeExtension(NewSvg, "txt"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Move(Path.ChangeExtension(OldSvg, "log"), Path.ChangeExtension(NewSvg, "log"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Move(Path.ChangeExtension(OldSvg, "nge"), Path.ChangeExtension(NewSvg, "nge"))
+ 'Catch ex As Exception
+ 'End Try
+ 'Try
+ ' File.Move(Path.ChangeExtension(OldSvg, "ddf"), Path.ChangeExtension(NewSvg, "ddf"))
+ 'Catch ex As Exception
+ 'End Try
+ MyThreadData.SetProcessStatus(ThreadData.ProcessStatuses.NULL)
+ End Select
+
+ End While
+ ' CurrPocStat.SetStopProc(DateTime.Now)
+ If m_bStopProcess Then
+ Proc.StandardInput.WriteLine("quit")
+ End If
+ End If
+
+ ' CurrThreadStat.SetStopThread(DateTime.Now)
+ MyThreadData.SetProcess(Nothing)
+ ' MyThreadData.SetThreadOperation(ThreadOperations.Closed)
+
+ End Sub
+
+ Private Sub Thread_OutputDataReceived(sender As Object, e As DataReceivedEventArgs)
+ Dim sResult As String = e.Data
+ If Not String.IsNullOrWhiteSpace(sResult) AndAlso sResult.StartsWith("#42315#,") Then
+ Dim Results() As String = sResult.Split(","c)
+ If Results.Count >= 2 Then
+ Dim nIndex As Integer = -1
+ Dim nResult As Integer = -1
+ Dim dResult As Integer = -1
+ If Integer.TryParse(Results(1), nIndex) AndAlso nIndex >= 0 Then
+ If Integer.TryParse(Results(2), nResult) AndAlso nResult >= 0 Then
+ m_ThreadDataList(nIndex).SetProcResult(nResult)
+ ElseIf StringToDouble(Results(2), dResult) AndAlso dResult >= 0 Then
+ nResult = Math.Floor(dResult)
+ m_ThreadDataList(nIndex).SetProcResult(nResult)
+ End If
+ m_ThreadDataList(nIndex).SetProcessStatus(ThreadData.ProcessStatuses.ANSWERRECEIVED)
+ End If
+ End If
+ End If
+ End Sub
+
+End Class
+
+Public Class ProcessArgs
+
+ Private m_nId As Integer
+ Public ReadOnly Property nId As Integer
+ Get
+ Return m_nId
+ End Get
+ End Property
+
+ Private m_sArgs As String
+ Public ReadOnly Property sArgs As String
+ Get
+ Return m_sArgs
+ End Get
+ End Property
+
+ Sub New(nId As Integer, sArgs As String)
+ m_nId = nId
+ m_sArgs = sArgs
+ End Sub
+
+End Class
+
+Public Class ProcessArgsResult
+
+ Private m_ProcessArgs As ProcessArgs
+ Public ReadOnly Property ProcessArgs As ProcessArgs
+ Get
+ Return m_ProcessArgs
+ End Get
+ End Property
+
+ Private m_nResult As Integer
+ Public ReadOnly Property nResult As Integer
+ Get
+ Return m_nResult
+ End Get
+ End Property
+ Public Sub SetResult(nResult As Integer)
+ m_nResult = nResult
+ End Sub
+
+ Sub New(ProcessArgs As ProcessArgs, nResult As Integer)
+ m_ProcessArgs = ProcessArgs
+ m_nResult = nResult
+ End Sub
+
+End Class
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/Utility/GenInterface.vb b/Effector.Plugin.Lib/Utility/GenInterface.vb
new file mode 100644
index 0000000..f7bf24d
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/GenInterface.vb
@@ -0,0 +1,76 @@
+Imports System.Globalization
+Imports System.Runtime.InteropServices
+Imports System.Text
+
+Public Module GenInterface
+
+ '-------------------------------- IniFile : Get --------------------------------------------------
+
+ Public Function GetPrivateProfileInt(
+ lpAppName As String,
+ lpKeyName As String,
+ nDefault As Integer,
+ lpFileName As String) As Integer
+ End Function
+
+ Public Function GetPrivateProfileDouble(
+ lpAppName As String,
+ lpKeyName As String,
+ dDefault As Double,
+ lpFileName As String) As Double
+ Dim sValue As String = String.Empty
+ GetPrivateProfileString(lpAppName, lpKeyName, dDefault.ToString(), sValue, lpFileName)
+ Dim nPos As Integer = sValue.IndexOf(";")
+ If nPos >= 0 Then
+ sValue = sValue.Remove(nPos)
+ End If
+ Dim dValue As Double
+ If Not Double.TryParse(sValue, NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture, dValue) Then
+ dValue = dDefault
+ End If
+ Return dValue
+ End Function
+
+
+ Private Function GetPrivateProfileString(
+ lpAppName As String,
+ lpKeyName As String,
+ lpDefault As String,
+ lpReturnedString As StringBuilder,
+ nSize As Integer,
+ lpFileName As String) As Integer
+ End Function
+ Public Function GetPrivateProfileString(
+ lpAppName As String,
+ lpKeyName As String,
+ lpDefault As String,
+ ByRef lpString As String,
+ lpFileName As String) As Integer
+ Dim sb As New StringBuilder(1024)
+ Dim nRet As Integer = GetPrivateProfileString(lpAppName, lpKeyName, lpDefault, sb, sb.Capacity, lpFileName)
+ lpString = sb.ToString
+ Return nRet
+ End Function
+
+ '-------------------------------- IniFile : Write ------------------------------------------------
+
+ Public Function WritePrivateProfileString(
+ lpAppName As String,
+ lpKeyName As String,
+ lpString As String,
+ lpFileName As String) As Boolean
+ End Function
+
+ '-------------------------------- Windows --------------------------------------------------------
+ Public Enum SW As Integer
+ HIDE = 0
+ SHOWMAXIMIZED = 3
+ RESTORE = 9
+ End Enum
+
+
+ Public Function ShowWindow(hWnd As IntPtr, nCmdShow As Integer) As Boolean
+ End Function
+
+
+End Module
diff --git a/Effector.Plugin.Lib/Utility/IdNameStruct.vb b/Effector.Plugin.Lib/Utility/IdNameStruct.vb
new file mode 100644
index 0000000..656e028
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/IdNameStruct.vb
@@ -0,0 +1,97 @@
+Imports System.Collections.ObjectModel
+
+Public Structure IdNameStruct
+
+ Private m_Id As Integer
+ Public Property Id As Integer
+ Get
+ Return m_Id
+ End Get
+ Set(value As Integer)
+ m_Id = value
+ End Set
+ End Property
+
+ Private m_Name As String
+ Public Property Name As String
+ Get
+ Return m_Name
+ End Get
+ Set(value As String)
+ m_Name = value
+ End Set
+ End Property
+
+ Sub New(Id As Integer, Name As String)
+ m_Id = Id
+ m_Name = Name
+ End Sub
+
+ Public Overrides Function ToString() As String
+ Return Name
+ End Function
+
+ Public Shared Function IndFromId(Id As Integer, List As ObservableCollection(Of IdNameStruct)) As Integer
+ For i = 0 To List.Count - 1
+ If List(i).Id = Id Then Return i
+ Next
+ Return 0
+ End Function
+ Public Shared Function IndFromId(Id As Integer, List As List(Of IdNameStruct)) As Integer
+ For i = 0 To List.Count - 1
+ If List(i).Id = Id Then Return i
+ Next
+ Return 0
+ End Function
+
+ Public Shared Function IdFromInd(Ind As Integer, List As ObservableCollection(Of IdNameStruct)) As Integer
+ Return List(Ind).Id
+ End Function
+ Public Shared Function IdFromInd(Ind As Integer, List As List(Of IdNameStruct)) As Integer
+ Return List(Ind).Id
+ End Function
+
+ Public Shared Function IndFromId(Id As Integer, List As ObservableCollection(Of Object)) As Integer
+ For i = 0 To List.Count - 1
+ If TypeOf (List(i)) Is IdNameStruct AndAlso DirectCast(List(i), IdNameStruct).Id = Id Then
+ Return i
+ End If
+ Next
+ Return 0
+ End Function
+ Public Shared Function IndFromId(Id As Integer, List As List(Of Object)) As Integer
+ For i = 0 To List.Count - 1
+ If TypeOf (List(i)) Is IdNameStruct AndAlso DirectCast(List(i), IdNameStruct).Id = Id Then
+ Return i
+ End If
+ Next
+ Return 0
+ End Function
+
+ Public Shared Function IdFromInd(Ind As Integer, List As ObservableCollection(Of Object)) As Integer
+ If TypeOf (List(Ind)) Is IdNameStruct Then
+ Return DirectCast(List(Ind), IdNameStruct).Id
+ End If
+ Return 0
+ End Function
+ Public Shared Function IdFromInd(Ind As Integer, List As List(Of Object)) As Integer
+ If TypeOf (List(Ind)) Is IdNameStruct Then
+ Return DirectCast(List(Ind), IdNameStruct).Id
+ End If
+ Return 0
+ End Function
+
+ Public Shared Function IdFromName(Name As String, List As ObservableCollection(Of Object)) As Integer
+ For i = 0 To List.Count - 1
+ If DirectCast(List(i), IdNameStruct).Name = Name Then Return DirectCast(List(i), IdNameStruct).Id
+ Next
+ Return 0
+ End Function
+ Public Shared Function IdFromName(Name As String, List As List(Of Object)) As Integer
+ For i = 0 To List.Count - 1
+ If DirectCast(List(i), IdNameStruct).Name = Name Then Return DirectCast(List(i), IdNameStruct).Id
+ Next
+ Return 0
+ End Function
+
+End Structure
diff --git a/Effector.Plugin.Lib/Utility/IniFile.vb b/Effector.Plugin.Lib/Utility/IniFile.vb
new file mode 100644
index 0000000..0f6216a
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/IniFile.vb
@@ -0,0 +1,65 @@
+'----------------------------------------------------------------------------
+' EgalTech 2017-2017
+'----------------------------------------------------------------------------
+' File : IniFile.vb Data : 08.05.24 Versione : 2.6e1
+' Contenuto : Modulo IniFile per gestione lettura/scrittura da file INI.
+'
+'
+'
+' Modifiche : 08.05.24 ES Creazione modulo.
+'
+'
+'----------------------------------------------------------------------------
+
+
+Imports System.Collections.ObjectModel
+
+Public Module IniFile
+
+ Private m_sPath As String
+ Public ReadOnly Property sPath As String
+ Get
+ Return m_sPath
+ End Get
+ End Property
+ Public Sub SetIniFile(sPath)
+ m_sPath = sPath
+ End Sub
+
+ Public Function GetMainPrivateProfileInt(IpAppName As String, IpKeyName As String, nDefault As Integer) As Integer
+ Return GetPrivateProfileInt(IpAppName, IpKeyName, nDefault, m_sPath)
+ End Function
+
+ Public Function GetMainPrivateProfileDouble(IpAppName As String, IpKeyName As String, dDefault As Double) As Double
+ Return GetPrivateProfileDouble(IpAppName, IpKeyName, dDefault, m_sPath)
+ End Function
+
+ Public Function GetMainPrivateProfileString(IpAppName As String, IpKeyName As String, IpDefault As String, ByRef IpString As String) As Integer
+ Return GetPrivateProfileString(IpAppName, IpKeyName, IpDefault, IpString, m_sPath)
+ End Function
+
+ 'Public Function GetPrivateProfileLanguage(lpAppName As String, lpKeyName As String, lpFileName As String) As Language
+ ' Dim sVal As String = String.Empty
+ ' GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName)
+ ' Dim sItems() As String = sVal.Split(",".ToCharArray)
+ ' If sItems.Count() = 2 Then
+ ' Return New Language(sItems(0), sItems(1))
+ ' End If
+ ' Return Nothing
+ 'End Function
+
+ 'Public Function GetMainPrivateProfileLanguage(lpAppName As String, lpKeyName As String) As Language
+ ' Dim sVal As String = String.Empty
+ ' GetMainPrivateProfileString(lpAppName, lpKeyName, "", sVal)
+ ' Dim sItems() As String = sVal.Split(",".ToCharArray)
+ ' If sItems.Count() = 2 Then
+ ' Return New Language(sItems(0), sItems(1))
+ ' End If
+ ' Return Nothing
+ 'End Function
+
+ Public Function WriteMainPrivateProfileString(IpAppName As String, IpKeyName As String, ByRef IpString As String) As Boolean
+ Return WritePrivateProfileString(IpAppName, IpKeyName, IpString, m_sPath)
+ End Function
+
+End Module
diff --git a/Effector.Plugin.Lib/Utility/PluginIniFile.vb b/Effector.Plugin.Lib/Utility/PluginIniFile.vb
new file mode 100644
index 0000000..1a8dbe8
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/PluginIniFile.vb
@@ -0,0 +1,65 @@
+'----------------------------------------------------------------------------
+' EgalTech 2017-2017
+'----------------------------------------------------------------------------
+' File : IniFile.vb Data : 08.05.24 Versione : 2.6e1
+' Contenuto : Modulo IniFile per gestione lettura/scrittura da file INI.
+'
+'
+'
+' Modifiche : 08.05.24 ES Creazione modulo.
+'
+'
+'----------------------------------------------------------------------------
+
+
+Imports System.Collections.ObjectModel
+
+Public Module PluginIniFile
+
+ Private m_sPath As String
+ Public ReadOnly Property sPath As String
+ Get
+ Return m_sPath
+ End Get
+ End Property
+ Public Sub SetIniFile(sPath)
+ m_sPath = sPath
+ End Sub
+
+ Public Function GetPluginPrivateProfileInt(IpAppName As String, IpKeyName As String, nDefault As Integer) As Integer
+ Return GetPrivateProfileInt(IpAppName, IpKeyName, nDefault, m_sPath)
+ End Function
+
+ Public Function GetPluginPrivateProfileDouble(IpAppName As String, IpKeyName As String, dDefault As Double) As Double
+ Return GetPrivateProfileDouble(IpAppName, IpKeyName, dDefault, m_sPath)
+ End Function
+
+ Public Function GetPluginPrivateProfileString(IpAppName As String, IpKeyName As String, IpDefault As String, ByRef IpString As String) As Integer
+ Return GetPrivateProfileString(IpAppName, IpKeyName, IpDefault, IpString, m_sPath)
+ End Function
+
+ 'Public Function GetPrivateProfileLanguage(lpAppName As String, lpKeyName As String, lpFileName As String) As Language
+ ' Dim sVal As String = String.Empty
+ ' GetPrivateProfileString(lpAppName, lpKeyName, "", sVal, lpFileName)
+ ' Dim sItems() As String = sVal.Split(",".ToCharArray)
+ ' If sItems.Count() = 2 Then
+ ' Return New Language(sItems(0), sItems(1))
+ ' End If
+ ' Return Nothing
+ 'End Function
+
+ 'Public Function GetMainPrivateProfileLanguage(lpAppName As String, lpKeyName As String) As Language
+ ' Dim sVal As String = String.Empty
+ ' GetMainPrivateProfileString(lpAppName, lpKeyName, "", sVal)
+ ' Dim sItems() As String = sVal.Split(",".ToCharArray)
+ ' If sItems.Count() = 2 Then
+ ' Return New Language(sItems(0), sItems(1))
+ ' End If
+ ' Return Nothing
+ 'End Function
+
+ Public Function WritePluginPrivateProfileString(IpAppName As String, IpKeyName As String, ByRef IpString As String) As Boolean
+ Return WritePrivateProfileString(IpAppName, IpKeyName, IpString, m_sPath)
+ End Function
+
+End Module
diff --git a/Effector.Plugin.Lib/Utility/StringConversion.vb b/Effector.Plugin.Lib/Utility/StringConversion.vb
new file mode 100644
index 0000000..0a07106
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/StringConversion.vb
@@ -0,0 +1,66 @@
+Imports System.Globalization
+
+Public Module StringConversion
+
+ Public Function DoubleToString(ByVal dVal As Double, ByVal nNumDec As Integer) As String
+ Dim sFormat As String = "F" + Math.Abs(nNumDec).ToString()
+ Dim sVal As String = dVal.ToString(sFormat, CultureInfo.InvariantCulture)
+ If nNumDec > 0 Then
+ Return sVal.TrimEnd("0".ToCharArray()).TrimEnd(".".ToCharArray)
+ Else
+ Return sVal
+ End If
+ End Function
+
+ Public Function StringToDouble(ByVal sVal As String, ByRef dVal As Double) As Boolean
+ ' Return EgtLuaEvalNumExpr(sVal, dVal)
+ Return Double.TryParse(sVal, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, dVal)
+ End Function
+
+ 'Public Function StringToDoubleAdv(ByVal sVal As String, ByRef dVal As Double, Optional bEval As Boolean = False) As Boolean
+ ' If bEval Then
+ ' Return EgtLuaEvalNumExpr(sVal, dVal)
+ ' Else
+ ' Return Double.TryParse(sVal, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, dVal)
+ ' End If
+ 'End Function
+
+ Public Function StringToInt(sVal As String, ByRef nVal As Integer) As Boolean
+ Dim dVal As Double = 0
+ If Not StringToDouble(sVal, dVal) Then Return False
+ nVal = CInt(Math.Round(dVal))
+ Return True
+ End Function
+
+ 'Public Function LenToString(ByVal dVal As Double, ByVal nNumDec As Integer) As String
+ ' Return DoubleToString(EgtToUiUnits(dVal), nNumDec)
+ 'End Function
+
+ 'Public Function StringToLen(ByVal sVal As String, ByRef dVal As Double) As Boolean
+ ' If EgtLuaEvalNumExpr(sVal, dVal) Then
+ ' dVal = EgtFromUiUnits(dVal)
+ ' Return True
+ ' Else
+ ' Return False
+ ' End If
+ 'End Function
+
+ 'Public Function StringToLenAdv(ByVal sVal As String, ByRef dVal As Double, Optional bEval As Boolean = False) As Boolean
+ ' If bEval Then
+ ' If EgtLuaEvalNumExpr(sVal, dVal) Then
+ ' dVal = EgtFromUiUnits(dVal)
+ ' Return True
+ ' Else
+ ' Return False
+ ' End If
+ ' Else
+ ' If Double.TryParse(sVal, NumberStyles.Float, CultureInfo.InvariantCulture.NumberFormat, dVal) Then
+ ' dVal = EgtFromUiUnits(dVal)
+ ' Return True
+ ' Else
+ ' Return False
+ ' End If
+ ' End If
+ 'End Function
+
+End Module
diff --git a/Effector.Plugin.Lib/Utility/ThreadData.vb b/Effector.Plugin.Lib/Utility/ThreadData.vb
new file mode 100644
index 0000000..41f6c5e
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/ThreadData.vb
@@ -0,0 +1,90 @@
+Public Class ThreadData
+
+ 'Enum ThreadOperations As Integer
+ ' WaitingData = 1
+ ' FoundRequest = 2
+ ' WritingDdf = 3
+ ' ProcessingDdf = 4
+ ' ReadingSvg = 5
+ ' SendResult = 6
+ ' Closed = 10
+ 'End Enum
+
+ Public Enum ProcessStatuses As Integer
+ NULL = 0
+ WAITINGANSWER = 1
+ ANSWERRECEIVED = 2
+ TOBESTARTED = 10
+ End Enum
+
+ Private m_ProcessStatus As ProcessStatuses = ProcessStatuses.TOBESTARTED
+ Public ReadOnly Property ProcessStatus As ProcessStatuses
+ Get
+ Return m_ProcessStatus
+ End Get
+ End Property
+ Friend Sub SetProcessStatus(value As ProcessStatuses)
+ m_ProcessStatus = value
+ End Sub
+
+ Private m_CurrRequest As ProcessArgs
+ Public ReadOnly Property CurrRequest As ProcessArgs
+ Get
+ Return m_CurrRequest
+ End Get
+ End Property
+ Friend Sub SetCurrRequest(value As ProcessArgs)
+ m_CurrRequest = value
+ End Sub
+
+ 'Private m_sDdfPath As String
+ 'Public ReadOnly Property sDdfPath As String
+ ' Get
+ ' Return m_sDdfPath
+ ' End Get
+ 'End Property
+ 'Friend Sub SetDdfPath(value As String)
+ ' m_sDdfPath = value
+ 'End Sub
+
+ Private m_nProcResult As Integer
+ Public ReadOnly Property nProcResult As Integer
+ Get
+ Return m_nProcResult
+ End Get
+ End Property
+ Friend Sub SetProcResult(value As Integer)
+ m_nProcResult = value
+ End Sub
+
+ 'Private m_ThreadOperation As ThreadOperations
+ 'Public ReadOnly Property ThreadOperation As ThreadOperations
+ ' Get
+ ' Return m_ThreadOperation
+ ' End Get
+ 'End Property
+ 'Friend Sub SetThreadOperation(value As ThreadOperations)
+ ' m_ThreadOperation = value
+ 'End Sub
+
+ Private m_Process As Process
+ Public ReadOnly Property Process As Process
+ Get
+ Return m_Process
+ End Get
+ End Property
+ Friend Sub SetProcess(value As Process)
+ m_Process = value
+ End Sub
+
+ 'Private m_ThreadStat As ThreadStat
+ 'Public ReadOnly Property ThreadStat As ThreadStat
+ ' Get
+ ' Return m_ThreadStat
+ ' End Get
+ 'End Property
+ 'Friend Sub SetThreadStat(value As ThreadStat)
+ ' m_ThreadStat = value
+ 'End Sub
+
+End Class
\ No newline at end of file
diff --git a/Effector.Plugin.Lib/Utility/VMBase.vb b/Effector.Plugin.Lib/Utility/VMBase.vb
new file mode 100644
index 0000000..b2d5ce6
--- /dev/null
+++ b/Effector.Plugin.Lib/Utility/VMBase.vb
@@ -0,0 +1,12 @@
+Imports System.ComponentModel
+
+Public Class VMBase
+ Implements INotifyPropertyChanged
+
+ Public Event PropertyChanged(sender As Object, e As PropertyChangedEventArgs) Implements INotifyPropertyChanged.PropertyChanged
+
+ Public Sub NotifyPropertyChanged(propName As String)
+ RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
+ End Sub
+
+End Class
diff --git a/Effector.Plugin.Lib/app.manifest b/Effector.Plugin.Lib/app.manifest
new file mode 100644
index 0000000..df1bca8
--- /dev/null
+++ b/Effector.Plugin.Lib/app.manifest
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PerMonitor
+ true
+ true
+
+
+
+
+
+
+
+
diff --git a/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.dll b/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.dll
new file mode 100644
index 0000000..6fab0ba
Binary files /dev/null and b/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.dll differ
diff --git a/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.pdb b/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.pdb
new file mode 100644
index 0000000..1bf64e3
Binary files /dev/null and b/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.pdb differ
diff --git a/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.xml b/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.xml
new file mode 100644
index 0000000..3a9d20d
--- /dev/null
+++ b/Effector.Plugin.Lib/bin/Debug/Effector.Plugin.Lib.xml
@@ -0,0 +1,78 @@
+
+
+
+
+Effector.Plugin.Lib
+
+
+
+
+
+ A strongly-typed resource class, for looking up localized strings, etc.
+
+
+
+
+ Returns the cached ResourceManager instance used by this class.
+
+
+
+
+ Overrides the current thread's CurrentUICulture property for all
+ resource lookups using this strongly typed resource class.
+
+
+
+
+MultipleCopyWndV
+
+
+
+
+InitializeComponent
+
+
+
+
+ProcessManagerV
+
+
+
+
+InitializeComponent
+
+
+
+
+TitleBar
+
+
+
+
+InitializeComponent
+
+
+
+
+ A command whose sole purpose is to
+ relay its functionality to other
+ objects by invoking delegates. The
+ default return value for the CanExecute
+ method is 'true'.
+
+
+
+
+ Creates a new command that can always execute.
+
+ The execution logic.
+
+
+
+ Creates a new command.
+
+ The execution logic.
+ The execution status logic.
+
+
+
diff --git a/Effector.Plugin.Lib/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.vb b/Effector.Plugin.Lib/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.vb
new file mode 100644
index 0000000..a0e4a61
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/.NETFramework,Version=v4.7.2.AssemblyAttributes.vb
@@ -0,0 +1,7 @@
+'
+ Option Strict Off
+ Option Explicit On
+
+ Imports System
+ Imports System.Reflection
+
diff --git a/Effector.Plugin.Lib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache b/Effector.Plugin.Lib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
new file mode 100644
index 0000000..8f737c8
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.Resources.resources b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.Resources.resources
new file mode 100644
index 0000000..6c05a97
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.Resources.resources differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.dll b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.dll
new file mode 100644
index 0000000..6fab0ba
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.dll differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.g.resources b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.g.resources
new file mode 100644
index 0000000..edc732f
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.g.resources differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.pdb b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.pdb
new file mode 100644
index 0000000..1bf64e3
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.pdb differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.AssemblyReference.cache b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.AssemblyReference.cache
new file mode 100644
index 0000000..6129c9d
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.AssemblyReference.cache differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.CoreCompileInputs.cache b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..840fd5f
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+f0542cce302d0958c38ca15058ca24aded3d23622f2bc176ce5498d46b31d0b8
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.FileListAbsolute.txt b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.FileListAbsolute.txt
new file mode 100644
index 0000000..d10ccd4
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.FileListAbsolute.txt
@@ -0,0 +1,21 @@
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.vbproj.AssemblyReference.cache
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\TitleBar\TitleBarV.baml
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\MultipleCopyWnd\MultipleCopyWndV.g.vb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\TitleBar\TitleBarV.g.vb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\GeneratedInternalTypeHelper.g.vb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib_MarkupCompile.cache
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib_MarkupCompile.lref
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\bin\Debug\Effector.Plugin.Lib.dll
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\bin\Debug\Effector.Plugin.Lib.pdb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\bin\Debug\Effector.Plugin.Lib.xml
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\MultipleCopyWnd\MultipleCopyWndV.baml
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Themes\Generic.baml
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.g.resources
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.Resources.resources
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.vbproj.GenerateResource.cache
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.vbproj.CoreCompileInputs.cache
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.dll
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.xml
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\Effector.Plugin.Lib.pdb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\ProcessManager\ProcessManagerV.g.vb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\ProcessManager\ProcessManagerV.baml
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.GenerateResource.cache b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.GenerateResource.cache
new file mode 100644
index 0000000..e0ae2d3
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.vbproj.GenerateResource.cache differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.xml b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.xml
new file mode 100644
index 0000000..3a9d20d
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib.xml
@@ -0,0 +1,78 @@
+
+
+
+
+Effector.Plugin.Lib
+
+
+
+
+
+ A strongly-typed resource class, for looking up localized strings, etc.
+
+
+
+
+ Returns the cached ResourceManager instance used by this class.
+
+
+
+
+ Overrides the current thread's CurrentUICulture property for all
+ resource lookups using this strongly typed resource class.
+
+
+
+
+MultipleCopyWndV
+
+
+
+
+InitializeComponent
+
+
+
+
+ProcessManagerV
+
+
+
+
+InitializeComponent
+
+
+
+
+TitleBar
+
+
+
+
+InitializeComponent
+
+
+
+
+ A command whose sole purpose is to
+ relay its functionality to other
+ objects by invoking delegates. The
+ default return value for the CanExecute
+ method is 'true'.
+
+
+
+
+ Creates a new command that can always execute.
+
+ The execution logic.
+
+
+
+ Creates a new command.
+
+ The execution logic.
+ The execution status logic.
+
+
+
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.cache b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.cache
new file mode 100644
index 0000000..157fbb0
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.cache
@@ -0,0 +1,20 @@
+Effector.Plugin.Lib
+
+
+library
+VB
+.vb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\
+Effector.Plugin.Lib
+none
+false
+
+
+4-1904268581
+
+21736316138
+111190997905
+MultipleCopyWnd\MultipleCopyWndV.xaml;ProcessManager\ProcessManagerV.xaml;Themes\Generic.xaml;TitleBar\TitleBarV.xaml;
+
+False
+
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.i.cache b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.i.cache
new file mode 100644
index 0000000..9c2c2f2
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.i.cache
@@ -0,0 +1,20 @@
+Effector.Plugin.Lib
+
+
+library
+VB
+.vb
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\
+Effector.Plugin.Lib
+none
+false
+
+
+4-1904268581
+
+22-492149270
+111190997905
+MultipleCopyWnd\MultipleCopyWndV.xaml;ProcessManager\ProcessManagerV.xaml;Themes\Generic.xaml;TitleBar\TitleBarV.xaml;
+
+False
+
diff --git a/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.lref b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.lref
new file mode 100644
index 0000000..5f4e6a3
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/Effector.Plugin.Lib_MarkupCompile.lref
@@ -0,0 +1,6 @@
+C:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\obj\Debug\GeneratedInternalTypeHelper.g.vb
+
+FC:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\MultipleCopyWnd\MultipleCopyWndV.xaml;;
+FC:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\ProcessManager\ProcessManagerV.xaml;;
+FC:\EgtDev\Effector\Effector.Plugin.Lib\Effector.Plugin.Lib\Themes\Generic.xaml;;
+
diff --git a/Effector.Plugin.Lib/obj/Debug/GeneratedInternalTypeHelper.g.i.vb b/Effector.Plugin.Lib/obj/Debug/GeneratedInternalTypeHelper.g.i.vb
new file mode 100644
index 0000000..13af8ee
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/GeneratedInternalTypeHelper.g.i.vb
@@ -0,0 +1,65 @@
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+
+
+Namespace XamlGeneratedNamespace
+
+ '''
+ '''GeneratedInternalTypeHelper
+ '''
+ _
+ Public NotInheritable Class GeneratedInternalTypeHelper
+ Inherits System.Windows.Markup.InternalTypeHelper
+
+ '''
+ '''CreateInstance
+ '''
+ Protected Overrides Function CreateInstance(ByVal type As System.Type, ByVal culture As System.Globalization.CultureInfo) As Object
+ Return System.Activator.CreateInstance(type, ((System.Reflection.BindingFlags.[Public] Or System.Reflection.BindingFlags.NonPublic) _
+ Or (System.Reflection.BindingFlags.Instance Or System.Reflection.BindingFlags.CreateInstance)), Nothing, Nothing, culture)
+ End Function
+
+ '''
+ '''GetPropertyValue
+ '''
+ Protected Overrides Function GetPropertyValue(ByVal propertyInfo As System.Reflection.PropertyInfo, ByVal target As Object, ByVal culture As System.Globalization.CultureInfo) As Object
+ Return propertyInfo.GetValue(target, System.Reflection.BindingFlags.[Default], Nothing, Nothing, culture)
+ End Function
+
+ '''
+ '''SetPropertyValue
+ '''
+ Protected Overrides Sub SetPropertyValue(ByVal propertyInfo As System.Reflection.PropertyInfo, ByVal target As Object, ByVal value As Object, ByVal culture As System.Globalization.CultureInfo)
+ propertyInfo.SetValue(target, value, System.Reflection.BindingFlags.[Default], Nothing, Nothing, culture)
+ End Sub
+
+ '''
+ '''CreateDelegate
+ '''
+ Protected Overrides Function CreateDelegate(ByVal delegateType As System.Type, ByVal target As Object, ByVal handler As String) As System.[Delegate]
+ Return CType(target.GetType.InvokeMember("_CreateDelegate", (System.Reflection.BindingFlags.InvokeMethod _
+ Or (System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)), Nothing, target, New Object() {delegateType, handler}, Nothing),System.[Delegate])
+ End Function
+
+ '''
+ '''AddEventHandler
+ '''
+ Protected Overrides Sub AddEventHandler(ByVal eventInfo As System.Reflection.EventInfo, ByVal target As Object, ByVal handler As System.[Delegate])
+ eventInfo.AddEventHandler(target, handler)
+ End Sub
+ End Class
+End Namespace
+
diff --git a/Effector.Plugin.Lib/obj/Debug/GeneratedInternalTypeHelper.g.vb b/Effector.Plugin.Lib/obj/Debug/GeneratedInternalTypeHelper.g.vb
new file mode 100644
index 0000000..c65238f
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/GeneratedInternalTypeHelper.g.vb
@@ -0,0 +1,2 @@
+
+
diff --git a/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.baml b/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.baml
new file mode 100644
index 0000000..e99949b
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.baml differ
diff --git a/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.g.i.vb b/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.g.i.vb
new file mode 100644
index 0000000..6db280b
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.g.i.vb
@@ -0,0 +1,83 @@
+#ExternalChecksum("..\..\..\MultipleCopyWnd\MultipleCopyWndV.xaml","{8829d00f-11b8-4213-878b-770e8597ac16}","7939E0F2EC5733FCE5DB6F35D9229B219F841E25968F6CAD809031C8564156BE")
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+Imports Effector.Plugin.Lib
+Imports System
+Imports System.Diagnostics
+Imports System.Windows
+Imports System.Windows.Automation
+Imports System.Windows.Controls
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Data
+Imports System.Windows.Documents
+Imports System.Windows.Ink
+Imports System.Windows.Input
+Imports System.Windows.Markup
+Imports System.Windows.Media
+Imports System.Windows.Media.Animation
+Imports System.Windows.Media.Effects
+Imports System.Windows.Media.Imaging
+Imports System.Windows.Media.Media3D
+Imports System.Windows.Media.TextFormatting
+Imports System.Windows.Navigation
+Imports System.Windows.Shapes
+Imports System.Windows.Shell
+
+
+'''
+'''MultipleCopyWndV
+'''
+ _
+Partial Public Class MultipleCopyWndV
+ Inherits Effector.Plugin.[Lib].EgtWindow
+ Implements System.Windows.Markup.IComponentConnector
+
+ Private _contentLoaded As Boolean
+
+ '''
+ '''InitializeComponent
+ '''
+ _
+ Public Sub InitializeComponent() Implements System.Windows.Markup.IComponentConnector.InitializeComponent
+ If _contentLoaded Then
+ Return
+ End If
+ _contentLoaded = true
+ Dim resourceLocater As System.Uri = New System.Uri("/Effector.Plugin.Lib;component/multiplecopywnd/multiplecopywndv.xaml", System.UriKind.Relative)
+
+ #ExternalSource("..\..\..\MultipleCopyWnd\MultipleCopyWndV.xaml",1)
+ System.Windows.Application.LoadComponent(Me, resourceLocater)
+
+ #End ExternalSource
+ End Sub
+
+ _
+ Friend Function _CreateDelegate(ByVal delegateType As System.Type, ByVal handler As String) As System.[Delegate]
+ Return System.[Delegate].CreateDelegate(delegateType, Me, handler)
+ End Function
+
+ _
+ Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
+ Me._contentLoaded = true
+ End Sub
+End Class
+
diff --git a/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.g.vb b/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.g.vb
new file mode 100644
index 0000000..6db280b
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/MultipleCopyWnd/MultipleCopyWndV.g.vb
@@ -0,0 +1,83 @@
+#ExternalChecksum("..\..\..\MultipleCopyWnd\MultipleCopyWndV.xaml","{8829d00f-11b8-4213-878b-770e8597ac16}","7939E0F2EC5733FCE5DB6F35D9229B219F841E25968F6CAD809031C8564156BE")
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+Imports Effector.Plugin.Lib
+Imports System
+Imports System.Diagnostics
+Imports System.Windows
+Imports System.Windows.Automation
+Imports System.Windows.Controls
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Data
+Imports System.Windows.Documents
+Imports System.Windows.Ink
+Imports System.Windows.Input
+Imports System.Windows.Markup
+Imports System.Windows.Media
+Imports System.Windows.Media.Animation
+Imports System.Windows.Media.Effects
+Imports System.Windows.Media.Imaging
+Imports System.Windows.Media.Media3D
+Imports System.Windows.Media.TextFormatting
+Imports System.Windows.Navigation
+Imports System.Windows.Shapes
+Imports System.Windows.Shell
+
+
+'''
+'''MultipleCopyWndV
+'''
+ _
+Partial Public Class MultipleCopyWndV
+ Inherits Effector.Plugin.[Lib].EgtWindow
+ Implements System.Windows.Markup.IComponentConnector
+
+ Private _contentLoaded As Boolean
+
+ '''
+ '''InitializeComponent
+ '''
+ _
+ Public Sub InitializeComponent() Implements System.Windows.Markup.IComponentConnector.InitializeComponent
+ If _contentLoaded Then
+ Return
+ End If
+ _contentLoaded = true
+ Dim resourceLocater As System.Uri = New System.Uri("/Effector.Plugin.Lib;component/multiplecopywnd/multiplecopywndv.xaml", System.UriKind.Relative)
+
+ #ExternalSource("..\..\..\MultipleCopyWnd\MultipleCopyWndV.xaml",1)
+ System.Windows.Application.LoadComponent(Me, resourceLocater)
+
+ #End ExternalSource
+ End Sub
+
+ _
+ Friend Function _CreateDelegate(ByVal delegateType As System.Type, ByVal handler As String) As System.[Delegate]
+ Return System.[Delegate].CreateDelegate(delegateType, Me, handler)
+ End Function
+
+ _
+ Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
+ Me._contentLoaded = true
+ End Sub
+End Class
+
diff --git a/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.baml b/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.baml
new file mode 100644
index 0000000..2f4b757
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.baml differ
diff --git a/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.g.i.vb b/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.g.i.vb
new file mode 100644
index 0000000..cdb05f9
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.g.i.vb
@@ -0,0 +1,83 @@
+#ExternalChecksum("..\..\..\ProcessManager\ProcessManagerV.xaml","{8829d00f-11b8-4213-878b-770e8597ac16}","8C65D5AF9E1845E0F6C89DAEBA16CCD5F042906A92E3DEBB2AB6BD25D0535D88")
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+Imports Effector.Plugin.Lib
+Imports System
+Imports System.Diagnostics
+Imports System.Windows
+Imports System.Windows.Automation
+Imports System.Windows.Controls
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Data
+Imports System.Windows.Documents
+Imports System.Windows.Ink
+Imports System.Windows.Input
+Imports System.Windows.Markup
+Imports System.Windows.Media
+Imports System.Windows.Media.Animation
+Imports System.Windows.Media.Effects
+Imports System.Windows.Media.Imaging
+Imports System.Windows.Media.Media3D
+Imports System.Windows.Media.TextFormatting
+Imports System.Windows.Navigation
+Imports System.Windows.Shapes
+Imports System.Windows.Shell
+
+
+'''
+'''ProcessManagerV
+'''
+ _
+Partial Public Class ProcessManagerV
+ Inherits Effector.Plugin.[Lib].EgtWindow
+ Implements System.Windows.Markup.IComponentConnector
+
+ Private _contentLoaded As Boolean
+
+ '''
+ '''InitializeComponent
+ '''
+ _
+ Public Sub InitializeComponent() Implements System.Windows.Markup.IComponentConnector.InitializeComponent
+ If _contentLoaded Then
+ Return
+ End If
+ _contentLoaded = true
+ Dim resourceLocater As System.Uri = New System.Uri("/Effector.Plugin.Lib;component/processmanager/processmanagerv.xaml", System.UriKind.Relative)
+
+ #ExternalSource("..\..\..\ProcessManager\ProcessManagerV.xaml",1)
+ System.Windows.Application.LoadComponent(Me, resourceLocater)
+
+ #End ExternalSource
+ End Sub
+
+ _
+ Friend Function _CreateDelegate(ByVal delegateType As System.Type, ByVal handler As String) As System.[Delegate]
+ Return System.[Delegate].CreateDelegate(delegateType, Me, handler)
+ End Function
+
+ _
+ Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
+ Me._contentLoaded = true
+ End Sub
+End Class
+
diff --git a/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.g.vb b/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.g.vb
new file mode 100644
index 0000000..cdb05f9
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/ProcessManager/ProcessManagerV.g.vb
@@ -0,0 +1,83 @@
+#ExternalChecksum("..\..\..\ProcessManager\ProcessManagerV.xaml","{8829d00f-11b8-4213-878b-770e8597ac16}","8C65D5AF9E1845E0F6C89DAEBA16CCD5F042906A92E3DEBB2AB6BD25D0535D88")
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+Imports Effector.Plugin.Lib
+Imports System
+Imports System.Diagnostics
+Imports System.Windows
+Imports System.Windows.Automation
+Imports System.Windows.Controls
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Data
+Imports System.Windows.Documents
+Imports System.Windows.Ink
+Imports System.Windows.Input
+Imports System.Windows.Markup
+Imports System.Windows.Media
+Imports System.Windows.Media.Animation
+Imports System.Windows.Media.Effects
+Imports System.Windows.Media.Imaging
+Imports System.Windows.Media.Media3D
+Imports System.Windows.Media.TextFormatting
+Imports System.Windows.Navigation
+Imports System.Windows.Shapes
+Imports System.Windows.Shell
+
+
+'''
+'''ProcessManagerV
+'''
+ _
+Partial Public Class ProcessManagerV
+ Inherits Effector.Plugin.[Lib].EgtWindow
+ Implements System.Windows.Markup.IComponentConnector
+
+ Private _contentLoaded As Boolean
+
+ '''
+ '''InitializeComponent
+ '''
+ _
+ Public Sub InitializeComponent() Implements System.Windows.Markup.IComponentConnector.InitializeComponent
+ If _contentLoaded Then
+ Return
+ End If
+ _contentLoaded = true
+ Dim resourceLocater As System.Uri = New System.Uri("/Effector.Plugin.Lib;component/processmanager/processmanagerv.xaml", System.UriKind.Relative)
+
+ #ExternalSource("..\..\..\ProcessManager\ProcessManagerV.xaml",1)
+ System.Windows.Application.LoadComponent(Me, resourceLocater)
+
+ #End ExternalSource
+ End Sub
+
+ _
+ Friend Function _CreateDelegate(ByVal delegateType As System.Type, ByVal handler As String) As System.[Delegate]
+ Return System.[Delegate].CreateDelegate(delegateType, Me, handler)
+ End Function
+
+ _
+ Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
+ Me._contentLoaded = true
+ End Sub
+End Class
+
diff --git a/Effector.Plugin.Lib/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll b/Effector.Plugin.Lib/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll
new file mode 100644
index 0000000..b3dda02
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/TempPE/My Project.Resources.Designer.vb.dll differ
diff --git a/Effector.Plugin.Lib/obj/Debug/Themes/Generic.baml b/Effector.Plugin.Lib/obj/Debug/Themes/Generic.baml
new file mode 100644
index 0000000..7f61ecc
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/Themes/Generic.baml differ
diff --git a/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.baml b/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.baml
new file mode 100644
index 0000000..976f18a
Binary files /dev/null and b/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.baml differ
diff --git a/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.g.i.vb b/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.g.i.vb
new file mode 100644
index 0000000..42ad09f
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.g.i.vb
@@ -0,0 +1,75 @@
+#ExternalChecksum("..\..\..\TitleBar\TitleBarV.xaml","{8829d00f-11b8-4213-878b-770e8597ac16}","6F99ABB02409D64A07C56F9BB29C3CDF85E1FC21A80D10C4B554E1B440A8B058")
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+Imports System
+Imports System.Diagnostics
+Imports System.Windows
+Imports System.Windows.Automation
+Imports System.Windows.Controls
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Data
+Imports System.Windows.Documents
+Imports System.Windows.Ink
+Imports System.Windows.Input
+Imports System.Windows.Markup
+Imports System.Windows.Media
+Imports System.Windows.Media.Animation
+Imports System.Windows.Media.Effects
+Imports System.Windows.Media.Imaging
+Imports System.Windows.Media.Media3D
+Imports System.Windows.Media.TextFormatting
+Imports System.Windows.Navigation
+Imports System.Windows.Shapes
+Imports System.Windows.Shell
+
+
+'''
+'''TitleBar
+'''
+ _
+Partial Public Class TitleBar
+ Inherits System.Windows.Controls.Grid
+ Implements System.Windows.Markup.IComponentConnector
+
+ Private _contentLoaded As Boolean
+
+ '''
+ '''InitializeComponent
+ '''
+ _
+ Public Sub InitializeComponent() Implements System.Windows.Markup.IComponentConnector.InitializeComponent
+ If _contentLoaded Then
+ Return
+ End If
+ _contentLoaded = true
+ Dim resourceLocater As System.Uri = New System.Uri("/Effector.Plugin.Lib;component/titlebar/titlebarv.xaml", System.UriKind.Relative)
+
+ #ExternalSource("..\..\..\TitleBar\TitleBarV.xaml",1)
+ System.Windows.Application.LoadComponent(Me, resourceLocater)
+
+ #End ExternalSource
+ End Sub
+
+ _
+ Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
+ Me._contentLoaded = true
+ End Sub
+End Class
+
diff --git a/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.g.vb b/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.g.vb
new file mode 100644
index 0000000..42ad09f
--- /dev/null
+++ b/Effector.Plugin.Lib/obj/Debug/TitleBar/TitleBarV.g.vb
@@ -0,0 +1,75 @@
+#ExternalChecksum("..\..\..\TitleBar\TitleBarV.xaml","{8829d00f-11b8-4213-878b-770e8597ac16}","6F99ABB02409D64A07C56F9BB29C3CDF85E1FC21A80D10C4B554E1B440A8B058")
+'------------------------------------------------------------------------------
+'
+' This code was generated by a tool.
+' Runtime Version:4.0.30319.42000
+'
+' Changes to this file may cause incorrect behavior and will be lost if
+' the code is regenerated.
+'
+'------------------------------------------------------------------------------
+
+Option Strict Off
+Option Explicit On
+
+Imports System
+Imports System.Diagnostics
+Imports System.Windows
+Imports System.Windows.Automation
+Imports System.Windows.Controls
+Imports System.Windows.Controls.Primitives
+Imports System.Windows.Data
+Imports System.Windows.Documents
+Imports System.Windows.Ink
+Imports System.Windows.Input
+Imports System.Windows.Markup
+Imports System.Windows.Media
+Imports System.Windows.Media.Animation
+Imports System.Windows.Media.Effects
+Imports System.Windows.Media.Imaging
+Imports System.Windows.Media.Media3D
+Imports System.Windows.Media.TextFormatting
+Imports System.Windows.Navigation
+Imports System.Windows.Shapes
+Imports System.Windows.Shell
+
+
+'''
+'''TitleBar
+'''
+ _
+Partial Public Class TitleBar
+ Inherits System.Windows.Controls.Grid
+ Implements System.Windows.Markup.IComponentConnector
+
+ Private _contentLoaded As Boolean
+
+ '''
+ '''InitializeComponent
+ '''
+ _
+ Public Sub InitializeComponent() Implements System.Windows.Markup.IComponentConnector.InitializeComponent
+ If _contentLoaded Then
+ Return
+ End If
+ _contentLoaded = true
+ Dim resourceLocater As System.Uri = New System.Uri("/Effector.Plugin.Lib;component/titlebar/titlebarv.xaml", System.UriKind.Relative)
+
+ #ExternalSource("..\..\..\TitleBar\TitleBarV.xaml",1)
+ System.Windows.Application.LoadComponent(Me, resourceLocater)
+
+ #End ExternalSource
+ End Sub
+
+ _
+ Sub System_Windows_Markup_IComponentConnector_Connect(ByVal connectionId As Integer, ByVal target As Object) Implements System.Windows.Markup.IComponentConnector.Connect
+ Me._contentLoaded = true
+ End Sub
+End Class
+