diff --git a/pyfpdb/GuiLogView.py b/pyfpdb/GuiLogView.py
new file mode 100755
index 00000000..77f09b06
--- /dev/null
+++ b/pyfpdb/GuiLogView.py
@@ -0,0 +1,129 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+#Copyright 2008 Carl Gherardi
+#This program is free software: you can redistribute it and/or modify
+#it under the terms of the GNU Affero General Public License as published by
+#the Free Software Foundation, version 3 of the License.
+#
+#This program is distributed in the hope that it will be useful,
+#but WITHOUT ANY WARRANTY; without even the implied warranty of
+#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+#GNU General Public License for more details.
+#
+#You should have received a copy of the GNU Affero General Public License
+#along with this program. If not, see .
+#In the "official" distribution you can find the license in
+#agpl-3.0.txt in the docs folder of the package.
+
+
+import xml.dom.minidom
+from xml.dom.minidom import Node
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+import gobject
+import pango
+
+import Configuration
+
+log = Configuration.get_logger("logging.conf", "logview")
+
+class GuiLogView:
+
+ def __init__(self, config, mainwin, vbox):
+ self.config = config
+ self.main_window = mainwin
+ self.vbox = vbox
+ gtk.Widget.set_size_request(self.vbox, 700, 400);
+
+ self.liststore = gtk.ListStore(str, str, str, str) # date, module, level, text
+ self.listview = gtk.TreeView(model=self.liststore)
+ self.listview.set_grid_lines(gtk.TREE_VIEW_GRID_LINES_BOTH)
+
+ scrolledwindow = gtk.ScrolledWindow()
+ scrolledwindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ self.vbox.pack_start(scrolledwindow, expand=True, fill=True, padding=0)
+ scrolledwindow.add(self.listview)
+
+ self.listview.show()
+ scrolledwindow.show()
+ self.vbox.show()
+
+ self.loadLog()
+ self.vbox.show_all()
+
+ def loadLog(self):
+
+ #self.configStore = gtk.TreeStore(gobject.TYPE_PYOBJECT, gobject.TYPE_STRING, gobject.TYPE_STRING)
+ #self.configView = gtk.TreeView(self.configStore)
+ #self.configView.set_enable_tree_lines(True)
+ self.liststore.clear()
+
+ col = gtk.TreeViewColumn("Date/Time")
+ self.listview.append_column(col)
+ cRender = gtk.CellRendererText()
+ cRender.set_property("wrap-mode", pango.WRAP_WORD_CHAR)
+ col.pack_start(cRender, True)
+ col.add_attribute(cRender, 'text', 0)
+ col.set_max_width(1000)
+
+ col = gtk.TreeViewColumn("Module")
+ self.listview.append_column(col)
+ cRender = gtk.CellRendererText()
+ cRender.set_property("wrap-mode", pango.WRAP_WORD_CHAR)
+ col.pack_start(cRender, True)
+ col.add_attribute(cRender, 'text', 1)
+ col.set_max_width(1000)
+
+ col = gtk.TreeViewColumn("Level")
+ self.listview.append_column(col)
+ cRender = gtk.CellRendererText()
+ cRender.set_property("wrap-mode", pango.WRAP_WORD_CHAR)
+ col.pack_start(cRender, True)
+ col.add_attribute(cRender, 'text', 2)
+ col.set_max_width(1000)
+
+ col = gtk.TreeViewColumn("Text")
+ self.listview.append_column(col)
+ cRender = gtk.CellRendererText()
+ cRender.set_property("wrap-mode", pango.WRAP_WORD_CHAR)
+ col.pack_start(cRender, True)
+ col.add_attribute(cRender, 'text', 3)
+ col.set_max_width(1000)
+
+ l = 0
+ for line in open('logging.out', 'r'):
+ #self.addLogText(line)
+ iter = self.liststore.append([line.strip(), "", "", ""])
+ l = l + 1
+ if l >= 100:
+ break
+
+
+
+if __name__=="__main__":
+
+ config = Configuration.Config()
+
+ win = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ win.set_title("Test Log Viewer")
+ win.set_border_width(1)
+ win.set_default_size(600, 500)
+ win.set_resizable(True)
+
+ dia = gtk.Dialog("Log Viewer",
+ win,
+ gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT,
+ (gtk.STOCK_CLOSE, gtk.RESPONSE_OK))
+ dia.set_default_size(500, 500)
+ log = GuiLogView(config, win, dia.vbox)
+ response = dia.run()
+ if response == gtk.RESPONSE_ACCEPT:
+ pass
+ dia.destroy()
+
+
+
+
diff --git a/pyfpdb/fpdb.py b/pyfpdb/fpdb.py
index faaf4fdc..79567578 100755
--- a/pyfpdb/fpdb.py
+++ b/pyfpdb/fpdb.py
@@ -60,7 +60,8 @@ if not options.errorsToConsole:
errorFile = open('fpdb-error-log.txt', 'w', 0)
sys.stderr = errorFile
-import logging
+#import logging
+import logging, logging.config
import pygtk
pygtk.require('2.0')
@@ -70,6 +71,7 @@ import interlocks
import GuiPrefs
+import GuiLogView
import GuiBulkImport
import GuiPlayerStats
import GuiPositionalStats
@@ -85,6 +87,8 @@ import Exceptions
VERSION = "0.12"
+log = Configuration.get_logger("logging.conf", "fpdb")
+
class fpdb:
def tab_clicked(self, widget, tab_name):
"""called when a tab button is clicked to activate that tab"""
@@ -413,6 +417,29 @@ class fpdb:
self.release_global_lock()
+ def dia_logs(self, widget, data=None):
+ lock_set = False
+ if self.obtain_global_lock():
+ lock_set = True
+
+ dia = gtk.Dialog(title="Log Messages"
+ ,parent=None
+ ,flags=0
+ ,buttons=(gtk.STOCK_CLOSE,gtk.RESPONSE_OK))
+ logviewer = GuiLogView.GuiLogView(self.config, self.window, dia.vbox)
+ response = dia.run()
+ if response == gtk.RESPONSE_ACCEPT:
+ pass
+ dia.destroy()
+
+ if lock_set:
+ self.release_global_lock()
+
+ def addLogText(self, text):
+ end_iter = self.logbuffer.get_end_iter()
+ self.logbuffer.insert(end_iter, text)
+ self.logview.scroll_to_mark(self.logbuffer.get_insert(), 0)
+
def __calendar_dialog(self, widget, entry):
self.dia_confirm.set_modal(False)
d = gtk.Window(gtk.WINDOW_TOPLEVEL)
@@ -515,6 +542,7 @@ class fpdb: