[ruby-gnome2-doc-cvs] [Hiki] update - tut-gtk-calendar

Zurück zum Archiv-Index

ruby-****@sourc***** ruby-****@sourc*****
2003年 8月 19日 (火) 00:30:03 JST


-------------------------
REMOTE_ADDR = 61.26.70.211
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/ja/?tut-gtk-calendar
-------------------------
  = カレンダー
  カレンダーウィジェットは効率的に月単位に日付の情報を表示したり取得することのできるウィジェットで,生成するのも利用するのもいたって簡単である.
  
    Gtk::Calendar.new
  
  場合によってはカレンダーウィジェット内の多くの情報を変更したいかもしれない.
  そういう場合には次のメソッドを用いてカレンダーウィジェットへの変更過程がユーザの目に触れるのを防ぐことができる.
  
    Gtk::Calendar#freeze
    Gtk::Calendar#thaw
  
  Gtk::Calendar#freeze/Gtk::Calndar#thawは,他の全てのウィジェットのfreeze/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
    週の開始日を日曜(デフォルト)ではなく月曜に変更する.
  
  {{image_right "calendars1.png"}}{{br}}
  
    #! /usr/bin/env ruby
    
    require 'gtk2'
    Gtk.init
    
    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
  
  ((-どうやらGtk::Calendar#mark_dateやGtk::Calendar#get_dateは実装されていない模様.-))
  
  カレンダーウィジェットは日の選択や変更に応じて沢山のシグナルを生成する.
  シグナル名を見ればその意味は一目瞭然だろう:
  
  * month_changed
  * day_selected
  * day_selected_double_click
  * prev_month
  * next_month
  * prev_year
  * next_year
  
  {{image_right "calendars2.png"}}{{br}}
  
    =begin
      calendar.rb - Gtk::Calendar sample script.
    
      Copyright (c) 2002,2003 Ruby-GNOME2 Project Team
      This program is licenced under the same licence as Ruby-GNOME2.
    
      $Id: calendar.rb,v 1.5 2003/04/01 16:21:14 mutoh Exp $
    =end
    
    require 'gtk2'
    
    Gtk.init
    
    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
  
  
  ((*以下Ruby/GTK(1)用です。*))
  
  カレンダー用のウィジェットです。とても便利です。
  
  == 基本的な使い方
  カレンダーウィジェットとボタンウィジェットの例です。getボタンをクリックすると現在選択している年月日が標準出力に出力されます。
  
    require 'gtk'
  
    cal = Gtk::Calendar.new
    cal.select_month(1, 2000)
    cal.select_day(15)
  
    button = Gtk::Button.new("get")
    button.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
      p cal.get_date
      p cal.year
      p cal.month
      p cal.day
    end
  
    Gtk::Window.new.add(Gtk::VBox.new.add(cal).add(button)).show_all
    Gtk.main
  
  --- Gtk::Calendar.new
      カレンダウィジェットを生成します。
  
  --- Gtk::Calendar#select_month(month, year)
  --- Gtk::Calendar#mmyyyy=(month, year)
      選択状態にする月・年を指定します。
      * month - 月(1 〜 12)
      * year - 年
  
  --- Gtk::Calendar#select_day(day)
  --- Gtk::Calendar#day=(day)
      選択状態にする日を指定します。あまりエラーチェックとかは厳しくない(2/31とかも指定できてしまうがassertionが出たりする)ので注意。
      * day - 日
  
  --- Gtk::Calendar#date
  --- Gtk::Calendar#get_date
      現在選択されている日付を[year, month, day]の配列で返します。
  
  --- Gtk::Calendar#year
  --- Gtk::Calendar#month
  --- Gtk::Calendar#day
  --- Gtk::Calendar#get_year
  --- Gtk::Calendar#get_month
  --- Gtk::Calendar#get_day
      それぞれ、現在選択されている年、月、日を返します。
  
  == 表示内容を変更する
  次に、表示内容を変更します。
  
    require 'gtk'
  
    cal = Gtk::Calendar.new
    cal.display_options(Gtk::Calendar::SHOW_DAY_NAMES|Gtk::Calendar::WEEK_START_MONDAY)
  
    Gtk::Window.new.add(cal).show_all
    Gtk.main
  
  --- Gtk::Calendar#display_options(options)
      表示オプションを指定します。|(論理和)で複数指定できます。
      * 0 - カレンダ部のみ
      * Gtk::Calendar::SHOW_HEADING - ヘッダ部(一番上の"< 3 月 >   < 2002 >"の行)
      * Gtk::Calendar::SHOW_DAY_NAMES - ヘッダ部(jaの場合は月、火、水...の行)
      * Gtk::Calendar::SHOW_WEEK_NUMBERS - 1月の最初週からの週の数を表示する
      * Gtk::Calendar::WEEK_START_MONDAY - 週を月曜日から開始する
      * Gtk::Calendar::NO_MONTH_CHANGE - 年・月を変更できないようにする
  
  == 指定日をマークする
  次に指定した日をマーク(強調表示)してみます。サンプルでは、markボタンをクリックすると選択している日がマークされ、unmarkボタンをクリックすると非選択になります。また、clearボタンをクリックすると、全てのマークがクリアされます。
  
    require 'gtk'
  
    cal = Gtk::Calendar.new
  
    button1 = Gtk::Button.new("mark")
    button1.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
      cal.freeze
      cal.mark_day(cal.day)
      cal.thaw
    end
    button2 = Gtk::Button.new("unmark")
    button2.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
      cal.unmark_day(cal.day)
    end
    button3 = Gtk::Button.new("clear")
    button3.signal_connect(Gtk::Button::SIGNAL_CLICKED) do
      cal.clear_marks
    end
  
    vbox = Gtk::VBox.new
    vbox.add(cal).add(button1).add(button2).add(button3)
    Gtk::Window.new.add(vbox).show_all
    Gtk.main
  
  --- Gtk::Calendar#mark_day(day)
      指定した日をマークします。
      * day - マークする日
  
  --- Gtk::Calendar#unmark_day(day)
      指定した日のマークを解除します。
      * day - マークを解除する日
  
  --- Gtk::Calendar#clear_marks
      全てのマークを解除します。
  
  --- Gtk::Calendar#freeze
  --- Gtk::Calendar#thaw
      Gtk::Calendar#freezeからGtk::Calendar#thawの間、カレンダの再描画をフリーズします。
      再描画は非常に時間のかかる処理になりますので、それをしないことで結果的に処理を高速化できます。
      一度に大量にマークをする際などに使うと良いでしょう。
  
  == カレンダウィジェットのシグナル
  カレンダウィジェットのシグナルを説明します。
  
    require 'gtk'
  
    cal = Gtk::Calendar.new
    cal.signal_connect(Gtk::Calendar::SIGNAL_MONTH_CHANGED) do |w|
      p "SIGNAL_MONTH_CHANGED", w
    end
    cal.signal_connect(Gtk::Calendar::SIGNAL_DAY_SELECTED) do |w|
      p "SIGNAL_DAY_SELECTED", w
    end
    cal.signal_connect(Gtk::Calendar::SIGNAL_DAY_SELECTED_DOUBLE_CLICK) do |w|
      p "SIGNAL_DAY_SELECTED_DOUBLE_CLICK", w
    end
    cal.signal_connect(Gtk::Calendar::SIGNAL_PREV_MONTH) do |w|
      p "SIGNAL_PREV_MONTH", w
    end
    cal.signal_connect(Gtk::Calendar::SIGNAL_NEXT_MONTH) do |w|
      p "SIGNAL_NEXT_MONTH", w
    end
    cal.signal_connect(Gtk::Calendar::SIGNAL_PREV_YEAR) do |w|
      p "SIGNAL_PREV_YEAR", w
    end
    cal.signal_connect(Gtk::Calendar::SIGNAL_NEXT_YEAR) do |w|
      p "SIGNAL_NEXT_YEAR", w
    end
  
    Gtk::Window.new.add(cal).show_all
    Gtk.main
  
  これらのシグナルはボタンをクリックした時などに発生します。
  * Gtk::Calendar::SIGNAL_MONTH_CHANGED - 月が変わった時
  * Gtk::Calendar::SIGNAL_DAY_SELECTED - 日が選択された時
  * Gtk::Calendar::SIGNAL_DAY_SELECTED_DOUBLE_CLICK - 日が選択されてかつダブルクリックされた時
  * Gtk::Calendar::SIGNAL_PREV_MONTH - 前の月ボタンがクリックされた時
  * Gtk::Calendar::SIGNAL_NEXT_MONTH - 次の月ボタンがクリックされた時
  * Gtk::Calendar::SIGNAL_PREV_YEAR - 前の年ボタンがクリックされた時
  * Gtk::Calendar::SIGNAL_NEXT_YEAR - 次の年ボタンがクリックされた時





ruby-gnome2-cvs メーリングリストの案内
Zurück zum Archiv-Index