Ci sono molti problemi di instabilità, ma almeno le cose funzionano :)

Leonardo Robol [2010-02-09 23:36]
Ci sono molti problemi di instabilità, ma almeno le cose funzionano :)
Filename
Dizzy/Log.cs
Dizzy/MainWindow.cs
Dizzy/Protocol.cs
gtk-gui/MainWindow.cs
gtk-gui/gui.stetic
diff --git a/Dizzy/Log.cs b/Dizzy/Log.cs
index 085af92..77d045f 100644
--- a/Dizzy/Log.cs
+++ b/Dizzy/Log.cs
@@ -8,6 +8,9 @@ namespace Dizzy
 	public class Log
 	{

+		public delegate void LogEvent (string message);
+		public static event LogEvent StatusBarUpdate;
+
 		public Log ()
 		{
 		}
@@ -42,6 +45,8 @@ namespace Dizzy
 			Console.Write (" ==> ");
 			Console.ForegroundColor = initial;
 			Console.WriteLine (message);
+
+			StatusBarUpdate(message);
 		}
 	}
 }
diff --git a/Dizzy/MainWindow.cs b/Dizzy/MainWindow.cs
index 0aa539f..95fc4db 100644
--- a/Dizzy/MainWindow.cs
+++ b/Dizzy/MainWindow.cs
@@ -31,9 +31,16 @@ public partial class MainWindow : Gtk.Window
 		this.protocol = new Protocol (ref this.config);

 		this.protocol.AuthenticationRequired += this.Connect;
-		// this.protocol.AuthenticationFailed += this.OnAuthenticationFailed;
+		Log.StatusBarUpdate += this.OnStatusBarUpdate;
+
+	}
+
+	public void OnStatusBarUpdate (string message)
+	{
+		dizzystatus.Push(0, message);
 	}

+
 	protected void Connect ()
 	{
 		if (this.a != null)
@@ -100,5 +107,4 @@ public partial class MainWindow : Gtk.Window
 		config.InsertValue("download_folder", downloadpathchooser.Filename);
 	}

-
 }
diff --git a/Dizzy/Protocol.cs b/Dizzy/Protocol.cs
index 4d22c2f..65bc3ee 100644
--- a/Dizzy/Protocol.cs
+++ b/Dizzy/Protocol.cs
@@ -90,8 +90,15 @@ namespace Dizzy
 			// una ricerca. Inoltre abbiamo la quasi certezza che ne venga
 			// chiamata solo un'istanza nello stesso momento.
 			FileList list = new FileList (ref this.config);
-
-			ArrayList files = list.Search (this.keyword);
+
+			ArrayList files;
+			try { files = list.Search (this.keyword); }
+			catch (Exception e) {
+				// Probabilmente stiamo solamente scaricando il database,
+				// ma tant'è.
+				Log.Error ("Impossibile effettuare la ricerca nel database: " + e.Message);
+				files = new ArrayList ();
+			}

 			this.fileTreeView.Clear ();
 			if (files.Count == 0)
@@ -134,7 +141,6 @@ namespace Dizzy
 			// di avere.
 			s = new SFTPConnection (this.config.GetValue("user"),
 			                       	this.config.password);
-			Log.Info ("Oggetto SFTPConnection creato");

 			try {
 				s.Connect ();
@@ -151,7 +157,7 @@ namespace Dizzy
 			}
 			else
 			{
-				Log.Info ("Aggiornamento della lista");
+				Log.Info ("Aggiornamento della lista avviato");

 				s.Download (new File("/nobackup/robol/index.db", "robol"),
 					            this.config.ConfigDir ());
@@ -187,7 +193,6 @@ namespace Dizzy
 			if (!this.config.authenticated)
 				this.AuthenticationRequired ();
 			while(!this.config.authenticated) {}
-			Log.Info ("Dati di autenticazione trovati, procedo con il download");

 			ArrayList args = new ArrayList ();
 			args.Add (f);
@@ -206,7 +211,7 @@ namespace Dizzy
 			File f = (File) ((ArrayList) args)[0];
 			TaskTreeView tasks = (TaskTreeView) ((ArrayList) args)[1];
 			string downloadFolder = (string) ((ArrayList) args)[2];
-			Log.Info ("Avvio il download");
+			Log.Info ("Avvio il download di " + f.name);

 			try {
 				FileTransfer transfer = new FileTransfer (f, ref tasks, this.config.GetValue("user"), this.config.password, downloadFolder);
@@ -251,7 +256,6 @@ namespace Dizzy
 		private void TransferStartedHandler(string src, string dest, int transferredBytes,
 		                                    int totalBytes, string message)
 		{
-			Log.Info ("Il download si è avviato");
 			if(TransferStarted != null)
 				TransferStarted(src, dest, transferredBytes, totalBytes, message);
 		}
@@ -359,7 +363,6 @@ namespace Dizzy
 			sftp.TransferProgress += new SFTPConnection.SFTPEvent(OnTransferProgress);
 			sftp.TransferStopped += new SFTPConnection.SFTPEvent(OnTransferStopped);

-			Log.Info ("Eseguo SFTPConnection.Download ()");
 			sftp.Download (this.file, downloadFolder);
 			sftp.Disconnect ();
 		}
@@ -372,7 +375,6 @@ namespace Dizzy
 		public void OnTransferStarted (string src, string dest, int transferredBytes,
 		                          int totalBytes, string message)
 		{
-			Log.Info ("Evento TransferStart () ricevuto");
 			this.iter = this.tasks.AddTask(file.name, 0);
 		}

@@ -432,6 +434,7 @@ namespace Dizzy
 		public FileList(ref GlobalConfig config) {

 			this.config = config;
+
 			string connectionString = "Data Source=" + this.config.ListFileName () + ";Version=3";
 			this.connection = new SQLiteConnection(connectionString);
 		}
diff --git a/gtk-gui/MainWindow.cs b/gtk-gui/MainWindow.cs
index b043054..b07e19b 100644
--- a/gtk-gui/MainWindow.cs
+++ b/gtk-gui/MainWindow.cs
@@ -14,8 +14,6 @@ public partial class MainWindow {

     private Gtk.VBox vbox1;

-    private Gtk.Label label5;
-
     private Gtk.Notebook notebook1;

     private Gtk.VBox vbox3;
@@ -54,17 +52,23 @@ public partial class MainWindow {

     private Gtk.Label label3;

-    private Gtk.VBox vbox4;
+    private Gtk.Table table2;
+
+    private Gtk.Button button182;
+
+    private Gtk.Button button183;
+
+    private Gtk.Button button184;

-    private Gtk.HBox hbox1;
+    private Gtk.FileChooserButton filechooserbutton1;

-    private Gtk.Button button261;
+    private Gtk.Label label8;

-    private Gtk.Button button262;
+    private Gtk.Label label9;

     private Gtk.Label label7;

-    private Gtk.Statusbar statusbar2;
+    private Gtk.Statusbar dizzystatus;

     protected virtual void Build() {
         Stetic.Gui.Initialize(this);
@@ -81,19 +85,10 @@ public partial class MainWindow {
         this.vbox1.Spacing = 6;
         this.vbox1.BorderWidth = ((uint)(5));
         // Container child vbox1.Gtk.Box+BoxChild
-        this.label5 = new Gtk.Label();
-        this.label5.Name = "label5";
-        this.label5.LabelProp = Mono.Unix.Catalog.GetString("Ricordati di selezionare la cartella per il download prima di iniziarne uno.");
-        this.vbox1.Add(this.label5);
-        Gtk.Box.BoxChild w1 = ((Gtk.Box.BoxChild)(this.vbox1[this.label5]));
-        w1.Position = 0;
-        w1.Expand = false;
-        w1.Padding = ((uint)(1));
-        // Container child vbox1.Gtk.Box+BoxChild
         this.notebook1 = new Gtk.Notebook();
         this.notebook1.CanFocus = true;
         this.notebook1.Name = "notebook1";
-        this.notebook1.CurrentPage = 2;
+        this.notebook1.CurrentPage = 0;
         // Container child notebook1.Gtk.Notebook+NotebookChild
         this.vbox3 = new Gtk.VBox();
         this.vbox3.Name = "vbox3";
@@ -111,31 +106,31 @@ public partial class MainWindow {
         this.button1.UseUnderline = true;
         this.button1.Label = Mono.Unix.Catalog.GetString("Cerca");
         this.table1.Add(this.button1);
-        Gtk.Table.TableChild w2 = ((Gtk.Table.TableChild)(this.table1[this.button1]));
-        w2.TopAttach = ((uint)(1));
-        w2.BottomAttach = ((uint)(2));
-        w2.LeftAttach = ((uint)(2));
-        w2.RightAttach = ((uint)(3));
-        w2.XOptions = ((Gtk.AttachOptions)(4));
-        w2.YOptions = ((Gtk.AttachOptions)(4));
+        Gtk.Table.TableChild w1 = ((Gtk.Table.TableChild)(this.table1[this.button1]));
+        w1.TopAttach = ((uint)(1));
+        w1.BottomAttach = ((uint)(2));
+        w1.LeftAttach = ((uint)(2));
+        w1.RightAttach = ((uint)(3));
+        w1.XOptions = ((Gtk.AttachOptions)(4));
+        w1.YOptions = ((Gtk.AttachOptions)(4));
         // Container child table1.Gtk.Table+TableChild
         this.label4 = new Gtk.Label();
         this.label4.Name = "label4";
         this.label4.LabelProp = Mono.Unix.Catalog.GetString("Parola chiave");
         this.table1.Add(this.label4);
-        Gtk.Table.TableChild w3 = ((Gtk.Table.TableChild)(this.table1[this.label4]));
-        w3.XOptions = ((Gtk.AttachOptions)(4));
-        w3.YOptions = ((Gtk.AttachOptions)(4));
+        Gtk.Table.TableChild w2 = ((Gtk.Table.TableChild)(this.table1[this.label4]));
+        w2.XOptions = ((Gtk.AttachOptions)(4));
+        w2.YOptions = ((Gtk.AttachOptions)(4));
         // Container child table1.Gtk.Table+TableChild
         this.label6 = new Gtk.Label();
         this.label6.Name = "label6";
         this.label6.LabelProp = Mono.Unix.Catalog.GetString("Utente");
         this.table1.Add(this.label6);
-        Gtk.Table.TableChild w4 = ((Gtk.Table.TableChild)(this.table1[this.label6]));
-        w4.TopAttach = ((uint)(1));
-        w4.BottomAttach = ((uint)(2));
-        w4.XOptions = ((Gtk.AttachOptions)(4));
-        w4.YOptions = ((Gtk.AttachOptions)(4));
+        Gtk.Table.TableChild w3 = ((Gtk.Table.TableChild)(this.table1[this.label6]));
+        w3.TopAttach = ((uint)(1));
+        w3.BottomAttach = ((uint)(2));
+        w3.XOptions = ((Gtk.AttachOptions)(4));
+        w3.YOptions = ((Gtk.AttachOptions)(4));
         // Container child table1.Gtk.Table+TableChild
         this.searchBox = new Gtk.Entry();
         this.searchBox.CanFocus = true;
@@ -143,10 +138,10 @@ public partial class MainWindow {
         this.searchBox.IsEditable = true;
         this.searchBox.InvisibleChar = '•';
         this.table1.Add(this.searchBox);
-        Gtk.Table.TableChild w5 = ((Gtk.Table.TableChild)(this.table1[this.searchBox]));
-        w5.LeftAttach = ((uint)(1));
-        w5.RightAttach = ((uint)(2));
-        w5.YOptions = ((Gtk.AttachOptions)(4));
+        Gtk.Table.TableChild w4 = ((Gtk.Table.TableChild)(this.table1[this.searchBox]));
+        w4.LeftAttach = ((uint)(1));
+        w4.RightAttach = ((uint)(2));
+        w4.YOptions = ((Gtk.AttachOptions)(4));
         // Container child table1.Gtk.Table+TableChild
         this.searchUserBox = new Gtk.Entry();
         this.searchUserBox.CanFocus = true;
@@ -154,12 +149,12 @@ public partial class MainWindow {
         this.searchUserBox.IsEditable = true;
         this.searchUserBox.InvisibleChar = '•';
         this.table1.Add(this.searchUserBox);
-        Gtk.Table.TableChild w6 = ((Gtk.Table.TableChild)(this.table1[this.searchUserBox]));
-        w6.TopAttach = ((uint)(1));
-        w6.BottomAttach = ((uint)(2));
-        w6.LeftAttach = ((uint)(1));
-        w6.RightAttach = ((uint)(2));
-        w6.YOptions = ((Gtk.AttachOptions)(4));
+        Gtk.Table.TableChild w5 = ((Gtk.Table.TableChild)(this.table1[this.searchUserBox]));
+        w5.TopAttach = ((uint)(1));
+        w5.BottomAttach = ((uint)(2));
+        w5.LeftAttach = ((uint)(1));
+        w5.RightAttach = ((uint)(2));
+        w5.YOptions = ((Gtk.AttachOptions)(4));
         // Container child table1.Gtk.Table+TableChild
         this.typeBox = Gtk.ComboBox.NewText();
         this.typeBox.AppendText(Mono.Unix.Catalog.GetString("Qualsias"));
@@ -169,16 +164,16 @@ public partial class MainWindow {
         this.typeBox.Name = "typeBox";
         this.typeBox.Active = 0;
         this.table1.Add(this.typeBox);
-        Gtk.Table.TableChild w7 = ((Gtk.Table.TableChild)(this.table1[this.typeBox]));
-        w7.LeftAttach = ((uint)(2));
-        w7.RightAttach = ((uint)(3));
-        w7.XOptions = ((Gtk.AttachOptions)(4));
-        w7.YOptions = ((Gtk.AttachOptions)(4));
+        Gtk.Table.TableChild w6 = ((Gtk.Table.TableChild)(this.table1[this.typeBox]));
+        w6.LeftAttach = ((uint)(2));
+        w6.RightAttach = ((uint)(3));
+        w6.XOptions = ((Gtk.AttachOptions)(4));
+        w6.YOptions = ((Gtk.AttachOptions)(4));
         this.vbox3.Add(this.table1);
-        Gtk.Box.BoxChild w8 = ((Gtk.Box.BoxChild)(this.vbox3[this.table1]));
-        w8.Position = 0;
-        w8.Expand = false;
-        w8.Fill = false;
+        Gtk.Box.BoxChild w7 = ((Gtk.Box.BoxChild)(this.vbox3[this.table1]));
+        w7.Position = 0;
+        w7.Expand = false;
+        w7.Fill = false;
         // Container child vbox3.Gtk.Box+BoxChild
         this.GtkScrolledWindow = new Gtk.ScrolledWindow();
         this.GtkScrolledWindow.Name = "GtkScrolledWindow";
@@ -187,10 +182,11 @@ public partial class MainWindow {
         this.filelist = new Gtk.TreeView();
         this.filelist.CanFocus = true;
         this.filelist.Name = "filelist";
+        this.filelist.Reorderable = true;
         this.GtkScrolledWindow.Add(this.filelist);
         this.vbox3.Add(this.GtkScrolledWindow);
-        Gtk.Box.BoxChild w10 = ((Gtk.Box.BoxChild)(this.vbox3[this.GtkScrolledWindow]));
-        w10.Position = 1;
+        Gtk.Box.BoxChild w9 = ((Gtk.Box.BoxChild)(this.vbox3[this.GtkScrolledWindow]));
+        w9.Position = 1;
         this.notebook1.Add(this.vbox3);
         // Notebook tab
         this.label1 = new Gtk.Label();
@@ -212,8 +208,8 @@ public partial class MainWindow {
         this.tasklist.Name = "tasklist";
         this.GtkScrolledWindow1.Add(this.tasklist);
         this.vbox2.Add(this.GtkScrolledWindow1);
-        Gtk.Box.BoxChild w13 = ((Gtk.Box.BoxChild)(this.vbox2[this.GtkScrolledWindow1]));
-        w13.Position = 0;
+        Gtk.Box.BoxChild w12 = ((Gtk.Box.BoxChild)(this.vbox2[this.GtkScrolledWindow1]));
+        w12.Position = 0;
         // Container child vbox2.Gtk.Box+BoxChild
         this.hbox2 = new Gtk.HBox();
         this.hbox2.Name = "hbox2";
@@ -224,24 +220,24 @@ public partial class MainWindow {
         this.label2.Name = "label2";
         this.label2.LabelProp = Mono.Unix.Catalog.GetString("Scarica in");
         this.hbox2.Add(this.label2);
-        Gtk.Box.BoxChild w14 = ((Gtk.Box.BoxChild)(this.hbox2[this.label2]));
-        w14.Position = 0;
-        w14.Expand = false;
-        w14.Fill = false;
+        Gtk.Box.BoxChild w13 = ((Gtk.Box.BoxChild)(this.hbox2[this.label2]));
+        w13.Position = 0;
+        w13.Expand = false;
+        w13.Fill = false;
         // Container child hbox2.Gtk.Box+BoxChild
         this.downloadpathchooser = new Gtk.FileChooserButton(Mono.Unix.Catalog.GetString("Seleziona una cartella"), ((Gtk.FileChooserAction)(2)));
         this.downloadpathchooser.Name = "downloadpathchooser";
         this.hbox2.Add(this.downloadpathchooser);
-        Gtk.Box.BoxChild w15 = ((Gtk.Box.BoxChild)(this.hbox2[this.downloadpathchooser]));
-        w15.Position = 1;
+        Gtk.Box.BoxChild w14 = ((Gtk.Box.BoxChild)(this.hbox2[this.downloadpathchooser]));
+        w14.Position = 1;
         this.vbox2.Add(this.hbox2);
-        Gtk.Box.BoxChild w16 = ((Gtk.Box.BoxChild)(this.vbox2[this.hbox2]));
-        w16.Position = 1;
-        w16.Expand = false;
-        w16.Fill = false;
+        Gtk.Box.BoxChild w15 = ((Gtk.Box.BoxChild)(this.vbox2[this.hbox2]));
+        w15.Position = 1;
+        w15.Expand = false;
+        w15.Fill = false;
         this.notebook1.Add(this.vbox2);
-        Gtk.Notebook.NotebookChild w17 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.vbox2]));
-        w17.Position = 1;
+        Gtk.Notebook.NotebookChild w16 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.vbox2]));
+        w16.Position = 1;
         // Notebook tab
         this.label3 = new Gtk.Label();
         this.label3.Name = "label3";
@@ -249,63 +245,102 @@ public partial class MainWindow {
         this.notebook1.SetTabLabel(this.vbox2, this.label3);
         this.label3.ShowAll();
         // Container child notebook1.Gtk.Notebook+NotebookChild
-        this.vbox4 = new Gtk.VBox();
-        this.vbox4.Name = "vbox4";
-        this.vbox4.Spacing = 6;
-        // Container child vbox4.Gtk.Box+BoxChild
-        this.hbox1 = new Gtk.HBox();
-        this.hbox1.Name = "hbox1";
-        this.hbox1.Homogeneous = true;
-        this.hbox1.Spacing = 6;
-        this.hbox1.BorderWidth = ((uint)(5));
-        // Container child hbox1.Gtk.Box+BoxChild
-        this.button261 = new Gtk.Button();
-        this.button261.CanFocus = true;
-        this.button261.Name = "button261";
-        this.button261.UseUnderline = true;
-        this.button261.Label = Mono.Unix.Catalog.GetString("Aggiorna la lista dei file");
-        this.hbox1.Add(this.button261);
-        Gtk.Box.BoxChild w18 = ((Gtk.Box.BoxChild)(this.hbox1[this.button261]));
-        w18.Position = 0;
-        w18.Expand = false;
-        w18.Fill = false;
-        // Container child hbox1.Gtk.Box+BoxChild
-        this.button262 = new Gtk.Button();
-        this.button262.CanFocus = true;
-        this.button262.Name = "button262";
-        this.button262.UseUnderline = true;
-        this.button262.Label = Mono.Unix.Catalog.GetString("Disconnetti");
-        this.hbox1.Add(this.button262);
-        Gtk.Box.BoxChild w19 = ((Gtk.Box.BoxChild)(this.hbox1[this.button262]));
-        w19.Position = 1;
-        w19.Expand = false;
-        w19.Fill = false;
-        this.vbox4.Add(this.hbox1);
-        Gtk.Box.BoxChild w20 = ((Gtk.Box.BoxChild)(this.vbox4[this.hbox1]));
-        w20.Position = 0;
-        w20.Expand = false;
-        w20.Fill = false;
-        this.notebook1.Add(this.vbox4);
-        Gtk.Notebook.NotebookChild w21 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.vbox4]));
-        w21.Position = 2;
+        this.table2 = new Gtk.Table(((uint)(4)), ((uint)(2)), false);
+        this.table2.RowSpacing = ((uint)(6));
+        this.table2.ColumnSpacing = ((uint)(6));
+        this.table2.BorderWidth = ((uint)(5));
+        // Container child table2.Gtk.Table+TableChild
+        this.button182 = new Gtk.Button();
+        this.button182.CanFocus = true;
+        this.button182.Name = "button182";
+        this.button182.UseUnderline = true;
+        this.button182.Label = Mono.Unix.Catalog.GetString("Disconnetti");
+        this.table2.Add(this.button182);
+        Gtk.Table.TableChild w17 = ((Gtk.Table.TableChild)(this.table2[this.button182]));
+        w17.TopAttach = ((uint)(1));
+        w17.BottomAttach = ((uint)(2));
+        w17.LeftAttach = ((uint)(1));
+        w17.RightAttach = ((uint)(2));
+        w17.XOptions = ((Gtk.AttachOptions)(4));
+        w17.YOptions = ((Gtk.AttachOptions)(4));
+        // Container child table2.Gtk.Table+TableChild
+        this.button183 = new Gtk.Button();
+        this.button183.CanFocus = true;
+        this.button183.Name = "button183";
+        this.button183.UseUnderline = true;
+        this.button183.Label = Mono.Unix.Catalog.GetString("Aggiorna lista");
+        this.table2.Add(this.button183);
+        Gtk.Table.TableChild w18 = ((Gtk.Table.TableChild)(this.table2[this.button183]));
+        w18.TopAttach = ((uint)(2));
+        w18.BottomAttach = ((uint)(3));
+        w18.LeftAttach = ((uint)(1));
+        w18.RightAttach = ((uint)(2));
+        w18.XOptions = ((Gtk.AttachOptions)(4));
+        w18.YOptions = ((Gtk.AttachOptions)(4));
+        // Container child table2.Gtk.Table+TableChild
+        this.button184 = new Gtk.Button();
+        this.button184.CanFocus = true;
+        this.button184.Name = "button184";
+        this.button184.UseUnderline = true;
+        this.button184.Label = Mono.Unix.Catalog.GetString("Carica file");
+        this.table2.Add(this.button184);
+        Gtk.Table.TableChild w19 = ((Gtk.Table.TableChild)(this.table2[this.button184]));
+        w19.TopAttach = ((uint)(3));
+        w19.BottomAttach = ((uint)(4));
+        w19.LeftAttach = ((uint)(1));
+        w19.RightAttach = ((uint)(2));
+        w19.XOptions = ((Gtk.AttachOptions)(4));
+        w19.YOptions = ((Gtk.AttachOptions)(4));
+        // Container child table2.Gtk.Table+TableChild
+        this.filechooserbutton1 = new Gtk.FileChooserButton(Mono.Unix.Catalog.GetString("Seleziona un file"), ((Gtk.FileChooserAction)(0)));
+        this.filechooserbutton1.Name = "filechooserbutton1";
+        this.table2.Add(this.filechooserbutton1);
+        Gtk.Table.TableChild w20 = ((Gtk.Table.TableChild)(this.table2[this.filechooserbutton1]));
+        w20.TopAttach = ((uint)(3));
+        w20.BottomAttach = ((uint)(4));
+        w20.XOptions = ((Gtk.AttachOptions)(4));
+        w20.YOptions = ((Gtk.AttachOptions)(4));
+        // Container child table2.Gtk.Table+TableChild
+        this.label8 = new Gtk.Label();
+        this.label8.Name = "label8";
+        this.label8.LabelProp = Mono.Unix.Catalog.GetString("Il programma chiederà nuovamente utente e password quando necessario");
+        this.label8.Wrap = true;
+        this.table2.Add(this.label8);
+        Gtk.Table.TableChild w21 = ((Gtk.Table.TableChild)(this.table2[this.label8]));
+        w21.TopAttach = ((uint)(1));
+        w21.BottomAttach = ((uint)(2));
+        w21.YOptions = ((Gtk.AttachOptions)(4));
+        // Container child table2.Gtk.Table+TableChild
+        this.label9 = new Gtk.Label();
+        this.label9.Name = "label9";
+        this.label9.LabelProp = Mono.Unix.Catalog.GetString("Aggiornare la lista permette di trovare i file più recenti. Ogni volta che il programma viene avviato cerca di farlo autonomamente. La lista sul server viene aggiornata ogni ora.");
+        this.label9.Wrap = true;
+        this.table2.Add(this.label9);
+        Gtk.Table.TableChild w22 = ((Gtk.Table.TableChild)(this.table2[this.label9]));
+        w22.TopAttach = ((uint)(2));
+        w22.BottomAttach = ((uint)(3));
+        w22.YOptions = ((Gtk.AttachOptions)(4));
+        this.notebook1.Add(this.table2);
+        Gtk.Notebook.NotebookChild w23 = ((Gtk.Notebook.NotebookChild)(this.notebook1[this.table2]));
+        w23.Position = 2;
         // Notebook tab
         this.label7 = new Gtk.Label();
         this.label7.Name = "label7";
         this.label7.LabelProp = Mono.Unix.Catalog.GetString("Strumenti");
-        this.notebook1.SetTabLabel(this.vbox4, this.label7);
+        this.notebook1.SetTabLabel(this.table2, this.label7);
         this.label7.ShowAll();
         this.vbox1.Add(this.notebook1);
-        Gtk.Box.BoxChild w22 = ((Gtk.Box.BoxChild)(this.vbox1[this.notebook1]));
-        w22.Position = 1;
+        Gtk.Box.BoxChild w24 = ((Gtk.Box.BoxChild)(this.vbox1[this.notebook1]));
+        w24.Position = 0;
         // Container child vbox1.Gtk.Box+BoxChild
-        this.statusbar2 = new Gtk.Statusbar();
-        this.statusbar2.Name = "statusbar2";
-        this.statusbar2.Spacing = 6;
-        this.vbox1.Add(this.statusbar2);
-        Gtk.Box.BoxChild w23 = ((Gtk.Box.BoxChild)(this.vbox1[this.statusbar2]));
-        w23.Position = 2;
-        w23.Expand = false;
-        w23.Fill = false;
+        this.dizzystatus = new Gtk.Statusbar();
+        this.dizzystatus.Name = "dizzystatus";
+        this.dizzystatus.Spacing = 6;
+        this.vbox1.Add(this.dizzystatus);
+        Gtk.Box.BoxChild w25 = ((Gtk.Box.BoxChild)(this.vbox1[this.dizzystatus]));
+        w25.Position = 1;
+        w25.Expand = false;
+        w25.Fill = false;
         this.Add(this.vbox1);
         if ((this.Child != null)) {
             this.Child.ShowAll();
diff --git a/gtk-gui/gui.stetic b/gtk-gui/gui.stetic
index 0d942e9..71809dc 100644
--- a/gtk-gui/gui.stetic
+++ b/gtk-gui/gui.stetic
@@ -8,7 +8,7 @@
     <widget-library name="glade-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f" />
     <widget-library name="../bin/Release/Dizzy.exe" internal="true" />
   </import>
-  <widget class="Gtk.Window" id="MainWindow" design-size="474 300">
+  <widget class="Gtk.Window" id="MainWindow" design-size="555 349">
     <property name="MemberName" />
     <property name="Title" translatable="yes">Dizzy PreRelease</property>
     <property name="Icon">stock:stock_connect Menu</property>
@@ -22,22 +22,10 @@
         <property name="Spacing">6</property>
         <property name="BorderWidth">5</property>
         <child>
-          <widget class="Gtk.Label" id="label5">
-            <property name="MemberName" />
-            <property name="LabelProp" translatable="yes">Ricordati di selezionare la cartella per il download prima di iniziarne uno.</property>
-          </widget>
-          <packing>
-            <property name="Position">0</property>
-            <property name="AutoSize">False</property>
-            <property name="Expand">False</property>
-            <property name="Padding">1</property>
-          </packing>
-        </child>
-        <child>
           <widget class="Gtk.Notebook" id="notebook1">
             <property name="MemberName" />
             <property name="CanFocus">True</property>
-            <property name="CurrentPage">2</property>
+            <property name="CurrentPage">0</property>
             <child>
               <widget class="Gtk.VBox" id="vbox3">
                 <property name="MemberName" />
@@ -194,6 +182,7 @@ Libro</property>
                         <property name="MemberName" />
                         <property name="CanFocus">True</property>
                         <property name="ShowScrollbars">True</property>
+                        <property name="Reorderable">True</property>
                         <signal name="RowActivated" handler="OnRowActivated" />
                       </widget>
                     </child>
@@ -287,55 +276,146 @@ Libro</property>
               </packing>
             </child>
             <child>
-              <widget class="Gtk.VBox" id="vbox4">
+              <widget class="Gtk.Table" id="table2">
                 <property name="MemberName" />
-                <property name="Spacing">6</property>
+                <property name="NRows">4</property>
+                <property name="NColumns">2</property>
+                <property name="RowSpacing">6</property>
+                <property name="ColumnSpacing">6</property>
+                <property name="BorderWidth">5</property>
+                <child>
+                  <placeholder />
+                </child>
+                <child>
+                  <placeholder />
+                </child>
                 <child>
-                  <widget class="Gtk.HBox" id="hbox1">
+                  <widget class="Gtk.Button" id="button182">
                     <property name="MemberName" />
-                    <property name="Homogeneous">True</property>
-                    <property name="Spacing">6</property>
-                    <property name="BorderWidth">5</property>
-                    <child>
-                      <widget class="Gtk.Button" id="button261">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="Type">TextOnly</property>
-                        <property name="Label" translatable="yes">Aggiorna la lista dei file</property>
-                        <property name="UseUnderline">True</property>
-                      </widget>
-                      <packing>
-                        <property name="Position">0</property>
-                        <property name="AutoSize">True</property>
-                        <property name="Expand">False</property>
-                        <property name="Fill">False</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="Gtk.Button" id="button262">
-                        <property name="MemberName" />
-                        <property name="CanFocus">True</property>
-                        <property name="Type">TextOnly</property>
-                        <property name="Label" translatable="yes">Disconnetti</property>
-                        <property name="UseUnderline">True</property>
-                      </widget>
-                      <packing>
-                        <property name="Position">1</property>
-                        <property name="AutoSize">True</property>
-                        <property name="Expand">False</property>
-                        <property name="Fill">False</property>
-                      </packing>
-                    </child>
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Disconnetti</property>
+                    <property name="UseUnderline">True</property>
                   </widget>
                   <packing>
-                    <property name="Position">0</property>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
                     <property name="AutoSize">True</property>
-                    <property name="Expand">False</property>
-                    <property name="Fill">False</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
                   </packing>
                 </child>
                 <child>
-                  <placeholder />
+                  <widget class="Gtk.Button" id="button183">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Aggiorna lista</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">2</property>
+                    <property name="BottomAttach">3</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Button" id="button184">
+                    <property name="MemberName" />
+                    <property name="CanFocus">True</property>
+                    <property name="Type">TextOnly</property>
+                    <property name="Label" translatable="yes">Carica file</property>
+                    <property name="UseUnderline">True</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">3</property>
+                    <property name="BottomAttach">4</property>
+                    <property name="LeftAttach">1</property>
+                    <property name="RightAttach">2</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.FileChooserButton" id="filechooserbutton1">
+                    <property name="MemberName" />
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">3</property>
+                    <property name="BottomAttach">4</property>
+                    <property name="AutoSize">True</property>
+                    <property name="XOptions">Fill</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">False</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label8">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">Il programma chiederà nuovamente utente e password quando necessario</property>
+                    <property name="Wrap">True</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">1</property>
+                    <property name="BottomAttach">2</property>
+                    <property name="AutoSize">False</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">True</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="Gtk.Label" id="label9">
+                    <property name="MemberName" />
+                    <property name="LabelProp" translatable="yes">Aggiornare la lista permette di trovare i file più recenti. Ogni volta che il programma viene avviato cerca di farlo autonomamente. La lista sul server viene aggiornata ogni ora.</property>
+                    <property name="Wrap">True</property>
+                  </widget>
+                  <packing>
+                    <property name="TopAttach">2</property>
+                    <property name="BottomAttach">3</property>
+                    <property name="AutoSize">False</property>
+                    <property name="YOptions">Fill</property>
+                    <property name="XExpand">True</property>
+                    <property name="XFill">True</property>
+                    <property name="XShrink">False</property>
+                    <property name="YExpand">False</property>
+                    <property name="YFill">True</property>
+                    <property name="YShrink">False</property>
+                  </packing>
                 </child>
               </widget>
               <packing>
@@ -353,12 +433,12 @@ Libro</property>
             </child>
           </widget>
           <packing>
-            <property name="Position">1</property>
+            <property name="Position">0</property>
             <property name="AutoSize">True</property>
           </packing>
         </child>
         <child>
-          <widget class="Gtk.Statusbar" id="statusbar2">
+          <widget class="Gtk.Statusbar" id="dizzystatus">
             <property name="MemberName" />
             <property name="Spacing">6</property>
             <child>
@@ -369,7 +449,7 @@ Libro</property>
             </child>
           </widget>
           <packing>
-            <property name="Position">2</property>
+            <property name="Position">1</property>
             <property name="AutoSize">True</property>
             <property name="Expand">False</property>
             <property name="Fill">False</property>
ViewGit