From 6c53416a12f20bd71b4efe590ca4200166189815 Mon Sep 17 00:00:00 2001 From: Walter Bender Date: Tue, 10 Dec 2013 14:05:52 +0000 Subject: add missing file --- diff --git a/TurtleArt/taplugin.py b/TurtleArt/taplugin.py new file mode 100644 index 0000000..4cf2563 --- /dev/null +++ b/TurtleArt/taplugin.py @@ -0,0 +1,117 @@ +#Copyright (c) 2013 Walter Bender +#Copyright (c) 2013 Daniel Francis + +#Permission is hereby granted, free of charge, to any person obtaining a copy +#of this software and associated documentation files (the "Software"), to deal +#in the Software without restriction, including without limitation the rights +#to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +#copies of the Software, and to permit persons to whom the Software is +#furnished to do so, subject to the following conditions: + +#The above copyright notice and this permission notice shall be included in +#all copies or substantial portions of the Software. + +#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +#IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +#FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +#AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +#LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +#OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +#THE SOFTWARE. + +import ConfigParser +from gettext import gettext as _ +import os +import shutil +import subprocess +from TurtleArt.tapalette import (palette_names, help_strings) + + +def cancel_plugin_install(self, tmp_dir): + ''' If we cancel, just cleanup ''' + shutil.rmtree(tmp_dir) + + +def complete_plugin_install(self, tmp_dir, tmp_path, plugin_path, + plugin_name, file_info): + ''' We complete the installation directly or from ConfirmationAlert ''' + status = subprocess.call(['cp', '-r', tmp_path, plugin_path + '/']) + if status == 0: + # Save the plugin.info file in the plugin directory + subprocess.call(['cp', os.path.join(tmp_dir, 'plugin.info'), + os.path.join(plugin_path, plugin_name) + '/']) + if self.has_toolbarbox: + palette_name_list = [] + if file_info.has_option('Plugin', 'palette'): + palette_name_list = file_info.get( + 'Plugin', 'palette').split(',') + create_palette = [] + for palette_name in palette_name_list: + if not palette_name.strip() in palette_names: + create_palette.append(True) + else: + create_palette.append(False) + self.tw.init_plugin(plugin_name) + self.tw.turtleart_plugins[-1].setup() + self.tw.load_media_shapes() + for i, palette_name in enumerate(palette_name_list): + if create_palette[i]: + j = len(self.palette_buttons) + self.palette_buttons.append( + self._radio_button_factory( + palette_name.strip() + 'off', + self._palette_toolbar, + self.do_palette_buttons_cb, + j - 1, + help_strings[palette_name.strip()], + self.palette_buttons[0])) + self._overflow_buttons.append( + self._add_button( + palette_name.strip() + 'off', + None, + self.do_palette_buttons_cb, + None, + arg=j - 1)) + self._overflow_box.pack_start( + self._overflow_buttons[j - 1]) + self.tw.palettes.insert(j - 1, []) + self.tw.palette_sprs.insert(j - 1, [None, None]) + else: + # We need to change the index associated with the + # Trash Palette Button. + j = len(palette_names) + pidx = palette_names.index(palette_name.strip()) + self.palette_buttons[pidx].connect( + 'clicked', self.do_palette_buttons_cb, j - 1) + self._overflow_buttons[pidx].connect( + 'clicked', self.do_palette_buttons_cb, j - 1) + self._setup_palette_toolbar() + else: + self.tw.showlabel('status', label=_('Please restart Turtle Art \ +in order to use the plugin.')) + else: + self.tw.showlabel('status', label=_('Plugin could not be installed.')) + status = subprocess.call(['rm', '-r', tmp_path]) + shutil.rmtree(tmp_dir) + + +def load_a_plugin(self, tmp_dir): + ''' Load a plugin from the Journal and initialize it ''' + plugin_path = os.path.join(tmp_dir, 'plugin.info') + file_info = ConfigParser.ConfigParser() + if len(file_info.read(plugin_path)) == 0: + self.tw.showlabel('status', + label=_('Plugin could not be installed.')) + elif not file_info.has_option('Plugin', 'name'): + self.tw.showlabel( + 'status', label=_('Plugin could not be installed.')) + else: + plugin_name = file_info.get('Plugin', 'name') + tmp_path = os.path.join(tmp_dir, plugin_name) + plugin_path = os.path.join(self.bundle_path, 'plugins') + if os.path.exists(os.path.join(plugin_path, plugin_name)): + self._reload_plugin_alert(tmp_dir, tmp_path, plugin_path, + plugin_name, file_info) + else: + complete_plugin_install(self, tmp_dir, tmp_path, plugin_path, + plugin_name, file_info) -- cgit v0.9.1