[Debian-live-changes] r2212 - in dists/trunk/live-magic: . debian livemagic livemagic/controllers livemagic/model livemagic/views

lamby-guest at alioth.debian.org lamby-guest at alioth.debian.org
Tue Jun 19 15:51:42 UTC 2007


Author: lamby-guest
Date: 2007-06-19 15:51:42 +0000 (Tue, 19 Jun 2007)
New Revision: 2212

Added:
   dists/trunk/live-magic/livemagic/
   dists/trunk/live-magic/livemagic/controllers/hooks.py
   dists/trunk/live-magic/livemagic/controllers/main.py
   dists/trunk/live-magic/livemagic/model/folder_of_files.py
   dists/trunk/live-magic/livemagic/views/build.py
   dists/trunk/live-magic/livemagic/views/hooks.py
   dists/trunk/live-magic/livemagic/views/main.py
Removed:
   dists/trunk/live-magic/livemagic/controllers/hooks.py
   dists/trunk/live-magic/livemagic/controllers/main.py
   dists/trunk/live-magic/livemagic/main.py
   dists/trunk/live-magic/livemagic/model/folder_of_files.py
   dists/trunk/live-magic/livemagic/views/build.py
   dists/trunk/live-magic/livemagic/views/hooks.py
   dists/trunk/live-magic/livemagic/views/main.py
   dists/trunk/live-magic/src/
Modified:
   dists/trunk/live-magic/debian/changelog
   dists/trunk/live-magic/debian/rules
   dists/trunk/live-magic/livemagic/model/__init__.py
Log:


Modified: dists/trunk/live-magic/debian/changelog
===================================================================
--- dists/trunk/live-magic/debian/changelog	2007-06-19 15:48:35 UTC (rev 2211)
+++ dists/trunk/live-magic/debian/changelog	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,4 +1,4 @@
-live-guihelper (0.1-1) UNRELEASED; urgency=low
+live-magic (0.1-1) unstable; urgency=low
 
   * Initial release.
 

Modified: dists/trunk/live-magic/debian/rules
===================================================================
--- dists/trunk/live-magic/debian/rules	2007-06-19 15:48:35 UTC (rev 2211)
+++ dists/trunk/live-magic/debian/rules	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,6 +1,6 @@
 #!/usr/bin/make -f
 
-DEB_PYTHON_SYSTEM=pycentral
+DEB_PYTHON_SYSTEM=pysupport
 
 include /usr/share/cdbs/1/rules/debhelper.mk
 include /usr/share/cdbs/1/class/python-distutils.mk

Copied: dists/trunk/live-magic/livemagic (from rev 2157, dists/trunk/live-magic/src)

Deleted: dists/trunk/live-magic/livemagic/controllers/hooks.py
===================================================================
--- dists/trunk/live-magic/src/controllers/hooks.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/controllers/hooks.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,26 +0,0 @@
-
-class HooksController(object):
-    def __init__(self):
-        self.model.attach_load_observer(self.notify_load_hooks)
-
-    def notify_load_hooks(self):
-        self.view.do_hooks_clear()
-        for filename, contents in self.model.hooks.files.itervalues():
-            self.view.do_hook_add(filename, contents)
-
-    def on_button_hook_new_clicked(self, *_):
-        filename = self.view.do_show_new_hook_window()
-        if filename is not None:
-            if len(filename) > 0:
-                self.model.hooks['filename'] = ''
-            else:
-                self.view.do_show_new_hook_invalid_name()
-
-    def on_button_hook_import_clicked(self, *_):
-        print "import"
-
-    def on_button_hook_rename_clicked(self, *_):
-        print "rename"
-
-    def on_button_hook_delete_clicked(self, *_):
-        print "delete"

Copied: dists/trunk/live-magic/livemagic/controllers/hooks.py (from rev 2209, dists/trunk/live-magic/src/controllers/hooks.py)
===================================================================
--- dists/trunk/live-magic/livemagic/controllers/hooks.py	                        (rev 0)
+++ dists/trunk/live-magic/livemagic/controllers/hooks.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -0,0 +1,64 @@
+
+class HooksController(object):
+    def __init__(self):
+        self.model.attach_load_observer(self.notify_load_hooks)
+        self.hook_select_triggers_change = True
+
+    def on_hook_select(self, *_):
+        self.hook_select_triggers_change = False
+        hook_name = self.view.get_selected_hook()
+        contents = self.model.hooks[hook_name]
+        self.view.do_set_selected_hook_contents(contents)
+        self.hook_select_triggers_change = True
+
+    def notify_load_hooks(self):
+        self.view.do_hooks_clear()
+        for filename in sorted(self.model.hooks.files.iterkeys()):
+            self.view.do_hook_add(filename)
+
+    def _new_hook_template(self, hook_name):
+        # Try and guess the interpreter for the specified filename
+        try:
+            interpreter = {
+                "rb" : "#!/usr/bin/env ruby",
+                "pl" : "#!/usr/bin/perl",
+                "py" : "#!/usr/bin/env python",
+            }[hook_name.rsplit(".")[1]]
+        except (KeyError, IndexError):
+            # Can't guess: assume it's a shell script.
+            interpreter = "#!/bin/sh"
+
+        return "%s\n\n# %s -- description_of_hook\n\n" % (interpreter, hook_name)
+
+    def on_button_hook_new_clicked(self, *_):
+        hook_name = self.view.do_show_new_hook_window()
+        if hook_name is not None:
+            if len(hook_name) > 0 and hook_name not in self.model.hooks:
+
+                self.model.hooks[hook_name] = self._new_hook_template(hook_name)
+                self.view.set_save_enabled(True)
+                self.notify_load_hooks()
+                self.view.do_set_selected_hook(hook_name)
+                self.view.do_set_selected_hook_contents(self.model.hooks[hook_name])
+            else:
+                self.view.do_show_new_hook_invalid_name()
+
+    def on_button_hook_import_clicked(self, *_):
+        filename = self.view.do_show_hook_import_dialog()
+        if filename is not None:
+            hook_name = self.model.hooks.import_file(filename)
+            self.notify_load_hooks()
+            self.view.do_set_selected_hook(hook_name)
+            self.view.set_save_enabled(True)
+
+    def on_button_hook_rename_clicked(self, *_):
+        print "rename called for", self.view.get_selected_hook()
+
+    def on_button_hook_delete_clicked(self, *_):
+        print "delete called for", self.view.get_selected_hook()
+
+    def on_hook_editor_changed(self, *_):
+        if self.hook_select_triggers_change:
+            self.view.set_save_enabled(True)
+        hook = self.view.get_selected_hook()
+        self.model.hooks[hook] = self.view.get_hook_editor_contents()

Deleted: dists/trunk/live-magic/livemagic/controllers/main.py
===================================================================
--- dists/trunk/live-magic/src/controllers/main.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/controllers/main.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,87 +0,0 @@
-import gtk
-from model import KeyVarConfigFile
-
-class MainController(object):
-    def __init__(self):
-        self.model.attach_load_observer(self.notify_load)
-
-    def notify_load(self):
-        for child in self.model.children:
-            # Check we are dealing with normal configuration values
-            if type(child) is KeyVarConfigFile:
-                for key in child:
-                    # Set the value in the view
-                    self.view.do_set_key_var(child.shortname, key, getattr(child, key))
-
-    def init_view(self):
-        """
-        Called by the view when it is ready for setup.
-        """
-        sections = ['common', 'chroot', 'binary', 'bootstrap', 'source', 'hooks']
-        self.view.setup_sections(sections)
-
-        # Notify all the observers that depend on the model
-        self.model.notify_load_observers()
-
-    # GTK callbacks
-    def on_live_helper_value_changed(self, widget):
-        namespace, key = widget.name.split("/")
-        value = widget.get_text()
-
-        # Call self.model.namespace.key = vaulue
-        ns = getattr(self.model, namespace)
-        setattr(ns, key, value)
-
-        # Variables have been tainted, allow saving
-        self.view.set_save_enabled(True)
-
-    def on_choose_section(self, button):
-        self.view.do_select_section(button)
-
-    def on_new(self, *_):
-        if self.model.altered():
-            print "Not newing as not saved"
-        else:
-            self.model.new()
-        self.view.set_save_enabled(True)
-
-    def on_open(self, *_):
-        def open_dialog(self):
-            res, filename = self.view.do_folder_open()
-            if res == gtk.RESPONSE_ACCEPT:
-                try:
-                    self.model.open(filename)
-                    self.view.set_save_enabled(False)
-                except IOError:
-                    self.view.do_show_loading_error()
-        return self._confirm_save(lambda: open_dialog(self), quit_dialog=False)
-
-    def on_save(self, *_):
-        self.view.set_save_enabled(False)
-        self.view.set_status_bar("Saving configuration to %s ..." % self.model.dir)
-        self.model.save()
-        self.view.set_status_bar("Saved configuration to %s" % self.model.dir)
-
-    def on_save_as(self, *_):
-        raise NotImplemented
-
-    def _confirm_save(self, fn, **kw):
-        if self.model.altered():
-            res = self.view.do_confirm_save(**kw)
-            if res == gtk.RESPONSE_ACCEPT: # Save
-                self.on_save(None)
-                fn()
-            elif res == gtk.RESPONSE_REJECT: # Don't save
-                fn()
-            else:
-                return True # Cancel
-        else:
-            # We are up to date
-            fn()
-
-    def on_quit_request(self, *_):
-        return self._confirm_save(lambda: gtk.main_quit(), quit_dialog=True)
-
-    def on_about_activate(self, *_):
-        self.view.do_show_about_dialog()
-

Copied: dists/trunk/live-magic/livemagic/controllers/main.py (from rev 2206, dists/trunk/live-magic/src/controllers/main.py)
===================================================================
--- dists/trunk/live-magic/livemagic/controllers/main.py	                        (rev 0)
+++ dists/trunk/live-magic/livemagic/controllers/main.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -0,0 +1,87 @@
+import gtk
+from livemagic.model import KeyVarConfigFile
+
+class MainController(object):
+    def __init__(self):
+        self.model.attach_load_observer(self.notify_load)
+
+    def notify_load(self):
+        for child in self.model.children:
+            # Check we are dealing with normal configuration values
+            if type(child) is KeyVarConfigFile:
+                for key in child:
+                    # Set the value in the view
+                    self.view.do_set_key_var(child.shortname, key, getattr(child, key))
+
+    def ready(self):
+        """
+        Called when the view is ready for setup.
+        """
+        sections = ['common', 'chroot', 'binary', 'bootstrap', 'source', 'hooks']
+        self.view.setup_sections(sections)
+
+        # Notify all the observers that depend on the model
+        self.model.notify_load_observers()
+
+    # GTK callbacks
+    def on_live_helper_value_changed(self, widget):
+        namespace, key = widget.name.split("/")
+        value = widget.get_text()
+
+        # Call self.model.namespace.key = vaulue
+        ns = getattr(self.model, namespace)
+        setattr(ns, key, value)
+
+        # Variables have been tainted, allow saving
+        self.view.set_save_enabled(True)
+
+    def on_choose_section(self, button):
+        self.view.do_select_section(button)
+
+    def on_new(self, *_):
+        if self.model.altered():
+            print "Not newing as not saved"
+        else:
+            self.model.new()
+        self.view.set_save_enabled(True)
+
+    def on_open(self, *_):
+        def open_dialog(self):
+            res, filename = self.view.do_folder_open()
+            if res == gtk.RESPONSE_ACCEPT:
+                try:
+                    self.model.open(filename)
+                    self.view.set_save_enabled(False)
+                except IOError:
+                    self.view.do_show_loading_error()
+        return self._confirm_save(lambda: open_dialog(self), quit_dialog=False)
+
+    def on_save(self, *_):
+        self.view.set_save_enabled(False)
+        self.view.set_status_bar("Saving configuration to %s ..." % self.model.dir)
+        self.model.save()
+        self.view.set_status_bar("Saved configuration to %s" % self.model.dir)
+
+    def on_save_as(self, *_):
+        raise NotImplemented
+
+    def _confirm_save(self, fn, **kw):
+        if self.model.altered():
+            res = self.view.do_confirm_save(**kw)
+            if res == gtk.RESPONSE_ACCEPT: # Save
+                self.on_save(None)
+                fn()
+            elif res == gtk.RESPONSE_REJECT: # Don't save
+                fn()
+            else:
+                return True # Cancel
+        else:
+            # We are up to date
+            fn()
+
+    def on_quit_request(self, *_):
+        return self._confirm_save(lambda: gtk.main_quit(), quit_dialog=True)
+
+    def on_about_activate(self, *_):
+        self.view.do_show_about_dialog()
+

Deleted: dists/trunk/live-magic/livemagic/main.py
===================================================================
--- dists/trunk/live-magic/src/main.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/main.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,37 +0,0 @@
-#!/usr/bin/env python
-
-import pygtk
-pygtk.require('2.0')
-import gtk
-
-import model
-from views import *
-from controllers import *
-
-class Model(object):
-    def __init__(self, dir=None):
-        self.config = model.LiveHelperConfiguration(dir)
-    def __getattr__(self, k):
-        return getattr(self.config, k)
-    def __setattr__(self, k, v):
-        self.__dict__[k] = v
-
-class View(MainView, BuildView, HooksView):
-    def __init__(self, controller):
-        self.controller = controller
-        MainView.__init__(self)
-        BuildView.__init__(self)
-        HooksView.__init__(self)
-
-class Controller(MainController, BuildController, HooksController):
-    def __init__(self, model):
-        self.model = model
-        MainController.__init__(self)
-        BuildController.__init__(self)
-        HooksController.__init__(self)
-
-if __name__ == "__main__":
-    m = Model()
-    c = Controller(m)
-    v = View(c)
-    gtk.main()

Modified: dists/trunk/live-magic/livemagic/model/__init__.py
===================================================================
--- dists/trunk/live-magic/src/model/__init__.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/model/__init__.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,3 +1,3 @@
-from live_helper_configuration import LiveHelperConfiguration
-from key_var_config_file import KeyVarConfigFile
-from folder_of_files import FolderOfFiles
+from livemagic.model.live_helper_configuration import LiveHelperConfiguration
+from livemagic.model.key_var_config_file import KeyVarConfigFile
+from livemagic.model.folder_of_files import FolderOfFiles

Deleted: dists/trunk/live-magic/livemagic/model/folder_of_files.py
===================================================================
--- dists/trunk/live-magic/src/model/folder_of_files.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/model/folder_of_files.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,124 +0,0 @@
-import glob
-import os
-from os.path import join
-
-class FolderOfFiles(object):
-    """
-    Represents a folder containing a number of files.
-    """
-
-    def __init__(self, dir):
-        self.dir = dir
-
-        self._stale = set()
-        self.files = {}
-
-        # No file has been deleted
-        self.file_deleted = False
-
-        self.load()
-
-    def __getitem__(self, k):
-        return self.files[k]
-
-    def __contains__(self, k):
-        return k in self.files
-
-    def __delitem__(self, k):
-        del self.files[k]
-
-    def __setitem__(self, k, v):
-        self._stale.add(k)
-        self.files[k] = v
-
-    def _config_exists(self, file):
-        try:
-            os.stat(join(self.dir, file))
-            return True
-        except OSError:
-            return False
-
-    def load(self):
-        """
-        Loads files.
-        """
-        self.deleted = False
-        self._stale.clear()
-        self.files.clear()
-        for name in glob.glob(join(self.dir, '*')):
-            key = name.split('/')[-1]
-            try:
-                f = open(name, 'r')
-                self.files[key] = f.read()
-                f.close()
-            except IOError, e:
-                # "Is a directory"
-                if e.errno == 21:
-                    continue
-                raise e
-
-    def altered(self):
-        """
-        Returns True if this configuration file has changed since last save.
-        """
-        return len(self._stale) > 0 or self.file_deleted == True
-
-    def save(self):
-        """
-        Update all updated files in this directory.
-        """
-        for filename in self._stale:
-            pathname = join(self.dir, filename)
-            f = open(pathname, 'w+')
-            f.write(self[filename])
-            f.close()
-
-        self._stale.clear()
-
-    def delete(self, filename):
-        if self._config_exists(filename):
-            os.remove(join(self.dir, filename))
-        del self[filename]
-        self.file_deleted = True
-
-    def rename(self, orig, new):
-        """
-        Throws ValueError if 'new' already exists.
-        """
-        if self._config_exists(new):
-            raise ValueError
-        if self._config_exists(orig):
-            os.rename(join(self.dir, orig), join(self.dir, new))
-        self[new] = self[orig]
-        del self[orig]
-
-    def import_file(self, source):
-        """
-        Imports the specified file into the current configuration, using a
-        unique name. The file is not saved.
-        """
-        f = open(source, 'r')
-        source_contents = f.read()
-        f.close()
-
-        target_name = self._gen_import_name(source)
-        self[target_name] = source_contents
-
-    def _gen_import_name(self, filename):
-        """
-        Generates a unique name of the imported file, based on the existing file.
-        """
-        # Use existing filename as the root
-        root = filename.split(os.sep)[-1]
-
-        if self._config_exists(root):
-            # Keep adding a number to the end until it doesn't exist.
-            i = 1
-            while True:
-                tmpnam = "%s-%d" % (root, i)
-                if not self._config_exists(tmpnam):
-                    return tmpnam
-                i += 1
-        else:
-            # Just use the root name
-            return root

Copied: dists/trunk/live-magic/livemagic/model/folder_of_files.py (from rev 2206, dists/trunk/live-magic/src/model/folder_of_files.py)
===================================================================
--- dists/trunk/live-magic/livemagic/model/folder_of_files.py	                        (rev 0)
+++ dists/trunk/live-magic/livemagic/model/folder_of_files.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -0,0 +1,126 @@
+import glob
+import os
+from os.path import join
+
+class FolderOfFiles(object):
+    """
+    Represents a folder containing a number of files.
+    """
+
+    def __init__(self, dir):
+        self.dir = dir
+
+        self._stale = set()
+        self.files = {}
+
+        # No file has been deleted
+        self.file_deleted = False
+
+        self.load()
+
+    def __getitem__(self, k):
+        return self.files[k]
+
+    def __contains__(self, k):
+        return k in self.files
+
+    def __delitem__(self, k):
+        del self.files[k]
+
+    def __setitem__(self, k, v):
+        self._stale.add(k)
+        self.files[k] = v
+
+    def _config_exists(self, file):
+        try:
+            os.stat(join(self.dir, file))
+            return True
+        except OSError:
+            return False
+
+    def load(self):
+        """
+        Loads files.
+        """
+        self.deleted = False
+        self._stale.clear()
+        self.files.clear()
+        for name in glob.glob(join(self.dir, '*')):
+            key = name.split('/')[-1]
+            try:
+                f = open(name, 'r')
+                self.files[key] = f.read()
+                f.close()
+            except IOError, e:
+                # "Is a directory"
+                if e.errno == 21:
+                    continue
+                raise e
+
+    def altered(self):
+        """
+        Returns True if this configuration file has changed since last save.
+        """
+        return len(self._stale) > 0 or self.file_deleted == True
+
+    def save(self):
+        """
+        Update all updated files in this directory.
+        """
+        for filename in self._stale:
+            pathname = join(self.dir, filename)
+            f = open(pathname, 'w+')
+            f.write(self[filename])
+            f.close()
+
+        self._stale.clear()
+
+    def delete(self, filename):
+        if self._config_exists(filename):
+            os.remove(join(self.dir, filename))
+        del self[filename]
+        self.file_deleted = True
+
+    def rename(self, orig, new):
+        """
+        Throws ValueError if 'new' already exists.
+        """
+        if self._config_exists(new):
+            raise ValueError
+        if self._config_exists(orig):
+            os.rename(join(self.dir, orig), join(self.dir, new))
+        self[new] = self[orig]
+        del self[orig]
+
+    def import_file(self, source):
+        """
+        Imports the specified file into the current configuration, using a
+        unique name. The file is not saved.
+        """
+        f = open(source, 'r')
+        source_contents = f.read()
+        f.close()
+
+        target_name = self._gen_import_name(source)
+        self[target_name] = source_contents
+
+        return target_name
+
+    def _gen_import_name(self, filename):
+        """
+        Generates a unique name of the imported file.
+        """
+        # Use existing filename as the root
+        root = filename.split(os.sep)[-1]
+
+        if root in self:
+            # Keep adding a number to the end until it doesn't exist.
+            i = 1
+            while True:
+                tmpnam = "%s-%d" % (root, i)
+                if not tmpnam in self:
+                    return tmpnam
+                i += 1
+        else:
+            # Just use the root name
+            return root

Deleted: dists/trunk/live-magic/livemagic/views/build.py
===================================================================
--- dists/trunk/live-magic/src/views/build.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/views/build.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,80 +0,0 @@
-import vte
-import pango
-
-class BuildView(object):
-    def __init__(self):
-        # Init custom widgets
-        self.vte_terminal = None
-
-        try:
-            from gtksourceview import SourceBuffer, SourceView, SourceLanguagesManager
-
-            buffer = SourceBuffer()
-            editor = SourceView(buffer)
-            editor.set_show_line_numbers(True)
-
-            buffer.set_highlight(True)
-            lang = SourceLanguagesManager().get_language_from_mime_type("application/x-shellscript")
-            buffer.set_language(lang)
-
-        except ImportError:
-            editor = gtk.TextView()
-
-        font_desc = pango.FontDescription('Monospace 8')
-        if font_desc:
-            editor.modify_font(font_desc)
-
-        self['scroll_hook_edit'].add_with_viewport(editor)
-        editor.show()
-
-    def do_show_window_build(self):
-        self['window_main'].set_sensitive(False)
-
-        # Configure VteTerminal component if necessary
-        if self.vte_terminal is None:
-            t = vte.Terminal()
-            t.set_font_from_string('Monospace 8')
-            self['vte_scrollbar'].set_adjustment(t.get_adjustment())
-            self['hbox_vte'].pack_end(t)
-            self['hbox_vte'].show_all()
-
-            # Connect signals from VteTerminal
-            t.connect('child-exited', self.controller.on_vte_child_exited)
-            t.connect('contents-changed', self.controller.on_vte_contents_changed)
-
-            self.vte_terminal = t
-
-        self.vte_terminal.reset(True, True)
-        self['window_build'].show()
-
-    def do_hide_window_build(self):
-        self['window_build'].hide()
-        self['window_main'].set_sensitive(True)
-
-    def set_build_titles(self, title, heading, subheading):
-        self['window_build'].set_title(title)
-        self['label_build_titles'].set_label('<big><b>%s</b></big>\n\n%s' % (heading, subheading))
-
-    def set_build_status(self, msg):
-        self['label_build_status'].set_label('<i>%s</i>' % msg)
-
-    def do_build_pulse(self):
-        self['progress_build'].pulse()
-
-    def set_build_status_change(self, initial=True):
-        """
-        If initial is True, the GUI is adjusted to its initial conditions, otherwise
-        it is adjusted to that it the build window can be closed.
-        """
-        self['button_build_cancel'].set_sensitive(initial)
-        self['button_build_close'].set_sensitive(not initial)
-        self['checkbutton_build_auto_close'].set_sensitive(initial)
-        self['progress_build'].set_fraction({True: 0, False: 1}[initial])
-
-    def get_build_auto_close(self):
-        """
-        Returns True if the build window should automatically close after a successful
-        build, and False otherwise.
-        """
-        return self['checkbutton_build_auto_close'].get_active()
-

Copied: dists/trunk/live-magic/livemagic/views/build.py (from rev 2206, dists/trunk/live-magic/src/views/build.py)
===================================================================
--- dists/trunk/live-magic/livemagic/views/build.py	                        (rev 0)
+++ dists/trunk/live-magic/livemagic/views/build.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -0,0 +1,58 @@
+import vte
+
+class BuildView(object):
+    def __init__(self):
+        # Init custom widgets
+        self.vte_terminal = None
+
+    def do_show_window_build(self):
+        self['window_main'].set_sensitive(False)
+
+        # Configure VteTerminal component if necessary
+        if self.vte_terminal is None:
+            t = vte.Terminal()
+            t.set_font_from_string('Monospace 8')
+            self['vte_scrollbar'].set_adjustment(t.get_adjustment())
+            self['hbox_vte'].pack_end(t)
+            self['hbox_vte'].show_all()
+
+            # Connect signals from VteTerminal
+            t.connect('child-exited', self.controller.on_vte_child_exited)
+            t.connect('contents-changed', self.controller.on_vte_contents_changed)
+
+            self.vte_terminal = t
+
+        self.vte_terminal.reset(True, True)
+        self['window_build'].show()
+
+    def do_hide_window_build(self):
+        self['window_build'].hide()
+        self['window_main'].set_sensitive(True)
+
+    def set_build_titles(self, title, heading, subheading):
+        self['window_build'].set_title(title)
+        self['label_build_titles'].set_label('<big><b>%s</b></big>\n\n%s' % (heading, subheading))
+
+    def set_build_status(self, msg):
+        self['label_build_status'].set_label('<i>%s</i>' % msg)
+
+    def do_build_pulse(self):
+        self['progress_build'].pulse()
+
+    def set_build_status_change(self, initial=True):
+        """
+        If initial is True, the GUI is adjusted to its initial conditions, otherwise
+        it is adjusted to that it the build window can be closed.
+        """
+        self['button_build_cancel'].set_sensitive(initial)
+        self['button_build_close'].set_sensitive(not initial)
+        self['checkbutton_build_auto_close'].set_sensitive(initial)
+        self['progress_build'].set_fraction({True: 0, False: 1}[initial])
+
+    def get_build_auto_close(self):
+        """
+        Returns True if the build window should automatically close after a successful
+        build, and False otherwise.
+        """
+        return self['checkbutton_build_auto_close'].get_active()
+

Deleted: dists/trunk/live-magic/livemagic/views/hooks.py
===================================================================
--- dists/trunk/live-magic/src/views/hooks.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/views/hooks.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,40 +0,0 @@
-import gtk
-import gobject
-
-class HooksView(object):
-
-    def do_hooks_clear(self):
-        self.hook_liststore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
-
-    def do_show_new_hook_window(self):
-        dialog = gtk.Dialog(
-            "Choose filename",
-            self['window_main'],
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            (   gtk.STOCK_OK, gtk.RESPONSE_ACCEPT,
-                gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))
-
-        entry = gtk.Entry(256)
-        dialog.vbox.pack_start(entry)
-        dialog.vbox.show_all()
-        res = dialog.run()
-        dialog.destroy()
-
-        if res == gtk.RESPONSE_ACCEPT:
-            return entry.get_text().strip()
-        else:
-            return None
-
-    def do_show_new_hook_invalid_name(self):
-        dialog = gtk.MessageDialog(
-            self['window_main'],
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            gtk.MESSAGE_ERROR,
-            gtk.BUTTONS_CLOSE,
-            "Invalid name for hook"
-            )
-        dialog.run()
-        dialog.destroy()
-
-    def do_hook_add(self, file, contents):
-        self.hook_liststore.append((file, contents))

Copied: dists/trunk/live-magic/livemagic/views/hooks.py (from rev 2209, dists/trunk/live-magic/src/views/hooks.py)
===================================================================
--- dists/trunk/live-magic/livemagic/views/hooks.py	                        (rev 0)
+++ dists/trunk/live-magic/livemagic/views/hooks.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -0,0 +1,141 @@
+import gtk
+import gobject
+import pango
+import mimetypes
+
+class HooksView(object):
+    def __init__(self):
+        # Configure the hook combo box
+        hbox = self['hbox_hooks']
+        self.cb = gtk.combo_box_new_text()
+        self.cb.show()
+        self.cb.connect("changed", self.controller.on_hook_select)
+        hbox.pack_start(self.cb)
+        hbox.reorder_child(self.cb, 0)
+
+        # Configure editor
+        try:
+            from gtksourceview import SourceBuffer, SourceView
+            buffer = SourceBuffer()
+            self.hook_editor = SourceView(buffer)
+            self.hook_editor.set_show_line_numbers(True)
+            buffer.set_highlight(True)
+        except ImportError:
+            self.hook_editor = gtk.TextView()
+
+        font_desc = pango.FontDescription('Monospace 8')
+        if font_desc:
+            self.hook_editor.modify_font(font_desc)
+
+        self.hook_editor.get_buffer().connect("changed", self.controller.on_hook_editor_changed)
+
+        self['scroll_hook_edit'].add_with_viewport(self.hook_editor)
+        self.do_enable_edit_hook(False)
+        self.hook_editor.show()
+
+    def do_show_new_hook_window(self):
+        dialog = gtk.Dialog(
+            "Choose filename",
+            self['window_main'],
+            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+            (   gtk.STOCK_OK, gtk.RESPONSE_ACCEPT,
+                gtk.STOCK_CANCEL, gtk.RESPONSE_REJECT))
+
+        entry = gtk.Entry(256)
+        entry.connect("activate", lambda _: dialog.action_area.get_children()[1].clicked())
+
+        dialog.vbox.pack_start(entry, padding=10)
+        dialog.vbox.show_all()
+        res = dialog.run()
+        dialog.destroy()
+
+        if res == gtk.RESPONSE_ACCEPT:
+            return entry.get_text().strip()
+        else:
+            return None
+
+    def do_show_hook_import_dialog(self):
+        dialog = gtk.FileChooserDialog(
+            "Choose hook to import",
+            self['window_main'],
+            gtk.FILE_CHOOSER_ACTION_OPEN,
+            (
+                gtk.STOCK_OK, gtk.RESPONSE_ACCEPT,
+                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL))
+
+        dialog.set_current_folder("/usr/share/live-helper/examples/hooks")
+
+        res = dialog.run()
+        filename = dialog.get_filename()
+        dialog.destroy()
+
+        if res == gtk.RESPONSE_ACCEPT:
+            return filename
+        else:
+            return None
+
+    def do_show_new_hook_invalid_name(self):
+        dialog = gtk.MessageDialog(
+            self['window_main'],
+            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+            gtk.MESSAGE_ERROR,
+            gtk.BUTTONS_CLOSE,
+            "Invalid name for hook"
+            )
+        dialog.run()
+        dialog.destroy()
+
+    def do_hook_add(self, filename):
+        self.cb.append_text(filename)
+
+    def get_selected_hook(self):
+        filename = self.cb.get_active_text()
+        return filename
+
+    def do_hooks_clear(self):
+        self.hook_editor.set_sensitive(False)
+        for _ in xrange(len(self.cb.get_model())):
+            self.cb.remove_text(0)
+
+    def get_hook_editor_contents(self):
+        buf = self.hook_editor.get_buffer()
+        return buf.get_text(buf.get_start_iter(), buf.get_end_iter())
+
+    def do_enable_edit_hook(self, enabled=True):
+        self.cb.set_sensitive(enabled)
+        self.hook_editor.set_sensitive(enabled)
+        self['button_hook_rename'].set_sensitive(enabled)
+        self['button_hook_delete'].set_sensitive(enabled)
+
+    def do_set_selected_hook(self, hook_name):
+        # Update combo box to reflect selection
+        m = self.cb.get_model()
+        iter = m.get_iter_first()
+
+        while iter is not None:
+            if hook_name == m.get_value(iter, 0):
+                self.cb.set_active_iter(iter)
+                return
+            iter = m.iter_next(iter)
+
+    def do_set_selected_hook_contents(self, contents):
+        buffer = self.hook_editor.get_buffer()
+        buffer.begin_not_undoable_action()
+
+        # Set hook editor contents and allow editing
+        buffer.set_text(contents)
+        self.do_enable_edit_hook(True)
+        self.hook_editor.grab_focus()
+
+        buffer.end_not_undoable_action()
+
+        # Set highlighting
+        try:
+            import gnomevfs
+            from gtksourceview import SourceLanguagesManager
+
+            mime_type = gnomevfs.get_mime_type_for_data(contents)
+            lang = SourceLanguagesManager().get_language_from_mime_type(mime_type)
+            buffer.set_language(lang)
+        except ImportError:
+            pass

Deleted: dists/trunk/live-magic/livemagic/views/main.py
===================================================================
--- dists/trunk/live-magic/src/views/main.py	2007-06-17 22:36:02 UTC (rev 2157)
+++ dists/trunk/live-magic/livemagic/views/main.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -1,123 +0,0 @@
-import gtk
-import gtk.glade
-import gobject
-
-class MainView(object):
-    def __init__(self):
-        self.controller.view = self
-
-        self.xml = gtk.glade.XML('../glade/main.glade')
-        self.xml.signal_autoconnect(self.controller)
-
-        self.controller.init_view()
-
-       # Hide tabs
-        self['notebook'].set_show_tabs(False)
-
-    def __getitem__(self, key):
-        widget = self.xml.get_widget(key)
-        if widget is None:
-            raise KeyError, "Widget not found: %s" % key
-        return widget
-
-    def __contains__(self, key):
-        try:
-            _ = self[key]
-        except KeyError:
-            return False
-        return True
-
-    # Application-specific calls
-
-    def do_select_section(self, button):
-        # Move to new section tab
-        _, _, name = button.get_name().split('_')
-        tab = self.sections.index(name)
-        self['notebook'].set_current_page(tab)
-
-        # Set section buttons
-        for section in self.sections:
-            self['button_section_%s' % section].set_relief(gtk.RELIEF_NONE)
-        button.set_relief(gtk.RELIEF_NORMAL)
-
-    def setup_sections(self, sections):
-        # Save sections
-        self.sections = sections
-
-        section_model = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
-        for s in sections:
-            section_model.append((None, s))
-
-        col = gtk.TreeViewColumn("Section", gtk.CellRendererText(), text=1)
-
-        #self['treeview_sections'].set_model(section_model)
-        #self['treeview_sections'].append_column(col)
-
-    def set_save_enabled(self, status):
-        self['btn_save'].set_sensitive(status)
-        self['menu_save'].set_sensitive(status)
-        self['menu_save_as'].set_sensitive(status)
-
-    def set_status_bar(self, msg):
-        self['label_status'].set_text(msg)
-
-    def do_confirm_save(self, quit_dialog=None):
-        # Show a quit button if we are quitting, and a close
-        # button if we are closing
-        btn = quit_dialog and gtk.STOCK_QUIT or gtk.STOCK_CLOSE
-
-        dialog = gtk.Dialog("",
-            self['window_main'],
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            (
-                gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT,
-                btn, gtk.RESPONSE_REJECT,
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-            ))
-        label = gtk.Label()
-        label.set_markup("""<big><b>Save the changes to your configuration\nbefore continuing?</b></big>\n\nIf you don't save, changes will be permanently lost.""")
-        dialog.vbox.pack_start(label, True, True, 25)
-        label.show()
-        dialog.set_size_request(400, 200)
-        res = dialog.run()
-        dialog.destroy()
-        return res
-
-    def do_folder_open(self):
-        dialog = gtk.FileChooserDialog("Open Configuration",
-            self['window_main'],
-            gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
-            (
-                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
-                gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT,
-            ))
-
-        res = dialog.run()
-        filename = dialog.get_filename()
-        dialog.destroy()
-        return res, filename
-
-    def do_show_loading_error(self):
-        dialog = gtk.MessageDialog(
-            self['window_main'],
-            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
-            gtk.MESSAGE_ERROR,
-            gtk.BUTTONS_CLOSE,
-            "There was an error loading the configuration.")
-
-        dialog.format_secondary_markup("Please ensure that you selected a directory containing a Debian Live configuration.")
-        dialog.run()
-        dialog.destroy()
-
-    def do_show_about_dialog(self):
-        self['dialog_about'].set_name("Debian Live Gui")
-        self['dialog_about'].show()
-
-    def do_set_key_var(self, namespace, key, value):
-        try:
-            self['%s/%s' % (namespace, key)].set_text(value)
-        except KeyError:
-            # We either haven't got around to making a widget for this
-            # key, or it is new.
-            pass
-

Copied: dists/trunk/live-magic/livemagic/views/main.py (from rev 2206, dists/trunk/live-magic/src/views/main.py)
===================================================================
--- dists/trunk/live-magic/livemagic/views/main.py	                        (rev 0)
+++ dists/trunk/live-magic/livemagic/views/main.py	2007-06-19 15:51:42 UTC (rev 2212)
@@ -0,0 +1,117 @@
+import gtk
+import gobject
+
+class MainView(object):
+    def __init__(self):
+        self.controller.view = self
+
+        # Hide tabs
+        self['notebook'].set_show_tabs(False)
+
+    def __getitem__(self, key):
+        widget = self.xml.get_widget(key)
+        if widget is None:
+            raise KeyError, "Widget not found: %s" % key
+        return widget
+
+    def __contains__(self, key):
+        try:
+            _ = self[key]
+        except KeyError:
+            return False
+        return True
+
+    # Application-specific calls
+
+    def do_select_section(self, button):
+        # Move to new section tab
+        _, _, name = button.get_name().split('_')
+        tab = self.sections.index(name)
+        self['notebook'].set_current_page(tab)
+
+        # Set section buttons
+        for section in self.sections:
+            self['button_section_%s' % section].set_relief(gtk.RELIEF_NONE)
+        button.set_relief(gtk.RELIEF_NORMAL)
+
+    def setup_sections(self, sections):
+        # Save sections
+        self.sections = sections
+
+        section_model = gtk.ListStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING)
+        for s in sections:
+            section_model.append((None, s))
+
+        col = gtk.TreeViewColumn("Section", gtk.CellRendererText(), text=1)
+
+        #self['treeview_sections'].set_model(section_model)
+        #self['treeview_sections'].append_column(col)
+
+    def set_save_enabled(self, status):
+        self['btn_save'].set_sensitive(status)
+        self['menu_save'].set_sensitive(status)
+        self['menu_save_as'].set_sensitive(status)
+
+    def set_status_bar(self, msg):
+        self['label_status'].set_text(msg)
+
+    def do_confirm_save(self, quit_dialog=None):
+        # Show a quit button if we are quitting, and a close
+        # button if we are closing
+        btn = quit_dialog and gtk.STOCK_QUIT or gtk.STOCK_CLOSE
+
+        dialog = gtk.Dialog("",
+            self['window_main'],
+            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+            (
+                gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT,
+                btn, gtk.RESPONSE_REJECT,
+                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+            ))
+        label = gtk.Label()
+        label.set_markup("""<big><b>Save the changes to your configuration\nbefore continuing?</b></big>\n\nIf you don't save, changes will be permanently lost.""")
+        dialog.vbox.pack_start(label, True, True, 25)
+        label.show()
+        dialog.set_size_request(400, 200)
+        res = dialog.run()
+        dialog.destroy()
+        return res
+
+    def do_folder_open(self):
+        dialog = gtk.FileChooserDialog("Open Configuration",
+            self['window_main'],
+            gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,
+            (
+                gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL,
+                gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT,
+            ))
+
+        res = dialog.run()
+        filename = dialog.get_filename()
+        dialog.destroy()
+        return res, filename
+
+    def do_show_loading_error(self):
+        dialog = gtk.MessageDialog(
+            self['window_main'],
+            gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+            gtk.MESSAGE_ERROR,
+            gtk.BUTTONS_CLOSE,
+            "There was an error loading the configuration.")
+
+        dialog.format_secondary_markup("Please ensure that you selected a directory containing a Debian Live configuration.")
+        dialog.run()
+        dialog.destroy()
+
+    def do_show_about_dialog(self):
+        self['dialog_about'].set_name("Debian Live Magic")
+        self['dialog_about'].show()
+
+    def do_set_key_var(self, namespace, key, value):
+        try:
+            self['%s/%s' % (namespace, key)].set_text(value)
+        except KeyError:
+            # We either haven't got around to making a widget for this
+            # key, or it is new.
+            pass
+




More information about the Debian-live-changes mailing list