diff options
Diffstat (limited to 'tutorius/creator.py')
-rw-r--r-- | tutorius/creator.py | 62 |
1 files changed, 55 insertions, 7 deletions
diff --git a/tutorius/creator.py b/tutorius/creator.py index 6ba7011..92344d2 100644 --- a/tutorius/creator.py +++ b/tutorius/creator.py @@ -32,7 +32,7 @@ import os from sugar.graphics import icon, style import jarabe.frame -from . import overlayer, gtkutils, vault, addon +from . import overlayer, gtkutils, vault, addon, translator from .tutorial import Tutorial from . import viewer from .propwidgets import TextInputDialog @@ -91,7 +91,7 @@ class Creator(Object): if Creator._instance: raise RuntimeError("Creator was already instanciated") Creator._instance = self - self._probe_mgr = probe_manager + self._probe_mgr_unwrapped = probe_manager self._installed_actions = list() def start_authoring(self, tutorial=None): @@ -130,8 +130,23 @@ class Creator(Object): self._selected_widget = None self._eventmenu = None self.tuto = None - self._guid = None - self.metadata = None + + self._guid = str(uuid.uuid1()) + self._metadata = { + vault.INI_GUID_PROPERTY: self._guid, + vault.INI_NAME_PROPERTY: '', + vault.INI_VERSION_PROPERTY: '1', + } + + related_activities_dict = {} + self._metadata['activities'] = dict(related_activities_dict) + # Save Tutorial right now, so resource can be added right now. + # If the tutorial is still unnamed at quit it will be removed. + vault.Vault.saveTutorial(self._tutorial, self._metadata) + + self._probe_mgr = translator.ResourceTranslator( + self._probe_mgr_unwrapped, + self._guid) frame = jarabe.frame.get_view() @@ -306,8 +321,17 @@ class Creator(Object): """ event_type = self._propedit.events_list[path][ToolBox.ICON_NAME] - event = self._probe_mgr.create_event(event_type) + event = self._probe_mgr.create_event(event_type, + event_created_cb=partial(self._event_created, event_type)) + def _event_created(self, event_type, event): + """ + Callback to execute when the creation of a new event is complete. + + @param event_type The type of event that was created + @param event The event that was instanciated + """ + LOGGER.debug("Creator :: _event_created, now setting source and adding inside tutorial") # Configure the event prior to installing it # Currently, this consists of writing its source event.source = self._probe_mgr.currentActivity @@ -393,13 +417,18 @@ class Creator(Object): self._overview.destroy() self.is_authoring = False + # remove unsaved tutorial remains + if not self._metadata[vault.INI_NAME_PROPERTY]: + LOGGER.debug("Creator :: removing unsaved tutorial %s" % \ + str(self._guid)) + vault.Vault.deleteTutorial(self._guid) + def save(self, widget=None): """ Save the currently edited tutorial to bundle, prompting for a name as needed. """ - if not self._guid: - self._guid = str(uuid.uuid1()) + if not self._metadata[vault.INI_NAME_PROPERTY]: dlg = TextInputDialog(parent=self._overview.win, text=T("Enter a tutorial title."), field=T("Title")) @@ -432,6 +461,7 @@ class Creator(Object): related_activities_dict[activity_name] = str(bundle.get_activity_version()) self._metadata['activities'] = dict(related_activities_dict) + self._metadata[vault.INI_NAME_PROPERTY] = tutorial_name vault.Vault.saveTutorial(self._tutorial, self._metadata) @@ -465,6 +495,24 @@ class Creator(Object): """ return self.is_authoring + def set_resource(self, resource_id, file_path): + """ + Adds a resource to the currently edited tutorial. + This is intended for use by the property widgets to update resources + without knowing anything about the vault and tutorial GUID. + + @param resource_id: the id of the resource to update, or an empty + string for a new resource. + @param file_path: the path to the resource to use for update. + @returns the new resource_id + """ + LOGGER.debug("Creator :: Updating resource from '%s'" % file_path) + + if resource_id: + vault.Vault.delete_resource(self._guid, resource_id) + + return str(vault.Vault.add_resource(self._guid, file_path)) + def update_addon_property(self, addon_address, diff_dict): """ Updates the properties on an addon. |