Midstream on #8: Got the 'Load' button working (Save/Load, yay) and renamed the rest of the buttons

This commit is contained in:
2014-05-24 10:18:35 -07:00
parent 1b9c873dca
commit 905da9d681
2 changed files with 71 additions and 15 deletions

View File

@@ -23,15 +23,18 @@ module Tailor
@tilesetProperties = Tailor::GUI::TilesetProperties.new(@panel, Wx::ID_ANY) @tilesetProperties = Tailor::GUI::TilesetProperties.new(@panel, Wx::ID_ANY)
evt_tileprops_changed(@tilesetProperties) { |event| on_tilepropsChanged(event) } evt_tileprops_changed(@tilesetProperties) { |event| on_tilepropsChanged(event) }
tmpversizer.add(@tilesetProperties, 0, flag = Wx::EXPAND|Wx::ALL) tmpversizer.add(@tilesetProperties, 0, flag = Wx::EXPAND|Wx::ALL)
@cancelBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Cancel") @cancelBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Close")
evt_button(@cancelBtn.get_id()) { |event| on_CancelClicked(event) } evt_button(@cancelBtn.get_id()) { |event| on_CancelClicked(event) }
@importBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Import") @importBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Import Image")
evt_button(@importBtn.get_id()) { |event| on_ImportClicked(event) } evt_button(@importBtn.get_id()) { |event| on_ImportClicked(event) }
@exportBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Export") @exportBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Export Images")
evt_button(@exportBtn.get_id()) { |event| on_ExportClicked(event) } evt_button(@exportBtn.get_id()) { |event| on_ExportClicked(event) }
@saveBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Save") @loadBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Load JSON")
evt_button(@loadBtn.get_id()) { |event| on_LoadClicked(event) }
@saveBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Save JSON")
evt_button(@saveBtn.get_id()) { |event| on_SaveClicked(event) } evt_button(@saveBtn.get_id()) { |event| on_SaveClicked(event) }
tmpversizer.add_spacer(20) tmpversizer.add_spacer(20)
@@ -39,6 +42,8 @@ module Tailor
tmpversizer.add_spacer(20) tmpversizer.add_spacer(20)
tmpversizer.add(@exportBtn, 0, flag=Wx::EXPAND) tmpversizer.add(@exportBtn, 0, flag=Wx::EXPAND)
tmpversizer.add_spacer(20) tmpversizer.add_spacer(20)
tmpversizer.add(@loadBtn, 0, flag=Wx::EXPAND)
tmpversizer.add_spacer(20)
tmpversizer.add(@saveBtn, 0, flag=Wx::EXPAND) tmpversizer.add(@saveBtn, 0, flag=Wx::EXPAND)
tmpversizer.add_spacer(20) tmpversizer.add_spacer(20)
tmpversizer.add(@cancelBtn, 0, flag=Wx::EXPAND) tmpversizer.add(@cancelBtn, 0, flag=Wx::EXPAND)
@@ -103,8 +108,8 @@ module Tailor
:wildcard => wildcards, :wildcard => wildcards,
: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
@tilesetNames = [] @tilesetNames = []
@tilesetImage = Wx::Image.new(fd.get_path)
refresh_image refresh_image
(0..(@tilesetSlicer.get_size)).each do |i| (0..(@tilesetSlicer.get_size)).each do |i|
@tilesetNames << "Tile #{i}" @tilesetNames << "Tile #{i}"
@@ -148,6 +153,26 @@ module Tailor
end end
def on_LoadClicked(event)
@tileset = Tailor::Tileset.new
wildcards = "*.json"
fd = Wx::FileDialog.new(self, "Select tileset to load",
:wildcard => wildcards,
:style => Wx::FD_FILE_MUST_EXIST)
if fd.show_modal == Wx::ID_OK
@tileset.from_json(JSON.parse(File.read(fd.get_path)))
# FIXME : This is redundant.
@tileset.tiles.each do |tile|
@tilesetNames << tile['name']
end
@tilesetImage = @tileset.image
@tileNameCtrl.disable
@tilesetSlicer.tileset = @tileset
@tilesetProperties.set_tileset(@tileset)
refresh_image
end
end
def on_SaveClicked(event) def on_SaveClicked(event)
wildcards = "*.json" wildcards = "*.json"
fd = Wx::FileDialog.new(self, "Select tileset to import", fd = Wx::FileDialog.new(self, "Select tileset to import",
@@ -208,7 +233,6 @@ module Tailor
def refresh_image def refresh_image
begin begin
@tilesetImage = Wx::Image.new(@tilesetFilename)
if @tilesetImage.is_ok if @tilesetImage.is_ok
@tilesetSlicer.set_image @tilesetImage @tilesetSlicer.set_image @tilesetImage
# The + 20 here is a hack to make scroll bars go away where we don't want them # The + 20 here is a hack to make scroll bars go away where we don't want them

View File

@@ -15,6 +15,7 @@ module Tailor
attr_accessor :space_y attr_accessor :space_y
attr_accessor :pad_x attr_accessor :pad_x
attr_accessor :pad_y attr_accessor :pad_y
attr_accessor :tiles
def initialize def initialize
self.image = nil self.image = nil
@@ -27,7 +28,7 @@ module Tailor
self.space_y = 0 self.space_y = 0
self.pad_x = 0 self.pad_x = 0
self.pad_y = 0 self.pad_y = 0
@tiles = [] self.tiles = []
end end
def add_tile(name, image) def add_tile(name, image)
@@ -37,18 +38,20 @@ module Tailor
throw TypeError("Tailor::Tileset::add_tile only accepts Wx::Image or Wx::Bitmap") throw TypeError("Tailor::Tileset::add_tile only accepts Wx::Image or Wx::Bitmap")
return return
end end
@tiles << {"name" => name, "image" => image} self.tiles << {"name" => name, "image" => image}
end end
def get_tile(elem) def get_tile(elem)
if elem.instance_of?(String) if elem.instance_of?(String)
@tiles.each do self.tiles.each do
if tile['name'] == elem if tile['name'] == elem
return tile['image'] return tile['image']
end end
end end
elsif elem.instance_of?(Integer) elsif elem.instance_of?(Integer)
return @tiles[elem]['image'] if elem <= self.tiles.size
return self.tiles[elem]['image']
end
end end
end end
@@ -60,6 +63,34 @@ module Tailor
io_obj.write(JSON.pretty_generate(obj)) io_obj.write(JSON.pretty_generate(obj))
end end
def from_json(js)
self.tileset_name = js['name']
self.license = js['license']
self.notes = js['notes']
self.tile_x = js['dimensions']['tile_x']
self.tile_y = js['dimensions']['tile_y']
self.space_x = js['dimensions']['space_x']
self.space_y = js['dimensions']['space_y']
self.pad_x = js['dimensions']['pad_x']
self.pad_y = js['dimensions']['pad_y']
StringIO.open do |iostream|
iostream.write(Base64.decode64(js['image']))
iostream.rewind
self.image = Wx::Image.read(iostream, Wx::BITMAP_TYPE_PNG)
end
self.tiles = []
js['tiles'].each do |tile|
StringIO.open do |iostream|
iostream.write(Base64.decode64(tile['image']))
iostream.rewind
self.tiles << {
'name' => tile['name'],
'image' => Wx::Image.read(iostream, Wx::BITMAP_TYPE_PNG)
}
end
end
end
def to_json(callback = nil) def to_json(callback = nil)
obj = { obj = {
"name" => self.tileset_name, "name" => self.tileset_name,
@@ -88,7 +119,7 @@ module Tailor
end end
idx = 0 idx = 0
@tiles.each do |tile| self.tiles.each do |tile|
StringIO.open do |iostream| StringIO.open do |iostream|
if not callback.nil? if not callback.nil?
callback.call("Converting to base64", tile['image'], tile['name'], idx) callback.call("Converting to base64", tile['image'], tile['name'], idx)
@@ -106,5 +137,6 @@ module Tailor
obj obj
end end
end end
end end