新規作成  編集  Ruby-GNOME2 Project Website  ページ一覧  検索  更新履歴  編集履歴  RSS  ログイン

gtk2-tut-calendar

カレンダー

カレンダーウィジェットは効率的に月単位に日付の情報を表示したり取得することのできるウィジェットで,生成するのも利用するのもいたって簡単である.

Gtk::Calendar.new

場合によってはカレンダーウィジェット内の多くの情報を変更したいかもしれない. そういう場合には次のメソッドを用いてカレンダーウィジェットへの変更過程がユーザの目に触れるのを防ぐことができる.

Gtk::Calendar#freeze  #外観の更新停止
Gtk::Calendar#thaw    #外観の更新再開

Gtk::Calendar#freeze / Gtk::Calendar#thawは,他の全てのウィジェットのfreeze/thawメソッドと同様に動作する.

Gtk::Calendar#display_options(flags)

flags引数には次の5つのオプションの論理和を指定する:

Gtk::Calendar::SHOW_HEADING
月と年を表示する.
Gtk::Calendar::SHOW_DAY_NAMES
曜日を表示する.(localeによって"月","火"… や "Mon","Thu"…など)
Gtk::Calendar::NO_MONTH_CHANGE
ユーザが表示月を変更することを禁止する.例えば,ある年の全ての月を12個のカレンダーウィジェットで表示したい場合などに有効である.
Gtk::Calendar::SHOW_WEEK_NUMBERS
カレンダーの左側に週番号を表示する.(1月1日は第1週,12月31日は第52週)
Gtk::Calendar::WEEK_START_MONDAY
週の開始日を日曜(デフォルト)ではなく月曜に変更する.

calendars1.png

#! /usr/bin/env ruby

require 'gtk2'

window = Gtk::Window.new
window.signal_connect("delete_event") {Gtk.main_quit}
hbox = Gtk::HBox.new(false, 10)
window.add(hbox)

flag = 0
[
	Gtk::Calendar::SHOW_HEADING,
	Gtk::Calendar::SHOW_DAY_NAMES,
	Gtk::Calendar::NO_MONTH_CHANGE,
	Gtk::Calendar::SHOW_WEEK_NUMBERS,
	Gtk::Calendar::WEEK_START_MONDAY,
].each do |f|
	c = Gtk::Calendar.new
	flag |= f
	c.display_options(flag)
	hbox.pack_start(c, true, true, 0)
end
window.show_all
Gtk.main

次のメソッドで表示月/日を変更することができる:

Gtk::Calendar#select_month(month, year)
Gtk::Calendar#select_day(day)

Gtk::Calendar#select_monthは,月の選択が成功したかどうかを1(成功)/0(失敗)で返す.

Gtk::Calendar#select_dayで現在表示中の月の指定した日を(もし可能なら)選択状態にすることができる. 逆に非選択状態にするにはday引数に0を指定すればよい.

カレンダーウィジェットは,日を選択状態にするだけでなく,複数の日を「マーク」することもできる. マークされた日はハイライト表示される. 次のメソッドは日のマークに関するメソッドである:

Gtk::Calendar#mark_day(day)
Gtk::Calendar#unmark_day(day)
Gtk::Calendar#clear_marks

カレンダーウィジェットは日の選択や変更に応じて沢山のシグナルを生成する. シグナル名を見ればその意味は一目瞭然だろう:

  • month_changed
  • day_selected
  • day_selected_double_click
  • prev_month
  • next_month
  • prev_year
  • next_year

calendars2.png

require 'gtk2'

cal = Gtk::Calendar.new
w = Gtk::Window.new
w.add(cal).show_all.signal_connect('delete_event') do
  Gtk::main_quit
end

date = Time.new

cal.select_month(date.month, date.year)
cal.select_day(date.day)
cal.mark_day(date.day)
#cal.clear_marks
cal.display_options(Gtk::Calendar::SHOW_HEADING |
		    Gtk::Calendar::SHOW_DAY_NAMES |
		    Gtk::Calendar::NO_MONTH_CHANGE |
		    Gtk::Calendar::SHOW_WEEK_NUMBERS |
		    Gtk::Calendar::WEEK_START_MONDAY)
year, month, day = cal.date
puts "this is #{month} #{day}, #{year}"

cal.signal_connect('day_selected') do
  year, month, day = cal.date
  puts "selected day: #{day}"
end
cal.signal_connect('month_changed') do
  year, month, day = cal.date
  puts "changed month: #{month}"
end
cal.signal_connect('day_selected_double_click') do
  year, month, day = cal.date
  puts "dclicked day: #{day}"
end
cal.signal_connect('prev_month') do
  year, month, day = cal.date
  puts "prev month: #{month}"
end
cal.signal_connect('next_month') do
  year, month, day = cal.date
  puts "next_month: #{month}"
end
cal.signal_connect('prev_year') do
  year, month, day = cal.date
  puts "prev_year: #{year}"
end
cal.signal_connect('next_year') do
  year, month, day = cal.date
  puts "next year: #{year}"
end

Gtk::main
更新日時:2006/07/02 14:35:45
キーワード:
参照:[gtk2-tut]