Example #1
0
    def __init__(self):
        super(LevelEditor, self).__init__(gtk.WINDOW_TOPLEVEL)

        self.zoom_level = 0.5

        self.set_title('The Cure - Level Editor')
        self.set_border_width(0)
        self.set_resizable(True)
        self.set_size_request(1024, 768)
        self.connect('delete_event', gtk.main_quit)
        self.connect('key-press-event', self._on_key_press)

        hpaned = gtk.HPaned()
        hpaned.show()
        self.add(hpaned)
        hpaned.set_position(self.get_size_request()[0] - 300)

        # Sidebar
        self.sidebar = gtk.VBox(False, 6)
        self.sidebar.show()
        self.sidebar.set_border_width(6)
        hpaned.pack2(self.sidebar)

        # Level selector
        hbox = gtk.HBox(False, 6)
        hbox.show()
        self.sidebar.pack_start(hbox, False, False, 0)

        self.level_combo = gtk.combo_box_new_text()
        self.level_combo.show()
        hbox.pack_start(self.level_combo, True, True, 0)

        save_button = gtk.Button("Save")
        save_button.show()
        hbox.pack_start(save_button, False, False, 0)
        save_button.connect('clicked', lambda w: self.save())

        for level in get_levels():
            self.level_combo.append_text(level.name)

        self.level_combo.connect('changed', lambda w: self.load_level())

        # Level Size
        hbox = gtk.HBox(False, 6)
        hbox.show()
        self.sidebar.pack_start(hbox, False, False, 0)

        label = gtk.Label("Size:")
        label.show()
        hbox.pack_start(label, False, False, 0)

        self.width_entry = gtk.Entry()
        self.width_entry.show()
        hbox.pack_start(self.width_entry, False, False, 0)
        self.width_entry.set_width_chars(4)
        self.width_entry.connect('focus-out-event', self._on_width_focus_out)

        label = gtk.Label("x")
        label.show()
        hbox.pack_start(label, False, False, 0)

        self.height_entry = gtk.Entry()
        self.height_entry.show()
        hbox.pack_start(self.height_entry, False, False, 0)
        self.height_entry.set_width_chars(4)
        self.height_entry.connect('focus-out-event', self._on_height_focus_out)

        # Layer selector
        self.layer_combo = gtk.combo_box_new_text()
        self.layer_combo.show()
        self.sidebar.pack_start(self.layer_combo, False, False, 0)

        for name in LAYER_NAMES:
            self.layer_combo.append_text(name)

        self.layer_combo.connect('changed', lambda w: self._on_layer_changed())

        self.show_only = gtk.CheckButton('Show only this layer')
        self.show_only.show()
        self.sidebar.pack_start(self.show_only, False, False, 0)
        self.show_only.connect('toggled',
                               self._on_show_active_layer_only_toggled)

        self.show_all = gtk.CheckButton('Always show all layers')
        self.show_all.show()
        self.sidebar.pack_start(self.show_all, False, False, 0)
        self.show_all.connect('toggled', self._on_show_all_layers_toggled)

        # Sprite pane
        self.sprite_pane = SpritePane(self)
        #self.sprite_pane.show()
        self.sidebar.pack_start(self.sprite_pane, True, True, 0)

        # Event box pane
        self.eventbox_pane = EventBoxPane(self)
        self.eventbox_pane.show()
        self.sidebar.pack_start(self.eventbox_pane, True, True, 0)

        # Coordinates status
        hbox = gtk.HBox(False, 0)
        hbox.show()
        self.sidebar.pack_start(hbox, False, False, 0)

        label = gtk.Label("Tile: ")
        label.show()
        hbox.pack_start(label, False, False, 0)

        self.tile_coord_label = gtk.Label()
        self.tile_coord_label.show()
        hbox.pack_start(self.tile_coord_label, False, False, 0)

        label = gtk.Label("; Pixels: ")
        label.show()
        hbox.pack_start(label, False, False, 0)

        self.pixels_coord_label = gtk.Label()
        self.pixels_coord_label.show()
        hbox.pack_start(self.pixels_coord_label, False, False, 0)

        # Level grid
        swin = gtk.ScrolledWindow()
        swin.show()
        hpaned.pack1(swin)
        swin.set_shadow_type(gtk.SHADOW_IN)
        swin.set_policy(gtk.POLICY_ALWAYS, gtk.POLICY_ALWAYS)

        self.level_grid = LevelGrid(self, self.sprite_pane.tile_list)
        self.level_grid.show()
        swin.add(self.level_grid)

        self.level_combo.set_active(0)
        self.layer_combo.set_active(DEFAULT_LAYER)