Changeset 29474 for lang/ruby/ruwin

Show
Ignore:
Timestamp:
02/03/09 16:32:44 (6 years ago)
Author:
isaisstillalive
Message:
  • PopupMenuでセパレータを作成できるようにした。
Location:
lang/ruby/ruwin
Files:
4 modified

Legend:

Unmodified
Added
Removed
  • lang/ruby/ruwin/lib/ruwin/const.rb

    r29332 r29474  
    430430      PBM_SETBKCOLOR  = 0x2001 
    431431    end 
     432     
     433    module Menu 
     434      MF_SEPARATOR = 0x0800 
     435    end 
    432436  end 
    433437   
  • lang/ruby/ruwin/lib/ruwin/popup_menu.rb

    r29420 r29474  
    11module Ruwin 
    22  class PopupMenu 
     3    include Const::Menu 
     4     
    35    TrackPopupMenu = Win32API.new "USER32.DLL", "TrackPopupMenu", %w{L L I I I I P}, "I" 
    46     
     
    68      @menu = Ruwin::Factory.newpopup 
    79      self.class.items.each_with_index do |item, index| 
    8         @menu.append item, index 
     10        if item 
     11          @menu.append item, index 
     12        else 
     13          @menu.append "", index, MF_SEPARATOR 
     14        end 
    915      end 
    1016      @window = window 
     
    4248      end 
    4349       
     50      def separator 
     51        @items << nil 
     52        @actions << nil 
     53      end 
     54       
    4455      def inherited klass 
    4556        klass.instance_variable_set :@items, [] 
  • lang/ruby/ruwin/sample/sample_popup_menu.rb

    r29257 r29474  
    2323      button.caption = "Selected Item2" 
    2424    end 
     25     
     26    separator 
     27     
     28    item "Item3" do 
     29      button.caption = "Selected Item3" 
     30    end 
    2531  end 
    2632   
  • lang/ruby/ruwin/test/ruwin/test_popup_menu.rb

    r29422 r29474  
    33 
    44class TestRuwinPopupMenu < Test::Unit::TestCase 
     5  include Ruwin::Const::Menu 
     6   
    57  def setup 
    68    @klass = Class.new(Ruwin::PopupMenu) 
     
    3638  def test_item_class_method_should_convert_caption_utf8_to_sjis 
    3739    klass = Class.new(Ruwin::PopupMenu) 
    38     klass.class_eval "item(\"アイテム\"){}" 
     40    klass.class_eval 'item("アイテム"){}' 
    3941    assert_equal NKF.nkf("-Ws", "アイテム"), klass.items[0] 
    4042  end 
     
    4648  end 
    4749   
     50  def test_separator_class_method_should_append_nil_named_item 
     51    klass = Class.new(Ruwin::PopupMenu) 
     52    klass.class_eval 'item("text1"){ [self, :item1] }' 
     53    klass.class_eval 'separator' 
     54    klass.class_eval 'item("text2"){ [self, :item2] }' 
     55    assert_equal 3, klass.items.size 
     56    assert_equal "text1", klass.items[0] 
     57    assert_nil            klass.items[1] 
     58    assert_equal "text2", klass.items[2] 
     59  end 
     60   
     61  def test_separator_class_method_should_append_nil_action 
     62    klass = Class.new(Ruwin::PopupMenu) 
     63    klass.class_eval 'item("text1"){ [self, :item1] }' 
     64    klass.class_eval 'separator' 
     65    klass.class_eval 'item("text2"){ [self, :item2] }' 
     66    assert_equal 3, klass.items.size 
     67    assert_equal [klass, :item1], klass.actions[0].call 
     68    assert_nil                    klass.actions[1] 
     69    assert_equal [klass, :item2], klass.actions[2].call 
     70  end 
     71   
    4872   
    4973  def test_initialize_should_call_newpopup 
     
    5175    assert_instance_of SWin::Menu, @instance.instance_variable_get(:@menu) 
    5276    assert_equal       2,          @instance.instance_variable_get(:@menu).count 
     77  end 
     78   
     79  def test_initialize_should_create_separator 
     80    klass = Class.new(Ruwin::PopupMenu) 
     81    klass.class_eval 'item("text1"){ [self, :item1] }' 
     82    klass.class_eval 'separator' 
     83    klass.class_eval 'item("text2"){ [self, :item2] }' 
     84    instance = klass.new @window 
     85    assert_equal 3, instance.instance_variable_get(:@menu).count 
     86    assert_equal MF_SEPARATOR, (instance.instance_variable_get(:@menu).getState(1)&MF_SEPARATOR) 
    5387  end 
    5488