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:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user