123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216 |
- class GUI
- attr_reader :workspace, :gui, :tileselector, :objectselector
- def run()
-
- @gui.run()
- end
- def initialize(datadir = "../data")
- @datadir = datadir
-
- @editor = Editor.new()
- @gui = @editor.get_gui_manager()
- myrect = CL_Rect.new(CL_Point.new(0, 56), CL_Size.new(665, 488+56))
- @editor_map = EditorMapComponent.new(myrect, @gui.get_component())
- @workspace = Workspace.new(myrect.get_width(), myrect.get_height())
- @editor_map.set_workspace(@workspace)
- @minimap = Minimap.new(@editor_map, CL_Rect.new(CL_Point.new(3 + myrect.left,
- 488+3-14 + myrect.top),
- CL_Size.new(794-134-16, 50)),
- @gui.get_component())
- @button_panel = ButtonPanel.new(0, 23, 800, 33, true, @gui.get_component)
- @button_panel.add_icon(@datadir + "/images/icons24/stock_new.png")
- @button_panel.add_icon(@datadir + "/images/icons24/stock_open.png", proc{ level_load() })
- @button_panel.add_small_icon(@datadir + "/images/icons24/downarrow.png", proc{ $controller.recent_files_menu.run() })
- @button_panel.add_icon(@datadir + "/images/icons24/stock_save.png", proc{ level_save() })
- @button_panel.add_icon(@datadir + "/images/icons24/stock_save_as.png", proc{ level_save_as() })
- @button_panel.add_separator()
- @button_panel.add_icon(@datadir + "/images/icons24/stock_copy.png")
- @button_panel.add_icon(@datadir + "/images/icons24/stock_paste.png")
- @button_panel.add_separator()
- @undo_icon = @button_panel.add_icon(@datadir + "/images/icons24/stock_undo.png", proc{ @workspace.get_map().undo() })
- @redo_icon = @button_panel.add_icon(@datadir + "/images/icons24/stock_redo.png", proc{ @workspace.get_map().redo() })
- @undo_icon.disable()
- @redo_icon.disable()
- @button_panel.add_separator()
- @minimap_icon = @button_panel.add_icon(@datadir + "/images/icons24/minimap.png", proc{ toggle_minimap() })
- @grid_icon = @button_panel.add_icon(@datadir + "/images/icons24/grid.png", proc{ toggle_grid() })
- @button_panel.add_separator()
- @button_panel.add_icon(@datadir + "/images/icons24/background.png")
- @button_panel.add_icon(@datadir + "/images/icons24/interactive.png")
- @button_panel.add_icon(@datadir + "/images/icons24/foreground.png")
- @button_panel.add_icon(@datadir + "/images/icons24/eye.png")
- @layer_menu = Menu.new(CL_Point.new(32*15+2, 54), @gui.get_component())
-
- @toolbar = ButtonPanel.new(0, 23+33, 33, 32*4+2, false, @gui.get_component)
- @paint = @toolbar.add_icon(@datadir + "/images/tools/stock-tool-pencil-22.png", proc{ $controller.set_tilemap_paint_tool() })
- @select = @toolbar.add_icon(@datadir + "/images/tools/stock-tool-rect-select-22.png", proc{ $controller.set_tilemap_select_tool() })
- @zoom = @toolbar.add_icon(@datadir + "/images/tools/stock-tool-zoom-22.png", proc{ $controller.set_zoom_tool() })
- @object = @toolbar.add_icon(@datadir + "/images/tools/stock-tool-clone-22.png", proc{ $controller.set_objmap_select_tool() })
-
-
-
-
- @layer_menu.add_item($mysprite, "Show all", proc{ show_all() })
- @layer_menu.add_item($mysprite, "Show current", proc{ show_current() })
- @layer_menu.add_item($mysprite, "Show only current", proc{ show_only_current() })
- @menu = CL_Menu.new(@gui.get_component())
- @menu.add_item("File/Open...", proc{ level_load() })
- @menu.add_item("File/Save...", proc{ level_save() })
-
- @menu.add_item("File/Save As...", proc{ level_save_as() })
- @menu.add_item("File/Quit", proc{ @gui.quit() })
- @menu.add_item("Edit/Resize", proc{ resize_level() })
- @menu.add_item("Edit/Resize to selection", proc{ resize_level_to_selection()})
-
- @menu.add_item("Zoom/1:4 (25%) ", proc{ set_zoom(0.25) })
- @menu.add_item("Zoom/1:2 (50%) ", proc{ set_zoom(0.5) })
- @menu.add_item("Zoom/1:1 (100%) ", proc{ set_zoom(1.0) })
- @menu.add_item("Zoom/2:1 (200%) ", proc{ set_zoom(2.0) })
- @menu.add_item("Zoom/4:1 (400%) ", proc{ set_zoom(4.0) })
- @load_dialog = SimpleFileDialog.new("Load SuperTux Level", "Load", "Cancel", @gui.get_component())
- @load_dialog.set_filename($datadir + "levels/")
- @save_dialog = SimpleFileDialog.new("Save SuperTux Level as...", "Save", "Cancel", @gui.get_component())
- @save_dialog.set_filename($datadir + "levels/")
- toggle_minimap()
-
-
-
-
- @selector_window = Panel.new(CL_Rect.new(CL_Point.new(800-134, 23+33), CL_Size.new(128 + 6, 558)),
- @gui.get_component())
- @tileselector = TileSelector.new(CL_Rect.new(CL_Point.new(3, 3), CL_Size.new(128, 552)), @selector_window)
- @tileselector.set_tileset($tileset)
- @tileselector.set_scale(0.5)
- @tileselector.set_tiles($tileset.get_tiles())
- @tileselector.show(true)
-
- @objectselector = ObjectSelector.new(CL_Rect.new(0, 0, 128, 256), 42, 42, @selector_window)
- @objectselector.show(false)
- connect_v1_ObjMapObject(@objectselector.sig_drop(), proc{ on_object_drop() })
- connect_v2(@editor_map.sig_on_key("f1"), proc{ |x, y| toggle_minimap()})
- connect_v2(@editor_map.sig_on_key("m"), proc{ |x, y| toggle_minimap()})
- connect_v2(@editor_map.sig_on_key("g"), proc{ |x, y| toggle_grid()})
- connect_v2(@editor_map.sig_on_key("4"), proc{ |x, y| toggle_display_props()})
- connect_v2(@editor_map.sig_on_key("3"), proc{ |x, y| show_foreground()})
- connect_v2(@editor_map.sig_on_key("2"), proc{ |x, y| show_interactive()})
- connect_v2(@editor_map.sig_on_key("1"), proc{ |x, y| show_background()})
- end
- def level_load()
- print "level_load\n"
- end
- def level_save()
- print "level_save\n"
- end
- def level_save_as()
- print "level_save_as\n"
- end
-
- def toggle_minimap()
- if @minimap.is_visible()
- @minimap.show(false)
- @minimap_icon.set_up()
- else
- @minimap.show(true)
- @minimap_icon.set_down()
- end
- end
- def toggle_grid()
- tilemap = @workspace.get_map().get_metadata().layers[0];
- tilemap.set_draw_grid(!tilemap.get_draw_grid())
- if tilemap.get_draw_grid()
- @grid_icon.set_down()
- else
- @grid_icon.set_up()
- end
- end
- def set_tilemap_paint_tool()
- @paint.set_down()
- @select.set_up()
- @zoom.set_up()
- @object.set_up()
- end
- def set_tilemap_select_tool()
- @paint.set_up()
- @select.set_down()
- @zoom.set_up()
- @object.set_up()
- end
- def set_zoom_tool()
- @paint.set_up()
- @select.set_up()
- @zoom.set_down()
- @object.set_up()
- end
- def set_objmap_select_tool()
- @paint.set_up()
- @select.set_up()
- @zoom.set_up()
- @object.set_down()
- end
- def set_zoom(zoom)
- gc = @editor_map.get_workspace().get_gc_state()
- pos = gc.get_pos()
- gc.set_zoom(zoom)
- gc.set_pos(pos)
- end
- end
|