[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