Subversion Repositories basico

Rev

Rev 4 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4 Rev 74
Line 10... Line 10...
10
from gi.repository import Gtk
10
from gi.repository import Gtk
11
from gi.repository.GdkPixbuf import Pixbuf
11
from gi.repository.GdkPixbuf import Pixbuf
12
from gi.repository import Pango
12
from gi.repository import Pango
13
from datetime import datetime
13
from datetime import datetime
14
from dateutil import parser as dateparser
14
from dateutil import parser as dateparser
15
-
 
-
 
15
#~ from bs4 import BeautifulSoup as BSHTML
16
from .log import get_logger
16
from .log import get_logger
17
17
18
#~ Enum(value='Column', names=<...>, *, module='...', qualname='...', type=<mixed-in class>, start=1)
18
#~ Enum(value='Column', names=<...>, *, module='...', qualname='...', type=<mixed-in class>, start=1)
19
#~ Column = Enum('Column', 'rowtype checkbox icon id title component category type priority language released', start=0)
19
#~ Column = Enum('Column', 'rowtype checkbox icon id title component category type priority language released', start=0)
20
20
21
class Column(IntEnum):
21
class Column(IntEnum):
22
    rowtype = 0
22
    rowtype = 0
23
    checkbox = 1
23
    checkbox = 1
24
    icon = 2
24
    icon = 2
25
    id = 3
-
 
26
    title = 4
-
 
27
    component = 5
-
 
28
    category = 6
-
 
29
    type = 7
-
 
-
 
25
    component = 3
-
 
26
    category = 4
-
 
27
    type = 5
-
 
28
    id = 6
-
 
29
    title = 7
30
    priority = 8
30
    priority = 8
31
    language = 9
31
    language = 9
32
    released = 10
32
    released = 10
33
33
34
34
Line 40... Line 40...
40
        self.log = get_logger(LOG_NAME, LOG_FILE)
40
        self.log = get_logger(LOG_NAME, LOG_FILE)
41
        self.get_services()
41
        self.get_services()
42
        self.toggled = 0
42
        self.toggled = 0
43
        self.selected = set()
43
        self.selected = set()
44
        self.count = 0
44
        self.count = 0
45
-
 
46
        try:
-
 
47
            self.view = self.settings.get_config_value('View')
-
 
48
        except:
-
 
49
            self.set_view('components')
-
 
50
45
51
46
52
        # Setup treeview and model
47
        # Setup treeview and model
53
        Gtk.TreeView.__init__(self)
48
        Gtk.TreeView.__init__(self)
54
        self.model = Gtk.TreeStore(
49
        self.model = Gtk.TreeStore(
55
            str,            # RowType
-
 
-
 
50
            str,            # RowType@RowId
56
            bool,           # CheckBox
51
            bool,           # CheckBox
57
            Pixbuf,         # Icon
52
            Pixbuf,         # Icon
58
            str,            # Component key
53
            str,            # Component key
59
            str,            # Category
54
            str,            # Category
60
            str,            # Type
55
            str,            # Type
Line 77... Line 72...
77
        self.append_column(column)
72
        self.append_column(column)
78
73
79
        # Checkbox
74
        # Checkbox
80
        renderer = Gtk.CellRendererToggle()
75
        renderer = Gtk.CellRendererToggle()
81
        renderer.connect("toggled", self.on_cell_toggled)
76
        renderer.connect("toggled", self.on_cell_toggled)
82
        column = Gtk.TreeViewColumn('X', renderer, active=1)
-
 
83
        column.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
-
 
84
        column.set_visible(True)
-
 
85
        column.set_expand(False)
-
 
86
        column.set_clickable(False)
-
 
87
        column.set_sort_indicator(False)
-
 
88
        self.append_column(column)
-
 
89
        column.set_cell_data_func(renderer, self.cell_data_func)
-
 
-
 
77
        self.column_checkbox = Gtk.TreeViewColumn('', renderer, active=1)
-
 
78
        self.column_checkbox.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
-
 
79
        self.column_checkbox.set_visible(True)
-
 
80
        self.column_checkbox.set_expand(False)
-
 
81
        self.column_checkbox.set_clickable(False)
-
 
82
        self.column_checkbox.set_sort_indicator(False)
-
 
83
        self.append_column(self.column_checkbox)
-
 
84
        self.column_checkbox.set_cell_data_func(renderer, self.cell_data_func)
90
85
91
        # Icon
86
        # Icon
92
        renderer = Gtk.CellRendererPixbuf()
87
        renderer = Gtk.CellRendererPixbuf()
93
        renderer.set_alignment(0.0, 0.5)
88
        renderer.set_alignment(0.0, 0.5)
94
        self.column_icon = Gtk.TreeViewColumn('', renderer, pixbuf=2)
89
        self.column_icon = Gtk.TreeViewColumn('', renderer, pixbuf=2)
Line 108... Line 103...
108
        self.column_component.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
103
        self.column_component.set_sizing(Gtk.TreeViewColumnSizing.AUTOSIZE)
109
        self.column_component.set_clickable(True)
104
        self.column_component.set_clickable(True)
110
        self.column_component.set_sort_indicator(True)
105
        self.column_component.set_sort_indicator(True)
111
        self.column_component.set_sort_column_id(3)
106
        self.column_component.set_sort_column_id(3)
112
        self.column_component.set_sort_order(Gtk.SortType.ASCENDING)
107
        self.column_component.set_sort_order(Gtk.SortType.ASCENDING)
-
 
108
        self.column_component.set_expand(True)
113
        self.append_column(self.column_component)
109
        self.append_column(self.column_component)
114
        expander_column = self.column_component
110
        expander_column = self.column_component
115
111
116
112
117
        # Category
113
        # Category
Line 138... Line 134...
138
        column.set_sort_order(Gtk.SortType.ASCENDING)
134
        column.set_sort_order(Gtk.SortType.ASCENDING)
139
        self.append_column(column)
135
        self.append_column(column)
140
136
141
        # SAP Note Id
137
        # SAP Note Id
142
        renderer = Gtk.CellRendererText()
138
        renderer = Gtk.CellRendererText()
-
 
139
        renderer.set_alignment(1.0, 0.5)
143
        self.column_sid = Gtk.TreeViewColumn('SAP Note', renderer, markup=6)
140
        self.column_sid = Gtk.TreeViewColumn('SAP Note', renderer, markup=6)
144
        self.column_sid.set_visible(False)
141
        self.column_sid.set_visible(False)
145
        self.column_sid.set_expand(False)
142
        self.column_sid.set_expand(False)
146
        self.column_sid.set_clickable(True)
143
        self.column_sid.set_clickable(True)
147
        self.column_sid.set_sort_indicator(True)
144
        self.column_sid.set_sort_indicator(True)
Line 196... Line 193...
196
        self.column_rel.set_sort_column_id(10)
193
        self.column_rel.set_sort_column_id(10)
197
        self.column_rel.set_sort_order(Gtk.SortType.ASCENDING)
194
        self.column_rel.set_sort_order(Gtk.SortType.ASCENDING)
198
        self.append_column(self.column_rel)
195
        self.append_column(self.column_rel)
199
196
200
        # TreeView common
197
        # TreeView common
201
        self.set_level_indentation(10)
-
 
-
 
198
        #~ self.set_level_indentation(6)
202
        self.set_can_focus(True)
199
        self.set_can_focus(True)
203
        self.set_headers_visible(False)
200
        self.set_headers_visible(False)
204
        self.set_enable_search(True)
201
        self.set_enable_search(True)
205
        #~ self.set_rules_hint(True)
202
        #~ self.set_rules_hint(True)
206
        #~ self.set_expander_column(expander_column)
203
        #~ self.set_expander_column(expander_column)
207
        self.set_hover_selection(True)
-
 
-
 
204
        self.set_hover_selection(False)
208
        self.set_grid_lines(Gtk.TreeViewGridLines.NONE)
205
        self.set_grid_lines(Gtk.TreeViewGridLines.NONE)
209
        self.set_search_entry(self.gui.get_widget('stySearchInfo'))
206
        self.set_search_entry(self.gui.get_widget('stySearchInfo'))
210
        self.set_search_column(3)
207
        self.set_search_column(3)
211
        #~ self.set_row_separator_func(self.row_separator_func)
208
        #~ self.set_row_separator_func(self.row_separator_func)
212
209
213
        # Selection
210
        # Selection
214
        self.selection = self.get_selection()
211
        self.selection = self.get_selection()
215
        self.selection.set_select_function(self.select_function)
212
        self.selection.set_select_function(self.select_function)
216
        self.selection.set_mode(Gtk.SelectionMode.BROWSE)
-
 
-
 
213
        #~ self.selection.set_mode(Gtk.SelectionMode.BROWSE)
-
 
214
        self.selection.set_mode(Gtk.SelectionMode.SINGLE)
217
215
218
        # Go live
216
        # Go live
219
        self.connect('button_press_event', self.cb_button_press)
217
        self.connect('button_press_event', self.cb_button_press)
220
        self.connect('row-activated', self.double_click)
218
        self.connect('row-activated', self.double_click)
221
        self.connect('cursor-changed', self.row_changed)
219
        self.connect('cursor-changed', self.row_changed)
222
        self.show_all()
220
        self.show_all()
223
221
224
222
225
    def cell_data_func(self, column, cell, store, iter, data=None):
223
    def cell_data_func(self, column, cell, store, iter, data=None):
226
        rowtype = store[iter][0]
-
 
227
        if rowtype != 'sapnote':
-
 
-
 
224
        """Do not show checkbox when row type is distinct of sapnote"""
-
 
225
        row = store[iter][0]
-
 
226
        row_type, key = row.split('@')
-
 
227
-
 
228
        if row_type != 'sapnote':
228
            cell.set_visible(False)
229
            cell.set_visible(False)
229
        else:
230
        else:
230
            cell.set_visible(True)
231
            cell.set_visible(True)
231
232
232
233
Line 250... Line 251...
250
            #~ else:
251
            #~ else:
251
                #~ return False
252
                #~ return False
252
            #~ self.log.debug("Row type: %s" % rowtype)
253
            #~ self.log.debug("Row type: %s" % rowtype)
253
            #~ return False
254
            #~ return False
254
        #~ return False
255
        #~ return False
255
-
 
256
256
257
257
258
    def get_services(self):
258
    def get_services(self):
259
        self.gui = self.app.get_service("GUI")
259
        self.gui = self.app.get_service("GUI")
260
        self.cb = self.app.get_service('Callbacks')
260
        self.cb = self.app.get_service('Callbacks')
261
        self.menu = self.app.get_service("Menus")
261
        self.menu = self.app.get_service("Menus")
262
        self.sap = self.app.get_service('SAP')
262
        self.sap = self.app.get_service('SAP')
263
        self.im = self.app.get_service('IM')
263
        self.im = self.app.get_service('IM')
264
        self.settings = self.app.get_service('Settings')
264
        self.settings = self.app.get_service('Settings')
265
        self.plugins = self.app.get_service('Plugins')
265
        self.plugins = self.app.get_service('Plugins')
-
 
266
        self.db = self.app.get_service('DB')
266
267
267
268
268
    def row_changed(self, treeview):
269
    def row_changed(self, treeview):
269
        #~ button = self.gui.get_widget('mnuBtnActions')
270
        #~ button = self.gui.get_widget('mnuBtnActions')
270
        selected = set()
271
        selected = set()
271
        selection = treeview.get_selection()
272
        selection = treeview.get_selection()
272
        model, treeiters = selection.get_selected_rows()
273
        model, treeiters = selection.get_selected_rows()
-
 
274
        try:
-
 
275
            row = model[treeiters[0]][0]
-
 
276
            row_type, sid = row.split('@')
-
 
277
            self.log.debug("Row Type: %s - Id: %s" % (row_type, sid))
-
 
278
        except Exception as error:
-
 
279
            return
-
 
280
            #~ self.log.error(error)
-
 
281
            #~ raise
-
 
282
            #~ return
-
 
283
-
 
284
        if row_type == 'sapnote':
-
 
285
            trvprops = self.gui.get_widget('trvprops')
-
 
286
            modelprops = trvprops.get_model()
-
 
287
            #~ tid = model[treeiters[0]][Column.id.value]
-
 
288
            #~ tid = BSHTML(tid, "lxml").text # clean Id by removing all tags.
-
 
289
            #~ sid = "0"*(10 - len(tid)) + tid
-
 
290
            sapnote = self.db.get_sapnote_metadata(sid)
-
 
291
-
 
292
            modelprops.clear()
-
 
293
            modelprops.append(None, ["<big><b>SAP Note Id</b></big>", "<big>%s</big>" % sid])
-
 
294
            modelprops.append(None, ["<big><b>Title</b></big>", "<big>%s</big>" %  sapnote['title']])
-
 
295
            modelprops.append(None, ["<big><b>Version</b></big>", "<big>%s</big>" %  sapnote['version']])
-
 
296
            modelprops.append(None, ["<big><b>Component Key</b></big>", "<big>%s</big>" %  sapnote['componentkey']])
-
 
297
            modelprops.append(None, ["<big><b>Component Text</b></big>", "<big>%s</big>" %  sapnote['componenttxt']])
-
 
298
            modelprops.append(None, ["<big><b>Category</b></big>", "<big>%s</big>" %  sapnote['category']])
-
 
299
            modelprops.append(None, ["<big><b>Type</b></big>", "<big>%s</big>" %  sapnote['type']])
-
 
300
            modelprops.append(None, ["<big><b>Priority</b></big>", "<big>%s</big>" %  sapnote['priority']])
-
 
301
            modelprops.append(None, ["<big><b>Language</b></big>", "<big>%s</big>" %  sapnote['language']])
-
 
302
            modelprops.append(None, ["<big><b>Released</b></big>", "<big>%s</big>" %  sapnote['releaseon']])
-
 
303
            modelprops.append(None, ["<big><b>Downloaded</b></big>", "<big>%s</big>" %  str(sapnote['feedupdate'])])
-
 
304
            modelprops.append(None, ["<big><b>Bookmarked</b></big>", "<big>%s</big>" %  str(sapnote['bookmark'])])
-
 
305
            try:
-
 
306
                # Not all sapnotes are linked to a task. Skip this field
-
 
307
                tasks = self.app.get_service('Tasks')
-
 
308
                ltasks = sapnote['tasks']
-
 
309
                tasks.select(ltasks)
-
 
310
                modelprops.append(None, ["<b>Tasks</b>", ', '.join(ltasks)])
-
 
311
                self.log.debug("SAP Note %s activated" % sid)
-
 
312
            except Exception as error:
-
 
313
                pass
-
 
314
        else:
-
 
315
            tasks = self.app.get_service('Tasks')
-
 
316
            tasks.clear()
-
 
317
            tasks.show_window()
273
318
274
319
275
    def double_click(self, treeview, row, col):
320
    def double_click(self, treeview, row, col):
276
        model = treeview.get_model()
321
        model = treeview.get_model()
277
        noteid = model[row][6]
-
 
278
        self.set_select_notes([noteid])
-
 
-
 
322
        row = model[row][0]
-
 
323
        row_type, sid = row.split('@')
-
 
324
        self.set_select_notes([sid])
279
        #~ self.log.debug("Launching SAP Note %s in browser" % noteid)
325
        #~ self.log.debug("Launching SAP Note %s in browser" % noteid)
280
        self.cb.actions_browse()
326
        self.cb.actions_browse()
281
327
282
328
283
    def cb_button_press(self, treeview, event, data=None):
329
    def cb_button_press(self, treeview, event, data=None):
Line 291... Line 337...
291
                self.grab_focus()
337
                self.grab_focus()
292
                self.set_cursor(path,col,0)
338
                self.set_cursor(path,col,0)
293
339
294
                model = treeview.get_model()
340
                model = treeview.get_model()
295
                treeiter = model.get_iter(path)
341
                treeiter = model.get_iter(path)
-
 
342
                #~ for n in range(9):
-
 
343
                    #~ self.log.debug("%d -> %s" % (n, model.get_value(treeiter, n)))
296
                rowtype = model.get_value(treeiter, 0)
344
                rowtype = model.get_value(treeiter, 0)
297
-
 
-
 
345
                self.log.debug("Row type: %s" % rowtype)
298
                if rowtype == 'task':
346
                if rowtype == 'task':
299
                    task = model.get_value(treeiter, 6)
347
                    task = model.get_value(treeiter, 6)
300
                    self.popup_menu = self.menu.create_popup_menu_by_task(task)
348
                    self.popup_menu = self.menu.create_popup_menu_by_task(task)
301
                elif rowtype == 'component':
349
                elif rowtype == 'component':
302
                    component = model.get_value(treeiter, 6)
-
 
-
 
350
                    comptitle = model.get_value(treeiter, 3)
-
 
351
                    self.log.debug(comptitle)
-
 
352
                    token = "</b></big>"
-
 
353
                    pos = comptitle.find(token)
-
 
354
                    component = comptitle[8:pos]
303
                    self.popup_menu = self.menu.create_popup_menu_by_component(component)
355
                    self.popup_menu = self.menu.create_popup_menu_by_component(component)
304
                elif rowtype == 'sapnote':
356
                elif rowtype == 'sapnote':
305
                    sid = model.get_value(treeiter, 6)
357
                    sid = model.get_value(treeiter, 6)
306
                    self.popup_menu = self.menu.create_popup_menu_by_sapnote(sid)
358
                    self.popup_menu = self.menu.create_popup_menu_by_sapnote(sid)
307
                else:
359
                else:
Line 309... Line 361...
309
361
310
362
311
                #~ noteid = model.get_value(treeiter, 6)
363
                #~ noteid = model.get_value(treeiter, 6)
312
                #~ sapnote = self.sap.get_node(noteid)
364
                #~ sapnote = self.sap.get_node(noteid)
313
                #~ self.log.debug("Selected SAP Note: %s" % sapnote)
365
                #~ self.log.debug("Selected SAP Note: %s" % sapnote)
314
-
 
315
                self.popup_menu.show_all()
-
 
316
                self.popup_menu.popup(None, None, None, None, event.button, event.time)
-
 
317
                return True # event has been handled
-
 
-
 
366
                if self.popup_menu is not None:
-
 
367
                    self.popup_menu.show_all()
-
 
368
                    self.popup_menu.popup(None, None, None, None, event.button, event.time)
-
 
369
                    return True # event has been handled
-
 
370
                else:
-
 
371
                    return False
318
372
319
373
320
    def populate(self, sapnotes):
374
    def populate(self, sapnotes):
321
        #~ self.column_icon.set_visible(True)
375
        #~ self.column_icon.set_visible(True)
322
        #~ self.column_component.set_visible(True)
376
        #~ self.column_component.set_visible(True)
323
        #~ self.column_title.set_visible(False)
377
        #~ self.column_title.set_visible(False)
324
        #~ self.column_cat.set_visible(False)
378
        #~ self.column_cat.set_visible(False)
325
379
326
        self.log.debug("View '%s' populated with %d SAP Notes" % (self.view, len(sapnotes)))
-
 
327
        self.set_headers_visible(False)
380
        self.set_headers_visible(False)
328
        self.column_sid.set_visible(False)
381
        self.column_sid.set_visible(False)
329
        self.column_rel.set_visible(False)
382
        self.column_rel.set_visible(False)
330
        self.column_priority.set_visible(False)
383
        self.column_priority.set_visible(False)
331
        self.column_icon.set_visible(True)
384
        self.column_icon.set_visible(True)
-
 
385
        self.column_checkbox.set_visible(True)
332
386
333
        if self.view == 'components':
387
        if self.view == 'components':
334
            self.populate_by_components(sapnotes)
388
            self.populate_by_components(sapnotes)
-
 
389
        elif self.view == 'description':
-
 
390
            self.populate_by_component_descriptions(sapnotes)
335
        elif self.view == 'projects':
391
        elif self.view == 'projects':
336
            self.populate_by_projects(sapnotes)
392
            self.populate_by_projects(sapnotes)
337
        elif self.view == 'tasks':
393
        elif self.view == 'tasks':
338
            self.populate_by_tasks(sapnotes)
394
            self.populate_by_tasks(sapnotes)
339
        elif self.view == 'bookmarks':
395
        elif self.view == 'bookmarks':
340
            self.populate_by_bookmarks(sapnotes)
396
            self.populate_by_bookmarks(sapnotes)
-
 
397
        elif self.view == 'tags':
-
 
398
            self.populate_by_tags(sapnotes)
-
 
399
        elif self.view == 'category':
-
 
400
            self.populate_by_category(sapnotes)
-
 
401
        elif self.view == 'chronologic':
-
 
402
            self.populate_by_chronologic(sapnotes)
-
 
403
        elif self.view == 'priority':
-
 
404
            self.populate_by_priority(sapnotes)
-
 
405
        elif self.view == 'type':
-
 
406
            self.populate_by_type(sapnotes)
341
        else:
407
        else:
342
            self.populate_by_components(sapnotes)
408
            self.populate_by_components(sapnotes)
343
-
 
344
        # Save last populated list of sap notes
409
        # Save last populated list of sap notes
345
        total = self.sap.get_total()
-
 
-
 
410
        total = self.db.get_total()
346
        notesid = set()
411
        notesid = set()
347
        for sapnote in sapnotes:
412
        for sapnote in sapnotes:
348
            notesid.add(sapnote)
413
            notesid.add(sapnote)
349
414
350
        if len(notesid) < total:
415
        if len(notesid) < total:
351
            self.settings.set_config_value('Notes', ','.join(notesid))
416
            self.settings.set_config_value('Notes', ','.join(notesid))
352
417
-
 
418
        self.log.debug("View '%s' populated with %d SAP Notes" % (self.view, len(sapnotes)))
353
419
354
420
355
    def populate_by_bookmarks(self, sapnotes):
421
    def populate_by_bookmarks(self, sapnotes):
356
        #~ self.log.debug('Populating bookmarks')
422
        #~ self.log.debug('Populating bookmarks')
357
        self.model.clear()
423
        self.model.clear()
Line 359... Line 425...
359
        self.column_sid.set_visible(True)
425
        self.column_sid.set_visible(True)
360
        self.column_icon.set_visible(False)
426
        self.column_icon.set_visible(False)
361
        self.column_component.set_visible(True)
427
        self.column_component.set_visible(True)
362
        self.column_component.set_expand(False)
428
        self.column_component.set_expand(False)
363
        self.column_title.set_visible(True)
429
        self.column_title.set_visible(True)
-
 
430
        self.column_title.set_expand(True)
364
        self.column_priority.set_expand(False)
431
        self.column_priority.set_expand(False)
365
        self.column_cat.set_visible(False)
432
        self.column_cat.set_visible(False)
366
        #~ self.column_component.set_visible(False)
-
 
367
        #~ self.column_component.set_expand(False)
-
 
-
 
433
        self.column_sid.set_expand(False)
368
        self.column_component.set_title('Component')
434
        self.column_component.set_title('Component')
369
        icon_bookmark = self.im.get_icon('bookmark')
435
        icon_bookmark = self.im.get_icon('bookmark')
370
436
371
        for sid in sapnotes:
437
        for sid in sapnotes:
372
            try:
438
            try:
373
                bookmark = sapnotes[sid]['bookmark'] # True or False
439
                bookmark = sapnotes[sid]['bookmark'] # True or False
374
            except:
440
            except:
375
                bookmark = False
441
                bookmark = False
376
442
377
            if bookmark:
443
            if bookmark:
378
                sapnote = self.get_node_sapnote(sapnotes[sid], sid)
-
 
-
 
444
                sapnote = self.get_node_sapnote_bookmark(sapnotes[sid], sid)
379
                self.model.append(None, sapnote)
445
                self.model.append(None, sapnote)
380
446
381
447
382
    def get_node_project(self, project, icon):
448
    def get_node_project(self, project, icon):
383
        if project == '':
449
        if project == '':
384
            title = "<span size='18000'><b>No project assigned</b></span>"
450
            title = "<span size='18000'><b>No project assigned</b></span>"
385
        else:
451
        else:
386
            title = "<span size='18000'><b>%s</b></span>" % project
452
            title = "<span size='18000'><b>%s</b></span>" % project
387
453
388
        node = []
454
        node = []
389
        node.append('project')
-
 
-
 
455
        node.append('project@%s' % project)
390
        node.append(0)
456
        node.append(0)
391
        node.append(icon)
457
        node.append(icon)
392
        node.append(title) # Component
458
        node.append(title) # Component
393
        node.append("") # Category
459
        node.append("") # Category
394
        node.append("") # Type
460
        node.append("") # Type
Line 400... Line 466...
400
        return node
466
        return node
401
467
402
468
403
    def get_node_task(self, task, icon):
469
    def get_node_task(self, task, icon):
404
        if task == '':
470
        if task == '':
405
            title = "<span size='18000'><b>No task assigned</b></span>"
-
 
-
 
471
            title = "<big><b>No task assigned</b></big>"
406
        else:
472
        else:
407
            title = "<span size='18000'><b>%s</b></span>" % task
-
 
-
 
473
            title = "<big><b>%s</b></big>" % task
408
474
409
        node = []
475
        node = []
410
        node.append('task')
-
 
-
 
476
        node.append('task@%s' % task)
411
        node.append(0)
477
        node.append(0)
412
        node.append(icon)
478
        node.append(icon)
413
        node.append(title) # Component
479
        node.append(title) # Component
414
        node.append("") # Category
480
        node.append("") # Category
415
        node.append("") # Type
481
        node.append("") # Type
416
        node.append(task) # Id
-
 
-
 
482
        node.append("") # Id
417
        node.append("") # Title
483
        node.append("") # Title
418
        node.append("") # Priority
484
        node.append("") # Priority
419
        node.append("") # Lang
485
        node.append("") # Lang
420
        node.append("") # Release on
486
        node.append("") # Release on
421
        return node
487
        return node
Line 424... Line 490...
424
    def populate_by_projects(self, sapnotes):
490
    def populate_by_projects(self, sapnotes):
425
        self.model.clear()
491
        self.model.clear()
426
        treepids = {}
492
        treepids = {}
427
        icon_noproject = self.im.get_icon('noproject')
493
        icon_noproject = self.im.get_icon('noproject')
428
        icon_project = self.im.get_icon('project')
494
        icon_project = self.im.get_icon('project')
429
        icon_sapnote = self.im.get_icon('sapnote')
-
 
-
 
495
        icon_sapnote = self.im.get_icon('fingerprint')
430
        icon_bookmark = self.im.get_icon('bookmark')
496
        icon_bookmark = self.im.get_icon('bookmark')
431
        self.column_component.set_title('Projects')
497
        self.column_component.set_title('Projects')
432
498
433
        if len(sapnotes) == 0:
499
        if len(sapnotes) == 0:
434
            return
500
            return
Line 464... Line 530...
464
                    self.model.append(pid, sapnote)
530
                    self.model.append(pid, sapnote)
465
531
466
        if notlinked == 0:
532
        if notlinked == 0:
467
            self.model.remove(treepids['None'])
533
            self.model.remove(treepids['None'])
468
534
-
 
535
-
 
536
    def populate_by_tags(self, sapnotes):
-
 
537
        pass
-
 
538
        #~ for sid in sapnotes:
-
 
539
            #~ tags = sapnotes[sid]['']
469
540
470
    def populate_by_tasks(self, sapnotes):
541
    def populate_by_tasks(self, sapnotes):
471
        self.model.clear()
542
        self.model.clear()
472
        treepids = {}
543
        treepids = {}
473
        icon_notask = self.im.get_icon('notask')
-
 
474
        icon_task = self.im.get_icon('task')
-
 
475
        icon_sapnote = self.im.get_icon('sapnote')
-
 
476
        icon_bookmark = self.im.get_icon('bookmark')
-
 
-
 
544
        icon_notask = self.im.get_icon('notask', 32, 32)
-
 
545
        icon_task = self.im.get_icon('task', 32, 32)
-
 
546
        icon_sapnote = self.im.get_icon('fingerprint', 32, 32)
-
 
547
        icon_bookmark = self.im.get_icon('bookmark', 32, 32)
477
        self.column_component.set_title('Tasks')
548
        self.column_component.set_title('Tasks')
-
 
549
        #~ self.column_icon.set_visible(False)
-
 
550
        #~ self.column_sid.set_visible(True)
-
 
551
        self.set_headers_visible(True)
-
 
552
        self.column_sid.set_visible(True)
-
 
553
        self.column_icon.set_visible(True)
-
 
554
        self.column_component.set_visible(True)
-
 
555
        self.column_component.set_expand(True)
-
 
556
        self.column_title.set_visible(False)
-
 
557
        self.column_title.set_expand(True)
-
 
558
        self.column_priority.set_expand(False)
-
 
559
        self.column_cat.set_visible(False)
-
 
560
        self.column_sid.set_expand(False)
478
561
479
        if len(sapnotes) == 0:
562
        if len(sapnotes) == 0:
480
            return
563
            return
481
564
482
        #~ "No task assigned" node creation
565
        #~ "No task assigned" node creation
Line 545... Line 628...
545
                    node = self.get_node_category(sapnotes[sid])
628
                    node = self.get_node_category(sapnotes[sid])
546
                    cid = self.model.append(pid, node)
629
                    cid = self.model.append(pid, node)
547
                    treepids[catkey] = cid
630
                    treepids[catkey] = cid
548
631
549
                #~ SAP Note not linked to any task
632
                #~ SAP Note not linked to any task
550
                sapnote = self.get_node_sapnote(sapnotes[sid], sid)
-
 
-
 
633
                sapnote = self.get_node_sapnote_task(sapnotes[sid], sid)
551
                self.model.append(cid, sapnote)
634
                self.model.append(cid, sapnote)
552
                notask += 1
635
                notask += 1
553
            else:
636
            else:
554
                #~ SAP Note linked to tasks
637
                #~ SAP Note linked to tasks
555
                for task in sapnotes[sid]['tasks']:
638
                for task in sapnotes[sid]['tasks']:
556
                    # Components in task node
639
                    # Components in task node
557
                    cmpkey = task + '-' + compkey
640
                    cmpkey = task + '-' + compkey
558
                    comptxt = dcomp[compkey]
641
                    comptxt = dcomp[compkey]
559
                    try:
-
 
560
                        pid = treepids[cmpkey]
-
 
561
                    except:
-
 
562
                        node = self.get_node_component(compkey, comptxt)
-
 
563
                        pid = self.model.append(treepids[task], node)
-
 
564
                        treepids[cmpkey] = pid
-
 
565
-
 
566
                    catkey = task + '-' + compkey + '-' + catname
-
 
567
                    try:
-
 
568
                        cid = treepids[catkey]
-
 
569
                    except:
-
 
570
                        node = self.get_node_category(sapnotes[sid])
-
 
571
                        cid = self.model.append(pid, node)
-
 
572
                        treepids[catkey] = cid
-
 
573
-
 
574
                    pid = treepids[task]
642
                    pid = treepids[task]
575
                    sapnote = self.get_node_sapnote(sapnotes[sid], sid)
-
 
576
                    self.model.append(cid, sapnote)
-
 
-
 
643
                    sapnote = self.get_node_sapnote_task(sapnotes[sid], sid)
-
 
644
                    self.model.append(treepids[task], sapnote)
577
645
578
        #~ "No task assigned" node deletion if no tasks at all
646
        #~ "No task assigned" node deletion if no tasks at all
579
        if notask == 0:
647
        if notask == 0:
580
            self.model.remove(treepids['None'])
648
            self.model.remove(treepids['None'])
-
 
649
-
 
650
-
 
651
    def populate_by_priority(self, sapnotes):
-
 
652
        self.model.clear()
-
 
653
        treepids = {}
-
 
654
-
 
655
        self.set_headers_visible(True)
-
 
656
        self.column_sid.set_visible(True)
-
 
657
        self.column_icon.set_visible(True)
-
 
658
        self.column_component.set_visible(True)
-
 
659
        self.column_component.set_expand(False)
-
 
660
        self.column_title.set_visible(True)
-
 
661
        self.column_title.set_expand(True)
-
 
662
        self.column_priority.set_expand(False)
-
 
663
        self.column_cat.set_visible(False)
-
 
664
        self.column_sid.set_expand(False)
-
 
665
-
 
666
        if len(sapnotes) == 0:
-
 
667
            return
-
 
668
-
 
669
        scomp = set()
-
 
670
        dcomp = {}
-
 
671
        pset = set()
-
 
672
-
 
673
        for sid in sapnotes:
-
 
674
            try:
-
 
675
                priority = sapnotes[sid]['priority']
-
 
676
                pset.add(priority)
-
 
677
            except: pass
-
 
678
-
 
679
        plist = []
-
 
680
        plist.extend(pset)
-
 
681
        plist.sort()
-
 
682
-
 
683
        for priority in plist:
-
 
684
            node = self.get_node_priority(priority)
-
 
685
            pid = self.model.append(None, node)
-
 
686
            treepids[priority] = pid
-
 
687
-
 
688
        for sid in sapnotes:
-
 
689
            priority = sapnotes[sid]['priority']
-
 
690
            pid = treepids[priority]
-
 
691
            sapnote = self.get_node_sapnote(sapnotes[sid], sid)
-
 
692
            self.model.append(pid, sapnote)
-
 
693
-
 
694
-
 
695
    def populate_by_type(self, sapnotes):
-
 
696
        self.model.clear()
-
 
697
        treepids = {}
-
 
698
-
 
699
        self.set_headers_visible(True)
-
 
700
        self.column_sid.set_visible(True)
-
 
701
        self.column_icon.set_visible(True)
-
 
702
        self.column_component.set_visible(True)
-
 
703
        self.column_component.set_expand(False)
-
 
704
        self.column_title.set_visible(True)
-
 
705
        self.column_title.set_expand(True)
-
 
706
        self.column_priority.set_expand(False)
-
 
707
        self.column_cat.set_visible(False)
-
 
708
        self.column_sid.set_expand(False)
-
 
709
-
 
710
        if len(sapnotes) == 0:
-
 
711
            return
-
 
712
-
 
713
        scomp = set()
-
 
714
        dcomp = {}
-
 
715
        pset = set()
-
 
716
-
 
717
        for sid in sapnotes:
-
 
718
            try:
-
 
719
                sntype = sapnotes[sid]['type']
-
 
720
                pset.add(sntype)
-
 
721
            except: pass
-
 
722
-
 
723
        plist = []
-
 
724
        plist.extend(pset)
-
 
725
        plist.sort()
-
 
726
-
 
727
        for sntype in plist:
-
 
728
            node = self.get_node_type(sntype)
-
 
729
            pid = self.model.append(None, node)
-
 
730
            treepids[sntype] = pid
-
 
731
-
 
732
        for sid in sapnotes:
-
 
733
            sntype = sapnotes[sid]['type']
-
 
734
            pid = treepids[sntype]
-
 
735
            sapnote = self.get_node_sapnote_type(sapnotes[sid], sid)
-
 
736
            self.model.append(pid, sapnote)
-
 
737
-
 
738
-
 
739
-
 
740
    def populate_by_component_descriptions(self, sapnotes):
-
 
741
        self.model.clear()
-
 
742
        treepids = {}
-
 
743
-
 
744
        self.set_headers_visible(True)
-
 
745
        self.column_sid.set_visible(True)
-
 
746
        self.column_icon.set_visible(True)
-
 
747
        self.column_component.set_visible(True)
-
 
748
        self.column_component.set_expand(True)
-
 
749
        self.column_title.set_visible(False)
-
 
750
        self.column_title.set_expand(True)
-
 
751
        self.column_priority.set_expand(False)
-
 
752
        self.column_cat.set_visible(False)
-
 
753
        self.column_sid.set_expand(False)
-
 
754
-
 
755
        if len(sapnotes) == 0:
-
 
756
            return
-
 
757
-
 
758
        scomp = set()
-
 
759
        dcomp = {}
-
 
760
        pset = set()
-
 
761
-
 
762
        for sid in sapnotes:
-
 
763
            try:
-
 
764
                comptxt = escape(sapnotes[sid]['componenttxt'])
-
 
765
                pset.add(comptxt)
-
 
766
            except: pass
-
 
767
-
 
768
        plist = []
-
 
769
        plist.extend(pset)
-
 
770
        plist.sort()
-
 
771
-
 
772
        for comptxt in plist:
-
 
773
            node = self.get_node_component_desc(comptxt)
-
 
774
            pid = self.model.append(None, node)
-
 
775
            treepids[comptxt] = pid
-
 
776
-
 
777
        for sid in sapnotes:
-
 
778
            comptxt = escape(sapnotes[sid]['componenttxt'])
-
 
779
            pid = treepids[comptxt]
-
 
780
            sapnote = self.get_node_sapnote_component_desc(sapnotes[sid], sid)
-
 
781
            self.model.append(pid, sapnote)
-
 
782
-
 
783
-
 
784
    def populate_by_category(self, sapnotes):
-
 
785
        self.model.clear()
-
 
786
        treepids = {}
-
 
787
        icon_nocat = self.im.get_icon('notask')
-
 
788
        icon_cat = self.im.get_icon('category')
-
 
789
        icon_sapnote = self.im.get_icon('fingerprint')
-
 
790
        icon_bookmark = self.im.get_icon('bookmark')
-
 
791
        self.column_component.set_title('Categories')
-
 
792
        #~ self.column_icon.set_visible(False)
-
 
793
        #~ self.column_sid.set_visible(True)
-
 
794
        self.set_headers_visible(True)
-
 
795
        self.column_sid.set_visible(True)
-
 
796
        self.column_icon.set_visible(True)
-
 
797
        self.column_component.set_visible(True)
-
 
798
        self.column_component.set_expand(True)
-
 
799
        self.column_title.set_visible(False)
-
 
800
        self.column_title.set_expand(True)
-
 
801
        self.column_priority.set_expand(False)
-
 
802
        self.column_cat.set_visible(False)
-
 
803
        self.column_sid.set_expand(False)
-
 
804
-
 
805
        if len(sapnotes) == 0:
-
 
806
            return
-
 
807
-
 
808
        scomp = set()
-
 
809
        dcomp = {}
-
 
810
        catset = set()
-
 
811
-
 
812
        for sid in sapnotes:
-
 
813
            try:
-
 
814
                cat = sapnotes[sid]['category']
-
 
815
                catset.add(cat)
-
 
816
            except: pass
-
 
817
-
 
818
        catlist = []
-
 
819
        catlist.extend(catset)
-
 
820
        catlist.sort()
-
 
821
-
 
822
        for cat in catlist:
-
 
823
            node = self.get_node_category_view(cat)
-
 
824
            pid = self.model.append(None, node)
-
 
825
            treepids[cat] = pid
-
 
826
-
 
827
        for sid in sapnotes:
-
 
828
            category = sapnotes[sid]['category']
-
 
829
            pid = treepids[category]
-
 
830
            sapnote = self.get_node_sapnote_category(sapnotes[sid], sid)
-
 
831
            self.model.append(pid, sapnote)
-
 
832
-
 
833
-
 
834
    def populate_by_chronologic(self, sapnotes):
-
 
835
        self.model.clear()
-
 
836
        treepids = {}
-
 
837
-
 
838
        self.column_component.set_title('Download date')
-
 
839
        self.set_headers_visible(True)
-
 
840
        self.column_sid.set_visible(True)
-
 
841
        self.column_icon.set_visible(True)
-
 
842
        self.column_component.set_visible(True)
-
 
843
        self.column_component.set_expand(True)
-
 
844
        self.column_title.set_visible(False)
-
 
845
        self.column_title.set_expand(True)
-
 
846
        self.column_priority.set_expand(False)
-
 
847
        self.column_cat.set_visible(False)
-
 
848
        self.column_sid.set_expand(False)
-
 
849
-
 
850
        if len(sapnotes) == 0:
-
 
851
            return
-
 
852
-
 
853
        years = set()
-
 
854
        months = set()
-
 
855
        days = set()
-
 
856
        for sid in sapnotes:
-
 
857
            try:
-
 
858
                downloaded = dateparser.parse(sapnotes[sid]['feedupdate'])
-
 
859
                year = "%d" % downloaded.year
-
 
860
                month = "%02d" % downloaded.month
-
 
861
                day = "%02d" % downloaded.day
-
 
862
                key_year    = year
-
 
863
                key_month   = year + month
-
 
864
                key_day     = year + month + day
-
 
865
                years.add(key_year)
-
 
866
                months.add(key_month)
-
 
867
                days.add(key_day)
-
 
868
            except:
-
 
869
                pass
-
 
870
        years = list(years)
-
 
871
        years.sort(reverse=True)
-
 
872
        months = list(months)
-
 
873
        months.sort(reverse=True)
-
 
874
        days = list(days)
-
 
875
        days.sort(reverse=True)
-
 
876
-
 
877
        for key_year in years:
-
 
878
            try:
-
 
879
                treepids[key_year]
-
 
880
            except:
-
 
881
                adate = key_year + '0101'
-
 
882
                downloaded = dateparser.parse(adate)
-
 
883
                node = self.get_node_date_year(downloaded, key_year)
-
 
884
                treepids[key_year] = self.model.append(None, node)
-
 
885
-
 
886
        for key_month in months:
-
 
887
            try:
-
 
888
                treepids[key_month]
-
 
889
            except:
-
 
890
                adate = key_month + '01'
-
 
891
                downloaded = dateparser.parse(adate)
-
 
892
                node = self.get_node_date_month(downloaded, key_month)
-
 
893
                key_year = key_month[0:4]
-
 
894
                treepids[key_month] = self.model.append(treepids[key_year], node)
-
 
895
-
 
896
        for key_day in days:
-
 
897
            try:
-
 
898
                treepids[key_day]
-
 
899
            except:
-
 
900
                downloaded = dateparser.parse(key_day)
-
 
901
                key_month = key_day[0:6]
-
 
902
                node = self.get_node_date_day(downloaded, key_day)
-
 
903
                treepids[key_day] = self.model.append(treepids[key_month], node)
-
 
904
-
 
905
        for sid in sapnotes:
-
 
906
            downloaded = dateparser.parse(sapnotes[sid]['feedupdate'])
-
 
907
            year = "%d" % downloaded.year
-
 
908
            month = "%02d" % downloaded.month
-
 
909
            day = "%02d" % downloaded.day
-
 
910
            key_year    = year
-
 
911
            key_month   = year + month
-
 
912
            key_day     = year + month + day
-
 
913
            node = self.get_node_sapnote_chronologic(sapnotes[sid], sid)
-
 
914
            #~ self.log.debug("KeyDay %s for SAP Note %s" % (treepids[key_day], sid))
-
 
915
            self.model.append(treepids[key_day], node)
-
 
916
-
 
917
        self.collapse_all()
-
 
918
        self.expand_all()
-
 
919
-
 
920
581
921
582
922
583
    def get_node_component(self, compkey, comptxt):
923
    def get_node_component(self, compkey, comptxt):
584
        #~ compkey = escape(sapnote['componentkey'])
924
        #~ compkey = escape(sapnote['componentkey'])
585
        #~ comptxt = escape(sapnote['componenttxt'])
925
        #~ comptxt = escape(sapnote['componenttxt'])
586
        icon = self.im.get_icon('component')
-
 
-
 
926
        icon = self.im.get_icon('component', 32, 32)
587
        node = []
927
        node = []
588
        component = "<big><b>%s</b></big> (<i>%s</i>)" % (compkey, comptxt) # component
-
 
-
 
928
        if len(comptxt) > 0:
-
 
929
            component = "<big><b>%s</b></big> (<i>%s</i>)" % (compkey, comptxt) # component
-
 
930
        else:
-
 
931
            component = "<big><b>%s</b></big>" % compkey
-
 
932
589
        #~ component = "<big><b>%s</b></big>" % (compkey)
933
        #~ component = "<big><b>%s</b></big>" % (compkey)
590
        #~ component = "<span size='18000'><b>%s</b></span> <span size='12000'>(<i>%s</i>)</span>" % (compkey, comptxt)
934
        #~ component = "<span size='18000'><b>%s</b></span> <span size='12000'>(<i>%s</i>)</span>" % (compkey, comptxt)
591
        node.append('component')
-
 
-
 
935
        node.append('component@%s' % compkey)
592
        node.append(0)
936
        node.append(0)
593
        node.append(icon)
937
        node.append(icon)
594
        node.append(component) # Component
938
        node.append(component) # Component
595
        node.append("") # Category
939
        node.append("") # Category
596
        node.append("") # Type
940
        node.append("") # Type
597
        node.append(compkey) # Id
-
 
-
 
941
        node.append("") # Id
598
        node.append("") # Title
942
        node.append("") # Title
599
        node.append("") # Priority
943
        node.append("") # Priority
600
        node.append("") # Lang
944
        node.append("") # Lang
601
        #~ node.append("") # Version
945
        #~ node.append("") # Version
602
        node.append("") # Release on
946
        node.append("") # Release on
Line 605... Line 949...
605
949
606
    def get_node_category(self, sapnote):
950
    def get_node_category(self, sapnote):
607
        compkey = escape(sapnote['componentkey'])
951
        compkey = escape(sapnote['componentkey'])
608
        catname = escape(sapnote['category'])
952
        catname = escape(sapnote['category'])
609
        catkey = compkey + '-' + catname
953
        catkey = compkey + '-' + catname
610
        icon = self.im.get_icon('category')
-
 
-
 
954
        icon = self.im.get_icon('category', 32, 32)
611
955
612
        if len(catname) == 0:
956
        if len(catname) == 0:
613
            #~ catname = "<span size='12000'><b>No category assigned</b></span>"
957
            #~ catname = "<span size='12000'><b>No category assigned</b></span>"
614
            catname = "\t<big><b>No category assigned</b></big>"
-
 
-
 
958
            catname = "\t<b>No category assigned</b>"
615
        else:
959
        else:
616
            #~ category = "<span size='15000'><b>%s</b></span>" % catname
960
            #~ category = "<span size='15000'><b>%s</b></span>" % catname
617
            category = "\t<big><b>%s</b></big>" % catname
-
 
-
 
961
            category = "\t<b>%s</b>" % catname
618
962
619
        node = []
963
        node = []
620
        node.append('category')
-
 
-
 
964
        node.append('category@%s' % catname)
621
        node.append(0)
965
        node.append(0)
622
        node.append(icon)
966
        node.append(icon)
623
        node.append(category) # Component
967
        node.append(category) # Component
624
        node.append("") # Category
968
        node.append("") # Category
625
        node.append("") # Type
969
        node.append("") # Type
Line 630... Line 974...
630
        #~ node.append("") # Version
974
        #~ node.append("") # Version
631
        node.append("") # Release on
975
        node.append("") # Release on
632
        return node
976
        return node
633
977
634
978
635
    def get_node_sapnote(self, sapnote, sid):
-
 
-
 
979
    def get_node_date_year(self, date, token_date):
-
 
980
        title = "<span size='12000'><b>%s</b></span>" % token_date
-
 
981
-
 
982
        node = []
-
 
983
        node.append('date-year@%s' % token_date)
-
 
984
        node.append(0)
-
 
985
        node.append(None)
-
 
986
        node.append(title) # Component
-
 
987
        node.append("") # Category
-
 
988
        node.append("") # Type
-
 
989
        node.append("") # Id
-
 
990
        node.append("") # Title
-
 
991
        node.append("") # Priority
-
 
992
        node.append("") # Lang
-
 
993
        #~ node.append("") # Version
-
 
994
        node.append("") # Release on
-
 
995
        return node
-
 
996
-
 
997
-
 
998
    def get_node_date_month(self, date, token_date):
-
 
999
        title = "<span size='12000'><b>%s</b></span>" % date.strftime("%B")
-
 
1000
-
 
1001
        node = []
-
 
1002
        node.append('date-month@%s' % token_date)
-
 
1003
        node.append(0)
-
 
1004
        node.append(None)
-
 
1005
        node.append(title) # Component
-
 
1006
        node.append("") # Category
-
 
1007
        node.append("") # Type
-
 
1008
        node.append("") # Id
-
 
1009
        node.append("") # Title
-
 
1010
        node.append("") # Priority
-
 
1011
        node.append("") # Lang
-
 
1012
        #~ node.append("") # Version
-
 
1013
        node.append("") # Release on
-
 
1014
        return node
-
 
1015
-
 
1016
-
 
1017
    def get_node_date_day(self, date, token_date):
-
 
1018
        title = "<span size='12000'><b>%s</b></span>" % date.strftime("%d - %A")
-
 
1019
-
 
1020
        node = []
-
 
1021
        node.append('date-day@%s' % token_date)
-
 
1022
        node.append(0)
-
 
1023
        node.append(None)
-
 
1024
        node.append(title) # Component
-
 
1025
        node.append("") # Category
-
 
1026
        node.append("") # Type
-
 
1027
        node.append("") # Id
-
 
1028
        node.append("") # Title
-
 
1029
        node.append("") # Priority
-
 
1030
        node.append("") # Lang
-
 
1031
        #~ node.append("") # Version
-
 
1032
        node.append("") # Release on
-
 
1033
        return node
-
 
1034
-
 
1035
-
 
1036
    def get_node_priority(self, priority):
-
 
1037
        icon = None # self.im.get_icon('category', 32, 32)
-
 
1038
-
 
1039
        if len(priority) == 0:
-
 
1040
            title = "<big><b>No priority assigned</b></big>"
-
 
1041
        else:
-
 
1042
            title = "<big><b>%s</b></big>" % priority
-
 
1043
-
 
1044
        node = []
-
 
1045
        node.append('priority@%s' % priority)
-
 
1046
        node.append(0)
-
 
1047
        node.append(icon)
-
 
1048
        node.append(title) # Component # Category title
-
 
1049
        node.append("") # Category
-
 
1050
        node.append("") # Type
-
 
1051
        node.append("") # Id
-
 
1052
        node.append("") # Title
-
 
1053
        node.append("") # Priority
-
 
1054
        node.append("") # Lang
-
 
1055
        #~ node.append("") # Version
-
 
1056
        node.append("") # Release on
-
 
1057
        return node
-
 
1058
-
 
1059
-
 
1060
    def get_node_type(self, sntype):
-
 
1061
        icon = self.im.get_icon('type', 32, 32)
-
 
1062
-
 
1063
        if len(sntype) == 0:
-
 
1064
            title = "<big><b>SAP Note type not found</b></big>"
-
 
1065
        else:
-
 
1066
            title = "<big><b>%s</b></big>" % sntype
-
 
1067
-
 
1068
        node = []
-
 
1069
        node.append('sntype@%s' % sntype)
-
 
1070
        node.append(0)
-
 
1071
        node.append(icon)
-
 
1072
        node.append(title) # Component # Category title
-
 
1073
        node.append("") # Category
-
 
1074
        node.append("") # Type
-
 
1075
        node.append("") # Id
-
 
1076
        node.append("") # Title
-
 
1077
        node.append("") # Priority
-
 
1078
        node.append("") # Lang
-
 
1079
        #~ node.append("") # Version
-
 
1080
        node.append("") # Release on
-
 
1081
        return node
-
 
1082
-
 
1083
-
 
1084
-
 
1085
    def get_node_component_desc(self, comptxt):
-
 
1086
        icon = self.im.get_icon('component', 32, 32)
-
 
1087
-
 
1088
        if len(comptxt) == 0:
-
 
1089
            title = "<big><b>No component assigned</b></big>"
-
 
1090
        else:
-
 
1091
            title = "<big><b>%s</b></big>" % comptxt
-
 
1092
-
 
1093
        node = []
-
 
1094
        node.append('component-desc@%s' % comptxt)
-
 
1095
        node.append(0)
-
 
1096
        node.append(icon)
-
 
1097
        node.append(title) # Component # Category title
-
 
1098
        node.append("") # Category
-
 
1099
        node.append("") # Type
-
 
1100
        node.append("") # Id
-
 
1101
        node.append("") # Title
-
 
1102
        node.append("") # Priority
-
 
1103
        node.append("") # Lang
-
 
1104
        #~ node.append("") # Version
-
 
1105
        node.append("") # Release on
-
 
1106
        return node
-
 
1107
-
 
1108
-
 
1109
    def get_node_category_view(self, category=''):
-
 
1110
        #~ compkey = escape(sapnote['componentkey'])
-
 
1111
        #~ catname = escape(sapnote['category'])
-
 
1112
        #~ catkey = compkey + '-' + catname
-
 
1113
        icon = None # self.im.get_icon('category', 32, 32)
-
 
1114
-
 
1115
        if len(category) == 0:
-
 
1116
            #~ catname = "<span size='12000'><b>No category assigned</b></span>"
-
 
1117
            catname = "<big><b>No category assigned</b></big>"
-
 
1118
        else:
-
 
1119
            #~ category = "<span size='15000'><b>%s</b></span>" % catname
-
 
1120
            catname = "<big><b>%s</b></big>" % category
-
 
1121
-
 
1122
        node = []
-
 
1123
        node.append('category@%s' % category)
-
 
1124
        node.append(0)
-
 
1125
        node.append(icon)
-
 
1126
        node.append(catname) # Component # Category title
-
 
1127
        node.append("") # Category
-
 
1128
        node.append("") # Type
-
 
1129
        node.append("") # Id
-
 
1130
        node.append("") # Title
-
 
1131
        node.append("") # Priority
-
 
1132
        node.append("") # Lang
-
 
1133
        #~ node.append("") # Version
-
 
1134
        node.append("") # Release on
-
 
1135
        return node
-
 
1136
-
 
1137
-
 
1138
    def get_node_sapnote_bookmark(self, sapnote, sid):
636
        compkey = escape(sapnote['componentkey'])
1139
        compkey = escape(sapnote['componentkey'])
637
        icon_note = self.im.get_pixbuf_icon('sapnote')
-
 
-
 
1140
        icon_note = self.im.get_pixbuf_icon('fingerprint')
638
        icon_fav = self.im.get_icon('bookmark')
1141
        icon_fav = self.im.get_icon('bookmark')
639
        compkey = escape(sapnote['componentkey'])
1142
        compkey = escape(sapnote['componentkey'])
640
        compkey = escape(sapnote['componentkey'])
1143
        compkey = escape(sapnote['componentkey'])
641
        catname = escape(sapnote['category'])
1144
        catname = escape(sapnote['category'])
642
        sn = "%10d" % (int(sid)) # SAP Note Id (000000nnnn)
-
 
-
 
1145
        priority = "%s" % escape(sapnote['priority'])
-
 
1146
        released = dateparser.parse(sapnote['releaseon'])
-
 
1147
        released = released.strftime("%Y.%m.%d")
-
 
1148
        sid = "0"*(10 - len(sid)) + sid
-
 
1149
        title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
1150
-
 
1151
        # Create row-node
-
 
1152
        node = []
-
 
1153
        node.append('sapnote@%s' % sid)     # 0. # RowType
-
 
1154
        node.append(0)                      # 1. # CheckBox
-
 
1155
        node.append(icon_fav)               # 2. # Icon
-
 
1156
        node.append("%s" % compkey)         # 3. # Component
-
 
1157
        node.append("%s" % catname)         # 4. # Category
-
 
1158
        node.append(sapnote['type'])        # 5. # Type
-
 
1159
        node.append("<b>%s</b>" %sid)       # 6. # Sap Note ID
-
 
1160
        node.append(title)                  # 7. # Title
-
 
1161
        node.append(priority)               # 8. # Priority
-
 
1162
        node.append(sapnote['language'])    # 9. # Lang
-
 
1163
        node.append(released)               # 10. # Release date
-
 
1164
-
 
1165
        return node
-
 
1166
-
 
1167
-
 
1168
    def get_node_sapnote_task(self, sapnote, sid):
-
 
1169
        compkey = escape(sapnote['componentkey'])
-
 
1170
        compkey = escape(sapnote['componentkey'])
-
 
1171
        catname = escape(sapnote['category'])
-
 
1172
        priority = "%s" % escape(sapnote['priority'])
-
 
1173
        released = dateparser.parse(sapnote['releaseon'])
-
 
1174
        released = released.strftime("%Y.%m.%d")
-
 
1175
        sid = "0"*(10 - len(sid)) + sid
-
 
1176
        title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
1177
        bookmarked = sapnote['bookmark']
-
 
1178
-
 
1179
        if bookmarked:
-
 
1180
            icon = self.im.get_icon('bookmark', 32, 32)
-
 
1181
        else:
-
 
1182
            icon = self.im.get_icon('fingerprint', 32, 32)
-
 
1183
-
 
1184
        # Create row-node
-
 
1185
        node = []
-
 
1186
        node.append('sapnote@%s' % sid)     # 0. # RowType
-
 
1187
        node.append(0)                      # 1. # CheckBox
-
 
1188
        node.append(icon)                   # 2. # Icon
-
 
1189
        node.append(title)                  # 3. # Component
-
 
1190
        node.append("")                     # 4. # Category
-
 
1191
        node.append(sapnote['type'])        # 5. # Type
-
 
1192
        node.append("<b>%s</b>" %sid)       # 6. # Sap Note ID
-
 
1193
        node.append("")                     # 7. # Title
-
 
1194
        node.append(priority)               # 8. # Priority
-
 
1195
        node.append(sapnote['language'])    # 9. # Lang
-
 
1196
        node.append(released)               # 10. # Release date
-
 
1197
-
 
1198
        return node
-
 
1199
-
 
1200
-
 
1201
    def get_node_sapnote_type(self, sapnote, sid):
-
 
1202
        #~ compkey = escape(sapnote['componentkey'])
-
 
1203
        #~ compkey = escape(sapnote['componentkey'])
-
 
1204
        #~ catname = escape(sapnote['category'])
-
 
1205
        sntype = "%s" % escape(sapnote['type'])
-
 
1206
        #~ released = dateparser.parse(sapnote['releaseon'])
-
 
1207
        #~ released = released.strftime("%Y.%m.%d")
-
 
1208
        sid = "0"*(10 - len(sid)) + sid
-
 
1209
        title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
1210
        bookmarked = sapnote['bookmark']
-
 
1211
-
 
1212
        if bookmarked:
-
 
1213
            icon = self.im.get_icon('bookmark', 32, 32)
-
 
1214
        else:
-
 
1215
            icon = self.im.get_icon('fingerprint', 32, 32)
-
 
1216
-
 
1217
        # Create row-node
-
 
1218
        node = []
-
 
1219
        node.append('sapnote@%s' % sid)     # 0. # RowType
-
 
1220
        node.append(0)                      # 1. # CheckBox
-
 
1221
        node.append(icon)                   # 2. # Icon
-
 
1222
        node.append(title)                  # 3. # Component
-
 
1223
        node.append("")                     # 4. # Category
-
 
1224
        node.append(sapnote['type'])        # 5. # Type
-
 
1225
        node.append("<b>%s</b>" %sid)       # 6. # Sap Note ID
-
 
1226
        node.append("")                     # 7. # Title
-
 
1227
        node.append("")                     # 8. # Priority
-
 
1228
        node.append(sapnote['language'])    # 9. # Lang
-
 
1229
        node.append("")                     # 10. # Release date
-
 
1230
-
 
1231
        return node
-
 
1232
-
 
1233
-
 
1234
    def get_node_sapnote_component_desc(self, sapnote, sid):
-
 
1235
        compkey = escape(sapnote['componentkey'])
-
 
1236
        compkey = escape(sapnote['componentkey'])
-
 
1237
        catname = escape(sapnote['category'])
-
 
1238
        priority = "%s" % escape(sapnote['priority'])
-
 
1239
        released = dateparser.parse(sapnote['releaseon'])
-
 
1240
        released = released.strftime("%Y.%m.%d")
-
 
1241
        sid = "0"*(10 - len(sid)) + sid
-
 
1242
        title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
1243
        bookmarked = sapnote['bookmark']
-
 
1244
-
 
1245
        if bookmarked:
-
 
1246
            icon = self.im.get_icon('bookmark', 32, 32)
-
 
1247
        else:
-
 
1248
            icon = self.im.get_icon('fingerprint', 32, 32)
-
 
1249
-
 
1250
        # Create row-node
-
 
1251
        node = []
-
 
1252
        node.append('sapnote@%s' % sid)     # 0. # RowType
-
 
1253
        node.append(0)                      # 1. # CheckBox
-
 
1254
        node.append(icon)                   # 2. # Icon
-
 
1255
        node.append(title)                  # 3. # Component
-
 
1256
        node.append("")                     # 4. # Category
-
 
1257
        node.append(sapnote['type'])        # 5. # Type
-
 
1258
        node.append("<b>%s</b>" %sid)       # 6. # Sap Note ID
-
 
1259
        node.append("")                     # 7. # Title
-
 
1260
        node.append(priority)               # 8. # Priority
-
 
1261
        node.append(sapnote['language'])    # 9. # Lang
-
 
1262
        node.append(released)               # 10. # Release date
-
 
1263
-
 
1264
        return node
-
 
1265
-
 
1266
-
 
1267
    def get_node_sapnote_category(self, sapnote, sid):
-
 
1268
        compkey = escape(sapnote['componentkey'])
-
 
1269
        compkey = escape(sapnote['componentkey'])
-
 
1270
        catname = escape(sapnote['category'])
-
 
1271
        priority = "%s" % escape(sapnote['priority'])
-
 
1272
        released = dateparser.parse(sapnote['releaseon'])
-
 
1273
        released = released.strftime("%Y.%m.%d")
-
 
1274
        sid = "0"*(10 - len(sid)) + sid
-
 
1275
        title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
1276
        bookmarked = sapnote['bookmark']
-
 
1277
-
 
1278
        if bookmarked:
-
 
1279
            icon = self.im.get_icon('bookmark', 32, 32)
-
 
1280
        else:
-
 
1281
            icon = self.im.get_icon('fingerprint', 32, 32)
-
 
1282
-
 
1283
        # Create row-node
-
 
1284
        node = []
-
 
1285
        node.append('sapnote@%s' % sid)     # 0. # RowType
-
 
1286
        node.append(0)                      # 1. # CheckBox
-
 
1287
        node.append(icon)                   # 2. # Icon
-
 
1288
        node.append(title)                  # 3. # Component
-
 
1289
        node.append("")                     # 4. # Category
-
 
1290
        node.append(sapnote['type'])        # 5. # Type
-
 
1291
        node.append("<b>%s</b>" %sid)       # 6. # Sap Note ID
-
 
1292
        node.append("")                     # 7. # Title
-
 
1293
        node.append(priority)               # 8. # Priority
-
 
1294
        node.append(sapnote['language'])    # 9. # Lang
-
 
1295
        node.append(released)               # 10. # Release date
-
 
1296
-
 
1297
        return node
-
 
1298
-
 
1299
-
 
1300
    def get_node_sapnote_chronologic(self, sapnote, sid):
-
 
1301
        compkey = escape(sapnote['componentkey'])
-
 
1302
        compkey = escape(sapnote['componentkey'])
-
 
1303
        catname = escape(sapnote['category'])
-
 
1304
        priority = "%s" % escape(sapnote['priority'])
-
 
1305
        released = dateparser.parse(sapnote['releaseon'])
-
 
1306
        released = released.strftime("%Y.%m.%d")
-
 
1307
        sid = "0"*(10 - len(sid)) + sid
-
 
1308
        title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
1309
        bookmarked = sapnote['bookmark']
-
 
1310
-
 
1311
        if bookmarked:
-
 
1312
            icon = self.im.get_icon('bookmark', 32, 32)
-
 
1313
        else:
-
 
1314
            icon = self.im.get_icon('fingerprint', 32, 32)
-
 
1315
-
 
1316
        # Create row-node
-
 
1317
        node = []
-
 
1318
        node.append('sapnote@%s' % sid)     # 0. # RowType
-
 
1319
        node.append(0)                      # 1. # CheckBox
-
 
1320
        node.append(icon)                   # 2. # Icon
-
 
1321
        node.append(title)                  # 3. # Component
-
 
1322
        node.append("")                     # 4. # Category
-
 
1323
        node.append(sapnote['type'])        # 5. # Type
-
 
1324
        node.append("<b>%s</b>" %sid)       # 6. # Sap Note ID
-
 
1325
        node.append("")                     # 7. # Title
-
 
1326
        node.append(priority)               # 8. # Priority
-
 
1327
        node.append(sapnote['language'])    # 9. # Lang
-
 
1328
        node.append(released)               # 10. # Release date
-
 
1329
-
 
1330
        return node
-
 
1331
-
 
1332
-
 
1333
-
 
1334
    def get_node_sapnote(self, sapnote, sid):
-
 
1335
        compkey = escape(sapnote['componentkey'])
-
 
1336
        icon_note = self.im.get_icon('fingerprint', 32, 32)
-
 
1337
        icon_fav = self.im.get_icon('bookmark', 32, 32)
-
 
1338
        compkey = escape(sapnote['componentkey'])
-
 
1339
        compkey = escape(sapnote['componentkey'])
-
 
1340
        catname = escape(sapnote['category'])
-
 
1341
        sid = "0"*(10 - len(sid)) + sid
643
1342
644
        # Get bookmark
1343
        # Get bookmark
645
        try:
1344
        try:
646
            bookmark = sapnote['bookmark']
1345
            bookmark = sapnote['bookmark']
647
        except Exception as error:
1346
        except Exception as error:
648
            bookmark = False
1347
            bookmark = False
649
1348
650
        # Get correct title
1349
        # Get correct title
651
        if self.get_view() == 'bookmarks':
-
 
652
            title = "<big>%s</big>" % (escape(sapnote['title']))
-
 
653
        elif self.get_view() == 'components':
-
 
654
            title = "\t\t<big>SAP Note <b>%s</b> - %s</big>" % (sn, escape(sapnote['title']))
-
 
655
        else:
-
 
656
            title = "\t\t<big><b>SAP Note %s</b> - %s</big>" % (sn, escape(sapnote['title']))
-
 
-
 
1350
        title = "%s" % (escape(sapnote['title']))
657
1351
-
 
1352
        # Create row-node
658
        node = []
1353
        node = []
659
        # 0. # RowType
-
 
660
        node.append('sapnote')
-
 
661
-
 
662
        # 1. # CheckBox
-
 
663
        node.append(0)
-
 
-
 
1354
        node.append('sapnote@%s' % sid) # 0. # RowType
-
 
1355
        node.append(0) # 1. # CheckBox
664
1356
665
        # 2. # Icon
1357
        # 2. # Icon
666
        if bookmark:
1358
        if bookmark:
667
            node.append(icon_fav)
1359
            node.append(icon_fav)
668
        else:
1360
        else:
669
            node.append(icon_note)
1361
            node.append(icon_note)
670
            #~ node.append(None)
-
 
671
1362
672
        # 3. # Component
1363
        # 3. # Component
673
        if self.view == 'components':
1364
        if self.view == 'components':
674
            node.append(title)
1365
            node.append(title)
675
            # 4. # Category
1366
            # 4. # Category
676
            node.append("")
1367
            node.append("")
677
        elif self.view == 'bookmarks':
1368
        elif self.view == 'bookmarks':
678
            node.append("<big>%s</big>" % compkey)
-
 
-
 
1369
            node.append("%s" % compkey)
679
            # 4. # Category
1370
            # 4. # Category
680
            node.append("%s" % catname)
1371
            node.append("%s" % catname)
-
 
1372
            #~ node.append(catname)
-
 
1373
        elif self.view == 'tasks':
-
 
1374
            node.append("%s" % compkey)
-
 
1375
            # 4. # Category
-
 
1376
            node.append("%s" % catname)
-
 
1377
            #~ node.append(catname)
-
 
1378
        elif self.view == 'chronologic':
-
 
1379
            node.append("")
-
 
1380
            # 4. # Category
-
 
1381
            node.append("")
-
 
1382
            #~ node.append(catname)
-
 
1383
        elif self.view == 'category':
-
 
1384
            node.append("")
-
 
1385
            # 4. # Category
-
 
1386
            node.append("")
-
 
1387
            #~ node.append(catname)
-
 
1388
        elif self.view == 'description':
-
 
1389
            node.append("")
-
 
1390
            # 4. # Category
-
 
1391
            node.append("")
681
            #~ node.append(catname)
1392
            #~ node.append(catname)
682
        else:
1393
        else:
683
            node.append(title)
1394
            node.append(title)
684
            # 4. # Category
1395
            # 4. # Category
685
            node.append("")
1396
            node.append("")
686
1397
687
        # 5. # Type
-
 
688
        node.append(sapnote['type'])
-
 
689
-
 
690
        # 6. # Sap Note ID
-
 
691
        node.append("%s" %sid)
-
 
-
 
1398
        node.append(sapnote['type'])  # 5. # Type
-
 
1399
        node.append("<b>%s</b>" %sid) # 6. # Sap Note ID
692
1400
693
        # 7. # Title
1401
        # 7. # Title
694
        if self.view == 'bookmarks':
1402
        if self.view == 'bookmarks':
-
 
1403
            node.append(title)
-
 
1404
        elif self.view == 'tasks':
-
 
1405
            node.append(title)
-
 
1406
        elif self.view == 'chronologic':
-
 
1407
            node.append(title)
-
 
1408
        elif self.view == 'category':
-
 
1409
            node.append(title)
-
 
1410
        elif self.view == 'description':
695
            node.append(title)
1411
            node.append(title)
696
        else:
1412
        else:
697
            node.append("")
1413
            node.append("")
698
1414
699
        # 8. # Priority
1415
        # 8. # Priority
Line 709... Line 1425...
709
1425
710
        return node
1426
        return node
711
1427
712
1428
713
    def populate_by_components(self, sapnotes, only_bookmarks=False):
1429
    def populate_by_components(self, sapnotes, only_bookmarks=False):
714
        #~ self.log.debug('Populating by components')
-
 
-
 
1430
        self.log.debug('Populating by components')
715
        self.model.clear()
1431
        self.model.clear()
716
        self.treepids = {}
1432
        self.treepids = {}
717
        self.column_component.set_title('Components')
1433
        self.column_component.set_title('Components')
718
        self.column_sid.set_visible(False)
-
 
-
 
1434
        self.column_icon.set_visible(True)
-
 
1435
        self.column_component.set_visible(True)
-
 
1436
        self.column_component.set_expand(True)
719
        self.column_title.set_visible(False)
1437
        self.column_title.set_visible(False)
720
        self.set_headers_visible(False)
-
 
721
        self.set_grid_lines(Gtk.TreeViewGridLines.VERTICAL)
-
 
-
 
1438
        self.column_sid.set_visible(True)
-
 
1439
        #~ self.column_title.set_visible(True)
-
 
1440
        self.set_headers_visible(True)
-
 
1441
        #~ self.set_grid_lines(Gtk.TreeViewGridLines.VERTICAL)
722
1442
723
        self.column_title
-
 
-
 
1443
        #~ self.column_title
724
1444
725
        if len(sapnotes) == 0:
1445
        if len(sapnotes) == 0:
726
            return
1446
            return
727
1447
728
        scomp = set()
1448
        scomp = set()
Line 735... Line 1455...
735
            dcomp[compkey] = comptxt
1455
            dcomp[compkey] = comptxt
736
        lcomp = list(scomp)
1456
        lcomp = list(scomp)
737
        lcomp.sort()
1457
        lcomp.sort()
738
1458
739
        for compkey in lcomp:
1459
        for compkey in lcomp:
740
            node = self.get_node_component(compkey, dcomp[compkey])
-
 
741
            pid = self.model.append(None, node)
-
 
742
            self.treepids[compkey] = pid
-
 
-
 
1460
            #~ print (compkey)
-
 
1461
            subkeys = compkey.split('-')
-
 
1462
            ppid = None
-
 
1463
            for i in range(1, len(subkeys)+1):
-
 
1464
                key = ('-').join(subkeys[0:i])
-
 
1465
                try:
-
 
1466
                    ppid = self.treepids[key]
-
 
1467
                    #~ print ("\tSubkey found: %s" % key)
-
 
1468
                except:
-
 
1469
                    if i == len(subkeys):
-
 
1470
                        title = dcomp[compkey]
-
 
1471
                    else:
-
 
1472
                        title = ""
-
 
1473
                        #~ title = key[key.rfind('-')+1:]
-
 
1474
                    node = self.get_node_component(key, title)
-
 
1475
                    ppid = self.model.append(ppid, node)
-
 
1476
                    self.treepids[key] = ppid
-
 
1477
                    #~ print ("\tSubkey added: %s" % key)
-
 
1478
743
1479
744
        for sid in sapnotes:
1480
        for sid in sapnotes:
745
            #~ Gety component
1481
            #~ Gety component
746
            compkey = escape(sapnotes[sid]['componentkey'])
1482
            compkey = escape(sapnotes[sid]['componentkey'])
747
            #~ try:
-
 
748
            pid = self.treepids[compkey]
1483
            pid = self.treepids[compkey]
749
            #~ except:
-
 
750
                #~ node = self.get_node_component(sapnotes[sid])
-
 
751
                #~ pid = self.model.append(None, node)
-
 
752
                #~ self.treepids[compkey] = pid
-
 
753
1484
754
            #~ Get category
1485
            #~ Get category
755
            catname = escape(sapnotes[sid]['category'])
1486
            catname = escape(sapnotes[sid]['category'])
756
            catkey = compkey + '-' + catname
1487
            catkey = compkey + '-' + catname
757
            try:
1488
            try:
Line 765... Line 1496...
765
            if only_bookmarks:
1496
            if only_bookmarks:
766
                try:
1497
                try:
767
                    bookmark = sapnotes[sid]['bookmark'] # True or False
1498
                    bookmark = sapnotes[sid]['bookmark'] # True or False
768
                except:
1499
                except:
769
                    bookmark = False
1500
                    bookmark = False
-
 
1501
770
                if bookmark:
1502
                if bookmark:
771
                    node = self.get_node_sapnote(sapnotes[sid], sid)
1503
                    node = self.get_node_sapnote(sapnotes[sid], sid)
772
                    self.model.append(cid, node)
1504
                    self.model.append(cid, node)
773
            else:
1505
            else:
774
                node = self.get_node_sapnote(sapnotes[sid], sid)
1506
                node = self.get_node_sapnote(sapnotes[sid], sid)
Line 788... Line 1520...
788
1520
789
1521
790
    def on_cell_toggled(self, widget, path):
1522
    def on_cell_toggled(self, widget, path):
791
        model = self.get_model()
1523
        model = self.get_model()
792
        rtype = model[path][0]
1524
        rtype = model[path][0]
-
 
1525
793
        if rtype != 'component' and rtype != 'category':
1526
        if rtype != 'component' and rtype != 'category':
794
            model[path][1] = not model[path][1]
1527
            model[path][1] = not model[path][1]
795
            self.count = 0
1528
            self.count = 0
796
            self.check_states()
1529
            self.check_states()
-
 
1530
-
 
1531
        self.cb.check_task_link_button_status()
-
 
1532
        #FIXME:
-
 
1533
        #(basico:10248): Gtk-WARNING **: Failed to set text from markup
-
 
1534
        # due to error parsing markup: Error en la lÝnea 1: La entidad
-
 
1535
        # no termina con un punto y coma; probablemente utiliz¾ el
-
 
1536
        # carßcter "&" sin la intenci¾n de indicar una entidad, escape
-
 
1537
        #el signo "&" como &amp;
797
1538
798
1539
799
    def check_states(self):
1540
    def check_states(self):
800
        lblSelectedNotes = self.gui.get_widget('lblSelectedNotes')
1541
        lblSelectedNotes = self.gui.get_widget('lblSelectedNotes')
801
        self.selected = set()
1542
        self.selected = set()
802
1543
803
        def traverse_treeview(model, path, iter, user_data=None):
1544
        def traverse_treeview(model, path, iter, user_data=None):
804
            rtype = model.get_value(iter, 0)
-
 
805
            if rtype == 'component':
-
 
-
 
1545
            row = model.get_value(iter, 0)
-
 
1546
            row_type, key = row.split('@')
-
 
1547
            if row_type == 'component':
806
                # select everything (categories and notes)
1548
                # select everything (categories and notes)
807
                component = rtype = model.get_value(iter, 3)
-
 
808
                ce = component.find('</b></big>')
-
 
809
                compkey = component[8:ce]
-
 
810
            elif rtype == 'category':
-
 
-
 
1549
                #~ component = rtype = model.get_value(iter, 3)
-
 
1550
                #~ ce = component.find('</b></big>')
-
 
1551
                compkey = key #component[8:ce]
-
 
1552
            elif row_type == 'category':
811
                # select all notes under that category
1553
                # select all notes under that category
812
                category = rtype = model.get_value(iter, 3)
-
 
813
                ce = category.find("</b></big>")
-
 
814
                catkey = category[9:ce]
-
 
-
 
1554
                #~ category = rtype = model.get_value(iter, 3)
-
 
1555
                #~ ce = category.find("</b></big>")
-
 
1556
                catkey = key # category[9:ce]
815
1557
816
            toggled = model.get_value(iter, 1)
1558
            toggled = model.get_value(iter, 1)
817
            if toggled:
1559
            if toggled:
818
                self.count += 1
1560
                self.count += 1
819
                title = model.get_value(iter, 3)
-
 
820
                sapnote = model.get_value(iter, 6)
-
 
821
                self.selected.add(sapnote)
-
 
-
 
1561
                #~ title = model.get_value(iter, 3)
-
 
1562
                #~ tid = model.get_value(iter, 6)
-
 
1563
                #~ sid = BSHTML(tid, "lxml").text
-
 
1564
                self.selected.add(key)
822
            return False
1565
            return False
823
1566
824
        model = self.get_model()
1567
        model = self.get_model()
825
        model.foreach(traverse_treeview)
1568
        model.foreach(traverse_treeview)
826
        lblSelectedNotes.set_markup('<big>%d of %d\nSAP Notes selected</big>' % (len(self.selected), self.sap.get_total()))
-
 
-
 
1569
        lblSelectedNotes.set_markup('<big>%d of %d\nSAP Notes selected</big>' % (len(self.selected), self.db.get_total()))
827
        actions = self.gui.get_widget('mnuBtnActions')
1570
        actions = self.gui.get_widget('mnuBtnActions')
828
        if (len(self.selected)) > 0:
1571
        if (len(self.selected)) > 0:
829
            actions.set_sensitive(True)
1572
            actions.set_sensitive(True)
830
            self.cb.setup_menu_actions()
1573
            self.cb.setup_menu_actions()
831
        else:
1574
        else:
832
            actions.set_sensitive(False)
1575
            actions.set_sensitive(False)
-
 
1576
-
 
1577
        self.cb.setup_menu_import()
833
1578
834
1579
835
    def set_select_notes(self, sapnotes):
1580
    def set_select_notes(self, sapnotes):
836
        self.selected = set()
1581
        self.selected = set()
837
        for sapnote in sapnotes:
1582
        for sapnote in sapnotes:
838
            self.selected.add(sapnote)
1583
            self.selected.add(sapnote)
839
1584
840
1585
841
    def get_selected_notes(self):
1586
    def get_selected_notes(self):
842
        return self.selected
-
 
-
 
1587
        bag = list(self.selected)
-
 
1588
        bag.sort()
-
 
1589
        self.log.debug("Selected SAP Notes: %s" % ', '.join(bag))
-
 
1590
        return bag
843
1591
844
1592
845
    def get_view(self):
1593
    def get_view(self):
846
        if self.view is None:
1594
        if self.view is None:
847
            return 'components'
1595
            return 'components'
Line 897... Line 1645...
897
1645
898
    def select_all_none(self, switch, active):
1646
    def select_all_none(self, switch, active):
899
        model = self.get_model()
1647
        model = self.get_model()
900
1648
901
        def traverse_treeview(model, path, iter, user_data=None):
1649
        def traverse_treeview(model, path, iter, user_data=None):
902
            rtype = model.get_value(iter, 0)
-
 
903
            if rtype == 'sapnote':
-
 
-
 
1650
            row = model.get_value(iter, 0)
-
 
1651
            row_type, sid = row.split('@')
-
 
1652
            if row_type == 'sapnote':
904
                model.set_value(iter, 1, active)
1653
                model.set_value(iter, 1, active)
905
1654
906
            return False
1655
            return False
907
1656
908
        model.foreach(traverse_treeview, active)
1657
        model.foreach(traverse_treeview, active)
909
        self.check_states()
1658
        self.check_states()
910
1659
911
1660
912
    def select_by_component(self, component_target, active):
1661
    def select_by_component(self, component_target, active):
913
        model = self.get_model()
1662
        model = self.get_model()
-
 
1663
        #~ self.log.debug("Component target: %s" % component_target)
914
1664
915
        def traverse_treeview(model, path, iter, user_data=None):
1665
        def traverse_treeview(model, path, iter, user_data=None):
916
            rtype = model.get_value(iter, 0)
-
 
917
            if rtype == 'sapnote':
-
 
918
                sid = model.get_value(iter, 6)
-
 
919
                sapnote = self.sap.get_node(sid)
-
 
-
 
1666
            row = model.get_value(iter, 0)
-
 
1667
            row_type, sid = row.split('@')
-
 
1668
            if row_type == 'sapnote':
-
 
1669
                tid = model.get_value(iter, 6)
-
 
1670
                sid = "0"*(10 - len(tid)) + tid
-
 
1671
                self.log.debug(sid)
-
 
1672
                sapnote = self.db.get_sapnote_metadata(sid)
920
                component_source = sapnote['componentkey']
1673
                component_source = sapnote['componentkey']
921
                #~ self.log.debug ("%s - %s" % (component_source, component_target))
-
 
922
                #~ if component_source.startswith(component_target):
-
 
-
 
1674
                #~ self.log.debug("Component source: %s - Component target: %s" % (component_source, component_target))
923
                if component_source == component_target:
1675
                if component_source == component_target:
924
                    model.set_value(iter, 1, active)
1676
                    model.set_value(iter, 1, active)
925
1677
926
            return False
1678
            return False
927
1679
Line 931... Line 1683...
931
1683
932
    def select_by_task(self, task_target, active):
1684
    def select_by_task(self, task_target, active):
933
        model = self.get_model()
1685
        model = self.get_model()
934
1686
935
        def traverse_treeview(model, path, iter, user_data=None):
1687
        def traverse_treeview(model, path, iter, user_data=None):
936
            rtype = model.get_value(iter, 0)
-
 
937
            if rtype == 'sapnote':
-
 
-
 
1688
            row = model.get_value(iter, 0)
-
 
1689
            row_type, sid = row.split('@')
-
 
1690
            if row_type == 'sapnote':
938
                sid = model.get_value(iter, 6)
1691
                sid = model.get_value(iter, 6)
939
                sapnote = self.sap.get_node(sid)
-
 
-
 
1692
                sapnote = self.db.get_sapnote_metadata(sid)
940
                tasks_source = sapnote['tasks']
1693
                tasks_source = sapnote['tasks']
941
1694
942
                if task_target in tasks_source:
1695
                if task_target in tasks_source:
943
                    model.set_value(iter, 1, active)
1696
                    model.set_value(iter, 1, active)
944
                else:
1697
                else: