Logo Search packages:      
Sourcecode: f-spot version File versions  Download package

ProgressDialog.cs

using GLib;
using Gtk;
using GtkSharp;
using System;

public class ProgressDialog : Gtk.Dialog {

      private bool cancelled;

      private void HandleResponse (object me, ResponseArgs args)
      {
            cancelled = true;
      }

      public enum CancelButtonType {
            Cancel,
            Stop,
            None
      };

      private CancelButtonType cancel_button_type;
      private int total_count;

      private ProgressBar progress_bar;
      public ProgressBar Bar {
            get { return progress_bar; }
      }

      private Label message_label;
      public Label Message {
            get { return message_label; }
      }

      private DateTime start_time;

      private Gtk.Button button;
      public Gtk.Button Button {
            get {
                  return button;
            }
      }

      public ProgressDialog (string title, CancelButtonType cancel_button_type, int total_count, Gtk.Window parent_window)
      {
            Title = title;
            this.cancel_button_type = cancel_button_type;
            this.total_count = total_count;

            if (parent_window != null)
                  this.TransientFor = parent_window;

            HasSeparator = false;
            BorderWidth = 6;
            SetDefaultSize (300, -1);

            message_label = new Label ("");
            VBox.PackStart (message_label, true, true, 12);

            progress_bar = new ProgressBar ();
            VBox.PackStart (progress_bar, true, true, 6);

            switch (cancel_button_type) {
            case CancelButtonType.Cancel:
                  button = (Gtk.Button)AddButton (Gtk.Stock.Cancel, (int) ResponseType.Cancel);
                  break;
            case CancelButtonType.Stop:
                  button = (Gtk.Button)AddButton (Gtk.Stock.Stop, (int) ResponseType.Cancel);
                  break;
            }

            Response += new ResponseHandler (HandleResponse);
      }

      private int current_count;

      // Return true if the operation was cancelled by the user.
      public bool Update (string message)
      {
            current_count ++;

            message_label.Text = message;
            progress_bar.Text = String.Format (Mono.Posix.Catalog.GetString ("{0} of {1}"), current_count, total_count);
            progress_bar.Fraction = (double) current_count / total_count;

            ShowAll ();

            while (Application.EventsPending ())
                  Application.RunIteration ();

            return cancelled;
      }
}

Generated by  Doxygen 1.6.0   Back to index