On Sun, Nov 23, 2008 at 7:34 PM,  <[EMAIL PROTECTED]> wrote:
> # HG changeset patch
> # User Peer Sommerlund <[EMAIL PROTECTED]>
> # Date 1227467555 -3600
> # Node ID 67e6c0bbb3a316de638e23844d260c68458ea42e
> # Parent  8ccb624da5588dd936572ef219bcc9a393f4e63a
> thgconfig: Switch to in-place editing model for "paths" page
>
> The old editing model showed a list of aliases where you could
> select an alias. You would then have to edit the alias in a
> field in the bottom of the page.
>
> In addition to this you would have to actively "Refresh" your
> change to the list, in addition to committing it with the
> "Apply" button.
>
> The new editing model has only one level of commit: the "Apply"
> button.
>
> The patch also simplifies the internal data structures.
> By relying more on gtk.ListStore and gtk.TreeView some
> synchronization code could be removed.
>
> diff -r 8ccb624da558 -r 67e6c0bbb3a3 hggtk/thgconfig.py
> --- a/hggtk/thgconfig.py        Sun Sep 28 07:59:05 2008 +0100
> +++ b/hggtk/thgconfig.py        Sun Nov 23 20:12:35 2008 +0100
> @@ -127,23 +127,40 @@
>         self.paths_frame = self.add_page(notebook, 'Paths')
>         vbox = self.fill_frame(self.paths_frame, self._paths_info)
>
> +        # Initialize data model for 'Paths' tab
> +        self.pathdata = gtk.ListStore(
> +            gobject.TYPE_STRING,
> +            gobject.TYPE_STRING)
> +        if 'paths' in list(self.ini):
> +            for name in self.ini['paths']:
> +                if name in ('default', 'default-push'): continue
> +                path = self.ini['paths'][name]
> +                iter = self.pathdata.insert_before(None, None)
> +                self.pathdata.set_value(iter, 0, "%s" % name)
> +                self.pathdata.set_value(iter, 1, "%s" % path)
> +
> +        # Define view model for 'Paths' tab
>         self.pathtree = gtk.TreeView()
> -        self.pathsel = self.pathtree.get_selection()
> -        self.pathsel.connect("changed", self._pathlist_rowchanged)
> -        column = gtk.TreeViewColumn('Peer Repository Paths',
> -                gtk.CellRendererText(), text=2)
> -        self.pathtree.append_column(column)
> +        self.pathtree.set_model(self.pathdata)
> +
> +        renderer = gtk.CellRendererText()
> +        renderer.set_property('editable', True)
> +        renderer.connect('edited', self.on_alias_edit)
> +        column = gtk.TreeViewColumn('Alias',
> +            renderer, text=0)
> +        self.pathtree.append_column(column)
> +
> +        renderer = gtk.CellRendererText()
> +        renderer.set_property('editable', True)
> +        renderer.connect('edited', self.on_path_edit)
> +        column = gtk.TreeViewColumn('Repository Path',
> +            renderer, text=1)
> +        self.pathtree.append_column(column)
> +
>         scrolledwindow = gtk.ScrolledWindow()
>         scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
>         scrolledwindow.add(self.pathtree)
>         vbox.add(scrolledwindow)
> -
> -        self.pathlist = []
> -        if 'paths' in list(self.ini):
> -            for name in self.ini['paths']:
> -                if name in ('default', 'default-push'): continue
> -                self.pathlist.append((name, self.ini['paths'][name]))
> -        self.curpathrow = 0
>
>         buttonbox = gtk.HBox()
>         self.addButton = gtk.Button("Add")
> @@ -154,32 +171,10 @@
>         self._delpathbutton.connect('clicked', self._remove_path)
>         buttonbox.pack_start(self._delpathbutton)
>
> -        self._refreshpathbutton = gtk.Button("Refresh")
> -        self._refreshpathbutton.connect('clicked', self._refresh_path)
> -        buttonbox.pack_start(self._refreshpathbutton)
> -
>         self._testpathbutton = gtk.Button("Test")
>         self._testpathbutton.connect('clicked', self._test_path)
>         buttonbox.pack_start(self._testpathbutton)
>
> -        table = gtk.Table(2, 2, False)
> -        lbl = gtk.Label('Name:')
> -        lbl.set_alignment(1.0, 0.0)
> -        self._pathnameedit = gtk.Entry()
> -        self._pathnameedit.set_sensitive(False)
> -        table.attach(lbl, 0, 1, 0, 1, gtk.FILL, 0, 4, 3)
> -        table.attach(self._pathnameedit, 1, 2, 0, 1,
> -                gtk.FILL|gtk.EXPAND, 0, 4, 3)
> -
> -        lbl = gtk.Label('Path:')
> -        lbl.set_alignment(1.0, 0.0)
> -        self._pathpathedit = gtk.Entry()
> -        self._pathpathedit.set_sensitive(False)
> -        table.attach(lbl, 0, 1, 1, 2, gtk.FILL, 0, 4, 3)
> -        table.attach(self._pathpathedit, 1, 2, 1, 2,
> -                gtk.FILL|gtk.EXPAND, 0, 4, 3)
> -
> -        vbox.pack_start(table, False, False, 4)
>         vbox.pack_start(buttonbox, False, False, 4)
>         self.refresh_path_list()
>
> @@ -317,14 +312,28 @@
>                     self.notebook.set_current_page(page_num)
>                     widgets[w].grab_focus()
>                     return
> -
> +
> +    def on_alias_edit(self, cell, path, new_text):
> +        dirty = self.pathdata[path][0] != new_text
> +        self.pathdata[path][0] = new_text
> +        if dirty:
> +            self.dirty_event()
> +
> +    def on_path_edit(self, cell, path, new_text):
> +        dirty = self.pathdata[path][1] != new_text
> +        self.pathdata[path][1] = new_text
> +        if dirty:
> +            self.dirty_event()
> +
>     def new_path(self, newpath):
>         '''Add a new path to [paths], give default name, focus'''
> -        self.pathlist.append(('new', newpath))
> -        self.curpathrow = len(self.pathlist)-1
> +        iter = self.pathdata.insert_before(None, None)
> +        self.pathdata.set_value(iter, 0, 'new')
> +        self.pathdata.set_value(iter, 1, '%s' % newpath)
> +        self.pathtree.get_selection().select_iter(iter)
>         self.refresh_path_list()
> +        # This method may be called from hggtk.sync, so ensure page is 
> visible
>         self.notebook.set_current_page(2)
> -        self._pathnameedit.grab_focus()
>         self.dirty_event()
>
>     def dirty_event(self, *args):
> @@ -333,19 +342,19 @@
>             self.dirty = True
>
>     def _add_path(self, *args):
> -        if len(self.pathlist):
> -            self.pathlist.append(self.pathlist[self.curpathrow])
> -        else:
> -            self.pathlist.append(('new', 'http://'))
> -        self.curpathrow = len(self.pathlist)-1
> -        self.refresh_path_list()
> -        self._pathnameedit.grab_focus()
> -        self.dirty_event()
> +        self.new_path('http://')
>
>     def _remove_path(self, *args):
> -        del self.pathlist[self.curpathrow]
> -        if self.curpathrow > len(self.pathlist)-1:
> -            self.curpathrow = len(self.pathlist)-1
> +        selection = self.pathtree.get_selection()
> +        if not selection.count_selected_rows():
> +            return
> +        model, iter = selection.get_selected()
> +        next_iter = self.pathdata.iter_next(iter)
> +        del self.pathdata[iter]
> +        if next_iter:
> +            selection.select_iter(next_iter)
> +        elif len(self.pathdata):
> +            selection.select_path(len(self.pathdata) - 1)
>         self.refresh_path_list()
>         self.dirty_event()
>
> @@ -365,60 +374,15 @@
>         dlg.run()
>         dlg.hide()
>
> -    def _refresh_path(self, *args):
> -        name, path = (self._pathnameedit.get_text(),
> -                self._pathpathedit.get_text())
> -        if name == 'default':
> -            vbox, info, widgets = self.pages[2]
> -            widgets[0].child.set_text(path)
> -            del self.pathlist[self.curpathrow]
> -        elif name == 'default-push':
> -            vbox, info, widgets = self.pages[2]
> -            widgets[1].child.set_text(path)
> -            del self.pathlist[self.curpathrow]
> -        else:
> -            self.pathlist[self.curpathrow] = (name, path)
> -        self.refresh_path_list()
> -        self.dirty_event()
> -
> -    def _pathlist_rowchanged(self, sel):
> -        model, iter = sel.get_selected()
> -        if not iter:
> -            return
> -        self._pathnameedit.set_text(model.get(iter, 0)[0])
> -        self._pathpathedit.set_text(model.get(iter, 1)[0])
> -        self._pathnameedit.set_sensitive(True)
> -        self._pathpathedit.set_sensitive(True)
> -        self.curpathrow = model.get(iter, 3)[0]
> -
>     def refresh_path_list(self):
> -        model = gtk.ListStore(gobject.TYPE_PYOBJECT,
> -                gobject.TYPE_PYOBJECT,
> -                gobject.TYPE_STRING,
> -                gobject.TYPE_PYOBJECT)
> -        row = 0
> -        for (name, path) in self.pathlist:
> -            iter = model.insert_before(None, None)
> -            model.set_value(iter, 0, name)
> -            model.set_value(iter, 1, path)
> -            model.set_value(iter, 2, "%s = %s" % (name, path))
> -            model.set_value(iter, 3, row)
> -            row += 1
> -        self.pathtree.set_model(model)
> -        if len(self.pathlist):
> +        """Update sensitivity of buttons"""
> +        if ( len(self.pathdata)
> +        and self.pathtree.get_selection().count_selected_rows() ):
>             self._delpathbutton.set_sensitive(True)
>             self._testpathbutton.set_sensitive(True)
> -            self._refreshpathbutton.set_sensitive(True)
>         else:
>             self._delpathbutton.set_sensitive(False)
>             self._testpathbutton.set_sensitive(False)
> -            self._refreshpathbutton.set_sensitive(False)
> -            self._pathnameedit.set_text('')
> -            self._pathpathedit.set_text('')
> -            self._pathnameedit.set_sensitive(False)
> -            self._pathpathedit.set_sensitive(False)
> -        if self.curpathrow >= 0 and self.curpathrow < len(self.pathlist):
> -            self.pathsel.select_path(self.curpathrow)
>
>     def fill_frame(self, frame, info):
>         widgets = []
> @@ -558,10 +522,11 @@
>         self.history.read()
>
>         # flush changes on paths page
> -        if len(self.pathlist):
> -            self._refresh_path(None)
> +        if len(self.pathdata):
>             refreshlist = []
> -            for (name, path) in self.pathlist:
> +            for row in self.pathdata:
> +                name = row[0]
> +                path = row[1]
>                 cpath = '.'.join(['paths', name])
>                 self.record_new_value(cpath, path, False)
>                 refreshlist.append(name)
>

Not sure what I did wrong, but the Remove and Test buttons are always
disabled, even after I click to select the paths many times.

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Tortoisehg-develop mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tortoisehg-develop

Reply via email to