Midstream on #8: Got the 'Load' button working (Save/Load, yay) and renamed the rest of the buttons
This commit is contained in:
@@ -23,15 +23,18 @@ module Tailor
|
||||
@tilesetProperties = Tailor::GUI::TilesetProperties.new(@panel, Wx::ID_ANY)
|
||||
evt_tileprops_changed(@tilesetProperties) { |event| on_tilepropsChanged(event) }
|
||||
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) }
|
||||
@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) }
|
||||
|
||||
@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) }
|
||||
|
||||
@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) }
|
||||
|
||||
tmpversizer.add_spacer(20)
|
||||
@@ -39,6 +42,8 @@ module Tailor
|
||||
tmpversizer.add_spacer(20)
|
||||
tmpversizer.add(@exportBtn, 0, flag=Wx::EXPAND)
|
||||
tmpversizer.add_spacer(20)
|
||||
tmpversizer.add(@loadBtn, 0, flag=Wx::EXPAND)
|
||||
tmpversizer.add_spacer(20)
|
||||
tmpversizer.add(@saveBtn, 0, flag=Wx::EXPAND)
|
||||
tmpversizer.add_spacer(20)
|
||||
tmpversizer.add(@cancelBtn, 0, flag=Wx::EXPAND)
|
||||
@@ -103,8 +108,8 @@ module Tailor
|
||||
:wildcard => wildcards,
|
||||
:style => Wx::FD_FILE_MUST_EXIST | Wx::FD_PREVIEW )
|
||||
if fd.show_modal == Wx::ID_OK
|
||||
@tilesetFilename = fd.get_path
|
||||
@tilesetNames = []
|
||||
@tilesetImage = Wx::Image.new(fd.get_path)
|
||||
refresh_image
|
||||
(0..(@tilesetSlicer.get_size)).each do |i|
|
||||
@tilesetNames << "Tile #{i}"
|
||||
@@ -148,6 +153,26 @@ module Tailor
|
||||
|
||||
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)
|
||||
wildcards = "*.json"
|
||||
fd = Wx::FileDialog.new(self, "Select tileset to import",
|
||||
@@ -208,7 +233,6 @@ module Tailor
|
||||
|
||||
def refresh_image
|
||||
begin
|
||||
@tilesetImage = Wx::Image.new(@tilesetFilename)
|
||||
if @tilesetImage.is_ok
|
||||
@tilesetSlicer.set_image @tilesetImage
|
||||
# The + 20 here is a hack to make scroll bars go away where we don't want them
|
||||
|
||||
@@ -15,6 +15,7 @@ module Tailor
|
||||
attr_accessor :space_y
|
||||
attr_accessor :pad_x
|
||||
attr_accessor :pad_y
|
||||
attr_accessor :tiles
|
||||
|
||||
def initialize
|
||||
self.image = nil
|
||||
@@ -27,7 +28,7 @@ module Tailor
|
||||
self.space_y = 0
|
||||
self.pad_x = 0
|
||||
self.pad_y = 0
|
||||
@tiles = []
|
||||
self.tiles = []
|
||||
end
|
||||
|
||||
def add_tile(name, image)
|
||||
@@ -37,18 +38,20 @@ module Tailor
|
||||
throw TypeError("Tailor::Tileset::add_tile only accepts Wx::Image or Wx::Bitmap")
|
||||
return
|
||||
end
|
||||
@tiles << {"name" => name, "image" => image}
|
||||
self.tiles << {"name" => name, "image" => image}
|
||||
end
|
||||
|
||||
def get_tile(elem)
|
||||
if elem.instance_of?(String)
|
||||
@tiles.each do
|
||||
self.tiles.each do
|
||||
if tile['name'] == elem
|
||||
return tile['image']
|
||||
end
|
||||
end
|
||||
elsif elem.instance_of?(Integer)
|
||||
return @tiles[elem]['image']
|
||||
if elem <= self.tiles.size
|
||||
return self.tiles[elem]['image']
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -60,6 +63,34 @@ module Tailor
|
||||
io_obj.write(JSON.pretty_generate(obj))
|
||||
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)
|
||||
obj = {
|
||||
"name" => self.tileset_name,
|
||||
@@ -88,7 +119,7 @@ module Tailor
|
||||
end
|
||||
|
||||
idx = 0
|
||||
@tiles.each do |tile|
|
||||
self.tiles.each do |tile|
|
||||
StringIO.open do |iostream|
|
||||
if not callback.nil?
|
||||
callback.call("Converting to base64", tile['image'], tile['name'], idx)
|
||||
@@ -106,5 +137,6 @@ module Tailor
|
||||
|
||||
obj
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user