class Dumon::GtkProfileDlg

This class represents an user interface for profile management based on Gtk library.

Public Class Methods

new() click to toggle source

Constructor.

Calls superclass method Dumon::ProfileDlg::new
# File lib/dumon/profile.rb, line 51
def initialize
  super

  # create the dialog
  @dialog = Gtk::Dialog.new('Profile management', nil, Gtk::Dialog::MODAL, [Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_REJECT])
  t = Gtk::Table.new(2, 2)
  t.row_spacings = 5
  t.column_spacings = 5

  # disable entry/button if no mode set (probably after start of Dumon)
  entry_store = Gtk::Entry.new
  btn_save = Gtk::Button.new(Gtk::Stock::SAVE)
  if Dumon::App.instance.current_profile.nil?
    entry_store.text = '<make a choice first>'
    entry_store.set_sensitive false
    btn_save.set_sensitive false
  end

  # save new profile
  btn_save.signal_connect('clicked') do
    if entry_store.text.size > 0
      @dumon_conf[:profiles][entry_store.text] = Dumon::App.instance.current_profile
      Dumon::App.instance.write_config(@dumon_conf)
      Dumon::logger.debug "Stored profile, name=#{entry_store.text}"
      @dialog.destroy
    end
  end

  t.attach(Gtk::HBox.new(false, 5).pack_start(Gtk::Label.new('Profile name:'), false, false).add(entry_store), 0, 1, 0, 1)
  t.attach(btn_save, 1, 2, 0, 1)

  # select/delete existing profile
  model = Gtk::ListStore.new(String)
  treeview = Gtk::TreeView.new(model)
  treeview.headers_visible = false
  renderer = Gtk::CellRendererText.new
  column = Gtk::TreeViewColumn.new('', renderer, :text => 0)
  treeview.append_column(column)

  @dumon_conf[:profiles].keys.each do |k|
    iter = model.append
    iter.set_value 0, k.to_s
  end

  # apply
  btn_apply = Gtk::Button.new(Gtk::Stock::APPLY)
  btn_apply.signal_connect('clicked') do
    selection = treeview.selection
    if iter = selection.selected
      apply_profile(iter[0])
      @dialog.destroy
    end
  end
  # double-click on treeview
  treeview.signal_connect("row-activated") do |view, path|
    if iter = view.model.get_iter(path)
      apply_profile(iter[0])
      @dialog.destroy
    end
  end
  # delete
  btn_delete = Gtk::Button.new(Gtk::Stock::DELETE)
  btn_delete.signal_connect('clicked') do
    selection = treeview.selection
    if iter = selection.selected
      prof_name = iter[0]
      @dumon_conf[:profiles].delete prof_name.to_sym
      Dumon::App.instance.write_config(@dumon_conf)
      Dumon::logger.debug "Deleted profile, name=#{prof_name}"
      @dialog.destroy
    end
  end

  t.attach(treeview, 0, 1, 1, 2)
  t.attach(Gtk::VBox.new(false, 5).pack_start(btn_apply, false, false).pack_start(btn_delete, false, false), 1, 2, 1, 2)

  @dialog.vbox.add t

  # ensure that the dialog box is destroyed when the user responds
  @dialog.signal_connect('response') do |w, code|
    if Gtk::Dialog::RESPONSE_OK.eql?(code) and entry.text.size > 0
      Dumon::App.instance.write(entry.text => Dumon::App.instance.current_profile)
    end

    @dialog.destroy
  end
end