124 lines
3.0 KiB
Ruby
124 lines
3.0 KiB
Ruby
|
#!/usr/bin/env ruby
|
||
|
=begin
|
||
|
status_icon.rb - Gtk::StatusIcon sample.
|
||
|
|
||
|
This sample refers gtk/tests/teststatusicon.c of GTK+-2.10.x.
|
||
|
|
||
|
Copyright (c) 2006 Ruby-GNOME2 Project Team
|
||
|
This program is licenced under the same licence as Ruby-GNOME2.
|
||
|
|
||
|
$Id: statusicon.rb,v 1.1 2006/11/17 18:12:41 mutoh Exp $
|
||
|
=end
|
||
|
|
||
|
require 'gtk2'
|
||
|
|
||
|
if str = Gtk.check_version(2, 10, 0)
|
||
|
puts "This sample requires GTK+ 2.10.0 or later"
|
||
|
puts str
|
||
|
exit
|
||
|
end
|
||
|
|
||
|
class StatusIconSample < Gtk::StatusIcon
|
||
|
STATUS_INFO = 0
|
||
|
STATUS_QUESTION = 1
|
||
|
|
||
|
def initialize
|
||
|
super
|
||
|
@status = STATUS_INFO
|
||
|
update_icon
|
||
|
|
||
|
set_blinking(true)
|
||
|
signal_connect("activate"){
|
||
|
icon_activated
|
||
|
}
|
||
|
signal_connect("popup-menu"){|w, button, activate_time|
|
||
|
menu = Gtk::Menu.new
|
||
|
checkmenuitem = Gtk::CheckMenuItem.new("Blink")
|
||
|
checkmenuitem.active = blinking?
|
||
|
checkmenuitem.signal_connect("activate"){|w|
|
||
|
set_blinking(w.active?)
|
||
|
}
|
||
|
menu.append(checkmenuitem)
|
||
|
|
||
|
menuitem = Gtk::MenuItem.new("Quit")
|
||
|
menuitem.signal_connect("activate"){
|
||
|
set_visible(false)
|
||
|
Gtk.main_quit
|
||
|
}
|
||
|
menu.append(menuitem)
|
||
|
menu.show_all
|
||
|
menu.popup(nil, nil, button, activate_time)
|
||
|
}
|
||
|
|
||
|
timeout_func
|
||
|
end
|
||
|
|
||
|
def update_icon
|
||
|
if @status == STATUS_INFO
|
||
|
set_icon_name(Gtk::Stock::DIALOG_INFO)
|
||
|
set_tooltip("Some Information ...")
|
||
|
else
|
||
|
set_icon_name(Gtk::Stock::DIALOG_QUESTION)
|
||
|
set_tooltip("Some Question ...")
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def timeout_func
|
||
|
GLib::Timeout.add(2000) {
|
||
|
if @status == STATUS_INFO
|
||
|
@status = STATUS_QUESTION
|
||
|
else
|
||
|
@status = STATUS_INFO
|
||
|
end
|
||
|
update_icon
|
||
|
true
|
||
|
}
|
||
|
end
|
||
|
|
||
|
def icon_activated
|
||
|
unless @dialog
|
||
|
@dialog = Gtk::MessageDialog.new(nil, 0,
|
||
|
Gtk::MessageDialog::QUESTION,
|
||
|
Gtk::MessageDialog::BUTTONS_CLOSE,
|
||
|
"You wanna test the status icon?")
|
||
|
@dialog.window_position = Gtk::Window::POS_CENTER
|
||
|
|
||
|
@dialog.signal_connect("response"){ @dialog.hide }
|
||
|
@dialog.signal_connect("delete_event"){ @dialog.hide_on_delete }
|
||
|
|
||
|
toggle = Gtk::ToggleButton.new("_Show the icon")
|
||
|
@dialog.vbox.pack_end(toggle, true, true, 6)
|
||
|
toggle.active = visible?
|
||
|
toggle.signal_connect("toggled"){|w|
|
||
|
set_visible(w.active?)
|
||
|
}
|
||
|
|
||
|
toggle = Gtk::ToggleButton.new("_Blink the icon")
|
||
|
@dialog.vbox.pack_end(toggle, true, true, 6)
|
||
|
toggle.active = blinking?
|
||
|
toggle.signal_connect("toggled"){|w|
|
||
|
set_blinking(w.active?)
|
||
|
}
|
||
|
|
||
|
toggle = Gtk::ToggleButton.new("_Change the icon")
|
||
|
@dialog.vbox.pack_end(toggle, true, true, 6)
|
||
|
toggle.active = (@timeout != 0)
|
||
|
toggle.signal_connect("toggled"){
|
||
|
if @timeout and @timeout > 0
|
||
|
GLib::Source.remove(@timeout)
|
||
|
@timeout = 0
|
||
|
else
|
||
|
@timeout = timeout_func
|
||
|
end
|
||
|
}
|
||
|
end
|
||
|
@dialog.show_all
|
||
|
@dialog.present
|
||
|
end
|
||
|
|
||
|
end
|
||
|
|
||
|
StatusIconSample.new
|
||
|
|
||
|
Gtk.main
|