From 51e217e38cedba60f17e9ded8ba63b62a4e680ec Mon Sep 17 00:00:00 2001 From: Brian Date: Fri, 20 Dec 2013 19:54:45 -0700 Subject: [PATCH] Added project files, source files, and assets. As long as you have IronPython 2.7.3 you should be able to compile now with this commit. --- README.md | 3 + code/build/.gitignore | 53 ++ code/build/.gitkeep | 0 code/build/About.resx | 223 +++++ code/build/App.config | 6 + code/build/FileGroupSettings.resx | 219 +++++ code/build/FileGroupTab.resx | 132 +++ code/build/FileWatcher.csproj | 242 +++++ code/build/FileWatcher.sln | 20 + code/build/Form1.resx | 264 ++++++ code/build/NewFileGroup.resx | 219 +++++ code/build/Preferences.resx | 219 +++++ code/build/Properties/AssemblyInfo.cs | 36 + code/build/Properties/Resources.Designer.cs | 223 +++++ code/build/Properties/Resources.resx | 169 ++++ code/build/Properties/Settings.Designer.cs | 26 + code/build/Properties/Settings.settings | 7 + code/build/ScriptManager.resx | 123 +++ code/build/packages.config | 4 + code/src/About.Designer.cs | 99 +++ code/src/About.cs | 20 + code/src/EventRaisingStreamWriter.cs | 39 + code/src/FileGroupSettings.Designer.cs | 97 ++ code/src/FileGroupSettings.cs | 25 + code/src/FileGroupTab.Designer.cs | 352 ++++++++ code/src/FileGroupTab.cs | 791 +++++++++++++++++ code/src/FilePath.cs | 59 ++ code/src/FolderSelectDialog.cs | 173 ++++ code/src/Form1.Designer.cs | 480 ++++++++++ code/src/Form1.cs | 834 ++++++++++++++++++ code/src/Logger.cs | 112 +++ code/src/MyEvtArgs.cs | 21 + code/src/NewFileGroup.Designer.cs | 173 ++++ code/src/NewFileGroup.cs | 80 ++ code/src/Preferences.Designer.cs | 318 +++++++ code/src/Preferences.cs | 308 +++++++ code/src/Program.cs | 46 + code/src/Reflector.cs | 183 ++++ code/src/RichTextBoxExtensions.cs | 123 +++ code/src/Script.cs | 20 + code/src/ScriptManager.Designer.cs | 246 ++++++ code/src/ScriptManager.cs | 26 + code/src/Singleton.cs | 26 + code/src/TimerPlus.cs | 53 ++ code/src/Utils.cs | 76 ++ data/arrow_fat_down.gif | Bin 0 -> 91 bytes data/arrow_fat_up.gif | Bin 0 -> 90 bytes data/arrow_mini_down.gif | Bin 0 -> 79 bytes data/arrow_mini_up.gif | Bin 0 -> 79 bytes data/block.gif | Bin 0 -> 96 bytes data/cross.gif | Bin 0 -> 90 bytes data/drop_box.gif | Bin 0 -> 100 bytes data/folder.gif | Bin 0 -> 90 bytes data/play.png | Bin 0 -> 958 bytes data/plus.gif | Bin 0 -> 91 bytes data/save.gif | Bin 0 -> 124 bytes data/script.gif | Bin 0 -> 91 bytes data/settings.png | Bin 0 -> 454 bytes data/stock_3d-texture-and-shading_128x128.ico | Bin 0 -> 67646 bytes data/stock_3d-texture-and-shading_128x128.png | Bin 0 -> 22390 bytes data/stock_3d-texture-and-shading_16x16.ico | Bin 0 -> 1150 bytes data/stock_3d-texture-and-shading_16x16.png | Bin 0 -> 901 bytes data/stock_3d-texture-and-shading_256x256.ico | Bin 0 -> 270398 bytes data/stock_3d-texture-and-shading_256x256.png | Bin 0 -> 50802 bytes data/stock_3d-texture-and-shading_32x32.ico | Bin 0 -> 5430 bytes data/stock_3d-texture-and-shading_32x32.png | Bin 0 -> 2391 bytes data/stock_3d-texture-and-shading_48x48.png | Bin 0 -> 4402 bytes data/stock_3d-texture-spherical_128x128.ico | Bin 0 -> 67646 bytes data/stock_3d-texture-spherical_128x128.png | Bin 0 -> 21128 bytes data/stock_3d-texture-spherical_16x16.ico | Bin 0 -> 1150 bytes data/stock_3d-texture-spherical_16x16.png | Bin 0 -> 901 bytes data/stock_3d-texture-spherical_256x256.ico | Bin 0 -> 270398 bytes data/stock_3d-texture-spherical_256x256.png | Bin 0 -> 51564 bytes data/stock_3d-texture-spherical_32x32.ico | Bin 0 -> 4286 bytes data/stock_3d-texture-spherical_32x32.png | Bin 0 -> 2415 bytes data/stock_3d-texture-spherical_48x48.png | Bin 0 -> 4391 bytes data/stop.png | Bin 0 -> 922 bytes data/trash.gif | Bin 0 -> 96 bytes data/warning.gif | Bin 0 -> 91 bytes 79 files changed, 6968 insertions(+) create mode 100644 code/build/.gitignore delete mode 100644 code/build/.gitkeep create mode 100644 code/build/About.resx create mode 100644 code/build/App.config create mode 100644 code/build/FileGroupSettings.resx create mode 100644 code/build/FileGroupTab.resx create mode 100644 code/build/FileWatcher.csproj create mode 100644 code/build/FileWatcher.sln create mode 100644 code/build/Form1.resx create mode 100644 code/build/NewFileGroup.resx create mode 100644 code/build/Preferences.resx create mode 100644 code/build/Properties/AssemblyInfo.cs create mode 100644 code/build/Properties/Resources.Designer.cs create mode 100644 code/build/Properties/Resources.resx create mode 100644 code/build/Properties/Settings.Designer.cs create mode 100644 code/build/Properties/Settings.settings create mode 100644 code/build/ScriptManager.resx create mode 100644 code/build/packages.config create mode 100644 code/src/About.Designer.cs create mode 100644 code/src/About.cs create mode 100644 code/src/EventRaisingStreamWriter.cs create mode 100644 code/src/FileGroupSettings.Designer.cs create mode 100644 code/src/FileGroupSettings.cs create mode 100644 code/src/FileGroupTab.Designer.cs create mode 100644 code/src/FileGroupTab.cs create mode 100644 code/src/FilePath.cs create mode 100644 code/src/FolderSelectDialog.cs create mode 100644 code/src/Form1.Designer.cs create mode 100644 code/src/Form1.cs create mode 100644 code/src/Logger.cs create mode 100644 code/src/MyEvtArgs.cs create mode 100644 code/src/NewFileGroup.Designer.cs create mode 100644 code/src/NewFileGroup.cs create mode 100644 code/src/Preferences.Designer.cs create mode 100644 code/src/Preferences.cs create mode 100644 code/src/Program.cs create mode 100644 code/src/Reflector.cs create mode 100644 code/src/RichTextBoxExtensions.cs create mode 100644 code/src/Script.cs create mode 100644 code/src/ScriptManager.Designer.cs create mode 100644 code/src/ScriptManager.cs create mode 100644 code/src/Singleton.cs create mode 100644 code/src/TimerPlus.cs create mode 100644 code/src/Utils.cs create mode 100644 data/arrow_fat_down.gif create mode 100644 data/arrow_fat_up.gif create mode 100644 data/arrow_mini_down.gif create mode 100644 data/arrow_mini_up.gif create mode 100644 data/block.gif create mode 100644 data/cross.gif create mode 100644 data/drop_box.gif create mode 100644 data/folder.gif create mode 100644 data/play.png create mode 100644 data/plus.gif create mode 100644 data/save.gif create mode 100644 data/script.gif create mode 100644 data/settings.png create mode 100644 data/stock_3d-texture-and-shading_128x128.ico create mode 100644 data/stock_3d-texture-and-shading_128x128.png create mode 100644 data/stock_3d-texture-and-shading_16x16.ico create mode 100644 data/stock_3d-texture-and-shading_16x16.png create mode 100644 data/stock_3d-texture-and-shading_256x256.ico create mode 100644 data/stock_3d-texture-and-shading_256x256.png create mode 100644 data/stock_3d-texture-and-shading_32x32.ico create mode 100644 data/stock_3d-texture-and-shading_32x32.png create mode 100644 data/stock_3d-texture-and-shading_48x48.png create mode 100644 data/stock_3d-texture-spherical_128x128.ico create mode 100644 data/stock_3d-texture-spherical_128x128.png create mode 100644 data/stock_3d-texture-spherical_16x16.ico create mode 100644 data/stock_3d-texture-spherical_16x16.png create mode 100644 data/stock_3d-texture-spherical_256x256.ico create mode 100644 data/stock_3d-texture-spherical_256x256.png create mode 100644 data/stock_3d-texture-spherical_32x32.ico create mode 100644 data/stock_3d-texture-spherical_32x32.png create mode 100644 data/stock_3d-texture-spherical_48x48.png create mode 100644 data/stop.png create mode 100644 data/trash.gif create mode 100644 data/warning.gif diff --git a/README.md b/README.md index 91f1035..5e74c0e 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,6 @@ FileWatcher FileWatcher is currently a Windows only C# and IronPython driven program for running scripts when files are changed. I plan on upgrading it to be driven by C++ and Python for performance reasons (Using Windows forms to make the conversion fairly painless), and I might make an effort to make it cross platform in the future (don't hold your breath); if I was to do such an upgrade it would be with QT. The program is still in Alpha, though it's basically useable. I still have some bugs to work out, and A LOT of features to work out. I also plan on having some premade scripts to make using it as easy as possible. I have never written a plugin system before (well, the current implementation isn't one, but I'd like to try), so bear with me, and maybe send me some feedback on how I can improve the program. + +Requirements: ++IronPython 2.7.3 \ No newline at end of file diff --git a/code/build/.gitignore b/code/build/.gitignore new file mode 100644 index 0000000..bd43284 --- /dev/null +++ b/code/build/.gitignore @@ -0,0 +1,53 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +# https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results +[Dd]ebug/ +[Rr]elease/ +x64/ +[Bb]in/ +[Oo]bj/ + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# NuGet Packages Directory +packages/ + + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ \ No newline at end of file diff --git a/code/build/.gitkeep b/code/build/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/code/build/About.resx b/code/build/About.resx new file mode 100644 index 0000000..a433657 --- /dev/null +++ b/code/build/About.resx @@ -0,0 +1,223 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + This tool used to be a TextureConverter, so icons are no longer relevant, and they may be changed at some point. + +FileWatcher is a file monitor that runs python scripts when file changes happen. It's not fully fleshed out, and since time is precious, some features are incomplete or may not work as expected. + +This program was compiled with IronPython 2.7, so it is only gauranteed to be compatible with Python 2.7. IronPython 2.7 also requires at least .NET 4.0. Unfortunately IronPython is a port of Python for .NET, so it's missing certain features and has certain bugs. I'll try to figure out a better solution, but until then we have to deal with what we've got; for now, we have to use IronPython's version of the Python Standard Library, instead of 2.7.3. + + + + + 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 + wP/86sT//OvF//zqxP/2xVv/9LMq//OwJP/63KD/+diW//bHbf/stU7/5Lxw/8KHHf+pcRD/akoV7AAA + ABQAAAAAAAAAAAAAAAAAAAAAHBEDd4liKP+meTH/qGsB/716Av/frE7/8s6J//jWlf/0vVD/8rEr//S7 + Q//868b//fDV//3y2v/98tv//fDX//jSg//0vEb/87Iw//nXlP/526D/+NSQ/9+TB//NiAj/wokk/6Zr + B/+YayL/LSIQegAAAAAAAAAAAAAAAAAAAAA9LhmrnntG/7GKTf+laQH/u3sK/9qpTf/ntFX/8btX//jU + kf/74rT/++nD//fPff/3znn/9814//fNdv/3y3L/++Kv//zv1P/87Mv/9st1//K0O//qrDT/4qpF/9CX + Lv/DjjH/w51c/6yERv9DMBWqAAAAAAAAAAAAAAAAAAAAAEs5I72PZyz/pXo2/8OcXP/XtXn/yYsa/9+q + Sf/svmf/+eCw//zu0v/98dn/98t2//fKcv/3y3P/98tz//fLc//747P//fLd//3w2P/30Yb/8cFm/+av + SP/mv3v/4L+E/86oZf+iaw//nHAp/1RAJL0AAAAAAAAAAAAAAAAAAAAATDoizIFWF/+WaSD/x6Zw/9Sz + fP/TqFz/4Llx/+e+cf/34br//O/X//3y3f/3zHv/9sp0//fKdf/3y3X/98p1//rjt//99OL//fHc//TS + kf/rwHD/5bxw/+rQov/dvof/z61y/5dfAf+Zbir/alc90QAAAAAAAAAAAAAAAAAAAABRQCnMfFIV/5Jm + IP/DpHH/3ceh/9m5gv/dunr/4756//XkxP/679z//PLh//TNg//0ynn/9ct5//bLef/1y3n/+eS7//z1 + 5//78uD/8NKb/+fAef/hvHn/7Nm4/+POp//MrXf/kVoB/49jIP9NOBrKAAAAAAAAAAAAAAAAAAAAAEc4 + JL2ObDz/nHdA/7eVYP/h0LT/17uL/9q6gv/fvYL/9OXM//nw3//78+X/7s2N/+7Jgv/vyYL/8MqC/+/J + gv/35MH//Pbq//vz5P/s0aD/4r+B/928gv/o1rX/5NGy/76cYv+vi1P/mXQ9/1xMNcEAAAAAAAAAAAAA + AAAAAAAALyEPpohoO/+de0r/qIVO/8y0i//n2cH/7uLN/+/iy//n0Kf/6tGm/+3Xrf/z4sL/9eXJ//bn + zf/26c//9ufN//LfvP/u163/69Kl//Dhxf/y59L/8ufU/9nAlP/Rtor/uJZe/7OWaP+dfU//SDklrAAA + AAAAAAAAAAAAAAAAAAAZEQZzYj4P/29EB//GsZL/zrqZ/+TWwP/u5dT/8unZ/+LMpf/gxZX/4saV//ft + 3f/8+vT//vz5///+/f/+/Pn/7tq4/+PHlP/hxZT/8+nX//Ts3v/x6Nj/1b2U/9S+nP/Js5D/e00I/4Be + LP8rIRV3AAAAAAAAAAAAAAAAAAAAAAAAABJIMRXrgF4x/9rOvf/l283/39K8/+LUvP/r4M3/4tCx/93F + nf/fx53/8+rZ//z58//9+/f//fz5//37+P/q2Ln/4Mid/9/Hnf/x59f/69/L/+bYwP/p3cz/6eDS/9bI + sv+AWiL/X0gq7AAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAEU6LL+KcU7/1su8/+Tbz//i1sb/1MKm/9fE + pv/o3Mj/9O7j//Ps4P/r3sj/6Ni9/+nawP/p2sD/6Ni9//Ho2f/28Ob/9e/l/9vHpf/ZxaX/4dO9/+3m + 2v/p4dX/18q5/5p/W/9LPi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAsGPXBdRvLJvaz/0sa1/97T + xP/Wx7H/18iw/+PXxP/18Oj/9/Ls/+rfzv/ezbD/382w/9/Nr//eza//9e/m//j17//v6Nz/2sqv/9jI + r//m3c7/4tjJ/9nNvP/PwrH/hHFZ9BEKAz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoPqpmG + bf/b0sb/1Mi5/+Xd0v/p4tf/59/S/+/p4P/18Or/7eXZ/97PuP/f0Lj/39C4/9/QuP/28uz/9/Tv/+zk + 2P/k2sr/6N/T/9nMuv/Vybj/3dXI/6KNc/85LyOvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAANNyocz8S4qv/Z0MX/3NTI//Dr5v/y7uj/39XG/97Twv/l283/9O/p//Tw6v/08Or/8+7n/+LX + x//f08L/7+nh//Tw6//n4Nb/2tDC/93Uyf/FuKj/Rzor0QAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAJBAAmRzgp39fPx//n4tz/7ejj//Lv6v/p49r/4NfK/+LZzf/39PH/+PXy//j1 + 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 + + + \ No newline at end of file diff --git a/code/build/App.config b/code/build/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/code/build/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/code/build/FileGroupSettings.resx b/code/build/FileGroupSettings.resx new file mode 100644 index 0000000..8157236 --- /dev/null +++ b/code/build/FileGroupSettings.resx @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + wP/86sT//OvF//zqxP/2xVv/9LMq//OwJP/63KD/+diW//bHbf/stU7/5Lxw/8KHHf+pcRD/akoV7AAA + ABQAAAAAAAAAAAAAAAAAAAAAHBEDd4liKP+meTH/qGsB/716Av/frE7/8s6J//jWlf/0vVD/8rEr//S7 + Q//868b//fDV//3y2v/98tv//fDX//jSg//0vEb/87Iw//nXlP/526D/+NSQ/9+TB//NiAj/wokk/6Zr + B/+YayL/LSIQegAAAAAAAAAAAAAAAAAAAAA9LhmrnntG/7GKTf+laQH/u3sK/9qpTf/ntFX/8btX//jU + kf/74rT/++nD//fPff/3znn/9814//fNdv/3y3L/++Kv//zv1P/87Mv/9st1//K0O//qrDT/4qpF/9CX + Lv/DjjH/w51c/6yERv9DMBWqAAAAAAAAAAAAAAAAAAAAAEs5I72PZyz/pXo2/8OcXP/XtXn/yYsa/9+q + Sf/svmf/+eCw//zu0v/98dn/98t2//fKcv/3y3P/98tz//fLc//747P//fLd//3w2P/30Yb/8cFm/+av + SP/mv3v/4L+E/86oZf+iaw//nHAp/1RAJL0AAAAAAAAAAAAAAAAAAAAATDoizIFWF/+WaSD/x6Zw/9Sz + fP/TqFz/4Llx/+e+cf/34br//O/X//3y3f/3zHv/9sp0//fKdf/3y3X/98p1//rjt//99OL//fHc//TS + kf/rwHD/5bxw/+rQov/dvof/z61y/5dfAf+Zbir/alc90QAAAAAAAAAAAAAAAAAAAABRQCnMfFIV/5Jm + IP/DpHH/3ceh/9m5gv/dunr/4756//XkxP/679z//PLh//TNg//0ynn/9ct5//bLef/1y3n/+eS7//z1 + 5//78uD/8NKb/+fAef/hvHn/7Nm4/+POp//MrXf/kVoB/49jIP9NOBrKAAAAAAAAAAAAAAAAAAAAAEc4 + JL2ObDz/nHdA/7eVYP/h0LT/17uL/9q6gv/fvYL/9OXM//nw3//78+X/7s2N/+7Jgv/vyYL/8MqC/+/J + gv/35MH//Pbq//vz5P/s0aD/4r+B/928gv/o1rX/5NGy/76cYv+vi1P/mXQ9/1xMNcEAAAAAAAAAAAAA + AAAAAAAALyEPpohoO/+de0r/qIVO/8y0i//n2cH/7uLN/+/iy//n0Kf/6tGm/+3Xrf/z4sL/9eXJ//bn + zf/26c//9ufN//LfvP/u163/69Kl//Dhxf/y59L/8ufU/9nAlP/Rtor/uJZe/7OWaP+dfU//SDklrAAA + AAAAAAAAAAAAAAAAAAAZEQZzYj4P/29EB//GsZL/zrqZ/+TWwP/u5dT/8unZ/+LMpf/gxZX/4saV//ft + 3f/8+vT//vz5///+/f/+/Pn/7tq4/+PHlP/hxZT/8+nX//Ts3v/x6Nj/1b2U/9S+nP/Js5D/e00I/4Be + LP8rIRV3AAAAAAAAAAAAAAAAAAAAAAAAABJIMRXrgF4x/9rOvf/l283/39K8/+LUvP/r4M3/4tCx/93F + nf/fx53/8+rZ//z58//9+/f//fz5//37+P/q2Ln/4Mid/9/Hnf/x59f/69/L/+bYwP/p3cz/6eDS/9bI + sv+AWiL/X0gq7AAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAEU6LL+KcU7/1su8/+Tbz//i1sb/1MKm/9fE + pv/o3Mj/9O7j//Ps4P/r3sj/6Ni9/+nawP/p2sD/6Ni9//Ho2f/28Ob/9e/l/9vHpf/ZxaX/4dO9/+3m + 2v/p4dX/18q5/5p/W/9LPi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAsGPXBdRvLJvaz/0sa1/97T + xP/Wx7H/18iw/+PXxP/18Oj/9/Ls/+rfzv/ezbD/382w/9/Nr//eza//9e/m//j17//v6Nz/2sqv/9jI + r//m3c7/4tjJ/9nNvP/PwrH/hHFZ9BEKAz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoPqpmG + bf/b0sb/1Mi5/+Xd0v/p4tf/59/S/+/p4P/18Or/7eXZ/97PuP/f0Lj/39C4/9/QuP/28uz/9/Tv/+zk + 2P/k2sr/6N/T/9nMuv/Vybj/3dXI/6KNc/85LyOvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAANNyocz8S4qv/Z0MX/3NTI//Dr5v/y7uj/39XG/97Twv/l283/9O/p//Tw6v/08Or/8+7n/+LX + x//f08L/7+nh//Tw6//n4Nb/2tDC/93Uyf/FuKj/Rzor0QAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAJBAAmRzgp39fPx//n4tz/7ejj//Lv6v/p49r/4NfK/+LZzf/39PH/+PXy//j1 + 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 + + + \ No newline at end of file diff --git a/code/build/FileGroupTab.resx b/code/build/FileGroupTab.resx new file mode 100644 index 0000000..28a4c57 --- /dev/null +++ b/code/build/FileGroupTab.resx @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 157, 17 + + + 297, 17 + + + 430, 17 + + \ No newline at end of file diff --git a/code/build/FileWatcher.csproj b/code/build/FileWatcher.csproj new file mode 100644 index 0000000..8d31717 --- /dev/null +++ b/code/build/FileWatcher.csproj @@ -0,0 +1,242 @@ + + + + + Debug + AnyCPU + {AA167571-AC0F-4F78-B471-951FBC597FC3} + WinExe + Properties + FileWatcher + FileWatcher + v4.5 + 512 + false + build\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + false + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + true + true + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + False + C:\Program Files (x86)\IronPython 2.7\IronPython.dll + + + False + C:\Program Files (x86)\IronPython 2.7\IronPython.Modules.dll + + + False + C:\Program Files (x86)\IronPython 2.7\Microsoft.Dynamic.dll + + + False + C:\Program Files (x86)\IronPython 2.7\Microsoft.Scripting.dll + + + + + + + + + + + + + + + + + Form + + + ..\src\About.cs + + + + Form + + + ..\src\FileGroupSettings.cs + + + UserControl + + + ..\src\FileGroupTab.cs + + + + Form + + + ..\src\Form1.cs + + + + + Form + + + ..\src\NewFileGroup.cs + + + + Form + + + ..\src\Preferences.cs + + + + + True + True + Resources.resx + + + + + + Form + + + ..\src\ScriptManager.cs + + + + Component + + + + ..\src\About.cs + + + ..\src\FileGroupSettings.cs + + + ..\src\FileGroupTab.cs + + + ..\src\Form1.cs + + + ..\src\NewFileGroup.cs + + + ..\src\Preferences.cs + + + ResXFileCodeGenerator + Designer + ..\src\Resources.Designer.cs + + + ..\src\ScriptManager.cs + + + + SettingsSingleFileGenerator + ..\src\Settings.Designer.cs + + + True + ..\src\Settings.settings + True + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + False + Microsoft .NET Framework 4.5 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 Client Profile + false + + + False + .NET Framework 3.5 SP1 + false + + + + + \ No newline at end of file diff --git a/code/build/FileWatcher.sln b/code/build/FileWatcher.sln new file mode 100644 index 0000000..d05d807 --- /dev/null +++ b/code/build/FileWatcher.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FileWatcher", "FileWatcher.csproj", "{AA167571-AC0F-4F78-B471-951FBC597FC3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AA167571-AC0F-4F78-B471-951FBC597FC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AA167571-AC0F-4F78-B471-951FBC597FC3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AA167571-AC0F-4F78-B471-951FBC597FC3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AA167571-AC0F-4F78-B471-951FBC597FC3}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/code/build/Form1.resx b/code/build/Form1.resx new file mode 100644 index 0000000..33f751c --- /dev/null +++ b/code/build/Form1.resx @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 291, 17 + + + 606, 56 + + + 501, 56 + + + 786, 17 + + + 17, 56 + + + + + AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAJ0EAACdBAAAAAAAAAAA + AAD///8A////AP///wD///8AAAAAAQAAAAMAAAAGAAAACAAAAAgAAAAHAAAABAAAAAL///8A////AP// + /wD///8A////AP///wD///8AAAAAAwAAAAsAAAAXAAAAJAAAADAAAAAyAAAALAAAAB8AAAASAAAABwAA + AAH///8A////AP///wD///8AAAAAAQAAAAcDAwIjRT4ylXZrXMGhmYrisa6h45CKfspdVUuhAgIBNAAA + ABMAAAAD////AP///wD///8A////AP///wAuKRxGj4V12L+xnf/PxK//5+HS/+rm1v/d1cL/1Mq5/5KG + dtQzLCBFAAAAAf///wD///8A////AP///wAwKhw/cWNI8q2chf/Rxrb/0sm1/+DZyf/h28r/2tK//97X + yf+6qpP/k4Ns8kc/MUD///8A////AP///wAWFREHeXBe1p+Rev+nk3j/w7ah/9jPwP/Hu6L/yr6l/+jj + 2f/Jvaj/vKyV/7utmP+WjX3ZDQsHB////wD///8APjcne4F0Wv+qnIf/vrGd/72umP/LwK3/5+LY/+fi + 2P/Jvaj/yb2p/8S3pP/Guqr/l4hv/1FKOnz///8A////AFVOOqt9b1T/lIRr/8K2pf/Iu6r/1cy//97X + zP/f2M3/2dDD/9LIuf/Iu6r/oZB2/5iJcP9lW0ms////AP///wBVTDfQjoNs/6abhf+zp5P/5d/Y/93U + yv/Huqj/x7qp/+zo4v/h29L/uq2a/8rCtf+WiXL/bmRR0v///wD///8AVEw30IyAav+9tqj/t62c/+fj + 3f/d1s3/xLmo/8W6qf/t6uX/4tzV/7yyof/V0Mb/mo14/2phTtL///8A////AEdALKmFe2T/wryw/+Dc + 1f/IwLP/19HG/+/t6f/z8e7/0szB/9bQxv/p5uH/urKk/5aMd/9vaFi0////AP///wBCPS5/oZqJ/9PP + xv/Iwrf/087E/9rWzf/l4tz/5+Pe/9vWz//W0cj/0czD/+He1/+mn47/Ukw+gv///wD///8AEQ8MB4F8 + bNvEwLX/zcm//97b1f/l497/xsC1/8bAtf/x7+z/2NTM/8/Lwv/Lx73/hYBw2wkHAwf///8A////AP// + /wArJhc+p6KV+drY0f/d29X/zcnA/+7s6f/s6uf/zcm//+vq5v/Y1c7/qaWY+S0oGT7///8A////AP// + /wD///8A////AE5LP0vGw7zu19TO/+De2f/i4Nv/4uDb/97c1v/e3Nf/xsS97kdEN0n///8A////AP// + /wD///8A////AP///wD///8AFhQRB3ZzZ4+xrqbRwL627cC+tu2pppzNfXpukggGAgf///8A////AP// + /wD///8A8A8AAOADAADAAwAA4AMAAMADAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAMAD + AADgBwAA8A8AAA== + + + + 157, 56 + + + 95 + + + + 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 + wP/86sT//OvF//zqxP/2xVv/9LMq//OwJP/63KD/+diW//bHbf/stU7/5Lxw/8KHHf+pcRD/akoV7AAA + ABQAAAAAAAAAAAAAAAAAAAAAHBEDd4liKP+meTH/qGsB/716Av/frE7/8s6J//jWlf/0vVD/8rEr//S7 + Q//868b//fDV//3y2v/98tv//fDX//jSg//0vEb/87Iw//nXlP/526D/+NSQ/9+TB//NiAj/wokk/6Zr + B/+YayL/LSIQegAAAAAAAAAAAAAAAAAAAAA9LhmrnntG/7GKTf+laQH/u3sK/9qpTf/ntFX/8btX//jU + kf/74rT/++nD//fPff/3znn/9814//fNdv/3y3L/++Kv//zv1P/87Mv/9st1//K0O//qrDT/4qpF/9CX + Lv/DjjH/w51c/6yERv9DMBWqAAAAAAAAAAAAAAAAAAAAAEs5I72PZyz/pXo2/8OcXP/XtXn/yYsa/9+q + Sf/svmf/+eCw//zu0v/98dn/98t2//fKcv/3y3P/98tz//fLc//747P//fLd//3w2P/30Yb/8cFm/+av + SP/mv3v/4L+E/86oZf+iaw//nHAp/1RAJL0AAAAAAAAAAAAAAAAAAAAATDoizIFWF/+WaSD/x6Zw/9Sz + fP/TqFz/4Llx/+e+cf/34br//O/X//3y3f/3zHv/9sp0//fKdf/3y3X/98p1//rjt//99OL//fHc//TS + kf/rwHD/5bxw/+rQov/dvof/z61y/5dfAf+Zbir/alc90QAAAAAAAAAAAAAAAAAAAABRQCnMfFIV/5Jm + IP/DpHH/3ceh/9m5gv/dunr/4756//XkxP/679z//PLh//TNg//0ynn/9ct5//bLef/1y3n/+eS7//z1 + 5//78uD/8NKb/+fAef/hvHn/7Nm4/+POp//MrXf/kVoB/49jIP9NOBrKAAAAAAAAAAAAAAAAAAAAAEc4 + JL2ObDz/nHdA/7eVYP/h0LT/17uL/9q6gv/fvYL/9OXM//nw3//78+X/7s2N/+7Jgv/vyYL/8MqC/+/J + gv/35MH//Pbq//vz5P/s0aD/4r+B/928gv/o1rX/5NGy/76cYv+vi1P/mXQ9/1xMNcEAAAAAAAAAAAAA + AAAAAAAALyEPpohoO/+de0r/qIVO/8y0i//n2cH/7uLN/+/iy//n0Kf/6tGm/+3Xrf/z4sL/9eXJ//bn + zf/26c//9ufN//LfvP/u163/69Kl//Dhxf/y59L/8ufU/9nAlP/Rtor/uJZe/7OWaP+dfU//SDklrAAA + AAAAAAAAAAAAAAAAAAAZEQZzYj4P/29EB//GsZL/zrqZ/+TWwP/u5dT/8unZ/+LMpf/gxZX/4saV//ft + 3f/8+vT//vz5///+/f/+/Pn/7tq4/+PHlP/hxZT/8+nX//Ts3v/x6Nj/1b2U/9S+nP/Js5D/e00I/4Be + LP8rIRV3AAAAAAAAAAAAAAAAAAAAAAAAABJIMRXrgF4x/9rOvf/l283/39K8/+LUvP/r4M3/4tCx/93F + nf/fx53/8+rZ//z58//9+/f//fz5//37+P/q2Ln/4Mid/9/Hnf/x59f/69/L/+bYwP/p3cz/6eDS/9bI + sv+AWiL/X0gq7AAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAEU6LL+KcU7/1su8/+Tbz//i1sb/1MKm/9fE + pv/o3Mj/9O7j//Ps4P/r3sj/6Ni9/+nawP/p2sD/6Ni9//Ho2f/28Ob/9e/l/9vHpf/ZxaX/4dO9/+3m + 2v/p4dX/18q5/5p/W/9LPi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAsGPXBdRvLJvaz/0sa1/97T + xP/Wx7H/18iw/+PXxP/18Oj/9/Ls/+rfzv/ezbD/382w/9/Nr//eza//9e/m//j17//v6Nz/2sqv/9jI + r//m3c7/4tjJ/9nNvP/PwrH/hHFZ9BEKAz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoPqpmG + bf/b0sb/1Mi5/+Xd0v/p4tf/59/S/+/p4P/18Or/7eXZ/97PuP/f0Lj/39C4/9/QuP/28uz/9/Tv/+zk + 2P/k2sr/6N/T/9nMuv/Vybj/3dXI/6KNc/85LyOvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAANNyocz8S4qv/Z0MX/3NTI//Dr5v/y7uj/39XG/97Twv/l283/9O/p//Tw6v/08Or/8+7n/+LX + x//f08L/7+nh//Tw6//n4Nb/2tDC/93Uyf/FuKj/Rzor0QAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAJBAAmRzgp39fPx//n4tz/7ejj//Lv6v/p49r/4NfK/+LZzf/39PH/+PXy//j1 + 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 + + + \ No newline at end of file diff --git a/code/build/NewFileGroup.resx b/code/build/NewFileGroup.resx new file mode 100644 index 0000000..6cb5ce1 --- /dev/null +++ b/code/build/NewFileGroup.resx @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + wP/86sT//OvF//zqxP/2xVv/9LMq//OwJP/63KD/+diW//bHbf/stU7/5Lxw/8KHHf+pcRD/akoV7AAA + ABQAAAAAAAAAAAAAAAAAAAAAHBEDd4liKP+meTH/qGsB/716Av/frE7/8s6J//jWlf/0vVD/8rEr//S7 + Q//868b//fDV//3y2v/98tv//fDX//jSg//0vEb/87Iw//nXlP/526D/+NSQ/9+TB//NiAj/wokk/6Zr + B/+YayL/LSIQegAAAAAAAAAAAAAAAAAAAAA9LhmrnntG/7GKTf+laQH/u3sK/9qpTf/ntFX/8btX//jU + kf/74rT/++nD//fPff/3znn/9814//fNdv/3y3L/++Kv//zv1P/87Mv/9st1//K0O//qrDT/4qpF/9CX + Lv/DjjH/w51c/6yERv9DMBWqAAAAAAAAAAAAAAAAAAAAAEs5I72PZyz/pXo2/8OcXP/XtXn/yYsa/9+q + Sf/svmf/+eCw//zu0v/98dn/98t2//fKcv/3y3P/98tz//fLc//747P//fLd//3w2P/30Yb/8cFm/+av + SP/mv3v/4L+E/86oZf+iaw//nHAp/1RAJL0AAAAAAAAAAAAAAAAAAAAATDoizIFWF/+WaSD/x6Zw/9Sz + fP/TqFz/4Llx/+e+cf/34br//O/X//3y3f/3zHv/9sp0//fKdf/3y3X/98p1//rjt//99OL//fHc//TS + kf/rwHD/5bxw/+rQov/dvof/z61y/5dfAf+Zbir/alc90QAAAAAAAAAAAAAAAAAAAABRQCnMfFIV/5Jm + IP/DpHH/3ceh/9m5gv/dunr/4756//XkxP/679z//PLh//TNg//0ynn/9ct5//bLef/1y3n/+eS7//z1 + 5//78uD/8NKb/+fAef/hvHn/7Nm4/+POp//MrXf/kVoB/49jIP9NOBrKAAAAAAAAAAAAAAAAAAAAAEc4 + JL2ObDz/nHdA/7eVYP/h0LT/17uL/9q6gv/fvYL/9OXM//nw3//78+X/7s2N/+7Jgv/vyYL/8MqC/+/J + gv/35MH//Pbq//vz5P/s0aD/4r+B/928gv/o1rX/5NGy/76cYv+vi1P/mXQ9/1xMNcEAAAAAAAAAAAAA + AAAAAAAALyEPpohoO/+de0r/qIVO/8y0i//n2cH/7uLN/+/iy//n0Kf/6tGm/+3Xrf/z4sL/9eXJ//bn + zf/26c//9ufN//LfvP/u163/69Kl//Dhxf/y59L/8ufU/9nAlP/Rtor/uJZe/7OWaP+dfU//SDklrAAA + AAAAAAAAAAAAAAAAAAAZEQZzYj4P/29EB//GsZL/zrqZ/+TWwP/u5dT/8unZ/+LMpf/gxZX/4saV//ft + 3f/8+vT//vz5///+/f/+/Pn/7tq4/+PHlP/hxZT/8+nX//Ts3v/x6Nj/1b2U/9S+nP/Js5D/e00I/4Be + LP8rIRV3AAAAAAAAAAAAAAAAAAAAAAAAABJIMRXrgF4x/9rOvf/l283/39K8/+LUvP/r4M3/4tCx/93F + nf/fx53/8+rZ//z58//9+/f//fz5//37+P/q2Ln/4Mid/9/Hnf/x59f/69/L/+bYwP/p3cz/6eDS/9bI + sv+AWiL/X0gq7AAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAEU6LL+KcU7/1su8/+Tbz//i1sb/1MKm/9fE + pv/o3Mj/9O7j//Ps4P/r3sj/6Ni9/+nawP/p2sD/6Ni9//Ho2f/28Ob/9e/l/9vHpf/ZxaX/4dO9/+3m + 2v/p4dX/18q5/5p/W/9LPi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAsGPXBdRvLJvaz/0sa1/97T + xP/Wx7H/18iw/+PXxP/18Oj/9/Ls/+rfzv/ezbD/382w/9/Nr//eza//9e/m//j17//v6Nz/2sqv/9jI + r//m3c7/4tjJ/9nNvP/PwrH/hHFZ9BEKAz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoPqpmG + bf/b0sb/1Mi5/+Xd0v/p4tf/59/S/+/p4P/18Or/7eXZ/97PuP/f0Lj/39C4/9/QuP/28uz/9/Tv/+zk + 2P/k2sr/6N/T/9nMuv/Vybj/3dXI/6KNc/85LyOvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAANNyocz8S4qv/Z0MX/3NTI//Dr5v/y7uj/39XG/97Twv/l283/9O/p//Tw6v/08Or/8+7n/+LX + x//f08L/7+nh//Tw6//n4Nb/2tDC/93Uyf/FuKj/Rzor0QAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAJBAAmRzgp39fPx//n4tz/7ejj//Lv6v/p49r/4NfK/+LZzf/39PH/+PXy//j1 + 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 + + + \ No newline at end of file diff --git a/code/build/Preferences.resx b/code/build/Preferences.resx new file mode 100644 index 0000000..db4ac94 --- /dev/null +++ b/code/build/Preferences.resx @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + + + 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 + wP/86sT//OvF//zqxP/2xVv/9LMq//OwJP/63KD/+diW//bHbf/stU7/5Lxw/8KHHf+pcRD/akoV7AAA + ABQAAAAAAAAAAAAAAAAAAAAAHBEDd4liKP+meTH/qGsB/716Av/frE7/8s6J//jWlf/0vVD/8rEr//S7 + Q//868b//fDV//3y2v/98tv//fDX//jSg//0vEb/87Iw//nXlP/526D/+NSQ/9+TB//NiAj/wokk/6Zr + B/+YayL/LSIQegAAAAAAAAAAAAAAAAAAAAA9LhmrnntG/7GKTf+laQH/u3sK/9qpTf/ntFX/8btX//jU + kf/74rT/++nD//fPff/3znn/9814//fNdv/3y3L/++Kv//zv1P/87Mv/9st1//K0O//qrDT/4qpF/9CX + Lv/DjjH/w51c/6yERv9DMBWqAAAAAAAAAAAAAAAAAAAAAEs5I72PZyz/pXo2/8OcXP/XtXn/yYsa/9+q + Sf/svmf/+eCw//zu0v/98dn/98t2//fKcv/3y3P/98tz//fLc//747P//fLd//3w2P/30Yb/8cFm/+av + SP/mv3v/4L+E/86oZf+iaw//nHAp/1RAJL0AAAAAAAAAAAAAAAAAAAAATDoizIFWF/+WaSD/x6Zw/9Sz + fP/TqFz/4Llx/+e+cf/34br//O/X//3y3f/3zHv/9sp0//fKdf/3y3X/98p1//rjt//99OL//fHc//TS + kf/rwHD/5bxw/+rQov/dvof/z61y/5dfAf+Zbir/alc90QAAAAAAAAAAAAAAAAAAAABRQCnMfFIV/5Jm + IP/DpHH/3ceh/9m5gv/dunr/4756//XkxP/679z//PLh//TNg//0ynn/9ct5//bLef/1y3n/+eS7//z1 + 5//78uD/8NKb/+fAef/hvHn/7Nm4/+POp//MrXf/kVoB/49jIP9NOBrKAAAAAAAAAAAAAAAAAAAAAEc4 + JL2ObDz/nHdA/7eVYP/h0LT/17uL/9q6gv/fvYL/9OXM//nw3//78+X/7s2N/+7Jgv/vyYL/8MqC/+/J + gv/35MH//Pbq//vz5P/s0aD/4r+B/928gv/o1rX/5NGy/76cYv+vi1P/mXQ9/1xMNcEAAAAAAAAAAAAA + AAAAAAAALyEPpohoO/+de0r/qIVO/8y0i//n2cH/7uLN/+/iy//n0Kf/6tGm/+3Xrf/z4sL/9eXJ//bn + zf/26c//9ufN//LfvP/u163/69Kl//Dhxf/y59L/8ufU/9nAlP/Rtor/uJZe/7OWaP+dfU//SDklrAAA + AAAAAAAAAAAAAAAAAAAZEQZzYj4P/29EB//GsZL/zrqZ/+TWwP/u5dT/8unZ/+LMpf/gxZX/4saV//ft + 3f/8+vT//vz5///+/f/+/Pn/7tq4/+PHlP/hxZT/8+nX//Ts3v/x6Nj/1b2U/9S+nP/Js5D/e00I/4Be + LP8rIRV3AAAAAAAAAAAAAAAAAAAAAAAAABJIMRXrgF4x/9rOvf/l283/39K8/+LUvP/r4M3/4tCx/93F + nf/fx53/8+rZ//z58//9+/f//fz5//37+P/q2Ln/4Mid/9/Hnf/x59f/69/L/+bYwP/p3cz/6eDS/9bI + sv+AWiL/X0gq7AAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAEU6LL+KcU7/1su8/+Tbz//i1sb/1MKm/9fE + pv/o3Mj/9O7j//Ps4P/r3sj/6Ni9/+nawP/p2sD/6Ni9//Ho2f/28Ob/9e/l/9vHpf/ZxaX/4dO9/+3m + 2v/p4dX/18q5/5p/W/9LPi3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAsGPXBdRvLJvaz/0sa1/97T + xP/Wx7H/18iw/+PXxP/18Oj/9/Ls/+rfzv/ezbD/382w/9/Nr//eza//9e/m//j17//v6Nz/2sqv/9jI + r//m3c7/4tjJ/9nNvP/PwrH/hHFZ9BEKAz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoPqpmG + bf/b0sb/1Mi5/+Xd0v/p4tf/59/S/+/p4P/18Or/7eXZ/97PuP/f0Lj/39C4/9/QuP/28uz/9/Tv/+zk + 2P/k2sr/6N/T/9nMuv/Vybj/3dXI/6KNc/85LyOvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAANNyocz8S4qv/Z0MX/3NTI//Dr5v/y7uj/39XG/97Twv/l283/9O/p//Tw6v/08Or/8+7n/+LX + x//f08L/7+nh//Tw6//n4Nb/2tDC/93Uyf/FuKj/Rzor0QAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAJBAAmRzgp39fPx//n4tz/7ejj//Lv6v/p49r/4NfK/+LZzf/39PH/+PXy//j1 + 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 + + + \ No newline at end of file diff --git a/code/build/Properties/AssemblyInfo.cs b/code/build/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..da3718c --- /dev/null +++ b/code/build/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 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. +[assembly: AssemblyTitle("FileWatcher")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("FileWatcher")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("2fdc0178-3e49-4517-b8fd-c5fff550dc55")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/code/build/Properties/Resources.Designer.cs b/code/build/Properties/Resources.Designer.cs new file mode 100644 index 0000000..36c413c --- /dev/null +++ b/code/build/Properties/Resources.Designer.cs @@ -0,0 +1,223 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18034 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FileWatcher.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // 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. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("FileWatcher.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_fat_down { + get { + object obj = ResourceManager.GetObject("arrow_fat_down", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap arrow_fat_up { + get { + object obj = ResourceManager.GetObject("arrow_fat_up", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap block { + get { + object obj = ResourceManager.GetObject("block", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap cross { + get { + object obj = ResourceManager.GetObject("cross", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap drop_box { + get { + object obj = ResourceManager.GetObject("drop_box", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap folder { + get { + object obj = ResourceManager.GetObject("folder", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap play { + get { + object obj = ResourceManager.GetObject("play", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap plus { + get { + object obj = ResourceManager.GetObject("plus", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap save { + get { + object obj = ResourceManager.GetObject("save", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap script { + get { + object obj = ResourceManager.GetObject("script", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap settings { + get { + object obj = ResourceManager.GetObject("settings", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap stock_3d_texture_and_shading_128x128 { + get { + object obj = ResourceManager.GetObject("stock_3d-texture-and-shading_128x128", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap stock_3d_texture_and_shading_256x256 { + get { + object obj = ResourceManager.GetObject("stock_3d-texture-and-shading_256x256", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap stop { + get { + object obj = ResourceManager.GetObject("stop", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap trash { + get { + object obj = ResourceManager.GetObject("trash", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap warning { + get { + object obj = ResourceManager.GetObject("warning", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + } +} diff --git a/code/build/Properties/Resources.resx b/code/build/Properties/Resources.resx new file mode 100644 index 0000000..5f49419 --- /dev/null +++ b/code/build/Properties/Resources.resx @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\..\..\data\plus.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\folder.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\block.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\arrow_fat_down.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\save.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\cross.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\drop_box.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\warning.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\stock_3d-texture-and-shading_256x256.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\stock_3d-texture-and-shading_128x128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\settings.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\script.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\trash.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\arrow_fat_up.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\play.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + + ..\..\..\data\stop.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/code/build/Properties/Settings.Designer.cs b/code/build/Properties/Settings.Designer.cs new file mode 100644 index 0000000..cc1e6b9 --- /dev/null +++ b/code/build/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.18034 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace FileWatcher.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/code/build/Properties/Settings.settings b/code/build/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/code/build/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/code/build/ScriptManager.resx b/code/build/ScriptManager.resx new file mode 100644 index 0000000..5da7a24 --- /dev/null +++ b/code/build/ScriptManager.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/code/build/packages.config b/code/build/packages.config new file mode 100644 index 0000000..88a3709 --- /dev/null +++ b/code/build/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/code/src/About.Designer.cs b/code/src/About.Designer.cs new file mode 100644 index 0000000..5d43b90 --- /dev/null +++ b/code/src/About.Designer.cs @@ -0,0 +1,99 @@ +namespace FileWatcher +{ + partial class About + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(About)); + this.button1 = new System.Windows.Forms.Button(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + this.SuspendLayout(); + // + // button1 + // + this.button1.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Flat; + this.button1.Location = new System.Drawing.Point(379, 151); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(75, 23); + this.button1.TabIndex = 1; + this.button1.Text = "Ok"; + this.button1.UseVisualStyleBackColor = true; + // + // pictureBox1 + // + this.pictureBox1.Image = global::FileWatcher.Properties.Resources.stock_3d_texture_and_shading_128x128; + this.pictureBox1.Location = new System.Drawing.Point(12, 12); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(131, 135); + this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.CenterImage; + this.pictureBox1.TabIndex = 0; + this.pictureBox1.TabStop = false; + // + // richTextBox1 + // + this.richTextBox1.BackColor = System.Drawing.SystemColors.ActiveCaption; + this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.richTextBox1.Location = new System.Drawing.Point(149, 12); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(305, 133); + this.richTextBox1.TabIndex = 2; + this.richTextBox1.Text = resources.GetString("richTextBox1.Text"); + // + // About + // + this.AcceptButton = this.button1; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.button1; + this.ClientSize = new System.Drawing.Size(466, 186); + this.Controls.Add(this.richTextBox1); + this.Controls.Add(this.button1); + this.Controls.Add(this.pictureBox1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "About"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "About"; + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.RichTextBox richTextBox1; + } +} \ No newline at end of file diff --git a/code/src/About.cs b/code/src/About.cs new file mode 100644 index 0000000..422311f --- /dev/null +++ b/code/src/About.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + public partial class About : Form + { + public About() + { + InitializeComponent(); + } + } +} diff --git a/code/src/EventRaisingStreamWriter.cs b/code/src/EventRaisingStreamWriter.cs new file mode 100644 index 0000000..6973631 --- /dev/null +++ b/code/src/EventRaisingStreamWriter.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; +using System.Threading.Tasks; + +namespace FileWatcher +{ + public class EventRaisingStreamWriter : StreamWriter + { + public event EventHandler> StringWritten; + + public EventRaisingStreamWriter(Stream s) + : base(s) + { + } + + private void LaunchEvent(string txtWritten) + { + if (StringWritten != null) + { + StringWritten(this, new MyEvtArgs(txtWritten)); + } + } + + public override void Write(string value) + { + base.Write(value); + LaunchEvent(value); + } + public override void Write(bool value) + { + base.Write(value); + LaunchEvent(value.ToString()); + } + } +} diff --git a/code/src/FileGroupSettings.Designer.cs b/code/src/FileGroupSettings.Designer.cs new file mode 100644 index 0000000..2d69cea --- /dev/null +++ b/code/src/FileGroupSettings.Designer.cs @@ -0,0 +1,97 @@ +namespace FileWatcher +{ + partial class FileGroupSettings + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FileGroupSettings)); + this.restartDelayCB = new System.Windows.Forms.CheckBox(); + this.stopScriptCB = new System.Windows.Forms.CheckBox(); + this.relativeScriptCB = new System.Windows.Forms.CheckBox(); + this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); + this.SuspendLayout(); + // + // restartDelayCB + // + this.restartDelayCB.AutoSize = true; + this.restartDelayCB.Location = new System.Drawing.Point(12, 233); + this.restartDelayCB.Name = "restartDelayCB"; + this.restartDelayCB.Size = new System.Drawing.Size(231, 17); + this.restartDelayCB.TabIndex = 0; + this.restartDelayCB.Text = "Restart script delay timer when file updated."; + this.restartDelayCB.UseVisualStyleBackColor = true; + // + // stopScriptCB + // + this.stopScriptCB.AutoSize = true; + this.stopScriptCB.Location = new System.Drawing.Point(12, 210); + this.stopScriptCB.Name = "stopScriptCB"; + this.stopScriptCB.Size = new System.Drawing.Size(163, 17); + this.stopScriptCB.TabIndex = 1; + this.stopScriptCB.Text = "Stop script when file updated"; + this.stopScriptCB.UseVisualStyleBackColor = true; + // + // relativeScriptCB + // + this.relativeScriptCB.AutoSize = true; + this.relativeScriptCB.Checked = true; + this.relativeScriptCB.CheckState = System.Windows.Forms.CheckState.Checked; + this.relativeScriptCB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Strikeout, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.relativeScriptCB.Location = new System.Drawing.Point(12, 187); + this.relativeScriptCB.Name = "relativeScriptCB"; + this.relativeScriptCB.Size = new System.Drawing.Size(120, 17); + this.relativeScriptCB.TabIndex = 2; + this.relativeScriptCB.Text = "Relative Script Path"; + this.relativeScriptCB.UseVisualStyleBackColor = true; + // + // FileGroupSettings + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(284, 262); + this.Controls.Add(this.relativeScriptCB); + this.Controls.Add(this.stopScriptCB); + this.Controls.Add(this.restartDelayCB); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "FileGroupSettings"; + this.ShowInTaskbar = false; + this.Text = "File Group Settings"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + public System.Windows.Forms.CheckBox restartDelayCB; + public System.Windows.Forms.CheckBox stopScriptCB; + public System.Windows.Forms.CheckBox relativeScriptCB; + private System.Windows.Forms.ToolTip toolTip1; + } +} \ No newline at end of file diff --git a/code/src/FileGroupSettings.cs b/code/src/FileGroupSettings.cs new file mode 100644 index 0000000..766b2e1 --- /dev/null +++ b/code/src/FileGroupSettings.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + public partial class FileGroupSettings : Form + { + public FileGroupSettings() + { + InitializeComponent(); + } + + private void comboBox1_TextChanged(object sender, EventArgs e) + { + + } + } +} diff --git a/code/src/FileGroupTab.Designer.cs b/code/src/FileGroupTab.Designer.cs new file mode 100644 index 0000000..9404097 --- /dev/null +++ b/code/src/FileGroupTab.Designer.cs @@ -0,0 +1,352 @@ +namespace FileWatcher +{ + partial class FileGroupTab + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Component Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.toolStrip = new System.Windows.Forms.ToolStrip(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.FileExtensionsToolBox = new System.Windows.Forms.ToolStripTextBox(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.scriptPathTextBox = new System.Windows.Forms.ToolStripTextBox(); + this.toolStripTextBox1 = new System.Windows.Forms.ToolStripTextBox(); + this.delayCountDownLabel = new System.Windows.Forms.ToolStripLabel(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.scriptWatcher1 = new System.IO.FileSystemWatcher(); + this.scriptWorker = new System.ComponentModel.BackgroundWorker(); + this.foldersListBox = new System.Windows.Forms.ListBox(); + this.toolStripButton5 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton6 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.extensionWarning = new System.Windows.Forms.ToolStripLabel(); + this.scriptWarning = new System.Windows.Forms.ToolStripLabel(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.scriptMonitorButton = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton7 = new System.Windows.Forms.ToolStripButton(); + this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel(); + this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton4 = new System.Windows.Forms.ToolStripButton(); + this.toolStrip.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.scriptWatcher1)).BeginInit(); + this.SuspendLayout(); + // + // toolStrip + // + this.toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton5, + this.toolStripButton6, + this.toolStripSeparator1, + this.toolStripButton2, + this.toolStripLabel1, + this.FileExtensionsToolBox, + this.extensionWarning, + this.toolStripSeparator2, + this.scriptPathTextBox, + this.scriptWarning, + this.toolStripButton1, + this.scriptMonitorButton, + this.toolStripButton7, + this.toolStripTextBox1, + this.toolStripLabel2, + this.delayCountDownLabel, + this.toolStripButton3, + this.toolStripButton4}); + this.toolStrip.Location = new System.Drawing.Point(0, 0); + this.toolStrip.Name = "toolStrip"; + this.toolStrip.Size = new System.Drawing.Size(669, 25); + this.toolStrip.TabIndex = 1; + this.toolStrip.Text = "toolStrip3"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // toolStripLabel1 + // + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(86, 22); + this.toolStripLabel1.Text = "File Extensions:"; + // + // FileExtensionsToolBox + // + this.FileExtensionsToolBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.FileExtensionsToolBox.Name = "FileExtensionsToolBox"; + this.FileExtensionsToolBox.Size = new System.Drawing.Size(100, 25); + this.FileExtensionsToolBox.ToolTipText = "*.mp *.wav *.flac"; + this.FileExtensionsToolBox.TextChanged += new System.EventHandler(this.FileExtensionsToolBox_TextChanged); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // scriptPathTextBox + // + this.scriptPathTextBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.scriptPathTextBox.Name = "scriptPathTextBox"; + this.scriptPathTextBox.Size = new System.Drawing.Size(125, 25); + this.scriptPathTextBox.ToolTipText = "Script path"; + this.scriptPathTextBox.TextChanged += new System.EventHandler(this.scriptPathTextBox_TextChanged); + // + // toolStripTextBox1 + // + this.toolStripTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.toolStripTextBox1.Name = "toolStripTextBox1"; + this.toolStripTextBox1.Size = new System.Drawing.Size(50, 25); + this.toolStripTextBox1.Text = "5s"; + this.toolStripTextBox1.ToolTipText = "Script Delay (ex: 5m 5s) (units: ms,s,m,h)"; + this.toolStripTextBox1.TextChanged += new System.EventHandler(this.toolStripTextBox1_TextChanged); + // + // delayCountDownLabel + // + this.delayCountDownLabel.Alignment = System.Windows.Forms.ToolStripItemAlignment.Right; + this.delayCountDownLabel.Name = "delayCountDownLabel"; + this.delayCountDownLabel.Size = new System.Drawing.Size(33, 22); + this.delayCountDownLabel.Text = "--ms"; + this.delayCountDownLabel.ToolTipText = "Remaining time on script delay."; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + this.openFileDialog1.FileOk += new System.ComponentModel.CancelEventHandler(this.openFileDialog1_FileOk); + // + // splitContainer1 + // + this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 25); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.BackColor = System.Drawing.SystemColors.Window; + this.splitContainer1.Panel1.Controls.Add(this.foldersListBox); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.Controls.Add(this.richTextBox1); + this.splitContainer1.Size = new System.Drawing.Size(669, 355); + this.splitContainer1.SplitterDistance = 179; + this.splitContainer1.TabIndex = 3; + // + // richTextBox1 + // + this.richTextBox1.BackColor = System.Drawing.SystemColors.AppWorkspace; + this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.richTextBox1.Dock = System.Windows.Forms.DockStyle.Fill; + this.richTextBox1.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.richTextBox1.Location = new System.Drawing.Point(0, 0); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.ReadOnly = true; + this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth; + this.richTextBox1.Size = new System.Drawing.Size(667, 170); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = ":Script Output:\n"; + // + // scriptWatcher1 + // + this.scriptWatcher1.EnableRaisingEvents = true; + this.scriptWatcher1.Filter = "."; + this.scriptWatcher1.SynchronizingObject = this; + this.scriptWatcher1.Changed += new System.IO.FileSystemEventHandler(this.scriptWatcher1_Changed); + // + // scriptWorker + // + this.scriptWorker.WorkerSupportsCancellation = true; + this.scriptWorker.DoWork += new System.ComponentModel.DoWorkEventHandler(this.backgroundWorker1_DoWork); + // + // foldersListBox + // + this.foldersListBox.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.foldersListBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.foldersListBox.FormattingEnabled = true; + this.foldersListBox.Location = new System.Drawing.Point(0, 0); + this.foldersListBox.Name = "foldersListBox"; + this.foldersListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiExtended; + this.foldersListBox.Size = new System.Drawing.Size(667, 177); + this.foldersListBox.TabIndex = 3; + // + // toolStripButton5 + // + this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton5.Image = global::FileWatcher.Properties.Resources.plus; + this.toolStripButton5.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton5.Name = "toolStripButton5"; + this.toolStripButton5.Size = new System.Drawing.Size(23, 22); + this.toolStripButton5.Text = "Add a new directory to watch for file changes."; + this.toolStripButton5.Click += new System.EventHandler(this.toolStripButton5_Click_1); + // + // toolStripButton6 + // + this.toolStripButton6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton6.Image = global::FileWatcher.Properties.Resources.cross; + this.toolStripButton6.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton6.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton6.Name = "toolStripButton6"; + this.toolStripButton6.Size = new System.Drawing.Size(23, 22); + this.toolStripButton6.Text = "Remove selected directories"; + this.toolStripButton6.Click += new System.EventHandler(this.toolStripButton6_Click); + // + // toolStripButton2 + // + this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton2.Image = global::FileWatcher.Properties.Resources.settings; + this.toolStripButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Size = new System.Drawing.Size(23, 22); + this.toolStripButton2.Text = "File Group Settings"; + this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click); + // + // extensionWarning + // + this.extensionWarning.Image = global::FileWatcher.Properties.Resources.warning; + this.extensionWarning.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.extensionWarning.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.extensionWarning.Name = "extensionWarning"; + this.extensionWarning.Size = new System.Drawing.Size(10, 22); + this.extensionWarning.ToolTipText = "Invalid File Extension/s"; + // + // scriptWarning + // + this.scriptWarning.Image = global::FileWatcher.Properties.Resources.warning; + this.scriptWarning.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.scriptWarning.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.scriptWarning.Name = "scriptWarning"; + this.scriptWarning.Size = new System.Drawing.Size(10, 22); + this.scriptWarning.ToolTipText = "Invalid Script"; + // + // toolStripButton1 + // + this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton1.Image = global::FileWatcher.Properties.Resources.folder; + this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(23, 22); + this.toolStripButton1.Text = "Load and link script"; + this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click); + // + // scriptMonitorButton + // + this.scriptMonitorButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.scriptMonitorButton.Enabled = false; + this.scriptMonitorButton.Image = global::FileWatcher.Properties.Resources.block; + this.scriptMonitorButton.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.scriptMonitorButton.ImageTransparentColor = System.Drawing.Color.Magenta; + this.scriptMonitorButton.Name = "scriptMonitorButton"; + this.scriptMonitorButton.Size = new System.Drawing.Size(23, 22); + this.scriptMonitorButton.Text = "Script Monitor (when script is updated check here to reload script)"; + this.scriptMonitorButton.Click += new System.EventHandler(this.scriptMonitorButton_Click); + // + // toolStripButton7 + // + this.toolStripButton7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton7.Image = global::FileWatcher.Properties.Resources.script; + this.toolStripButton7.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton7.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton7.Name = "toolStripButton7"; + this.toolStripButton7.Size = new System.Drawing.Size(23, 22); + this.toolStripButton7.Text = "Edit Script using the default editor set in Preferences"; + this.toolStripButton7.Click += new System.EventHandler(this.toolStripButton7_Click_1); + // + // toolStripLabel2 + // + this.toolStripLabel2.Image = global::FileWatcher.Properties.Resources.warning; + this.toolStripLabel2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripLabel2.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.toolStripLabel2.Name = "toolStripLabel2"; + this.toolStripLabel2.Size = new System.Drawing.Size(10, 22); + this.toolStripLabel2.ToolTipText = "Invalid Delay"; + // + // toolStripButton3 + // + this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton3.Image = global::FileWatcher.Properties.Resources.play; + this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton3.Name = "toolStripButton3"; + this.toolStripButton3.Size = new System.Drawing.Size(23, 22); + this.toolStripButton3.Text = "toolStripButton3"; + // + // toolStripButton4 + // + this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton4.Image = global::FileWatcher.Properties.Resources.stop; + this.toolStripButton4.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton4.Name = "toolStripButton4"; + this.toolStripButton4.Size = new System.Drawing.Size(23, 22); + this.toolStripButton4.Text = "toolStripButton4"; + // + // FileGroupTab + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.AutoSize = true; + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.toolStrip); + this.Name = "FileGroupTab"; + this.Size = new System.Drawing.Size(669, 380); + this.toolStrip.ResumeLayout(false); + this.toolStrip.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel2.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + ((System.ComponentModel.ISupportInitialize)(this.scriptWatcher1)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ToolStrip toolStrip; + private System.Windows.Forms.ToolStripButton toolStripButton5; + private System.Windows.Forms.ToolStripButton toolStripButton6; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripTextBox FileExtensionsToolBox; + private System.Windows.Forms.ToolStripLabel extensionWarning; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton toolStripButton7; + private System.Windows.Forms.ToolStripTextBox scriptPathTextBox; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripLabel scriptWarning; + private System.Windows.Forms.ToolStripTextBox toolStripTextBox1; + private System.Windows.Forms.ToolStripLabel toolStripLabel2; + private System.Windows.Forms.ToolStripButton toolStripButton2; + private System.Windows.Forms.SplitContainer splitContainer1; + private System.Windows.Forms.RichTextBox richTextBox1; + private System.IO.FileSystemWatcher scriptWatcher1; + private System.ComponentModel.BackgroundWorker scriptWorker; + private System.Windows.Forms.ToolStripButton scriptMonitorButton; + private System.Windows.Forms.ToolStripLabel delayCountDownLabel; + private System.Windows.Forms.ListBox foldersListBox; + private System.Windows.Forms.ToolStripButton toolStripButton3; + private System.Windows.Forms.ToolStripButton toolStripButton4; + } +} diff --git a/code/src/FileGroupTab.cs b/code/src/FileGroupTab.cs new file mode 100644 index 0000000..e6e1275 --- /dev/null +++ b/code/src/FileGroupTab.cs @@ -0,0 +1,791 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.Data; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using System.Windows.Forms; + +using IronPython.Hosting; +using IronPython.Runtime; +using Microsoft.Scripting; +using Microsoft.Scripting.Hosting; + +using Microsoft.Win32; + +namespace FileWatcher +{ + public partial class FileGroupTab : UserControl + { + /// + /// Used for catching output from the Python runtime + /// + private EventRaisingStreamWriter m_LogStream = null; + private EventRaisingStreamWriter m_ErrorStream = null; + private MemoryStream m_MemoryStream = new MemoryStream(); + private delegate void SetTextCallback(object sender, MyEvtArgs e); + private delegate void SetStringCallback(string e); + + // TODO: Push the updated files to a multiprocessing queue that I create inside of the scope of the script + private ScriptEngine pyEngine = null; + private ScriptRuntime pyRuntime = null; + private ScriptScope pyScope = null; + + BindingList m_FolderList = new BindingList(); + + List m_FileWatchers = new List(); + List m_UpdatedFiles = new List(); + + TimerPlus m_Timer = new TimerPlus(); + System.Timers.Timer m_TickCounter = new System.Timers.Timer(); + + + private FileGroupSettings m_Settings = null; + + private static Regex regexSpaces = new Regex(@"^([a-zA-Z0-9_]*\*?[a-zA-Z0-9_]*(\.(\*|[a-zA-Z0-9]+))\s?)+$"); + + private static Regex regexMS = new Regex(@"^\d+ms$"); + private static Regex regexS = new Regex(@"^\d+s$"); + private static Regex regexM = new Regex(@"^\d+m$"); + private static Regex regexH = new Regex(@"^\d+h$"); + private static Regex regexTime = new Regex(@"^(\d+(ms|s|m|h)\s?)+$"); + + private static Regex regexAbsolutePath = new Regex(@"^[a-zA-Z]\:\\$"); + private static Regex regexNetworkPath = new Regex(@"^\\\\$"); + + public FileGroupTab() + { + InitializeComponent(); + + m_Timer.Enabled = false; + m_Timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Tick); + + m_TickCounter.Enabled = false; + m_TickCounter.Elapsed += new System.Timers.ElapsedEventHandler(timer_TickCountdown); + + if (pyEngine == null) + { + Dictionary options = new Dictionary(); + options["Debug"] = true; + pyEngine = Python.CreateEngine(options); + pyScope = pyEngine.CreateScope(); + + m_LogStream = new EventRaisingStreamWriter(m_MemoryStream); + m_LogStream.StringWritten += new EventHandler>(script_StringWritten); + pyEngine.Runtime.IO.SetOutput(m_MemoryStream, m_LogStream); + + m_ErrorStream = new EventRaisingStreamWriter(m_MemoryStream); + m_ErrorStream.StringWritten += new EventHandler>(script_ErrorStringWritten); + pyEngine.Runtime.IO.SetErrorOutput(m_MemoryStream, m_ErrorStream); + } + foldersListBox.DataSource = m_FolderList; + m_FolderList.ListChanged += new ListChangedEventHandler(foldersListBox_ListChanged); + + toolStripTextBox1_TextChanged(this, null); + } + + public List GetPaths() + { + List paths = new List(); + + foreach (string str in foldersListBox.Items) + { + paths.Add(str); + } + + return paths; + } + + public bool AreExtenionsValid() + { + return regexSpaces.Matches(FileExtensionsToolBox.Text).Count != 0; + } + + public string ExtensionString + { + get { return FileExtensionsToolBox.Text; } + set { FileExtensionsToolBox.Text = value; } + } + + public string[] Extensions + { + get { return FileExtensionsToolBox.Text.Split(' '); } + set { FileExtensionsToolBox.Text = string.Join(" ", value); } + } + + public string ScriptPath + { + get { return scriptPathTextBox.Text; } + set { scriptPathTextBox.Text = value; } + } + + public string GetScriptAbsolutePath() + { + bool match1 = regexAbsolutePath.Matches(ScriptPath).Count > 0; + bool match2 = regexNetworkPath.Matches(ScriptPath).Count > 0; + + if (match1 == false && match2 == false) + { + // Path is not an absolute path, make it one + return Path.GetFullPath(Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, ScriptPath)); + } return ScriptPath; + } + + public string Delay + { + get { return toolStripTextBox1.Text; } + set { toolStripTextBox1.Text = value; } + } + + public FileGroupSettings Settings + { + get + { + if (null == m_Settings || m_Settings.IsDisposed) + { + m_Settings = new FileGroupSettings(); + //m_Settings.Text = ""; + } return m_Settings; + } + } + + public List Directories + { + get { return m_FolderList.Cast().ToList(); } + set + { + m_FolderList.Clear(); + + foldersListBox.DataSource = null; + foldersListBox.SelectionMode = SelectionMode.None; + + foreach (string i in value) + m_FolderList.Add(i); + + foldersListBox.DataSource = m_FolderList; + foldersListBox.SelectionMode = SelectionMode.MultiExtended; + } + } + + static public string GetPythonDir() + { + // if you want better debugging information, return the iron python path + String ironPythonDir = "C:\\Program Files (x86)\\IronPython 2.7"; + if (Directory.Exists(ironPythonDir)) + { + return ironPythonDir; + } + + // Use the Libs folder in the local path (and let there be an error if it's not there) + return new FileInfo(Application.ExecutablePath).DirectoryName; + + // Iron Python doesn't seem properly compatible with Python, don't use the Python libs. + /*string[] paths = Environment.GetEnvironmentVariable("PATH").Split(';'); + foreach (string s in paths) + { + if (s.ToLower().IndexOf("python") != -1 && File.Exists(Path.Combine(s, "python.exe"))) + { + return s; + } + } + + return null;*/ + } + + private bool CompileSourceAndExecute() + { + string code = ""; + + string pythonDir = GetPythonDir(); + if (pythonDir == null) + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "Could not find your Python path, try adding it to your system PATH and try again."; + + Logger.LogError("Could not find your Python path, try adding it to your system PATH and try again."); + return false; + } + string pythonLibs = Path.Combine(pythonDir, "Lib"); + + if (Directory.Exists(pythonLibs)) + { + code += "import sys" + Environment.NewLine + "if '" + pythonLibs + "' not in sys.path: sys.path.append('" + pythonLibs + "')" + Environment.NewLine; + } + else + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "Could not find your Python Lib path in '" + pythonLibs + "'. Good luck."; + + Logger.LogError("Could not find your Python Lib path in '" + pythonLibs + "'. Good luck."); + + return false; + } + + try + { + // TODO: backup list of unprocessed files and move it to the new scope + + // WARNING: for some reason the dependencies that are loaded from the + // previous script do not get reloaded, even though they should be in + // the scope that we're disposing and not in the new scope. Will have + // to consider destroying the Python Engine and recreating that as well. + + pyScope = pyEngine.CreateScope(); + pyEngine.Execute(code.Replace("\\", "\\\\"), pyScope); + pyEngine.ExecuteFile(GetScriptAbsolutePath(),pyScope); + + //ScriptSource source = pyEngine.CreateScriptSourceFromString(code); + // object result = source.Execute(pyScope); + + } + catch (Exception e) + { + if (e is Microsoft.Scripting.SyntaxErrorException) + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "There is a syntax error: '" + e.Message + "' on line " + ((Microsoft.Scripting.SyntaxErrorException)e).Line; + + Logger.LogError("There is a syntax error in '" + Path.GetFileName(ScriptPath) + "': " + e.Message + "' on line " + ((Microsoft.Scripting.SyntaxErrorException)e).Line); + return false; + } + else if (e is System.Reflection.TargetInvocationException) + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "There is an invokation error: '" + e.Message + "'" + Environment.NewLine + e.StackTrace; + + Logger.LogError("There is an invokation error in '" + Path.GetFileName(ScriptPath) + "': " + e.Message + "'" + Environment.NewLine + e.StackTrace); + return false; + } + else if (e is System.ArgumentException) + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "There is an argument error: '" + e.Message + "'" + Environment.NewLine + e.StackTrace; + + Logger.LogError("There is an argument error in '" + Path.GetFileName(ScriptPath) + "': " + e.Message + "'" + Environment.NewLine + e.StackTrace); + return false; + } + else if (e is IronPython.Runtime.Exceptions.ImportException) + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "There is an import error: '" + e.Message + "'" + Environment.NewLine + e.StackTrace; + + Logger.LogError("There is an import error in '" + Path.GetFileName(ScriptPath) + "': " + e.Message + "'" + Environment.NewLine + e.StackTrace); + return false; + } + else + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "There is an unknown error: '" + e.Message + "'" + Environment.NewLine + e.StackTrace; + + Logger.LogError("There is an unknown error in '" + Path.GetFileName(ScriptPath) + "': " + e.Message + "'" + Environment.NewLine + e.StackTrace); + return false; + } + } + + try + { + Func, bool> updated = pyScope.GetVariable, bool>>("process_updated_files"); + } + catch (System.MissingMemberException) + { + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "The function 'process_updated_files' is missing, it accepts a list of files."; + + Logger.LogError("'" + Path.GetFileName(ScriptPath) + "' is missing the function 'process_updated_files', which accepts a list of files. "); + + return false; + } + + Logger.Log("Loaded and compiled '" + Path.GetFileName(ScriptPath) + "'"); + + SetInterval(); + + return true; + } + + private void toolStripButton5_Click(object sender, EventArgs e) + { + + } + + private void toolStripButton7_Click(object sender, EventArgs e) + { + + } + + public void AddWatchPath(string path ) + { + foldersListBox.DataSource = null; + foldersListBox.SelectionMode = SelectionMode.None; + + m_FolderList.Add(path); + + foldersListBox.DataSource = m_FolderList; + foldersListBox.SelectionMode = SelectionMode.MultiExtended; + } + + public void RemoveWatchPath(string path) + { + foldersListBox.DataSource = null; + foldersListBox.SelectionMode = SelectionMode.None; + + m_FolderList.Remove(path); + + foldersListBox.DataSource = m_FolderList; + foldersListBox.SelectionMode = SelectionMode.MultiExtended; + } + + private void toolStripButton5_Click_1(object sender, EventArgs e) + { + //Form1.s_FolderDialogue.InitialDirectory = Environment.CurrentDirectory; + if (Form1.s_FolderDialogue.ShowDialog()) + { + AddWatchPath(Form1.s_FolderDialogue.FileName); + Form1.Instance.AutoSave(); + } + } + + private void toolStripButton6_Click(object sender, EventArgs e) + { + while (foldersListBox.SelectedItems.Count > 0) + { + RemoveWatchPath((string)foldersListBox.SelectedItems[0]); + } + Form1.Instance.AutoSave(); + } + + private void toolStripButton7_Click_1(object sender, EventArgs e) + { + Process myProcess = new Process(); + + myProcess.StartInfo.FileName = Preferences.Instance.GetDefaultEditor(); //not the full application path + if (String.IsNullOrEmpty(myProcess.StartInfo.FileName)) + { + MessageBox.Show("Your selected default and backup text editors cannot be found, please open up preferences ( Ctrl + P ) and select an editor that can be found on the local computer.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + return; + } + + // TODO: check if directory is relative or not + myProcess.StartInfo.Arguments = GetScriptAbsolutePath(); + myProcess.Start(); + } + + + private void FileExtensionsToolBox_TextChanged(object sender, EventArgs e) + { + bool isMatch = regexSpaces.IsMatch(FileExtensionsToolBox.Text); + extensionWarning.Visible = isMatch == false; + UpdateFileWatchers(); + } + + private void openFileDialog1_FileOk(object sender, CancelEventArgs e) + { + + } + + private void toolStripButton1_Click(object sender, EventArgs e) + { + // TODO: check if directory is relative or not + openFileDialog1.InitialDirectory = Path.GetDirectoryName(GetScriptAbsolutePath()); + openFileDialog1.FileName = Path.GetFileName(ScriptPath); + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + scriptPathTextBox.Text = Utils.MakeRelativePath(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), openFileDialog1.FileName); + LoadScript(); + } + } + + private void toolStripButton2_Click(object sender, EventArgs e) + { + Settings.ShowDialog(this); + } + + public void SetDelayCountDownText(string str) + { + if (toolStrip.InvokeRequired) + { + SetStringCallback d = new SetStringCallback(SetDelayCountDownText); + this.Invoke(d, new object[] { str }); + } + else + { + delayCountDownLabel.Text = str; + } + } + + private void script_StringWritten(object sender, MyEvtArgs e) + { + if (richTextBox1.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(script_StringWritten); + this.Invoke(d, new object[] { sender, e }); + } + else + { + richTextBox1.AppendText(e.Value, Color.Black); + richTextBox1.SelectionStart = richTextBox1.Text.Length; + richTextBox1.ScrollToCaret(); + } + } + + private void script_ErrorStringWritten(object sender, MyEvtArgs e) + { + if (richTextBox1.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(script_ErrorStringWritten); + this.Invoke(d, new object[] { sender, e }); + } + else + { + richTextBox1.AppendText(e.Value, Color.Maroon); + richTextBox1.SelectionStart = richTextBox1.Text.Length; + richTextBox1.ScrollToCaret(); + } + } + + private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e) + { + try + { + // DO NOT check to see if equal to directory + if ((File.GetAttributes(e.FullPath) & FileAttributes.Directory) == FileAttributes.Directory) + { + return; + } + } + catch (FileNotFoundException) + { + return; + } + + if (m_Timer.Enabled == false || Settings.restartDelayCB.Checked) + { + m_Timer.Stop(); + m_TickCounter.Stop(); + + m_Timer.Enabled = false; + m_TickCounter.Enabled = false; + SetInterval(); + m_Timer.Enabled = true; + m_TickCounter.Enabled = true; + + m_Timer.Start(); + m_TickCounter.Start(); + } + + if (Settings.stopScriptCB.Checked) + { + scriptWorker.CancelAsync(); + } + + // TODO: check to see if the path is relative or absolute + string fullPath = Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, e.FullPath); + + if (false == m_UpdatedFiles.Contains(fullPath)) + { + m_UpdatedFiles.Add(fullPath); + } + } + + private void scriptPathTextBox_TextChanged(object sender, EventArgs e) + { + LoadScript(); + } + + void UpdateFileWatchers() + { + if (false == AreExtenionsValid()) + { + return; + } + foreach (FileSystemWatcher fsw in m_FileWatchers) + { + fsw.Dispose(); + } + m_FileWatchers.Clear(); + foreach (string s in Directories) + { + string path = Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, s); + foreach (string ext in Extensions) + { + if (false == Directory.Exists(path)) continue; + + FileSystemWatcher fileWatcher = new FileSystemWatcher(); + + // TODO: check to see if the path is relative + fileWatcher.Path = path; + + fileWatcher.Filter = ext; + + fileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName; + + fileWatcher.Created += fileSystemWatcher1_Changed; + fileWatcher.Changed += fileSystemWatcher1_Changed; + fileWatcher.Renamed += fileSystemWatcher1_Changed; + fileWatcher.Deleted += fileSystemWatcher1_Changed; + + // TODO: handle deleted files differently + + fileWatcher.EnableRaisingEvents = true; + fileWatcher.IncludeSubdirectories = true; + + m_FileWatchers.Add(fileWatcher); + } + } + } + + void foldersListBox_ListChanged(object sender, ListChangedEventArgs e) + { + switch (e.ListChangedType) + { + case ListChangedType.ItemMoved: + case ListChangedType.ItemAdded: + case ListChangedType.ItemChanged: + case ListChangedType.ItemDeleted: + UpdateFileWatchers(); + break; + } + } + + private void timer_Tick(object sender, EventArgs e) + { + SetDelayCountDownText("--ms"); + m_Timer.Stop(); + m_Timer.Enabled = false; + m_TickCounter.Stop(); + m_TickCounter.Enabled = false; + + + Form1.Instance.notifyIcon1.ShowBalloonTip(1000, "Script Running", "Running '" + ScriptPath + "'", ToolTipIcon.Info); + + //scriptWorker.RunWorkerAsync(m_UpdatedFiles); + + // run script in separate thread + Func, bool> updated = pyScope.GetVariable, bool>>("process_updated_files"); + + try + { + updated(m_UpdatedFiles); + + m_UpdatedFiles.Clear(); + + Logger.Log("Just finished running '" + ScriptPath + "'"); + + Form1.Instance.notifyIcon1.ShowBalloonTip(500, "Script Ran", "Finished running '" + ScriptPath + "'", ToolTipIcon.Info); + } + catch (System.Exception ex) + { + Logger.LogError("'" + ScriptPath + "' finished running with errors"); + + Form1.Instance.notifyIcon1.ShowBalloonTip(500, "Script Error", "'" + ScriptPath + "' finished running with errors", ToolTipIcon.Error); + + if (ex is IronPython.Runtime.Exceptions.ImportException) + { + Logger.Log("Import exception in '" + ScriptPath + "':" + ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + ex.TargetSite); + } + else if (ex is System.MissingMemberException) + { + Logger.Log("Missing member exception in '" + ScriptPath + "':" + ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + ex.TargetSite); + } + else if (ex is System.IO.DirectoryNotFoundException) + { + Logger.Log("Directory not found exception in '" + ScriptPath + "':" + ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + ex.TargetSite); + } + else if (ex is System.ArgumentException) + { + Logger.Log("Directory not found exception in '" + ScriptPath + "':" + ex.Message + Environment.NewLine + ex.StackTrace + Environment.NewLine + ex.TargetSite); + } + else + { + Logger.Log("Error running '" + ScriptPath + "':" + ex.Message + Environment.NewLine + ex.StackTrace); + } + } + + SetInterval(); + } + + private void timer_TickCountdown(object sender, EventArgs e) + { + string time_elapsed = ""; + + const double one_hour_to_ms = 3600000; + const double one_minute_to_ms = 60000; + const double one_second_to_ms = 1000.0; + + double ms = m_Timer.TimeRemaining.TotalMilliseconds; + + int hours = 0; + while (ms > one_hour_to_ms) + { + ms -= one_hour_to_ms; + ++hours; + } + + int minutes = 0; + while (ms > one_minute_to_ms) + { + ms -= one_minute_to_ms; + ++minutes; + } + + int seconds = 0; + while (ms > one_second_to_ms) + { + ms -= one_second_to_ms; + ++seconds; + } + + // round up + if (ms > 0) + { + ++seconds; + } + + if (hours > 0) + { + time_elapsed += hours + "h"; + } + + if (minutes > 0) + { + time_elapsed += (time_elapsed.Length > 0 ? " " : "") + minutes + "m"; + } + + if (seconds > 0) + { + time_elapsed += (time_elapsed.Length > 0 ? " " : "") + seconds + "s"; + } + + SetDelayCountDownText(time_elapsed); + } + + bool SetInterval() + { + // disable timer before setting interval + if (m_Timer.Enabled) return false; + + bool matches = regexTime.IsMatch(toolStripTextBox1.Text); + toolStripLabel2.Visible = matches == false; + toolStripLabel2.ToolTipText = "Invalid delay"; + + if (matches) + { + int interval = 0; + + string[] values = toolStripTextBox1.Text.Split(' '); + foreach (string val in values) + { + if (val.Length == 0) continue; + + if (regexMS.IsMatch(val)) + { + interval += Convert.ToInt32(Regex.Match(val, @"\d+").Value); + } + else if (regexS.IsMatch(val)) + { + interval += Convert.ToInt32(Regex.Match(val, @"\d+").Value) * 1000; + } + else if (regexM.IsMatch(val)) + { + interval += Convert.ToInt32(Regex.Match(val, @"\d+").Value) * 1000 * 60; + } + else if (regexH.IsMatch(val)) + { + interval += Convert.ToInt32(Regex.Match(val, @"\d+").Value) * 1000 * 60 * 24; + } + else + { + throw new Exception("Unexpected format"); + } + } + + if (interval != 0) + { + m_Timer.Interval = interval; + m_TickCounter.Interval = 1000; + return true; + } + + toolStripLabel2.Visible = true; + toolStripLabel2.ToolTipText = "Cannot have a value of 0"; + } + return false; + } + + private void toolStripTextBox1_TextChanged(object sender, EventArgs e) + { + SetInterval(); + } + + public void ToggleScriptUpdate(bool enabled) + { + if (enabled) + { + scriptMonitorButton.Image = Properties.Resources.drop_box; + scriptMonitorButton.Enabled = true; + scriptMonitorButton.ToolTipText = "Script updated, press to reload it"; + } + else + { + scriptMonitorButton.Image = Properties.Resources.block; + scriptMonitorButton.Enabled = false; + scriptMonitorButton.ToolTipText = "Script Monitor (when script is updated check here to reload script)"; + } + } + + public bool LoadScript() + { + ToggleScriptUpdate(false); + + string absolutePath = GetScriptAbsolutePath(); + + if ( false == File.Exists(absolutePath)) + { + scriptWatcher1.EnableRaisingEvents = false; + + scriptWarning.Visible = true; + scriptWarning.ToolTipText = "The source file '" + absolutePath + "' could not be found."; + + Logger.Log("The source file '" + absolutePath + "' could not be found."); + + return false; + } + + scriptWatcher1.Path = new FileInfo(absolutePath).DirectoryName; + scriptWatcher1.Filter = Path.GetFileName(absolutePath); + scriptWatcher1.Changed += scriptWatcher1_Changed; + scriptWatcher1.EnableRaisingEvents = true; + + if (false == CompileSourceAndExecute()) + { + return false; + } + + scriptWarning.Visible = false; + scriptWarning.ToolTipText = ""; + return true; + } + + private void scriptWatcher1_Changed(object sender, FileSystemEventArgs e) + { + // script updated + ToggleScriptUpdate(true); + } + + private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) + { + + } + + private void scriptMonitorButton_Click(object sender, EventArgs e) + { + LoadScript(); + } + } +} diff --git a/code/src/FilePath.cs b/code/src/FilePath.cs new file mode 100644 index 0000000..cc45a3b --- /dev/null +++ b/code/src/FilePath.cs @@ -0,0 +1,59 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + class FilePath + { + protected string m_RelativePath; + protected string m_AbsolutePath; + + protected bool m_IsRelative; + + private static Regex regexAbsolutePath = new Regex(@"^[a-zA-Z]\:\\$"); + private static Regex regexNetworkPath = new Regex(@"^\\\\$"); + + FilePath(string path) + { + bool match1 = regexAbsolutePath.Matches(path).Count > 0; + bool match2 = regexNetworkPath.Matches(path).Count > 0; + + if (match1 == false && match2 == false) + { + // Path is not an absolute path + m_RelativePath = path; + m_AbsolutePath = System.IO.Path.GetFullPath(System.IO.Path.Combine(new System.IO.FileInfo(Application.ExecutablePath).DirectoryName, path)); + + m_IsRelative = true; + } + else + { + m_RelativePath = Utils.MakeRelativePath(System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath), path); + m_AbsolutePath = path; + + m_IsRelative = false; + } + } + + + public string AbsolutePath + { + get { return m_AbsolutePath; } + } + + public string RelativePath + { + get { return m_RelativePath; } + } + + public bool IsRelative + { + get { return m_IsRelative; } + } + } +} diff --git a/code/src/FolderSelectDialog.cs b/code/src/FolderSelectDialog.cs new file mode 100644 index 0000000..f23e2fd --- /dev/null +++ b/code/src/FolderSelectDialog.cs @@ -0,0 +1,173 @@ +using System; +using System.Windows.Forms; + +// ------------------------------------------------------------------ +// Wraps System.Windows.Forms.OpenFileDialog to make it present +// a vista-style dialog. +// ------------------------------------------------------------------ + +namespace FolderSelect +{ + /// + /// Wraps System.Windows.Forms.OpenFileDialog to make it present + /// a vista-style dialog. + /// + public class FolderSelectDialog : IDisposable + { + // Wrapped dialog + System.Windows.Forms.OpenFileDialog ofd = null; + + /// + /// Default constructor + /// + public FolderSelectDialog() + { + ofd = new System.Windows.Forms.OpenFileDialog(); + + ofd.Filter = "Folders|\n"; + ofd.AddExtension = false; + ofd.CheckFileExists = false; + ofd.DereferenceLinks = true; + ofd.Multiselect = false; + } + + ~FolderSelectDialog() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + ofd.Dispose(); + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + #region Properties + + /// + /// Gets/Sets the initial folder to be selected. A null value selects the current directory. + /// + public string InitialDirectory + { + get { return ofd.InitialDirectory; } + set { ofd.InitialDirectory = value == null || value.Length == 0 ? Environment.CurrentDirectory : value; } + } + + /// + /// Gets/Sets the title to show in the dialog + /// + public string Title + { + get { return ofd.Title; } + set { ofd.Title = value == null ? "Select a folder" : value; } + } + + /// + /// Gets the selected folder + /// + public string FileName + { + get { return ofd.FileName; } + } + + #endregion + + #region Methods + + /// + /// Shows the dialog + /// + /// True if the user presses OK else false + public bool ShowDialog() + { + return ShowDialog(IntPtr.Zero); + } + + /// + /// Shows the dialog + /// + /// Handle of the control to be parent + /// True if the user presses OK else false + public bool ShowDialog(IntPtr hWndOwner) + { + bool flag = false; + + if (Environment.OSVersion.Version.Major >= 6) + { + var r = new Reflector("System.Windows.Forms"); + + uint num = 0; + Type typeIFileDialog = r.GetType("FileDialogNative.IFileDialog"); + object dialog = r.Call(ofd, "CreateVistaDialog"); + r.Call(ofd, "OnBeforeVistaDialog", dialog); + + uint options = (uint)r.CallAs(typeof(System.Windows.Forms.FileDialog), ofd, "GetOptions"); + options |= (uint)r.GetEnum("FileDialogNative.FOS", "FOS_PICKFOLDERS"); + r.CallAs(typeIFileDialog, dialog, "SetOptions", options); + + object pfde = r.New("FileDialog.VistaDialogEvents", ofd); + object[] parameters = new object[] { pfde, num }; + r.CallAs2(typeIFileDialog, dialog, "Advise", parameters); + num = (uint)parameters[1]; + try + { + int num2 = (int)r.CallAs(typeIFileDialog, dialog, "Show", hWndOwner); + flag = 0 == num2; + } + finally + { + r.CallAs(typeIFileDialog, dialog, "Unadvise", num); + GC.KeepAlive(pfde); + } + } + else + { + var fbd = new FolderBrowserDialog(); + fbd.Description = this.Title; + fbd.SelectedPath = this.InitialDirectory; + fbd.ShowNewFolderButton = false; + if (fbd.ShowDialog(new WindowWrapper(hWndOwner)) != DialogResult.OK) return false; + ofd.FileName = fbd.SelectedPath; + flag = true; + } + + return flag; + } + + #endregion + } + + /// + /// Creates IWin32Window around an IntPtr + /// + public class WindowWrapper : System.Windows.Forms.IWin32Window + { + /// + /// Constructor + /// + /// Handle to wrap + public WindowWrapper(IntPtr handle) + { + _hwnd = handle; + } + + /// + /// Original ptr + /// + public IntPtr Handle + { + get { return _hwnd; } + } + + private IntPtr _hwnd; + } + +} diff --git a/code/src/Form1.Designer.cs b/code/src/Form1.Designer.cs new file mode 100644 index 0000000..542bbe1 --- /dev/null +++ b/code/src/Form1.Designer.cs @@ -0,0 +1,480 @@ +namespace FileWatcher +{ + partial class Form1 + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.components = new System.ComponentModel.Container(); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1)); + this.menuStrip1 = new System.Windows.Forms.MenuStrip(); + this.fileToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.preferencesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.hideToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.exitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.helpToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.statusStrip1 = new System.Windows.Forms.StatusStrip(); + this.splitContainer1 = new System.Windows.Forms.SplitContainer(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.foldersListBox = new System.Windows.Forms.ListBox(); + this.toolStrip3 = new System.Windows.Forms.ToolStrip(); + this.toolStripButton5 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton6 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripLabel1 = new System.Windows.Forms.ToolStripLabel(); + this.FileExtensionsToolBox = new System.Windows.Forms.ToolStripTextBox(); + this.toolStripLabel2 = new System.Windows.Forms.ToolStripLabel(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton7 = new System.Windows.Forms.ToolStripButton(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton4 = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.textBox2 = new System.Windows.Forms.RichTextBox(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components); + this.trayContextStrip = new System.Windows.Forms.ContextMenuStrip(this.components); + this.exit = new System.Windows.Forms.ToolStripMenuItem(); + this.directoryEntry1 = new System.DirectoryServices.DirectoryEntry(); + this.menuStrip1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).BeginInit(); + this.splitContainer1.Panel1.SuspendLayout(); + this.splitContainer1.Panel2.SuspendLayout(); + this.splitContainer1.SuspendLayout(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.toolStrip3.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.trayContextStrip.SuspendLayout(); + this.SuspendLayout(); + // + // menuStrip1 + // + this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.fileToolStripMenuItem, + this.helpToolStripMenuItem}); + this.menuStrip1.Location = new System.Drawing.Point(0, 0); + this.menuStrip1.Name = "menuStrip1"; + this.menuStrip1.Size = new System.Drawing.Size(588, 24); + this.menuStrip1.TabIndex = 0; + this.menuStrip1.Text = "menuStrip1"; + // + // fileToolStripMenuItem + // + this.fileToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.saveToolStripMenuItem, + this.toolStripSeparator5, + this.preferencesToolStripMenuItem, + this.toolStripSeparator3, + this.hideToolStripMenuItem, + this.exitToolStripMenuItem}); + this.fileToolStripMenuItem.Name = "fileToolStripMenuItem"; + this.fileToolStripMenuItem.Size = new System.Drawing.Size(37, 20); + this.fileToolStripMenuItem.Text = "File"; + // + // saveToolStripMenuItem + // + this.saveToolStripMenuItem.Name = "saveToolStripMenuItem"; + this.saveToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.S))); + this.saveToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.saveToolStripMenuItem.Text = "Save"; + this.saveToolStripMenuItem.Click += new System.EventHandler(this.saveToolStripMenuItem_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(173, 6); + // + // preferencesToolStripMenuItem + // + this.preferencesToolStripMenuItem.Name = "preferencesToolStripMenuItem"; + this.preferencesToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.P))); + this.preferencesToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.preferencesToolStripMenuItem.Text = "Preferences"; + this.preferencesToolStripMenuItem.Click += new System.EventHandler(this.preferencesToolStripMenuItem_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(173, 6); + // + // hideToolStripMenuItem + // + this.hideToolStripMenuItem.Name = "hideToolStripMenuItem"; + this.hideToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.H))); + this.hideToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.hideToolStripMenuItem.Text = "Hide"; + this.hideToolStripMenuItem.ToolTipText = "Or use Escape to hide the window."; + this.hideToolStripMenuItem.Click += new System.EventHandler(this.hideToolStripMenuItem_Click); + // + // exitToolStripMenuItem + // + this.exitToolStripMenuItem.Name = "exitToolStripMenuItem"; + this.exitToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.X))); + this.exitToolStripMenuItem.Size = new System.Drawing.Size(176, 22); + this.exitToolStripMenuItem.Text = "Exit"; + this.exitToolStripMenuItem.Click += new System.EventHandler(this.exitToolStripMenuItem_Click); + // + // helpToolStripMenuItem + // + this.helpToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.aboutToolStripMenuItem}); + this.helpToolStripMenuItem.Name = "helpToolStripMenuItem"; + this.helpToolStripMenuItem.Size = new System.Drawing.Size(44, 20); + this.helpToolStripMenuItem.Text = "Help"; + // + // aboutToolStripMenuItem + // + this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + this.aboutToolStripMenuItem.Size = new System.Drawing.Size(107, 22); + this.aboutToolStripMenuItem.Text = "About"; + this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click); + // + // statusStrip1 + // + this.statusStrip1.Location = new System.Drawing.Point(0, 471); + this.statusStrip1.Name = "statusStrip1"; + this.statusStrip1.Size = new System.Drawing.Size(588, 22); + this.statusStrip1.TabIndex = 1; + this.statusStrip1.Text = "statusStrip1"; + // + // splitContainer1 + // + this.splitContainer1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.splitContainer1.Dock = System.Windows.Forms.DockStyle.Fill; + this.splitContainer1.Location = new System.Drawing.Point(0, 24); + this.splitContainer1.Name = "splitContainer1"; + this.splitContainer1.Orientation = System.Windows.Forms.Orientation.Horizontal; + // + // splitContainer1.Panel1 + // + this.splitContainer1.Panel1.Controls.Add(this.tabControl1); + this.splitContainer1.Panel1.Controls.Add(this.toolStrip1); + // + // splitContainer1.Panel2 + // + this.splitContainer1.Panel2.BackColor = System.Drawing.SystemColors.ControlDarkDark; + this.splitContainer1.Panel2.Controls.Add(this.textBox2); + this.splitContainer1.Panel2.Controls.Add(this.textBox1); + this.splitContainer1.Panel2.ForeColor = System.Drawing.SystemColors.GradientInactiveCaption; + this.splitContainer1.Size = new System.Drawing.Size(588, 447); + this.splitContainer1.SplitterDistance = 340; + this.splitContainer1.TabIndex = 3; + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill; + this.tabControl1.Location = new System.Drawing.Point(0, 25); + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(586, 313); + this.tabControl1.TabIndex = 2; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.foldersListBox); + this.tabPage1.Controls.Add(this.toolStrip3); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(578, 287); + this.tabPage1.TabIndex = 0; + this.tabPage1.Text = "tabPage1"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // foldersListBox + // + this.foldersListBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.foldersListBox.FormattingEnabled = true; + this.foldersListBox.Location = new System.Drawing.Point(3, 28); + this.foldersListBox.Name = "foldersListBox"; + this.foldersListBox.SelectionMode = System.Windows.Forms.SelectionMode.MultiSimple; + this.foldersListBox.Size = new System.Drawing.Size(572, 256); + this.foldersListBox.TabIndex = 1; + // + // toolStrip3 + // + this.toolStrip3.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip3.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton5, + this.toolStripButton6, + this.toolStripSeparator1, + this.toolStripLabel1, + this.FileExtensionsToolBox, + this.toolStripLabel2, + this.toolStripSeparator2, + this.toolStripButton7}); + this.toolStrip3.Location = new System.Drawing.Point(3, 3); + this.toolStrip3.Name = "toolStrip3"; + this.toolStrip3.Size = new System.Drawing.Size(572, 25); + this.toolStrip3.TabIndex = 0; + this.toolStrip3.Text = "toolStrip3"; + // + // toolStripButton5 + // + this.toolStripButton5.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton5.Image = global::FileWatcher.Properties.Resources.plus; + this.toolStripButton5.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton5.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton5.Name = "toolStripButton5"; + this.toolStripButton5.Size = new System.Drawing.Size(23, 22); + this.toolStripButton5.Text = "toolStripButton5"; + // + // toolStripButton6 + // + this.toolStripButton6.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton6.Image = global::FileWatcher.Properties.Resources.cross; + this.toolStripButton6.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton6.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton6.Name = "toolStripButton6"; + this.toolStripButton6.Size = new System.Drawing.Size(23, 22); + this.toolStripButton6.Text = "toolStripButton6"; + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(6, 25); + // + // toolStripLabel1 + // + this.toolStripLabel1.Name = "toolStripLabel1"; + this.toolStripLabel1.Size = new System.Drawing.Size(86, 22); + this.toolStripLabel1.Text = "File Extensions:"; + // + // FileExtensionsToolBox + // + this.FileExtensionsToolBox.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.FileExtensionsToolBox.Name = "FileExtensionsToolBox"; + this.FileExtensionsToolBox.Size = new System.Drawing.Size(100, 25); + // + // toolStripLabel2 + // + this.toolStripLabel2.Image = global::FileWatcher.Properties.Resources.warning; + this.toolStripLabel2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripLabel2.Margin = new System.Windows.Forms.Padding(2, 1, 2, 2); + this.toolStripLabel2.Name = "toolStripLabel2"; + this.toolStripLabel2.Size = new System.Drawing.Size(10, 22); + this.toolStripLabel2.ToolTipText = "Invalid File Extension/s"; + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 25); + // + // toolStripButton7 + // + this.toolStripButton7.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton7.Image = global::FileWatcher.Properties.Resources.script; + this.toolStripButton7.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton7.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton7.Name = "toolStripButton7"; + this.toolStripButton7.Size = new System.Drawing.Size(23, 22); + this.toolStripButton7.Text = "toolStripButton7"; + // + // toolStrip1 + // + this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton1, + this.toolStripSeparator4, + this.toolStripButton3, + this.toolStripButton4, + this.toolStripSeparator6}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(586, 25); + this.toolStrip1.TabIndex = 1; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripButton1 + // + this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton1.Image = global::FileWatcher.Properties.Resources.save; + this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(23, 22); + this.toolStripButton1.Text = "toolStripButton1"; + this.toolStripButton1.ToolTipText = "Save your current settings."; + this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click_1); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(6, 25); + // + // toolStripButton3 + // + this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton3.Image = global::FileWatcher.Properties.Resources.plus; + this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton3.Name = "toolStripButton3"; + this.toolStripButton3.Size = new System.Drawing.Size(23, 22); + this.toolStripButton3.Text = "New File Group"; + this.toolStripButton3.ToolTipText = "Create File Group"; + this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click_1); + // + // toolStripButton4 + // + this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton4.Image = global::FileWatcher.Properties.Resources.cross; + this.toolStripButton4.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton4.Name = "toolStripButton4"; + this.toolStripButton4.Size = new System.Drawing.Size(23, 22); + this.toolStripButton4.Text = "Delete File Group"; + this.toolStripButton4.Click += new System.EventHandler(this.toolStripButton4_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(6, 25); + // + // textBox2 + // + this.textBox2.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.textBox2.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBox2.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox2.Location = new System.Drawing.Point(0, 0); + this.textBox2.Name = "textBox2"; + this.textBox2.ReadOnly = true; + this.textBox2.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical; + this.textBox2.Size = new System.Drawing.Size(586, 78); + this.textBox2.TabIndex = 1; + this.textBox2.Text = ""; + // + // textBox1 + // + this.textBox1.BackColor = System.Drawing.SystemColors.Window; + this.textBox1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; + this.textBox1.Dock = System.Windows.Forms.DockStyle.Bottom; + this.textBox1.Font = new System.Drawing.Font("Consolas", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.textBox1.Location = new System.Drawing.Point(0, 78); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(586, 23); + this.textBox1.TabIndex = 0; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox1_KeyPress); + // + // notifyIcon1 + // + this.notifyIcon1.ContextMenuStrip = this.trayContextStrip; + this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon"))); + this.notifyIcon1.Text = "FileWatcher"; + this.notifyIcon1.Visible = true; + this.notifyIcon1.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDoubleClick); + // + // trayContextStrip + // + this.trayContextStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.exit}); + this.trayContextStrip.Name = "trayContextStrip"; + this.trayContextStrip.RenderMode = System.Windows.Forms.ToolStripRenderMode.System; + this.trayContextStrip.Size = new System.Drawing.Size(93, 26); + this.trayContextStrip.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening); + // + // exit + // + this.exit.Name = "exit"; + this.exit.Size = new System.Drawing.Size(92, 22); + this.exit.Text = "Exit"; + this.exit.Click += new System.EventHandler(this.toolStripMenuItem1_Click); + // + // Form1 + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(588, 493); + this.Controls.Add(this.splitContainer1); + this.Controls.Add(this.statusStrip1); + this.Controls.Add(this.menuStrip1); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.KeyPreview = true; + this.MainMenuStrip = this.menuStrip1; + this.Name = "Form1"; + this.Text = "FileWatcher"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); + this.Load += new System.EventHandler(this.Form1_Load); + this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.Form1_KeyPress); + this.Resize += new System.EventHandler(this.Form1_Resize); + this.menuStrip1.ResumeLayout(false); + this.menuStrip1.PerformLayout(); + this.splitContainer1.Panel1.ResumeLayout(false); + this.splitContainer1.Panel1.PerformLayout(); + this.splitContainer1.Panel2.ResumeLayout(false); + this.splitContainer1.Panel2.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.splitContainer1)).EndInit(); + this.splitContainer1.ResumeLayout(false); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.toolStrip3.ResumeLayout(false); + this.toolStrip3.PerformLayout(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.trayContextStrip.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip menuStrip1; + private System.Windows.Forms.ToolStripMenuItem fileToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem hideToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exitToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem helpToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.StatusStrip statusStrip1; + private System.Windows.Forms.SplitContainer splitContainer1; + public System.Windows.Forms.NotifyIcon notifyIcon1; + private System.Windows.Forms.ContextMenuStrip trayContextStrip; + private System.Windows.Forms.ToolStripMenuItem exit; + private System.DirectoryServices.DirectoryEntry directoryEntry1; + private System.Windows.Forms.ToolStripMenuItem preferencesToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton toolStripButton3; + private System.Windows.Forms.ToolStripButton toolStripButton4; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.ToolStripMenuItem saveToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ListBox foldersListBox; + private System.Windows.Forms.ToolStrip toolStrip3; + private System.Windows.Forms.ToolStripButton toolStripButton5; + private System.Windows.Forms.ToolStripButton toolStripButton6; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripLabel toolStripLabel1; + private System.Windows.Forms.ToolStripTextBox FileExtensionsToolBox; + private System.Windows.Forms.ToolStripLabel toolStripLabel2; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton toolStripButton7; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + public System.Windows.Forms.RichTextBox textBox2; + } +} + diff --git a/code/src/Form1.cs b/code/src/Form1.cs new file mode 100644 index 0000000..c5e661a --- /dev/null +++ b/code/src/Form1.cs @@ -0,0 +1,834 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using System.Xml; + +using IronPython.Hosting; +using IronPython.Runtime; +using Microsoft.Scripting; +using Microsoft.Scripting.Hosting; + +using FolderSelect; + +namespace FileWatcher +{ + public sealed partial class Form1 : Form + { + public static FolderSelectDialog s_FolderDialogue = null; + public About m_About = null; + public NewFileGroup m_NewFileGroup = null; + + public TabPage m_TabPageReference = null; + + private ScriptEngine pyEngine = null; + private ScriptRuntime pyRuntime = null; + private ScriptScope pyScope = null; + + private EventRaisingStreamWriter m_LogStream = null; + private EventRaisingStreamWriter m_ErrorStream = null; + private MemoryStream m_MemoryStream = new MemoryStream(); + + private delegate void SetTextCallback(object sender, MyEvtArgs e); + + private List CommandHistory = new List(); + private int MaxCommandHistorySize; + private int CurrentCommandHistoryItem; + + + private static bool m_ReallyClose; + + // Better folder dialogue + // http://www.etcoding.com/post/2012/01/03/Better-folder-browser-dialog-in-WinForms + // Or just use this reflector hack: + // http://www.lyquidity.com/devblog/?p=136 + + #region Singleton + + private static readonly Form1 instance = new Form1(); + + static Form1() + { + } + + public static Form1 Instance + { + get + { + return instance; + } + } + #endregion + + private Form1() + { + pyEngine = Python.CreateEngine(); + pyEngine.Runtime.LoadAssembly(Assembly.GetAssembly(typeof(FileWatcher.Form1))); + + pyScope = pyEngine.CreateScope(); + + m_LogStream = new EventRaisingStreamWriter(m_MemoryStream); + m_LogStream.StringWritten += new EventHandler>(script_StringWritten); + pyEngine.Runtime.IO.SetOutput(m_MemoryStream, m_LogStream); + + m_ErrorStream = new EventRaisingStreamWriter(m_MemoryStream); + m_ErrorStream.StringWritten += new EventHandler>(script_ErrorStringWritten); + pyEngine.Runtime.IO.SetErrorOutput(m_MemoryStream, m_ErrorStream); + + string pythonDir = FileGroupTab.GetPythonDir(); + if (pythonDir != null) + { + string pythonLibs = Path.Combine(pythonDir, "Lib"); + + if (Directory.Exists(pythonLibs)) + { + string import = "import sys" + Environment.NewLine + "sys.path.append('" + pythonLibs + "')" + Environment.NewLine; + + ScriptSource source = pyEngine.CreateScriptSourceFromString(import, SourceCodeKind.AutoDetect); + object result = source.Execute(pyScope); + } + } + + InitializeComponent(); + + s_FolderDialogue = new FolderSelectDialog(); + s_FolderDialogue.Title = "Select a folder"; + s_FolderDialogue.InitialDirectory = @"c:\"; + + m_ReallyClose = false; + + Title = ""; + + LoadFileGroups(); + + if (Program.Args.ContainsKey("--minimize") || Program.Args.ContainsKey("-m")) + { + WindowState = FormWindowState.Minimized; + Form1_Resize(this, null); + } + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + + SetTrayIcon(); + + #if DEBUG + System.Reflection.Assembly a = System.Reflection.Assembly.GetExecutingAssembly(); + string[] names = a.GetManifestResourceNames(); + foreach (string name in names) + System.Console.WriteLine(name); + #endif + } + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) components.Dispose(); + + if (m_LogStream != null) m_LogStream.Dispose(); + + if (m_ErrorStream != null) m_ErrorStream.Dispose(); + + if (m_MemoryStream != null) m_MemoryStream.Dispose(); + } + base.Dispose(disposing); + } + + public static string ApplicationName + { + get { return "FileWatcher"; } + } + + public string Title + { + get { return Text; } + set { Text = value.Length > 0 ? ApplicationName + " - " + value : ApplicationName; } + } + + public static void Quit() + { + Application.Exit(); + } + + + public void Save() + { + XmlDocument xmlDoc = new XmlDocument(); + + XmlNode xmlnode = xmlDoc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); + xmlDoc.AppendChild(xmlnode); + + XmlElement root; + XmlElement xmlelem1; + XmlElement xmlelem2; + XmlElement xmlelem3; + XmlElement xmlelem4; + + root = xmlDoc.CreateElement("", "root", ""); + xmlDoc.AppendChild(root); + + xmlelem1 = xmlDoc.CreateElement("", "groups", ""); + root.AppendChild(xmlelem1); + + foreach (TabPage tabPage in tabControl1.TabPages) + { + xmlelem2 = xmlDoc.CreateElement("", "group", ""); + xmlelem2.SetAttribute("name", tabPage.Text); + xmlelem1.AppendChild(xmlelem2); + + xmlelem3 = xmlDoc.CreateElement("", "directories", ""); + xmlelem2.AppendChild(xmlelem3); + + FileGroupTab fileGroup = null; + + foreach (FileGroupTab fg in tabPage.Controls) + { + fileGroup = fg; + } + + if (fileGroup != null) + { + foreach (string str in fileGroup.GetPaths()) + { + xmlelem4 = xmlDoc.CreateElement("", "directory", ""); + xmlelem4.SetAttribute("path", str); + xmlelem3.AppendChild(xmlelem4); + } + + xmlelem3 = xmlDoc.CreateElement("", "extensions", ""); + xmlelem3.SetAttribute("value", fileGroup.ExtensionString); + xmlelem2.AppendChild(xmlelem3); + + xmlelem3 = xmlDoc.CreateElement("", "script", ""); + xmlelem3.SetAttribute("path", fileGroup.ScriptPath); + xmlelem2.AppendChild(xmlelem3); + + xmlelem3 = xmlDoc.CreateElement("", "delay", ""); + xmlelem3.SetAttribute("value", fileGroup.Delay); + xmlelem2.AppendChild(xmlelem3); + + if (fileGroup.Settings.relativeScriptCB.Checked) + { + xmlelem3 = xmlDoc.CreateElement("", "relativeScriptPath", ""); + xmlelem2.AppendChild(xmlelem3); + } + + if (fileGroup.Settings.stopScriptCB.Checked) + { + xmlelem3 = xmlDoc.CreateElement("", "stopScriptWhenFileUpdated", ""); + xmlelem2.AppendChild(xmlelem3); + } + + if (fileGroup.Settings.restartDelayCB.Checked) + { + xmlelem3 = xmlDoc.CreateElement("", "restartDelayTimerWhenFileUpdated", ""); + xmlelem2.AppendChild(xmlelem3); + } + } + } + + xmlelem1 = xmlDoc.CreateElement("", "preferences", ""); + root.AppendChild(xmlelem1); + + if (Preferences.Instance.autoSaveCB.Checked) + { + xmlelem2 = xmlDoc.CreateElement("", "autosave", ""); + xmlelem1.AppendChild(xmlelem2); + } + + xmlelem2 = xmlDoc.CreateElement("", "editor", ""); + xmlelem1.AppendChild(xmlelem2); + + xmlelem3 = xmlDoc.CreateElement("", "defaults", ""); + xmlelem2.AppendChild(xmlelem3); + + foreach (string str in Preferences.Instance.GetDefaultPrograms()) + { + xmlelem4 = xmlDoc.CreateElement("", "default", ""); + xmlelem4.SetAttribute("name", str); + xmlelem3.AppendChild(xmlelem4); + } + + xmlelem3 = xmlDoc.CreateElement("", "programs", ""); + xmlelem2.AppendChild(xmlelem3); + + foreach (Tuple tuple in Preferences.Instance.GetEditorProgramPaths()) + { + xmlelem4 = xmlDoc.CreateElement("", "program", ""); + xmlelem4.SetAttribute("name", tuple.Item1); + xmlelem4.SetAttribute("path", tuple.Item2); + xmlelem3.AppendChild(xmlelem4); + } + + xmlDoc.Save(Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, "settings.xml")); + + Logger.Log("Saved settings.xml"); + } + + public void AutoSave() + { + if (Preferences.Instance.autoSaveCB.Checked) + { + Save(); + } + } + + public void SetTrayIcon() + { + if (WindowState == FormWindowState.Minimized) + { + notifyIcon1.Icon = new Icon(GetType().Module.Assembly.GetManifestResourceStream("FileWatcher.res.stock_3d-texture-spherical_16x16.ico")); + + } + else + { + notifyIcon1.Icon = new Icon(GetType().Module.Assembly.GetManifestResourceStream("FileWatcher.res.stock_3d-texture-and-shading_16x16.ico")); + } + } + + public void LoadFileGroups() + { + if ( null == m_TabPageReference ) + { + m_TabPageReference = tabPage1; + + tabControl1.TabPages.Remove(tabPage1); + } + } + + public void NewFileGroup() + { + + } + + protected override bool ProcessCmdKey(ref Message msg, Keys keyData) + { + if (keyData == (Keys.Control | Keys.E)) + { + //tabControl1.SelectedTab.Controls. + //return true; + } + return base.ProcessCmdKey(ref msg, keyData); + } + + private void aboutToolStripMenuItem_Click(object sender, EventArgs e) + { + if (null == m_About || m_About.IsDisposed) + { + m_About = new About(); + } + m_About.ShowDialog(this); + } + + private void preferencesToolStripMenuItem_Click(object sender, EventArgs e) + { + Preferences.Instance.ShowDialog(this); + } + + private void toolStripButton3_Click(object sender, EventArgs e) + { + if (null == m_NewFileGroup || m_NewFileGroup.IsDisposed) + { + m_NewFileGroup = new NewFileGroup(); + } + + while (true) + { + DialogResult result = m_NewFileGroup.ShowDialog(this); + if (result == DialogResult.OK) + { + String groupName = m_NewFileGroup.GetFileGroupName(); + String groupExtensions = m_NewFileGroup.GetFileGroupExtensions(); + String scriptName = m_NewFileGroup.GetFileGroupScript(); + + foreach (TabPage page in tabControl1.TabPages) + { + if (page.Name == groupName) + { + continue; + } + } + + TabPage tp = new TabPage(); + tp.Text = groupName; + + tabControl1.SuspendLayout(); + tabControl1.TabPages.Add(tp); + tabControl1.ResumeLayout(); + + FileGroupTab groupTab = new FileGroupTab(); + + groupTab.ExtensionString = groupExtensions; + groupTab.ScriptPath = scriptName; + + tp.SuspendLayout(); + tp.Controls.Add(groupTab); + groupTab.Dock = DockStyle.Fill; + tp.ResumeLayout(); + break; + } + else + { + break; + } + } + } + + private void toolStripButton5_Click(object sender, EventArgs e) + { + + } + + private void fileSystemWatcher1_Changed(object sender, System.IO.FileSystemEventArgs e) + { + + } + + private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e) + { + + } + + private void listView1_SelectedIndexChanged(object sender, EventArgs e) + { + + } + + private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) + { + Show(); + WindowState = FormWindowState.Normal; + SetTrayIcon(); + Activate(); + } + + private void Form1_Load(object sender, EventArgs e) + { + //global::FileWatcher.Properties.Resources + + XmlDocument xmlDoc = new XmlDocument(); + try + { + xmlDoc.Load(Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, "settings.xml")); + } + catch (System.IO.FileNotFoundException) + { + Save(); + return; + } + catch (XmlException exc) + { + Console.WriteLine(exc.Message); + MessageBox.Show("There is an error in your settings.xml: " + exc.Message, "XML Error", MessageBoxButtons.OK, MessageBoxIcon.Error); + Save(); + return; + } + + List invalidPaths = new List(); + + XmlNode root = xmlDoc.SelectSingleNode("root"); + if (root == null) + { + return; + } + + XmlNode groupsXML = root.SelectSingleNode("groups"); + if (groupsXML != null) + { + foreach (XmlNode node in groupsXML.SelectNodes("group")) + { + XmlAttribute nameXML = node.Attributes["name"]; + XmlNode directoriesXML = node.SelectSingleNode("directories"); + XmlNode extensionsXML = node.SelectSingleNode("extensions"); + XmlNode scriptXML = node.SelectSingleNode("script"); + XmlNode delayXML = node.SelectSingleNode("delay"); + + XmlNode relativeScriptPathXML = node.SelectSingleNode("relativeScriptPath"); + XmlNode stopScriptWhenFileUpdatedXML = node.SelectSingleNode("stopScriptWhenFileUpdated"); + XmlNode restartDelayTimerWhenFileUpdatedXML = node.SelectSingleNode("restartDelayTimerWhenFileUpdated"); + + string name = nameXML != null ? nameXML.InnerText : ""; + string extensions = ""; + string scriptPath = ""; + string delay = ""; + List directories = new List(); + + if (directoriesXML != null) + { + foreach (XmlNode directory in directoriesXML) + { + string dir = directory.Attributes["path"].InnerText; + // TODO: check to see if the directory is relative or not + if (!Directory.Exists(Path.Combine(new FileInfo(Application.ExecutablePath).DirectoryName, dir))) + { + invalidPaths.Add(dir); + } + directories.Add(dir); + } + } + + if (extensionsXML != null) + { + XmlAttribute elem = extensionsXML.Attributes["value"]; + if (elem != null) + { + extensions = elem.InnerText; + } + } + + if (scriptXML != null) + { + XmlAttribute elem = scriptXML.Attributes["path"]; + if (elem != null) + { + scriptPath = elem.InnerText; + } + } + + if (delayXML != null) + { + XmlAttribute elem = delayXML.Attributes["value"]; + if (elem != null) + { + delay = elem.InnerText; + } + } + + if (name.Length > 0) + { + FileGroupTab groupTab = new FileGroupTab(); + + groupTab.ExtensionString = extensions; + groupTab.ScriptPath = scriptPath; + groupTab.Directories = directories; + groupTab.Delay = delay; + groupTab.Settings.relativeScriptCB.Checked = relativeScriptPathXML != null; + groupTab.Settings.stopScriptCB.Checked = stopScriptWhenFileUpdatedXML != null; + groupTab.Settings.restartDelayCB.Checked = restartDelayTimerWhenFileUpdatedXML != null; + + TabPage tp = new TabPage(); + tp.Text = name; + + tabControl1.SuspendLayout(); + tabControl1.TabPages.Add(tp); + tabControl1.ResumeLayout(); + + tp.SuspendLayout(); + tp.Controls.Add(groupTab); + groupTab.Dock = DockStyle.Fill; + tp.ResumeLayout(); + } + else + { + MessageBox.Show("There is a group with no name that was not loaded, the next time the settings are saved this unnamed group will be lost. Edit your settings.xml to save it, or carry on.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + } + } + + if (invalidPaths.Count > 0) + { + MessageBox.Show("There are invalid paths in your settings file: '" + String.Join("', ", invalidPaths.ToArray()) + "'", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + } + } + + + XmlNode preferencesXML = root.SelectSingleNode("preferences"); + if (preferencesXML != null) + { + XmlNode autosaveXML = preferencesXML.SelectSingleNode("autosave"); + if (autosaveXML != null) + { + Preferences.Instance.autoSaveCB.Checked = true; + } + + XmlNode editorXML = preferencesXML.SelectSingleNode("editor"); + if (editorXML != null) + { + List defaultPrograms = new List(); + List> userDefinedPrograms = new List>(); + + XmlNode defaultsXML = editorXML.SelectSingleNode("defaults"); + if (defaultsXML != null) + { + foreach (XmlNode node in defaultsXML.SelectNodes("default")) + { + XmlAttribute attName = node.Attributes["name"]; + if (attName != null) + { + defaultPrograms.Add(attName.InnerText); + } + } + } + + XmlNode programsXML = editorXML.SelectSingleNode("programs"); + if (programsXML != null) + { + foreach (XmlNode node in programsXML.SelectNodes("program")) + { + XmlAttribute attName = node.Attributes["name"]; + XmlAttribute attPath = node.Attributes["path"]; + if (attName != null && attPath != null) + { + userDefinedPrograms.Add(new Tuple(attName.InnerText, attPath.InnerText)); + } + } + } + + Preferences.Instance.LoadEditorPreferences(defaultPrograms, userDefinedPrograms); + } + } + + Logger.Log("Loaded settings.xml"); + } + + private void Form1_Resize(object sender, EventArgs e) + { + if (FormWindowState.Minimized == WindowState) + { + Hide(); + SetTrayIcon(); + } + } + + private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) + { + + } + + private void toolStripMenuItem1_Click(object sender, EventArgs e) + { + m_ReallyClose = true; + Form1.Quit(); + } + + private void exitToolStripMenuItem_Click(object sender, EventArgs e) + { + m_ReallyClose = true; + Form1.Quit(); + } + + private void Form1_FormClosing(object sender, FormClosingEventArgs e) + { + if (!m_ReallyClose) + { + e.Cancel = true; + WindowState = FormWindowState.Minimized; + } + } + + private void Form1_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)Keys.Escape) + { + WindowState = FormWindowState.Minimized; + Form1_Resize(this, null); + + e.Handled = true; + } + } + + private void toolStripButton2_Click(object sender, EventArgs e) + { + if (s_FolderDialogue.ShowDialog()) + { + foldersListBox.Items.Add(s_FolderDialogue.FileName); + Save(); + } + } + + private void toolStripButton1_Click(object sender, EventArgs e) + { + while (foldersListBox.SelectedItems.Count > 0) + { + foldersListBox.Items.Remove(foldersListBox.SelectedItems[0]); + } + Save(); + } + + private void toolStripButton7_Click(object sender, EventArgs e) + { + + } + + private void hideToolStripMenuItem_Click(object sender, EventArgs e) + { + WindowState = FormWindowState.Minimized; + Form1_Resize(this, null); + } + + private void saveToolStripMenuItem_Click(object sender, EventArgs e) + { + Save(); + } + + private void toolStripButton1_Click_1(object sender, EventArgs e) + { + Save(); + } + + private void toolStripButton3_Click_1(object sender, EventArgs e) + { + if (null == m_NewFileGroup || m_NewFileGroup.IsDisposed) + { + m_NewFileGroup = new NewFileGroup(); + } + + while (true) + { + DialogResult result = m_NewFileGroup.ShowDialog(this); + if (result == DialogResult.OK) + { + String groupName = m_NewFileGroup.GetFileGroupName(); + String groupExtensions = m_NewFileGroup.GetFileGroupExtensions(); + String scriptName = m_NewFileGroup.GetFileGroupScript(); + + foreach (TabPage page in tabControl1.TabPages) + { + if (page.Name == groupName) + { + continue; + } + } + + TabPage tp = new TabPage(); + tp.Text = groupName; + + tabControl1.SuspendLayout(); + tabControl1.TabPages.Add(tp); + tabControl1.SelectedTab = tp; + tabControl1.ResumeLayout(); + + FileGroupTab groupTab = new FileGroupTab(); + + groupTab.ExtensionString = groupExtensions; + groupTab.ScriptPath = scriptName; + + tp.SuspendLayout(); + tp.Controls.Add(groupTab); + groupTab.Dock = DockStyle.Fill; + tp.ResumeLayout(); + break; + } + else + { + break; + } + } + } + + private void toolStripButton4_Click(object sender, EventArgs e) + { + if (tabControl1.SelectedTab != null) + { + if (MessageBox.Show( + "Are you sure you want to delete " + tabControl1.SelectedTab.Text + "?", + "Confirm delete", + MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) + { + FileGroupTab fileGroup = null; + + foreach (FileGroupTab fg in tabControl1.SelectedTab.Controls) + { + fileGroup = fg; + } + + if (fileGroup != null && MessageBox.Show( + "Do you want to delete the script associated with this file group?", + "Delete script?", + MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.Yes) + { + string script_path = fileGroup.ScriptPath; + File.Delete(script_path); + } + + tabControl1.TabPages.Remove(tabControl1.SelectedTab); + } + } + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + + } + + private void textBox1_KeyPress(object sender, KeyPressEventArgs e) + { + if (e.KeyChar == (char)Keys.Enter) + { + try + { + Logger.WriteLine("> " + textBox1.Text); + + //CompiledCode compiled = source.Compile(); + //compiled.Execute(pyScope); + //pyEngine.Execute(textBox1.Text, pyScope); + + ScriptSource source = pyEngine.CreateScriptSourceFromString(textBox1.Text, SourceCodeKind.AutoDetect); + object result = source.Execute(pyScope); + + if (result != null) + { + Logger.WriteLine(result.ToString()); + } + } + catch (Microsoft.Scripting.SyntaxErrorException ex) + { + Logger.Error("Syntax error:" + ex.Message); + } + catch (IronPython.Runtime.UnboundNameException ex) + { + Logger.Error(ex.Message); + } + catch (System.MissingMemberException ex) + { + Logger.Error(ex.Message); + } + + e.Handled = true; + } + } + + private void script_StringWritten(object sender, MyEvtArgs e) + { + if (textBox2.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(script_StringWritten); + this.Invoke(d, new object[] { sender, e }); + } + else + { + textBox2.AppendText(e.Value); + textBox2.SelectionStart = textBox2.Text.Length; + textBox2.ScrollToCaret(); + } + } + + private void script_ErrorStringWritten(object sender, MyEvtArgs e) + { + if (textBox2.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(script_ErrorStringWritten); + this.Invoke(d, new object[] { sender, e }); + } + else + { + textBox2.AppendText(e.Value, Color.Maroon); + textBox2.SelectionStart = textBox2.Text.Length; + textBox2.ScrollToCaret(); + } + } + } +} diff --git a/code/src/Logger.cs b/code/src/Logger.cs new file mode 100644 index 0000000..0f1ae51 --- /dev/null +++ b/code/src/Logger.cs @@ -0,0 +1,112 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FileWatcher +{ + public sealed class Logger + { + private delegate void SetTextCallback(string str, Color? color); + + #region Singleton + + private static readonly Logger instance = new Logger(); + + static Logger() + { + } + + public static Logger Instance + { + get + { + return instance; + } + } + #endregion + + private Logger() + { + } + + public void Print(string str, Color? color = null) + { + if (Form1.Instance.textBox2.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(Print); + Form1.Instance.textBox2.Invoke(d, new object[] { str, color }); + } + else + { + Form1.Instance.textBox2.AppendText(str, color.HasValue ? color.Value : Color.Black); + Form1.Instance.textBox2.SelectionStart = Form1.Instance.textBox2.Text.Length; + Form1.Instance.textBox2.ScrollToCaret(); + } + } + + public void PrintLine(string str, Color? color = null) + { + if (Form1.Instance.textBox2.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(PrintLine); + Form1.Instance.textBox2.Invoke(d, new object[] { str, color }); + } + else + { + Form1.Instance.textBox2.AppendText(str + Environment.NewLine, color.HasValue ? color.Value : Color.Black); + Form1.Instance.textBox2.SelectionStart = Form1.Instance.textBox2.Text.Length; + Form1.Instance.textBox2.ScrollToCaret(); + } + } + + public void ErrorLine(string str, Color? color = null) + { + if (Form1.Instance.textBox2.InvokeRequired) + { + SetTextCallback d = new SetTextCallback(ErrorLine); + Form1.Instance.textBox2.Invoke(d, new object[] { str, color }); + } + else + { + Form1.Instance.textBox2.AppendText(str + Environment.NewLine, color.HasValue ? color.Value : Color.Red); + Form1.Instance.textBox2.SelectionStart = Form1.Instance.textBox2.Text.Length; + Form1.Instance.textBox2.ScrollToCaret(); + } + } + + public void LogLine(string str) + { + Print(DateTime.Now.ToString("R") + " ", Color.Maroon); + PrintLine(str); + } + + public void LogErrorLine(string str) + { + Print(DateTime.Now.ToString("R") + " ", Color.Maroon); + PrintLine(str, Color.Red); + } + + static public void WriteLine(string str) + { + Logger.Instance.PrintLine(str); + } + + static public void Error(string str) + { + Logger.Instance.ErrorLine(str); + } + + static public void Log(string str) + { + Logger.Instance.LogLine(str); + } + + static public void LogError(string str) + { + Logger.Instance.LogErrorLine(str); + } + } +} diff --git a/code/src/MyEvtArgs.cs b/code/src/MyEvtArgs.cs new file mode 100644 index 0000000..8df0ea5 --- /dev/null +++ b/code/src/MyEvtArgs.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FileWatcher +{ + public class MyEvtArgs : EventArgs + { + public T Value + { + get; + private set; + } + public MyEvtArgs(T value) + { + this.Value = value; + } + } +} diff --git a/code/src/NewFileGroup.Designer.cs b/code/src/NewFileGroup.Designer.cs new file mode 100644 index 0000000..f524cfd --- /dev/null +++ b/code/src/NewFileGroup.Designer.cs @@ -0,0 +1,173 @@ +namespace FileWatcher +{ + partial class NewFileGroup + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(NewFileGroup)); + this.label1 = new System.Windows.Forms.Label(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.createButton = new System.Windows.Forms.Button(); + this.cancelButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(86, 13); + this.label1.TabIndex = 0; + this.label1.Text = "File Group Name"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(199, 10); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(219, 20); + this.textBox1.TabIndex = 1; + this.textBox1.TextChanged += new System.EventHandler(this.textBox1_TextChanged); + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(13, 39); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(170, 13); + this.label2.TabIndex = 2; + this.label2.Text = "File Extensions (comma separated)"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(199, 36); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(219, 20); + this.textBox2.TabIndex = 3; + // + // openFileDialog1 + // + this.openFileDialog1.FileName = "openFileDialog1"; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(13, 65); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(34, 13); + this.label3.TabIndex = 4; + this.label3.Text = "Script"; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(199, 62); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(187, 20); + this.textBox3.TabIndex = 5; + this.textBox3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.textBox3_KeyPress); + // + // button1 + // + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.button1.Image = global::FileWatcher.Properties.Resources.folder; + this.button1.Location = new System.Drawing.Point(392, 60); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(26, 23); + this.button1.TabIndex = 6; + this.button1.UseVisualStyleBackColor = true; + this.button1.Click += new System.EventHandler(this.button1_Click); + // + // createButton + // + this.createButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.createButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.createButton.Location = new System.Drawing.Point(253, 99); + this.createButton.Name = "createButton"; + this.createButton.Size = new System.Drawing.Size(84, 23); + this.createButton.TabIndex = 7; + this.createButton.Text = "Create Group"; + this.createButton.UseVisualStyleBackColor = true; + this.createButton.Click += new System.EventHandler(this.createButton_Click); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.cancelButton.Location = new System.Drawing.Point(343, 99); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 8; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + // + // NewFileGroup + // + this.AcceptButton = this.createButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(430, 134); + this.Controls.Add(this.cancelButton); + this.Controls.Add(this.createButton); + this.Controls.Add(this.button1); + this.Controls.Add(this.textBox3); + this.Controls.Add(this.label3); + this.Controls.Add(this.textBox2); + this.Controls.Add(this.label2); + this.Controls.Add(this.textBox1); + this.Controls.Add(this.label1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "NewFileGroup"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "New File Group"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.OpenFileDialog openFileDialog1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.Button createButton; + private System.Windows.Forms.Button cancelButton; + } +} \ No newline at end of file diff --git a/code/src/NewFileGroup.cs b/code/src/NewFileGroup.cs new file mode 100644 index 0000000..4d3591b --- /dev/null +++ b/code/src/NewFileGroup.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + public partial class NewFileGroup : Form + { + public bool setScriptDirectory = false; + + public NewFileGroup() + { + InitializeComponent(); + } + + public String GetFileGroupName() + { + return textBox1.Text; + } + + public String GetFileGroupExtensions() + { + return textBox2.Text; + } + + public String GetFileGroupScript() + { + return textBox3.Text; + } + + private void NewFileGroup_KeyPress(object sender, KeyPressEventArgs e) + { + + } + + private void createButton_Click(object sender, EventArgs e) + { + Directory.CreateDirectory(Path.GetDirectoryName(textBox3.Text)); + using (var fileStream = File.Open(textBox3.Text, FileMode.OpenOrCreate, FileAccess.ReadWrite)); + } + + private void textBox3_KeyPress(object sender, KeyPressEventArgs e) + { + setScriptDirectory = true; + } + + private void textBox1_VisibleChanged(object sender, EventArgs e) + { + + } + + private void textBox1_TextChanged(object sender, EventArgs e) + { + if (setScriptDirectory && textBox3.Text.Length == 0) + { + setScriptDirectory = false; + } + + if (false == setScriptDirectory) + { + textBox3.Text = "scripts\\" + textBox1.Text.ToLower().Replace(' ', '_') + ".py"; + } + } + + private void button1_Click(object sender, EventArgs e) + { + if (openFileDialog1.ShowDialog() == DialogResult.OK) + { + textBox3.Text = openFileDialog1.FileName; + } + } + } +} diff --git a/code/src/Preferences.Designer.cs b/code/src/Preferences.Designer.cs new file mode 100644 index 0000000..cca9346 --- /dev/null +++ b/code/src/Preferences.Designer.cs @@ -0,0 +1,318 @@ +namespace FileWatcher +{ + partial class Preferences + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Preferences)); + this.cancelButton = new System.Windows.Forms.Button(); + this.saveButton = new System.Windows.Forms.Button(); + this.tabControl1 = new System.Windows.Forms.TabControl(); + this.tabPage1 = new System.Windows.Forms.TabPage(); + this.label2 = new System.Windows.Forms.Label(); + this.label1 = new System.Windows.Forms.Label(); + this.comboBox1 = new System.Windows.Forms.ComboBox(); + this.autoSaveCB = new System.Windows.Forms.CheckBox(); + this.runAtStartupCB = new System.Windows.Forms.CheckBox(); + this.scriptEditorTab = new System.Windows.Forms.TabPage(); + this.groupBox1 = new System.Windows.Forms.GroupBox(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton4 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label3 = new System.Windows.Forms.Label(); + this.listBox1 = new System.Windows.Forms.ListBox(); + this.tabControl1.SuspendLayout(); + this.tabPage1.SuspendLayout(); + this.scriptEditorTab.SuspendLayout(); + this.groupBox1.SuspendLayout(); + this.toolStrip1.SuspendLayout(); + this.SuspendLayout(); + // + // cancelButton + // + this.cancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.cancelButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.cancelButton.Location = new System.Drawing.Point(197, 273); + this.cancelButton.Name = "cancelButton"; + this.cancelButton.Size = new System.Drawing.Size(75, 23); + this.cancelButton.TabIndex = 0; + this.cancelButton.Text = "Cancel"; + this.cancelButton.UseVisualStyleBackColor = true; + this.cancelButton.Click += new System.EventHandler(this.cancelButton_Click); + // + // saveButton + // + this.saveButton.DialogResult = System.Windows.Forms.DialogResult.OK; + this.saveButton.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.saveButton.Location = new System.Drawing.Point(116, 273); + this.saveButton.Name = "saveButton"; + this.saveButton.Size = new System.Drawing.Size(75, 23); + this.saveButton.TabIndex = 1; + this.saveButton.Text = "Save"; + this.saveButton.UseVisualStyleBackColor = true; + this.saveButton.Click += new System.EventHandler(this.saveButton_Click); + // + // tabControl1 + // + this.tabControl1.Controls.Add(this.tabPage1); + this.tabControl1.Controls.Add(this.scriptEditorTab); + this.tabControl1.Location = new System.Drawing.Point(12, 12); + this.tabControl1.Multiline = true; + this.tabControl1.Name = "tabControl1"; + this.tabControl1.SelectedIndex = 0; + this.tabControl1.Size = new System.Drawing.Size(260, 255); + this.tabControl1.TabIndex = 2; + // + // tabPage1 + // + this.tabPage1.Controls.Add(this.label2); + this.tabPage1.Controls.Add(this.label1); + this.tabPage1.Controls.Add(this.comboBox1); + this.tabPage1.Controls.Add(this.autoSaveCB); + this.tabPage1.Controls.Add(this.runAtStartupCB); + this.tabPage1.Location = new System.Drawing.Point(4, 22); + this.tabPage1.Name = "tabPage1"; + this.tabPage1.Padding = new System.Windows.Forms.Padding(3); + this.tabPage1.Size = new System.Drawing.Size(252, 229); + this.tabPage1.TabIndex = 1; + this.tabPage1.Text = "General"; + this.tabPage1.UseVisualStyleBackColor = true; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Enabled = false; + this.label2.Location = new System.Drawing.Point(127, 58); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(19, 13); + this.label2.TabIndex = 8; + this.label2.Text = ": 2"; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Enabled = false; + this.label1.Location = new System.Drawing.Point(64, 58); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(57, 13); + this.label1.TabIndex = 7; + this.label1.Text = "Max Cores"; + // + // comboBox1 + // + this.comboBox1.Enabled = false; + this.comboBox1.FormattingEnabled = true; + this.comboBox1.Location = new System.Drawing.Point(7, 55); + this.comboBox1.Name = "comboBox1"; + this.comboBox1.Size = new System.Drawing.Size(52, 21); + this.comboBox1.TabIndex = 6; + // + // autoSaveCB + // + this.autoSaveCB.AutoSize = true; + this.autoSaveCB.BackgroundImageLayout = System.Windows.Forms.ImageLayout.None; + this.autoSaveCB.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Strikeout, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.autoSaveCB.Location = new System.Drawing.Point(7, 32); + this.autoSaveCB.Name = "autoSaveCB"; + this.autoSaveCB.Size = new System.Drawing.Size(71, 17); + this.autoSaveCB.TabIndex = 3; + this.autoSaveCB.Text = "Autosave"; + this.autoSaveCB.UseVisualStyleBackColor = true; + // + // runAtStartupCB + // + this.runAtStartupCB.AutoSize = true; + this.runAtStartupCB.Location = new System.Drawing.Point(7, 8); + this.runAtStartupCB.Name = "runAtStartupCB"; + this.runAtStartupCB.Size = new System.Drawing.Size(93, 17); + this.runAtStartupCB.TabIndex = 2; + this.runAtStartupCB.Text = "Run at startup"; + this.runAtStartupCB.UseVisualStyleBackColor = true; + this.runAtStartupCB.CheckedChanged += new System.EventHandler(this.runAtStartupCB_CheckedChanged); + // + // scriptEditorTab + // + this.scriptEditorTab.Controls.Add(this.groupBox1); + this.scriptEditorTab.Location = new System.Drawing.Point(4, 22); + this.scriptEditorTab.Name = "scriptEditorTab"; + this.scriptEditorTab.Padding = new System.Windows.Forms.Padding(3); + this.scriptEditorTab.Size = new System.Drawing.Size(252, 229); + this.scriptEditorTab.TabIndex = 0; + this.scriptEditorTab.Text = "ScriptEditor"; + this.scriptEditorTab.UseVisualStyleBackColor = true; + // + // groupBox1 + // + this.groupBox1.Controls.Add(this.toolStrip1); + this.groupBox1.Controls.Add(this.textBox1); + this.groupBox1.Controls.Add(this.label3); + this.groupBox1.Controls.Add(this.listBox1); + this.groupBox1.Location = new System.Drawing.Point(4, 7); + this.groupBox1.Name = "groupBox1"; + this.groupBox1.Size = new System.Drawing.Size(242, 216); + this.groupBox1.TabIndex = 3; + this.groupBox1.TabStop = false; + this.groupBox1.Text = "Text Editors"; + // + // toolStrip1 + // + this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden; + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton3, + this.toolStripButton4, + this.toolStripButton1, + this.toolStripButton2}); + this.toolStrip1.Location = new System.Drawing.Point(3, 16); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.Size = new System.Drawing.Size(236, 25); + this.toolStrip1.TabIndex = 7; + this.toolStrip1.Text = "toolStrip1"; + // + // toolStripButton3 + // + this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton3.Enabled = false; + this.toolStripButton3.Image = global::FileWatcher.Properties.Resources.plus; + this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton3.Name = "toolStripButton3"; + this.toolStripButton3.Size = new System.Drawing.Size(23, 22); + this.toolStripButton3.Text = "toolStripButton3"; + this.toolStripButton3.ToolTipText = "Add Editor to open scripts with"; + this.toolStripButton3.Click += new System.EventHandler(this.toolStripButton3_Click); + // + // toolStripButton4 + // + this.toolStripButton4.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton4.Enabled = false; + this.toolStripButton4.Image = global::FileWatcher.Properties.Resources.trash; + this.toolStripButton4.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton4.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton4.Name = "toolStripButton4"; + this.toolStripButton4.Size = new System.Drawing.Size(23, 22); + this.toolStripButton4.Text = "toolStripButton4"; + this.toolStripButton4.ToolTipText = "Delete Selected Editor"; + this.toolStripButton4.Click += new System.EventHandler(this.toolStripButton4_Click); + // + // toolStripButton1 + // + this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton1.Image = global::FileWatcher.Properties.Resources.arrow_fat_down; + this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(23, 22); + this.toolStripButton1.Text = "toolStripButton1"; + this.toolStripButton1.ToolTipText = "Move selected editor to a lower priority."; + this.toolStripButton1.Click += new System.EventHandler(this.toolStripButton1_Click); + // + // toolStripButton2 + // + this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton2.Image = global::FileWatcher.Properties.Resources.arrow_fat_up; + this.toolStripButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Size = new System.Drawing.Size(23, 22); + this.toolStripButton2.Text = "toolStripButton2"; + this.toolStripButton2.ToolTipText = "Move selected editor to a higher priority."; + this.toolStripButton2.Click += new System.EventHandler(this.toolStripButton2_Click); + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(44, 190); + this.textBox1.Name = "textBox1"; + this.textBox1.ReadOnly = true; + this.textBox1.Size = new System.Drawing.Size(195, 20); + this.textBox1.TabIndex = 6; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(6, 193); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(32, 13); + this.label3.TabIndex = 5; + this.label3.Text = "Path:"; + // + // listBox1 + // + this.listBox1.BorderStyle = System.Windows.Forms.BorderStyle.None; + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(2, 45); + this.listBox1.Name = "listBox1"; + this.listBox1.Size = new System.Drawing.Size(234, 130); + this.listBox1.TabIndex = 0; + this.listBox1.SelectedValueChanged += new System.EventHandler(this.listBox1_SelectedValueChanged); + // + // Preferences + // + this.AcceptButton = this.saveButton; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.cancelButton; + this.ClientSize = new System.Drawing.Size(284, 308); + this.Controls.Add(this.tabControl1); + this.Controls.Add(this.saveButton); + this.Controls.Add(this.cancelButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "Preferences"; + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; + this.Text = "Preferences"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Preferences_FormClosing); + this.Load += new System.EventHandler(this.Preferences_Load); + this.tabControl1.ResumeLayout(false); + this.tabPage1.ResumeLayout(false); + this.tabPage1.PerformLayout(); + this.scriptEditorTab.ResumeLayout(false); + this.groupBox1.ResumeLayout(false); + this.groupBox1.PerformLayout(); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.Button cancelButton; + private System.Windows.Forms.Button saveButton; + private System.Windows.Forms.TabControl tabControl1; + private System.Windows.Forms.TabPage scriptEditorTab; + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.GroupBox groupBox1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.TabPage tabPage1; + private System.Windows.Forms.CheckBox runAtStartupCB; + public System.Windows.Forms.CheckBox autoSaveCB; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripButton toolStripButton2; + private System.Windows.Forms.ToolStripButton toolStripButton3; + private System.Windows.Forms.ToolStripButton toolStripButton4; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.ComboBox comboBox1; + + } +} \ No newline at end of file diff --git a/code/src/Preferences.cs b/code/src/Preferences.cs new file mode 100644 index 0000000..b57aa1f --- /dev/null +++ b/code/src/Preferences.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +using Microsoft.Win32; + +namespace FileWatcher +{ + public sealed partial class Preferences : Form + { + #region Singleton + + private static readonly Preferences instance = new Preferences(); + + static Preferences() + { + } + + public static Preferences Instance + { + get + { + return instance; + } + } + #endregion + + private class ProgramData + { + public string Path; + public bool Save; + + public ProgramData(string path, bool save = false) + { + Path = path; + Save = save; + } + } + + private Dictionary programs = new Dictionary(); + + private BindingList UnboundBindingList = null; + + + private Preferences() + { + InitializeComponent(); + + // TODO: load preferences + + UnboundBindingList = new BindingList(new List(programs.Keys)); + + listBox1.DataSource = UnboundBindingList; + + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); + SetRunAtStartup(registryKey.GetValue(Form1.ApplicationName) != null); + + LoadEditorPreferences(new List(), new List>()); + } + + public void LoadEditorPreferences(List defaultPrograms, List> userDefinedPrograms) + { + programs.Clear(); + + + #region Get System Default Text Editor + + //http://stackoverflow.com/questions/11365984/c-sharp-open-file-with-default-application-and-parameters + + string textEditorDefault = ""; + + string InstallPath = (string)Registry.GetValue(@"HKEY_CLASSES_ROOT\.txt", "", null); + if (InstallPath != null) + { + string commandPath = (string)Registry.GetValue(@"HKEY_CLASSES_ROOT\\" + InstallPath + "\\Shell\\Open\\Command", "", null); + + string ext = ".exe"; + int indexOf = commandPath.ToLower().LastIndexOf(ext); + + if (indexOf > 0) + { + // strip off arguments (%1,%2,etc) + textEditorDefault = commandPath.Substring(0, indexOf + ext.Length); + } + } + + #endregion + + string pfx64 = Utils.ProgramFilesx64(); + string pfx86 = Utils.ProgramFilesx86(); + string sys = Utils.SystemDirectory(); + + + // Add system default options first so the user options can overwrite these + if (File.Exists(textEditorDefault)) + { + programs.Add("System Default", new ProgramData(textEditorDefault)); + } + + if (File.Exists(pfx64 + "\\Sublime Text 3\\sublime_text.exe")) + { + programs.Add("Sublime Text 3", new ProgramData(pfx64 + "\\Sublime Text 3\\sublime_text.exe")); + } + if (File.Exists(pfx64 + "\\Sublime Text 2\\sublime_text.exe")) + { + programs.Add("Sublime Text 2", new ProgramData(pfx64 + "\\Sublime Text 2\\sublime_text.exe")); + } + if (File.Exists(pfx64 + "\\Sublime Text\\sublime_text.exe")) + { + programs.Add("Sublime Text", new ProgramData(pfx64 + "\\Sublime Text\\sublime_text.exe")); + } + + if (File.Exists(pfx86 + "\\Notepad++\\notepad++.exe")) + { + programs.Add("Notepad++", new ProgramData(pfx86 + "\\Notepad++\\notepad++.exe")); + } + + if (File.Exists(sys + "\\notepad.exe")) + { + programs.Add("NotePad", new ProgramData(sys + "\\notepad.exe")); + } + + foreach (Tuple t in userDefinedPrograms) + { + programs.Add(t.Item1, new ProgramData(t.Item2,true)); + + if (File.Exists(t.Item2) == false) + { + Logger.WriteLine("A program set as one of the default text editors does not exist on your system: " + t.Item2); + } + } + + UnboundBindingList = new BindingList(defaultPrograms); + foreach (string str in programs.Keys) + { + if (defaultPrograms.Contains(str) == false) + { + defaultPrograms.Add(str); + } + } + + + listBox1.DataSource = UnboundBindingList; + } + + public string GetDefaultEditor() + { + foreach (string programName in UnboundBindingList) + { + string path = programs[programName].Path; + if (File.Exists(path)) + { + return path; + } + } + return ""; + } + + public List GetDefaultPrograms() + { + return new List(UnboundBindingList); + } + + // Gets user defined paths + public List> GetEditorProgramPaths() + { + List> programNames = new List>(); + + foreach (KeyValuePair t in programs) + { + if (t.Value.Save) + { + programNames.Add(new Tuple(t.Key, t.Value.Path)); + } + } + + return programNames; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + if (components != null) + { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + private void saveButton_Click(object sender, EventArgs e) + { + Form1.Instance.Save(); + } + + private void cancelButton_Click(object sender, EventArgs e) + { + + } + + private void listBox1_SelectedValueChanged(object sender, EventArgs e) + { + if (listBox1.SelectedValue != null) + { + string path = programs[(string)listBox1.SelectedValue].Path; + textBox1.Text = path; + } + } + + private void Preferences_FormClosing(object sender, FormClosingEventArgs e) + { + this.Hide(); + e.Cancel = true; + } + + private void toolStripButton3_Click(object sender, EventArgs e) + { + + } + + private void toolStripButton4_Click(object sender, EventArgs e) + { + + } + + private void toolStripButton1_Click(object sender, EventArgs e) + { + int selectedIndex = listBox1.SelectedIndex; + if (selectedIndex >= listBox1.Items.Count - 1) + { + return; + } + + listBox1.DataSource = null; + listBox1.SelectionMode = SelectionMode.None; + + string obj1 = UnboundBindingList[selectedIndex]; + + UnboundBindingList[selectedIndex] = UnboundBindingList[selectedIndex + 1]; + UnboundBindingList[selectedIndex + 1] = obj1; + + listBox1.DataSource = UnboundBindingList; + listBox1.SelectionMode = SelectionMode.One; + listBox1.SelectedIndex = selectedIndex + 1; + } + + private void toolStripButton2_Click(object sender, EventArgs e) + { + int selectedIndex = listBox1.SelectedIndex; + if (selectedIndex == 0) + { + return; + } + + listBox1.DataSource = null; + listBox1.SelectionMode = SelectionMode.None; + + string obj1 = UnboundBindingList[selectedIndex]; + + UnboundBindingList[selectedIndex] = UnboundBindingList[selectedIndex - 1]; + UnboundBindingList[selectedIndex - 1] = obj1; + + listBox1.DataSource = UnboundBindingList; + listBox1.SelectionMode = SelectionMode.One; + listBox1.SelectedIndex = selectedIndex - 1; + } + + public void SetRunAtStartup(bool yes) + { + RegistryKey registryKey = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); + if (registryKey == null) + { + return; + } + + if (yes) + { + registryKey.SetValue(Form1.ApplicationName, Application.ExecutablePath + " --minimize"); + } + else + { + if (registryKey.GetValue(Form1.ApplicationName) != null) + { + registryKey.DeleteValue(Form1.ApplicationName); + } + } + runAtStartupCB.Checked = yes; + } + + private void runAtStartupCB_CheckedChanged(object sender, EventArgs e) + { + SetRunAtStartup(runAtStartupCB.Checked); + } + + private void Preferences_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/code/src/Program.cs b/code/src/Program.cs new file mode 100644 index 0000000..4556447 --- /dev/null +++ b/code/src/Program.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + static class Program + { + public static Dictionary Args = null; + + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main(string[] args) + { + Args = args.ToDictionary( + k => k.Split(new char[] { '=' }, 2)[0].ToLower(), + v => v.Split(new char[] { '=' }, 2).Count() > 1 ? v.Split(new char[] { '=' }, 2)[1] : null + ); + + //AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(Form1.Instance); + } + + /*static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) + { + string dllName = args.Name.Contains(',') ? args.Name.Substring(0, args.Name.IndexOf(',')) : args.Name.Replace(".dll", ""); + + dllName = dllName.Replace(".", "_"); + + if (dllName.EndsWith("_resources")) return null; + + System.Resources.ResourceManager rm = new System.Resources.ResourceManager("FileWatcher.Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly()); + + byte[] bytes = (byte[])rm.GetObject(dllName); + + return System.Reflection.Assembly.Load(bytes); + }*/ + } +} diff --git a/code/src/Reflector.cs b/code/src/Reflector.cs new file mode 100644 index 0000000..ae0661f --- /dev/null +++ b/code/src/Reflector.cs @@ -0,0 +1,183 @@ +using System; +using System.Reflection; + +namespace FolderSelect +{ + /// + /// This class is from the Front-End for Dosbox and is used to present a 'vista' dialog box to select folders. + /// Being able to use a vista style dialog box to select folders is much better then using the shell folder browser. + /// http://code.google.com/p/fed/ + /// + /// Example: + /// var r = new Reflector("System.Windows.Forms"); + /// + public class Reflector + { + #region variables + + string m_ns; + Assembly m_asmb; + + #endregion + + #region Constructors + + /// + /// Constructor + /// + /// The namespace containing types to be used + public Reflector(string ns) + : this(ns, ns) + { } + + /// + /// Constructor + /// + /// A specific assembly name (used if the assembly name does not tie exactly with the namespace) + /// The namespace containing types to be used + public Reflector(string an, string ns) + { + m_ns = ns; + m_asmb = null; + foreach (AssemblyName aN in Assembly.GetExecutingAssembly().GetReferencedAssemblies()) + { + if (aN.FullName.StartsWith(an)) + { + m_asmb = Assembly.Load(aN); + break; + } + } + } + + #endregion + + #region Methods + + /// + /// Return a Type instance for a type 'typeName' + /// + /// The name of the type + /// A type instance + public Type GetType(string typeName) + { + Type type = null; + string[] names = typeName.Split('.'); + + if (names.Length > 0) + type = m_asmb.GetType(m_ns + "." + names[0]); + + for (int i = 1; i < names.Length; ++i) { + type = type.GetNestedType(names[i], BindingFlags.NonPublic); + } + return type; + } + + /// + /// Create a new object of a named type passing along any params + /// + /// The name of the type to create + /// + /// An instantiated type + public object New(string name, params object[] parameters) + { + Type type = GetType(name); + + ConstructorInfo[] ctorInfos = type.GetConstructors(); + foreach (ConstructorInfo ci in ctorInfos) { + try { + return ci.Invoke(parameters); + } catch { } + } + + return null; + } + + /// + /// Calls method 'func' on object 'obj' passing parameters 'parameters' + /// + /// The object on which to excute function 'func' + /// The function to execute + /// The parameters to pass to function 'func' + /// The result of the function invocation + public object Call(object obj, string func, params object[] parameters) + { + return Call2(obj, func, parameters); + } + + /// + /// Calls method 'func' on object 'obj' passing parameters 'parameters' + /// + /// The object on which to excute function 'func' + /// The function to execute + /// The parameters to pass to function 'func' + /// The result of the function invocation + public object Call2(object obj, string func, object[] parameters) + { + return CallAs2(obj.GetType(), obj, func, parameters); + } + + /// + /// Calls method 'func' on object 'obj' which is of type 'type' passing parameters 'parameters' + /// + /// The type of 'obj' + /// The object on which to excute function 'func' + /// The function to execute + /// The parameters to pass to function 'func' + /// The result of the function invocation + public object CallAs(Type type, object obj, string func, params object[] parameters) + { + return CallAs2(type, obj, func, parameters); + } + + /// + /// Calls method 'func' on object 'obj' which is of type 'type' passing parameters 'parameters' + /// + /// The type of 'obj' + /// The object on which to excute function 'func' + /// The function to execute + /// The parameters to pass to function 'func' + /// The result of the function invocation + public object CallAs2(Type type, object obj, string func, object[] parameters) { + MethodInfo methInfo = type.GetMethod(func, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + return methInfo.Invoke(obj, parameters); + } + + /// + /// Returns the value of property 'prop' of object 'obj' + /// + /// The object containing 'prop' + /// The property name + /// The property value + public object Get(object obj, string prop) + { + return GetAs(obj.GetType(), obj, prop); + } + + /// + /// Returns the value of property 'prop' of object 'obj' which has type 'type' + /// + /// The type of 'obj' + /// The object containing 'prop' + /// The property name + /// The property value + public object GetAs(Type type, object obj, string prop) { + PropertyInfo propInfo = type.GetProperty(prop, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + return propInfo.GetValue(obj, null); + } + + /// + /// Returns an enum value + /// + /// The name of enum type + /// The name of the value + /// The enum value + public object GetEnum(string typeName, string name) { + Type type = GetType(typeName); + FieldInfo fieldInfo = type.GetField(name); + return fieldInfo.GetValue(null); + } + + #endregion + + } +} diff --git a/code/src/RichTextBoxExtensions.cs b/code/src/RichTextBoxExtensions.cs new file mode 100644 index 0000000..0fde449 --- /dev/null +++ b/code/src/RichTextBoxExtensions.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + public static class RichTextBoxExtensions + { + // In case a string stream doesn't reset the text color, reset it automatically when done appending text + // TODO: override the single parameter AppendText + public static bool g_ResetANSIIColorOnAppend = true; + + public static void AppendText(this RichTextBox box, string text, Color color) + { + box.SelectionStart = box.TextLength; + box.SelectionLength = 0; + box.SelectionColor = color; + + string ANSIIEscape = "\u001B["; + int index = text.IndexOf(ANSIIEscape); + while (index != -1) + { + string substring = text.Substring(0, index); + if (substring.Length > 0) + { + box.AppendText(substring); + } + + text = text.Substring(index + ANSIIEscape.Length); + + if (text.Length < 3) + { + if (g_ResetANSIIColorOnAppend) + { + box.SelectionColor = box.ForeColor; + } + return; + } + + int number; + try + { + number = Int32.Parse(text[0] + "" + text[1]); + } + catch (FormatException) + { + box.SelectionColor = Color.Red; + box.AppendText("ERROR - Invalid ANSII Escape sequence: '" + text + "'"); + if (g_ResetANSIIColorOnAppend) + { + box.SelectionColor = box.ForeColor; + } + return; + } + + // http://en.wikipedia.org/wiki/ANSI_escape_code + if (number / 10 == 3) + { + switch (number) + { + case 30: + box.SelectionColor = Color.Black; + break; + case 31: + box.SelectionColor = Color.Red; + break; + case 32: + box.SelectionColor = Color.Green; + break; + case 3: + box.SelectionColor = Color.Yellow; + break; + case 34: + box.SelectionColor = Color.Blue; + break; + case 35: + box.SelectionColor = Color.Magenta; + break; + case 36: + box.SelectionColor = Color.Cyan; + break; + case 37: + box.SelectionColor = Color.White; + break; + + case 39: + box.SelectionColor = color; + break; + } + } + + index = text.IndexOf("m"); + if (index == -1) + { + box.SelectionColor = Color.Red; + box.AppendText("ERROR - couldn't find the sequence escape, 'm', for the ANSII Escape sequence: '" + text + "'"); + if (g_ResetANSIIColorOnAppend) + { + box.SelectionColor = box.ForeColor; + } + return; + } + + text = text.Substring(index + 1); + index = text.IndexOf(ANSIIEscape); + } + + if (text.Length > 0) + { + box.SelectionColor = color; + box.AppendText(text); + } + if (g_ResetANSIIColorOnAppend) + { + box.SelectionColor = box.ForeColor; + } + } + } +} diff --git a/code/src/Script.cs b/code/src/Script.cs new file mode 100644 index 0000000..89d7ed3 --- /dev/null +++ b/code/src/Script.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FileWatcher +{ + class Script + { + protected string m_Label; + protected string m_EntryPoint; + + public string Label + { + get { return m_Label; } + set { m_Label = value; } + } + } +} diff --git a/code/src/ScriptManager.Designer.cs b/code/src/ScriptManager.Designer.cs new file mode 100644 index 0000000..990b508 --- /dev/null +++ b/code/src/ScriptManager.Designer.cs @@ -0,0 +1,246 @@ +namespace FileWatcher +{ + partial class ScriptManager + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.listBox1 = new System.Windows.Forms.ListBox(); + this.toolStrip1 = new System.Windows.Forms.ToolStrip(); + this.panel1 = new System.Windows.Forms.Panel(); + this.toolStripButton1 = new System.Windows.Forms.ToolStripButton(); + this.toolStripButton2 = new System.Windows.Forms.ToolStripButton(); + this.textBox1 = new System.Windows.Forms.TextBox(); + this.label1 = new System.Windows.Forms.Label(); + this.label2 = new System.Windows.Forms.Label(); + this.textBox2 = new System.Windows.Forms.TextBox(); + this.pictureBox1 = new System.Windows.Forms.PictureBox(); + this.pictureBox2 = new System.Windows.Forms.PictureBox(); + this.label3 = new System.Windows.Forms.Label(); + this.textBox3 = new System.Windows.Forms.TextBox(); + this.button1 = new System.Windows.Forms.Button(); + this.toolStripButton3 = new System.Windows.Forms.ToolStripButton(); + this.toolStrip1.SuspendLayout(); + this.panel1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit(); + this.SuspendLayout(); + // + // listBox1 + // + this.listBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.listBox1.FormattingEnabled = true; + this.listBox1.Location = new System.Drawing.Point(0, 25); + this.listBox1.Name = "listBox1"; + this.listBox1.ScrollAlwaysVisible = true; + this.listBox1.Size = new System.Drawing.Size(346, 342); + this.listBox1.TabIndex = 3; + // + // toolStrip1 + // + this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.toolStripButton1, + this.toolStripButton2, + this.toolStripButton3}); + this.toolStrip1.Location = new System.Drawing.Point(0, 0); + this.toolStrip1.Name = "toolStrip1"; + this.toolStrip1.RenderMode = System.Windows.Forms.ToolStripRenderMode.Professional; + this.toolStrip1.Size = new System.Drawing.Size(346, 25); + this.toolStrip1.TabIndex = 2; + this.toolStrip1.Text = "toolStrip1"; + // + // panel1 + // + this.panel1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.panel1.Controls.Add(this.button1); + this.panel1.Controls.Add(this.textBox3); + this.panel1.Controls.Add(this.label3); + this.panel1.Controls.Add(this.pictureBox2); + this.panel1.Controls.Add(this.pictureBox1); + this.panel1.Controls.Add(this.textBox2); + this.panel1.Controls.Add(this.label2); + this.panel1.Controls.Add(this.label1); + this.panel1.Controls.Add(this.textBox1); + this.panel1.Location = new System.Drawing.Point(0, 368); + this.panel1.Name = "panel1"; + this.panel1.Size = new System.Drawing.Size(346, 92); + this.panel1.TabIndex = 4; + // + // toolStripButton1 + // + this.toolStripButton1.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton1.Image = global::FileWatcher.Properties.Resources.plus; + this.toolStripButton1.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton1.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton1.Name = "toolStripButton1"; + this.toolStripButton1.Size = new System.Drawing.Size(23, 22); + this.toolStripButton1.Text = "toolStripButton1"; + // + // toolStripButton2 + // + this.toolStripButton2.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton2.Image = global::FileWatcher.Properties.Resources.cross; + this.toolStripButton2.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton2.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton2.Name = "toolStripButton2"; + this.toolStripButton2.Size = new System.Drawing.Size(23, 22); + this.toolStripButton2.Text = "toolStripButton2"; + this.toolStripButton2.ToolTipText = "Remove Selected Scripts"; + // + // textBox1 + // + this.textBox1.Location = new System.Drawing.Point(81, 34); + this.textBox1.Name = "textBox1"; + this.textBox1.Size = new System.Drawing.Size(118, 20); + this.textBox1.TabIndex = 0; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(8, 37); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(63, 13); + this.label1.TabIndex = 1; + this.label1.Text = "Script Label"; + // + // label2 + // + this.label2.AutoSize = true; + this.label2.Location = new System.Drawing.Point(8, 61); + this.label2.Name = "label2"; + this.label2.Size = new System.Drawing.Size(55, 13); + this.label2.TabIndex = 2; + this.label2.Text = "EntryPoint"; + // + // textBox2 + // + this.textBox2.Location = new System.Drawing.Point(81, 58); + this.textBox2.Name = "textBox2"; + this.textBox2.Size = new System.Drawing.Size(118, 20); + this.textBox2.TabIndex = 3; + // + // pictureBox1 + // + this.pictureBox1.Image = global::FileWatcher.Properties.Resources.warning; + this.pictureBox1.Location = new System.Drawing.Point(205, 64); + this.pictureBox1.Name = "pictureBox1"; + this.pictureBox1.Size = new System.Drawing.Size(10, 10); + this.pictureBox1.TabIndex = 4; + this.pictureBox1.TabStop = false; + // + // pictureBox2 + // + this.pictureBox2.Image = global::FileWatcher.Properties.Resources.warning; + this.pictureBox2.Location = new System.Drawing.Point(205, 40); + this.pictureBox2.Name = "pictureBox2"; + this.pictureBox2.Size = new System.Drawing.Size(10, 10); + this.pictureBox2.TabIndex = 5; + this.pictureBox2.TabStop = false; + // + // label3 + // + this.label3.AutoSize = true; + this.label3.Location = new System.Drawing.Point(8, 13); + this.label3.Name = "label3"; + this.label3.Size = new System.Drawing.Size(59, 13); + this.label3.TabIndex = 6; + this.label3.Text = "Script Path"; + // + // textBox3 + // + this.textBox3.Location = new System.Drawing.Point(82, 10); + this.textBox3.Name = "textBox3"; + this.textBox3.Size = new System.Drawing.Size(233, 20); + this.textBox3.TabIndex = 7; + // + // button1 + // + this.button1.FlatStyle = System.Windows.Forms.FlatStyle.Popup; + this.button1.Image = global::FileWatcher.Properties.Resources.folder; + this.button1.Location = new System.Drawing.Point(321, 10); + this.button1.Name = "button1"; + this.button1.Size = new System.Drawing.Size(18, 18); + this.button1.TabIndex = 8; + this.button1.UseVisualStyleBackColor = true; + // + // toolStripButton3 + // + this.toolStripButton3.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.toolStripButton3.Image = global::FileWatcher.Properties.Resources.script; + this.toolStripButton3.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None; + this.toolStripButton3.ImageTransparentColor = System.Drawing.Color.Magenta; + this.toolStripButton3.Name = "toolStripButton3"; + this.toolStripButton3.Size = new System.Drawing.Size(23, 22); + this.toolStripButton3.Text = "toolStripButton3"; + this.toolStripButton3.ToolTipText = "Edit all selected scripts."; + // + // ScriptManager + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(346, 459); + this.Controls.Add(this.panel1); + this.Controls.Add(this.listBox1); + this.Controls.Add(this.toolStrip1); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.SizableToolWindow; + this.Name = "ScriptManager"; + this.Text = "ScriptManager"; + this.Load += new System.EventHandler(this.ScriptManager_Load); + this.toolStrip1.ResumeLayout(false); + this.toolStrip1.PerformLayout(); + this.panel1.ResumeLayout(false); + this.panel1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListBox listBox1; + private System.Windows.Forms.ToolStrip toolStrip1; + private System.Windows.Forms.Panel panel1; + private System.Windows.Forms.ToolStripButton toolStripButton1; + private System.Windows.Forms.ToolStripButton toolStripButton2; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox textBox1; + private System.Windows.Forms.TextBox textBox2; + private System.Windows.Forms.Label label2; + private System.Windows.Forms.PictureBox pictureBox1; + private System.Windows.Forms.PictureBox pictureBox2; + private System.Windows.Forms.TextBox textBox3; + private System.Windows.Forms.Label label3; + private System.Windows.Forms.Button button1; + private System.Windows.Forms.ToolStripButton toolStripButton3; + + + } +} \ No newline at end of file diff --git a/code/src/ScriptManager.cs b/code/src/ScriptManager.cs new file mode 100644 index 0000000..96708bc --- /dev/null +++ b/code/src/ScriptManager.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace FileWatcher +{ + public partial class ScriptManager : Form + { + public ScriptManager() + { + InitializeComponent(); + } + + // each script has a script id, so the user can rename or redirect at there will, and the scripts will remain correctly linked. + private void ScriptManager_Load(object sender, EventArgs e) + { + + } + } +} diff --git a/code/src/Singleton.cs b/code/src/Singleton.cs new file mode 100644 index 0000000..d89c467 --- /dev/null +++ b/code/src/Singleton.cs @@ -0,0 +1,26 @@ +namespace FileWatcher +{ + //http://csharpindepth.com/articles/general/singleton.aspx + public sealed class Singleton + { + private static readonly Singleton instance = new Singleton(); + + // Explicit static constructor to tell C# compiler + // not to mark type as beforefieldinit + static Singleton() + { + } + + private Singleton() + { + } + + public static Singleton Instance + { + get + { + return instance; + } + } + } +} diff --git a/code/src/TimerPlus.cs b/code/src/TimerPlus.cs new file mode 100644 index 0000000..fe56b2f --- /dev/null +++ b/code/src/TimerPlus.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Timers; +using System.Threading; +using System.Threading.Tasks; + +namespace FileWatcher +{ + /// + /// DO NOT CAST TO A TIMER, always interact with this class directly. Start and Stop are not overridden. + /// + public class TimerPlus : System.Timers.Timer + { + private bool m_Running; + private DateTime m_Start; + private DateTime m_End; + + public TimerPlus() + { + } + + public TimerPlus(double interval) + : base(interval) + { + } + + public void Start() + { + m_Running = true; + m_Start = DateTime.Now; + base.Start(); + } + + public void Stop() + { + m_End = DateTime.Now; + m_Running = false; + base.Stop(); + } + + public TimeSpan TimeElapsed + { + get { return m_Running ? DateTime.Now - m_Start : m_End - m_Start; } + } + + public TimeSpan TimeRemaining + { + get { return TimeSpan.FromMilliseconds(Interval) - TimeElapsed; } + } + } +} diff --git a/code/src/Utils.cs b/code/src/Utils.cs new file mode 100644 index 0000000..c6696fc --- /dev/null +++ b/code/src/Utils.cs @@ -0,0 +1,76 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace FileWatcher +{ + class Utils + { + public static string ProgramFilesx86() + { + if (8 == IntPtr.Size + || (!String.IsNullOrEmpty(Environment.GetEnvironmentVariable("PROCESSOR_ARCHITEW6432")))) + { + return Environment.GetEnvironmentVariable("ProgramFiles(x86)"); + } + + return Environment.GetEnvironmentVariable("ProgramFiles"); + } + + public static string ProgramFilesx64() + { + return Environment.GetEnvironmentVariable("ProgramW6432"); + } + + /// + /// Gets the program default, Program Fils(x86) when program is compiled + /// for 32 bit Windows, and Program Files when program is compiled for + /// 64bit Windows. + /// + /// + public static string ProgramFiles() + { + return Environment.GetEnvironmentVariable("ProgramFiles"); + } + + /// + /// Returns Windows/System32 or Windows/SysWOW64 depending on your program + /// + /// + public static string SystemDirectory() + { + return Environment.SystemDirectory; + } + + /// + /// Creates a relative path from one file or folder to another. + /// + /// Contains the directory that defines the start of the relative path. + /// Contains the path that defines the endpoint of the relative path. + /// Boolean indicating whether to add uri safe escapes to the relative path + /// The relative path from the start directory to the end path. + /// + public static String MakeRelativePath(String fromPath, String toPath) + { + if (String.IsNullOrEmpty(fromPath)) throw new ArgumentNullException("fromPath"); + if (String.IsNullOrEmpty(toPath)) throw new ArgumentNullException("toPath"); + + // If path doesn't end with '\\' it's assumed to be a file. + if (fromPath.EndsWith("\\") == false) + { + fromPath += "\\"; + } + + Uri fromUri = new Uri(fromPath); + Uri toUri = new Uri(toPath); + + Uri relativeUri = fromUri.MakeRelativeUri(toUri); + String relativePath = Uri.UnescapeDataString(relativeUri.ToString()); + + return relativePath.Replace('/', Path.DirectorySeparatorChar); + } + } +} diff --git a/data/arrow_fat_down.gif b/data/arrow_fat_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..d37276e2397f37ae92a21cf6b26ddd5d5bb42340 GIT binary patch literal 91 zcmZ?wbhEHb`2pGUX@h1x-I|B=Y4u}U*%fKw} m;br`Lu?V|2M=@{V`UMUZtqdiBX$@J=7w61h-Qv&0U=08s-W=Kh literal 0 HcmV?d00001 diff --git a/data/arrow_mini_down.gif b/data/arrow_mini_down.gif new file mode 100644 index 0000000000000000000000000000000000000000..d00d038524be81363fe9f3303b9980dfd73dc505 GIT binary patch literal 79 zcmZ?wbhEHbO-m_N1ky-MxGF|Ns9CV4(Pug^`_skwFK<1F2=U?s#L2kuXBL$X<1MIy^CNnTt0{{&L7;yjq literal 0 HcmV?d00001 diff --git a/data/arrow_mini_up.gif b/data/arrow_mini_up.gif new file mode 100644 index 0000000000000000000000000000000000000000..5928a5355acf37e66f16d5d8355316ba0442b580 GIT binary patch literal 79 zcmZ?wbhEHbUiHcc-PL-MxGF|Ns9CV4(Pug^`_skwFK<1F2=U-lrx!24b4kwm42M&jnmnsa_01X!yLjV8( literal 0 HcmV?d00001 diff --git a/data/block.gif b/data/block.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e3b9b9e85a30a9b0ba14a73eaafae590a623aa5 GIT binary patch literal 96 zcmZ?wbhEHbTQ0@9y5cySKOZ|NsAKX=w}$42nNl7}*&Z8FYYb zph_+V24+G~N3M!aO$V>1oW}LxfrFGyIUxV&J055eP AZvX%Q literal 0 HcmV?d00001 diff --git a/data/cross.gif b/data/cross.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3dff79639bd0a7acacd8caf5ece33fa52cb2b63 GIT binary patch literal 90 zcmZ?wbhEHbS7)XZrZ~?BBni0R|L*vM{nUFf!UiHcc-PL{r~^}?%lh+y}d_|9##Cw!pP3R$e_aj z1R%8x%$gEeEK4SA758M$6Rkd=*k&lQB$e~9$22A@hU|-rxZJiegfKg;bKd8`#9$2o DKr13v literal 0 HcmV?d00001 diff --git a/data/folder.gif b/data/folder.gif new file mode 100644 index 0000000000000000000000000000000000000000..45948a0cf6c83572b35feb6fd07a2258a7ee3990 GIT binary patch literal 90 zcmZ?wbhEHb+Z^oq?4>2gnAh s}gC1-$GqtbKxU@;TTQsG#1$%6oOxw^+CMHvx_NX3Q z@ak3k2lOr;eBfmdUOb7gSFauw71l|&?Ru~VCNsa``@Y|E_8aw`&E%D&APAeaUA@Wo zGkk3%&hr1y7hj+8?J}!$Sc~@A#0-c~vT2WinrjY7lbH7O-T^5J!YR>dcUZ@`qgd3H z%orm@uFu(mP~47u(;5*5dSu{us`%~o8xc6RD&EZ)(C{@fbarO}Y0c_wYc{e9wzz!@ z6eEQTxP+M?a`(JYiBxf}tMGGtEsJ0dVIx&M4yt1`fJOrXG7?N#FbhEzNhp0Ym&@G% z7$PV`EF+vkIVFu12*KhLxwpXXD^0z+@Wm}v95UuBvOJkgq)A$$!9YfZLLt_`IK>gE zaOyELN_pYdQb8x76*xX~s0U(2vq#5F6?vq`DY*Vh)(aP9;sui<)0dG1wx*7&&h2UyWW~@#%?= ztFh(AYVe82r#;|f{W0xu58Bz}JT_s;usV8edu mAAUZ)-#U2gT}-~cAS9r04PE;F?$hDb_(jz!b^T?z```~=DJtjy literal 0 HcmV?d00001 diff --git a/data/plus.gif b/data/plus.gif new file mode 100644 index 0000000000000000000000000000000000000000..1624b0662d5d9c192dbc35e940c0e9a8aeffa5bf GIT binary patch literal 91 zcmZ?wbhEHbTQ0@1~`t{r~@;0R|L*vM{nUFf!+Z^ zoq>Zv2P6qHgMmdeV2&rhlgo^NT^ny+6K!*7nUkL8{Cb^}&hh02eFY2Nf4Do7si8na J#D#&u8UWRLD4hTR literal 0 HcmV?d00001 diff --git a/data/script.gif b/data/script.gif new file mode 100644 index 0000000000000000000000000000000000000000..d5d99da08aa7ef244fb152b8304a13c1fafea8d5 GIT binary patch literal 91 zcmZ?wbhEHbOcU1;ophb;zf5Ls~`>pQi#GU>^z88>Cy-}Ku(d)!eFpZA$Soxiv#+dK%c>E!R zFrMeh_xsKDdcD0~FS{s;r)}GR+jU)=>2&%rnN0rFb&X|N0Q7o2>AEh)7>>uIX#rxt z-`7eh+39rHZnq72Mxj{pDw literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-and-shading_128x128.ico b/data/stock_3d-texture-and-shading_128x128.ico new file mode 100644 index 0000000000000000000000000000000000000000..4f0762b4109f642453119029d864b03d9d42e99d GIT binary patch literal 67646 zcmeFa2Vhmzwl$mtkfMNqA~rx2u@_XZi-4dMks`fIFQG%|Ef7lRz4u-dNJt?)r1wsG zBO!$JUT}P4u5&h?%Zqy7|KWRj|L?pv?>?NIv-etaj9J!Pb8n4|jQM{nRv7Ws+USjX z#zxKg?hVQc3jf6aZ!PcmGSMCWIsePi%MAW)kqQ1!$bV-{^4L~PVhAUzj@W9hnn>D zs9p{A|0u3cP{ckcRy1QE9}_4CT?k%fBBzmv#*~YS-1qp^Zx$tKs;y zImuC*r#5#(eLSiw`S(BhWjG(hd1`albfM|TP-mh?O{bcUMdum@8a5hk8kUXu9g(LE zqzT_^(v{TY??qlTkeB%0Pz?X3ec$jLa!y08Xxz}oA-pi;gpB!7K4`u{^9$Pi zYw`!0-VAlgQ~vE=hU3-dAlMuFdTrjnhr8&_5OdM3re_Ur!NL${4PU|ZWlBrEwBk{u zwO(G~@sC9Np7uNKJaSGsx9~)+CEPINgdrdPhznZoAYA`F9%#0r>CaH7{Mq03WjIc4 z>@{KkXShq;HMDa>`xc$ogtdlo8~$D7Rmy96Y0IO?>w0O&V@;y{UHiWLUd|&T=M>(w zrpUE~7s83(7NG<}33S z8xTD-rHGFd{fM3fdqbOV&3`{??=|5rI6aEF;QT4&GrfGy;}^dp@;4FruKY%RE1VEM z7;-^4CS22Egv1BU9|%8%r-r`Zk2oMY5PgVEh;BqjHE}?*D^1V*+TZG>jY}KnqxS!( z?aRD1+kX^$(U%tITl4)NVJ|i*zFNaw>{c){#9iLkB!aPqb4`DLlm~Kd%^wH{jN~sYI^2R|28jeOmdWQ3icZQT0E->|39;RE!K-Z zHJ>lGCi)iJ)BL?=_kxXZK}6%hSA5@>GL|xhGLy1^vW&7$FY;bKlfTJ#LslU8inolcvvBJ^#Xsc;n5t@X03~@M*^mc=@Fl!M~$k z{RVjE+2_!*^=nnnwRoYleuJm7jZB`9-^w}UTyjpHTU|r0CD)W|%NQPw1F!M3Hk8(s zKg0iNe&?T#Kd11pR%ycb{~h}m8~E?|e~Gi=4@Adeo5Ls;Mzv}?HF&B?`jbyJe$eFU zMtGrFeZ1NFX?*u-Tg)2W6&vRM1k0%%uw&L|IKOE)tapxv&92d~-Z2upXMKz%KN`dA z$GTWGq9rV6cE-w?12AD|cXa*oeY9)yJf3gS9OT7=r=D(>F4t1m)LmP00~w2qNy`BY z@t3us#Il-l0L}jYog7f~Dx%pM-~O#$+PJiF3I}RaB##vzAU;ieTLa2d6q&R5KG8u_ zio`^TjS?fpPipy}*iUPUrbn^4fs}&{8#PIIspTsbZ@$qEU$$?9@7p)V#4h!*Va!W7 zyXsrG9~gwN^WzbAY5;CoJP%*XR*1hc0!h}Rk!(GRG8!q@MkDq5ScL6(72eB@;J(BN zE{jdzz2$9$oE`?B6Jub#r7!l)`wV7-T4U&Uub@Y#5AebJ@8iXnT2<7m-zY)Gq92pQ zCc#?9+M4ovwl8y)Icv5ry7*7e{{;VkOPPQRC6F{m!~jWLGpvX|h0pc`T@k3sVF@kqBFi#wOTL&}~fk-q;a zl&7#`Y*Vb6@G+*1?uqZZc1FuqZ7OQlc_K*0s2{70Sz^7R-3z~Ejy2_eg1^{@=tzs1 zVmo3(VoQd$FShn~dujGBM;WV(xh5YV^AjH+^A$fJvF}k1NPeWng>QMfqfMV_k=vm| zM~oTV1IvE-1lvY8#!#eTuD%24d{c-gx`%x4_&Xm*YQ5;n*KyEpyWB z{!zbgi2c8l`-zVKjxQOP$nV7fEe<@&0WB7YKa}^viOxLD$>z^JU)a4{S1dLC83z}9 zfs@ml;KEcR*vv74+tS(y-PRJR=f1(cOC6DW?p5TUeE|h$pCj%aP!=#36=5q;9%6

|^+#_|7f4m+F&NM~Ah39Fz9f|p3R79;q$O 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 literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-and-shading_128x128.png b/data/stock_3d-texture-and-shading_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..395907e4626d96b15439892c97eb9fd4c7999b28 GIT binary patch literal 22390 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 y6g*#||rkuS>B{6gi()6YM*lTmu2 z=-$U>Up{}~yTtHt$Po(nj4E#3jZ4$WmFwubPBf7Sz4FGJS7Vcp&-OS4z#kmcPoFt^ zd3|aRMO}7 zQ)xNmYi;uN4$09t`$yxfY?+w0pp8m25@Kj_I(hJ!lkfHgmg0Nl`rk$FmKu!42g#Z? zm9D_=)d>f@j}1!x!lWpDmd@ zIuaz{^YQgkiHVUIrsBb9i#-4?07p@=T{@|3m0&zU-BGBaQBza^EU8i#f}HJTwc5e3 z-8h=(-y^ydxw2+hENpf0_y_nlE6Ft-4kuh3PPn*Mw7FSw@c8|Fx@2J~I!(*U^aa&I zZqcKuOpk;qI&PM$4(X~Sb0fmoNyL__V<;-3UOA4~4hmoTj8lAuhR(pIQi`Oz;w_< zt|>Xb%LM{bWyzBXm2V!}Twh+RwSTzsnyeeGegl9?X8t#2?#olV@60Wy%Uw)c5^xJ5 zUIkRaM#G`IcH?&btM^|h{Bq^j9w&A_lMq5^x;Hp-^z_@FCr%zXxNm6xctlgOIpfal zg{516eg57>x@`lndt6^2gaA+hFAxAiz`*vJO`r-q1ZqG>ZiD}8uq{ymZ5tMV4Rm+J b>2d!6r4wL`&q1Y|00000NkvXXu0mjfU_+}^ literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-and-shading_256x256.ico b/data/stock_3d-texture-and-shading_256x256.ico new file mode 100644 index 0000000000000000000000000000000000000000..0dc94fed0961be7839342d6e2d1baf4bfdb111a4 GIT binary patch literal 270398 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 literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-and-shading_256x256.png b/data/stock_3d-texture-and-shading_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..1d3224dfa23de59509bb75a2f7ecbdf40a4fe655 GIT binary patch literal 50802 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

*f*cYAIzRZ854in~2i5VHae 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 literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-and-shading_32x32.png b/data/stock_3d-texture-and-shading_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..fad08951f1baef7cde4254a80358a96cdc5faf32 GIT binary patch literal 2391 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 literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-spherical_128x128.png b/data/stock_3d-texture-spherical_128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..b575d8b58c817be52038f124ed1b27b78e7baa12 GIT binary patch literal 21128 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 b(f9N00000NkvXXu0mjfIBKWE literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-spherical_256x256.ico b/data/stock_3d-texture-spherical_256x256.ico new file mode 100644 index 0000000000000000000000000000000000000000..9df63f3733019f747f18a6bc193e57f2e7d3ea06 GIT binary patch literal 270398 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

-%mc9J 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�l*0Kc?bg}ojxU|>i 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 literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-spherical_256x256.png b/data/stock_3d-texture-spherical_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..8b4813909dec38f7e4b376a566e923a32e41eb96 GIT binary patch literal 51564 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 N002ovPDHLkV1mrmvGM=_ literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-spherical_32x32.ico b/data/stock_3d-texture-spherical_32x32.ico new file mode 100644 index 0000000000000000000000000000000000000000..c6bc2a14544e37d688de84301868472eeee77a69 GIT binary patch literal 4286 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 N;ZyjQIIcW~{{egEk-Pu^ literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-spherical_32x32.png b/data/stock_3d-texture-spherical_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..1985e595e0f45e106d4295f97c28226d57c1ffc7 GIT binary patch literal 2415 zcmV-#36S=QP)30? zzO23X+w9Km@UZL1u~Rj`kv@Ij9L<^k?|kPwGiQX9lACR&X~z4v@BGflp3%ecc)WFR z>(+K%4~TQ;rX$$roRE;fcA~>68B#fDj^b^nnLodh&_ye!8!(H&Cfs z#G?@su_)Pmfqbb9Ku0n`*fh8_w@An|2yqaXfYFl?GE=W=MOhN>#Ku18mUl7OZGP^nrJ%4Gxs*Yk+BgbA4jxk8bjKmCj8 z=b!z}7ra{a?2UAk8;ggAhWFq8%HxlJYtZ+7T+gGoqXSh{$>xicEej(UMAI}hO(Ur5 z1HgS1lAp;Q5jZm#(4*b)Nd(ll^;cJNQQ-L}aa= zwzi{v)4;P2KJwV!zOGJ+l?rW%IK@g8$93uN?Ivs*UVSRcf|_=lg&FDUpEddT2onUDruvuHs9djoqEtjzghT=HT8@mKPU4XGG(7){6Om z+z?>b-hDrgC)*<}En(W?G3vI1?RqFeA*eTIWY=7LUlNZ-(bUEYx}Hb1R!1m;kQv1F ze590=Di%E*ZA8Oi=2A<9Vu|qRtp|Pr99{g>aXB+JjouO) z7DBX2DYMrVVM}}G*Y$XN+vWKbGjj`!Pfeo-bUKr*M8Y9#*Ta_*DIuV0C_Q;{|pODODuHv+`0~+v$L~PRW)qKV?$3ngZ&$roVkMM`6#N&!QDHEwuA_1Dknai z#CBW|0s%+~JGb<)d$1G7^Y~zLn#JWTp6@ZVu?NR>S<2)nmP(YW7Okzx_7&Z0OQ0J@ z?D9g2rEHGYSQM*f<9R-wYzTP1j|6<#Fo^&}!;4k@l4gG+)-(-YO4?f!oOu5X>1=^i zCTFe#ux$rT(@>N~VJ&6zr1QmV>+X0SzTb$Y1cbP@dm1njUpA`0F-G7^C|fl$g%VOq zG)*I9hS@@0GkuGe_5FB_QjOrdT19F9Cv@?Gg!vQ4~Qcl}fLxfoiFg?MNnwMk2iV?kN(n7`F^>Cv1k067r=g znx+y8>gc-G$OJTI>@}bq*TZpL>W)jcSjG1xvkS{CXY<&0okROZSXf%-{d_L74q)!` z?AYAm(t~x!M+kxI`KYSOmcA}Rroq&eMc$p9CK5I|dTq#m#n^Lt#wQe`8W@FVIvZV@@x{d4m70aPu($q&!d-JT#C3DeykM+iaHcCHnn zl;BC9NZ4f12!epIbF-u}d14`ht-bB!iX}8nqo*Uu+<0kRO1ZuU05bEJe`ZMMU?S2I zTF&O_@9V*rlKFI=l2zyK{ll0+oyjYURO)tf#|We^8Qt24rYbDuikz#}Q5A(`tc9BG zk}H5ELpFMle9g z2;u^&qFk$iKtRLyeM(jxO;s?00kXvkGgng#^d(7W3Y>c9#PRvri?6TNTz4c>1A+LC zTkkl&^T1uBTEL*Kt&LCb8-eDRE)fl5*)CPbLDN(OfE08mB9yEe^_mS5mU9KhKDvmZ zDHMu%-aY>6sek|NwZpDmzwX4m?m*%>PTq*dzvlS-Y5!gKY;7?DTwYveWN;IPp)z?W+T*8vD2L^Cr1zyv~V zT|Gy(?cV$C*6#kn;e7|Adv**EZZU}`qJ+#Kwq=ve6&XJ_!|d79<=Lr;i*LXA#xuoi z`gNcTRDl}c0dh6OCjo?jaML2Hs`hvGZ93M`yJ4`it0%f~!-keCbMvmI2zzFBCSO=y zoL#s)^JmZVE;WTqO{@Gb04ksZ!6t~&^yVrHH1BnRdQ-$|T6I-i2ke_#f;A8;Ac3Z7 ztKt=L0r*V_XO&-xS4>JN{dHO&_iNUKSTR-si8b*`^P48u#LbW9jfFn(@3;wa?Q)G@ h+vFP0#|f{r{{UW9j|cz(f6V{@002ovPDHLkV1kRtk#_(9 literal 0 HcmV?d00001 diff --git a/data/stock_3d-texture-spherical_48x48.png b/data/stock_3d-texture-spherical_48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..2d1b7b820d0b4ab775f1efa9a12ad9ad4b517646 GIT binary patch literal 4391 zcmV+?5!mjDP)&K~!jgy_s2zWk-3(e|7e|FTG87Pxq|Gv*2yUX0Scj#z2H( z$V*~jgA^bn#Ns6&C3zr9kRs(J5FAAy;t(D}!UGU+u;eUai7+wP2E5FSXJ2}{rFYXuZk;;+e|<}R^_5Uc@vFFm5SGyO_vMNs4<0^r_;4nh zDNIdI=LAArzI?fM@zTYT=XsaQON;-l!tnb_DeqVE-M2zO2$9SbiXZ;XM?Ubx(YufC zIe!1~{EqQ)&Gmgu(_kc@M@mV#TEnp{gn*N$&xB`BpKhEyd1CJ0pMCbJwUy<6QA&0H zUkL~yjQs}>{l&*V_VG{Mee9jZJ+m_+k#I0{oiLObx=yvxK+0%r%QDEO)1VYR*QM`z zc)m}qTIJM<6SXIw{Nk4`pFj7PN~z%2PQXcL9{bFvKl6phKl0%z+jd0X^9X_f!!Veh z7)R3tuIIBO?< z8>tj?*Orh{GLp}c%cSvxfH0K&{NzpkTFHW3^gG*ELd!1iG%%>2?_@ zy|v6pJFe%`>Gc>Z=GiqpiEUZbn=PbL znh2pG1QCH)9NQ+8icm_rJr~#W0fDaTxSr32xdj@nHpP67nW;(s;M0G6mz~LdPY7{C zj5qu-kt_WD`yYM$_y>REVWg6*R%>{EKt7vcV0rasi$F%;h0w5Vi&nQwtJ9^~9!Lk* z_et0`x~3CKNv+w822fDU=Lmw3m9;9%YjohOQ%(qTTMGX&U=xc9Kju*p|t{a+x!iu5LNz(L-;; zFd_o2PM5jGWzxw6sf0r&ouX22phATngp3sn+;Q9OX8pH6^tj<9p9}ikZ`?EiA%uD4 z-upi{HnS)5z&%H()Ek7MLe~{S2(DaPrqk=8fFp-)#WZv@p&=0TTsP9j7UOzBfN2_N zTI9&9)hm=MH57`3ZBxu;snqItL5Mq0jjZjJ&tq%E2n%T(-N^4bW%@%$TV(1YV5JW}~y}pN13b}>&LAdVNnx=?z~0@AjTERiTcndojvPL~u?OF~H<`=-*;ZKJKtKqQzVpc4AMb`j zPbZV~U5~vp)9e@2sFq+(q{sqlRNy8elT6aTK(%}UcX z#)^4nrzUB%+l&_S_?oWYdGwx-3n9{*@xH-?5}DjbT{|^3QpmGbZ?JdQP7FgwDMhp0 zMM?=mBb9J441s9lr;G20G+G_f$z&8D6m+_MF3vCF`2o|n9GuC%`pUS!g+<0k zifBSZDd_h5q>>I3BSo^A6qac+zg*_(a(O*eCTttWw$L;UT@#UC2!SR9hOU8tTC!H(n)kp0~DSg#O4&4iLOV(iTJP31ezALATV?t1t=AX z>u=<4mT8hpr?`A=iC4~C;NsOqT-T@B>CtyRrp88T_T5P#gtILH%`hLC*u8Him(8+k zdXjRb#?|FA?M@F}H`YHq0O1G0#xn(mZfw98>yr|_0O)b}9T0XsKORr5_tkZSP%3K8 z7FU;6IIwpYJ0~ZwEsI-kKQgVE)+5`Rkm)2IIQ;h8%v3tdo|$Q0Jb8vgx9r8XEKI{d zDMb(jxW11JC5~+~={Q)Xfn}P2;Pp#aW3$mf2!sF?v(_|?TX*lo^F#c=CzO)4dJ{v} z&~*(>2rSc}+jo&Fa{5NA!^6jpGQYfn%4f|?F8?6#oh=Diwl!O8_t>**7g8z`j*XOx zT~j+yO7ZiP=RiauP}4My9NbSKn?~0)bWLZi-sHrEm1x!nW=X67rI;KmvVV3K87cx9 z5(FVXdg-+|Vo8*g?4FunyqKri?sE3>Rl2T6!m%+7ol}?Q7#SJev#kaa$#k~TX!7dW z3)EX(9)16NNF|eG(<$2BK7o``+>d882qkgAKoNyQMQk!ctb^jIvf@zAlOxUP4d6JMtR zT{kq-Fwle+MVff(8tpEwA0kx*W6=6iM&NZ75mFL{@eXc>A(rB%}b3+L&BoPtOpVj`JjO?gynOl+=jIkkr_xMM zjB(e&efYj)tpjccf(`q(QN-b_npx16aFMRh8JKdfU<`t=A0>9NI2qkOv77yNYJC0>x zTNajSvb0v`?A#Kgg$%ZBkxwT$w0nAe!Uqm6l|;t7u`5eu{4m51Lb^Sd$*}@EMhhI? zyAx16`;%X=R;%NA9)a(%Z+ZtWojgmzHdwrJDd@GD&u>d0^xS98zWR%$L-)OB_N9|& z7%dbcd)5R}DLOqD+p^a~pKTdjTdPrSw#g(NZkgG^?j2)M`Y`YV23kJpu< zOS{*nkWTWB!+Y`k0N)RBeV?A|qiGtBZIRBU`Jb0h((ZI9=29%2JG~fq?lapGP)c?7 z9z1-lT5rs{fh3hoar>=%S*y3{x<0K=k3uf9Zo`>W0z=o)guwL!8tpD!&qs?BxM3ew zN>ORHX?A*qp+wUJsf4{AkrdHhVyuv5ys(p8%HhQM%LJjsG!0hPs^}_MQc88UB>+&X zRK7diY22G1n-uj{laYLeJ=2p&CGdifYNNwgA&Y53!Zxw2Xj5Yv`XEqlEM9{U8Am4x z7>0om5`-Y(Skzh_O4SCXN&^(!eP}(X;w%GEllq(eSk;QZOsYOS>L-OYI4K%l-_ z`kKGC{70j=+&UvPoz-fCWFkq*Nnl#=;;D-yY>PrZ!&pAc%=iepuAxvkmPNDEkG)r| zFHADt^e1eK1GAIZrh#eboSR?f!a@np^Km_&eN*Eor3jUx)9YjCI(Hq|&#Pz7<5!lh zt*$Knvf$MrWmPOJ@kWM;;O3`yYO0@GoZ2d)sbm^#%#y%gg7^ zep@M3-;8(5J@LxI{AVw`^5T_7tA%A5{POklT$o?N^?k+)*~mEJq^{oXM$rbaOasF( zq8*tLi)moR|J$ayzG!(tfFFeG4xfw@wx!hyFP=P)X=un$5`+N@XI`6IUYPsrR#>;J zN+_jVJC*r-erom$_1Rm}6Qd(soL^+M)@F8k2d1INB%s~x6H1A$>*$(@s&YbXM4}k5 zR1(XG_5%Rzo*T`6oFbT-;KfrHsn#2e=hFxTi{(|S*RFJa@xsr(pp?X+4!L zjy`z&1CKuH1)*UW7CpDmVrh*d2lq2t$kO)%+#sOcbtz;G6yR7Up;G9&b{&CefsWEq zKMe7LkeTr!3Clo3@cfDMbb5U>At>h3ymICOM%WAg^XYFsTd%BcTim)~aaRaoqh4WH!LkGrGk2C>4UF+|9h{u z>Q%zP=WR0+2ozVBqH07CNU{kB6m&fwfgqD~$R=&FNr!CGA(L>>H4Qf|Sfv~bL)Qty z5HAS0y1a^}LCP_iUoKHuEAzu|fBp2rrSl(nvqO(Jtxf~A*4oNLul?ZZ7b>O2aIsWo z-_9{?)1Xps(doPRVMs2O00sRZuKfrtF7n2umBD5RK`xnyE7bwjdYc`^98)7X%9RSe zdMWtXGv9b&^bD zxG+z<+rx~Hm_ixHr8o^iM0*EA*Dwu@cCXKwxkXN0UO))&JfDT-68+Wr&JVuzPybdg zFTW3{$KMt=BC)Lx41pJbPUP^Wlg>Wzz`Gy*)E)OeG?UDaiLsF)C^!qO3*$lmYmzAXj^}}cWb^hls{PZce(|QW< zV+mN_t!@qUW(a5l@PG|CKyGT+oRwUkx zfHp+Hiop*g35;b6BOjXFIeVXz&W_!E{N05+?z~IW42M)IK_Q#M^#ZOemC=PDmoPbZ z_I3G_AN*I{AgG>w{nSsZtEF!NYd{z1#RPhQ7fbL~2n=h$8q&Z(5<_iXGtA?eeBq8% zDpedA9djloCX#2*UGP&$$45%9TrO3b_1ekM_nse`?S2e?0DMagycH7?F#$a$F%WwT zv4~8~jQhv6cT@}{h(Qfz*WE^L+6T5>iIq}n$oa##^)>-<+3=46=*{4V%R|AY_Xq7T z;9#hqA~v7xt~Whq-J}U^Nc17mHnoGkgBiH4{>6r4hC?#^Tn>Z3(V6kho)ZrUFhph; z3;M7*Y)|8p44yo;?}F<4VV2* h*Bd^3v!I8s{{?nP3=!0r)notw002ovPDHLkV1hCzdXoSE literal 0 HcmV?d00001 diff --git a/data/stop.png b/data/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..eca747f9f98d9c3340bd55d4078381ef4b1d534f GIT binary patch literal 922 zcmaJ=J&)5c7&frLNyiKf$nvc;iBsAVtGQE~w0Dt6RkfAqcy8ieqh8|RxHRp^#=wAd z;%BfU23YSeF!2uQUH%g$I1`BW~cV4xN934>ltFW7+5aP|6{H37JXqS086{g))*u|^AwmdB}L1JFFl zQyR>fgcEiVB{ur`IST14OgEx8jWYrG_au?rjE@DZjh=; z3q}WSnn{@wU0*Jj+On!~aiL?&vI-5;tSCe!TP2d_l_WbV6wjE)NzlOJvCnZ@K1PZZQgRsyw?) zL~mHw6+DKUlu5KVmQHuC-j*BgkHy%_)m1Qh(b&HlU0$i_DUQ3bRmN`cS)!(0sIh+f oV5HAyiU*k)INXv2gV*5r2qf` literal 0 HcmV?d00001 diff --git a/data/trash.gif b/data/trash.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e03d6dd2c6c053a87d70845caae672a9cddba6d GIT binary patch literal 96 zcmZ?wbhEHbV7%x2L70{r~^}?%lf#V4(Pug^`_skwFK<1F2