summaryrefslogtreecommitdiffstats
path: root/src/Gui/CCReporterDialog.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/Gui/CCReporterDialog.py')
-rw-r--r--src/Gui/CCReporterDialog.py65
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()