diff --git a/lib/tailor/GUI/GridDisplay.rb b/lib/tailor/GUI/GridDisplay.rb index 46fd0fe..4e9e745 100644 --- a/lib/tailor/GUI/GridDisplay.rb +++ b/lib/tailor/GUI/GridDisplay.rb @@ -3,6 +3,22 @@ require 'Tailor/GUI/ImageDisplay' module Tailor module GUI + class GridDisplaySelectedEvent < Wx::CommandEvent + EVT_GRIDDISPLAY_SELECTED = Wx::EvtHandler.register_class(self, + nil, + "evt_griddisplay_selected", + 1) + def initialize(source) + super(EVT_GRIDDISPLAY_SELECTED) + self.id = source.get_id + self.client_data = { + 'size' => source.get_size, + 'index' => source.get_selected_index, + 'tile' => source.get_selected_tile } + end + + end + class GridDisplay < Tailor::GUI::ImageDisplay def initialize(*args) @@ -13,6 +29,7 @@ module Tailor @darken_x = 0 @darken_y = 0 @rectlist = [] + @selected = nil end def set_image(image) @@ -34,6 +51,8 @@ module Tailor end end @darkenCell = tmpImage.to_bitmap + @darken_x = -(gridX) + @darken_y = -(gridY) evt_left_up() { |event| on_gridClicked(event) } @imageGrid.draw() { |dc| @@ -80,10 +99,32 @@ module Tailor next unless rect.contains(event.get_x, event.get_y) @darken_x = rect.get_x @darken_y = rect.get_y + @selected = rect + evt = GridDisplaySelectedEvent.new(self) + event_handler.process_event(evt) end refresh end + def get_size + @rectlist.length + end + + def get_tiles + ret = [] + @rectlist.each do |rect| + ret << @pristineImage.sub_bitmap(rect) + end + end + + def get_selected_tile + @pristineImage.get_sub_bitmap(@selected) + end + + def get_selected_index + @rectlist.index(@selected) + end + end end end diff --git a/lib/tailor/GUI/TilesetEditor.rb b/lib/tailor/GUI/TilesetEditor.rb index 6475f7a..c75be6b 100644 --- a/lib/tailor/GUI/TilesetEditor.rb +++ b/lib/tailor/GUI/TilesetEditor.rb @@ -10,7 +10,8 @@ module Tailor super(*args) @tilesetFilename = "" @tilesetImage = nil - + @tilesetNames = [] + @panel = Wx::Panel.new(self) @sizer = Wx::BoxSizer.new(Wx::VERTICAL) @@ -44,6 +45,7 @@ module Tailor @tilesetSlicer = Tailor::GUI::GridDisplay.new(@panel, Wx::ID_ANY) @tilesetSlicer.set_min_size(Wx::Size.new(320, 240)) rowsizer.add(@tilesetSlicer, 1, flag = Wx::EXPAND|Wx::ALL) + evt_griddisplay_selected(@tilesetSlicer) { |event| on_gridSelected(event) } tmpversizer = Wx::BoxSizer.new(Wx::VERTICAL) @tilesetNameCtrl = Wx::TextCtrl.new(@panel, @@ -54,6 +56,8 @@ module Tailor Wx::ID_ANY, "Tile Name") tmpversizer.add(@tileNameCtrl, 0, flag = Wx::EXPAND|Wx::ALIGN_TOP) + evt_text(@tileNameCtrl) { |event| on_tileNameChanged(event) } + @tilesetNotesCtrl = Wx::TextCtrl.new(@panel, Wx::ID_ANY, "Notes about this tileset", @@ -91,10 +95,19 @@ module Tailor :style => Wx::FD_FILE_MUST_EXIST | Wx::FD_PREVIEW ) if fd.show_modal == Wx::ID_OK @tilesetFilename = fd.get_path + @tilesetNames = [] refresh_image + (0..(@tilesetSlicer.get_size)).each do |i| + @tilesetNames << "Tile #{i}" + end end end + def on_gridSelected(event) + @tileNameCtrl.enable + @tileNameCtrl.set_value(@tilesetNames[event.client_data['index']]) + end + def on_ExportClicked(event) end @@ -111,6 +124,10 @@ module Tailor event.client_data['gridY'] ) end + + def on_tileNameChanged(event) + @tilesetNames[@tilesetSlicer.get_selected_index] = @tileNameCtrl.get_value + end def refresh_image begin @@ -122,6 +139,7 @@ module Tailor y = ( @tilesetImage.get_height > 400 ? 400 : @tilesetImage.get_height + 20) @tilesetSlicer.set_min_size(Wx::Size.new(x, y)) @sizer.set_size_hints(self) + @tileNameCtrl.disable end rescue Exception => e puts e