aboutsummaryrefslogtreecommitdiffstats
path: root/mvc/widgets/osx/__init__.py
blob: f227b352e5bd783b6f3d8a6be0eac63244029d8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import sys

from objc import *
from Foundation import *
from AppKit import *

from PyObjCTools import AppHelper

size_request_manager = None

class AppController(NSObject):
    def applicationDidFinishLaunching_(self, notification):
        from mvc.widgets.osx.osxmenus import MenuBar
        self.portableApp.menubar = MenuBar()
        self.portableApp.startup()
        self.portableApp.run()

    def setPortableApp_(self, portableApp):
        self.portableApp = portableApp

    def handleMenuActivate_(self, menu_item):
        from mvc.widgets.osx import osxmenus
        osxmenus.handle_menu_activate(menu_item)

def initialize(app):
    nsapp = NSApplication.sharedApplication()
    delegate = AppController.alloc().init()
    delegate.setPortableApp_(app)
    nsapp.setDelegate_(delegate)

    global size_request_manager
    from mvc.widgets.osx.widgetupdates import SizeRequestManager
    size_request_manager = SizeRequestManager()

    NSApplicationMain(sys.argv)

def attach_menubar():
    pass

def mainloop_start():
    pass

def mainloop_stop():
    NSApplication.sharedApplication().terminate_(nil)

def idle_add(callback, periodic=None):
    def wrapper():
        callback()
        if periodic is not None:
            AppHelper.callLater(periodic, wrapper)
    if periodic is not None and periodic < 0:
        raise ValueError('periodic cannot be negative')
    # XXX: we have a lousy thread API that doesn't allocate pools for us...
    pool = NSAutoreleasePool.alloc().init()
    if periodic is not None:
        AppHelper.callLater(periodic, wrapper)
    else:
        AppHelper.callAfter(wrapper)
    del pool

def idle_remove(id_):
    pass

def reveal_file(filename):
    # XXX: dumb lousy type conversions ...
    path = NSURL.fileURLWithPath_(filename.decode('utf-8')).path()
    NSWorkspace.sharedWorkspace().selectFile_inFileViewerRootedAtPath_(
        path, nil)

def get_conversion_directory():
    url, error = NSFileManager.defaultManager().URLForDirectory_inDomain_appropriateForURL_create_error_(NSMoviesDirectory, NSUserDomainMask, nil, YES, None)
    if error:
        return None
    return url.path().encode('utf-8')