For #11 : Library palette control mostly functional

This commit is contained in:
2014-06-09 07:09:37 -07:00
parent ba5b671730
commit e2b5ba5808
3 changed files with 100 additions and 5 deletions

View File

@@ -0,0 +1,22 @@
module Tailor
module GUI
class ImageDisplay < Wx::Panel
def initialize(*args)
super(*args)
@bitmap = nil
end
def set_image image
@bitmap = image.to_bitmap
refresh
end
def on_draw dc
dc.set_background Wx::WHITE_BRUSH
dc.clear
return if @bitmap == nil
dc.draw_bitmap(@bitmap, 0, 0, true)
end
end
end
end

View File

@@ -3,6 +3,18 @@ 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)
@@ -57,6 +69,7 @@ module Tailor
idx = @tilesetList.append(@tileset.tileset_name)
@tilesetList.set_selection(idx)
refresh_image
event_handler.process_event(LibraryChangedEvent.new(self))
end
refresh
end
@@ -73,6 +86,7 @@ module Tailor
else
@previewPane.hide
end
event_handler.process_event(LibraryChangedEvent.new(self))
end
def on_ListDoubleClicked(event)

View File

@@ -4,6 +4,7 @@ require 'Tailor/Collection'
require 'Tailor/GUI/TilesetProperties'
require 'tailor/GUI/TilesetEditor'
require 'tailor/GUI/LibraryManager'
require 'tailor/GUI/ImageDisplay'
module Tailor
module GUI
@@ -56,15 +57,56 @@ module Tailor
@menuLibrary.enable(@menuLibraryManager.get_id, false)
end
def refresh_palette
if @palettePanel
@mainPanelSizer.detach(@palettePanel)
@palettePanel.destroy_children
@palettePanel.destroy
refresh
end
@palettePanel = Wx::ScrolledWindow.new(@mainPanel, Wx::ID_ANY)
@paletteSizer = Wx::BoxSizer.new(Wx::VERTICAL)
@paletteLibraryPanels = {}
@collection.library.each do |ts|
tsExpandCollapseBtn = Wx::Button.new(@palettePanel, Wx::ID_ANY, ts.tileset_name)
tsExpandCollapseBtn.set_min_size(
Wx::Size.new(256,
tsExpandCollapseBtn.get_size().height
)
)
@paletteSizer.add(tsExpandCollapseBtn, 0, flags = Wx::GROW)
tpanel = Wx::Panel.new(@palettePanel, Wx::ID_ANY)
tgridSizer = Wx::GridSizer.new(cols=2)
evt_button(tsExpandCollapseBtn.get_id()) { |event| on_LibExpandCollapseClicked(ts) }
ts.tiles.each do |tile|
tgridSizer.add(Wx::StaticBitmap.new(tpanel, Wx::ID_ANY, tile['image'].to_bitmap))
tgridSizer.add(Wx::StaticText.new(tpanel, Wx::ID_ANY, tile['name']))
end
tpanel.set_sizer(tgridSizer)
@paletteLibraryPanels[ts.tileset_name] = tpanel
@paletteSizer.add(tpanel, 0, Wx::EXPAND|Wx::ALL)
end
@palettePanel.enable_scrolling(false, true)
@palettePanel.set_scroll_rate(1, 1)
@palettePanel.set_min_size(Wx::Size.new(256, 256))
@palettePanel.set_sizer(@paletteSizer)
@paletteSizer.set_size_hints(@palettePanel)
@mainPanelSizer.add(@palettePanel, 1, Wx::EXPAND|Wx::ALL)
@mainPanelSizer.layout
end
def refresh_project
@mainPanel = Wx::Panel.new(self)
@mainPanelSizer = Wx::BoxSizer.new(Wx::HORIZONTAL)
@mainPanel.set_sizer(@mainPanelSizer)
@tilesetProperties = Tailor::GUI::TilesetProperties.new(@mainPanel, Wx::ID_ANY)
@mainPanelSizer.add(@tilesetProperties)
button = Wx::Button.new(@mainPanel, Wx::ID_ANY, "Open Tileset Editor")
button = Wx::Button.new(@mainPanel, Wx::ID_ANY, "(Replace with drag and drop target)")
evt_button(button.get_id()) { |event| on_clickme(event) }
@mainPanelSizer.add(button, 0, Wx::EXPAND|Wx::ALL, 2)
@mainPanelSizer.add(button, 1, Wx::EXPAND|Wx::ALL)
refresh_palette
@mainPanelSizer.set_size_hints(@mainPanel)
@mainPanelSizer.set_size_hints(self)
@@ -89,6 +131,17 @@ module Tailor
end
end
def on_LibExpandCollapseClicked(ts)
panel = @paletteLibraryPanels[ts.tileset_name]
if panel.is_shown
panel.show(show = false)
else
panel.show(show = true)
end
s = @paletteSizer.get_min_size()
@palettePanel.set_virtual_size(s)
end
def on_clickme(event)
puts "I don't do anything"
end
@@ -98,9 +151,15 @@ module Tailor
end
def on_library_manager
Tailor::GUI::LibraryManager.new(self,
tlm = Tailor::GUI::LibraryManager.new(self,
Wx::ID_ANY,
'Tailor :: Library :: Manager').show
'Tailor :: Library :: Manager')
tlm.show
evt_library_changed(tlm.get_id()) { |event| on_library_changed(event) }
end
def on_library_changed(event)
refresh_palette
end
def on_file_open