windows: implement some Setup pages
This commit is contained in:
parent
038f673c0f
commit
72704cc740
|
@ -23,13 +23,9 @@ using System.Runtime.InteropServices;
|
|||
using System.Text;
|
||||
using System.Threading;
|
||||
|
||||
#if __MonoCS__
|
||||
using Gtk;
|
||||
using Mono.Unix;
|
||||
using Mono.Unix.Native;
|
||||
#else
|
||||
using System.Windows.Forms;
|
||||
#endif
|
||||
using SparkleLib;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
@ -55,13 +51,10 @@ namespace SparkleShare {
|
|||
|
||||
public SparkleUI ()
|
||||
{
|
||||
// Initialize the application
|
||||
#if __MonoCS__
|
||||
Application.Init ();
|
||||
|
||||
// Use translations
|
||||
Catalog.Init (Defines.GETTEXT_PACKAGE, Defines.LOCALE_DIR);
|
||||
#endif
|
||||
|
||||
Setup = new SparkleSetup ();
|
||||
EventLog = new SparkleEventLog ();
|
||||
|
@ -69,8 +62,7 @@ namespace SparkleShare {
|
|||
Bubbles = new SparkleBubbles ();
|
||||
StatusIcon = new SparkleStatusIcon ();
|
||||
|
||||
if (Program.Controller.FirstRun)
|
||||
Program.Controller.ShowSetupWindow (PageType.Setup);
|
||||
Program.Controller.UIHasLoaded ();
|
||||
}
|
||||
|
||||
|
||||
|
@ -78,9 +70,6 @@ namespace SparkleShare {
|
|||
public void Run ()
|
||||
{
|
||||
Application.Run ();
|
||||
#if !__MonoCS__
|
||||
StatusIcon.Dispose ();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,10 +16,8 @@
|
|||
|
||||
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
using System.Timers;
|
||||
|
||||
using Mono.Unix;
|
||||
using MonoMac.Foundation;
|
||||
|
@ -36,41 +34,36 @@ namespace SparkleShare {
|
|||
public static SparkleSetup Setup;
|
||||
public static SparkleBubbles Bubbles;
|
||||
public static SparkleAbout About;
|
||||
public static NSFont Font;
|
||||
public static NSFont BoldFont;
|
||||
|
||||
|
||||
public static NSFont Font = NSFontManager.SharedFontManager.FontWithFamily
|
||||
("Lucida Grande", NSFontTraitMask.Condensed, 0, 13);
|
||||
|
||||
public static NSFont BoldFont = NSFontManager.SharedFontManager.FontWithFamily
|
||||
("Lucida Grande", NSFontTraitMask.Bold, 0, 13);
|
||||
|
||||
|
||||
public SparkleUI ()
|
||||
{
|
||||
using (var a = new NSAutoreleasePool ())
|
||||
{
|
||||
// Use translations
|
||||
Catalog.Init ("sparkleshare",
|
||||
Path.Combine (NSBundle.MainBundle.ResourcePath, "Translations"));
|
||||
|
||||
// Needed for Growl
|
||||
GrowlApplicationBridge.WeakDelegate = this;
|
||||
GrowlApplicationBridge.Delegate = new SparkleGrowlDelegate ();
|
||||
GrowlApplicationBridge.Delegate = new SparkleGrowlDelegate ();
|
||||
|
||||
NSApplication.SharedApplication.ApplicationIconImage
|
||||
= NSImage.ImageNamed ("sparkleshare.icns");
|
||||
NSApplication.SharedApplication.ApplicationIconImage =
|
||||
NSImage.ImageNamed ("sparkleshare.icns");
|
||||
|
||||
SetFolderIcon ();
|
||||
|
||||
Font = NSFontManager.SharedFontManager.FontWithFamily
|
||||
("Lucida Grande", NSFontTraitMask.Condensed, 0, 13);
|
||||
|
||||
BoldFont = NSFontManager.SharedFontManager.FontWithFamily
|
||||
("Lucida Grande", NSFontTraitMask.Bold, 0, 13);
|
||||
|
||||
Setup = new SparkleSetup ();
|
||||
EventLog = new SparkleEventLog ();
|
||||
About = new SparkleAbout ();
|
||||
Bubbles = new SparkleBubbles ();
|
||||
StatusIcon = new SparkleStatusIcon ();
|
||||
|
||||
if (Program.Controller.FirstRun)
|
||||
Program.Controller.ShowSetupWindow (PageType.Setup);
|
||||
Program.Controller.UIHasLoaded ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,8 +72,10 @@ namespace SparkleShare {
|
|||
{
|
||||
using (var a = new NSAutoreleasePool ())
|
||||
{
|
||||
string folder_icon_path = Path.Combine (NSBundle.MainBundle.ResourcePath,
|
||||
"sparkleshare-mac.icns");
|
||||
string folder_icon_path = Path.Combine (
|
||||
NSBundle.MainBundle.ResourcePath,
|
||||
"sparkleshare-mac.icns"
|
||||
);
|
||||
|
||||
NSImage folder_icon = new NSImage (folder_icon_path);
|
||||
|
||||
|
@ -111,13 +106,15 @@ namespace SparkleShare {
|
|||
private void HideDockIcon ()
|
||||
{
|
||||
// Currently not supported, here for completeness sake (see Apple's docs)
|
||||
// NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.None;
|
||||
// NSApplication.SharedApplication.ActivationPolicy =
|
||||
// NSApplicationActivationPolicy.None;
|
||||
}
|
||||
|
||||
|
||||
private void ShowDockIcon ()
|
||||
{
|
||||
NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Regular;
|
||||
NSApplication.SharedApplication.ActivationPolicy =
|
||||
NSApplicationActivationPolicy.Regular;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -90,6 +90,40 @@ namespace SparkleShare {
|
|||
public delegate void NoteNotificationRaisedEventHandler (SparkleUser user, string folder_name);
|
||||
|
||||
|
||||
|
||||
public bool FirstRun {
|
||||
get {
|
||||
return SparkleConfig.DefaultConfig.User.Email.Equals ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<string> Folders {
|
||||
get {
|
||||
List<string> folders = SparkleConfig.DefaultConfig.Folders;
|
||||
folders.Sort ();
|
||||
|
||||
return folders;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<string> UnsyncedFolders {
|
||||
get {
|
||||
List<string> unsynced_folders = new List<string> ();
|
||||
|
||||
lock (this.repo_lock) {
|
||||
foreach (SparkleRepoBase repo in Repositories) {
|
||||
if (repo.HasUnsyncedChanges)
|
||||
unsynced_folders.Add (repo.Name);
|
||||
}
|
||||
}
|
||||
|
||||
return unsynced_folders;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Path where the plugins are kept
|
||||
public abstract string PluginsPath { get; }
|
||||
|
||||
|
@ -210,53 +244,9 @@ namespace SparkleShare {
|
|||
|
||||
public void UIHasLoaded ()
|
||||
{
|
||||
if (FirstRun)
|
||||
// if (FirstRun)
|
||||
ShowSetupWindow (PageType.Setup);
|
||||
}
|
||||
|
||||
|
||||
public bool FirstRun {
|
||||
get {
|
||||
return SparkleConfig.DefaultConfig.User.Email.Equals ("Unknown");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<string> Folders {
|
||||
get {
|
||||
List<string> folders = SparkleConfig.DefaultConfig.Folders;
|
||||
folders.Sort ();
|
||||
|
||||
return folders;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<string> PreviousHosts {
|
||||
get {
|
||||
List<string> hosts = SparkleConfig.DefaultConfig.HostsWithUsername;
|
||||
hosts.AddRange(SparkleConfig.DefaultConfig.Hosts);
|
||||
hosts.Sort ();
|
||||
|
||||
return hosts;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<string> UnsyncedFolders {
|
||||
get {
|
||||
List<string> unsynced_folders = new List<string> ();
|
||||
|
||||
lock (this.repo_lock) {
|
||||
foreach (SparkleRepoBase repo in Repositories) {
|
||||
if (repo.HasUnsyncedChanges)
|
||||
unsynced_folders.Add (repo.Name);
|
||||
}
|
||||
}
|
||||
|
||||
return unsynced_folders;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void ShowSetupWindow (PageType page_type)
|
||||
|
|
|
@ -16,293 +16,371 @@
|
|||
|
||||
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Timers;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
|
||||
using System.Windows.Forms;
|
||||
using System.ComponentModel;
|
||||
using System.Drawing;
|
||||
|
||||
using System.IO;
|
||||
using System.Media;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public partial class SparkleSetup : Form {
|
||||
|
||||
public SparkleSetupController Controller = new SparkleSetupController ();
|
||||
|
||||
private TreeView treeView;
|
||||
|
||||
// Short alias for the translations
|
||||
public static string _ (string s) {
|
||||
return Program._ (s);
|
||||
}
|
||||
|
||||
|
||||
public SparkleSetup () {
|
||||
InitializeComponent ();
|
||||
|
||||
Program.TranslateWinForm (this);
|
||||
|
||||
pictureBox.Image = Icons.side_splash;
|
||||
this.Icon = Icons.sparkleshare;
|
||||
|
||||
Controller.HideWindowEvent += delegate
|
||||
{
|
||||
this.Hide();
|
||||
};
|
||||
|
||||
Controller.ShowWindowEvent += delegate
|
||||
{
|
||||
this.Show();
|
||||
};
|
||||
|
||||
Controller.ChangePageEvent += delegate (PageType type, string [] warnings) {
|
||||
tabControl.SafeInvoke ((Action)delegate {
|
||||
switch (type) {
|
||||
case PageType.Setup:
|
||||
tabControl.SelectedIndex = 0;
|
||||
NameEntry.Text = Controller.GuessedUserName;
|
||||
EmailEntry.Text = Controller.GuessedUserEmail;
|
||||
Show();
|
||||
Controller.CheckSetupPage(NameEntry.Text, EmailEntry.Text);
|
||||
break;
|
||||
|
||||
case PageType.Add:
|
||||
tabControl.SelectedIndex = 1;
|
||||
|
||||
// Add plugins to tree
|
||||
// ===================
|
||||
// Check whether the treeView is already created
|
||||
// If it is dispose it and start over
|
||||
if (treeView != null) {
|
||||
treeView.Dispose();
|
||||
}
|
||||
// Set up the treeview
|
||||
ImageList imageList = new ImageList ();
|
||||
imageList.ImageSize = new Size (24, 24);
|
||||
treeView = new TreeView ();
|
||||
treeView.DrawMode = System.Windows.Forms.TreeViewDrawMode.OwnerDrawText;
|
||||
treeView.FullRowSelect = true;
|
||||
treeView.ImageIndex = 0;
|
||||
treeView.Indent = 35;
|
||||
treeView.HideSelection = false;
|
||||
treeView.ItemHeight = 40;
|
||||
|
||||
TreeNode [] nodes = new TreeNode [Controller.Plugins.Count];
|
||||
|
||||
for (int i = 0; i < Controller.Plugins.Count; i++) {
|
||||
nodes [i] = new TreeNode (Controller.Plugins [i].Name + ";" + Controller.Plugins [i].Description);
|
||||
nodes [i].ImageIndex = i;
|
||||
nodes [i].SelectedImageIndex = i;
|
||||
nodes [i].Tag = Controller.Plugins [i].Name;
|
||||
imageList.Images.Add (Image.FromFile (Controller.Plugins [i].ImagePath));
|
||||
}
|
||||
|
||||
treeView.Nodes.AddRange (nodes);
|
||||
treeView.ImageList = imageList;
|
||||
treeView.ShowLines = false;
|
||||
treeView.ShowRootLines = false;
|
||||
treeView.Size = new System.Drawing.Size (panel_server_selection.Size.Width,
|
||||
panel_server_selection.Size.Height);
|
||||
|
||||
panel_server_selection.Controls.Add (treeView);
|
||||
// Finished adding and populating tree
|
||||
|
||||
// Select first node
|
||||
treeView.SelectedNode = treeView.Nodes[0];
|
||||
treeView.Select();
|
||||
Controller.SelectedPluginChanged(0);
|
||||
|
||||
treeView.AfterSelect += new TreeViewEventHandler(CheckTreeNode);
|
||||
|
||||
Show ();
|
||||
Controller.CheckAddPage(ServerEntry.Text, FolderEntry.Text, 1);
|
||||
break;
|
||||
|
||||
case PageType.Invite:
|
||||
tabControl.SelectedIndex = 5;
|
||||
InviteAddressEntry.Text = Controller.PendingInvite.Address;
|
||||
InviteFolderEntry.Text = Controller.PendingInvite.RemotePath;
|
||||
Show();
|
||||
break;
|
||||
|
||||
case PageType.Syncing:
|
||||
tabControl.SelectedIndex = 2;
|
||||
Show();
|
||||
break;
|
||||
|
||||
case PageType.Error:
|
||||
tabControl.SelectedIndex = 3;
|
||||
label3.Text = "First, have you tried turning it off and on again?\n\n" +
|
||||
Controller.PreviousUrl + " is the address we've compiled. Does this look alright?\n\n" +
|
||||
"The host needs to know who you are. Have you uploaded the key that sits in your SparkleShare folder?";
|
||||
Show ();
|
||||
break;
|
||||
|
||||
case PageType.Finished:
|
||||
tabControl.SelectedIndex = 4;
|
||||
Show ();
|
||||
break;
|
||||
|
||||
case PageType.Tutorial:
|
||||
// Do nothing in tutorial by now
|
||||
Controller.TutorialSkipped();;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new NotImplementedException ("unknown PageType");
|
||||
}
|
||||
public class SparkleSetup : SparkleSetupWindow {
|
||||
|
||||
public SparkleSetupController Controller = new SparkleSetupController ();
|
||||
|
||||
|
||||
public SparkleSetup ()
|
||||
{
|
||||
Controller.ShowWindowEvent += delegate {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
Show ();
|
||||
Activate ();
|
||||
BringIntoView ();
|
||||
});
|
||||
};
|
||||
|
||||
Controller.UpdateSetupContinueButtonEvent += new SparkleSetupController.UpdateSetupContinueButtonEventHandler(UpdateSetupContinueButtonEvent);
|
||||
Controller.HideWindowEvent += delegate {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
Hide ();
|
||||
});
|
||||
};
|
||||
|
||||
Controller.ChangePageEvent += delegate (PageType type, string [] warnings) {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
Reset ();
|
||||
|
||||
switch (type) {
|
||||
case PageType.Setup: {
|
||||
Header = "Welcome to SparkleShare!";
|
||||
Description = "Before we get started, what's your name and email?\n" +
|
||||
"Don't worry, this information will only visible to any team members.";
|
||||
|
||||
|
||||
TextBlock name_label = new TextBlock () {
|
||||
Text = "Full Name:",
|
||||
Width = 150,
|
||||
TextAlignment = TextAlignment.Right,
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
TextBox name_box = new TextBox () {
|
||||
Text = Controller.GuessedUserName,
|
||||
Width = 175
|
||||
|
||||
};
|
||||
|
||||
|
||||
TextBlock email_label = new TextBlock () {
|
||||
Text = "Email:",
|
||||
Width = 150,
|
||||
TextAlignment = TextAlignment.Right,
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
TextBox email_box = new TextBox () {
|
||||
Width = 175,
|
||||
Text = Controller.GuessedUserEmail
|
||||
};
|
||||
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue",
|
||||
IsEnabled = false
|
||||
};
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (name_label);
|
||||
Canvas.SetLeft (name_label, 180);
|
||||
Canvas.SetTop (name_label, 200 + 3);
|
||||
|
||||
ContentCanvas.Children.Add (name_box);
|
||||
Canvas.SetLeft (name_box, 340);
|
||||
Canvas.SetTop (name_box, 200);
|
||||
|
||||
ContentCanvas.Children.Add (email_label);
|
||||
Canvas.SetLeft (email_label, 180);
|
||||
Canvas.SetTop (email_label, 230 + 3);
|
||||
|
||||
ContentCanvas.Children.Add (email_box);
|
||||
Canvas.SetLeft (email_box, 340);
|
||||
Canvas.SetTop (email_box, 230);
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
|
||||
|
||||
Controller.UpdateSetupContinueButtonEvent += delegate (bool enabled) {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
continue_button.IsEnabled = enabled;
|
||||
});
|
||||
};
|
||||
|
||||
name_box.TextChanged += delegate {
|
||||
Controller.CheckSetupPage (name_box.Text, email_box.Text);
|
||||
};
|
||||
|
||||
email_box.TextChanged += delegate {
|
||||
Controller.CheckSetupPage (name_box.Text, email_box.Text);
|
||||
};
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.SetupPageCompleted (name_box.Text, email_box.Text);
|
||||
};
|
||||
|
||||
Controller.CheckSetupPage (name_box.Text, email_box.Text);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
Controller.ChangeAddressFieldEvent += new SparkleSetupController.ChangeAddressFieldEventHandler(ChangeAddressFieldEvent);
|
||||
Controller.ChangePathFieldEvent += new SparkleSetupController.ChangePathFieldEventHandler(ChangePathFieldEvent);
|
||||
Controller.UpdateAddProjectButtonEvent += new SparkleSetupController.UpdateAddProjectButtonEventHandler(UpdateAddProjectButtonEvent);
|
||||
case PageType.Invite: {
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
|
||||
case PageType.Add: {
|
||||
Header = "Where's your project hosted?";
|
||||
|
||||
|
||||
Button cancel_button = new Button () {
|
||||
Content = "Cancel"
|
||||
};
|
||||
|
||||
Button add_button = new Button () {
|
||||
Content = "Add"
|
||||
};
|
||||
|
||||
|
||||
Buttons.Add (add_button);
|
||||
Buttons.Add (cancel_button);
|
||||
|
||||
|
||||
Controller.UpdateAddProjectButtonEvent += delegate (bool button_enabled) {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
add_button.IsEnabled = button_enabled;
|
||||
});
|
||||
};
|
||||
|
||||
cancel_button.Click += delegate {
|
||||
Controller.PageCancelled ();
|
||||
};
|
||||
|
||||
Controller.UpdateProgressBarEvent += new SparkleSetupController.UpdateProgressBarEventHandler(UpdateProgressBarEvent);
|
||||
}
|
||||
add_button.Click += delegate {
|
||||
Controller.AddPageCompleted ("github.com", "hbons/Stuff"); // TODO
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case PageType.Syncing: {
|
||||
Header = "Adding project ‘" + Controller.SyncingFolder + "’…";
|
||||
Description = "This may take a while.\n" +
|
||||
"Are you sure it’s not coffee o'clock?";
|
||||
|
||||
|
||||
Button finish_button = new Button () {
|
||||
Content = "Finish",
|
||||
IsEnabled = false
|
||||
};
|
||||
|
||||
Button cancel_button = new Button () {
|
||||
Content = "Cancel"
|
||||
};
|
||||
|
||||
ProgressBar progress_bar = new ProgressBar () {
|
||||
Width = 414,
|
||||
Height = 15,
|
||||
Value = 1
|
||||
};
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (progress_bar);
|
||||
Canvas.SetLeft (progress_bar, 185);
|
||||
Canvas.SetTop (progress_bar, 150);
|
||||
|
||||
Buttons.Add (finish_button);
|
||||
Buttons.Add (cancel_button);
|
||||
|
||||
|
||||
Controller.UpdateProgressBarEvent += delegate (double percentage) {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
progress_bar.Value = percentage;
|
||||
});
|
||||
};
|
||||
|
||||
cancel_button.Click += delegate {
|
||||
Controller.SyncingCancelled ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
case PageType.Error: {
|
||||
Header = "Something went wrong…";
|
||||
Description = "Please check the following:";
|
||||
|
||||
// TODO: Bullet points
|
||||
|
||||
Button try_again_button = new Button () {
|
||||
Content = "Try again…"
|
||||
};
|
||||
|
||||
Buttons.Add (try_again_button);
|
||||
|
||||
try_again_button.Click += delegate {
|
||||
Controller.ErrorPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PageType.Finished: {
|
||||
Header = "Project ‘" + Path.GetFileName (Controller.PreviousPath) +
|
||||
"’ succesfully added!";
|
||||
|
||||
Description = "Access the files from your SparkleShare folder.";
|
||||
|
||||
|
||||
// TODO: warnings
|
||||
|
||||
Button finish_button = new Button () {
|
||||
Content = "Finish"
|
||||
};
|
||||
|
||||
Button open_folder_button = new Button () {
|
||||
Content = "Open folder"
|
||||
};
|
||||
|
||||
|
||||
Buttons.Add (finish_button);
|
||||
Buttons.Add (open_folder_button);
|
||||
|
||||
|
||||
finish_button.Click += delegate {
|
||||
Controller.FinishPageCompleted ();
|
||||
};
|
||||
|
||||
private void SparkleSetup_FormClosing (object sender, FormClosingEventArgs e) {
|
||||
if (e.CloseReason != CloseReason.ApplicationExitCall
|
||||
&& e.CloseReason != CloseReason.TaskManagerClosing
|
||||
&& e.CloseReason != CloseReason.WindowsShutDown) {
|
||||
e.Cancel = true;
|
||||
this.Hide ();
|
||||
}
|
||||
}
|
||||
|
||||
#region Things for "Setup" page
|
||||
private void SetupNextClicked(object sender, EventArgs e)
|
||||
{
|
||||
Controller.SetupPageCompleted(NameEntry.Text, EmailEntry.Text);
|
||||
}
|
||||
|
||||
private void CheckSetupPage(object sender, EventArgs e)
|
||||
{
|
||||
Controller.CheckSetupPage(NameEntry.Text, EmailEntry.Text);
|
||||
}
|
||||
|
||||
void UpdateSetupContinueButtonEvent(bool button_enabled)
|
||||
{
|
||||
buttonNext.Enabled = button_enabled;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Things for "Add" page
|
||||
void ChangeAddressFieldEvent(string text, string example_text, FieldState state)
|
||||
{
|
||||
ServerEntry.Text = text;
|
||||
ServerEntry.Enabled = state == FieldState.Enabled;
|
||||
ServerEntry.ExampleText = example_text;
|
||||
}
|
||||
|
||||
void ChangePathFieldEvent(string text, string example_text, FieldState state)
|
||||
{
|
||||
FolderEntry.Text = text;
|
||||
FolderEntry.Enabled = state == FieldState.Enabled;
|
||||
FolderEntry.ExampleText = example_text;
|
||||
}
|
||||
|
||||
private void CheckTreeNode(object sender, EventArgs e)
|
||||
{
|
||||
Controller.SelectedPluginChanged(treeView.SelectedNode.Index);
|
||||
}
|
||||
|
||||
private void CancelButtonClicked (object sender, EventArgs e) {
|
||||
Controller.PageCancelled();
|
||||
}
|
||||
|
||||
private void AddButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
Controller.AddPageCompleted(ServerEntry.Text, FolderEntry.Text);
|
||||
}
|
||||
|
||||
void UpdateAddProjectButtonEvent(bool button_enabled)
|
||||
{
|
||||
buttonSync.Enabled = button_enabled;
|
||||
}
|
||||
|
||||
private void CheckAddPage(object sender, EventArgs e)
|
||||
{
|
||||
Controller.CheckAddPage(ServerEntry.Text, FolderEntry.Text, treeView.SelectedNode.Index);
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Things for "Invite" page
|
||||
private void InviteAddButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
Controller.InvitePageCompleted();
|
||||
}
|
||||
|
||||
private void InviteCancelButtonClicked(object sender, EventArgs e)
|
||||
{
|
||||
Controller.PageCancelled();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Things for "Syncing" page
|
||||
private void syncCancelClicked(object sender, EventArgs e)
|
||||
{
|
||||
Controller.SyncingCancelled();
|
||||
}
|
||||
|
||||
void UpdateProgressBarEvent(double percentage)
|
||||
{
|
||||
syncingProgressBar.Value = (int)percentage;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Things for "Error" page
|
||||
private void buttonTryAgain_Click(object sender, EventArgs e)
|
||||
{
|
||||
Controller.ErrorPageCompleted();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Thigngs for "Finish" page
|
||||
private void buttonFinished_Click (object sender, EventArgs e) {
|
||||
Controller.FinishPageCompleted();
|
||||
}
|
||||
|
||||
private void buttonOpenFolder_Click (object sender, EventArgs e) {
|
||||
Controller.OpenFolderClicked();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
open_folder_button.Click += delegate {
|
||||
Controller.OpenFolderClicked ();
|
||||
};
|
||||
|
||||
|
||||
SystemSounds.Exclamation.Play ();
|
||||
// TODO: Catch attention without having to raise the window
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case PageType.Tutorial: {
|
||||
|
||||
switch (Controller.TutorialPageNumber) {
|
||||
case 1: {
|
||||
Header = "What's happening next?";
|
||||
Description = "SparkleShare creates a special folder on your computer " +
|
||||
"that will keep track of your projects.";
|
||||
|
||||
|
||||
Button skip_tutorial_button = new Button () {
|
||||
Content = "Skip tutorial"
|
||||
};
|
||||
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue"
|
||||
};
|
||||
|
||||
// TODO: Add slides
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
Buttons.Add (skip_tutorial_button);
|
||||
|
||||
|
||||
skip_tutorial_button.Click += delegate {
|
||||
Controller.TutorialSkipped ();
|
||||
};
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 2: {
|
||||
Header = "Sharing files with others";
|
||||
Description = "All files added to your project folders are synced automatically with " +
|
||||
"the host and your team members.";
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue"
|
||||
};
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 3: {
|
||||
Header = "The status icon is here to help";
|
||||
Description = "It shows the syncing progress, provides easy access to " +
|
||||
"your projects and let's you view recent changes.";
|
||||
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue"
|
||||
};
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
|
||||
continue_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case 4: {
|
||||
Header = "Adding projects to SparkleShare";
|
||||
Description = "You can do this through the status icon menu, or by clicking " +
|
||||
"magic buttons on webpages that look like this:";
|
||||
|
||||
|
||||
Button finish_button = new Button () {
|
||||
Content = "Finish"
|
||||
};
|
||||
|
||||
CheckBox check_box = new CheckBox () {
|
||||
Content = "Add SparkleShare to startup items",
|
||||
IsChecked = true
|
||||
};
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (check_box);
|
||||
Canvas.SetLeft (check_box, 185);
|
||||
Canvas.SetBottom (check_box, 12);
|
||||
|
||||
Buttons.Add (finish_button);
|
||||
|
||||
|
||||
finish_button.Click += delegate {
|
||||
Controller.TutorialPageCompleted ();
|
||||
};
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ShowAll ();
|
||||
});
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class TreeView : System.Windows.Forms.TreeView {
|
||||
|
||||
protected override void OnDrawNode (DrawTreeNodeEventArgs e) {
|
||||
e.Graphics.DrawString (e.Node.Text.Split (';') [0], new Font (Font.SystemFontName, 13),
|
||||
new SolidBrush (Color.Black), e.Bounds.X, e.Bounds.Y);
|
||||
e.Graphics.DrawString (e.Node.Text.Split (';') [1], new Font (Font.SystemFontName, 9),
|
||||
new SolidBrush (Color.Black), e.Bounds.X + 10, e.Bounds.Y + 15);
|
||||
}
|
||||
}
|
||||
|
||||
public class TreeNode : System.Windows.Forms.TreeNode {
|
||||
public TreeNode (string text) {
|
||||
|
||||
this.Text = text;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,6 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Windows.Forms.Integration;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
|
@ -31,7 +30,7 @@ namespace SparkleShare {
|
|||
|
||||
public class SparkleSetupWindow : Window {
|
||||
|
||||
public Canvas ContentCanvas = new Canvas ();
|
||||
public Canvas ContentCanvas = new Canvas ();
|
||||
public List <Button> Buttons = new List <Button> ();
|
||||
public string Header;
|
||||
public string Description;
|
||||
|
@ -39,6 +38,7 @@ namespace SparkleShare {
|
|||
private Image side_splash;
|
||||
private Rectangle bar;
|
||||
private Rectangle line;
|
||||
|
||||
|
||||
public SparkleSetupWindow ()
|
||||
{
|
||||
|
@ -53,7 +53,6 @@ namespace SparkleShare {
|
|||
|
||||
Closing += Close;
|
||||
|
||||
|
||||
this.bar = new Rectangle () {
|
||||
Width = Width,
|
||||
Height = 40,
|
||||
|
@ -155,9 +154,9 @@ namespace SparkleShare {
|
|||
|
||||
button.Width = rect.Width + 26;
|
||||
|
||||
//if (button.Width < 60)
|
||||
// button.Width = 60;
|
||||
|
||||
if (button.Width < 75)
|
||||
button.Width = 75;
|
||||
|
||||
ContentCanvas.Children.Add (button);
|
||||
Canvas.SetRight (button, right);
|
||||
Canvas.SetBottom (button, 9);
|
||||
|
@ -169,121 +168,11 @@ namespace SparkleShare {
|
|||
ElementHost.EnableModelessKeyboardInterop (this);
|
||||
Show ();
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void Close (object sender, CancelEventArgs args)
|
||||
{
|
||||
//Controller.WindowClosed ();
|
||||
args.Cancel = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public class SparkleWindow : SparkleSetupWindow {
|
||||
|
||||
public SparkleSetupController Controller = new SparkleSetupController ();
|
||||
|
||||
|
||||
public SparkleWindow ()
|
||||
{
|
||||
Reset ();
|
||||
|
||||
Header = "Welcome to SparkleShare!";
|
||||
Description = "Before we get started, what's your name and email?\n" +
|
||||
"Don't worry, this information will only visible to any team members.";
|
||||
|
||||
Button continue_button = new Button () {
|
||||
Content = "Continue",
|
||||
IsEnabled = false//,
|
||||
//Width = 75
|
||||
};
|
||||
|
||||
|
||||
Button cancel_button = new Button () {
|
||||
Content = "Cancel"//,
|
||||
//Width = 75
|
||||
};
|
||||
|
||||
Buttons.Add (continue_button);
|
||||
Buttons.Add (cancel_button);
|
||||
|
||||
|
||||
|
||||
CheckBox check_box = new CheckBox () {
|
||||
Content = "Add SparkleShare to startup items",
|
||||
IsChecked = true
|
||||
};
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (check_box);
|
||||
Canvas.SetLeft (check_box, 185);
|
||||
Canvas.SetBottom (check_box, 12);
|
||||
|
||||
|
||||
|
||||
TextBlock name_label = new TextBlock () {
|
||||
Text = "Full Name:",
|
||||
Width = 150,
|
||||
TextAlignment = TextAlignment.Right,
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
|
||||
TextBox name = new TextBox () {
|
||||
Text = Controller.GuessedUserName,
|
||||
Width = 175
|
||||
|
||||
};
|
||||
|
||||
TextBlock email_label = new TextBlock () {
|
||||
Text = "Email:",
|
||||
Width = 150,
|
||||
TextAlignment = TextAlignment.Right,
|
||||
FontWeight = FontWeights.Bold
|
||||
};
|
||||
|
||||
TextBox email = new TextBox () {
|
||||
Width = 175,
|
||||
Text = Controller.GuessedUserEmail
|
||||
};
|
||||
|
||||
name.TextChanged += delegate {
|
||||
Controller.CheckSetupPage (name.Text, email.Text);
|
||||
};
|
||||
|
||||
email.TextChanged += delegate {
|
||||
Controller.CheckSetupPage (name.Text, email.Text);
|
||||
};
|
||||
|
||||
Controller.UpdateSetupContinueButtonEvent += delegate (bool enabled) {
|
||||
Dispatcher.Invoke ((Action) delegate {
|
||||
continue_button.IsEnabled = enabled;
|
||||
});
|
||||
};
|
||||
|
||||
ContentCanvas.Children.Add (name);
|
||||
Canvas.SetLeft (name, 340);
|
||||
Canvas.SetTop (name, 200);
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (name_label);
|
||||
Canvas.SetLeft (name_label, 180);
|
||||
Canvas.SetTop (name_label, 200 + 3);
|
||||
|
||||
ContentCanvas.Children.Add (email_label);
|
||||
Canvas.SetLeft (email_label, 180);
|
||||
Canvas.SetTop (email_label, 230 + 3);
|
||||
|
||||
|
||||
ContentCanvas.Children.Add (email);
|
||||
Canvas.SetLeft (email, 340);
|
||||
Canvas.SetTop (email, 230);
|
||||
|
||||
|
||||
|
||||
Controller.CheckSetupPage (name.Text, email.Text);
|
||||
|
||||
ShowAll ();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -125,12 +125,7 @@
|
|||
<Compile Include="SparkleAbout.cs" />
|
||||
<Compile Include="SparkleController.cs" />
|
||||
<Compile Include="SparkleEventLog.cs" />
|
||||
<Compile Include="SparkleSetup.cs">
|
||||
<SubType>Form</SubType>
|
||||
</Compile>
|
||||
<Compile Include="SparkleSetup.Designer.cs">
|
||||
<DependentUpon>SparkleSetup.cs</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="SparkleSetup.cs" />
|
||||
<Compile Include="Program.cs" />
|
||||
<Compile Include="SparkleStatusIcon.cs" />
|
||||
<Compile Include="SparkleUIHelpers.cs" />
|
||||
|
|
|
@ -18,23 +18,19 @@
|
|||
using System;
|
||||
using System.Windows.Forms;
|
||||
|
||||
using SparkleLib;
|
||||
|
||||
namespace SparkleShare {
|
||||
|
||||
public class SparkleUI {
|
||||
|
||||
public static SparkleStatusIcon StatusIcon;
|
||||
public static SparkleEventLog EventLog;
|
||||
public static SparkleSetup Setup;
|
||||
public static SparkleEventLog EventLog;
|
||||
public static SparkleBubbles Bubbles;
|
||||
public static SparkleSetup Setup;
|
||||
public static SparkleStatusIcon StatusIcon;
|
||||
public static SparkleAbout About;
|
||||
|
||||
|
||||
public SparkleUI ()
|
||||
{
|
||||
SparkleWindow window = new SparkleWindow ();
|
||||
|
||||
{
|
||||
Setup = new SparkleSetup ();
|
||||
EventLog = new SparkleEventLog ();
|
||||
About = new SparkleAbout ();
|
||||
|
|
Loading…
Reference in a new issue