From 5349e3c06eb12af91e89ec19d62c24712f0e8317 Mon Sep 17 00:00:00 2001 From: Jiri Moskovcak Date: Wed, 25 Feb 2009 10:22:46 +0100 Subject: More autotools magic for gui --- src/Gui/CCMainWindow.py | 139 ++++++++++++++++++++++++++++++++++++++++++++++++ src/Gui/Makefile.am | 26 +++------ src/Gui/cc-gui | 3 ++ src/Gui/mainwindow.py | 139 ------------------------------------------------ 4 files changed, 148 insertions(+), 159 deletions(-) create mode 100755 src/Gui/CCMainWindow.py create mode 100644 src/Gui/cc-gui delete mode 100755 src/Gui/mainwindow.py (limited to 'src') diff --git a/src/Gui/CCMainWindow.py b/src/Gui/CCMainWindow.py new file mode 100755 index 0000000..7f2cb7c --- /dev/null +++ b/src/Gui/CCMainWindow.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python + +import sys +import pygtk +pygtk.require("2.0") +import gtk +import gtk.glade +import CCDBusBackend +import sys +from CC_gui_functions import * +from CCDumpList import getDumpList, DumpList +from CCReporterDialog import ReporterDialog + +def cb(self, *args): + pass + +class MainWindow(): + def __init__(self): + try: + self.ccdaemon = CCDBusBackend.DBusManager() + except Exception, e: + # show error message if connection fails + # FIXME add an option to start the daemon + gui_error_message(e.message) + sys.exit() + #Set the Glade file + self.gladefile = "ccgui.glade" + self.wTree = gtk.glade.XML(self.gladefile) + + #Get the Main Window, and connect the "destroy" event + self.window = self.wTree.get_widget("main_window") + # self.window.set_default_size(640, 480) + if (self.window): + self.window.connect("destroy", gtk.main_quit) + + self.appBar = self.wTree.get_widget("appBar") + + #init the dumps treeview + self.dlist = self.wTree.get_widget("tvDumps") + columns = [None]*2 + columns[0] = gtk.TreeViewColumn('Date') + columns[1] = gtk.TreeViewColumn('Package') + # create list + self.dumpsListStore = gtk.ListStore(str, str, object) + # set filter + self.modelfilter = self.dumpsListStore.filter_new() + self.modelfilter.set_visible_func(self.filter_dumps, None) + self.dlist.set_model(self.modelfilter) + for column in columns: + n = self.dlist.append_column(column) + column.cell = gtk.CellRendererText() + column.pack_start(column.cell, False) + column.set_attributes(column.cell, text=(n-1)) + column.set_resizable(True) + + #connect signals + self.dlist.connect("cursor-changed", self.on_tvDumps_cursor_changed) + self.wTree.get_widget("bDelete").connect("clicked", self.on_bDelete_clicked) + self.wTree.get_widget("bNext").connect("clicked", self.on_bNext_clicked) + self.wTree.get_widget("bQuit").connect("clicked", self.on_bQuit_clicked) + self.ccdaemon.connect("crash", self.on_data_changed_cb, None) + + # load data + self.load() + + def load(self): + self.appBar.push(0,"Loading dumps...") + self.loadDumpList() + self.appBar.pop(0) + + def loadDumpList(self): + #dumplist = getDumpList(dbmanager=self.ccdaemon) + pass + + def on_data_changed_cb(self, *args): + ret = gui_info_dialog("Another crash detected, do you want to refresh the data?",self.window) + if ret == gtk.RESPONSE_YES: + self.hydrate() + else: + pass + #print "got another crash, refresh gui?" + + + def filter_dumps(self, model, miter, data): + # this could be use for filtering the dumps + return True + + def show(self): + self.window.show() + + def hydrate(self): + self.dumpsListStore.clear() + dumplist = getDumpList(self.ccdaemon, refresh=True) + #self.rows = self.ccdaemon.getDumps() + #row_c = 0 + for entry in dumplist: + self.dumpsListStore.append([entry.getTime("%Y:%m:%d"),entry.getPackage(),entry]) + #row_c += 1 + + def on_tvDumps_cursor_changed(self,treeview): + dumpsListStore, path = self.dlist.get_selection().get_selected_rows() + if not path: + return + + # this should work until we keep the row object in the last position + dump = dumpsListStore.get_value(dumpsListStore.get_iter(path[0]), len(self.dlist.get_columns())) + + lDate = self.wTree.get_widget("lDate") + #move this to Dump class + lDate.set_label(dump.getTime("%Y.%m.%d %H:%M:%S")) + lPackage = self.wTree.get_widget("lPackage") + lPackage.set_label(dump.getPackage()) + self.wTree.get_widget("lExecutable").set_label(dump.getExecutable()) + self.wTree.get_widget("lCRate").set_label(dump.getCount()) + #print self.rows[row] + + def on_bDelete_clicked(self, button): + print "Delete" + + def on_bNext_clicked(self, button): + # FIXME don't duplicate the code, move to function + dumpsListStore, path = self.dlist.get_selection().get_selected_rows() + if not path: + return + dump = dumpsListStore.get_value(dumpsListStore.get_iter(path[0]), len(self.dlist.get_columns())) + # show the report window with selected dump + report_dialog = ReporterDialog(dump) + report_dialog.run() + + def on_bQuit_clicked(self, button): + gtk.main_quit() + + +if __name__ == "__main__": + cc = MainWindow() + cc.hydrate() + cc.show() + gtk.main() + diff --git a/src/Gui/Makefile.am b/src/Gui/Makefile.am index 23d0571..6c3b609 100644 --- a/src/Gui/Makefile.am +++ b/src/Gui/Makefile.am @@ -1,29 +1,15 @@ #SUBDIRS=gui tui plugins tests conf -#bin_SCRIPTS = mainwindow.py +bin_SCRIPTS = cc-gui -PYTHON_FILES = CCDBusBackend.py CCDumpList.py CCDump.py CC_gui_functions.py ccgui.glade CCReporterDialog.py mainwindow.py +PYTHON_FILES = CCDBusBackend.py CCDumpList.py CCDump.py CC_gui_functions.py ccgui.glade CCReporterDialog.py CCMainWindow.py GLADE_FILES = ccgui.glade EXTRA_DIST = $(PYTHON_FILES) $(GLADE_FILES) -ccguidir = $(pkgdatadir) -ccgui_PYTHON = $(PYTHON_FILES) -ccgui_DATA = $(GLADE_FILES) +#ccguidir = $(pkgdatadir) +pkgdata_PYTHON = $(PYTHON_FILES) +pkgdata_DATA = $(GLADE_FILES) -execdir = $(sbindir) - -CLEANFILES := $(notdir $(wildcard *~)) $(notdir $(wildcard *\#)) $(notdir $(wildcard \.\#*)) $(notdir $(wildcard *.pyc)) - -check-local: - @for i in $(notdir $(wildcard *.py)); do echo $(PYTHON_FILES)|grep -q $$i || (echo $$i is missing;false) || exit 1;done && echo "Source file check PASSED" -install-exec-local: - mkdir -p $(DESTDIR)$(pkgdatadir) $(DESTDIR)$(sbindir) $(DESTDIR)$(bindir) - install -m 0755 $(srcdir)/mainwindow.py $(DESTDIR)$(pkgdatadir) - ln -fs $(pkgdatadir)/mainwindow.py $(DESTDIR)$(bindir)/crash-catcher-gui -uninstall-local: - rm -fr $(DESTDIR)$(pkgdatadir) - rm -f $(DESTDIR)$(bindir)/crash-catcher-gui - - \ No newline at end of file +CLEANFILES := $(notdir $(wildcard *~)) $(notdir $(wildcard *\#)) $(notdir $(wildcard \.\#*)) $(notdir $(wildcard *.pyc)) \ No newline at end of file diff --git a/src/Gui/cc-gui b/src/Gui/cc-gui new file mode 100644 index 0000000..a44e58d --- /dev/null +++ b/src/Gui/cc-gui @@ -0,0 +1,3 @@ +export PYTHONPATH=/usr/share/crash-catcher +export XLOGNAME=$LOGNAME +exec /usr/bin/python ../share/crash-catcher/CCMainWindow.py "$@" diff --git a/src/Gui/mainwindow.py b/src/Gui/mainwindow.py deleted file mode 100755 index 7f2cb7c..0000000 --- a/src/Gui/mainwindow.py +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/env python - -import sys -import pygtk -pygtk.require("2.0") -import gtk -import gtk.glade -import CCDBusBackend -import sys -from CC_gui_functions import * -from CCDumpList import getDumpList, DumpList -from CCReporterDialog import ReporterDialog - -def cb(self, *args): - pass - -class MainWindow(): - def __init__(self): - try: - self.ccdaemon = CCDBusBackend.DBusManager() - except Exception, e: - # show error message if connection fails - # FIXME add an option to start the daemon - gui_error_message(e.message) - sys.exit() - #Set the Glade file - self.gladefile = "ccgui.glade" - self.wTree = gtk.glade.XML(self.gladefile) - - #Get the Main Window, and connect the "destroy" event - self.window = self.wTree.get_widget("main_window") - # self.window.set_default_size(640, 480) - if (self.window): - self.window.connect("destroy", gtk.main_quit) - - self.appBar = self.wTree.get_widget("appBar") - - #init the dumps treeview - self.dlist = self.wTree.get_widget("tvDumps") - columns = [None]*2 - columns[0] = gtk.TreeViewColumn('Date') - columns[1] = gtk.TreeViewColumn('Package') - # create list - self.dumpsListStore = gtk.ListStore(str, str, object) - # set filter - self.modelfilter = self.dumpsListStore.filter_new() - self.modelfilter.set_visible_func(self.filter_dumps, None) - self.dlist.set_model(self.modelfilter) - for column in columns: - n = self.dlist.append_column(column) - column.cell = gtk.CellRendererText() - column.pack_start(column.cell, False) - column.set_attributes(column.cell, text=(n-1)) - column.set_resizable(True) - - #connect signals - self.dlist.connect("cursor-changed", self.on_tvDumps_cursor_changed) - self.wTree.get_widget("bDelete").connect("clicked", self.on_bDelete_clicked) - self.wTree.get_widget("bNext").connect("clicked", self.on_bNext_clicked) - self.wTree.get_widget("bQuit").connect("clicked", self.on_bQuit_clicked) - self.ccdaemon.connect("crash", self.on_data_changed_cb, None) - - # load data - self.load() - - def load(self): - self.appBar.push(0,"Loading dumps...") - self.loadDumpList() - self.appBar.pop(0) - - def loadDumpList(self): - #dumplist = getDumpList(dbmanager=self.ccdaemon) - pass - - def on_data_changed_cb(self, *args): - ret = gui_info_dialog("Another crash detected, do you want to refresh the data?",self.window) - if ret == gtk.RESPONSE_YES: - self.hydrate() - else: - pass - #print "got another crash, refresh gui?" - - - def filter_dumps(self, model, miter, data): - # this could be use for filtering the dumps - return True - - def show(self): - self.window.show() - - def hydrate(self): - self.dumpsListStore.clear() - dumplist = getDumpList(self.ccdaemon, refresh=True) - #self.rows = self.ccdaemon.getDumps() - #row_c = 0 - for entry in dumplist: - self.dumpsListStore.append([entry.getTime("%Y:%m:%d"),entry.getPackage(),entry]) - #row_c += 1 - - def on_tvDumps_cursor_changed(self,treeview): - dumpsListStore, path = self.dlist.get_selection().get_selected_rows() - if not path: - return - - # this should work until we keep the row object in the last position - dump = dumpsListStore.get_value(dumpsListStore.get_iter(path[0]), len(self.dlist.get_columns())) - - lDate = self.wTree.get_widget("lDate") - #move this to Dump class - lDate.set_label(dump.getTime("%Y.%m.%d %H:%M:%S")) - lPackage = self.wTree.get_widget("lPackage") - lPackage.set_label(dump.getPackage()) - self.wTree.get_widget("lExecutable").set_label(dump.getExecutable()) - self.wTree.get_widget("lCRate").set_label(dump.getCount()) - #print self.rows[row] - - def on_bDelete_clicked(self, button): - print "Delete" - - def on_bNext_clicked(self, button): - # FIXME don't duplicate the code, move to function - dumpsListStore, path = self.dlist.get_selection().get_selected_rows() - if not path: - return - dump = dumpsListStore.get_value(dumpsListStore.get_iter(path[0]), len(self.dlist.get_columns())) - # show the report window with selected dump - report_dialog = ReporterDialog(dump) - report_dialog.run() - - def on_bQuit_clicked(self, button): - gtk.main_quit() - - -if __name__ == "__main__": - cc = MainWindow() - cc.hydrate() - cc.show() - gtk.main() - -- cgit