Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWalter Bender <walter@sugarlabs.org>2013-12-10 14:05:52 (GMT)
committer Walter Bender <walter@sugarlabs.org>2013-12-10 14:05:52 (GMT)
commit6c53416a12f20bd71b4efe590ca4200166189815 (patch)
tree92e690575557e1a821eaf5a7ae2293c940da3f1d
parenta4c58761b6343e66056d5f94ac31670b76810402 (diff)
add missing file
-rw-r--r--TurtleArt/taplugin.py117
1 files changed, 117 insertions, 0 deletions
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)