def applicationDidFinishLaunching_(self, notification): #activate logging with ToggleProxy -logging 1 self.shouldLog = NSUserDefaults.standardUserDefaults().boolForKey_("logging") # load icon files self.active_image = NSImage.imageNamed_("StatusBarImage") self.inactive_image = NSImage.imageNamed_("StatusBarImage-inactive") self.no_network_image = NSImage.imageNamed_("StatusBarImage-noNetwork") self.active_image.setTemplate_(True) self.inactive_image.setTemplate_(True) self.no_network_image.setTemplate_(True) # make status bar item self.statusitem = NSStatusBar.systemStatusBar().statusItemWithLength_(NSVariableStatusItemLength) self.statusitem.retain() self.statusitem.setHighlightMode_(False) self.statusitem.setEnabled_(True) # insert a menu into the status bar item self.menu = NSMenu.alloc().init() self.statusitem.setMenu_(self.menu) # open connection to the dynamic (configuration) store self.store = SCDynamicStoreCreate(None, "name.klep.toggleproxy", self.dynamicStoreCallback, None) self.prefDict = SCNetworkProtocolGetConfiguration(SCNetworkServiceCopyProtocol(self.service, kSCNetworkProtocolTypeProxies)) self.constructMenu() self.watchForProxyOrIpChanges() self.updateUI() self.setEnvVariables()
def populateList(self, sender): self.selected.clear() self.w.list._removeSelection() item = self.pathList.titleOfSelectedItem() for i in range(len(self.w.list)): del self.w.list[0] thisItem = {} image = None id = os.getuid() systemWarning = "You should not edit or remove existing system's daemons. These jobs are required for a working macOS system." if item != 'Active Daemons': if item == 'User Agents': homedir = os.path.expanduser('~') path = homedir + '/Library/LaunchAgents' # If the folder doesn't exist in the user folder, create it try: os.listdir(path) except: os.mkdir(path) elif item == 'Global Agents': path = '/Library/LaunchAgents' elif item == 'Global Daemons': path = '/Library/LaunchDaemons' elif item == 'System Agents': path = '/System/Library/LaunchAgents' self._warning(self, systemWarning, "showSystemWarning") elif item == 'System Daemons': path = '/System/Library/LaunchDaemons' self._warning(self, systemWarning, "showSystemWarning") items = [] files = os.listdir(path) count = 0 for file in files: if file.endswith('.plist'): file = file.replace('.plist', '') try: pid = launchd.LaunchdJob(file).pid except: pid = False if launchd.LaunchdJob(file).exists() and pid != None: image = NSImage.imageNamed_(NSImageNameStatusAvailable) elif launchd.LaunchdJob(file).exists() and pid == None: image = NSImage.imageNamed_( NSImageNameStatusPartiallyAvailable) else: image = NSImage.imageNamed_(NSImageNameStatusNone) state = True thisItem['image'] = image thisItem['name'] = file self.w.list.append(thisItem) count += 1 self.w.counter.set(str(count) + ' Jobs')
def applicationDidFinishLaunching_(self, notification): # load icon files self.active_image = NSImage.imageNamed_("active") self.inactive_image = NSImage.imageNamed_("inactive") # make status bar item self.statusitem = NSStatusBar.systemStatusBar().statusItemWithLength_( NSVariableStatusItemLength) self.statusitem.retain() self.statusitem.setHighlightMode_(False) self.statusitem.setEnabled_(True) # insert a menu into the status bar item self.menu = NSMenu.alloc().init() self.statusitem.setMenu_(self.menu) # open connection to the dynamic (configuration) store self.store = SCDynamicStoreCreate(None, "name.klep.toggleproxy", self.dynamicStoreCallback, None) proxyRef = SCNetworkServiceCopyProtocol(self.service, kSCNetworkProtocolTypeProxies) prefDict = SCNetworkProtocolGetConfiguration(proxyRef) hasProxies = False # For each of the proxies we are concerned with, check to see if any # are configured. If so (even if not enabled), create a menuitem for # that proxy type. for proxy in self.proxies.values(): enabled = CFDictionaryGetValue(prefDict, proxy['pref']) if enabled is not None: proxy[ 'menuitem'] = self.menu.addItemWithTitle_action_keyEquivalent_( proxy['title'], proxy['action'], proxy['keyEquivalent']) hasProxies = True else: proxy['menuitem'] = None if hasProxies: self.menu.addItem_(NSMenuItem.separatorItem()) self.enableallmi = self.menu.addItemWithTitle_action_keyEquivalent_( 'Enable All', 'enableall', '') self.disableallmi = self.menu.addItemWithTitle_action_keyEquivalent_( 'Disable All', 'disableall', '') self.menu.addItem_(NSMenuItem.separatorItem()) # Need a way to quit self.menu.addItemWithTitle_action_keyEquivalent_( "Quit", "quitApp:", "") # Start working # self.loadNetworkServices() self.watchForProxyChanges() self.updateProxyStatus()
def setupStatusBar(self): statusbar = NSStatusBar.systemStatusBar() statusitem = statusbar.statusItemWithLength_(20).retain() icon = NSImage.imageNamed_('status') icon.setSize_((20, 20)) statusitem.setImage_(icon) iconHighlight = NSImage.imageNamed_('status-hi') iconHighlight.setSize_((20, 20)) statusitem.setAlternateImage_(iconHighlight) statusitem.setHighlightMode_(1) # TODO: Put this whole menu creation stuff into interface builder! menu = NSMenu.alloc().init() linkMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Post a Link', 'doLink:', '') linkMenu.setTarget_(self) # Make it possible to invoke the link menu via a keyboard shortcut. linkMenu.setKeyEquivalentModifierMask_(NSShiftKeyMask | NSCommandKeyMask) linkMenu.setKeyEquivalent_('l') menu.addItem_(linkMenu) menu.addItem_(NSMenuItem.separatorItem()) previewMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Update Preview', 'doPreview:', '') previewMenu.setTarget_(self) menu.addItem_(previewMenu) publishMenuItem = NSMenuItem.alloc( ).initWithTitle_action_keyEquivalent_('Publish', None, '') publishMenu = NSMenu.alloc().init() s3MenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'S3', 'doPublish:', '') s3MenuItem.setTarget_(self) publishMenu.addItem_(s3MenuItem) publishMenuItem.setSubmenu_(publishMenu) menu.addItem_(publishMenuItem) menu.addItem_(NSMenuItem.separatorItem()) quitMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_( 'Quit', 'terminate:', '') menu.addItem_(quitMenu) statusitem.setMenu_(menu) menu.release()
def setImage(self, imagePath=None, imageNamed=None, imageObject=None): """ Set the image in the view. **imagePath** A file path to an image. **imageNamed** The name of an image already load as a `NSImage`_ by the application. **imageObject** A `NSImage`_ object. .. note:: Only one of *imagePath*, *imageNamed*, *imageObject* should be set. .. _NSImage: https://developer.apple.com/documentation/appkit/nsimage?language=objc """ if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: raise ValueError("no image source defined") self._nsObject.setImage_(image)
def openSplash(): global splash splash = NSWindow.alloc() rect = NSMakeRect(0,0,240,420) styleMask = 0 splash.initWithContentRect_styleMask_backing_defer_(rect, styleMask, NSBackingStoreBuffered, False) # http://stackoverflow.com/questions/19437580/splash-screen-in-osx-cocoa-app splashImage = NSImageView.alloc().initWithFrame_(rect) splashImage.setImageScaling_(NSScaleToFit) splashImage.setImage_(NSImage.imageNamed_('ottosplash.png')) #[customView addSubview:splashImage]; #splash.setContentView_(webview) splash.setContentView_(splashImage) splash.setHasShadow_(True) splash.setOpaque_(False) splash.setBackgroundColor_(NSColor.clearColor()) # xPos = NSWidth([[splashWindow screen] frame])/2 - NSWidth([splashWindow frame])/2; #CGFloat yPos = NSHeight([[splashWindow screen] frame])/2 - NSHeight([splashWindow frame])/2; #[splashWindow setFrame:NSMakeRect(xPos, yPos, NSWidth([splashWindow frame]), NSHeight([splashWindow frame])) display:YES]; splash.center() splash.orderFrontRegardless()
def __init__(self, posSize, segmentDescriptions, callback=None, selectionStyle="one", sizeStyle="small"): self._setupView(self.nsSegmentedControlClass, posSize) if self.nsSegmentedCellClass != NSSegmentedCell: self._nsObject.setCell_(self.nsSegmentedCellClass.alloc().init()) if callback is not None: self._setCallback(callback) self._setSizeStyle(sizeStyle) nsObject = self._nsObject nsObject.setSegmentCount_(len(segmentDescriptions)) nsObject.cell().setTrackingMode_(_trackingModeMap[selectionStyle]) for segmentIndex, segmentDescription in enumerate(segmentDescriptions): width = segmentDescription.get("width", 0) title = segmentDescription.get("title", "") enabled = segmentDescription.get("enabled", True) imagePath = segmentDescription.get("imagePath") imageNamed = segmentDescription.get("imageNamed") imageObject = segmentDescription.get("imageObject") # create the NSImage if needed if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: image = None nsObject.setWidth_forSegment_(width, segmentIndex) nsObject.setLabel_forSegment_(title, segmentIndex) nsObject.setEnabled_forSegment_(enabled, segmentIndex) if image is not None: nsObject.setImage_forSegment_(image, segmentIndex)
def __init__(self, posSize, imagePath=None, imageNamed=None, imageObject=None, title=None, bordered=True, imagePosition="top", callback=None, sizeStyle="regular"): super(ImageButton, self).__init__(posSize, title=title, callback=callback, sizeStyle=sizeStyle) image = None if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject if image is not None: self._nsObject.setImage_(image) self._nsObject.setBordered_(bordered) if title is None: position = NSImageOnly else: position = _imagePositionMap[imagePosition] if imagePosition == "left": self._nsObject.setAlignment_(NSRightTextAlignment) elif imagePosition == "right": self._nsObject.setAlignment_(NSLeftTextAlignment) if not bordered: self._nsObject.cell().setHighlightsBy_(NSNoCellMask) self._nsObject.setImagePosition_(position)
def __init__(self, posSize, imagePath=None, imageNamed=None, imageObject=None, title=None, bordered=True, imagePosition="top", callback=None, sizeStyle="regular"): super(ImageButton, self).__init__(posSize, title=title, callback=callback, sizeStyle=sizeStyle) image = None if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject if image is not None: self._nsObject.setImage_(image) self._nsObject.setBordered_(bordered) if title is None: position = NSImageOnly else: position= _imagePositionMap[imagePosition] if imagePosition == "left": self._nsObject.setAlignment_(NSRightTextAlignment) elif imagePosition == "right": self._nsObject.setAlignment_(NSLeftTextAlignment) if not bordered: self._nsObject.cell().setHighlightsBy_(NSNoCellMask) self._nsObject.setImagePosition_(position)
def __init__(self, posSize, segmentDescriptions, callback=None, selectionStyle="one", sizeStyle="small"): self._setupView(self.nsSegmentedControlClass, posSize) if self.nsSegmentedCellClass != NSSegmentedCell: self._nsObject.setCell_(self.nsSegmentedCellClass.alloc().init()) if callback is not None: self._setCallback(callback) self._setSizeStyle(sizeStyle) nsObject = self._nsObject nsObject.setSegmentCount_(len(segmentDescriptions)) nsObject.cell().setTrackingMode_(_trackingModeMap[selectionStyle]) for segmentIndex, segmentDescription in enumerate(segmentDescriptions): width = segmentDescription.get("width", 0) title = segmentDescription.get("title", "") enabled = segmentDescription.get("enabled", True) imagePath = segmentDescription.get("imagePath") imageNamed = segmentDescription.get("imageNamed") imageTemplate = segmentDescription.get("imageTemplate") imageObject = segmentDescription.get("imageObject") # create the NSImage if needed if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: image = None nsObject.setWidth_forSegment_(width, segmentIndex) nsObject.setLabel_forSegment_(title, segmentIndex) nsObject.setEnabled_forSegment_(enabled, segmentIndex) if image is not None: if imageTemplate is not None: # only change the image template setting if its either True or False image.setTemplate_(imageTemplate) nsObject.setImage_forSegment_(image, segmentIndex)
def setupStatusBar(self): statusbar = NSStatusBar.systemStatusBar() statusitem = statusbar.statusItemWithLength_(20).retain() icon = NSImage.imageNamed_('status') icon.setSize_((20, 20)) statusitem.setImage_(icon) iconHighlight = NSImage.imageNamed_('status-hi') iconHighlight.setSize_((20, 20)) statusitem.setAlternateImage_(iconHighlight) statusitem.setHighlightMode_(1) # TODO: Put this whole menu creation stuff into interface builder! menu = NSMenu.alloc().init() linkMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Post a Link', 'doLink:', '') linkMenu.setTarget_(self); # Make it possible to invoke the link menu via a keyboard shortcut. linkMenu.setKeyEquivalentModifierMask_(NSShiftKeyMask | NSCommandKeyMask) linkMenu.setKeyEquivalent_('l') menu.addItem_(linkMenu) menu.addItem_(NSMenuItem.separatorItem()) previewMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Update Preview', 'doPreview:', '') previewMenu.setTarget_(self); menu.addItem_(previewMenu) publishMenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Publish', None, '') publishMenu = NSMenu.alloc().init(); s3MenuItem = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('S3', 'doPublish:', '') s3MenuItem.setTarget_(self); publishMenu.addItem_(s3MenuItem) publishMenuItem.setSubmenu_(publishMenu) menu.addItem_(publishMenuItem) menu.addItem_(NSMenuItem.separatorItem()) quitMenu = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_('Quit', 'terminate:', '') menu.addItem_(quitMenu) statusitem.setMenu_(menu) menu.release();
def refreshWithSender_(self, sender): if self.crawlTask is not None: return self.stopRefreshWithSender_(sender) logger.debug('%r refreshWithSender:%r', self, sender) sender.setImage_(NSImage.imageNamed_(NSImageNameStopProgressTemplate)) self.crawlTask = NSThread.alloc().initWithTarget_selector_object_( self, 'crawlWithSender:', sender ) self.crawlTask.start()
def _createToolbarItem(self, itemData): itemIdentifier = itemData.get("itemIdentifier") if itemIdentifier is None: raise VanillaError( "toolbar item data must contain a unique itemIdentifier string" ) if itemIdentifier in self._toolbarItems: raise VanillaError("toolbar itemIdentifier is not unique: %r" % itemIdentifier) if itemIdentifier not in self._toolbarAllowedItemIdentifiers: self._toolbarAllowedItemIdentifiers.append(itemIdentifier) if itemData.get("visibleByDefault", True): self._toolbarDefaultItemIdentifiers.append(itemIdentifier) if itemIdentifier.startswith("NS"): # no need to create an actual item for a standard Cocoa toolbar item return label = itemData.get("label") paletteLabel = itemData.get("paletteLabel", label) toolTip = itemData.get("toolTip", label) imagePath = itemData.get("imagePath") imageNamed = itemData.get("imageNamed") imageObject = itemData.get("imageObject") view = itemData.get("view") callback = itemData.get("callback", None) # create the NSImage if needed if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: image = None toolbarItem = NSToolbarItem.alloc().initWithItemIdentifier_( itemIdentifier) toolbarItem.setLabel_(label) toolbarItem.setPaletteLabel_(paletteLabel) toolbarItem.setToolTip_(toolTip) if image is not None: toolbarItem.setImage_(image) elif view is not None: toolbarItem.setView_(view) toolbarItem.setMinSize_(view.frame().size) toolbarItem.setMaxSize_(view.frame().size) if callback is not None: target = VanillaCallbackWrapper(callback) toolbarItem.setTarget_(target) toolbarItem.setAction_("action:") self._toolbarCallbackWrappers[itemIdentifier] = target if itemData.get("selectable", False): self._toolbarSelectableItemIdentifiers.append(itemIdentifier) self._toolbarItems[itemIdentifier] = toolbarItem
def _createToolbarItem(self, itemData): itemIdentifier = itemData.get("itemIdentifier") if itemIdentifier is None: raise VanillaError("toolbar item data must contain a unique itemIdentifier string") if itemIdentifier in self._toolbarItems: raise VanillaError("toolbar itemIdentifier is not unique: %r" % itemIdentifier) if itemIdentifier not in self._toolbarAllowedItemIdentifiers: self._toolbarAllowedItemIdentifiers.append(itemIdentifier) if itemData.get("visibleByDefault", True): self._toolbarDefaultItemIdentifiers.append(itemIdentifier) if itemIdentifier.startswith("NS"): # no need to create an actual item for a standard Cocoa toolbar item return label = itemData.get("label") paletteLabel = itemData.get("paletteLabel", label) toolTip = itemData.get("toolTip", label) imagePath = itemData.get("imagePath") imageNamed = itemData.get("imageNamed") imageObject = itemData.get("imageObject") imageTemplate = itemData.get("imageTemplate") view = itemData.get("view") callback = itemData.get("callback", None) # create the NSImage if needed if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: image = None toolbarItem = NSToolbarItem.alloc().initWithItemIdentifier_(itemIdentifier) toolbarItem.setLabel_(label) toolbarItem.setPaletteLabel_(paletteLabel) toolbarItem.setToolTip_(toolTip) if image is not None: if imageTemplate is not None: # only change the image template setting if its either True or False image.setTemplate_(imageTemplate) toolbarItem.setImage_(image) elif view is not None: toolbarItem.setView_(view) toolbarItem.setMinSize_(view.frame().size) toolbarItem.setMaxSize_(view.frame().size) if callback is not None: target = VanillaCallbackWrapper(callback) toolbarItem.setTarget_(target) toolbarItem.setAction_("action:") self._toolbarCallbackWrappers[itemIdentifier] = target if itemData.get("selectable", False): self._toolbarSelectableItemIdentifiers.append(itemIdentifier) self._toolbarItems[itemIdentifier] = toolbarItem
def getFirstItem(self): actionImage = NSImage.imageNamed_(NSImageNameActionTemplate).copy() sizeStyle = _reverseSizeStyleMap[self._nsObject.cell().controlSize()] if sizeStyle == "small": actionImage.setSize_((10, 10)) elif sizeStyle == "mini": actionImage.setSize_((10, 10)) firstActionItem = NSMenuItem.alloc().init() firstActionItem.setImage_(actionImage) firstActionItem.setTitle_("") return firstActionItem
def createToolbarItems(self): """ Create the toolbar item and define the default and allowed set. """ addToolbarItem(self, kServerToolbarItemIdentifier, "Server", "Server", "Reset Server", self, "resetServer:", NSImage.imageNamed_("NSNetwork"), None,) addToolbarItem(self, kRefreshToolbarItemIdentifier, "Refresh", "Refresh", "Refresh Display", self, "refreshData:", NSImage.imageNamed_("NSRefresh"), None,) addToolbarItem(self, kBrowserViewToolbarItemIdentifier, "Browser", "Browser", "Browser View", self, "changeBrowserView:", self.toolbarBrowserViewButton, None,) addToolbarItem(self, kDataViewToolbarItemIdentifier, "View", "View", "Data View", self, "changeDataView:", self.toolbarDataViewButton, None,) self._toolbarDefaultItemIdentifiers = [ kServerToolbarItemIdentifier, kBrowserViewToolbarItemIdentifier, kDataViewToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, kRefreshToolbarItemIdentifier, ] self._toolbarAllowedItemIdentifiers = [ kServerToolbarItemIdentifier, kBrowserViewToolbarItemIdentifier, kDataViewToolbarItemIdentifier, kRefreshToolbarItemIdentifier, NSToolbarSeparatorItemIdentifier, NSToolbarSpaceItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, NSToolbarPrintItemIdentifier, NSToolbarCustomizeToolbarItemIdentifier, ]
def _drawDirtyStateImage(value): if value: imageName = "defconAppKitFontListDirtyStateTrue" else: imageName = "defconAppKitFontListDirtyStateFalse" image = NSImage.imageNamed_(imageName) if image is None: # make the image width = 13 height = 17 image = NSImage.alloc().initWithSize_((width, height)) image.lockFocus() # draw if dirty if value: rect = ((2, 4), (9, 9)) path = NSBezierPath.bezierPathWithOvalInRect_(rect) path.addClip() # colors color1 = NSColor.colorWithCalibratedRed_green_blue_alpha_( 1.0, 0.1, 0.1, 1) color2 = NSColor.colorWithCalibratedRed_green_blue_alpha_( 0.5, 0.0, 0.0, 1) # fill color1.set() path.fill() # shadow try: gradient = NSGradient.alloc().initWithColors_([color1, color2]) gradient.drawInBezierPath_angle_(path, -90) except NameError: pass # stroke color2.set() path.setLineWidth_(2) path.stroke() image.unlockFocus() image.setName_(imageName) image = NSImage.imageNamed_(imageName) return image
def _drawDirtyStateImage(value): if value: imageName = "defconAppKitFontListDirtyStateTrue" else: imageName = "defconAppKitFontListDirtyStateFalse" image = NSImage.imageNamed_(imageName) if image is None: # make the image width = 13 height = 17 image = NSImage.alloc().initWithSize_((width, height)) image.lockFocus() # draw if dirty if value: rect = ((2, 4), (9, 9)) path = NSBezierPath.bezierPathWithOvalInRect_(rect) path.addClip() # colors color1 = NSColor.colorWithCalibratedRed_green_blue_alpha_(1.0, 0.1, 0.1, 1) color2 = NSColor.colorWithCalibratedRed_green_blue_alpha_(0.5, 0.0, 0.0, 1) # fill color1.set() path.fill() # shadow try: gradient = NSGradient.alloc().initWithColors_([color1, color2]) gradient.drawInBezierPath_angle_(path, -90) except NameError: pass # stroke color2.set() path.setLineWidth_(2) path.stroke() image.unlockFocus() image.setName_(imageName) image = NSImage.imageNamed_(imageName) return image
def setImage(self, imagePath=None, imageNamed=None, imageObject=None): """ Set the image in the button. **imagePath** A file path to an image. **imageNamed** The name of an image already load as a *NSImage* by the application. **imageObject** A *NSImage* object. *Only one of imagePath, imageNamed, imageObject should be set.* """ if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: raise ValueError("no image source defined") self._nsObject.setImage_(image)
def setImage(self, imagePath=None, imageNamed=None, imageObject=None): """ Set the image in the button. **imagePath** A file path to an image. **imageNamed** The name of an image already loaded as an `NSImage`_ by the application. **imageObject** A `NSImage`_ object. .. note:: Only one of *imagePath*, *imageNamed*, *imageObject* should be set. """ if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: raise ValueError("no image source defined") self._nsObject.setImage_(image)
def setImage(self, imagePath=None, imageNamed=None, imageObject=None): """ Set the image in the view. **imagePath** A file path to an image. **imageNamed** The name of an image already load as a *NSImage* by the application. **imageObject** A *NSImage* object. *Only one of imagePath, imageNamed, imageObject should be set.* """ if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject else: raise ValueError("no image source defined") self._nsObject.setImage_(image)
def create_image(self): image = NSImage.imageNamed_("ExtensionIcon") self.w.image = ImageView((15, 15, 80, 80), scale="fit") self.w.image.setImage(imageObject=image)
def _setupContentView(self): # ------------------------------------------ # # Table View # # ------------------------------------------ # rect = NSMakeRect(0, 0, self.WIDTH, self.HEIGHT) containerView = NSView.alloc().initWithFrame_(rect) # Startup btn height = 20 margin = 20 width = self.WIDTH - 2 * margin self.startupBtn = NSButton.buttonWithTitle_target_action_( "Run safetyapp on startup", self, "startupDidChanged:") self.startupBtn.setButtonType_(NSButtonTypeSwitch) self.startupBtn.setFrame_( NSMakeRect(margin, self.HEIGHT - 2 * height, width, height)) self.startupBtn.setState_(self.data["startup"]) containerView.addSubview_(self.startupBtn) # API Key settings titleLabel = NSTextField.labelWithString_("API Key") titleLabel.setTextColor_(NSColor.blackColor()) rect = NSMakeRect( self.startupBtn.frame().origin.x, self.startupBtn.frame().origin.y - self.startupBtn.frame().size.height - height, width, height) titleLabel.setFrame_(rect) titleLabel.setFont_(NSFont.boldSystemFontOfSize_(14)) containerView.addSubview_(titleLabel) # API Key Sub-label titleSubLabel = NSTextField.labelWithString_( "Lorem lpsum dolor sit amet") titleSubLabel.setTextColor_(NSColor.blackColor()) rect = NSMakeRect( titleLabel.frame().origin.x, titleLabel.frame().origin.y - titleLabel.frame().size.height - height / 2, width, height) titleSubLabel.setFrame_(rect) titleSubLabel.setFont_(NSFont.systemFontOfSize_(14)) containerView.addSubview_(titleSubLabel) # API Key text field self.apiTextField = NSTextField.textFieldWithString_("") rect = NSMakeRect( titleSubLabel.frame().origin.x, titleSubLabel.frame().origin.y - titleSubLabel.frame().size.height - height / 2, width, 1.2 * height) self.apiTextField.setFrame_(rect) self.apiTextField.setFocusRingType_(NSFocusRingTypeNone) self.apiTextField.setTitleWithMnemonic_(self.data["api_key"]) self.apiTextField.setEditable_(True) containerView.addSubview_(self.apiTextField) self.window().makeFirstResponder_(self.apiTextField) # Table title tableTitleLabel = NSTextField.labelWithString_("Directories") tableTitleLabel.setTextColor_(NSColor.blackColor()) rect = NSMakeRect( self.apiTextField.frame().origin.x, self.apiTextField.frame().origin.y - self.apiTextField.frame().size.height - height, width, height) tableTitleLabel.setFrame_(rect) tableTitleLabel.setFont_(NSFont.boldSystemFontOfSize_(14)) containerView.addSubview_(tableTitleLabel) # Table sub-title tableSubTitleLabel = NSTextField.labelWithString_( "Lorem lpsum dolor sit amet") tableSubTitleLabel.setTextColor_(NSColor.blackColor()) rect = NSMakeRect( tableTitleLabel.frame().origin.x, tableTitleLabel.frame().origin.y - tableTitleLabel.frame().size.height - height / 2, width, height) tableSubTitleLabel.setFrame_(rect) tableSubTitleLabel.setFont_(NSFont.systemFontOfSize_(14)) containerView.addSubview_(tableSubTitleLabel) # ------------------------------------------ # # Toolbar button # # ------------------------------------------ # rect = NSMakeRect(20, 20, 67, 21) segControl = NSSegmentedControl.alloc().initWithFrame_(rect) segControl.setSegmentCount_(2) segControl.setSegmentStyle_(NSSegmentStyleSmallSquare) segControl.setWidth_forSegment_(32, 0) segControl.setWidth_forSegment_(32, 1) segControl.setImage_forSegment_( NSImage.imageNamed_(NSImageNameAddTemplate), 0) segControl.setImage_forSegment_( NSImage.imageNamed_(NSImageNameRemoveTemplate), 1) segControl.setTarget_(self) segControl.setAction_("segControlDidClicked:") containerView.addSubview_(segControl) rect = NSMakeRect(86, 21, self.WIDTH - 2 * margin - rect.size.width + 1, 21) toolbar = NSButton.alloc().initWithFrame_(rect) toolbar.setTitle_("") toolbar.setRefusesFirstResponder_(True) toolbar.setBezelStyle_(NSBezelStyleSmallSquare) containerView.addSubview_(toolbar) height = tableSubTitleLabel.frame().origin.y - segControl.frame( ).origin.y - margin - segControl.frame( ).size.height + 1 + tableSubTitleLabel.frame().size.height / 2 rect = NSMakeRect( tableSubTitleLabel.frame().origin.x, tableSubTitleLabel.frame().origin.y - tableSubTitleLabel.frame().size.height / 2 - height, width, height) scrollView = NSScrollView.alloc().initWithFrame_(rect) scrollView.setBorderType_(NSBezelBorder) self.tableView = NSTableView.alloc().initWithFrame_( scrollView.bounds()) self.tableView.setDataSource_(self) self.tableView.setDelegate_(self) self.tableView.setFocusRingType_(NSFocusRingTypeNone) # Path column pathCol = NSTableColumn.alloc().initWithIdentifier_( self.PATH_COL_IDENTIFIER) pathCol.setTitle_("Directory") # <-- Table view directory column title pathCol.setWidth_(self.WIDTH * 0.8) textCell = NSTextFieldCell.alloc().init() textCell.setEditable_(True) textCell.setTarget_(self) pathCol.setDataCell_(textCell) # Enable column enableCol = NSTableColumn.alloc().initWithIdentifier_( self.ENALBE_COL_IDENTIFIER) enableCol.setTitle_("Enable?") # <-- Enable column title enableCol.setWidth_(self.WIDTH * 0.2) cell = NSButtonCell.alloc().init() cell.setButtonType_(NSButtonTypeSwitch) cell.setTitle_("") cell.setTarget_(self) enableCol.setDataCell_(cell) self.tableView.addTableColumn_(pathCol) self.tableView.addTableColumn_(enableCol) scrollView.setDocumentView_(self.tableView) scrollView.setHasVerticalScroller_(True) containerView.addSubview_(scrollView) self.window().setContentView_(containerView)
def _selectionCallback(self, sender): try: if not self.w.list.getSelection(): # Application did not finish loading yet pass else: # Get job name self.selected.clear() job = sender.get()[self.w.list.getSelection()[0]] self.selected['name'] = job['name'] self.valueGroups = [] # Get job path and file location item = self.pathList.titleOfSelectedItem() if 'User' in item: import getpass username = getpass.getuser() user = username path = '/Users/%s/Library/Launch' % username elif 'Global' in item: user = '******' path = '/Library/Launch' elif 'System' in item: user = '******' path = '/System/Library/Launch' if 'Agents' in item: path += 'Agents/' else: path += 'Daemons/' self.selected['path'] = path self.selected['file'] = str(self.selected['path'].replace( ' ', '\ ')) + job['name'].replace(' ', '\ ') + '.plist' f = open(self.selected['file'], "r") self.selected['raw'] = str(f.read()) self.selected['short'] = ( self.selected['name'][:32] + '…') if len( self.selected['name']) > 32 else self.selected['name'] # Get status if job['image'] == NSImage.imageNamed_(NSImageNameStatusNone): status = None else: status = 'Available' self.selected['status'] = status index = sender.getSelection()[0] relativeRect = sender.getNSTableView().rectOfRow_(index) self.pop = Popover((300, 100)) self.pop.tabs = Tabs((20, 40, -20, -20), ["Editor", "Raw View"]) self.pop.tabs._nsObject.setTabViewType_(NSNoTabsNoBorder) self.pop.tabBtn = SegmentedButton( (10, 10, -10, 20), [dict(title="Editor"), dict(title="Raw View")], callback=self._segmentPressed, selectionStyle='one') self.pop.tabBtn.set(0) self.edit = self.pop.tabs[0] self.rawEdit = self.pop.tabs[1] self.rawEdit.editor = TextEditor((0, 0, -0, -45), text=self.selected['raw']) self.selected['dict'] = launchd.plist.read( self.selected['name']) # TODO: Add stackview to scrollview as group # Waiting for merge into master: https://github.com/robotools/vanilla/issues/132 self.edit.stack = VerticalStackGroup((0, 0, -0, -45)) for idx, (key, value) in enumerate( sorted(self.selected['dict'].items())): group = ValueGroup((0, 0, -0, -0), sender=self, key=key, value=value, idx=idx) self.valueGroups.append(group) self.edit.stack.addView( self.valueGroups[idx], 300, self.valueGroups[idx].getPosSize()[3]) self.pop.save = Button((20, -50, -20, 40), "Save", callback=self._savePlist) self.pop.save.enable(False) self.pop.open(parentView=sender.getNSTableView(), preferredEdge='right', relativeRect=relativeRect) except: pass
def __init__(self): self.locations = [ 'User Agents', 'Global Agents', 'Global Daemons', 'System Agents', 'System Daemons' ] self.listItems = [] self.selected = {} # Preferences self.homedir = os.path.expanduser('~') self.prefsFolder = self.homedir + "/Library/Preferences/" self.prefsFile = "de.nelsonfritsch.unicron.plist" if os.path.isfile(self.prefsFolder + self.prefsFile): self.prefs = self._loadPrefs(self) else: self.prefs = dict(showSystemWarning=True, windowStyle='System') self._savePrefs(self) # Preferences Window self.prefsWindow = Window((300, 105), 'Preferences') self.styles = ['System', 'Light', 'Dark'] self.prefsWindow.styleTxt = TextBox((10, 10, -10, 20), "Window Style:") self.prefsWindow.style = PopUpButton((30, 35, -10, 20), self.styles, callback=self.prefsSetStyle) self.prefsWindow.restore = Button((10, 75, -10, 20), 'Restore Warnings', callback=self.prefsRestoreWarnings) # Main Window minsize = 285 self.w = Window((minsize, 400), 'Unicron', closable=True, fullSizeContentView=True, titleVisible=False, minSize=(minsize, minsize), maxSize=(600, 1200), autosaveName="UnicronMainWindow") self.pathList = NSPopUpButton.alloc().initWithFrame_( ((0, 0), (160, 20))) self.pathList.addItemsWithTitles_(self.locations) refreshIcon = NSImage.alloc().initWithSize_((32, 32)) sourceImage = NSImage.imageNamed_(NSImageNameRefreshTemplate) w, h = sourceImage.size() if w > h: diffx = 0 diffy = w - h else: diffx = h - w diffy = 0 maxSize = max([w, h]) refreshIcon.lockFocus() sourceImage.drawInRect_fromRect_operation_fraction_( NSMakeRect(diffx, diffy + 4, 22, 22), NSMakeRect(0, 0, maxSize, maxSize), NSCompositeSourceOver, 1) refreshIcon.unlockFocus() refreshIcon.setTemplate_(True) toolbarItems = [ dict(itemIdentifier="Daemons", label="Daemons", toolTip="Daemon Group", view=self.pathList, callback=self.populateList), dict(itemIdentifier="image", label="Image", imageObject=refreshIcon, callback=self.populateList), ] self.w.addToolbar("Unicron Toolbar", toolbarItems=toolbarItems, displayMode="icon") self.w.blend = Group((0, 0, 0, 0), blendingMode='behindWindow') self.listColumnDescriptions = [{ 'title': '', 'key': 'image', 'width': 25, 'typingSensitive': True, 'allowsSorting': True, 'cell': ImageListCell() }, { 'title': 'Name', 'key': 'name', 'typingSensitive': True, 'allowsSorting': True, }] self.rowHeight = 20 self.w.list = List((0, 37, -0, 0), items=self.listItems, columnDescriptions=self.listColumnDescriptions, showColumnTitles=True, allowsEmptySelection=True, allowsMultipleSelection=False, autohidesScrollers=True, drawFocusRing=False, rowHeight=self.rowHeight, selectionCallback=self._selectionCallback, menuCallback=self._menuCallback) self.w.list._nsObject.setBorderType_(NSNoBorder) self.w.statusbar = Group((0, -26, 0, 0), blendingMode='behindWindow') self.w.statusbar.border = HorizontalLine((0, 0, 0, 1)) self.w.counter = TextBox((16, -20, -16, 15), '', alignment='center', sizeStyle='small') self.populateList(self) self.w.rowIndicator = Group((0, 0, 0, 10)) self.prefsSetStyle(self) self.w.open()
def __init__(self, drawGrid=False): self.w = Window((600, 500), "List Test", minSize=(400, 400)) simpleList = List((0, 0, 0, 0), listOptions, enableTypingSensitivity=True) multiItems = [{ "name": name, "path": os.path.basename(getattr(module, "__file__", "Unknown")) } for name, module in sys.modules.items()] columnDescriptions = [{ "title": "Module Name", "key": "name" }, { "title": "File Name", "key": "path" }] multiList = List((0, 0, 0, 0), multiItems, columnDescriptions=columnDescriptions, enableTypingSensitivity=True) if iconPath: image = NSImage.alloc().initWithContentsOfFile_(iconPath) else: image = NSImage.imageNamed_(iconName) miscItems = [ { "slider": 50, "sliderWithTicks": 50, "checkBox": False, "image": image, "segment": 0 }, { "slider": 20, "sliderWithTicks": 20, "checkBox": True, "image": image, "segment": 1 }, { "slider": 70, "sliderWithTicks": 70, "checkBox": False, "image": image, "segment": 2 }, { "slider": 20, "sliderWithTicks": 20, "checkBox": True, "image": image, "segment": 0 }, { "slider": 10, "sliderWithTicks": 10, "checkBox": True, "image": image, "segment": 1 }, { "slider": 90, "sliderWithTicks": 90, "checkBox": False, "image": image, "segment": 2 }, ] columnDescriptions = [ { "title": "SliderListCell", "key": "slider", "cell": SliderListCell() }, { "title": "SliderListCell", "key": "sliderWithTicks", "cell": SliderListCell(tickMarkCount=10, stopOnTickMarks=True) }, { "title": "CheckBoxListCell", "key": "checkBox", "cell": CheckBoxListCell() }, { "title": "ImageListCell", "key": "image", "cell": ImageListCell() }, { "title": "SegmentedButtonListCell", "key": "segment", "cell": SegmentedButtonListCell( [dict(title="0"), dict(title="1"), dict(title="2")]), "binding": "selectedIndex" }, ] miscCellList = List((0, 0, 0, 0), items=miscItems, columnDescriptions=columnDescriptions) paneDescriptions = [ dict(view=simpleList, identifier="simpleList"), dict(view=multiList, identifier="multiList"), dict(view=miscCellList, identifier="miscCellList"), ] # only add the ListIndicator tests if the controls are available try: listIndicatorItems = [ { "discrete": 3, "continuous": 4, "rating": 1, "relevancy": 9 }, { "discrete": 8, "continuous": 3, "rating": 5, "relevancy": 5 }, { "discrete": 3, "continuous": 7, "rating": 3, "relevancy": 4 }, { "discrete": 2, "continuous": 5, "rating": 4, "relevancy": 7 }, { "discrete": 6, "continuous": 9, "rating": 3, "relevancy": 2 }, { "discrete": 4, "continuous": 0, "rating": 6, "relevancy": 8 }, ] columnDescriptions = [ { "title": "discrete", "cell": LevelIndicatorListCell(style="discrete", warningValue=7, criticalValue=9) }, { "title": "continuous", "cell": LevelIndicatorListCell(style="continuous", warningValue=7, criticalValue=9) }, { "title": "rating", "cell": LevelIndicatorListCell(style="rating", maxValue=6) }, { "title": "relevancy", "cell": LevelIndicatorListCell(style="relevancy") }, ] levelIndicatorList = List((0, 0, 0, 0), items=listIndicatorItems, columnDescriptions=columnDescriptions) paneDescriptions.append( dict(view=levelIndicatorList, identifier="levelIndicatorList")) except NameError: pass self.w.splitView = SplitView((0, 0, -0, -0), paneDescriptions, isVertical=False) if drawGrid: self.drawGrid() self.w.open()
def stopRefreshWithSender_(self, sender): logger.debug('%r stopRefreshWithSender:%r', self, sender) sender.setImage_(NSImage.imageNamed_(NSImageNameRefreshTemplate)) self.crawlTask = None
def LevelIndicatorListCell(style="discrete", minValue=0, maxValue=10, warningValue=None, criticalValue=None, imagePath=None, imageNamed=None, imageObject=None): """ An object that displays a level indicator in a List column. **This object should only be used in the *columnDescriptions* argument during the construction of a List.**:: from vanilla import * class LevelIndicatorListCellDemo(object): def __init__(self): self.w = Window((340, 140)) items = [ {"discrete": 3, "continuous": 4, "rating": 1, "relevancy": 9}, {"discrete": 8, "continuous": 3, "rating": 5, "relevancy": 5}, {"discrete": 3, "continuous": 7, "rating": 3, "relevancy": 4}, {"discrete": 2, "continuous": 5, "rating": 4, "relevancy": 7}, {"discrete": 6, "continuous": 9, "rating": 3, "relevancy": 2}, {"discrete": 4, "continuous": 0, "rating": 6, "relevancy": 8}, ] columnDescriptions = [ {"title": "discrete", "cell": LevelIndicatorListCell(style="discrete", warningValue=7, criticalValue=9)}, {"title": "continuous", "cell": LevelIndicatorListCell(style="continuous", warningValue=7, criticalValue=9)}, {"title": "rating", "cell": LevelIndicatorListCell(style="rating", maxValue=6)}, {"title": "relevancy", "cell": LevelIndicatorListCell(style="relevancy")}, ] self.w.list = List((0, 0, -0, -0), items=items, columnDescriptions=columnDescriptions) self.w.open() LevelIndicatorListCellDemo() **style** The style of the level indicator. The options are: +--------------+-----------------------------------------+ | "continuous" | A continuous bar. | +--------------+-----------------------------------------+ | "discrete" | A segmented bar. | +--------------+-----------------------------------------+ | "rating" | A row of stars. Similar to the rating | | | indicator in iTunes. | +--------------+-----------------------------------------+ | "relevancy" | A row of lines. Similar to the search | | | result relevancy indicator in Mail. | +--------------+-----------------------------------------+ **minValue** The minimum value allowed by the level indicator. **maxValue** The maximum value allowed by the level indicator. **warningValue** The value at which the filled portions of the level indicator should display the warning color. Applies only to discrete and continuous level indicators. **criticalValue** The value at which the filled portions of the level indicator should display the critical color. Applies only to discrete and continuous level indicators. """ cell = NSLevelIndicatorCell.alloc().init() cell.setLevelIndicatorStyle_(_levelIndicatorStyleMap[style]) cell.setMinValue_(minValue) cell.setMaxValue_(maxValue) if warningValue is not None: cell.setWarningValue_(warningValue) if criticalValue is not None: cell.setCriticalValue_(criticalValue) if imagePath is not None: image = NSImage.alloc().initWithContentsOfFile_(imagePath) elif imageNamed is not None: image = NSImage.imageNamed_(imageNamed) elif imageObject is not None: image = imageObject if imageObject is not None: cell.setImage_(image) return cell
def createToolbarItems(self): """ Create the toolbar item and define the default and allowed set. """ addToolbarItem( self, kServerToolbarItemIdentifier, "Server", "Server", "Reset Server", self, "resetServer:", NSImage.imageNamed_("NSNetwork"), None, ) addToolbarItem( self, kRefreshToolbarItemIdentifier, "Refresh", "Refresh", "Refresh Display", self, "refreshData:", NSImage.imageNamed_("NSRefresh"), None, ) addToolbarItem( self, kBrowserViewToolbarItemIdentifier, "Browser", "Browser", "Browser View", self, "changeBrowserView:", self.toolbarBrowserViewButton, None, ) addToolbarItem( self, kDataViewToolbarItemIdentifier, "View", "View", "Data View", self, "changeDataView:", self.toolbarDataViewButton, None, ) self._toolbarDefaultItemIdentifiers = [ kServerToolbarItemIdentifier, kBrowserViewToolbarItemIdentifier, kDataViewToolbarItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, kRefreshToolbarItemIdentifier, ] self._toolbarAllowedItemIdentifiers = [ kServerToolbarItemIdentifier, kBrowserViewToolbarItemIdentifier, kDataViewToolbarItemIdentifier, kRefreshToolbarItemIdentifier, NSToolbarSeparatorItemIdentifier, NSToolbarSpaceItemIdentifier, NSToolbarFlexibleSpaceItemIdentifier, NSToolbarPrintItemIdentifier, NSToolbarCustomizeToolbarItemIdentifier, ]
def insertFeatureToolbarImage(): im = NSImage.imageNamed_("toolbarFeatures") return ufoApps.createToolbarIcon(im)
def __init__(self, drawGrid=False): self.w = Window((600, 500), "List Test", minSize=(400, 400)) simpleList = List((0, 0, 0, 0), listOptions, enableTypingSensitivity=True) multiItems = [ {"name": name, "path": os.path.basename(getattr(module, "__file__", "Unknown"))} for name, module in sys.modules.items() ] columnDescriptions = [ {"title": "Module Name", "key": "name"}, {"title": "File Name", "key": "path"} ] multiList = List((0, 0, 0, 0), multiItems, columnDescriptions=columnDescriptions, enableTypingSensitivity=True) if iconPath: image = NSImage.alloc().initWithContentsOfFile_(iconPath) else: image = NSImage.imageNamed_(iconName) miscItems = [ {"slider": 50, "sliderWithTicks" : 50, "checkBox": False, "image" : image, "segment" : 0}, {"slider": 20, "sliderWithTicks" : 20, "checkBox": True, "image" : image, "segment" : 1}, {"slider": 70, "sliderWithTicks" : 70, "checkBox": False, "image" : image, "segment" : 2}, {"slider": 20, "sliderWithTicks" : 20, "checkBox": True, "image" : image, "segment" : 0}, {"slider": 10, "sliderWithTicks" : 10, "checkBox": True, "image" : image, "segment" : 1}, {"slider": 90, "sliderWithTicks" : 90, "checkBox": False, "image" : image, "segment" : 2}, ] columnDescriptions = [ {"title": "SliderListCell", "key": "slider", "cell": SliderListCell()}, {"title": "SliderListCell", "key": "sliderWithTicks", "cell": SliderListCell(tickMarkCount=10, stopOnTickMarks=True)}, {"title": "CheckBoxListCell", "key": "checkBox", "cell": CheckBoxListCell()}, {"title": "ImageListCell", "key": "image", "cell": ImageListCell()}, {"title": "SegmentedButtonListCell", "key": "segment", "cell": SegmentedButtonListCell([dict(title="0"), dict(title="1"), dict(title="2")]), "binding": "selectedIndex"}, ] miscCellList = List((0, 0, 0, 0), items=miscItems, columnDescriptions=columnDescriptions) paneDescriptions = [ dict(view=simpleList, identifier="simpleList"), dict(view=multiList, identifier="multiList"), dict(view=miscCellList, identifier="miscCellList"), ] # only add the ListIndicator tests if the controls are available try: listIndicatorItems = [ {"discrete": 3, "continuous": 4, "rating": 1, "relevancy": 9}, {"discrete": 8, "continuous": 3, "rating": 5, "relevancy": 5}, {"discrete": 3, "continuous": 7, "rating": 3, "relevancy": 4}, {"discrete": 2, "continuous": 5, "rating": 4, "relevancy": 7}, {"discrete": 6, "continuous": 9, "rating": 3, "relevancy": 2}, {"discrete": 4, "continuous": 0, "rating": 6, "relevancy": 8}, ] columnDescriptions = [ {"title": "discrete", "cell": LevelIndicatorListCell(style="discrete", warningValue=7, criticalValue=9)}, {"title": "continuous", "cell": LevelIndicatorListCell(style="continuous", warningValue=7, criticalValue=9)}, {"title": "rating", "cell": LevelIndicatorListCell(style="rating", maxValue=6)}, {"title": "relevancy", "cell": LevelIndicatorListCell(style="relevancy")}, ] levelIndicatorList = List((0, 0, 0, 0), items=listIndicatorItems, columnDescriptions=columnDescriptions) paneDescriptions.append(dict(view=levelIndicatorList, identifier="levelIndicatorList")) except NameError: pass self.w.splitView = SplitView((0, 0, -0, -0), paneDescriptions, isVertical=False) if drawGrid: self.drawGrid() self.w.open()
def create_image(self): image = NSImage.imageNamed_("ExtensionIcon") self.w.image = ImageView((15, 15, 80, 80), scale='fit') self.w.image.setImage(imageObject=image)