This repository has been archived on 2026-05-18. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
tailor/lib/tailor/GUI/LibraryManager.rb

120 lines
4.4 KiB
Ruby
Raw Normal View History

require 'wx'
require 'Tailor/Collection'
module Tailor
module GUI
class LibraryChangedEvent < Wx::CommandEvent
EVT_LIBRARY_CHANGED = Wx::EvtHandler.register_class(self,
nil,
"evt_library_changed",
1)
def initialize(source)
super(EVT_LIBRARY_CHANGED)
self.id = source.get_id
end
end
class LibraryManager < Wx::Frame
def initialize(*args)
super(*args)
@library = Tailor::Collection.instance.library
@tileset = nil
@panel = Wx::Panel.new(self)
@sizer = Wx::BoxSizer.new(Wx::VERTICAL)
horizSizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
vertSizer = Wx::BoxSizer.new(Wx::VERTICAL)
@tilesetList = Wx::ListBox.new(@panel,
Wx::ID_ANY,
Wx::DEFAULT_POSITION,
Wx::DEFAULT_SIZE,
@library.tileset_names,
Wx::LB_SORT | Wx::LB_SINGLE)
vertSizer.add(@tilesetList, 0, flags = Wx::EXPAND|Wx::ALL)
@addBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Add Tileset")
evt_button(@addBtn.get_id()) { |event| on_AddClicked(event) }
@removeBtn = Wx::Button.new(@panel, Wx::ID_ANY, "Remove Tileset")
evt_button(@removeBtn.get_id()) { |event| on_RemoveClicked(event) }
vertSizer.add(@addBtn, 1, flags = Wx::GROW)
vertSizer.add(@removeBtn, 1, flags = Wx::GROW)
horizSizer.add(vertSizer, 0, flags = Wx::EXPAND|Wx::ALL)
@previewPane = Tailor::GUI::GridDisplay.new(@panel,
Wx::ID_ANY,
Wx::DEFAULT_POSITION,
Wx::DEFAULT_SIZE,
Wx::VSCROLL | Wx::HSCROLL | Wx::ALWAYS_SHOW_SB)
@previewPane.set_min_size(Wx::Size.new(320, 240))
horizSizer.add(@previewPane, 1, flags=Wx::EXPAND|Wx::ALL)
@sizer.add(horizSizer, 1, flag=Wx::EXPAND|Wx::ALL)
@panel.set_sizer(@sizer)
@sizer.set_size_hints(self)
evt_listbox(@tilesetList) { |event| on_ListClicked(event) }
evt_listbox_dclick(@tilesetList) { |event| on_ListDoubleClicked(event) }
if @tilesetList.get_count > 0
@tilesetList.set_selection(0)
on_ListClicked(nil)
end
show()
end
def on_AddClicked(event)
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 = @library.load_tileset(fd.get_path)
idx = @tilesetList.append(@tileset.tileset_name)
@tilesetList.set_selection(idx)
refresh_image
event_handler.process_event(LibraryChangedEvent.new(self))
end
refresh
end
def on_RemoveClicked(event)
idx = @tilesetList.get_selection
name = @tilesetList.get_string_selection
@library.delete(name)
@tilesetList.deselect(idx)
@tilesetList.delete(idx)
if @tilesetList.get_count > 0
@tilesetList.set_selection(0)
on_ListClicked(nil)
else
@previewPane.hide
end
event_handler.process_event(LibraryChangedEvent.new(self))
end
def on_ListDoubleClicked(event)
@tileset = @library.by_name(@tilesetList.get_string_selection)
editor = Tailor::GUI::TilesetEditor.new(self, Wx::ID_ANY)
editor.set_tileset(@tileset)
editor.disable_load
editor.disable_import
editor.show
if (editor.has_saved and (not editor.has_loaded))
on_RemoveClicked
idx = @tilesetList.append(@tileset.tileset_name)
@tilesetList.set_selection(idx)
on_ListClicked
end
end
def on_ListClicked(event)
@tileset = @library.by_name(@tilesetList.get_string_selection)
refresh_image
end
def refresh_image
@previewPane.set_tileset(@tileset)
@previewPane.show
end
end
end
end