aboutsummaryrefslogtreecommitdiff
path: root/parrot_zik/indicator/mac.py
blob: ceeacb0baa5e846451cd195061d0ecd3ff3c6210 (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
import os
import sys

from Foundation import *
from AppKit import *
from PyObjCTools import AppHelper

from parrot_zik.indicator.base import BaseIndicator
from parrot_zik.indicator.base import MenuItemBase
from parrot_zik.status_app_mac import StatusApp


class DarwinIndicator(BaseIndicator):
    def __init__(self, icon, menu):
        self.icon_directory = os.path.join(
            os.path.dirname(os.path.realpath(sys.argv[0])), 'share', 'icons', 'zik')
        statusicon = StatusApp.sharedApplication()
        statusicon.initMenu(menu)
        super(DarwinIndicator, self).__init__(icon, menu, statusicon)

    def setIcon(self, name):
        self.statusicon.setIcon(name, self.icon_directory)

    @classmethod
    def main(cls):
        AppHelper.runEventLoop()

    def show_about_dialog(self, widget):
        pass

    def quit(self, _):
        pass


class NSMenu(object):
    def __init__(self):
        self.actions = {}
        self.menubarMenu = NSMenu.alloc().init()
        self.menubarMenu.setAutoenablesItems_(False)

    def append(self, menu_item):
        self.actions[menu_item.title] = menu_item.action
        self.menubarMenu.addItem_(menu_item.nsmenu_item)

    def reposition(self):
        #  TODO
        pass


class NSMenuItem(MenuItemBase):
    def __init__(self, name, action, sensitive=True, checkitem=False, visible=True):
        self.title = name
        self.action = action
        nsmenu_item = (
            NSMenuItem.alloc().initWithTitle_action_keyEquivalent_(
                name, 'clicked:', ''))
        super(NSMenuItem, self).__init__(nsmenu_item, sensitive, visible)

    def set_sensitive(self, option):
        self.base_item.setEnabled_(option)

    def set_active(self, option):
        self.base_item.setState_(option)

    def get_active(self):
        return self.base_item.state

    def set_label(self, option):
        self.title = option
        self.base_item.setTitle_(option)