• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /macosx-10.10.1/pyobjc-45/pyobjc/pyobjc-framework-Cocoa-2.5.1/Examples/AppKit/CocoaBindings/TableModelWithSearch/
1#
2#  ToolbarCreator.py
3#  TableModelWithSearch
4#
5#  Created by Bill Bumgarner on Sun Apr 04 2004.
6#  Copyright (c) 2004 __MyCompanyName__. All rights reserved.
7#
8
9from Cocoa import *
10
11kToolbarIdentifier = "TableModel Toolbar Identifier"
12kSearchFieldItemIdentifier = "TableModel Search Field Identifier"
13
14from FilteringArrayController import kLiteralSearch, kRegularExpressionSearch
15
16class ToolbarCreator (NSObject):
17    filteringArrayController = objc.IBOutlet()
18    searchField = objc.IBOutlet()
19    window = objc.IBOutlet()
20
21    def awakeFromNib(self):
22        self.toolbarItemCache = {}
23
24        # create toolbar containing search field
25        toolbar = NSToolbar.alloc().initWithIdentifier_(kToolbarIdentifier)
26        toolbar.setDelegate_(self)
27        toolbar.setAllowsUserCustomization_(True)
28        toolbar.setAutosavesConfiguration_(True)
29
30        searchFieldItem = NSToolbarItem.alloc().initWithItemIdentifier_(kSearchFieldItemIdentifier)
31        self.searchFieldItem = searchFieldItem
32        searchFieldItem.setLabel_("Search")
33        searchFieldItem.setPaletteLabel_("Search Field")
34        searchFieldItem.setToolTip_("Search")
35        searchFieldItem.setView_(self.searchField)
36        searchFieldItem.setMinSize_(self.searchField.bounds().size)
37        maxSize = self.searchField.bounds().size
38        maxSize.width = maxSize.width + 150
39        searchFieldItem.setMaxSize_(maxSize)
40
41        self.toolbarItemCache[kSearchFieldItemIdentifier] = searchFieldItem
42
43        self.window.setToolbar_(toolbar)
44
45        cellMenu = NSMenu.alloc().initWithTitle_(u'Search Menu')
46        # note, bottom up!
47        for v in [kRegularExpressionSearch, kLiteralSearch]:
48            item = NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(v, 'changeSearchType:', u'')
49            item.setRepresentedObject_(v)
50            item.setTarget_(self)
51            cellMenu.insertItem_atIndex_(item, 0)
52        self.searchField.cell().setSearchMenuTemplate_(cellMenu)
53        # this better be the kLiteralSearch menu item
54        self.changeSearchType_(item)
55
56    @objc.IBAction
57    def changeSearchType_(self, sender):
58        obj = sender.representedObject()
59        self.searchField.cell().setPlaceholderString_(obj)
60        self.searchField.setStringValue_(u'')
61        self.filteringArrayController.changeSearchType_(obj)
62
63    def toolbarDefaultItemIdentifiers_(self, aToolbar):
64        return [
65            kSearchFieldItemIdentifier,
66            NSToolbarFlexibleSpaceItemIdentifier,
67            NSToolbarSeparatorItemIdentifier,
68            NSToolbarCustomizeToolbarItemIdentifier,
69        ]
70
71    def toolbarAllowedItemIdentifiers_(self, aToolbar):
72        return [
73            kSearchFieldItemIdentifier,
74            NSToolbarFlexibleSpaceItemIdentifier,
75            NSToolbarSpaceItemIdentifier,
76            NSToolbarSeparatorItemIdentifier,
77            NSToolbarPrintItemIdentifier,
78            NSToolbarCustomizeToolbarItemIdentifier,
79        ]
80
81    def toolbar_itemForItemIdentifier_willBeInsertedIntoToolbar_(self, toolbar, itemIdentifier, flag):
82        newItem = NSToolbarItem.alloc().initWithItemIdentifier_(itemIdentifier)
83        item = self.toolbarItemCache[itemIdentifier]
84
85        newItem.setLabel_( item.label() )
86        newItem.setPaletteLabel_( item.paletteLabel() )
87        if item.view():
88            newItem.setView_( item.view() )
89        else:
90            newItem.setImage_( item.image() )
91
92        newItem.setToolTip_( item.toolTip() )
93        newItem.setTarget_( item.target() )
94        newItem.setAction_( item.action() )
95        newItem.setMenuFormRepresentation_( item.menuFormRepresentation() )
96
97        if newItem.view():
98            newItem.setMinSize_( item.minSize() )
99            newItem.setMaxSize_( item.maxSize() )
100
101        return newItem
102