diff options
Diffstat (limited to 'src/Gui/CCReporterDialog.py')
-rw-r--r-- | src/Gui/CCReporterDialog.py | 65 |
1 files changed, 48 insertions, 17 deletions
diff --git a/src/Gui/CCReporterDialog.py b/src/Gui/CCReporterDialog.py index 2dc35783..6e15570f 100644 --- a/src/Gui/CCReporterDialog.py +++ b/src/Gui/CCReporterDialog.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import pygtk pygtk.require("2.0") import gtk #, pango @@ -5,11 +6,19 @@ import gtk.glade import sys from CC_gui_functions import * from CCReport import Report +import CellRenderers #from CCDumpList import getDumpList, DumpList +# FIXME - create method or smth that returns type|editable|content +TYPE = 0 +EDITABLE = 1 +CONTENT = 2 + class ReporterDialog(): """Reporter window""" def __init__(self, report): + self.editable = [] + self.row_dict = {} self.report = report #Set the Glade file # FIXME add to path @@ -24,15 +33,9 @@ class ReporterDialog(): self.tvComment.connect("focus-in-event", self.on_comment_focus_cb) self.comment_changed = False - #user editable info in report - self.editable = ["Comment", "TextData1", "TextData2"] - #init the reports treeview self.tvReport = self.wTree.get_widget("tvReport") - columns = [None]*2 - columns[0] = gtk.TreeViewColumn('Item') - columns[1] = gtk.TreeViewColumn('Value') - self.reportListStore = gtk.ListStore(str, str, bool) + self.reportListStore = gtk.ListStore(str, str, bool, bool, bool) # set filter #self.modelfilter = self.reportListStore.filter_new() #self.modelfilter.set_visible_func(self.filter_reports, None) @@ -41,13 +44,21 @@ class ReporterDialog(): column = gtk.TreeViewColumn('Item', renderer, text=0) self.tvReport.append_column(column) - renderer = gtk.CellRendererText() + renderer = CellRenderers.MultilineCellRenderer() + renderer.props.editable = True #renderer.props.wrap_mode = pango.WRAP_WORD #renderer.props.wrap_width = 600 column = gtk.TreeViewColumn('Value', renderer, text=1, editable=2) self.tvReport.append_column(column) renderer.connect('edited',self.column_edited,self.reportListStore) - + # toggle + toggle_renderer = gtk.CellRendererToggle() + toggle_renderer.set_property('activatable', True) + toggle_renderer.connect( 'toggled', self.on_send_toggled, self.reportListStore ) + column = gtk.TreeViewColumn('Send', toggle_renderer) + column.add_attribute( toggle_renderer, "active", 3) + column.add_attribute( toggle_renderer, "visible", 4) + self.tvReport.append_column(column) # connect the signals self.wTree.get_widget("bApply").connect("clicked", self.on_apply_clicked, self.tvReport) #self.wTree.get_widget("bCancel").connect("clicked", self.on_cancel_clicked, self.tvReport) @@ -56,6 +67,9 @@ class ReporterDialog(): self.hydrate() + def on_send_toggled(self, cell, path, model): + model[path][3] = not model[path][3] + def on_comment_focus_cb(self, widget, event): if not self.comment_changed: widget.set_buffer(None) @@ -65,19 +79,14 @@ class ReporterDialog(): # multine support pass #print allocation - + def column_edited(self, cell, path, new_text, model): # 1 means the second cell model[path][1] = new_text return def on_apply_clicked(self, button, treeview): - #fill the report with user changed values and return it.. - #user changed the comment, so we want to save it - for item in self.editable: - if item == "Comment" and self.comment_changed: - buff = self.tvComment.get_buffer() - self.report[item] = buff.get_text(buff.get_start_iter(),buff.get_end_iter()) + self.dehydrate() def on_cancel_clicked(self, button, treeview): pass @@ -89,7 +98,29 @@ class ReporterDialog(): buff.set_text("Brief description how to reproduce this or what you did...") self.tvComment.set_buffer(buff) continue - self.reportListStore.append([item, self.report[item], item in self.editable]) + if self.report[item][TYPE] != 's': + # item name 0| value 1| editable? 2| toggled? 3| visible?(attachment)4 + if self.report[item][EDITABLE] == 'y': + self.editable.append(item) + self.row_dict[item] = self.reportListStore.append([item, self.report[item][CONTENT], + item in self.editable, False, + self.report[item][TYPE] in ['a','b']]) + + def dehydrate(self): + attributes = ["item", "content", "editable", "send", "attachment"] + for row in self.reportListStore: + rowe = dict(zip(attributes, row)) + if not rowe["editable"] and not rowe["attachment"]: + self.report[rowe["item"]][CONTENT] = rowe["content"] + elif rowe["editable"] and not rowe["attachment"]: + self.report[rowe["item"]][CONTENT] = rowe["content"] + elif (rowe["attachment"] or (rowe["editable"] and rowe["attachment"])) and rowe["send"]: + self.report[rowe["item"]][CONTENT] = rowe["content"] + else: + del self.report[rowe["item"]] + if self.comment_changed: + buff = self.tvComment.get_buffer() + self.report["Comment"] = ['t', 'y', buff.get_text(buff.get_start_iter(),buff.get_end_iter())] def run(self): result = self.window.run() |