def buttonChanged_(self, button): if button.state() == NSOnState: self.addSubview_(self.content_view) else: self.content_view.removeFromSuperview() if self.window(): wrappermap.wrapper(self).invalidate_size_request()
def mouseDown_(self, event): self.releaseInbounds = self.stopTracking = self.firedOnce = False self.cell().trackMouse_inRect_ofView_untilMouseUp_(event, self.bounds(), self, YES) if self.releaseInbounds: if self.firedOnce: wrappermap.wrapper(self).emit('released') else: wrappermap.wrapper(self).emit('clicked')
def textDidEndEditing_(self, notification): # Handle the user stopping typing. text_movement = notification.userInfo().get('NSTextMovement') if text_movement == NSReturnTextMovement: # user hit return, emit 'validate' wrappermap.wrapper(self).emit('validate') # HACK: not sure exactly why this line has an effect, but it prevents # 17195 self.stringValue()
def mouseUp_(self, event): if self.hotspot_tracker is not None: point = self.convertPoint_fromView_(event.locationInWindow(), nil) self.hotspot_tracker.update_position(point) self.hotspot_tracker.update_hit() if self.hotspot_tracker.hit: wrappermap.wrapper(self).send_hotspot_clicked() self.hotspot_tracker.redraw_cell() self.hotspot_tracker = None else: self.SuperClass.mouseUp_(self, event)
def drawRect_(self, rect): context = drawing.DrawingContext(self, self.bounds(), rect) context.style = drawing.DrawingStyle() wrapper = wrappermap.wrapper(self) if self.state() == NSOnState: wrapper.state = 'pressed' elif self.mouse_inside: wrapper.state = 'hover' else: wrapper.state = 'normal' wrappermap.wrapper(self).draw(context, self.layout_manager) self.layout_manager.reset()
def continueTracking_at_inView_(self, lastPoint, at, view): if view.isVertical(): pos = at.y size = view.bounds().size.height else: pos = at.x size = view.bounds().size.width slider_amount = self.calc_slider_amount(view, pos, size) value = (self.maxValue() - self.minValue()) * slider_amount self.setFloatValue_(value) wrappermap.wrapper(view).emit('moved', value) if self.isContinuous(): wrappermap.wrapper(view).emit('changed', value) return YES
def tabView_willSelectTabViewItem_(self, tab_view, tab_view_item): try: wrapper = wrappermap.wrapper(tab_view) except KeyError: pass # The NSTabView hasn't been placed yet, don't worry about it. else: wrapper.place_child_with_item(tab_view_item)
def sendAction_to_(self, action, to): # only send the click event if we didn't send a # dragged-left/dragged-right event wrapper = wrappermap.wrapper(self) if self.last_drag_event is None and not wrapper.get_disabled(): wrapper.emit('clicked') return YES
def mouseDown_(self, event): if event.modifierFlags() & NSControlKeyMask: self.handleContextMenu_(event) self.handled_last_mouse_down = True return point = self.convertPoint_fromView_(event.locationInWindow(), nil) if event.clickCount() == 2: if self.handled_last_mouse_down: return wrapper = wrappermap.wrapper(self) row = self.rowAtPoint_(point) if row != -1: iter = wrapper.model.iter_for_row(self, row) wrapper.emit('row-double-clicked', iter) return hotspot_tracker = HotspotTracker(self, point) if hotspot_tracker.hit: self.hotspot_tracker = hotspot_tracker self.hotspot_tracker.redraw_cell() self.handled_last_mouse_down = True else: self.handled_last_mouse_down = False self.SuperClass.mouseDown_(self, event)
def outlineView_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: if wrapper_column._column is column: break return (wrapper.get_tooltip(iter, wrapper_column), rect)
def sendAction_to_(self, action, to): if self.stopTracking: return NO self.firedOnce = True wrapper = wrappermap.wrapper(self) if not wrapper.get_disabled(): wrapper.emit('held-down') return YES
def viewport_created(self): self.video_window = VideoWindow.alloc().initWithContentRect_styleMask_backing_defer_(self.view.frame(), NSBorderlessWindowMask, NSBackingStoreBuffered, NO) self.video_window.setContentView_(self.video_view) self.adjust_video_frame() self.view.window().addChildWindow_ordered_(self.video_window, NSWindowAbove) self.video_window.orderFront_(nil) self.window_moved_handler = wrappermap.wrapper(self.view.window()).connect('did-move', self.on_window_moved)
def tile(self): NSScrollView.tile(self) # tile is called when we need to layout our child view and scrollers. # This probably means that we've either hidden or shown a scrollbar so # call invalidate_size_request to ensure that things get re-layed out # correctly. (#see 13842) wrapper = wrappermap.wrapper(self) if wrapper is not None: wrapper.invalidate_size_request()
def highlightSelectionInClipRect_(self, rect): if wrappermap.wrapper(self).draws_selection: if not self.gradientHighlight: return self.SuperClass.highlightSelectionInClipRect_(self, rect) context = NSGraphicsContext.currentContext() focused = self.isDescendantOf_(self.window().firstResponder()) for row in tablemodel.list_from_nsindexset(self.selectedRowIndexes()): self.drawBackgroundGradient(context, focused, row)
def viewport_created(self): self.video_window = VideoWindow.alloc().initWithContentRect_styleMask_backing_defer_(self.view.frame(), NSBorderlessWindowMask, NSBackingStoreBuffered, NO) self.video_window.setContentView_(self.video_view) self.adjust_video_frame() self.view.window().addChildWindow_ordered_(self.video_window, NSWindowAbove) self.video_window.orderFront_(nil) self.window_moved_handler = wrappermap.wrapper(self.view.window()).connect('did-move', self.on_window_moved) app.info_updater.item_changed_callbacks.add('manual', 'playback-list', self.on_items_changed)
def validateDrop_dragInfo_parentIter_position_(self, view, drag_info, parent, position): typ = self.calcType_(drag_info) if typ: wrapper = wrappermap.wrapper(view) return self.drag_dest.validate_drop(wrapper, self.model, typ, drag_info.draggingSourceOperationMask(), parent, position) else: return NSDragOperationNone
def mouseDown_(self, event): self.releaseInbounds = self.stopTracking = self.firedOnce = False self.cell().trackMouse_inRect_ofView_untilMouseUp_( event, self.bounds(), self, YES) wrapper = wrappermap.wrapper(self) if not wrapper.get_disabled(): if self.firedOnce: wrapper.emit('released') elif self.releaseInbounds: wrapper.emit('clicked')
def sendAction_to_(self, action, to): # We override the Cocoa machinery here and just send it to our wrapper # widget. wrapper = wrappermap.wrapper(self) disabled = wrapper.get_disabled() if not disabled: wrapper.emit('clicked') # Tell Cocoa we handled it anyway, just not emit the actual clicked # event. return YES
def _calc_current_focus_wrapper(self): responder = self.firstResponder() while responder: wrapper = wrappermap.wrapper(responder) # check if we have a wrapper for the view, if not try the parent # view if wrapper is not None: return wrapper responder = responder.superview() return None
def sendAction_to_(self, action, to): # We override the Cocoa machinery here and just send it to our wrapper # widget. wrapper = wrappermap.wrapper(self) disabled = wrapper.get_disabled() if not disabled: wrapper.emit('changed', self.floatValue()) # Total Cocoa we handled it anyway to prevent the event passed to # upper layer. return YES
def stopTracking_at_inView_mouseIsUp_(self, lastPoint, at, tableview, mouseIsUp): if mouseIsUp: column = tableview.columnAtPoint_(at) row = tableview.rowAtPoint_(at) if column != -1 and row != -1: wrapper = wrappermap.wrapper(tableview) column = wrapper.columns[column] itr = wrapper.model.iter_for_row(tableview, row) column.renderer.emit('clicked', itr) return NSButtonCell.stopTracking_at_inView_mouseIsUp_(self, lastPoint, at, tableview, mouseIsUp)
def drawRect_(self, rect): NSTableHeaderView.drawRect_(self, rect) wrapper = wrappermap.wrapper(self.tableView()) # Manually handle sort column drawing for i, column in enumerate(wrapper.columns): if column.sort_indicator_visible: cell = column._column.headerCell() frame = self.headerRectOfColumn_(i) cell.highlight_withFrame_inView_(True, frame, self) cell.drawSortIndicatorWithFrame_inView_ascending_priority_( frame, self, column.sort_order_ascending, 0)
def acceptDrop_dragInfo_parentIter_position_(self, view, drag_info, parent, position): typ = self.calcType_(drag_info) if typ: data = drag_info.draggingPasteboard().stringForType_(typ) wrapper = wrappermap.wrapper(view) return self.drag_dest.accept_drop(wrapper, self.model, typ, drag_info.draggingSourceOperationMask(), parent, position, data) else: return NO
def view_writeColumnData_ToPasteboard_(self, view, data, pasteboard): if not self.drag_source: return NO wrapper = wrappermap.wrapper(view) drag_data = self.drag_source.begin_drag(wrapper, data) if not drag_data: return NO pasteboard.declareTypes_owner_(drag_data.keys(), self) for typ, value in drag_data.items(): pasteboard.setString_forType_(value, typ) return YES
def view_writeColumnData_ToPasteboard_(self, view, data, pasteboard): if not self.drag_source: return NO wrapper = wrappermap.wrapper(view) drag_data = self.drag_source.begin_drag(wrapper, data) if not drag_data: return NO pasteboard.declareTypes_owner_(drag_data.keys(), self) for typ, value in drag_data.items(): pasteboard.setString_forType_(repr(value), typ) return YES
def acceptDrop_dragInfo_parentIter_position_(self, view, drag_info, parent, position): typ = self.calcType_(drag_info) if typ: ids = eval(drag_info.draggingPasteboard().stringForType_(typ)) wrapper = wrappermap.wrapper(view) self.drag_dest.accept_drop(wrapper, self.model, typ, drag_info.draggingSourceOperationMask(), parent, position, ids) return YES else: return NO
def handle_keyDown(self, event): key = event.charactersIgnoringModifiers() if len(key) != 1 or not key.isalpha(): key = osxmenus.REVERSE_KEYS_MAP.get(key) mods = osxmenus.translate_event_modifiers(event) responder = self.firstResponder() while responder is not None: wrapper = wrappermap.wrapper(responder) if isinstance(wrapper, Widget) or isinstance(wrapper, Window): if wrapper.emit('key-press', key, mods): return True # signal handler returned True, stop processing responder = responder.nextResponder()
def view_writeColumnData_ToPasteboard_(self, view, data, pasteboard): if not self.drag_source: return NO wrapper = wrappermap.wrapper(view) drag_data = self.drag_source.begin_drag(wrapper, data) if not drag_data: return NO pasteboard.declareTypes_owner_((MIRO_DND_ITEM_LOCAL,), self) for typ, value in drag_data.items(): stringval = repr((repr(value), typ)) pasteboard.setString_forType_(stringval, MIRO_DND_ITEM_LOCAL) return YES
def continueTracking_at_inView_(self, lastPoint, at, view): DRAG_THRESHOLD = 15 wrapper = wrappermap.wrapper(view) if not wrapper.get_disabled(): if (view.last_drag_event != 'right' and at.x > self.start_x + DRAG_THRESHOLD): wrapper.emit("dragged-right") view.last_drag_event = 'right' elif (view.last_drag_event != 'left' and at.x < self.start_x - DRAG_THRESHOLD): view.last_drag_event = 'left' wrapper.emit("dragged-left") return YES
def handleContextMenu_(self, event): self.window().makeFirstResponder_(self) point = self.convertPoint_fromView_(event.locationInWindow(), nil) row = self.rowAtPoint_(point) selection = self.selectedRowIndexes() if row != -1 and not selection.containsIndex_(row): index_set = NSIndexSet.alloc().initWithIndex_(row) self.selectRowIndexes_byExtendingSelection_(index_set, NO) wrapper = wrappermap.wrapper(self) if wrapper.context_menu_callback is not None: menu_items = wrapper.context_menu_callback(wrapper) menu = osxmenus.make_context_menu(menu_items) NSMenu.popUpContextMenu_withEvent_forView_(menu, event, self)
def sendKeyDownToWrapper_(self, event): """Give a keyDown event to the wrapper for our responder Return True if the wrapper handled the event """ key = event.charactersIgnoringModifiers() if len(key) != 1 or not key.isalnum(): key = osxmenus.REVERSE_KEYS_MAP.get(key) mods = osxmenus.translate_event_modifiers(event) wrapper = wrappermap.wrapper(self.responder) if isinstance(wrapper, Widget) or isinstance(wrapper, Window): if wrapper.emit('key-press', key, mods): return True return False
def acceptDrop_dragInfo_parentIter_position_(self, view, drag_info, parent, position): typ = self.calcType_(drag_info) if typ: # XXX using eval sucks. data = eval(drag_info.draggingPasteboard().stringForType_(MIRO_DND_ITEM_LOCAL)) ids, _ = data ids = eval(ids) wrapper = wrappermap.wrapper(view) self.drag_dest.accept_drop( wrapper, self.model, typ, drag_info.draggingSourceOperationMask(), parent, position, ids ) return YES else: return NO
def moveSliderTo(self, view, pos): if view.isVertical(): size = view.bounds().size.height else: size = view.bounds().size.width slider_amount = self.calc_slider_amount(view, pos, size) value = (self.maxValue() - self.minValue()) * slider_amount self.setFloatValue_(value) wrapper = wrappermap.wrapper(view) if not wrapper.get_disabled(): wrapper.emit('moved', value) if self.isContinuous(): wrapper.emit('changed', value)
def startTrackingAt_inView_(self, at, view): wrapper = wrappermap.wrapper(view) start_pos = self.get_slider_pos(view) if self.isVertical(): click_pos = at.y else: click_pos = at.x # only move the cursor if the click was outside the slider if abs(click_pos - start_pos) > view.knobThickness() / 2: self.moveSliderTo(view, click_pos) start_pos = click_pos view.mouse_tracking_info = MouseTrackingInfo(start_pos, click_pos) if not wrapper.get_disabled(): wrapper.emit('pressed') return YES
def acceptDrop_dragInfo_parentIter_position_(self, view, drag_info, parent, position): typ = self.calcType_(drag_info) if typ: # XXX using eval sucks. data = eval(drag_info.draggingPasteboard().stringForType_(MIRO_DND_ITEM_LOCAL)) ids, _ = data ids = eval(ids) wrapper = wrappermap.wrapper(view) self.drag_dest.accept_drop(wrapper, self.model, typ, drag_info.draggingSourceOperationMask(), parent, position, ids) return YES else: return NO
def drawRect_(self, rect): context = drawing.DrawingContext(self, self.bounds(), rect) context.style = drawing.DrawingStyle() wrapper = wrappermap.wrapper(self) wrapper.state = 'normal' disabled = wrapper.get_disabled() if not disabled: if self.state() == NSOnState: wrapper.state = 'pressed' elif self.mouse_inside: wrapper.state = 'hover' else: wrapper.state = 'normal' wrapper.draw(context, self.layout_manager) self.layout_manager.reset()
def continueTracking_at_inView_(self, lastPoint, at, view): if view.isVertical(): pos = at.y size = view.bounds().size.height else: pos = at.x size = view.bounds().size.width slider_amount = self.calc_slider_amount(view, pos, size) value = (self.maxValue() - self.minValue()) * slider_amount self.setFloatValue_(value) wrapper = wrappermap.wrapper(view) if not wrapper.get_disabled(): wrapper.emit('moved', value) if self.isContinuous(): wrapper.emit('changed', value) return YES
def validateDrop_dragInfo_parentIter_position_(self, view, drag_info, parent, position): typ = self.calcType_(drag_info) if typ: wrapper = wrappermap.wrapper(view) drop_action = self.drag_dest.validate_drop( wrapper, self.model, typ, drag_info.draggingSourceOperationMask(), parent, position) if not drop_action: return NSDragOperationNone if isinstance(drop_action, (tuple, list)): drop_action, iter = drop_action view.setDropRow_dropOperation_( self.model.row_of_iter(view, iter), NSTableViewDropOn) return drop_action else: return NSDragOperationNone
def scrollWheel_(self, event): wrapper = wrappermap.wrapper(self) if wrapper.get_disabled(): return # NOTE: we ignore the scroll_step value passed into set_increments() # and calculate the change using deltaY, which is in device # coordinates. slider_size = wrapper.slider_size() if wrapper.is_horizontal(): size = self.bounds().size.width else: size = self.bounds().size.height size -= slider_size range = self.maxValue() - self.minValue() value_change = (event.deltaY() / size) * range self.setFloatValue_(self.floatValue() + value_change) wrapper.emit('pressed') wrapper.emit('changed', self.floatValue()) wrapper.emit('released')
def cancelOperation_(self, event): wrappermap.wrapper(self).end_with_code(-1)
def focusNextKeyView_(self, is_forward): current_focus = self._calc_current_focus_wrapper() my_wrapper = wrappermap.wrapper(self) next_focus = my_wrapper.get_next_tab_focus(current_focus, is_forward) if next_focus is not None: next_focus.focus()
def isOpaque(self): return wrappermap.wrapper(self).is_opaque()
def drawRect_(self, rect): context = drawing.DrawingContext(self, self.bounds(), rect) context.style = drawing.DrawingStyle() wrappermap.wrapper(self).draw(context, self.layout_manager) self.layout_manager.reset()
def isVertical(self): return not wrappermap.wrapper(self).is_horizontal()
def knobThickness(self): return wrappermap.wrapper(self).slider_size()