~nmu-sscheel/gtg/rework-task-editor

« back to all changes in this revision

Viewing changes to GTG/plugins/urgency_color/urgency_color.py

  • Committer: Bertrand Rousseau
  • Date: 2012-05-09 22:33:25 UTC
  • mfrom: (1178 trunk)
  • mto: This revision was merged to the branch mainline in revision 1179.
  • Revision ID: bertrand.rousseau@gmail.com-20120509223325-a53d8nwo0x9g93bc
Merge nimit branch and trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
# Copyright (c) 2012 - Wolter Hellmund <wolterh6@gmail.com>
 
3
#
 
4
# This program is free software: you can redistribute it and/or modify it under
 
5
# the terms of the GNU General Public License as published by the Free Software
 
6
# Foundation, either version 3 of the License, or (at your option) any later
 
7
# version.
 
8
#
 
9
# This program is distributed in the hope that it will be useful, but WITHOUT
 
10
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 
11
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 
12
# details.
 
13
#
 
14
# You should have received a copy of the GNU General Public License along with
 
15
# this program.  If not, see <http://www.gnu.org/licenses/>.
 
16
 
 
17
from math import ceil
 
18
import gtk
 
19
import os
 
20
 
 
21
from GTG.tools.dates import Date
 
22
 
 
23
 
 
24
class pluginUrgencyColor:
 
25
 
 
26
    PLUGIN_NAME = 'Urgency Color'
 
27
    DEFAULT_PREFS = {
 
28
        'reddays': 30,
 
29
        'color_green': '#cfff84',
 
30
        'color_yellow': '#ffed84',
 
31
        'color_red': '#ff9784'}
 
32
 
 
33
    def __init__(self):
 
34
        self._plugin_api = None
 
35
        self.req = None
 
36
 
 
37
    def activate(self, plugin_api):
 
38
        """ Plugin is activated """
 
39
        self._plugin_api = plugin_api
 
40
        self.req = self._plugin_api.get_requester()
 
41
        self.prefs_load()
 
42
        self.prefs_init()
 
43
        # Set color function
 
44
        self._plugin_api.set_bgcolor_func(self.bgcolor)
 
45
 
 
46
    def _get_color(self, colindex):
 
47
        if colindex == 0:
 
48
            return self._pref_data['color_green']
 
49
        elif colindex == 1:
 
50
            return self._pref_data['color_yellow']
 
51
        elif colindex == 2:
 
52
            return self._pref_data['color_red']
 
53
        else:
 
54
            return None
 
55
 
 
56
    def bgcolor(self, node, standard_color):
 
57
        sdate = node.get_start_date()
 
58
        ddate = node.get_due_date()
 
59
        if (sdate != Date.no_date() != ddate):
 
60
            dayspan = (ddate - sdate).days
 
61
            daysleft = ddate.days_left()
 
62
 
 
63
            redf = self._pref_data['reddays']
 
64
            reddays = int(ceil(redf*dayspan/100))
 
65
            color = 0
 
66
            if daysleft <= dayspan:
 
67
                color = 1
 
68
            if daysleft <= reddays:
 
69
                color = 2
 
70
            # This list should be implemented in the settings
 
71
            #print "Giving color"
 
72
            return self._get_color(color)
 
73
        else:
 
74
            # Return color for this node
 
75
            return None
 
76
 
 
77
    def deactivate(self, plugin_api):
 
78
        """ Plugin is deactivated """
 
79
        self._plugin_api.set_bgcolor_func()
 
80
 
 
81
# Preferences dialog
 
82
    def is_configurable(self):
 
83
        """Requisite function for configurable plugins"""
 
84
        return True
 
85
 
 
86
    def configure_dialog(self, manager_dialog):
 
87
        self._pref_data_potential = self._pref_data
 
88
        self.prefs_window.show_all()
 
89
        #self.prefs_window.set_transient_for(manager_dialog)
 
90
        pass
 
91
 
 
92
    def prefs_init(self):
 
93
        self.builder = gtk.Builder()
 
94
        self.builder.add_from_file(os.path.join(
 
95
            os.path.dirname(os.path.abspath(__file__)),
 
96
            'preferences.ui'))
 
97
 
 
98
        # Get the widgets
 
99
        #   Window
 
100
        self.prefs_window = self.builder.get_object('prefs_window')
 
101
        self.prefs_window.set_title(('GTG - %s preferences' \
 
102
            % self.PLUGIN_NAME))
 
103
        self.prefs_window.set_size_request(300, -1)
 
104
        self.prefs_window.hide_on_delete()
 
105
 
 
106
        #   Spin button
 
107
        self.spinbutton_reddays = self.builder.get_object('spinbutton_reddays')
 
108
 
 
109
        #   Colorbutton - RED
 
110
        self.colorbutton_red = self.builder.get_object('colorbutton_red')
 
111
 
 
112
        #   Colorbutton - YELLOW
 
113
        self.colorbutton_yellow = self.builder.get_object('colorbutton_yellow')
 
114
 
 
115
        #   Colorbutton - GREEN
 
116
        self.colorbutton_green = self.builder.get_object('colorbutton_green')
 
117
 
 
118
        #   Buttons
 
119
        self.button_apply = self.builder.get_object('button_apply')
 
120
        self.button_reset = self.builder.get_object('button_reset')
 
121
 
 
122
        # Update widget's values
 
123
        self.prefs_update_widgets()
 
124
 
 
125
        # Signal connections
 
126
        SIGNAL_CONNECTIONS_DIC = {
 
127
            'on_prefs_window_delete_event':
 
128
                self.on_prefs_cancel,
 
129
            'on_prefs_apply_event':
 
130
                self.on_prefs_apply,
 
131
            'on_prefs_reset_event':
 
132
                self.on_prefs_reset,
 
133
            'on_prefs_spinbutton_reddays_changed':
 
134
                self.on_prefs_spinbutton_reddays_changed,
 
135
            'on_prefs_colorbutton_red_changed':
 
136
                self.on_prefs_colorbutton_red_changed,
 
137
            'on_prefs_colorbutton_yellow_changed':
 
138
                self.on_prefs_colorbutton_yellow_changed,
 
139
            'on_prefs_colorbutton_green_changed':
 
140
                self.on_prefs_colorbutton_green_changed}
 
141
        self.builder.connect_signals(SIGNAL_CONNECTIONS_DIC)
 
142
 
 
143
    def prefs_update_widgets(self):
 
144
        """ Synchronizes the widgets with the data in _pref_data """
 
145
        # Spin button
 
146
        self.spinbutton_reddays.set_value(self._pref_data['reddays'])
 
147
        # Colorbutton - RED
 
148
        self.colorbutton_red.set_color( \
 
149
            gtk.gdk.color_parse(self._pref_data['color_red']))
 
150
        # Colorbutton - YELLOW
 
151
        self.colorbutton_yellow.set_color( \
 
152
            gtk.gdk.color_parse(self._pref_data['color_yellow']))
 
153
        # Colorbutton - GREEN
 
154
        self.colorbutton_green.set_color( \
 
155
            gtk.gdk.color_parse(self._pref_data['color_green']))
 
156
 
 
157
    def on_prefs_cancel(self, widget=None, data=None):
 
158
        self.prefs_update_widgets()
 
159
        self.prefs_window.hide()
 
160
        return True
 
161
 
 
162
    def on_prefs_apply(self, widget=None, data=None):
 
163
        self._pref_data = self._pref_data_potential
 
164
        self.prefs_store()
 
165
        self.prefs_window.hide()
 
166
 
 
167
    def on_prefs_reset(self, widget=None, data=None):
 
168
        # Restore the default plugin settings
 
169
        self._pref_data = self._pref_data_potential = dict(self.DEFAULT_PREFS)
 
170
        self.prefs_update_widgets()
 
171
 
 
172
    def prefs_load(self):
 
173
        data = self._plugin_api.load_configuration_object( \
 
174
            self.PLUGIN_NAME,
 
175
            'preferences')
 
176
        if not data or not isinstance(data, dict):
 
177
            self._pref_data = dict(self.DEFAULT_PREFS)
 
178
        else:
 
179
            self._pref_data = data
 
180
 
 
181
    def prefs_store(self):
 
182
        self._plugin_api.save_configuration_object( \
 
183
            self.PLUGIN_NAME,
 
184
            'preferences',
 
185
            self._pref_data)
 
186
 
 
187
    def on_prefs_spinbutton_reddays_changed(self, widget=None, data=None):
 
188
        self._pref_data_potential['reddays'] = \
 
189
            self.spinbutton_reddays.get_value()
 
190
 
 
191
    def on_prefs_colorbutton_red_changed(self, widget=None, data=None):
 
192
        self._pref_data_potential['color_red'] = \
 
193
            self.colorbutton_red.get_color().to_string()
 
194
 
 
195
    def on_prefs_colorbutton_yellow_changed(self, widget=None, data=None):
 
196
        self._pref_data_potential['color_yellow'] = \
 
197
            self.colorbutton_yellow.get_color().to_string()
 
198
 
 
199
    def on_prefs_colorbutton_green_changed(self, widget=None, data=None):
 
200
        self._pref_data_potential['color_green'] = \
 
201
            self.colorbutton_green.get_color().to_string()