Skip to content

Commit

Permalink
Added ability to import fife object files.
Browse files Browse the repository at this point in the history
  • Loading branch information
Beliar83 committed Feb 17, 2015
1 parent 8d73234 commit 3c91ed1
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 1 deletion.
5 changes: 5 additions & 0 deletions editor/object_toolbar.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ def __init__(self, editor):
mode.listener.add_callback("key_pressed",
self.cb_key_pressed)
self.editor.add_project_clear_callback(self.cb_project_closed)
self.editor.add_objects_imported_callback(self.cb_objects_imported)

@property
def selected_layer(self):
Expand Down Expand Up @@ -698,3 +699,7 @@ def cb_project_closed(self):
self.items_panel.destroyChild(self.items)
self.items = self.items_panel.createChild("VerticalLayoutContainer",
"Items")

def cb_objects_imported(self):
"""Called when objects where imported to the project"""
self.have_objects_changed = True
71 changes: 70 additions & 1 deletion fife_rpg_editor.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
import PyCEGUI

from fife.extensions.fife_settings import Setting
from fife.fife import MapSaver
from fife.fife import MapSaver, MapLoader
from fife_rpg import RPGApplicationCEGUI
from fife.extensions.serializers import ET
from fife.extensions.serializers.simplexml import (SimpleXMLSerializer,
Expand Down Expand Up @@ -101,6 +101,8 @@ def __init__(self, setting):
self.save_popup = None
self.save_entities_popup = None
self.project_menu = None
self.file_import = None
self.import_popup = None

self.__loadData()
window_manager = PyCEGUI.WindowManager.getSingleton()
Expand Down Expand Up @@ -155,6 +157,7 @@ def __init__(self, setting):
self.add_map_load_callback(self.cb_map_loaded)
self.map_entities = None
self.entities = {}
self._objects_imported_callbacks = []

def __loadData(self): # pylint: disable=no-self-use, invalid-name
"""Load gui datafiles"""
Expand Down Expand Up @@ -189,6 +192,20 @@ def create_menu(self):
file_open = file_popup.createChild("TaharezLook/MenuItem", "FileOpen")
file_open.subscribeEvent(PyCEGUI.MenuItem.EventClicked, self.cb_open)
file_open.setText(_("Open Project"))
file_import = file_popup.createChild(
"TaharezLook/MenuItem", "FileImport")
file_import.setText(_("Import") + " ")
file_import.setEnabled(False)
file_import.setAutoPopupTimeout(0.5)
self.file_import = file_import
import_popup = file_import.createChild("TaharezLook/PopupMenu",
"ImportPopup")
self.import_popup = import_popup
import_objects = import_popup.createChild("TaharezLook/MenuItem",
"FileImportObjects")
import_objects.setText(_("Objects"))
import_objects.subscribeEvent(PyCEGUI.MenuItem.EventClicked,
self.cb_import_objects)
file_save = file_popup.createChild("TaharezLook/MenuItem", "FileSave")
file_save.setText(_("Save") + " ")
file_save.setEnabled(False)
Expand Down Expand Up @@ -298,13 +315,15 @@ def clear(self):
self.project_dir = None
self.project = None
self.file_save.setEnabled(False)
self.file_import.setEnabled(False)
self.file_close.setEnabled(False)
self.file_p_settings.setEnabled(False)
self.reset_maps_menu()
for callback in self._project_cleared_callbacks:
callback()
self.view_maps_menu.closePopupMenu()
self.save_popup.closePopupMenu()
self.import_popup.closePopupMenu()
self.save_maps_popup.closePopupMenu()

def load_project(self, filepath):
Expand Down Expand Up @@ -342,6 +361,7 @@ def load_project(self, filepath):
pass
self.file_close.setEnabled(True)
self.file_save.setEnabled(True)
self.file_import.setEnabled(True)
self.file_p_settings.setEnabled(True)
return True
return False
Expand Down Expand Up @@ -488,6 +508,27 @@ def remove_project_clear_callback(self, callback):
index = self._project_cleared_callbacks.index(callback)
del self._project_cleared_callbacks[index]

def add_objects_imported_callback(self, callback):
"""Adds a callback function which gets called after objects where
imported.
Args:
callback: The function to add
"""
if callback not in self._objects_imported_callbacks:
self._objects_imported_callbacks.append(callback)

def remove_objects_imported_callback(self, callback):
"""Removes a callback function that got called after objects where
imported.
Args:
callback: The function to remove
"""
if callback in self._objects_imported_callbacks:
index = self._objects_imported_callbacks.index(callback)
del self._objects_imported_callbacks[index]

def entity_constructor(self, loader, node):
"""Constructs an Entity from a yaml node
Expand Down Expand Up @@ -1002,6 +1043,34 @@ def cb_show_agent_selection_changed(self, args):
else:
self.hide_map_entities(self.current_map.name)

def cb_import_objects(self, args):
"""Callback when objects was clicked in the file->import menu"""
self.import_popup.closePopupMenu()
import Tkinter
import tkFileDialog
window = Tkinter.Tk()
window.wm_withdraw()

# Based on code from unknown-horizons
try:
selected_file = tkFileDialog.askopenfilename(
filetypes=[("fife object definition", ".xml",)],
initialdir=self.project_dir,
title="import objects")
except ImportError:
# tkinter may be missing
selected_file = ""

if selected_file:
selected_file = os.path.relpath(selected_file, self.project_dir)
loader = MapLoader(self.engine.getModel(),
self.engine.getVFS(),
self.engine.getImageManager(),
self.engine.getRenderBackend())
loader.loadImportFile(selected_file.encode())
for callback in self._objects_imported_callbacks:
callback()


def update_settings(project, settings, values):
"""Update the fife-rpg settings of a project
Expand Down

0 comments on commit 3c91ed1

Please sign in to comment.