diff options
author | Jesús Eduardo <heckyel@hyperbola.info> | 2018-01-14 14:22:05 -0500 |
---|---|---|
committer | Jesús Eduardo <heckyel@hyperbola.info> | 2018-01-14 14:22:05 -0500 |
commit | 9eb6470e5450d09c9e15b853f949d39484def519 (patch) | |
tree | 8598303aef153926a7a4b62aba22812e0896f268 /lvc | |
parent | 952615f73210802d41820bde220403f30cf2de6d (diff) | |
download | librevideoconverter-9eb6470e5450d09c9e15b853f949d39484def519.tar.lz librevideoconverter-9eb6470e5450d09c9e15b853f949d39484def519.tar.xz librevideoconverter-9eb6470e5450d09c9e15b853f949d39484def519.zip |
pep8 en lvc/widgets/osx/tableview.py
C: 1, 0: Too many lines in module (1671/1000) (too-many-lines)
Diffstat (limited to 'lvc')
-rw-r--r-- | lvc/widgets/osx/tableview.py | 162 |
1 files changed, 102 insertions, 60 deletions
diff --git a/lvc/widgets/osx/tableview.py b/lvc/widgets/osx/tableview.py index 9f490d2..aae0805 100644 --- a/lvc/widgets/osx/tableview.py +++ b/lvc/widgets/osx/tableview.py @@ -59,19 +59,25 @@ EXPANDER_PADDING = 6 HEADER_HEIGHT = 17 CUSTOM_HEADER_HEIGHT = 25 + def iter_range(ns_range): """Iterate over an NSRange object""" return xrange(ns_range.location, ns_range.location + ns_range.length) Rect = namedtuple('Rect', 'x y width height') + + def NSRectToRect(nsrect): origin, size = nsrect.origin, nsrect.size return Rect(origin.x, origin.y, size.width, size.height) Point = namedtuple('Point', 'x y') + + def NSPointToPoint(nspoint): return Point(int(nspoint.x), int(nspoint.y)) + class HotspotTracker(object): """Contains the info on the currently tracked hotspot. See: https://develop.participatoryculture.org/index.php/WidgetAPITableView @@ -105,9 +111,9 @@ class HotspotTracker(object): def update_position(self, point): cell_frame = self.tableview.frameOfCellAtColumn_row_(self.column, - self.row) + self.row) self.pos = NSPoint(point.x - cell_frame.origin.x, - point.y - cell_frame.origin.y) + point.y - cell_frame.origin.y) def update_hit(self): old_hit = self.hit @@ -125,21 +131,23 @@ class HotspotTracker(object): def calc_hotspot(self): self.set_cell_data() cell_frame = self.tableview.frameOfCellAtColumn_row_(self.column, - self.row) + self.row) style = self.cell.make_drawing_style(cell_frame, self.tableview) layout_manager = self.cell.layout_manager layout_manager.reset() return self.cell.wrapper.hotspot_test(style, layout_manager, - self.pos.x, self.pos.y, cell_frame.size.width, - cell_frame.size.height) + self.pos.x, self.pos.y, + cell_frame.size.width, + cell_frame.size.height) def redraw_cell(self): # Check to see if we removed the table in response to a hotspot click. if self.tableview.superview() is not nil: cell_frame = self.tableview.frameOfCellAtColumn_row_(self.column, - self.row) + self.row) self.tableview.setNeedsDisplayInRect_(cell_frame) + def _calc_interior_frame(total_frame, tableview): """Calculate the inner cell area for a table cell. @@ -148,9 +156,10 @@ def _calc_interior_frame(total_frame, tableview): render to, given the total spacing. """ return NSMakeRect(total_frame.origin.x + tableview.column_spacing // 2, - total_frame.origin.y + tableview.row_spacing // 2, - total_frame.size.width - tableview.column_spacing, - total_frame.size.height - tableview.row_spacing) + total_frame.origin.y + tableview.row_spacing // 2, + total_frame.size.width - tableview.column_spacing, + total_frame.size.height - tableview.row_spacing) + class MiroTableCell(NSTextFieldCell): def init(self): @@ -159,7 +168,7 @@ class MiroTableCell(NSTextFieldCell): def calcHeight_(self, view): font = self.font() return math.ceil(font.ascender() + abs(font.descender()) + - font.leading()) + font.leading()) def highlightColorWithFrame_inView_(self, frame, view): return nil @@ -172,8 +181,9 @@ class MiroTableCell(NSTextFieldCell): NSCell.setObjectValue_(self, value_dict) def drawInteriorWithFrame_inView_(self, frame, view): - return NSTextFieldCell.drawInteriorWithFrame_inView_(self, - _calc_interior_frame(frame, view), view) + return NSTextFieldCell.drawInteriorWithFrame_inView_( + self, _calc_interior_frame(frame, view), view) + class MiroTableInfoListTextCell(MiroTableCell): def initWithAttrGetter_(self, attr_getter): @@ -187,8 +197,8 @@ class MiroTableInfoListTextCell(MiroTableCell): # adjust frame based on the cell spacing frame = _calc_interior_frame(frame, view) if (self.isHighlighted() and frame is not None and - (view.isDescendantOf_(view.window().firstResponder()) or - view.gradientHighlight) and view.window().isMainWindow()): + (view.isDescendantOf_(view.window().firstResponder()) or + view.gradientHighlight) and view.window().isMainWindow()): self.setTextColor_(NSColor.whiteColor()) else: self.setTextColor_(self._textColor) @@ -214,6 +224,7 @@ class MiroTableInfoListTextCell(MiroTableCell): # happens in initialization NSCell.setObjectValue_(self, '') + class MiroTableImageCell(NSImageCell): def calcHeight_(self, view): return self.value_dict['image'].size().height @@ -225,8 +236,9 @@ class MiroTableImageCell(NSImageCell): NSImageCell.setObjectValue_(self, value_dict['image']) def drawInteriorWithFrame_inView_(self, frame, view): - return NSImageCell.drawInteriorWithFrame_inView_(self, - _calc_interior_frame(frame, view), view) + return NSImageCell.drawInteriorWithFrame_inView_( + self, _calc_interior_frame(frame, view), view) + class MiroCheckboxCell(NSButtonCell): def init(self): @@ -254,7 +266,8 @@ class MiroCheckboxCell(NSButtonCell): def continueTracking_at_inView_(self, lastPoint, at, view): return YES - def stopTracking_at_inView_mouseIsUp_(self, lastPoint, at, tableview, mouseIsUp): + def stopTracking_at_inView_mouseIsUp_(self, lastPoint, at, + tableview, mouseIsUp): if mouseIsUp: column = tableview.columnAtPoint_(at) row = tableview.rowAtPoint_(at) @@ -264,11 +277,13 @@ class MiroCheckboxCell(NSButtonCell): itr = wrapper.model.iter_for_row(tableview, row) column.renderer.emit('clicked', itr) return NSButtonCell.stopTracking_at_inView_mouseIsUp_(self, lastPoint, - at, tableview, mouseIsUp) + at, tableview, + mouseIsUp) def drawInteriorWithFrame_inView_(self, frame, view): - return NSButtonCell.drawInteriorWithFrame_inView_(self, - _calc_interior_frame(frame, view), view) + return NSButtonCell.drawInteriorWithFrame_inView_( + self, _calc_interior_frame(frame, view), view) + class CellRendererBase(object): DRAW_BACKGROUND = True @@ -279,6 +294,7 @@ class CellRendererBase(object): def get_index(self): return self.index + class CellRenderer(CellRendererBase): def __init__(self): self.cell = self.build_cell() @@ -320,7 +336,9 @@ class CellRenderer(CellRendererBase): def set_color(self, color): color = NSColor.colorWithDeviceRed_green_blue_alpha_(color[0], - color[1], color[2], 1.0) + color[1], + color[2], + 1.0) self.cell._textColor = color self.cell.setTextColor_(color) @@ -335,10 +353,12 @@ class CellRenderer(CellRendererBase): raise ValueError("unknown alignment: %s", align) self.cell.setAlignment_(ns_alignment) + class ImageCellRenderer(CellRendererBase): def setDataCell_(self, column): column.setDataCell_(MiroTableImageCell.alloc().init()) + class CheckboxCellRenderer(CellRendererBase, signals.SignalEmitter): def __init__(self): signals.SignalEmitter.__init__(self, 'clicked') @@ -353,6 +373,7 @@ class CheckboxCellRenderer(CellRendererBase, signals.SignalEmitter): cell.setControlSize_(NSSmallControlSize) column.setDataCell_(cell) + class CustomTableCell(NSCell): def init(self): self = super(CustomTableCell, self).init() @@ -368,14 +389,14 @@ class CustomTableCell(NSCell): self.layout_manager.reset() self.set_wrapper_data() cell_size = self.wrapper.get_size(self.default_drawing_style, - self.layout_manager) + self.layout_manager) return cell_size[1] def make_drawing_style(self, frame, view): text_color = None if (self.isHighlighted() and frame is not None and (view.isDescendantOf_(view.window().firstResponder()) or - view.gradientHighlight) and view.window().isMainWindow()): + view.gradientHighlight) and view.window().isMainWindow()): text_color = NSColor.whiteColor() return DrawingStyle(text_color=text_color) @@ -395,7 +416,8 @@ class CustomTableCell(NSCell): else: pad_left = 0 drawing_rect = NSMakeRect(frame.origin.x + pad_left, frame.origin.y, - frame.size.width - pad_left, frame.size.height) + frame.size.width - pad_left, + frame.size.height) context = DrawingContext(view, drawing_rect, drawing_rect) context.style = self.make_drawing_style(frame, view) self.layout_manager.reset() @@ -406,7 +428,7 @@ class CustomTableCell(NSCell): hover_pos = [hover_pos[0] - hover_adjustment[0], hover_pos[1] - hover_adjustment[1]] self.wrapper.render(context, self.layout_manager, self.isHighlighted(), - self.hotspot, hover_pos) + self.hotspot, hover_pos) NSGraphicsContext.currentContext().restoreGraphicsState() def setObjectValue_(self, value): @@ -415,6 +437,7 @@ class CustomTableCell(NSCell): def set_wrapper_data(self): self.wrapper.__dict__.update(self.object_value) + class CustomCellRenderer(CellRendererBase): CellClass = CustomTableCell @@ -440,22 +463,26 @@ class CustomCellRenderer(CellRendererBase): def hotspot_test(self, style, layout, x, y, width, height): return None + class InfoListTableCell(CustomTableCell): def set_wrapper_data(self): self.wrapper.info, self.wrapper.attrs, self.wrapper.group_info = \ self.object_value + class InfoListRenderer(CustomCellRenderer): CellClass = InfoListTableCell def hotspot_test(self, style, layout, x, y, width, height): return None + class InfoListRendererText(CellRenderer): def build_cell(self): cell = MiroTableInfoListTextCell.alloc() return cell.initWithAttrGetter_(self.get_value) + def calc_row_height(view, model_row): max_height = 0 model = view.dataSource().model @@ -469,9 +496,10 @@ def calc_row_height(view, model_row): max_height = 12 return max_height + view.row_spacing + class TableViewDelegate(NSObject): def tableView_willDisplayCell_forTableColumn_row_(self, view, cell, - column, row): + column, row): column = view.column_index_map[column] cell.column = column cell.row = row @@ -486,7 +514,8 @@ class TableViewDelegate(NSObject): if column_wrapper._column is column: column_wrapper.emit('clicked') - def tableView_toolTipForCell_rect_tableColumn_row_mouseLocation_(self, tableview, cell, rect, column, row, location): + def tableView_toolTipForCell_rect_tableColumn_row_mouseLocation_( + self, tableview, cell, rect, column, row, location): wrapper = wrappermap.wrapper(tableview) iter = tableview.dataSource().model.iter_for_row(tableview, row) for wrapper_column in wrapper.columns: @@ -494,6 +523,7 @@ class TableViewDelegate(NSObject): break return (wrapper.get_tooltip(iter, wrapper_column), rect) + class VariableHeightTableViewDelegate(TableViewDelegate): def tableView_heightOfRow_(self, table_view, row): model = table_view.dataSource().model @@ -502,12 +532,12 @@ class VariableHeightTableViewDelegate(TableViewDelegate): return 12 return calc_row_height(table_view, model[iter]) - # TableViewCommon is a hack to do a Mixin class. We want the same behaviour # for our table views and our outline views. Normally we would use a Mixin, # but that doesn't work with pyobjc. Instead we define the common code in # TableViewCommon, then copy it into MiroTableView and MiroOutlineView + class TableViewCommon(object): def init(self): self = super(self.__class__, self).init() @@ -537,11 +567,11 @@ class TableViewCommon(object): # get mouseMoved events whenever the mouse is inside our view. self.tracking_area = NSTrackingArea.alloc() self.tracking_area.initWithRect_options_owner_userInfo_( - self.visibleRect(), - NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | - NSTrackingActiveInKeyWindow, - self, - nil) + self.visibleRect(), + NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved | + NSTrackingActiveInKeyWindow, + self, + nil) self.addTrackingArea_(self.tracking_area) def addTableColumn_(self, column): @@ -569,7 +599,7 @@ class TableViewCommon(object): if wrappermap.wrapper(self).draws_selection: if not self.gradientHighlight: return self.SuperClass.highlightSelectionInClipRect_(self, - rect) + rect) context = NSGraphicsContext.currentContext() focused = self.isDescendantOf_(self.window().firstResponder()) for row in tablemodel.list_from_nsindexset(self.selectedRowIndexes()): @@ -606,11 +636,13 @@ class TableViewCommon(object): # draw the top line NSColor.colorWithDeviceRed_green_blue_alpha_(*top_line_color).set() NSRectFill(top) - bottom = NSMakeRect(rect.origin.x, rect.origin.y + rect.size.height - 2, + bottom = NSMakeRect(rect.origin.x, + rect.origin.y + rect.size.height - 2, rect.size.width, 1) NSColor.colorWithDeviceRed_green_blue_alpha_(*bottom_line_color).set() NSRectFill(bottom) - highlight = NSMakeRect(rect.origin.x, rect.origin.y + rect.size.height - 1, + highlight = NSMakeRect(rect.origin.x, + rect.origin.y + rect.size.height - 1, rect.size.width, 1) NSColor.colorWithDeviceRed_green_blue_alpha_(0.918, 0.925, 0.941, 1.0).set() NSRectFill(highlight) @@ -620,7 +652,7 @@ class TableViewCommon(object): rect.size.height -= 3 NSRectClip(rect) gradient = Gradient(rect.origin.x, rect.origin.y, - rect.origin.x, rect.origin.y + rect.size.height) + rect.origin.x, rect.origin.y + rect.size.height) gradient.set_start_color(start_color) gradient.set_end_color(end_color) gradient.draw() @@ -647,8 +679,8 @@ class TableViewCommon(object): # anything to the clip rect, but do draw the area before the # first row and after the last row. self.drawBackgroundOutsideContent_clipRect_(col_index, - clip_rect) - if col_index == number_of_columns - 1: # last column + clip_rect) + if col_index == number_of_columns - 1: # last column if not column_rect: column_rect = self.rectOfColumn_(col_index) column_right = column_rect.origin.x + column_rect.size.width @@ -688,7 +720,7 @@ class TableViewCommon(object): if first_row_rect.origin.y > total_rect.origin.y: height = first_row_rect.origin.y - total_rect.origin.y NSRectFill(NSMakeRect(total_rect.origin.x, total_rect.origin.y, - total_rect.size.width, height)) + total_rect.size.width, height)) # fill the area below the last row last_row_rect = self.rectOfRow_(self.numberOfRows()-1) @@ -696,7 +728,7 @@ class TableViewCommon(object): y = NSMaxY(last_row_rect) + 1 height = NSMaxY(total_rect) - NSMaxY(last_row_rect) NSRectFill(NSMakeRect(total_rect.origin.x, y, - total_rect.size.width, height)) + total_rect.size.width, height)) def drawRow_clipRect_(self, row, clip_rect): self.SuperClass.drawRow_clipRect_(self, row, clip_rect) @@ -715,7 +747,7 @@ class TableViewCommon(object): rect.origin.y = NSMaxY(rect) - self.group_line_width rect.size.height = self.group_line_width NSColor.colorWithDeviceRed_green_blue_alpha_( - *self.group_line_color).set() + *self.group_line_color).set() NSRectFill(rect) def canDragRowsWithIndexes_atPoint_(self, indexes, point): @@ -734,7 +766,7 @@ class TableViewCommon(object): if (self.hover_info is not None and self.hover_info != (row, column)): # left a cell, redraw it the old one rect = self.frameOfCellAtColumn_row_(self.hover_info[1], - self.hover_info[0]) + self.hover_info[0]) self.setNeedsDisplayInRect_(rect) if row == -1 or column == -1: # corner case: we got a mouseMoved_ event, but the pointer is @@ -746,7 +778,7 @@ class TableViewCommon(object): self.setNeedsDisplayInRect_(rect) # recalculate hover_pos and hover_info self.hover_pos = (location[0] - rect[0][0], - location[0] - rect[0][1]) + location[0] - rect[0][1]) self.hover_info = (row, column) def mouseExited_(self, event): @@ -754,7 +786,7 @@ class TableViewCommon(object): # mouse left our window, unset hover and redraw the cell that the # mouse was in rect = self.frameOfCellAtColumn_row_(self.hover_info[1], - self.hover_info[0]) + self.hover_info[0]) self.setNeedsDisplayInRect_(rect) self.hover_pos = self.hover_info = None @@ -883,6 +915,7 @@ class TableViewCommon(object): else: self.SuperClass.keyDown_(self, event) + class TableColumn(signals.SignalEmitter): def __init__(self, title, renderer, header=None, **attrs): signals.SignalEmitter.__init__(self) @@ -951,6 +984,7 @@ class TableColumn(signals.SignalEmitter): self.index = index self.renderer.set_index(index) + class MiroTableColumn(NSTableColumn): def set_attrs(self, attrs): self._attrs = attrs @@ -958,11 +992,13 @@ class MiroTableColumn(NSTableColumn): def attrs(self): return self._attrs + class MiroTableView(NSTableView): SuperClass = NSTableView for name, value in TableViewCommon.__dict__.items(): locals()[name] = value + class MiroTableHeaderView(NSTableHeaderView): def initWithFrame_(self, frame): # frame is not used @@ -993,6 +1029,7 @@ class MiroTableHeaderView(NSTableHeaderView): context.stroke() NSGraphicsContext.currentContext().restoreGraphicsState() + class MiroTableHeaderCell(NSTableHeaderCell): def init(self): self = super(MiroTableHeaderCell, self).init() @@ -1016,13 +1053,13 @@ class MiroTableHeaderCell(NSTableHeaderCell): NSGraphicsContext.currentContext().saveGraphicsState() drawing_rect = NSMakeRect(frame.origin.x, frame.origin.y, - frame.size.width, frame.size.height) + frame.size.width, frame.size.height) context = DrawingContext(view, drawing_rect, drawing_rect) context.style = self.make_drawing_style(frame, view) self.layout_manager.reset() columns = wrappermap.wrapper(view.tableView()).columns header_cells = [c._column.headerCell() for c in columns] - background_only = not self in header_cells + background_only = self not in header_cells self.button.draw(context, self.layout_manager, background_only) NSGraphicsContext.currentContext().restoreGraphicsState() @@ -1030,10 +1067,11 @@ class MiroTableHeaderCell(NSTableHeaderCell): text_color = None if (self.isHighlighted() and frame is not None and (view.isDescendantOf_(view.window().firstResponder()) or - view.gradientHighlight)): + view.gradientHighlight)): text_color = NSColor.whiteColor() return DrawingStyle(text_color=text_color) + class CocoaSelectionOwnerMixin(SelectionOwnerMixin): """Cocoa-specific methods for selection management. @@ -1086,6 +1124,7 @@ class CocoaSelectionOwnerMixin(SelectionOwnerMixin): def _iter_from_string(self, row): return self.model.iter_for_row(self.tableview, int(row)) + class CocoaScrollbarOwnerMixin(ScrollbarOwnerMixin): """Manages a TableView's scroll position.""" def __init__(self): @@ -1109,8 +1148,8 @@ class CocoaScrollbarOwnerMixin(ScrollbarOwnerMixin): # NOTE: intentional changes are BoundsChanged; bad changes are # FrameChanged clipview.setPostsFrameChangedNotifications_(YES) - self.clipview_notifications.connect(self.on_scroll_changed, - 'NSViewFrameDidChangeNotification') + self.clipview_notifications.connect( + self.on_scroll_changed, 'NSViewFrameDidChangeNotification') # NOTE: scrollPoint_ just scrolls the point into view; we want to # scroll the view so that the point becomes the origin size = self.tableview.visibleRect().size @@ -1144,8 +1183,8 @@ class CocoaScrollbarOwnerMixin(ScrollbarOwnerMixin): return NSPointToPoint(point) def on_scroll_changed(self, notification): - # we get this notification when the scroll position has been reset (when - # it should not have been); put it back + # we get this notification when the scroll position has been reset + # (when it should not have been); put it back self.set_scroll_position(self.scroll_position) # this notification also serves as the Cocoa equivalent to # on_scroll_range_changed, which tells super when we may be ready to @@ -1163,6 +1202,7 @@ class CocoaScrollbarOwnerMixin(ScrollbarOwnerMixin): raise errors.WidgetNotReadyError('enclosingScrollView') return scroller + class SorterPadding(NSView): # Why is this a Mac only widget? Because the wrappermap mechanism requires # us to layout the widgets (so that we may call back to the portable API @@ -1192,6 +1232,7 @@ class SorterPadding(NSView): context.rel_line_to(0, context.height) context.stroke() + class TableView(CocoaSelectionOwnerMixin, CocoaScrollbarOwnerMixin, Widget): """Displays data as a tabular list. TableView follows the GTK TreeView widget fairly closely. @@ -1238,7 +1279,7 @@ class TableView(CocoaSelectionOwnerMixin, CocoaScrollbarOwnerMixin, Widget): self.model_signal_ids = [ self.model.connect_weak('row-changed', self.on_row_change), self.model.connect_weak('structure-will-change', - self.on_model_structure_change), + self.on_model_structure_change), ] self.iters_to_update = [] self.height_changed = self.reload_needed = False @@ -1386,13 +1427,14 @@ class TableView(CocoaSelectionOwnerMixin, CocoaScrollbarOwnerMixin, Widget): width = self.viewport.get_width() height = self.viewport.get_height() if self._should_place_header_view(): - self.header_view.setFrame_(NSMakeRect(x, y, - width, self.header_height)) - self.tableview.setFrame_(NSMakeRect(x, y + self.header_height, - width, height - self.header_height)) + self.header_view.setFrame_( + NSMakeRect(x, y, width, self.header_height)) + self.tableview.setFrame_( + NSMakeRect(x, y + self.header_height, + width, height - self.header_height)) else: - self.header_view.setFrame_(NSMakeRect(x, y, - width, self.header_height)) + self.header_view.setFrame_( + NSMakeRect(x, y, width, self.header_height)) self.tableview.setFrame_(NSMakeRect(x, y, width, height)) if self.auto_resize: @@ -1552,7 +1594,7 @@ class TableView(CocoaSelectionOwnerMixin, CocoaScrollbarOwnerMixin, Widget): def set_background_color(self, (red, green, blue)): color = NSColor.colorWithDeviceRed_green_blue_alpha_(red, green, blue, - 1.0) + 1.0) self.tableview.setBackgroundColor_(color) def set_show_headers(self, show): |