prepare linux about dialog for makeover

This commit is contained in:
Hylke Bons 2011-07-09 03:14:45 +01:00
parent c909eff767
commit 9d261cc740
3 changed files with 431 additions and 47 deletions

View file

@ -24,6 +24,7 @@ Contributors:
Jakub Steiner <jimmac@redhat.com>
Kristi Tsukida <kristi.tsukida@gmail.com>
Lapo Calamandrei <calamandrei@gmail.com>
Lars Falk-Petersen <dev@falk-petersen.no>
Luis Cordova <cordoval@gmail.com>
Łukasz Jernaś <deejay1@srem.org>
Michael Monreal <michael.monreal@gmail.com>

View file

@ -27,6 +27,8 @@ namespace SparkleShare {
public class SparkleAbout : Window {
public SparkleAboutController Controller = new SparkleAboutController ();
private Label version;
@ -39,7 +41,7 @@ namespace SparkleShare {
public SparkleAbout () : base ("")
{
DefaultSize = new Gdk.Size (360, 260);
DefaultSize = new Gdk.Size (640, 280);
BorderWidth = 0;
IconName = "folder-sparkleshare";
WindowPosition = WindowPosition.Center;
@ -48,21 +50,26 @@ namespace SparkleShare {
CreateAbout ();
SparkleShare.Controller.NewVersionAvailable += delegate (string new_version) {
Controller.NewVersionEvent += delegate (string new_version) {
Application.Invoke (delegate {
this.version.Markup = String.Format ("<small><span fgcolor='#f57900'>{0}: {1}</span></small>", _("A newer version is available"), new_version);
this.version.Markup = String.Format ("<small><span fgcolor='#f57900'>{0}: {1}</span></small>", _("A newer version is available!"), new_version);
this.version.ShowAll ();
});
};
SparkleShare.Controller.VersionUpToDate += delegate {
Controller.VersionUpToDateEvent += delegate {
Application.Invoke (delegate {
this.version.Markup = String.Format ("<small><span fgcolor='#4e9a06'>{0}</span></small>", _("You are running the latest version."));
this.version.ShowAll ();
});
};
SparkleShare.Controller.CheckForNewVersion ();
Controller.CheckingForNewVersionEvent += delegate {
Application.Invoke (delegate {
this.version.Markup = String.Format ("<small><span fgcolor='#4e9a06'>{0}</span></small>", _("Checking for updates..."));
this.version.ShowAll ();
});
};
}
@ -71,17 +78,14 @@ namespace SparkleShare {
Gdk.Color color = Style.Foreground (StateType.Insensitive);
string secondary_text_color = SparkleUIHelpers.GdkColorToHex (color);
EventBox box = new EventBox ();
box.ModifyBg (StateType.Normal, new TreeView ().Style.Base (StateType.Normal));
Label header = new Label () {
Markup = "<span font_size='xx-large'>SparkleShare</span>\n<span fgcolor='" + secondary_text_color + "'><small>" + SparkleShare.Controller.Version + "</small></span>",
Markup = "<span fgcolor='" + secondary_text_color + "'>version " + Controller.RunningVersion + "</span>",
Xalign = 0,
Xpad = 18,
Ypad = 18
};
box.Add (header);
this.version = new Label () {
Markup = String.Format ("<small>{0}</small>", _("Checking for updates...")),
@ -98,55 +102,22 @@ namespace SparkleShare {
Wrap = true,
LineWrapMode = Pango.WrapMode.Word,
Markup = "<small>Copyright © 2010" + DateTime.Now.Year + " Hylke Bons and others\n" +
Markup = "<small>Copyright © 2010" + DateTime.Now.Year + " Hylke Bons and others.\n" +
"\n" +
"SparkleShare is Free and Open Source Software. " +
"You are free to use, modify, and redistribute it " +
"under the terms of the GNU General Public License version 3 or later.</small>"
"SparkleShare is Free and Open Source Software. You are free to use, modify, " +
"and redistribute it under the terms of the GNU General Public License " +
"version 3 or later.</small>"
};
VBox vbox = new VBox (false, 0) {
BorderWidth = 0
};
HButtonBox button_bar = new HButtonBox () {
BorderWidth = 12
};
Button credits_button = new Button (_("_Show Credits")) {
UseUnderline = true
};
credits_button.Clicked += delegate {
Process process = new Process ();
process.StartInfo.FileName = "xdg-open";
process.StartInfo.Arguments = "http://www.sparkleshare.org/credits";
process.Start ();
};
Button website_button = new Button (_("_Visit Website")) {
UseUnderline = true
};
website_button.Clicked += delegate {
Process process = new Process ();
process.StartInfo.FileName = "xdg-open";
process.StartInfo.Arguments = "http://www.sparkleshare.org/";
process.Start ();
};
button_bar.Add (website_button);
button_bar.Add (credits_button);
vbox.PackStart (box, true, true, 0);
vbox.PackStart (header, true, true, 0);
vbox.PackStart (this.version, false, false, 0);
vbox.PackStart (license, true, true, 0);
vbox.PackStart (new Label (""), true, true, 0);
vbox.PackStart (button_bar, false, false, 0);
Add (vbox);
}

View file

@ -0,0 +1,412 @@
// SparkleShare, a collaboration and sharing tool.
// Copyright (C) 2010 Hylke Bons <hylkebons@gmail.com>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General private License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General private License for more details.
//
// You should have received a copy of the GNU General private License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
using System;
using System.Diagnostics;
using System.IO;
using System.Text.RegularExpressions;
using System.Timers;
using System.Collections.Generic;
using Gtk;
using Mono.Unix;
namespace SparkleShare {
public class SparkleSetup : SparkleSetupWindow {
public SparkleSetupController Controller = new SparkleSetupController ();
private string SecondaryTextColor;
private Entry NameEntry;
private Entry EmailEntry;
private SparkleEntry ServerEntry;
private SparkleEntry FolderEntry;
private Button NextButton;
private Button SyncButton;
private Table Table;
private ProgressBar progress_bar = new ProgressBar () { PulseStep = 0.01 };
private Timer progress_bar_pulse_timer = new Timer () { Interval = 25, Enabled = true };
// Short alias for the translations
public static string _ (string s)
{
return Catalog.GetString (s);
}
public SparkleSetup () : base ()
{
SecondaryTextColor = SparkleUIHelpers.GdkColorToHex (Style.Foreground (StateType.Insensitive));
Controller.ChangePageEvent += delegate (PageType type) {
Application.Invoke (delegate {
Reset ();
switch (type) {
case PageType.Setup:
Header = _("Welcome to SparkleShare!");
Description = _("Before we can create a SparkleShare folder on this " +
"computer, we need a few bits of information from you.");
Table = new Table (4, 2, true) {
RowSpacing = 6
};
Label name_label = new Label ("<b>" + _("Full Name:") + "</b>") {
UseMarkup = true,
Xalign = 0
};
NameEntry = new Entry (SparkleShare.Controller.UserName);
NameEntry.Changed += delegate {
CheckSetupPage ();
};
EmailEntry = new Entry ();
EmailEntry.Changed += delegate {
CheckSetupPage ();
};
Label email_label = new Label ("<b>" + _("Email:") + "</b>") {
UseMarkup = true,
Xalign = 0
};
Table.Attach (name_label, 0, 1, 0, 1);
Table.Attach (NameEntry, 1, 2, 0, 1);
Table.Attach (email_label, 0, 1, 1, 2);
Table.Attach (EmailEntry, 1, 2, 1, 2);
NextButton = new Button (_("Next")) {
Sensitive = false
};
NextButton.Clicked += delegate (object o, EventArgs args) {
string full_name = NameEntry.Text;
string email = EmailEntry.Text;
Controller.SetupPageCompleted (full_name, email);
};
AddButton (NextButton);
Add (Table);
CheckSetupPage ();
break;
case PageType.Add:
Header = _("Where is your remote folder?");
Table = new Table (6, 2, false) {
RowSpacing = 12
};
HBox layout_server = new HBox (true, 0);
// Own server radiobutton
RadioButton radio_button = new RadioButton ("<b>" + _("On my own server:") + "</b>");
(radio_button.Child as Label).UseMarkup = true;
radio_button.Toggled += delegate {
if (radio_button.Active) {
FolderEntry.ExampleText = _("Folder");
ServerEntry.Sensitive = true;
CheckAddPage ();
} else {
ServerEntry.Sensitive = false;
CheckAddPage ();
}
ShowAll ();
};
// Own server entry
ServerEntry = new SparkleEntry () { };
ServerEntry.Completion = new EntryCompletion();
ListStore server_store = new ListStore (typeof (string));
foreach (string host in SparkleShare.Controller.PreviousHosts)
server_store.AppendValues (host);
ServerEntry.Completion.Model = server_store;
ServerEntry.Completion.TextColumn = 0;
if (!string.IsNullOrEmpty (Controller.PreviousServer)) {
ServerEntry.Text = Controller.PreviousServer;
ServerEntry.ExampleTextActive = false;
} else {
ServerEntry.ExampleText = _("address-to-server.com");
}
ServerEntry.Changed += delegate {
CheckAddPage ();
};
layout_server.Add (radio_button);
layout_server.Add (ServerEntry);
Table.Attach (layout_server, 0, 2, 1, 2);
// Github radiobutton
string github_text = "<b>" + "Github" + "</b>\n" +
"<span fgcolor='" + SecondaryTextColor + "' size='small'>" +
_("Free hosting for Free and Open Source Software projects.") + "\n" +
_("Also has paid accounts for extra private space and bandwidth.") +
"</span>";
RadioButton radio_button_github = new RadioButton (radio_button, github_text);
(radio_button_github.Child as Label).UseMarkup = true;
(radio_button_github.Child as Label).Wrap = true;
radio_button_github.Toggled += delegate {
if (radio_button_github.Active)
FolderEntry.ExampleText = _("Username/Folder");
};
// Gitorious radiobutton
string gitorious_text = "<b>" + _("Gitorious") + "</b>\n" +
"<span fgcolor='" + SecondaryTextColor + "' size='small'>" +
_("Completely Free as in Freedom infrastructure.") + "\n" +
_("Free accounts for Free and Open Source projects.") +
"</span>";
RadioButton radio_button_gitorious = new RadioButton (radio_button, gitorious_text);
(radio_button_gitorious.Child as Label).UseMarkup = true;
(radio_button_gitorious.Child as Label).Wrap = true;
radio_button_gitorious.Toggled += delegate {
if (radio_button_gitorious.Active)
FolderEntry.ExampleText = _("Project/Folder");
};
// GNOME radiobutton
string gnome_text = "<b>" + _("The GNOME Project") + "</b>\n"+
"<span fgcolor='" + SecondaryTextColor + "' size='small'>" +
_("GNOME is an easy to understand interface to your computer.") + "\n" +
_("Select this option if youre a developer or designer working on GNOME.") +
"</span>";
RadioButton radio_button_gnome = new RadioButton (radio_button, gnome_text);
(radio_button_gnome.Child as Label).UseMarkup = true;
(radio_button_gnome.Child as Label).Wrap = true;
radio_button_gnome.Toggled += delegate {
if (radio_button_gnome.Active)
FolderEntry.ExampleText = _("Project");
};
Table.Attach (radio_button_github, 0, 2, 2, 3);
Table.Attach (radio_button_gitorious, 0, 2, 3, 4);
Table.Attach (radio_button_gnome, 0, 2, 4, 5);
// Folder label and entry
HBox layout_folder = new HBox (true, 0);
Label folder_label = new Label (_("Folder Name:")) {
UseMarkup = true,
Xalign = 1
};
FolderEntry = new SparkleEntry ();
FolderEntry.ExampleText = _("Folder");
FolderEntry.Changed += delegate {
CheckAddPage ();
};
layout_folder.PackStart (folder_label, true, true, 12);
layout_folder.PackStart (FolderEntry, true, true, 0);
Table.Attach (layout_folder, 0, 2, 5, 6);
Add (Table);
// Cancel button
Button cancel_button = new Button (_("Cancel"));
cancel_button.Clicked += delegate {
Close ();
};
// Sync button
SyncButton = new Button (_("Sync"));
SyncButton.Clicked += delegate {
string server = ServerEntry.Text;
string folder_name = FolderEntry.Text;
if (radio_button_gitorious.Active)
server = "gitorious.org";
if (radio_button_github.Active)
server = "github.com";
if (radio_button_gnome.Active)
server = "gnome.org";
Controller.AddPageCompleted (server, folder_name);
};
AddButton (cancel_button);
AddButton (SyncButton);
CheckAddPage ();
break;
case PageType.Syncing:
Header = String.Format (_("Syncing folder {0}’…"), Controller.SyncingFolder);
Description = _("This may take a while." + Environment.NewLine) +
_("Are you sure its not coffee o'clock?");
Button button = new Button () {
Sensitive = false,
Label = _("Finish")
};
button.Clicked += delegate {
Close ();
};
AddButton (button);
this.progress_bar_pulse_timer.Elapsed += delegate {
Application.Invoke (delegate {
progress_bar.Pulse ();
});
};
if (this.progress_bar.Parent != null)
(this.progress_bar.Parent as Container).Remove (this.progress_bar);
VBox bar_wrapper = new VBox (false , 0);
bar_wrapper.PackStart (this.progress_bar, false, false, 0);
Add (bar_wrapper);
break;
case PageType.Error:
Header = _("Something went wrong") + "…";
Button try_again_button = new Button (_("Try Again")) {
Sensitive = true
};
try_again_button.Clicked += delegate {
Controller.ErrorPageCompleted ();
};
AddButton (try_again_button);
Add (null);
break;
case PageType.Finished:
UrgencyHint = true;
if (!HasToplevelFocus) {
string title = String.Format (_("{0} has been successfully added"), Controller.SyncingFolder);
string subtext = _("");
new SparkleBubble (title, subtext).Show ();
}
Header = _("Folder synced successfully!");
Description = _("Access the synced files from your SparkleShare folder.");
// A button that opens the synced folder
Button open_folder_button = new Button (_("Open Folder"));
open_folder_button.Clicked += delegate {
SparkleShare.Controller.OpenSparkleShareFolder (Controller.SyncingFolder);
};
Button finish_button = new Button (_("Finish"));
finish_button.Clicked += delegate {
Close ();
};
Add (null);
AddButton (open_folder_button);
AddButton (finish_button);
break;
}
ShowAll ();
});
};
}
// Enables or disables the 'Next' button depending on the
// entries filled in by the user
private void CheckSetupPage ()
{
if (NameEntry.Text.Length > 0 &&
SparkleShare.Controller.IsValidEmail (EmailEntry.Text)) {
NextButton.Sensitive = true;
} else {
NextButton.Sensitive = false;
}
}
// Enables or disables the 'Next' button depending on the
// entries filled in by the user
public void CheckAddPage ()
{
SyncButton.Sensitive = false;
if (FolderEntry.ExampleTextActive ||
(ServerEntry.Sensitive && ServerEntry.ExampleTextActive))
return;
bool IsFolder = !FolderEntry.Text.Trim ().Equals ("");
bool IsServer = !ServerEntry.Text.Trim ().Equals ("");
if (ServerEntry.Sensitive == true) {
if (IsServer && IsFolder)
SyncButton.Sensitive = true;
} else if (IsFolder) {
SyncButton.Sensitive = true;
}
}
}
}