1
# -*- coding: utf-8 -*-
2
# Copyright (c) 2012 - Wolter Hellmund <wolterh6@gmail.com>
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
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
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/>.
21
from GTG.tools.dates import Date
24
class pluginUrgencyColor:
26
PLUGIN_NAME = 'Urgency Color'
29
'color_green': '#cfff84',
30
'color_yellow': '#ffed84',
31
'color_red': '#ff9784'}
34
self._plugin_api = None
37
def activate(self, plugin_api):
38
""" Plugin is activated """
39
self._plugin_api = plugin_api
40
self.req = self._plugin_api.get_requester()
44
self._plugin_api.set_bgcolor_func(self.bgcolor)
46
def _get_color(self, colindex):
48
return self._pref_data['color_green']
50
return self._pref_data['color_yellow']
52
return self._pref_data['color_red']
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()
63
redf = self._pref_data['reddays']
64
reddays = int(ceil(redf*dayspan/100))
66
if daysleft <= dayspan:
68
if daysleft <= reddays:
70
# This list should be implemented in the settings
72
return self._get_color(color)
74
# Return color for this node
77
def deactivate(self, plugin_api):
78
""" Plugin is deactivated """
79
self._plugin_api.set_bgcolor_func()
82
def is_configurable(self):
83
"""Requisite function for configurable plugins"""
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)
93
self.builder = gtk.Builder()
94
self.builder.add_from_file(os.path.join(
95
os.path.dirname(os.path.abspath(__file__)),
100
self.prefs_window = self.builder.get_object('prefs_window')
101
self.prefs_window.set_title(('GTG - %s preferences' \
103
self.prefs_window.set_size_request(300, -1)
104
self.prefs_window.hide_on_delete()
107
self.spinbutton_reddays = self.builder.get_object('spinbutton_reddays')
110
self.colorbutton_red = self.builder.get_object('colorbutton_red')
112
# Colorbutton - YELLOW
113
self.colorbutton_yellow = self.builder.get_object('colorbutton_yellow')
115
# Colorbutton - GREEN
116
self.colorbutton_green = self.builder.get_object('colorbutton_green')
119
self.button_apply = self.builder.get_object('button_apply')
120
self.button_reset = self.builder.get_object('button_reset')
122
# Update widget's values
123
self.prefs_update_widgets()
126
SIGNAL_CONNECTIONS_DIC = {
127
'on_prefs_window_delete_event':
128
self.on_prefs_cancel,
129
'on_prefs_apply_event':
131
'on_prefs_reset_event':
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)
143
def prefs_update_widgets(self):
144
""" Synchronizes the widgets with the data in _pref_data """
146
self.spinbutton_reddays.set_value(self._pref_data['reddays'])
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']))
157
def on_prefs_cancel(self, widget=None, data=None):
158
self.prefs_update_widgets()
159
self.prefs_window.hide()
162
def on_prefs_apply(self, widget=None, data=None):
163
self._pref_data = self._pref_data_potential
165
self.prefs_window.hide()
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()
172
def prefs_load(self):
173
data = self._plugin_api.load_configuration_object( \
176
if not data or not isinstance(data, dict):
177
self._pref_data = dict(self.DEFAULT_PREFS)
179
self._pref_data = data
181
def prefs_store(self):
182
self._plugin_api.save_configuration_object( \
187
def on_prefs_spinbutton_reddays_changed(self, widget=None, data=None):
188
self._pref_data_potential['reddays'] = \
189
self.spinbutton_reddays.get_value()
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()
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()
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()