Midstream on #8 : Storing names of individual tiles works now, GridDisplay can be queried for the selected tile index, tile bitmap, size of rectangle list, and a complete set of chopped tiles

This commit is contained in:
2014-05-22 22:28:28 -07:00
parent 057a456820
commit 907f737ea2
2 changed files with 60 additions and 1 deletions

View File

@@ -3,6 +3,22 @@ require 'Tailor/GUI/ImageDisplay'
module Tailor module Tailor
module GUI 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 class GridDisplay < Tailor::GUI::ImageDisplay
def initialize(*args) def initialize(*args)
@@ -13,6 +29,7 @@ module Tailor
@darken_x = 0 @darken_x = 0
@darken_y = 0 @darken_y = 0
@rectlist = [] @rectlist = []
@selected = nil
end end
def set_image(image) def set_image(image)
@@ -34,6 +51,8 @@ module Tailor
end end
end end
@darkenCell = tmpImage.to_bitmap @darkenCell = tmpImage.to_bitmap
@darken_x = -(gridX)
@darken_y = -(gridY)
evt_left_up() { |event| on_gridClicked(event) } evt_left_up() { |event| on_gridClicked(event) }
@imageGrid.draw() { |dc| @imageGrid.draw() { |dc|
@@ -80,10 +99,32 @@ module Tailor
next unless rect.contains(event.get_x, event.get_y) next unless rect.contains(event.get_x, event.get_y)
@darken_x = rect.get_x @darken_x = rect.get_x
@darken_y = rect.get_y @darken_y = rect.get_y
@selected = rect
evt = GridDisplaySelectedEvent.new(self)
event_handler.process_event(evt)
end end
refresh refresh
end 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 end
end end

View File

@@ -10,6 +10,7 @@ module Tailor
super(*args) super(*args)
@tilesetFilename = "" @tilesetFilename = ""
@tilesetImage = nil @tilesetImage = nil
@tilesetNames = []
@panel = Wx::Panel.new(self) @panel = Wx::Panel.new(self)
@sizer = Wx::BoxSizer.new(Wx::VERTICAL) @sizer = Wx::BoxSizer.new(Wx::VERTICAL)
@@ -44,6 +45,7 @@ module Tailor
@tilesetSlicer = Tailor::GUI::GridDisplay.new(@panel, Wx::ID_ANY) @tilesetSlicer = Tailor::GUI::GridDisplay.new(@panel, Wx::ID_ANY)
@tilesetSlicer.set_min_size(Wx::Size.new(320, 240)) @tilesetSlicer.set_min_size(Wx::Size.new(320, 240))
rowsizer.add(@tilesetSlicer, 1, flag = Wx::EXPAND|Wx::ALL) rowsizer.add(@tilesetSlicer, 1, flag = Wx::EXPAND|Wx::ALL)
evt_griddisplay_selected(@tilesetSlicer) { |event| on_gridSelected(event) }
tmpversizer = Wx::BoxSizer.new(Wx::VERTICAL) tmpversizer = Wx::BoxSizer.new(Wx::VERTICAL)
@tilesetNameCtrl = Wx::TextCtrl.new(@panel, @tilesetNameCtrl = Wx::TextCtrl.new(@panel,
@@ -54,6 +56,8 @@ module Tailor
Wx::ID_ANY, Wx::ID_ANY,
"Tile Name") "Tile Name")
tmpversizer.add(@tileNameCtrl, 0, flag = Wx::EXPAND|Wx::ALIGN_TOP) tmpversizer.add(@tileNameCtrl, 0, flag = Wx::EXPAND|Wx::ALIGN_TOP)
evt_text(@tileNameCtrl) { |event| on_tileNameChanged(event) }
@tilesetNotesCtrl = Wx::TextCtrl.new(@panel, @tilesetNotesCtrl = Wx::TextCtrl.new(@panel,
Wx::ID_ANY, Wx::ID_ANY,
"Notes about this tileset", "Notes about this tileset",
@@ -91,9 +95,18 @@ module Tailor
:style => Wx::FD_FILE_MUST_EXIST | Wx::FD_PREVIEW ) :style => Wx::FD_FILE_MUST_EXIST | Wx::FD_PREVIEW )
if fd.show_modal == Wx::ID_OK if fd.show_modal == Wx::ID_OK
@tilesetFilename = fd.get_path @tilesetFilename = fd.get_path
@tilesetNames = []
refresh_image refresh_image
(0..(@tilesetSlicer.get_size)).each do |i|
@tilesetNames << "Tile #{i}"
end end
end end
end
def on_gridSelected(event)
@tileNameCtrl.enable
@tileNameCtrl.set_value(@tilesetNames[event.client_data['index']])
end
def on_ExportClicked(event) def on_ExportClicked(event)
end end
@@ -112,6 +125,10 @@ module Tailor
) )
end end
def on_tileNameChanged(event)
@tilesetNames[@tilesetSlicer.get_selected_index] = @tileNameCtrl.get_value
end
def refresh_image def refresh_image
begin begin
@tilesetImage = Wx::Bitmap.new(@tilesetFilename) @tilesetImage = Wx::Bitmap.new(@tilesetFilename)
@@ -122,6 +139,7 @@ module Tailor
y = ( @tilesetImage.get_height > 400 ? 400 : @tilesetImage.get_height + 20) y = ( @tilesetImage.get_height > 400 ? 400 : @tilesetImage.get_height + 20)
@tilesetSlicer.set_min_size(Wx::Size.new(x, y)) @tilesetSlicer.set_min_size(Wx::Size.new(x, y))
@sizer.set_size_hints(self) @sizer.set_size_hints(self)
@tileNameCtrl.disable
end end
rescue Exception => e rescue Exception => e
puts e puts e