module Wx class ShutterEvent < CommandEvent EVT_SHUTTER = EvtHandler.register_class(self,nil,'evt_shutter',1) def initialize(parent,header,item) super(EVT_SHUTTER) self.client_data = {:header=>header,:item=>item} self.id = parent.get_id end def header client_data[:header] end def item client_data[:item] end end class Shutter < Panel def initialize(*args) super self.set_background_colour(Colour.new(128,128,128)) @sizer = BoxSizer.new(VERTICAL) self.set_sizer(@sizer) @headers = [] @items = [] @ils = [] evt_list_item_selected(ID_ANY) do |event| itm = event.get_index() lstctl = event.get_event_object idx = @items.index(lstctl) header = @headers[idx] evt = ShutterEvent.new(self,header,itm) event_handler.process_event(evt) end end def add_header(title) btn = Button.new(self,-1,title) evt_button(btn.get_id,:onHeaderClick) @sizer.add(btn,0,EXPAND) @headers << btn lstctl = ListCtrl.new(self,-1) @items << lstctl il = ImageList.new(32,32) @ils << il lstctl.set_image_list(il,IMAGE_LIST_NORMAL) @sizer.add(lstctl,1,EXPAND) lstctl.show(false) unless @items.length == 1 lstctl.set_background_colour(Colour.new(128,128,128)) btn end def add_item(header,text,icon=NullBitmap) indx = @headers.index(header) i = @ils[indx].add(icon) @items[indx].insert_item(@items[indx].get_item_count()+1,text,i) end private def onHeaderClick(event) btn = event.get_event_object indx = @headers.index(btn) unless @items[indx].is_shown() @items.each do |lc| lc.show(false) end @items[indx].show(true) layout() end end end end