[Debian-live-changes] r2206 - in dists/trunk/live-magic/src: . controllers model views

lamby-guest at alioth.debian.org lamby-guest at alioth.debian.org
Tue Jun 19 13:57:01 UTC 2007


Author: lamby-guest
Date: 2007-06-19 13:57:01 +0000 (Tue, 19 Jun 2007)
New Revision: 2206

Modified:
   dists/trunk/live-magic/src/controllers/hooks.py
   dists/trunk/live-magic/src/controllers/main.py
   dists/trunk/live-magic/src/main.py
   dists/trunk/live-magic/src/model/folder_of_files.py
   dists/trunk/live-magic/src/views/build.py
   dists/trunk/live-magic/src/views/hooks.py
   dists/trunk/live-magic/src/views/main.py
Log:


Modified: dists/trunk/live-magic/src/controllers/hooks.py
===================================================================
--- dists/trunk/live-magic/src/controllers/hooks.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/controllers/hooks.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -2,25 +2,51 @@
 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 _show_hook(self, hook_name):
+        print 1
+
     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)
+        for filename in self.model.hooks.files.iterkeys():
+            self.view.do_hook_add(filename)
 
     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'] = ''
+        hook_name = self.view.do_show_new_hook_window()
+        if hook_name is not None:
+            if len(hook_name) > 0:
+                self.model.hooks[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)
             else:
                 self.view.do_show_new_hook_invalid_name()
 
     def on_button_hook_import_clicked(self, *_):
-        print "import"
+        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"
+        print "rename called for", self.view.get_selected_hook()
 
     def on_button_hook_delete_clicked(self, *_):
-        print "delete"
+        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()

Modified: dists/trunk/live-magic/src/controllers/main.py
===================================================================
--- dists/trunk/live-magic/src/controllers/main.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/controllers/main.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -13,9 +13,9 @@
                     # Set the value in the view
                     self.view.do_set_key_var(child.shortname, key, getattr(child, key))
 
-    def init_view(self):
+    def ready(self):
         """
-        Called by the view when it is ready for setup.
+        Called when the view is ready for setup.
         """
         sections = ['common', 'chroot', 'binary', 'bootstrap', 'source', 'hooks']
         self.view.setup_sections(sections)

Modified: dists/trunk/live-magic/src/main.py
===================================================================
--- dists/trunk/live-magic/src/main.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/main.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -3,6 +3,7 @@
 import pygtk
 pygtk.require('2.0')
 import gtk
+import gtk.glade
 
 import model
 from views import *
@@ -18,10 +19,12 @@
 
 class View(MainView, BuildView, HooksView):
     def __init__(self, controller):
+        self.xml = gtk.glade.XML('../glade/main.glade')
         self.controller = controller
         MainView.__init__(self)
         BuildView.__init__(self)
         HooksView.__init__(self)
+        self.xml.signal_autoconnect(self.controller)
 
 class Controller(MainController, BuildController, HooksController):
     def __init__(self, model):
@@ -34,4 +37,5 @@
     m = Model()
     c = Controller(m)
     v = View(c)
+    c.ready()
     gtk.main()

Modified: dists/trunk/live-magic/src/model/folder_of_files.py
===================================================================
--- dists/trunk/live-magic/src/model/folder_of_files.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/model/folder_of_files.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -104,19 +104,21 @@
         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, based on the existing file.
+        Generates a unique name of the imported file.
         """
         # Use existing filename as the root
         root = filename.split(os.sep)[-1]
 
-        if self._config_exists(root):
+        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 self._config_exists(tmpnam):
+                if not tmpnam in self:
                     return tmpnam
                 i += 1
         else:

Modified: dists/trunk/live-magic/src/views/build.py
===================================================================
--- dists/trunk/live-magic/src/views/build.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/views/build.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -1,32 +1,10 @@
 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)
 

Modified: dists/trunk/live-magic/src/views/hooks.py
===================================================================
--- dists/trunk/live-magic/src/views/hooks.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/views/hooks.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -1,11 +1,40 @@
 import gtk
 import gobject
+import pango
 
 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)
 
-    def do_hooks_clear(self):
-        self.hook_liststore = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING)
+        # Configure editor
+        try:
+            from gtksourceview import SourceBuffer, SourceView, SourceLanguagesManager
+            buffer = SourceBuffer()
+            self.hook_editor = SourceView(buffer)
+            self.hook_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:
+            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",
@@ -25,6 +54,26 @@
         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'],
@@ -36,5 +85,40 @@
         dialog.run()
         dialog.destroy()
 
-    def do_hook_add(self, file, contents):
-        self.hook_liststore.append((file, contents))
+    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, hookname):
+        # Update combo box to reflect selection
+        m = self.cb.get_model()
+        iter = m.get_iter_first()
+        while iter is not None:
+            if hookname == 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):
+        # Set hook editor contents and allow editing
+        self.hook_editor.get_buffer().set_text(contents)
+        self.do_enable_edit_hook(True)
+

Modified: dists/trunk/live-magic/src/views/main.py
===================================================================
--- dists/trunk/live-magic/src/views/main.py	2007-06-19 10:39:30 UTC (rev 2205)
+++ dists/trunk/live-magic/src/views/main.py	2007-06-19 13:57:01 UTC (rev 2206)
@@ -1,17 +1,11 @@
 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
+        # Hide tabs
         self['notebook'].set_show_tabs(False)
 
     def __getitem__(self, key):




More information about the Debian-live-changes mailing list