# Copyright (c) 2003-2005 Ruby-GNOME2 Project Team
# This program is licenced under the same licence as Ruby-GNOME2.
#
# $Id: dialog.rb,v 1.5 2005/02/12 23:02:43 kzys Exp $
=begin
= Dialog and Message Boxes

Dialog widgets are used to pop up a transient window for user feedback.
=end

require 'common'

module Demo
  class Dialog < Demo::BasicWindow
    def initialize
      @count = 1
      
      super('Dialogs')
      set_border_width(8)
      
      frame = Gtk::Frame.new('Dialogs')
      add(frame)
      
      vbox = Gtk::VBox.new(false, 8)
      vbox.set_border_width(8)
      frame.add(vbox)
      
      # Standard message dialog
      hbox = Gtk::Box.new(:horizontal, 0)
      vbox.pack_start(hbox, :expand => false, :fill => false, :padding => 0)
      button = Gtk::Button.new('_Message Dialog', true)
      button.signal_connect('clicked') do
	message_dialog_clicked
      end
      hbox.pack_start(button, :expand => false, :fill => false, :padding => 0)

      vbox.pack_start(Gtk::HSeparator.new, :expand => false, :fill => false, :padding => 0)

      # Interactive dialog
      hbox = Gtk::Box.new(:horizontal, 8)
      vbox.pack_start(hbox, :expand => false, :fill => false, :padding => 0)
      vbox2 = Gtk::VBox.new(false, 0)

      button = Gtk::Button.new('_Interactive Dialog')
      button.signal_connect('clicked') do
	interactive_dialog_clicked
      end
      hbox.pack_start(vbox2, :expand => false, :fill => false, :padding => 0)
      vbox2.pack_start(button, :expand => false, :fill => false, :padding => 0)

      table = Gtk::Table.new(2, 2, false)
      table.set_row_spacings(4)
      table.set_column_spacings(4)
      hbox.pack_start(table, :expand => false, :fill => false, :padding => 0)

      label = Gtk::Label.new('_Entry 1', true)
      table.attach_defaults(label, 0, 1, 0, 1)

      @entry1 = Gtk::Entry.new
      table.attach_defaults(@entry1, 1, 2, 0, 1)
      label.set_mnemonic_widget(@entry1)

      label = Gtk::Label.new('E_ntry 2', true)

      table.attach_defaults(label, 0, 1, 1, 2)

      @entry2 = Gtk::Entry.new
      table.attach_defaults(@entry2, 1, 2, 1, 2)
      label.set_mnemonic_widget(@entry2)
    end

    def message_dialog_clicked
      dialog = Gtk::MessageDialog.new(self,
				      Gtk::Dialog::MODAL |
				      Gtk::Dialog::DESTROY_WITH_PARENT,
				      Gtk::MessageDialog::INFO,
				      Gtk::MessageDialog::BUTTONS_OK,
				      <<EOS)
This message box has been popped up the following
number of times:

#{@count}
EOS
      dialog.run
      dialog.destroy
      @count += 1
    end

    def interactive_dialog_clicked
      dialog = Gtk::Dialog.new('Interactive Dialog',
			       self,
			       Gtk::Dialog::MODAL |
			       Gtk::Dialog::DESTROY_WITH_PARENT,
			       [Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK],
			       ["_Non-stock Button", Gtk::Dialog::RESPONSE_CANCEL]
			       )

      hbox = Gtk::Box.new(:horizontal, 0)
      hbox.set_border_width(8)
      dialog.vbox.pack_start(hbox, :expand => false, :fill => false, :padding => 0)

      stock = Gtk::Image.new(Gtk::Stock::DIALOG_QUESTION, Gtk::IconSize::DIALOG)
      hbox.pack_start(stock, :expand => false, :fill => false, :padding => 0)

      table = Gtk::Table.new(2, 2, false)
      table.set_row_spacings(4)
      table.set_column_spacings(4)
      hbox.pack_start(table, :expand => true, :fill => true, :padding => 0)
      label = Gtk::Label.new('_Entry 1', true)
      table.attach_defaults(label,
			    0, 1, 0, 1)
      local_entry1 = Gtk::Entry.new
      local_entry1.text = @entry1.text
      table.attach_defaults(local_entry1, 1, 2, 0, 1)
      label.set_mnemonic_widget(local_entry1)

      label = Gtk::Label.new('E_ntry 2', true)
      table.attach_defaults(label,
			    0, 1, 1, 2)

      local_entry2 = Gtk::Entry.new
      local_entry2.text = @entry2.text
      table.attach_defaults(local_entry2, 1, 2, 1, 2)
      label.set_mnemonic_widget(local_entry2)

      hbox.show_all
      response = dialog.run
      
      if response == Gtk::Dialog::RESPONSE_OK 
	@entry1.text = local_entry1.text
	@entry2.text = local_entry2.text
      end
      dialog.destroy
    end
  end
end

