~vcs-imports/gnome-mag/master

« back to all changes in this revision

Viewing changes to colorblind/ColorblindApplet.py

  • Committer: Carlos Eduardo Rodrigues Diógenes
  • Date: 2007-06-03 23:52:07 UTC
  • Revision ID: git-v1:42a8898cb38357218626e4c81555423da8ab37cd
Tags: GNOME_MAG_0_14_5
commit the changes of the colorblind applet

svn path=/trunk/; revision=515

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import os, time
 
2
from os.path import *
 
3
import gnomeapplet, gtk, gtk.gdk, gconf, gnomevfs, gobject, bonobo, ORBit
 
4
from gettext import gettext as _
 
5
 
 
6
import colorblind, colorblind.ui
 
7
from colorblind.ui.About import show_about
 
8
from colorblind.ui.ColorblindPreferencesUI import show_preferences
 
9
from colorblind.ColorblindAppletPreferences import ColorblindAppletPreferences
 
10
from colorblind.Keybinder import get_colorblind_keybinder_on_off, get_colorblind_keybinder_switch
 
11
from colorblind.ui.WindowUI import WindowUI
 
12
 
 
13
_magnifierAvailable = False
 
14
 
 
15
try:
 
16
        ORBit.load_typelib ('Accessibility')
 
17
        ORBit.load_typelib ('GNOME_Magnifier')
 
18
        import GNOME.Magnifier
 
19
        _magnifierAvailable = True
 
20
except:
 
21
        pass
 
22
 
 
23
class ColorblindApplet(object):
 
24
 
 
25
        __instance = None
 
26
 
 
27
        def __init__(self, applet):
 
28
                if ColorblindApplet.__instance == None:
 
29
                        ColorblindApplet.__instance = self
 
30
                
 
31
                self.enabled = False
 
32
                self.shutdown = False
 
33
                self.magnifier = None
 
34
                self.zoomer = None
 
35
                self.zoomerPBag = None
 
36
 
 
37
                self.applet = applet
 
38
                
 
39
                self.start_query_id = 0
 
40
                        
 
41
                self.prefs = ColorblindAppletPreferences(applet)
 
42
                
 
43
                gtk.window_set_default_icon_name("colorblind-applet")
 
44
 
 
45
                self.ui = WindowUI(applet, self.prefs)
 
46
                self.ui.connect('show-preferences', self.on_preferences, None)
 
47
                self.ui.connect('show-about', self.on_about, None)
 
48
                        
 
49
                self.set_up_ui_signals ()
 
50
                                
 
51
                # Monitor global shortcut binding
 
52
                get_colorblind_keybinder_on_off().connect('activated', self.on_keybinding_button_press, "on_off")
 
53
                get_colorblind_keybinder_switch().connect('activated', self.on_keybinding_button_press, "switch")
 
54
                self.applet.connect('change-background', self.on_change_background)
 
55
 
 
56
                self.image = gtk.Image()
 
57
                self.applet.add (self.image)
 
58
                self.applet.setup_menu_from_file (
 
59
                        colorblind.SHARED_DATA_DIR, "Colorblind_Applet.xml",
 
60
                        None, [
 
61
                        ("About", self.on_about),
 
62
                        ("Prefs", self.on_preferences),
 
63
                        ])
 
64
                self.on_change_size (self.applet)
 
65
                self.applet.show_all()
 
66
                
 
67
        def get_instance():
 
68
                return ColorblindApplet.__instance
 
69
        get_instance = staticmethod(get_instance)
 
70
                
 
71
        def on_keyboard_shortcut (self, sender, qstring, shortcut):
 
72
                for modctx in self.module_list:
 
73
                        if not modctx.enabled:
 
74
                                continue
 
75
                                
 
76
                        match = modctx.module.on_key_press(qstring, shortcut)
 
77
                        if match != None:
 
78
                                self.on_match_selected(sender, qstring, match)
 
79
                                break
 
80
                                        
 
81
        def on_about (self, component, verb):
 
82
                show_about(self.applet)
 
83
        
 
84
        def on_preferences (self, component, verb):
 
85
                show_preferences(self)
 
86
 
 
87
        def active_actual_filter (self):
 
88
                if self.enabled == True:
 
89
                        filter = colorblind.GCONF_CLIENT.get_int(colorblind.GCONF_COLORBLIND_FILTER)
 
90
                        bonobo.pbclient_set_short (self.zoomerPBag, "color-blind-filter", filter)
 
91
        
 
92
        def enable_disable_filters (self):
 
93
                global _magnifierAvailable
 
94
 
 
95
                if _magnifierAvailable:
 
96
                        if self.enabled == True:
 
97
                                try:
 
98
                                        if self.shutdown:
 
99
                                                self.magnifier.clearAllZoomRegions ()
 
100
                                                self.magnifier.dispose ()
 
101
                                                self.magnifier = None
 
102
                                                self.zoomer = None
 
103
                                except:
 
104
                                        pass
 
105
                                if self.zoomer:
 
106
                                        bonobo.pbclient_set_short (self.zoomerPBag, "color-blind-filter", 0)
 
107
                                self.enabled = False
 
108
                                self.shutdown = False
 
109
                                save_actual_filter = colorblind.GCONF_CLIENT.get_bool (colorblind.GCONF_CHECK_DEFAULT)
 
110
                                if save_actual_filter:
 
111
                                        af = colorblind.GCONF_CLIENT.get_int (colorblind.GCONF_COLORBLIND_FILTER)
 
112
                                        colorblind.GCONF_CLIENT.set_int (colorblind.GCONF_DEFAULT_FILTER, af)                           
 
113
                        else:
 
114
                                self.magnifier = bonobo.get_object ("OAFIID:GNOME_Magnifier_Magnifier:0.9", "GNOME/Magnifier/Magnifier")
 
115
                                magPBag = self.magnifier.getProperties ()
 
116
                                tdb = magPBag.getValue ("target-display-bounds").value ()
 
117
                                if tdb.x1 == 0 and tdb.y1 == 0 and tdb.x2 == 0 and tdb.y2 == 0:
 
118
                                        bonobo.pbclient_set_long (magPBag, "crosswire-size", 0)
 
119
                                        self.zoomer = self.magnifier.createZoomRegion (1, 1, GNOME.Magnifier.RectBounds (0, 0, gtk.gdk.screen_width (), gtk.gdk.screen_height ()), GNOME.Magnifier.RectBounds (0, 0, gtk.gdk.screen_width (), gtk.gdk.screen_height ()))
 
120
                                        self.magnifier.addZoomRegion (self.zoomer)
 
121
                                        self.shutdown = True
 
122
                                if self.zoomer == None:
 
123
                                        self.zoomer = self.magnifier.getZoomRegions ()
 
124
                                        self.zoomer = self.zoomer[0]
 
125
                                self.zoomerPBag = self.zoomer.getProperties ()
 
126
                                bonobo.pbclient_set_boolean (self.zoomerPBag, "draw-cursor", False)
 
127
                                cb_filter = colorblind.GCONF_CLIENT.get_int(colorblind.GCONF_DEFAULT_FILTER)
 
128
                                bonobo.pbclient_set_short (self.zoomerPBag, "color-blind-filter", cb_filter)
 
129
                                self.enabled = True
 
130
 
 
131
        def next_filter (self):
 
132
                if self.enabled:
 
133
                        cb_filter = colorblind.GCONF_CLIENT.get_int (colorblind.GCONF_COLORBLIND_FILTER)
 
134
                        cb_filter = ((cb_filter + 1) % 9)
 
135
                        if cb_filter == 0:
 
136
                                cb_filter += 1
 
137
                        colorblind.GCONF_CLIENT.set_int(colorblind.GCONF_COLORBLIND_FILTER, cb_filter)
 
138
                        bonobo.pbclient_set_short (self.zoomerPBag, "color-blind-filter", cb_filter)
 
139
 
 
140
        def on_keybinding_button_press(self, widget, str):
 
141
                print "Keybinding activated"
 
142
                if str == "on_off":
 
143
                        self.enable_disable_filters ()
 
144
                elif str == "switch":
 
145
                        self.next_filter ()
 
146
                
 
147
        def on_keybinding_changed(self, binder, bound):
 
148
                # FIXME: provide visual clue when not bound
 
149
                # FIXME: should be used in the pref window
 
150
                pass
 
151
 
 
152
        def set_up_ui_signals (self):
 
153
                self.applet.connect('change-size', lambda applet, orient: self.on_change_size(applet))
 
154
 
 
155
        def set_image_from_file (self, filename, size):
 
156
                # We use an intermediate pixbuf to scale the image
 
157
                if self.applet.get_orient in [gnomeapplet.ORIENT_DOWN, gnomeapplet.ORIENT_UP]:
 
158
                        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (filename, -1, size)
 
159
                else:
 
160
                        pixbuf = gtk.gdk.pixbuf_new_from_file_at_size (filename, size, -1)
 
161
                self.image.set_from_pixbuf (pixbuf)
 
162
 
 
163
        def on_change_size (self, applet):
 
164
                # FIXME: This is ugly, but i don't know how to get it right
 
165
                image_name = "colorblind-applet"
 
166
 
 
167
                if applet.get_size() <= 36:
 
168
                        image_name += ".png"
 
169
                        s = -1
 
170
                else:
 
171
                        image_name += ".svg"
 
172
                        s = applet.get_size()-12
 
173
        
 
174
                self.set_image_from_file (join(colorblind.ART_DATA_DIR, image_name), s)
 
175
 
 
176
        def on_change_background (self, widget, background, colour, pixmap):
 
177
                if background == gnomeapplet.NO_BACKGROUND or background == gnomeapplet.PIXMAP_BACKGROUND:
 
178
                        copy = self.applet.get_style().copy()
 
179
                        copy.bg_pixmap[gtk.STATE_NORMAL] = pixmap
 
180
                        copy.bg_pixmap[gtk.STATE_INSENSITIVE]  = pixmap
 
181
                        self.applet.set_style(copy)
 
182
                elif background == gnomeapplet.COLOR_BACKGROUND:
 
183
                        self.applet.modify_bg(gtk.STATE_NORMAL, colour)
 
184
 
 
185
def active_actual_filter ():
 
186
        ColorblindApplet.get_instance ().active_actual_filter ()
 
 
b'\\ No newline at end of file'