1 import rox
2 from rox.options import Option
3
4 from traylib import *
5 from traylib.tray_window import TrayWindow
6 from traylib.tray_applet import TrayApplet
7 from traylib.tray import Tray
8 from traylib.icon_config import IconConfig
9 from traylib.tray_config import TrayConfig
10
11
13
14 - def __init__(self, name):
15 """
16 Creates a new C{Main} object.
17 """
18
19 object.__init__(self)
20
21 self.name = name
22
23 self.init_options()
24 rox.app_options.notify()
25
26 self.init_config()
27
28 - def init_options(self):
29 self.__o_icon_size_min = Option("icon_size_min", 16)
30 self.__o_icon_size_max = Option("icon_size_max", 32)
31 self.__o_effects = Option("effects", True)
32 self.__o_separator_left = Option("separator_left", False)
33 self.__o_separator_right = Option("separator_right", False)
34 self.__o_menus = Option("menus", RIGHT)
35 self.__o_hidden = Option("hidden", False)
36
37 - def init_config(self):
38 separators = 0
39 if self.__o_separator_left.int_value:
40 separators |= LEFT
41 if self.__o_separator_right.int_value:
42 separators |= RIGHT
43 self.__icon_config = IconConfig(16, 0,
44 self.__o_effects.int_value,
45 None,
46 self.__o_hidden.int_value)
47 self.__tray_config = TrayConfig(self.name, self.__o_menus.int_value, separators)
48
49 - def mainloop(self, app_args, tray_class, *tray_args):
50 """
51 Starts the main loop and returns when the tray app is quit.
52
53 @param app_args: The arguments passed to the app.
54 @param tray_class: The type of tray. Must be a subclass of L{Tray}.
55 @param *tray_args: Additional args for the L{Tray} subclass.
56 """
57 assert issubclass(tray_class, Tray)
58 rox.app_options.add_notify(self.options_changed)
59 if len(app_args) >= 2:
60 self.__main_window = TrayApplet(app_args[1],
61 self.__o_icon_size_min.int_value,
62 self.__o_icon_size_max.int_value,
63 tray_class,
64 self.__icon_config,
65 self.__tray_config,
66 *tray_args)
67 else:
68 self.__main_window = TrayWindow(self.__o_icon_size_min.int_value,
69 self.__o_icon_size_max.int_value,
70 tray_class,
71 self.__icon_config,
72 self.__tray_config,
73 *tray_args)
74 self.__main_window.show()
75 rox.mainloop()
76
78 """Called when the options have changed."""
79 if self.__o_icon_size_min.has_changed or self.__o_icon_size_max.has_changed:
80 self.__main_window.update_icon_size(self.__o_icon_size_min.int_value,
81 self.__o_icon_size_max.int_value)
82
83 if self.__o_separator_left.has_changed or self.__o_separator_right.has_changed:
84 separators = 0
85 if self.__o_separator_left.int_value:
86 separators |= LEFT
87 if self.__o_separator_right.int_value:
88 separators |= RIGHT
89 self.__tray_config.separators = separators
90
91 if self.__o_menus.has_changed:
92 self.__tray_config.menus = self.__o_menus.int_value
93
94 if self.__o_effects.has_changed:
95 self.__icon_config.effects = self.__o_effects.int_value
96
97 icon_config = property(lambda self : self.__icon_config)
98 tray_config = property(lambda self : self.__tray_config)
99