Mailing list archives: December 2004

Site index · List index
Message listThread · Author · Date
[No Subject] Sat, 07 Apr, 02:32
[No Subject] Sat, 18 Sep, 17:42
[No Subject] Sat, 18 Sep, 17:42
[No Subject] Sat, 27 Mar, 00:21
visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row <= row < end_row and start_col <= col < end_col + + def in_old(row, col): + return old[0] <= row < old[1] and old[2] <= col < old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): </ins><span class="cx"> return unicode(item) </span><span class="cx"> </span><del>-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) </del><ins>+ def sort_key(self, item): + return self.get_value(item) </ins><span class="cx"> </span><del>-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) </del><ins>+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) </ins><span class="cx"> </spanspan class="cx"> </span><span class="cx"> class Viewer(trellis.Component): </span></span></pre> </div> </div> </body> </html> Sat, 27 Mar, 00:21
= = = = = = = = = = = = = = = = = = = = = = = = # Not used at the moment, but might be revived soon </span> </pre> </div> </div> </body> </html> Thu, 29 Jul, 13:31
an class="cx"> cell = None </span><span class="cx"> scope = One() </span><span class="cx"> </span><ins>+ +class _RuleCell(trellis.Cell): + def get_value(self): + return self.rule().get_value() + def set_value(self, value): + return self.rule().set_value(value) + value = property(get_value, set_value) + + +class Scope(InteractionComponent): + model = trellis.attr(None) + features = Many(inverse=Feature.scope) + + def make_model_cell(self, attr): + return _RuleCell(lambda: trellis.Cells(self.model)[attr]) + + @staticmethod + def feature_cells(**kw): + def rule(scope): + def iter_features(): + for key, fn in kw.iteritems(): + feature = fn() + feature.scope = scope + feature.cell = scope.make_model_cell(key) + yield feature + return tuple(iter_features()) + return trellis.CellAttribute(rule=rule) + + </ins><span class="cx"> class Text(Feature): </span><span class="cx"> pass </span><span class="cx"> </span><ins>+ </ins><span class="cx"> class Command(Feature): </span><span class="cx"> def act(self): pass </span><span class="cx"> </span><del>-class Table(Feature): - items = trellis.make(trellis.List) </del><span class="cx"> </span><ins>+class Table(Scope): + """A Table is responsible for managing the display of a C{trellis.Set}""" + columns = trellis.make(trellis.List) + sort_column = trellis.attr(None) + select_column = trellis.attr(resetting_to=None) + + @trellis.make(optional=False) + def items(self): + return collections.SortedSet(data=self.model) + </ins><span class="cx"> @trellis.maintain(initially=None) </span><ins>+ def model(self): + if self.model is None: + return trellis.Set() + return self.model + + @staticmethod + def default_sort_key(item): + return item + + @trellis.maintain + def _maintain_sort_params(self): + if self.select_column is not None and self.select_column.can_sort: + if self.select_column is self.sort_column: + self.select_column.sort_ascending = not self.select_column.sort_ascending + self.items.reverse = not self.select_column.sort_ascending + else: + self.sort_column = self.select_column + elif self.sort_column is None: + self.items.sort_key = self.default_sort_key + else: + # should probably be in a modifier because it could + # trigger 2 unnecessary sorts + self.items.sort_key = self.sort_column.sort_key + self.items.reverse = not self.sort_column.sort_ascending + + @trellis.maintain(initially=None, optional=True) </ins><span class="cx"> def selected_item(self): </span><span class="cx"> if self.selected_item is None or not self.selected_item in self.items: </span><del>- return self.items[0] or None </del><ins>+ return self.items[0] if self.items else None </ins><span class="cx"> return self.selected_item </span><span class="cx"> </span><del>- def display_name(self, item): - """Hook for customizing item display""" </del><ins>+ def get_cell_value(self, (row, col)): + """Get value at (row, col) in the table""" + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row <= row < end_row and start_col <= col < end_col + + def in_old(row, col): + return old[0] <= row < old[1] and old[2] <= col < old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): </ins><span class="cx"> return unicode(item) </span><span class="cx"> </span><del>-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) </del><ins>+ def sort_key(self, item): + return self.get_value(item) </ins><span class="cx"> </span><del>-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) </del><ins>+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) </ins><span class="cx"> </spanspan class="cx"> </span><span class="cx"> class Viewer(trellis.Component): </span></span></pre> </div> </div> </body> </html> Thu, 29 Jul, 13:31
rchives/design/200412.mbox/author Sun, 01 Sep, 04:58
elf, value): - return self.rule().set_value(value) - value = property(get_value, set_value) </del><ins>+ def sort_key(self, item): + return self.get_value(item) </ins><span class="cx"> </span><del>-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) </del><ins>+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) </ins><span class="cx"> </span><del>- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) </del><ins>+class Frame(Scope): + """A top-level window/dialog in the UI""" + pass </ins><span class="cx"> </span><del>- </del><span class="cx"> #### Utility ##### </span><span class="cx"> </span><span class="cx"> class Viewer(trellis.Component): </span></span></pre> </div> </div> </body> </html> Sun, 01 Sep, 04:58
past_done, future_later: </span><span class="c Sun, 01 Sep, 04:58
ed_item is None or not self.selected_item in self.items: </span><del>- return self.items[0] or None </del><ins>+ return self.items[0] if self.items else None </ins><span class="cx"> return self.selected_item </span><span class="cx"> </span><del>- def display_name(self, item): - """Hook for customizing item display""" </del><ins>+ def get_cell_value(self, (row, col)): + """Get value at (row, col) in the table""" + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row <= row < end_row and start_col <= col < end_col + + def in_old(row, col): + return old[0] <= row < old[1] and old[2] <= col < old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): </ins><span class="cx"> return unicode(item) </span><span class="cx"> </span><del>-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) </del><ins>+ def sort_key(self, item): + return self.get_value(item) </ins><span class="cx"> </span><del>-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) </del><ins>+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) </ins><span class="cx"> </spanspan class="cx"> </span><span class="cx"> class Viewer(trellis.Component): </span></span></pre> </div> </div> </body> </html> Sun, 01 Sep, 04:58
<Rathfl...@hotmail.com> 9È¥9 Fri, 27 Sep, 11:50
eine.nu ; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 05 Mar, 19:45
g...@washington.edu> =&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 15 Nov, 13:18
helor return (pseudo_uuid[:position], + fromICalendarDa Tue, 05 Jan, 14:30
helor gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; label=u'', &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; enabled=True, &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; visible=True, &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; help=None, &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; ) &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ +class Feature(InteractionComponent): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; cell = None &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; scope = One() &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ +class _RuleCell(trellis.Cell): + def get_value(self): + return self.rule().get_value() + def set_value(self, value): + return self.rule().set_value(value) + value = property(get_value, set_value) + + +class Scope(InteractionComponent): + model = trellis.attr(None) + features = Many(inverse=Feature.scope) + + def make_model_cell(self, attr): + return _RuleCell(lambda: trellis.Cells(self.model)[attr]) + + @staticmethod + def feature_cells(**kw): + def rule(scope): + def iter_features(): + for key, fn in kw.iteritems(): + feature = fn() + feature.scope = scope + feature.cell = scope.make_model_cell(key) + yield feature + return tuple(iter_features()) + return trellis.CellAttribute(rule=rule) + + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Text(Feature): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; pass &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Command(Feature): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def act(self): pass &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Table(Feature): - items = trellis.make(trellis.List) &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+class Table(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A Table is responsible for managing the display of a C{trellis.Set}&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + columns = trellis.make(trellis.List) + sort_column = trellis.attr(None) + select_column = trellis.attr(resetting_to=None) + + @trellis.make(optional=False) + def items(self): + return collections.SortedSet(data=self.model) + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; @trellis.maintain(initially=None) &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ def model(self): + if self.model is None: + return trellis.Set() + return self.model + + @staticmethod + def default_sort_key(item): + return item + + @trellis.maintain + def _maintain_sort_params(self): + if self.select_column is not None and self.select_column.can_sort: + if self.select_column is self.sort_column: + self.select_column.sort_ascending = not self.select_column.sort_ascending + self.items.reverse = not self.select_column.sort_ascending + else: + self.sort_column = self.select_column + elif self.sort_column is None: + self.items.sort_key = self.default_sort_key + else: + # should probably be in a modifier because it could + # trigger 2 unnecessary sorts + self.items.sort_key = self.sort_column.sort_key + self.items.reverse = not self.sort_column.sort_ascending + + @trellis.maintain(initially=None, optional=True) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def selected_item(self): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; if self.selected_item is None or not self.selected_item in self.items: &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- return self.items[0] or None &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ return self.items[0] if self.items else None &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return self.selected_item &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def display_name(self, item): - &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Hook for customizing item display&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def get_cell_value(self, (row, col)): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Get value at (row, col) in the table&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row &amp;amp;lt;= row &amp;amp;lt; end_row and start_col &amp;amp;lt;= col &amp;amp;lt; end_col + + def in_old(row, col): + return old[0] &amp;amp;lt;= row &amp;amp;lt; old[1] and old[2] &amp;amp;lt;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/spanspan class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Tue, 05 Jan, 14:30
ing move comments refering to bug 1998 Fri, 06 Mar, 15:55
ing olueTime(view, pseudo_uuid[position:])[0]) + return (pseudo_uuid, None) + + + &lt;/span&gt;&lt;span class="cx"&gt; # = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = # Not used at the moment, but might be revived soon &lt;/span&gt; &lt;/pre&gt; &lt;/div&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt; Fri, 06 Mar, 15:55
ing safoundation.org Fri, 06 Mar, 15:55
ing return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 06 Mar, 15:55
ing return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 06 Mar, 15:55
ing return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 06 Mar, 15:55
ing g Fri, 06 Mar, 15:55
ing n.sort_ascending + + @trellis.maintain(initially=None, optional=True) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def selected_item(self): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; if self.selected_item is None or not self.selected_item in self.items: &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- return self.items[0] or None &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ return self.items[0] if self.items else None &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return self.selected_item &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def display_name(self, item): - &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Hook for customizing item display&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def get_cell_value(self, (row, col)): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Get value at (row, col) in the table&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row &amp;amp;lt;= row &amp;amp;lt; end_row and start_col &amp;amp;lt;= col &amp;amp;lt; end_col + + def in_old(row, col): + return old[0] &amp;amp;lt;= row &amp;amp;lt; old[1] and old[2] &amp;amp;lt;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/spanspan class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 06 Mar, 15:55
lco...@vh-s.de> n&gt;&lt;span class="cx"&gt Fri, 26 Jul, 11:50
lco...@vh-s.de> 8ý Fri, 26 Jul, 11:50
lco...@vh-s.de> (lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Fri, 26 Jul, 11:50
lco...@vh-s.de> ;/html&amp;gt; Fri, 26 Jul, 11:50
lt html&amp;gt; Tue, 19 Apr, 06:07
m [No Subject] Fri, 17 Sep, 18:43
m [No Subject] Fri, 17 Sep, 18:43
m f/sharing/utility.tu.osafoundation.org> Fri, 17 Sep, 18:43
m.@osafoundation.org> ) + if position != -1: + return (pseudo_uuid[:position], + fromICalendarDateTime(view, pseudo_uuid[position + 2:])[0]) + position = pseudo_uuid.find(':') + if position != -1: + return (pseudo_uuid[:position], + fromICalendarDa Mon, 03 May, 09:42
m.@osafoundation.org> ) + if position != -1: + return (pseudo_uuid[:position], + fromICalendarDateTime(view, pseudo_uuid[position + 2:])[0]) + position = pseudo_uuid.find(':') + if position != -1: + return (pseudo_uuid[:position], + fromICalendarDa Mon, 03 May, 09:42
m.@osafoundation.org> ) + if position != -1: + return (pseudo_uuid[:position], + fromICalendarDateTime(view, pseudo_uuid[position + 2:])[0]) + position = pseudo_uuid.find(':') + if position != -1: + return (pseudo_uuid[:position], + fromICalendarDa Mon, 03 May, 09:42
m.@osafoundation.org> turn tuple(iter_features()) + return trellis.CellAttribute(rule=rule) + + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Text(Feature): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; pass &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Command(Feature): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def act(self): pass &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Table(Feature): - items = trellis.make(trellis.List) &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+class Table(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A Table is responsible for managing the display of a C{trellis.Set}&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + columns = trellis.make(trellis.List) + sort_column = trellis.attr(None) + select_column = trellis.attr(resetting_to=None) + + @trellis.make(optional=False) + def items(self): + return collections.SortedSet(data=self.model) + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; @trellis.maintain(initially=None) &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ def model(self): + if self.model is None: + return trellis.Set() + return self.model + + @staticmethod + def default_sort_key(item): + return item + + @trellis.maintain + def _maintain_sort_params(self): + if self.select_column is not None and self.select_column.can_sort: + if self.select_column is self.sort_column: + self.select_column.sort_ascending = not self.select_column.sort_ascending + self.items.reverse = not self.select_column.sort_ascending + else: + self.sort_column = self.select_column + elif self.sort_column is None: + self.items.sort_key = self.default_sort_key + else: + # should probably be in a modifier because it could + # trigger 2 unnecessary sorts + self.items.sort_key = self.sort_column.sort_key + self.items.reverse = not self.sort_column.sort_ascending + + @trellis.maintain(initially=None, optional=True) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def selected_item(self): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; if self.selected_item is None or not self.selected_item in self.items: &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- return self.items[0] or None &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ return self.items[0] if self.items else None &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return self.selected_item &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def display_name(self, item): - &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Hook for customizing item display&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def get_cell_value(self, (row, col)): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Get value at (row, col) in the table&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row &amp;amp;lt;= row &amp;amp;lt; end_row and start_col &amp;amp;lt;= col &amp;amp;lt; end_col + + def in_old(row, col): + return old[0] &amp;amp;lt;= row &amp;amp;lt; old[1] and old[2] &amp;amp;lt;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/spanspan class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Mon, 03 May, 09:42
nen is.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Wed, 11 Jan, 14:11
od col &amp;amp;lt; end_col + + def in_old(row, col): + return old[0] &amp;amp;lt;= row &amp;amp;lt; old[1] and old[2] &amp;amp;lt;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Sat, 17 Aug, 17:33
shov return tuple(iter_features()) + return trellis.CellAttribute(rule=rule) + + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Text(Feature): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; pass &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Command(Feature): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def act(self): pass &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Table(Feature): - items = trellis.make(trellis.List) &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+class Table(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A Table is responsible for managing the display of a C{trellis.Set}&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + columns = trellis.make(trellis.List) + sort_column = trellis.attr(None) + select_column = trellis.attr(resetting_to=None) + + @trellis.make(optional=False) + def items(self): + return collections.SortedSet(data=self.model) + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; @trellis.maintain(initially=None) &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ def model(self): + if self.model is None: + return trellis.Set() + return self.model + + @staticmethod + def default_sort_key(item): + return item + + @trellis.maintain + def _maintain_sort_params(self): + if self.select_column is not None and self.select_column.can_sort: + if self.select_column is self.sort_column: + self.select_column.sort_ascending = not self.select_column.sort_ascending + self.items.reverse = not self.select_column.sort_ascending + else: + self.sort_column = self.select_column + elif self.sort_column is None: + self.items.sort_key = self.default_sort_key + else: + # should probably be in a modifier because it could + # trigger 2 unnecessary sorts + self.items.sort_key = self.sort_column.sort_key + self.items.reverse = not self.sort_column.sort_ascending + + @trellis.maintain(initially=None, optional=True) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def selected_item(self): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; if self.selected_item is None or not self.selected_item in self.items: &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- return self.items[0] or None &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ return self.items[0] if self.items else None &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return self.selected_item &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def display_name(self, item): - &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Hook for customizing item display&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def get_cell_value(self, (row, col)): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Get value at (row, col) in the table&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row &amp;amp;lt;= row &amp;amp;lt; end_row and start_col &amp;amp;lt;= col &amp;amp;lt; end_col + + def in_old(row, col): + return old[0] &amp;amp;lt;= row &amp;amp;lt; old[1] and old[2] &amp;amp;lt;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/spanspan class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Wed, 22 Jul, 08:41
va...@yahoo.ca> ;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Tue, 22 Feb, 04:55
va...@yahoo.ca> ;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Tue, 22 Feb, 04:55
va...@yahoo.ca> [No Subject] Tue, 22 Feb, 04:55
va...@yahoo.ca> [No Subject] Tue, 22 Feb, 04:55
va...@yahoo.ca> tion.org Tue, 22 Feb, 04:55
va...@yahoo.ca> k) [284] placeholder for vision page Tue, 22 Feb, 04:55
va...@yahoo.ca> used at the moment, but might be revived soon &amp;lt;/span&amp;gt; &amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Tue, 22 Feb, 04:55
va...@yahoo.ca> return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def make_model_cell(self, attr): - return _RuleCell(lambda: trellis.Cells(self.model)[attr]) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+class Frame(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A top-level window/dialog in the UI&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + pass &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- &amp;lt;/del&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; #### Utility ##### &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Tue, 22 Feb, 04:55
va...@yahoo.ca> mp;gt;&amp;lt;ins&amp;gt;+class Table(Scope): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;A Table is responsible for managing the display of a C{trellis.Set}&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + columns = trellis.make(trellis.List) + sort_column = trellis.attr(None) + select_column = trellis.attr(resetting_to=None) + + @trellis.make(optional=False) + def items(self): + return collections.SortedSet(data=self.model) + &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; @trellis.maintain(initially=None) &amp;lt;/span&amp;gt;&amp;lt;ins&amp;gt;+ def model(self): + if self.model is None: + return trellis.Set() + return self.model + + @staticmethod + def default_sort_key(item): + return item + + @trellis.maintain + def _maintain_sort_params(self): + if self.select_column is not None and self.select_column.can_sort: + if self.select_column is self.sort_column: + self.select_column.sort_ascending = not self.select_column.sort_ascending + self.items.reverse = not self.select_column.sort_ascending + else: + self.sort_column = self.select_column + elif self.sort_column is None: + self.items.sort_key = self.default_sort_key + else: + # should probably be in a modifier because it could + # trigger 2 unnecessary sorts + self.items.sort_key = self.sort_column.sort_key + self.items.reverse = not self.sort_column.sort_ascending + + @trellis.maintain(initially=None, optional=True) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; def selected_item(self): &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; if self.selected_item is None or not self.selected_item in self.items: &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- return self.items[0] or None &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ return self.items[0] if self.items else None &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return self.selected_item &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;- def display_name(self, item): - &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Hook for customizing item display&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def get_cell_value(self, (row, col)): + &amp;amp;quot;&amp;amp;quot;&amp;amp;quot;Get value at (row, col) in the table&amp;amp;quot;&amp;amp;quot;&amp;amp;quot; + self.items.changes # introduce dependency?!?! + try: + item = self.items[row] + column = self.columns[col] + except IndexError: + return None + else: + return column.get_value(item) + + visible_range_change = trellis.attr(resetting_to=(0, 0, 0, 0)) + + @trellis.maintain(initially=(0, 0, 0, 0)) + def visible_ranges(self): + visible_ranges = tuple(old + delta + for old, delta in zip(self.visible_ranges, + self.visible_range_change)) + if self.visible_ranges != visible_ranges: + self.set_visible_ranges(visible_ranges) + return visible_ranges + + @trellis.make + def observer(self): + return collections.Observing(lookup_func=self.get_cell_value) + + @trellis.modifier + def set_visible_ranges(self, (start_row, end_row, start_col, end_col)): + keys = self.observer.keys + old = self.visible_ranges + + def in_new(row, col): + return start_row &amp;amp;lt;= row &amp;amp;lt; end_row and start_col &amp;amp;lt;= col &amp;amp;lt; end_col + + def in_old(row, col): + return old[0] &amp;amp;lt;= row &amp;amp;lt; old[1] and old[2] &amp;amp;lt;= col &amp;amp;lt; old[3] + + for row in xrange(min(old[0], start_row), max(old[1], end_row)): + for col in xrange(min(old[2], start_col), max(old[2], end_col)): + cell_in_new = in_new(row, col) + cell_in_old = in_old(row, col) + + if cell_in_new and not cell_in_old: + keys.add((row, col)) + elif cell_in_old and not cell_in_new: + keys.remove((row, col)) + + + +class TableColumn(InteractionComponent): + def get_value(self, item): &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; return unicode(item) &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class _RuleCell(trellis.Cell): - def get_value(self): - return self.rule().get_value() - def set_value(self, value): - return self.rule().set_value(value) - value = property(get_value, set_value) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ def sort_key(self, item): + return self.get_value(item) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;del&amp;gt;-class Scope(trellis.Component): - model = trellis.attr(None) - features = Many(inverse=Feature.scope) &amp;lt;/del&amp;gt;&amp;lt;ins&amp;gt;+ trellis.attrs( + can_sort=True, + sort_ascending=False, + ) &amp;lt;/ins&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; &amp;lt;/spanspan class=&quot;cx&quot;&amp;gt; &amp;lt;/span&amp;gt;&amp;lt;span class=&quot;cx&quot;&amp;gt; class Viewer(trellis.Component): &amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/pre&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/div&amp;gt; &amp;lt;/body&amp;gt; &amp;lt;/html&amp;gt; Tue, 22 Feb, 04:55
Message listThread · Author · Date
Box list
Jan 200827
Dec 2007224
Nov 2007217
Oct 2007105
Sep 200793
Aug 200727
Jul 2007105
Jun 2007108
May 2007292
Apr 2007276
Mar 2007275
Feb 2007303
Jan 2007183
Dec 2006232
Nov 2006183
Oct 200697
Sep 2006163
Aug 2006162
Jul 2006265
Jun 2006136
May 2006105
Apr 2006208
Mar 2006229
Feb 2006230
Jan 2006260
Dec 2005128
Nov 2005246
Oct 2005123
Sep 200572
Aug 200524
Jul 200517
Jun 20054
May 200520
Apr 20059
Mar 200519
Feb 200514
Jan 200548
Dec 200448
Nov 200410
Oct 20043
Aug 200411
Jul 20045
Jun 200412
May 20041
Apr 200421
Mar 200419
Feb 20047
Jan 200463
Dec 200344
Nov 200335
Oct 200343
Sep 200338
Aug 200354
Jul 200314
Jun 200360
May 2003125
Apr 2003117
Mar 2003166
Feb 2003220
Jan 2003408
Dec 2002297
Nov 2002728
Oct 2002479