[Bugs] #1586 UNSP: TreeView widget
Sugar Labs Bugs
bugtracker-noreply at sugarlabs.org
Fri Nov 27 22:27:01 EST 2009
#1586: TreeView widget
------------------------------------------+---------------------------------
Reporter: alsroot | Owner: erikos
Type: enhancement | Status: new
Priority: Unspecified by Maintainer | Milestone: 0.88
Component: sugar-toolkit | Version: Git as of bugdate
Severity: Unspecified | Keywords:
Distribution: Unspecified | Status_field: Unconfirmed
------------------------------------------+---------------------------------
Comment(by alsroot):
Replying to [comment:6 tomeu]:
> I'm not very happy with the design of SmoothTable and LazyModel. The
other classes need to know about bin_rows, frames, cursors, models,
sources, and I cannot figure out what more than half of those are. This is
raising significantly the bar to hack on the journal without a high risk
of adding regressions. In the existing lazy model, we encapsulate all the
cache and readahead business inside model.py and it is not exposed to user
classes, why do we must drop the benefits of such separation of concerns
in order to get a thumbs view?
what makes sense for SmootTable/TreeView I renamed and added comments
> Doing a good class design for this is hard work, that's why gtk.TreeView
sucks so much presently. There's an ongoing discussion about how to
improve the TreeView class design in Gtk+ right now, see Kristian
Rietveld's and Philip Van Hoof's blogs about it.
well, in comparing to what Gnome needs, our case is very simple and since
new widget is yet ready, proposed using(being very simple) could be useful
choice
> {{{
> 2190 + self._adj = None
> }}}
>
> "adj" could mean a lot of different things.
renamed to _adjustment
> {{{
> 2202 + for i_ in range(rows + 2):
> }}}
>
> '2' is a magical number, can we use a constant?
added _SPARE_ROWS
> {{{
> 2207 + cell.set_parent(self)
> 2208 + cell.size_allocate(gtk.gdk.Rectangle(-1, -1))
> 2209 + row.append(cell)
> }}}
>
> One more circular dependency :( We should be spending more time
designing the class model and less time coding and debugging.
not sure how we can avoid gtk circular dependencies coding gtk
applications :)
> {{{
> 2186 + def __init__(self, rows, columns, new_cell, fill_in):
> ...
> 2205 + cell = new_cell()
> }}}
>
> How we use to do this is by having an abstract method that concrete
subclasses can implement. In python is very easy and powerful to pass
around references to methods but gets messy very quickly because it's hard
to find where is defined the method that will be called. Every time you
are tempted to pass a method reference, consider using instead an abstract
method or a signal.
well, new_cell, for example, could be a class or closure function
so in case of using SmootTable in user code, he should create new class to
redefine only these two functions, brrr...
> {{{
> 2214 + def get_columns(self):
> ...
> 2219 + def get_rows(self):
> }}}
>
> I would expect that a method named like that would return a collection
of all the rows or columns. What about calling them get_row_count and
get_column_count?
done
> {{{
> 2259 + def goto(self, row):
> }}}
>
> What about calling it scroll_to_row similarly to what gtk.TreeView
already has?
done
> {{{
> 2399 + callocation = gtk.gdk.Rectangle(cell_x, cell_y)
> }}}
>
> Can we avoid this abbreviation?
done
> {{{
> 2407 + def _get_head(self):
> }}}
>
> Cannot get what this method does, can we have a more descriptive name
for it?
renamed to _get_upper_visible_row
> {{{
> 2412 + def __adjustment_value_changed_cb(self, sender=None):
> }}}
>
> What is sender here?
done
> {{{
> 2427 + class IndexedRow:
> }}}
>
> Better define all classes always on the module scope level.
done
> {{{
> 2475 + uplimit = self._adj.upper - page
> }}}
>
> upper_limit?
done
--
Ticket URL: <http://bugs.sugarlabs.org/ticket/1586#comment:1>
Sugar Labs <http://sugarlabs.org/>
Sugar Labs bug tracking system
More information about the Bugs
mailing list