wxruby 1.9.9-universal-darwin-9 → 1.9.10-universal-darwin-9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/wx/classes/bitmap.rb +29 -1
- data/lib/wx/classes/clipboard.rb +19 -3
- data/lib/wx/classes/colour.rb +6 -4
- data/lib/wx/classes/data_object.rb +14 -0
- data/lib/wx/classes/data_object_simple.rb +6 -0
- data/lib/wx/classes/dataformat.rb +23 -0
- data/lib/wx/classes/evthandler.rb +31 -4
- data/lib/wx/classes/genericdirctrl.rb +36 -0
- data/lib/wx/classes/grid.rb +8 -0
- data/lib/wx/classes/hboxsizer.rb +6 -0
- data/lib/wx/classes/icon.rb +12 -1
- data/lib/wx/classes/image.rb +13 -1
- data/lib/wx/classes/listctrl.rb +12 -0
- data/lib/wx/classes/point.rb +8 -0
- data/lib/wx/classes/rect.rb +10 -1
- data/lib/wx/classes/richtextctrl.rb +22 -0
- data/lib/wx/classes/size.rb +9 -0
- data/lib/wx/classes/sizer.rb +18 -3
- data/lib/wx/classes/toolbar.rb +4 -6
- data/lib/wx/classes/vboxsizer.rb +6 -0
- data/lib/wx/classes/window.rb +7 -0
- data/lib/wx/classes/xmlresource.rb +17 -0
- data/lib/wx/helpers.rb +16 -1
- data/lib/wx/keyword_ctors.rb +3 -2
- data/lib/wx/keyword_defs.rb +27 -5
- data/lib/wx/version.rb +1 -1
- data/lib/wxruby2.bundle +0 -0
- data/samples/bigdemo/About.rbw +1 -1
- data/samples/bigdemo/wxCheckListBox.rbw +40 -50
- data/samples/bigdemo/wxListCtrl_virtual.rbw +8 -3
- data/samples/bigdemo/wxSashWindow.rbw +2 -2
- data/samples/bigdemo/wxTreeCtrl.rbw +4 -3
- data/samples/calendar/calendar.rb +143 -158
- data/samples/dialogs/dialogs.rb +74 -0
- data/samples/etc/toolbar_sizer_additem.rb +55 -0
- data/samples/event/update_ui_event.rb +70 -0
- data/samples/grid/gridtablebase.rb +43 -29
- data/samples/mdi/mdi.rb +22 -14
- data/samples/minimal/minimal.rb +3 -3
- data/samples/text/format-text-bold.png +0 -0
- data/samples/text/format-text-italic.png +0 -0
- data/samples/text/format-text-underline.png +0 -0
- data/samples/text/rich_textctrl.rb +98 -0
- data/samples/text/textctrl.rb +0 -2
- data/samples/treectrl/treectrl.rb +10 -18
- data/samples/xrc/xrc_sample.rb +48 -68
- metadata +15 -3
    
        data/lib/wx/classes/sizer.rb
    CHANGED
    
    | @@ -11,12 +11,27 @@ class Wx::Sizer | |
| 11 11 | 
             
              def add_item(item, *mixed_args)
         | 
| 12 12 | 
             
                args = Wx::args_as_list(ADD_ITEM_PARAMS, *mixed_args)
         | 
| 13 13 |  | 
| 14 | 
            -
                 | 
| 14 | 
            +
                full_args = []
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                # extract the width and the height in the case of a spacer
         | 
| 17 | 
            +
                # defined as an array
         | 
| 18 | 
            +
                if item.kind_of?(Array)
         | 
| 19 | 
            +
                  Kernel.raise ArgumentError,
         | 
| 20 | 
            +
                    "Invalid Sizer specification : [width, height] expected" if item.size != 2
         | 
| 21 | 
            +
                  full_args << item[0] << item[1]
         | 
| 22 | 
            +
                else
         | 
| 23 | 
            +
                  full_args << item
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                # update the full arguments list with the optional arguments (except index)
         | 
| 15 27 | 
             
                idx = args.shift
         | 
| 28 | 
            +
                full_args.concat(args)
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                # Call add to append if default position
         | 
| 16 31 | 
             
                if idx == -1
         | 
| 17 | 
            -
                  add( | 
| 32 | 
            +
                  add(*full_args)
         | 
| 18 33 | 
             
                else
         | 
| 19 | 
            -
                  insert(idx,  | 
| 34 | 
            +
                  insert(idx, *full_args)
         | 
| 20 35 | 
             
                end
         | 
| 21 36 | 
             
              end
         | 
| 22 37 | 
             
            end
         | 
    
        data/lib/wx/classes/toolbar.rb
    CHANGED
    
    | @@ -5,21 +5,19 @@ class Wx::ToolBar | |
| 5 5 | 
             
              ADD_ITEM_PARAMS = [ Wx::Parameter[ :position, -1 ], 
         | 
| 6 6 | 
             
                                  Wx::Parameter[ :id, -1 ],
         | 
| 7 7 | 
             
                                  Wx::Parameter[ :label, "" ], 
         | 
| 8 | 
            -
                                  Wx::Parameter[ :bitmap, Wx::NULL_BITMAP ],
         | 
| 9 8 | 
             
                                  Wx::Parameter[ :bitmap2, Wx::NULL_BITMAP ],
         | 
| 10 9 | 
             
                                  Wx::Parameter[ :kind, Wx::ITEM_NORMAL ], 
         | 
| 11 10 | 
             
                                  Wx::Parameter[ :short_help, "" ], 
         | 
| 12 11 | 
             
                                  Wx::Parameter[ :long_help, "" ], 
         | 
| 13 12 | 
             
                                  Wx::Parameter[ :client_data, nil ] ]
         | 
| 14 13 |  | 
| 15 | 
            -
              def add_item(*mixed_args)
         | 
| 14 | 
            +
              def add_item(bitmap, *mixed_args)
         | 
| 16 15 | 
             
                args = Wx::args_as_list(ADD_ITEM_PARAMS, *mixed_args)
         | 
| 17 | 
            -
                if args[3] == Wx::NULL_BITMAP
         | 
| 18 | 
            -
                  Kernel.raise ArgumentError, "Main button bitmap may not be NULL"
         | 
| 19 | 
            -
                end
         | 
| 20 16 |  | 
| 21 | 
            -
                # Call add_tool to append if default position
         | 
| 22 17 | 
             
                pos = args.shift
         | 
| 18 | 
            +
                args.insert(2, bitmap)
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                # Call add_tool to append if default position
         | 
| 23 21 | 
             
                if pos == -1
         | 
| 24 22 | 
             
                  add_tool(*args)
         | 
| 25 23 | 
             
                else
         | 
    
        data/lib/wx/classes/window.rb
    CHANGED
    
    | @@ -11,6 +11,13 @@ class Wx::Window | |
| 11 11 | 
             
              # In case a more explicit option is preferred.
         | 
| 12 12 | 
             
              alias :wx_id :get_id
         | 
| 13 13 |  | 
| 14 | 
            +
              # The name of Wx::Window#raise conflicts with Ruby's core Kernel#raise
         | 
| 15 | 
            +
              # method. This can cause unexpected errors when undecorated #raise is
         | 
| 16 | 
            +
              # used inside a Window method. For wxRuby 2.0 it's too late to remove
         | 
| 17 | 
            +
              # Window#raise completely, but for now, offer alternatives to
         | 
| 18 | 
            +
              # raise/lower that could replace them in future versions.
         | 
| 19 | 
            +
              alias :bring_to_front :raise
         | 
| 20 | 
            +
              alias :send_to_back :lower
         | 
| 14 21 |  | 
| 15 22 | 
             
              # Recursively searches all windows below +self+ and returns the first
         | 
| 16 23 | 
             
              # window which has the id +an_id+. This corresponds to the find_window
         | 
| @@ -34,4 +34,21 @@ class Wx::XmlResource | |
| 34 34 | 
             
                end
         | 
| 35 35 | 
             
                fname
         | 
| 36 36 | 
             
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              # Returns a Wx::Wizard object from the element named +name+ in the
         | 
| 39 | 
            +
              # loaded XRC file. The Wizard will have the parent +parent+.
         | 
| 40 | 
            +
              # 
         | 
| 41 | 
            +
              # This method is not available in wxWidgets, but is here for
         | 
| 42 | 
            +
              # completeness and also to document how to use load_object (see
         | 
| 43 | 
            +
              # below).
         | 
| 44 | 
            +
              def load_wizard(parent, name)
         | 
| 45 | 
            +
                wiz = Wx::Wizard.new()
         | 
| 46 | 
            +
                load_wizard_subclass(wiz, parent, name)
         | 
| 47 | 
            +
                wiz
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              # Completes the loading of a incomplete instance of Wx::Wizard.
         | 
| 51 | 
            +
              def load_wizard_subclass(wizard, parent, name)
         | 
| 52 | 
            +
                load_object(wizard, parent, name, "wxWizard")
         | 
| 53 | 
            +
              end
         | 
| 37 54 | 
             
            end
         | 
    
        data/lib/wx/helpers.rb
    CHANGED
    
    | @@ -8,7 +8,6 @@ module Wx | |
| 8 8 | 
             
              # structs containing the keyword name and default value for each
         | 
| 9 9 | 
             
              # possible argument. +mixed_args+ is an array which may optionally end
         | 
| 10 10 | 
             
              # with a set of named arguments
         | 
| 11 | 
            -
             | 
| 12 11 | 
             
              def self.args_as_list(param_spec, *mixed_args)
         | 
| 13 12 | 
             
                # get keyword arguments from mixed args if supplied, else empty
         | 
| 14 13 | 
             
                kwa = mixed_args.last.kind_of?(Hash) ? mixed_args.pop : {}
         | 
| @@ -27,4 +26,20 @@ module Wx | |
| 27 26 | 
             
                Kernel.raise ArgumentError, 
         | 
| 28 27 | 
             
                             "Bad arg composition of #{mixed_args.inspect}"
         | 
| 29 28 | 
             
              end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              # Given an integer constant +int_const+, returns an array Wx constant
         | 
| 31 | 
            +
              # names which have this value. If a string +prefix+ is supplied, find
         | 
| 32 | 
            +
              # only constants whose names begin with this prefix. For example,
         | 
| 33 | 
            +
              # passing "EVT" would return only constants with a name like
         | 
| 34 | 
            +
              # Wx::EVT_XXX
         | 
| 35 | 
            +
              # 
         | 
| 36 | 
            +
              # This is primarily useful for debugging, when an unknown constant is
         | 
| 37 | 
            +
              # returned, eg as an event type id.
         | 
| 38 | 
            +
              def self.find_const(sought, prefix = "")
         | 
| 39 | 
            +
                consts = constants.grep(/\A#{prefix}/)
         | 
| 40 | 
            +
                consts.find_all do | c | 
         | 
| 41 | 
            +
                  c_val = const_get(c)
         | 
| 42 | 
            +
                  c_val.instance_of?(Fixnum) and c_val == sought
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 30 45 | 
             
            end
         | 
    
        data/lib/wx/keyword_ctors.rb
    CHANGED
    
    | @@ -122,8 +122,9 @@ module Wx | |
| 122 122 | 
             
                  # API constructor
         | 
| 123 123 | 
             
                  def wx_ctor_params(*params)
         | 
| 124 124 | 
             
                    self.param_spec += params.map do | param |
         | 
| 125 | 
            -
                      param.kind_of?(Hash) ?  | 
| 126 | 
            -
                        Parameter[param,  | 
| 125 | 
            +
                      param.kind_of?(Hash) ? 
         | 
| 126 | 
            +
                        Parameter[ param.keys.first, param.values.first ] : 
         | 
| 127 | 
            +
                        Parameter[ param, STANDARD_DEFAULTS[param] ]
         | 
| 127 128 | 
             
                    end
         | 
| 128 129 | 
             
                  end
         | 
| 129 130 |  | 
    
        data/lib/wx/keyword_defs.rb
    CHANGED
    
    | @@ -156,19 +156,29 @@ Wx::define_keyword_ctors('ToolBarTool') do | |
| 156 156 | 
             
              wx_ctor_params :long_help => ''
         | 
| 157 157 | 
             
            end
         | 
| 158 158 |  | 
| 159 | 
            +
            # Similar to notebook but using choice control
         | 
| 160 | 
            +
            Wx::define_keyword_ctors('Choicebook') do
         | 
| 161 | 
            +
              wx_ctor_params :id, :pos, :size, :style, :name => 'choiceBook'
         | 
| 162 | 
            +
            end
         | 
| 163 | 
            +
             | 
| 159 164 | 
             
            # Notebook class
         | 
| 160 165 | 
             
            Wx::define_keyword_ctors('Notebook') do
         | 
| 161 166 | 
             
              wx_ctor_params :id, :pos, :size, :style, :name => 'noteBook' 
         | 
| 162 167 | 
             
            end
         | 
| 163 168 |  | 
| 164 | 
            -
            # Similar to notebook but using list control | 
| 169 | 
            +
            # Similar to notebook but using list control
         | 
| 165 170 | 
             
            Wx::define_keyword_ctors('Listbook') do
         | 
| 166 171 | 
             
              wx_ctor_params :id, :pos, :size, :style, :name => 'listBook'
         | 
| 167 172 | 
             
            end
         | 
| 168 173 |  | 
| 169 | 
            -
            # Similar to notebook but using  | 
| 170 | 
            -
            Wx::define_keyword_ctors(' | 
| 171 | 
            -
              wx_ctor_params :id, :pos, :size, :style, :name => ' | 
| 174 | 
            +
            # Similar to notebook but using toolbar
         | 
| 175 | 
            +
            Wx::define_keyword_ctors('Toolbook') do
         | 
| 176 | 
            +
              wx_ctor_params :id, :pos, :size, :style, :name => 'toolBook'
         | 
| 177 | 
            +
            end
         | 
| 178 | 
            +
             | 
| 179 | 
            +
            # Similar to notebook but using tree control
         | 
| 180 | 
            +
            Wx::define_keyword_ctors('Treebook') do
         | 
| 181 | 
            +
              wx_ctor_params :id, :pos, :size, :style, :name => 'treeBook'
         | 
| 172 182 | 
             
            end
         | 
| 173 183 |  | 
| 174 184 | 
             
            # wxSashWindow:	Window with four optional sashes that can be dragged
         | 
| @@ -268,7 +278,6 @@ Wx::define_keyword_ctors('PrintDialog') do | |
| 268 278 | 
             
              wx_ctor_params :data
         | 
| 269 279 | 
             
            end
         | 
| 270 280 |  | 
| 271 | 
            -
             | 
| 272 281 | 
             
            # Simple message box dialog
         | 
| 273 282 | 
             
            Wx::define_keyword_ctors('MessageDialog') do
         | 
| 274 283 | 
             
              wx_ctor_params :message => ''
         | 
| @@ -277,6 +286,13 @@ Wx::define_keyword_ctors('MessageDialog') do | |
| 277 286 | 
             
              wx_ctor_params :pos
         | 
| 278 287 | 
             
            end
         | 
| 279 288 |  | 
| 289 | 
            +
            # Property editing dialog
         | 
| 290 | 
            +
            Wx::define_keyword_ctors('PropertySheetDialog') do
         | 
| 291 | 
            +
              wx_ctor_params :id, :title
         | 
| 292 | 
            +
              wx_ctor_params :pos, :size, :style => Wx::DEFAULT_DIALOG_STYLE
         | 
| 293 | 
            +
              wx_ctor_params :name => 'propertySheetDialog'
         | 
| 294 | 
            +
            end
         | 
| 295 | 
            +
             | 
| 280 296 | 
             
            ### CONTROLS
         | 
| 281 297 |  | 
| 282 298 | 
             
            # Push button control, displaying text
         | 
| @@ -517,6 +533,11 @@ Wx::define_keyword_ctors('HtmlListBox') do | |
| 517 533 | 
             
              wx_ctor_params :id, :pos, :size, :style, :name => 'HtmlListBoxNameStr'
         | 
| 518 534 | 
             
            end
         | 
| 519 535 |  | 
| 536 | 
            +
            Wx::define_keyword_ctors('DatePickerCtrl') do
         | 
| 537 | 
            +
              wx_ctor_params :id, :dt => Time.now
         | 
| 538 | 
            +
              wx_ctor_params :pos, :size, :style, :validator, :name => 'dateCtrl'
         | 
| 539 | 
            +
            end
         | 
| 540 | 
            +
             | 
| 520 541 | 
             
            Wx::define_keyword_ctors('RichTextCtrl') do
         | 
| 521 542 | 
             
              wx_ctor_params :id, :value => ''
         | 
| 522 543 | 
             
              wx_ctor_params :pos, :size, :style => Wx::TE_MULTILINE
         | 
| @@ -531,6 +552,7 @@ Wx::define_keyword_ctors('RichTextStyleListCtrl') do | |
| 531 552 | 
             
              wx_ctor_params :id, :pos, :size, :style
         | 
| 532 553 | 
             
            end
         | 
| 533 554 |  | 
| 555 | 
            +
             | 
| 534 556 | 
             
            # FIXME - SymbolPickerDialog is hard to because the parent argument is
         | 
| 535 557 | 
             
            # in a strange place.
         | 
| 536 558 |  | 
    
        data/lib/wx/version.rb
    CHANGED
    
    
    
        data/lib/wxruby2.bundle
    CHANGED
    
    | Binary file | 
    
        data/samples/bigdemo/About.rbw
    CHANGED
    
    | @@ -10,7 +10,7 @@ class MyAboutBox < Wx::Dialog | |
| 10 10 | 
             
                    title = Wx::StaticText.new(self, -1, "WxRuby Demo!", Wx::Point.new(20, 20))
         | 
| 11 11 | 
             
                    title.set_font(headerFont)
         | 
| 12 12 |  | 
| 13 | 
            -
                    rVersion = Wx::StaticText.new(self, -1, "Running on Ruby version " +  | 
| 13 | 
            +
                    rVersion = Wx::StaticText.new(self, -1, "Running on Ruby version " + RUBY_VERSION + " on " + RUBY_PLATFORM, Wx::Point.new(20,100))
         | 
| 14 14 | 
             
                    rVersion.set_font(bodyFont)
         | 
| 15 15 | 
             
                    rVersion.set_foreground_colour(Wx::RED)
         | 
| 16 16 |  | 
| @@ -10,62 +10,52 @@ require 'wx' | |
| 10 10 |  | 
| 11 11 |  | 
| 12 12 | 
             
            class TestPanel < Wx::Panel
         | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 17 | 
            -
                    sampleList = %w(one two three four five six seven eight nine ten eleven twelve thirteen fourteen)
         | 
| 18 | 
            -
                    
         | 
| 19 | 
            -
                    Wx::StaticText.new(self, -1, "This example uses the wxCheckListBox control.", Wx::DEFAULT_POSITION, Wx::DEFAULT_SIZE)
         | 
| 20 | 
            -
                    
         | 
| 21 | 
            -
                    lb = Wx::CheckListBox.new(self, 60, Wx::Point.new(80,50), Wx::Size.new(80,120), sampleList)
         | 
| 22 | 
            -
                    evt_listbox(60) {|event| on_evt_listbox(event)}
         | 
| 23 | 
            -
                    evt_listbox_dclick(60) {|event| on_evt_listbox_dclick(event)}
         | 
| 24 | 
            -
                    lb.set_selection(0)
         | 
| 25 | 
            -
                    @lb = lb
         | 
| 26 | 
            -
                    
         | 
| 27 | 
            -
                    pos = lb.get_position().x + lb.get_size().get_width() + 25
         | 
| 28 | 
            -
                    btn = Wx::Button.new(self, -1, "Test SetString", Wx::Point.new(pos,50))
         | 
| 29 | 
            -
                    evt_button(btn.get_id()) {|event| on_test_button(event)}
         | 
| 30 | 
            -
                    
         | 
| 31 | 
            -
                    evt_right_up {|event| on_do_popup(event)}
         | 
| 32 | 
            -
                end
         | 
| 13 | 
            +
              attr_reader :lb
         | 
| 14 | 
            +
              def initialize(parent, log)
         | 
| 15 | 
            +
                super parent
         | 
| 16 | 
            +
                @log = log
         | 
| 33 17 |  | 
| 34 | 
            -
                 | 
| 35 | 
            -
             | 
| 36 | 
            -
                end
         | 
| 18 | 
            +
                sample_list = %w|one two three four five six seven eight
         | 
| 19 | 
            +
                                 nine ten eleven twelve thirteen fourteen|
         | 
| 37 20 |  | 
| 38 | 
            -
                 | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 21 | 
            +
                self.sizer = Wx::VBoxSizer.new
         | 
| 22 | 
            +
                tx = Wx::StaticText.new( self, 
         | 
| 23 | 
            +
                                         :label => "This example uses the wxCheckListBox control.")
         | 
| 24 | 
            +
                sizer.add(tx, 0, Wx::ALL, 5)
         | 
| 25 | 
            +
                @lb = Wx::CheckListBox.new(self, :choices => sample_list)
         | 
| 26 | 
            +
                sizer.add(lb, 1, Wx::ALL|Wx::GROW, 5)
         | 
| 27 | 
            +
                evt_listbox lb, :on_evt_listbox
         | 
| 28 | 
            +
                evt_listbox_dclick lb, :on_evt_listbox_dclick
         | 
| 29 | 
            +
                lb.set_selection(0)
         | 
| 41 30 |  | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
                 | 
| 45 | 
            -
                
         | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
             | 
| 55 | 
            -
             | 
| 56 | 
            -
             | 
| 57 | 
            -
                 | 
| 31 | 
            +
             | 
| 32 | 
            +
                btn = Wx::Button.new(self, :label => "Test SetString")
         | 
| 33 | 
            +
                sizer.add(btn, 0, Wx::ALL, 5)
         | 
| 34 | 
            +
                evt_button btn, :on_test_button
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
              
         | 
| 37 | 
            +
              def on_evt_listbox(event)
         | 
| 38 | 
            +
                @log.write_text("evt_listbox: " + event.get_string())
         | 
| 39 | 
            +
              end
         | 
| 40 | 
            +
              
         | 
| 41 | 
            +
              def on_evt_listbox_dclick(event)
         | 
| 42 | 
            +
                @log.write_text("evt_listbox_dclick:")
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
              
         | 
| 45 | 
            +
              def on_test_button(event)
         | 
| 46 | 
            +
                @lb.set_string(4, "FUBAR")
         | 
| 47 | 
            +
              end
         | 
| 58 48 | 
             
            end
         | 
| 59 49 |  | 
| 60 50 | 
             
            module Demo
         | 
| 61 | 
            -
             | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 64 | 
            -
             | 
| 65 | 
            -
             | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 68 | 
            -
             | 
| 51 | 
            +
              def Demo.run(frame, nb, log)
         | 
| 52 | 
            +
                win = TestPanel.new(nb, log)
         | 
| 53 | 
            +
                return win
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
              
         | 
| 56 | 
            +
              def Demo.overview
         | 
| 57 | 
            +
                return "A checklistbox is like a listbox, but allows items to be checked or unchecked."
         | 
| 58 | 
            +
              end
         | 
| 69 59 | 
             
            end
         | 
| 70 60 |  | 
| 71 61 | 
             
            if __FILE__ == $0
         | 
| @@ -8,10 +8,14 @@ end | |
| 8 8 | 
             
            require 'wx'
         | 
| 9 9 |  | 
| 10 10 |  | 
| 11 | 
            -
             | 
| 11 | 
            +
            # A virtual ListCtrl loads its items as needed from a virtual store. So
         | 
| 12 | 
            +
            # it's useful for linking to existing data sources, or for displaying
         | 
| 13 | 
            +
            # very large lists. It's subclassed in ruby, and the item_count is set;
         | 
| 14 | 
            +
            # the get_item_text methods should return how to display a given line.
         | 
| 12 15 | 
             
            class TestVirtualList < Wx::ListCtrl
         | 
| 13 16 | 
             
                def initialize(parent, log)
         | 
| 14 | 
            -
             | 
| 17 | 
            +
                  super parent, :style => Wx::LC_REPORT|Wx::LC_VIRTUAL|
         | 
| 18 | 
            +
                                          Wx::LC_HRULES| Wx::LC_VRULES
         | 
| 15 19 | 
             
                    @log = log
         | 
| 16 20 |  | 
| 17 21 | 
             
                    @il = Wx::ImageList.new(16,16)
         | 
| @@ -27,7 +31,8 @@ class TestVirtualList < Wx::ListCtrl | |
| 27 31 | 
             
                    set_column_width(1,175)
         | 
| 28 32 | 
             
                    set_column_width(2,175)
         | 
| 29 33 |  | 
| 30 | 
            -
                     | 
| 34 | 
            +
                    # Important - call this 
         | 
| 35 | 
            +
                    self.item_count = 10_000
         | 
| 31 36 |  | 
| 32 37 | 
             
                    @attr1 = Wx::ListItemAttr.new()
         | 
| 33 38 | 
             
                    @attr1.set_background_colour(Wx::Colour.new("YELLOW"))
         | 
| @@ -81,8 +81,8 @@ class TestPanel < Wx::Panel | |
| 81 81 |  | 
| 82 82 |  | 
| 83 83 | 
             
              def on_sash_drag(event)
         | 
| 84 | 
            -
                if event.get_drag_status == Wx::SASH_STATUS_OUT_OF_RANGE | 
| 85 | 
            -
             | 
| 84 | 
            +
                if event.get_drag_status == Wx::SASH_STATUS_OUT_OF_RANGE
         | 
| 85 | 
            +
                  @log.write_text('drag == out of range')
         | 
| 86 86 | 
             
                  return
         | 
| 87 87 | 
             
                end
         | 
| 88 88 |  | 
| @@ -79,20 +79,21 @@ class TestTreeCtrlPanel < Wx::Panel | |
| 79 79 | 
             
                    @root = @tree.add_root("The Root Item")
         | 
| 80 80 | 
             
                    @tree.set_item_image(@root, fldridx, Wx::TREE_ITEM_ICON_NORMAL)
         | 
| 81 81 | 
             
                    @tree.set_item_image(@root, fldropenidx, Wx::TREE_ITEM_ICON_EXPANDED)
         | 
| 82 | 
            -
                    
         | 
| 83 82 | 
             
                    0.upto(15) do |x|
         | 
| 84 83 | 
             
                        child = @tree.append_item(@root, "Item " + x.to_s())
         | 
| 85 84 | 
             
                        @tree.set_item_image(child, fldridx, Wx::TREE_ITEM_ICON_NORMAL)
         | 
| 86 85 | 
             
                        @tree.set_item_image(child, fldropenidx, Wx::TREE_ITEM_ICON_EXPANDED)
         | 
| 86 | 
            +
                        character = "a"
         | 
| 87 87 | 
             
                        0.upto(4) do |y|
         | 
| 88 | 
            -
                            last = @tree.append_item(child, "item " + x.to_s() + "-" +  | 
| 88 | 
            +
                            last = @tree.append_item(child, "item " + x.to_s() + "-" + character)
         | 
| 89 89 | 
             
                            @tree.set_item_image(last, fldridx, Wx::TREE_ITEM_ICON_NORMAL)
         | 
| 90 90 | 
             
                            @tree.set_item_image(last, fldropenidx, Wx::TREE_ITEM_ICON_EXPANDED)
         | 
| 91 91 | 
             
                            0.upto(4) do |z|
         | 
| 92 | 
            -
                                item = @tree.append_item(last, "item " + x.to_s() + "-" +  | 
| 92 | 
            +
                                item = @tree.append_item(last, "item " + x.to_s() + "-" + character + "-" + z.to_s())
         | 
| 93 93 | 
             
                                @tree.set_item_image(item, fileidx, Wx::TREE_ITEM_ICON_NORMAL)
         | 
| 94 94 | 
             
                                @tree.set_item_image(item, smileidx, Wx::TREE_ITEM_ICON_SELECTED)
         | 
| 95 95 | 
             
                            end
         | 
| 96 | 
            +
                            character.succ!
         | 
| 96 97 | 
             
                        end
         | 
| 97 98 | 
             
                    end
         | 
| 98 99 |  | 
| @@ -7,14 +7,8 @@ rescue LoadError | |
| 7 7 | 
             
            end
         | 
| 8 8 | 
             
            require 'wx'
         | 
| 9 9 |  | 
| 10 | 
            -
             | 
| 11 10 | 
             
            include Wx
         | 
| 12 11 |  | 
| 13 | 
            -
            require 'date'
         | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
            Calendar_File_About = ID_ABOUT
         | 
| 17 | 
            -
            Calendar_File_Quit = ID_EXIT
         | 
| 18 12 | 
             
            Calendar_Cal_Monday = 200
         | 
| 19 13 | 
             
            Calendar_Cal_Holidays = 201
         | 
| 20 14 | 
             
            Calendar_Cal_Special = 202
         | 
| @@ -24,123 +18,114 @@ Calendar_Cal_SeqMonth = 205 | |
| 24 18 | 
             
            Calendar_Cal_SurroundWeeks = 206
         | 
| 25 19 |  | 
| 26 20 |  | 
| 27 | 
            -
            def format_date(d)
         | 
| 28 | 
            -
                return "#{d.year}-#{d.mon}-#{d.day}"
         | 
| 29 | 
            -
            end
         | 
| 30 | 
            -
             | 
| 31 21 | 
             
            class MyCalendar < CalendarCtrl
         | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 35 | 
            -
             | 
| 36 | 
            -
             | 
| 37 | 
            -
             | 
| 38 | 
            -
             | 
| 39 | 
            -
             | 
| 40 | 
            -
             | 
| 41 | 
            -
             | 
| 42 | 
            -
             | 
| 43 | 
            -
             | 
| 44 | 
            -
                 | 
| 45 | 
            -
                 | 
| 46 | 
            -
             | 
| 47 | 
            -
                evt_calendar_sel_changed(id) {|event| on_calendar_change(event)}
         | 
| 48 | 
            -
                evt_calendar_weekday_clicked(id) {|event| on_calendar_weekday_click(event)}
         | 
| 49 | 
            -
                end
         | 
| 22 | 
            +
              def initialize(parent, display_frame, initial_date, calendar_flags)
         | 
| 23 | 
            +
                super( parent, 
         | 
| 24 | 
            +
                       :date  => initial_date, 
         | 
| 25 | 
            +
                       :style => calendar_flags | RAISED_BORDER)
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                @display = display_frame
         | 
| 28 | 
            +
                @date = initial_date
         | 
| 29 | 
            +
                @weekday_names = %w|Sun Mon Tue Wed Thu Fri Sat|
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                evt_calendar self, :on_calendar
         | 
| 32 | 
            +
                evt_calendar_month self, :on_cal_month_change
         | 
| 33 | 
            +
                evt_calendar_year self, :on_cal_year_change
         | 
| 34 | 
            +
                evt_calendar_sel_changed self, :on_calendar_change
         | 
| 35 | 
            +
                evt_calendar_weekday_clicked self, :on_calendar_weekday_click
         | 
| 36 | 
            +
              end
         | 
| 50 37 |  | 
| 51 38 | 
             
              def on_calendar(event)
         | 
| 52 | 
            -
             | 
| 53 | 
            -
             | 
| 54 | 
            -
                end
         | 
| 39 | 
            +
                @display.date = event.date
         | 
| 40 | 
            +
              end
         | 
| 55 41 |  | 
| 56 42 | 
             
              def on_calendar_change(event)
         | 
| 57 | 
            -
             | 
| 58 | 
            -
             | 
| 59 | 
            -
             | 
| 43 | 
            +
                @date = event.date
         | 
| 44 | 
            +
                log_status("Selected date: #{@date.strftime('%Y-%M-%D')}")
         | 
| 45 | 
            +
              end
         | 
| 60 46 |  | 
| 61 47 | 
             
              def on_cal_month_change
         | 
| 62 | 
            -
             | 
| 63 | 
            -
             | 
| 48 | 
            +
                log_status("Calendar month changed")
         | 
| 49 | 
            +
              end
         | 
| 64 50 |  | 
| 65 51 | 
             
              def on_cal_year_change
         | 
| 66 | 
            -
             | 
| 67 | 
            -
             | 
| 52 | 
            +
                log_status("Calendar year changed")
         | 
| 53 | 
            +
              end
         | 
| 68 54 |  | 
| 69 55 | 
             
              def on_calendar_weekday_click(event)
         | 
| 70 | 
            -
             | 
| 71 | 
            -
             | 
| 72 | 
            -
             | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 56 | 
            +
                wday = event.week_day
         | 
| 57 | 
            +
                log_status("Clicked on #{@weekday_names[wday]}")
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
              
         | 
| 60 | 
            +
              attr_reader :date
         | 
| 75 61 | 
             
            end
         | 
| 76 62 |  | 
| 77 63 | 
             
            class MyFrame < Frame
         | 
| 78 | 
            -
             | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 64 | 
            +
              def initialize(title)
         | 
| 65 | 
            +
                super(nil, -1, title)
         | 
| 66 | 
            +
                @panel = Wx::Panel.new(self)
         | 
| 67 | 
            +
                add_menu_bar
         | 
| 68 | 
            +
                add_status_bar
         | 
| 83 69 |  | 
| 84 | 
            -
             | 
| 70 | 
            +
                @calendar_flags = CAL_MONDAY_FIRST | CAL_SHOW_HOLIDAYS
         | 
| 85 71 |  | 
| 86 | 
            -
             | 
| 87 | 
            -
                    @calendar = MyCalendar.new(@panel, self, now, @calendar_flags)
         | 
| 72 | 
            +
                @calendar = MyCalendar.new(@panel, self, Time.now, @calendar_flags)
         | 
| 88 73 |  | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 74 | 
            +
                @sizer = BoxSizer.new(VERTICAL)
         | 
| 75 | 
            +
                configure_window
         | 
| 91 76 |  | 
| 92 | 
            -
              	evt_menu | 
| 93 | 
            -
              	evt_menu | 
| 77 | 
            +
              	evt_menu Wx::ID_EXIT, :on_quit
         | 
| 78 | 
            +
              	evt_menu Wx::ID_ABOUT, :on_about
         | 
| 94 79 |  | 
| 95 | 
            -
              	evt_menu | 
| 96 | 
            -
              	evt_menu | 
| 97 | 
            -
              	evt_menu | 
| 80 | 
            +
              	evt_menu Calendar_Cal_Monday, :on_cal_monday
         | 
| 81 | 
            +
              	evt_menu Calendar_Cal_Holidays, :on_cal_holidays
         | 
| 82 | 
            +
              	evt_menu Calendar_Cal_Special, :on_cal_special
         | 
| 98 83 |  | 
| 99 | 
            -
              	evt_menu | 
| 100 | 
            -
              	evt_menu | 
| 84 | 
            +
              	evt_menu Calendar_Cal_Month, :on_cal_allow_month
         | 
| 85 | 
            +
              	evt_menu Calendar_Cal_Year, :on_cal_allow_year
         | 
| 101 86 |  | 
| 102 | 
            -
              	evt_menu | 
| 103 | 
            -
              	evt_menu | 
| 87 | 
            +
              	evt_menu Calendar_Cal_SeqMonth, :on_cal_seq_month
         | 
| 88 | 
            +
              	evt_menu Calendar_Cal_SurroundWeeks, :on_cal_show_surrounding_weeks
         | 
| 104 89 |  | 
| 105 | 
            -
              	evt_update_ui | 
| 106 | 
            -
             | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 90 | 
            +
              	evt_update_ui Calendar_Cal_Year, :on_allow_year_update
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
              
         | 
| 93 | 
            +
              def add_menu_bar
         | 
| 94 | 
            +
                # create a menu bar
         | 
| 110 95 | 
             
                menu_file = Menu.new
         | 
| 111 96 |  | 
| 112 | 
            -
                menu_file.append( | 
| 113 | 
            -
                menu_file.append_separator | 
| 114 | 
            -
                menu_file.append( | 
| 97 | 
            +
                menu_file.append(Wx::ID_ABOUT, "&About...\tCtrl-A", "Show about dialog")
         | 
| 98 | 
            +
                menu_file.append_separator
         | 
| 99 | 
            +
                menu_file.append(Wx::ID_EXIT, "E&xit\tAlt-X", "Quit self program")
         | 
| 115 100 |  | 
| 116 101 | 
             
                menu_cal = Menu.new
         | 
| 117 102 | 
             
                menu_cal.append(Calendar_Cal_Monday,
         | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
             | 
| 103 | 
            +
                                 "Monday &first weekday\tCtrl-F",
         | 
| 104 | 
            +
                                 "Toggle between Mon and Sun as the first week day",
         | 
| 105 | 
            +
                                 ITEM_CHECK)
         | 
| 121 106 | 
             
                menu_cal.append(Calendar_Cal_Holidays, "Show &holidays\tCtrl-H",
         | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 107 | 
            +
                                 "Toggle highlighting the holidays",
         | 
| 108 | 
            +
                                 ITEM_CHECK)
         | 
| 124 109 | 
             
                menu_cal.append(Calendar_Cal_Special, "Highlight &special dates\tCtrl-S",
         | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 110 | 
            +
                                 "Test custom highlighting",
         | 
| 111 | 
            +
                                 ITEM_CHECK)
         | 
| 127 112 | 
             
                menu_cal.append(Calendar_Cal_SurroundWeeks,
         | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
                menu_cal.append_separator | 
| 113 | 
            +
                                 "Show s&urrounding weeks\tCtrl-W",
         | 
| 114 | 
            +
                                 "Show the neighbouring weeks in the prev/next month",
         | 
| 115 | 
            +
                                 ITEM_CHECK)
         | 
| 116 | 
            +
                menu_cal.append_separator
         | 
| 132 117 | 
             
                menu_cal.append(Calendar_Cal_SeqMonth,
         | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 118 | 
            +
                                 "To&ggle month selector style\tCtrl-G",
         | 
| 119 | 
            +
                                 "Use another style for the calendar controls",
         | 
| 120 | 
            +
                                 ITEM_CHECK)
         | 
| 136 121 | 
             
                menu_cal.append(Calendar_Cal_Month, "&Month can be changed\tCtrl-M",
         | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 122 | 
            +
                                 "Allow changing the month in the calendar",
         | 
| 123 | 
            +
                                 ITEM_CHECK)
         | 
| 139 124 | 
             
                menu_cal.append(Calendar_Cal_Year, "&Year can be changed\tCtrl-Y",
         | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 125 | 
            +
                                 "Allow changing the year in the calendar",
         | 
| 126 | 
            +
                                 ITEM_CHECK)
         | 
| 142 127 |  | 
| 143 | 
            -
             | 
| 128 | 
            +
                # now append the freshly created menu to the menu bar...
         | 
| 144 129 | 
             
                menu_bar = MenuBar.new
         | 
| 145 130 | 
             
                menu_bar.append(menu_file, "&File")
         | 
| 146 131 | 
             
                menu_bar.append(menu_cal, "&Calendar")
         | 
| @@ -150,89 +135,89 @@ class MyFrame < Frame | |
| 150 135 | 
             
                menu_bar.check(Calendar_Cal_Month, TRUE)
         | 
| 151 136 | 
             
                menu_bar.check(Calendar_Cal_Year, TRUE)
         | 
| 152 137 |  | 
| 153 | 
            -
             | 
| 154 | 
            -
                 | 
| 155 | 
            -
             | 
| 156 | 
            -
             | 
| 157 | 
            -
             | 
| 158 | 
            -
             | 
| 159 | 
            -
             | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 162 | 
            -
             | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 138 | 
            +
                # ... and attach self menu bar to the frame
         | 
| 139 | 
            +
                self.menu_bar = menu_bar
         | 
| 140 | 
            +
              end
         | 
| 141 | 
            +
             | 
| 142 | 
            +
              def add_status_bar
         | 
| 143 | 
            +
                # create a status bar just for fun (by default with 1 pane only)
         | 
| 144 | 
            +
                create_status_bar
         | 
| 145 | 
            +
                set_status_text("Welcome to Windows!")
         | 
| 146 | 
            +
              end
         | 
| 147 | 
            +
              
         | 
| 148 | 
            +
              def configure_window
         | 
| 149 | 
            +
                @sizer.add(@calendar, 0, Wx::ALIGN_CENTRE|Wx::ALL, 5)
         | 
| 150 | 
            +
                @sizer.size_hints = @panel
         | 
| 151 | 
            +
                layout
         | 
| 152 | 
            +
                @panel.sizer = @sizer
         | 
| 153 | 
            +
              end
         | 
| 154 | 
            +
              
         | 
| 170 155 | 
             
              def on_quit
         | 
| 171 156 | 
             
                # true is to force the frame to close
         | 
| 172 157 | 
             
                close(true)
         | 
| 173 | 
            -
             | 
| 158 | 
            +
              end
         | 
| 174 159 |  | 
| 175 160 | 
             
              def on_about
         | 
| 176 | 
            -
             | 
| 161 | 
            +
                message_box("wxRuby CalendarCtrl sample\nby Kevin Smith\n" +
         | 
| 177 162 | 
             
                             "based on the wxWidgets version by Vadim Zeitlin",
         | 
| 178 163 | 
             
                             "About Calendar", OK | ICON_INFORMATION, self)
         | 
| 179 | 
            -
             | 
| 164 | 
            +
              end
         | 
| 180 165 |  | 
| 181 166 | 
             
              def on_cal_monday(event)
         | 
| 182 | 
            -
             | 
| 183 | 
            -
             | 
| 184 | 
            -
             | 
| 167 | 
            +
                enable = get_menu_bar().is_checked(event.get_id())
         | 
| 168 | 
            +
                toggle_cal_style(enable, CAL_MONDAY_FIRST)
         | 
| 169 | 
            +
              end
         | 
| 185 170 |  | 
| 186 171 | 
             
              def on_cal_holidays(event)
         | 
| 187 | 
            -
             | 
| 172 | 
            +
                enable = get_menu_bar().is_checked(event.get_id())
         | 
| 188 173 | 
             
                @calendar.enable_holiday_display(enable)
         | 
| 189 | 
            -
             | 
| 174 | 
            +
              end
         | 
| 190 175 |  | 
| 191 | 
            -
             | 
| 192 | 
            -
             | 
| 193 | 
            -
             | 
| 176 | 
            +
              def on_cal_special(event)
         | 
| 177 | 
            +
                highlight_special(get_menu_bar().is_checked(event.get_id()))
         | 
| 178 | 
            +
              end
         | 
| 194 179 |  | 
| 195 | 
            -
             | 
| 196 | 
            -
             | 
| 180 | 
            +
              def on_cal_allow_month(event)
         | 
| 181 | 
            +
                allow = get_menu_bar().is_checked(event.get_id())
         | 
| 197 182 | 
             
                @calendar.enable_month_change(allow)
         | 
| 198 | 
            -
             | 
| 183 | 
            +
              end
         | 
| 199 184 |  | 
| 200 | 
            -
             | 
| 201 | 
            -
             | 
| 185 | 
            +
              def on_cal_allow_year(event)
         | 
| 186 | 
            +
                allow = get_menu_bar().is_checked(event.get_id())
         | 
| 202 187 | 
             
                @calendar.enable_year_change(allow)
         | 
| 203 | 
            -
             | 
| 188 | 
            +
              end
         | 
| 204 189 |  | 
| 205 | 
            -
             | 
| 206 | 
            -
             | 
| 207 | 
            -
             | 
| 208 | 
            -
             | 
| 190 | 
            +
              def on_cal_seq_month(event)
         | 
| 191 | 
            +
                allow = get_menu_bar().is_checked(event.get_id())
         | 
| 192 | 
            +
                toggle_cal_style(allow, CAL_SEQUENTIAL_MONTH_SELECTION)
         | 
| 193 | 
            +
              end
         | 
| 209 194 |  | 
| 210 | 
            -
             | 
| 211 | 
            -
             | 
| 212 | 
            -
             | 
| 213 | 
            -
             | 
| 195 | 
            +
              def on_cal_show_surrounding_weeks(event)
         | 
| 196 | 
            +
                allow = get_menu_bar().is_checked(event.get_id())
         | 
| 197 | 
            +
                toggle_cal_style(allow, CAL_SHOW_SURROUNDING_WEEKS)
         | 
| 198 | 
            +
              end
         | 
| 214 199 |  | 
| 215 | 
            -
             | 
| 216 | 
            -
             | 
| 217 | 
            -
             | 
| 200 | 
            +
              def on_allow_year_update(event)
         | 
| 201 | 
            +
                event.enable( get_menu_bar().is_checked(Calendar_Cal_Month))
         | 
| 202 | 
            +
              end
         | 
| 218 203 |  | 
| 219 | 
            -
             | 
| 204 | 
            +
              def toggle_cal_style(on,flag)
         | 
| 220 205 | 
             
                style = @calendar.get_window_style_flag
         | 
| 221 206 | 
             
                date = @calendar.date
         | 
| 222 207 | 
             
                @sizer.detach(@calendar)
         | 
| 223 208 | 
             
                @calendar.destroy
         | 
| 224 | 
            -
             | 
| 225 | 
            -
             | 
| 226 | 
            -
             | 
| 227 | 
            -
             | 
| 228 | 
            -
                    end
         | 
| 229 | 
            -
                  @calendar = MyCalendar.new(@panel, self, date, style)
         | 
| 230 | 
            -
                  @sizer.add(@calendar, 0, Wx::ALIGN_CENTRE|Wx::ALL, 5)
         | 
| 231 | 
            -
                  @panel.layout
         | 
| 209 | 
            +
                if  on
         | 
| 210 | 
            +
                  style |= flag
         | 
| 211 | 
            +
                else
         | 
| 212 | 
            +
                  style &= ~flag
         | 
| 232 213 | 
             
                end
         | 
| 214 | 
            +
                @calendar = MyCalendar.new(@panel, self, date, style)
         | 
| 215 | 
            +
                @sizer.add(@calendar, 0, Wx::ALIGN_CENTRE|Wx::ALL, 5)
         | 
| 216 | 
            +
                @panel.layout
         | 
| 217 | 
            +
              end
         | 
| 233 218 |  | 
| 234 | 
            -
             | 
| 235 | 
            -
             | 
| 219 | 
            +
              def highlight_special(on)
         | 
| 220 | 
            +
                if on
         | 
| 236 221 | 
             
                  attr_red_circle = CalendarDateAttr.new(CAL_BORDER_ROUND, RED)
         | 
| 237 222 | 
             
                  attr_green_square = CalendarDateAttr.new(CAL_BORDER_SQUARE, GREEN)
         | 
| 238 223 | 
             
                  # This wraps correctly, but causes problems because the colour is freed
         | 
| @@ -243,28 +228,28 @@ class MyFrame < Frame | |
| 243 228 | 
             
                  @calendar.set_attr(17, attr_red_circle)
         | 
| 244 229 | 
             
                  @calendar.set_attr(29, attr_green_square)
         | 
| 245 230 | 
             
                  # @calendar.set_attr(13, attr_header_like)
         | 
| 246 | 
            -
             | 
| 231 | 
            +
                else
         | 
| 247 232 | 
             
                  @calendar.reset_attr(17)
         | 
| 248 233 | 
             
                  @calendar.reset_attr(29)
         | 
| 249 234 | 
             
                  # @calendar.reset_attr(13)
         | 
| 250 | 
            -
                    end
         | 
| 251 | 
            -
                @calendar.refresh()
         | 
| 252 235 | 
             
                end
         | 
| 253 | 
            -
             | 
| 254 | 
            -
             | 
| 255 | 
            -
             | 
| 256 | 
            -
             | 
| 257 | 
            -
             | 
| 258 | 
            -
                 | 
| 259 | 
            -
             | 
| 236 | 
            +
                @calendar.refresh()
         | 
| 237 | 
            +
              end
         | 
| 238 | 
            +
             | 
| 239 | 
            +
              def set_date(d)
         | 
| 240 | 
            +
                str = "%s-%s-%s" % [ d.year, d.mon, d.day ]
         | 
| 241 | 
            +
                Wx::MessageDialog.new( self, "The selected date is #{str}", 
         | 
| 242 | 
            +
                                       "Date chosen" ).show_modal
         | 
| 243 | 
            +
              end
         | 
| 244 | 
            +
              
         | 
| 260 245 | 
             
            end
         | 
| 261 246 |  | 
| 262 247 |  | 
| 263 248 | 
             
            class RbApp < App
         | 
| 264 | 
            -
             | 
| 265 | 
            -
             | 
| 249 | 
            +
              def on_init()
         | 
| 250 | 
            +
                frame = MyFrame.new("Calendar Windows sample")
         | 
| 266 251 | 
             
                frame.show(true)
         | 
| 267 | 
            -
             | 
| 252 | 
            +
              end
         | 
| 268 253 | 
             
            end
         | 
| 269 254 |  | 
| 270 255 | 
             
            a = RbApp.new
         |