From 71fbaadc9d700f14a7aa5eb3a9d57461c1f1e3fd Mon Sep 17 00:00:00 2001 From: BlackHawkDesign Date: Tue, 14 Jun 2011 09:51:29 +0200 Subject: [PATCH] Initial version of the win32 client --- SparkleShare/Win32/.gitignore | 4 + SparkleShare/Win32/Controller/Updater.cs | 16 +++ .../Win32/Gui/SystemTrayForm.Designer.cs | 33 +++++ SparkleShare/Win32/Gui/SystemTrayForm.cs | 89 +++++++++++++ SparkleShare/Win32/Program.cs | 20 +++ SparkleShare/Win32/Properties/AssemblyInfo.cs | 36 ++++++ .../Win32/Properties/Resources.Designer.cs | 62 ++++++++++ SparkleShare/Win32/Properties/Resources.resx | 117 ++++++++++++++++++ .../Win32/Properties/Settings.Designer.cs | 26 ++++ .../Win32/Properties/Settings.settings | 7 ++ SparkleShare/Win32/SparkleShare.csproj | 85 +++++++++++++ SparkleShare/Win32/SparkleShare.sln | 20 +++ SparkleShare/Win32/sparkleshare.ico | Bin 0 -> 36470 bytes 13 files changed, 515 insertions(+) create mode 100644 SparkleShare/Win32/.gitignore create mode 100644 SparkleShare/Win32/Controller/Updater.cs create mode 100644 SparkleShare/Win32/Gui/SystemTrayForm.Designer.cs create mode 100644 SparkleShare/Win32/Gui/SystemTrayForm.cs create mode 100644 SparkleShare/Win32/Program.cs create mode 100644 SparkleShare/Win32/Properties/AssemblyInfo.cs create mode 100644 SparkleShare/Win32/Properties/Resources.Designer.cs create mode 100644 SparkleShare/Win32/Properties/Resources.resx create mode 100644 SparkleShare/Win32/Properties/Settings.Designer.cs create mode 100644 SparkleShare/Win32/Properties/Settings.settings create mode 100644 SparkleShare/Win32/SparkleShare.csproj create mode 100644 SparkleShare/Win32/SparkleShare.sln create mode 100644 SparkleShare/Win32/sparkleshare.ico diff --git a/SparkleShare/Win32/.gitignore b/SparkleShare/Win32/.gitignore new file mode 100644 index 00000000..7194bd50 --- /dev/null +++ b/SparkleShare/Win32/.gitignore @@ -0,0 +1,4 @@ + +*.suo +*.user +obj/* \ No newline at end of file diff --git a/SparkleShare/Win32/Controller/Updater.cs b/SparkleShare/Win32/Controller/Updater.cs new file mode 100644 index 00000000..6eb08527 --- /dev/null +++ b/SparkleShare/Win32/Controller/Updater.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace SparkleShare { + public static class Updater { + + public static bool IsUpToDate() { + return true; + } + + public static void Update() { + throw new NotImplementedException(); + } + } +} diff --git a/SparkleShare/Win32/Gui/SystemTrayForm.Designer.cs b/SparkleShare/Win32/Gui/SystemTrayForm.Designer.cs new file mode 100644 index 00000000..740d6a45 --- /dev/null +++ b/SparkleShare/Win32/Gui/SystemTrayForm.Designer.cs @@ -0,0 +1,33 @@ +namespace SparkleShare { + partial class SystemTrayForm { + /// + /// 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(); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.Text = "SystemTrayForm"; + } + + #endregion + } +} \ No newline at end of file diff --git a/SparkleShare/Win32/Gui/SystemTrayForm.cs b/SparkleShare/Win32/Gui/SystemTrayForm.cs new file mode 100644 index 00000000..7d605792 --- /dev/null +++ b/SparkleShare/Win32/Gui/SystemTrayForm.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Text; +using System.Windows.Forms; + +namespace SparkleShare { + public partial class SystemTrayForm : Form { + + protected override void OnLoad(EventArgs e) { + WindowState = FormWindowState.Minimized; + ShowInTaskbar = false; + + base.OnLoad(e); + + InitializeTrayIcon(); + } + + public void InitializeTrayIcon() { + NotifyIcon trayIcon = new NotifyIcon(); + trayIcon.Text = "SparkleShare"; + trayIcon.Icon = new Icon("sparkleshare.ico",40,40); + trayIcon.Visible = true; + + trayIcon.ContextMenuStrip = GetTrayIconMenu(); + } + + public ContextMenuStrip GetTrayIconMenu() { + ToolStripItem VersionStatusItem = new ToolStripLabel(); + + if (Updater.IsUpToDate()) { + VersionStatusItem.Text = "Up to date"; + VersionStatusItem.Enabled = false; + } else { + VersionStatusItem.Click += UpdateApplication; + } + + ToolStripItem AddRemoteFolderItem = new ToolStripLabel(); + AddRemoteFolderItem.Text = "Add remote folder"; + AddRemoteFolderItem.Click += AddRemoteFolder; + + ToolStripItem NotificationsItem = new ToolStripLabel(); + NotificationsItem.Text = "Turn off notifications"; + NotificationsItem.Click += ToggleNotifications; + + ToolStripItem AboutItem = new ToolStripLabel(); + AboutItem.Text = "About SparkleShare"; + AboutItem.Click += DisplayAboutDialog; + + ToolStripItem ExitItem = new ToolStripLabel(); + ExitItem.Text = "Exit"; + ExitItem.Click += ExitApplication; + + ContextMenuStrip menu = new ContextMenuStrip(); + menu.Items.Add(VersionStatusItem); + menu.Items.Add(new ToolStripSeparator()); + menu.Items.Add(AddRemoteFolderItem); + menu.Items.Add(new ToolStripSeparator()); + menu.Items.Add(NotificationsItem); + menu.Items.Add(new ToolStripSeparator()); + menu.Items.Add(AboutItem); + menu.Items.Add(ExitItem); + + return menu; + } + + public void UpdateApplication(object sender, EventArgs e) { + throw new NotImplementedException(); + } + + public void AddRemoteFolder(object sender, EventArgs e) { + throw new NotImplementedException(); + } + + public void ToggleNotifications(object sender, EventArgs e) { + throw new NotImplementedException(); + } + + public void DisplayAboutDialog(object sender, EventArgs e) { + throw new NotImplementedException(); + } + + public void ExitApplication(object sender, EventArgs e) { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/SparkleShare/Win32/Program.cs b/SparkleShare/Win32/Program.cs new file mode 100644 index 00000000..26477a42 --- /dev/null +++ b/SparkleShare/Win32/Program.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +namespace SparkleShare +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new SystemTrayForm()); + } + } +} \ No newline at end of file diff --git a/SparkleShare/Win32/Properties/AssemblyInfo.cs b/SparkleShare/Win32/Properties/AssemblyInfo.cs new file mode 100644 index 00000000..2d84c602 --- /dev/null +++ b/SparkleShare/Win32/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("SparkleShare")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("SparkleShare")] +[assembly: AssemblyCopyright("Copyright © 2011")] +[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("b5570a03-84a3-43c0-b9d3-3e84902323ec")] + +// 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/SparkleShare/Win32/Properties/Resources.Designer.cs b/SparkleShare/Win32/Properties/Resources.Designer.cs new file mode 100644 index 00000000..f1cc34b0 --- /dev/null +++ b/SparkleShare/Win32/Properties/Resources.Designer.cs @@ -0,0 +1,62 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.225 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SparkleShare.Properties { + + + /// + /// 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 ((resourceMan == null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SparkleShare.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; + } + } + } +} diff --git a/SparkleShare/Win32/Properties/Resources.resx b/SparkleShare/Win32/Properties/Resources.resx new file mode 100644 index 00000000..af7dbebb --- /dev/null +++ b/SparkleShare/Win32/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/SparkleShare/Win32/Properties/Settings.Designer.cs b/SparkleShare/Win32/Properties/Settings.Designer.cs new file mode 100644 index 00000000..5e0fca00 --- /dev/null +++ b/SparkleShare/Win32/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.225 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SparkleShare.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.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/SparkleShare/Win32/Properties/Settings.settings b/SparkleShare/Win32/Properties/Settings.settings new file mode 100644 index 00000000..39645652 --- /dev/null +++ b/SparkleShare/Win32/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/SparkleShare/Win32/SparkleShare.csproj b/SparkleShare/Win32/SparkleShare.csproj new file mode 100644 index 00000000..7f2e93aa --- /dev/null +++ b/SparkleShare/Win32/SparkleShare.csproj @@ -0,0 +1,85 @@ + + + + Debug + x86 + 8.0.30703 + 2.0 + {B436FB0A-C8CE-4EA3-8A18-9FB1A9C4EC80} + WinExe + Properties + SparkleShare + SparkleShare + v2.0 + 512 + + + x86 + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + x86 + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + Form + + + SystemTrayForm.cs + + + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/SparkleShare/Win32/SparkleShare.sln b/SparkleShare/Win32/SparkleShare.sln new file mode 100644 index 00000000..b7dd4ff1 --- /dev/null +++ b/SparkleShare/Win32/SparkleShare.sln @@ -0,0 +1,20 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SparkleShare", "SparkleShare.csproj", "{B436FB0A-C8CE-4EA3-8A18-9FB1A9C4EC80}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x86 = Debug|x86 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B436FB0A-C8CE-4EA3-8A18-9FB1A9C4EC80}.Debug|x86.ActiveCfg = Debug|x86 + {B436FB0A-C8CE-4EA3-8A18-9FB1A9C4EC80}.Debug|x86.Build.0 = Debug|x86 + {B436FB0A-C8CE-4EA3-8A18-9FB1A9C4EC80}.Release|x86.ActiveCfg = Release|x86 + {B436FB0A-C8CE-4EA3-8A18-9FB1A9C4EC80}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/SparkleShare/Win32/sparkleshare.ico b/SparkleShare/Win32/sparkleshare.ico new file mode 100644 index 0000000000000000000000000000000000000000..2e88830e6568eb7f12948d6e80fa8a2373ce6a6b GIT binary patch literal 36470 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