~gtg-user/gtg/port-to-gtk3

« back to all changes in this revision

Viewing changes to GTG/gtk/browser/browser.py

  • Committer: Izidor Matušov
  • Date: 2012-12-14 13:53:48 UTC
  • mfrom: (1240.1.17 trunk)
  • Revision ID: izidor.matusov@gmail.com-20121214135348-q7wn21y464xb1q2x
Merging trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
from GTG.tools.dates import Date
43
43
from GTG.tools.logger import Log
44
44
 
45
 
#=== MAIN CLASS ===============================================================
46
 
 
47
 
 
48
45
 
49
46
class Timer:
50
47
 
92
89
 
93
90
        # Set up models
94
91
        # Active Tasks
95
 
        self.req.apply_global_filter(self.activetree,'active')
 
92
        self.req.apply_global_filter(self.activetree, 'active')
96
93
        # Tags
97
94
        self.tagtree = None
98
95
        self.tagtreeview = None
198
195
        self.tagtree = self.req.get_tag_tree()
199
196
        self.tagtreeview = self.tv_factory.tags_treeview(self.tagtree)
200
197
        #Tags treeview
201
 
        self.tagtreeview.get_selection().connect('changed', \
 
198
        self.tagtreeview.get_selection().connect('changed',
202
199
            self.on_select_tag)
203
 
        self.tagtreeview.connect('button-press-event', \
 
200
        self.tagtreeview.connect('button-press-event',
204
201
            self.on_tag_treeview_button_press_event)
205
 
        self.tagtreeview.connect('key-press-event', \
 
202
        self.tagtreeview.connect('key-press-event',
206
203
            self.on_tag_treeview_key_press_event)
207
 
        self.tagtreeview.connect('node-expanded', \
 
204
        self.tagtreeview.connect('node-expanded',
208
205
            self.on_tag_expanded)
209
 
        self.tagtreeview.connect('node-collapsed', \
 
206
        self.tagtreeview.connect('node-collapsed',
210
207
            self.on_tag_collapsed)
211
208
        self.sidebar_container.add(self.tagtreeview)
212
209
 
 
210
        for path_t in self.config.get("expanded_tags"):
 
211
            #the tuple was stored as a string. we have to reconstruct it
 
212
            path = ()
 
213
            for p in path_t[1:-1].split(","):
 
214
                p = p.strip(" '")
 
215
                path += (p, )
 
216
            if path[-1] == '':
 
217
                path = path[:-1]
 
218
            self.tagtreeview.expand_node(path)
 
219
 
213
220
        # expanding search tag does not work automatically, request it
214
221
        self.expand_search_tag()
215
222
 
347
354
        self.window.connect("destroy", self.quit)
348
355
 
349
356
        # Active tasks TreeView
350
 
        self.vtree_panes['active'].connect('row-activated', \
 
357
        self.vtree_panes['active'].connect('row-activated',
351
358
            self.on_edit_active_task)
352
 
        self.vtree_panes['active'].connect('button-press-event', \
 
359
        self.vtree_panes['active'].connect('button-press-event',
353
360
            self.on_task_treeview_button_press_event)
354
 
        self.vtree_panes['active'].connect('key-press-event', \
 
361
        self.vtree_panes['active'].connect('key-press-event',
355
362
            self.on_task_treeview_key_press_event)
356
 
        self.vtree_panes['active'].connect('node-expanded', \
 
363
        self.vtree_panes['active'].connect('node-expanded',
357
364
            self.on_task_expanded)
358
 
        self.vtree_panes['active'].connect('node-collapsed', \
 
365
        self.vtree_panes['active'].connect('node-collapsed',
359
366
            self.on_task_collapsed)
360
367
 
361
368
        b_signals = BackendSignals()
362
369
        b_signals.connect(b_signals.BACKEND_FAILED, self.on_backend_failed)
363
 
        b_signals.connect(b_signals.BACKEND_STATE_TOGGLED, \
 
370
        b_signals.connect(b_signals.BACKEND_STATE_TOGGLED,
364
371
                          self.remove_backend_infobar)
365
 
        b_signals.connect(b_signals.INTERACTION_REQUESTED, \
 
372
        b_signals.connect(b_signals.INTERACTION_REQUESTED,
366
373
                          self.on_backend_needing_interaction)
367
374
        # Selection changes
368
375
        self.selection = self.vtree_panes['active'].get_selection()
402
409
### HELPER FUNCTIONS ########################################################
403
410
    def open_preferences(self, widget):
404
411
        self.vmanager.open_preferences(self.config)
405
 
        
 
412
 
406
413
    def open_plugins(self, widget):
407
414
        self.vmanager.configure_plugins()
408
415
 
507
514
                path = path[:-1]
508
515
            self.vtree_panes['active'].collapse_node(path)
509
516
 
510
 
        for path_t in self.config.get("expanded_tags"):
511
 
            #the tuple was stored as a string. we have to reconstruct it
512
 
            path = ()
513
 
            for p in path_t[1:-1].split(","):
514
 
                p = p.strip(" '")
515
 
                path += (p, )
516
 
            if path[-1] == '':
517
 
                path = path[:-1]
518
 
            self.tagtreeview.expand_node(path)
519
 
 
520
517
        self.set_view(self.config.get("view"))
521
518
 
522
519
        def open_task(req, t):
562
559
 
563
560
    def set_view(self, viewname):
564
561
        if viewname == 'default':
565
 
            self.req.unapply_global_filter(self.activetree,'workview')
 
562
            self.req.unapply_global_filter(self.activetree, 'workview')
566
563
            workview = False
567
564
        elif viewname == 'workview':
568
 
            self.req.apply_global_filter(self.activetree,'workview')
 
565
            self.req.apply_global_filter(self.activetree, 'workview')
569
566
            workview = True
570
567
        else:
571
568
            raise Exception('Cannot set the view %s' %viewname)
582
579
        if count == 0:
583
580
            parenthesis = _("no active tasks")
584
581
        else:
585
 
            parenthesis = ngettext("%(tasks)d active task", \
586
 
                                   "%(tasks)d active tasks", \
 
582
            parenthesis = ngettext("%(tasks)d active task",
 
583
                                   "%(tasks)d active tasks",
587
584
                                   count) % {'tasks': count}
588
585
        self.window.set_title("%s - "%parenthesis + info.NAME)
589
586
 
610
607
### SIGNAL CALLBACKS ##########################################################
611
608
# Typically, reaction to user input & interactions with the GUI
612
609
#
613
 
 
614
610
    def on_sort_column_changed(self, model):
615
611
        sort_column, sort_order = model.get_sort_column_id()
616
612
 
688
684
            self.vtree_panes['closed'] = \
689
685
                         self.tv_factory.closed_tasks_treeview(ctree)
690
686
                    # Closed tasks TreeView
691
 
            self.vtree_panes['closed'].connect('row-activated', \
 
687
            self.vtree_panes['closed'].connect('row-activated',
692
688
                self.on_edit_done_task)
693
 
            self.vtree_panes['closed'].connect('button-press-event', \
 
689
            self.vtree_panes['closed'].connect('button-press-event',
694
690
                self.on_closed_task_treeview_button_press_event)
695
 
            self.vtree_panes['closed'].connect('key-press-event', \
 
691
            self.vtree_panes['closed'].connect('key-press-event',
696
692
                self.on_closed_task_treeview_key_press_event)
697
693
 
698
694
            self.closed_selection = self.vtree_panes['closed'].get_selection()
752
748
        colt = self.config.get("collapsed_tasks")
753
749
        if tid not in colt:
754
750
            colt.append(str(tid))
755
 
    
 
751
 
756
752
    def on_tag_expanded(self, sender, tag):
757
753
        colt = self.config.get("expanded_tags")
758
754
        if tag not in colt:
980
976
    def on_delete_tasks(self, widget=None, tid=None):
981
977
        #If we don't have a parameter, then take the selection in the treeview
982
978
        if not tid:
983
 
            #tid_to_delete is a [project,task] tuple
 
979
            #tid_to_delete is a [project, task] tuple
984
980
            tids_todelete = self.get_selected_tasks()
985
981
            if not tids_todelete:
986
982
                return
1110
1106
                task.set_status(Task.STA_DISMISSED)
1111
1107
                self.close_all_task_editors(uid)
1112
1108
 
1113
 
    def apply_filter_on_panes(self, filter_name,refresh=True):
 
1109
    def apply_filter_on_panes(self, filter_name, refresh=True):
1114
1110
        """ Apply filters for every pane: active tasks, closed tasks """
1115
1111
        for pane in self.vtree_panes:
1116
1112
            vtree = self.req.get_tasks_tree(name=pane, refresh=False)
1117
1113
            vtree.apply_filter(filter_name, refresh=refresh)
1118
 
            
1119
 
    def unapply_filter_on_panes(self, filter_name,refresh=True):
 
1114
 
 
1115
    def unapply_filter_on_panes(self, filter_name, refresh=True):
1120
1116
        """ Apply filters for every pane: active tasks, closed tasks """
1121
1117
        for pane in self.vtree_panes:
1122
1118
            vtree = self.req.get_tasks_tree(name=pane, refresh=False)
1130
1126
 
1131
1127
        #When you click on a tag, you want to unselect the tasks
1132
1128
        new_taglist = self.get_selected_tags()
1133
 
        
 
1129
 
1134
1130
        for tagname in self.applied_tags:
1135
1131
            if tagname not in new_taglist:
1136
 
                self.unapply_filter_on_panes(tagname,refresh=False)
1137
 
        
 
1132
                self.unapply_filter_on_panes(tagname, refresh=False)
 
1133
 
1138
1134
        for tagname in new_taglist:
1139
1135
            if tagname not in self.applied_tags:
1140
1136
                self.apply_filter_on_panes(tagname)
1143
1139
                tag = self.req.get_tag(tagname)
1144
1140
                if tag.is_search_tag():
1145
1141
                    self.quickadd_entry.set_text(tag.get_attribute("query"))
1146
 
        
 
1142
 
1147
1143
        self.applied_tags = new_taglist
1148
1144
 
1149
1145
    def on_taskdone_cursor_changed(self, selection=None):
1434
1430
        infobar = self._new_infobar(backend_id)
1435
1431
        infobar.set_error_code(error_code)
1436
1432
 
1437
 
    def on_backend_needing_interaction(self, sender, backend_id, description, \
 
1433
    def on_backend_needing_interaction(self, sender, backend_id, description,
1438
1434
                                       interaction_type, callback):
1439
1435
        '''
1440
1436
        Signal callback.
1481
1477
        if not backend or (backend and backend.is_enabled()):
1482
1478
            #remove old infobar related to backend_id, if any
1483
1479
            if self.vbox_toolbars:
1484
 
                self.vbox_toolbars.foreach(self.__remove_backend_infobar, \
 
1480
                self.vbox_toolbars.foreach(self.__remove_backend_infobar,
1485
1481
                                       backend_id)
1486
1482
 
1487
1483
    def _new_infobar(self, backend_id):