Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2014-02-10 16:53:58 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2014-02-10 16:53:58 (GMT)
commit89b921b2ad2867c19de267a003431bba4fc09131 (patch)
tree4f6a1ccb289131a42249ac432493d98d166d0357
parent79f3486c4883d135850e5ec7bad5501a8009e621 (diff)
Make logviewer don't use activity_model
-rw-r--r--develop-activity/logviewer.py127
1 files changed, 91 insertions, 36 deletions
diff --git a/develop-activity/logviewer.py b/develop-activity/logviewer.py
index e63d686..50406d7 100644
--- a/develop-activity/logviewer.py
+++ b/develop-activity/logviewer.py
@@ -22,10 +22,13 @@ import os.path
import logging
from gettext import gettext as _
+from gi.repository import Gdk
from gi.repository import Gtk
from gi.repository import Gio
+from gi.repository import GObject
+
+from sugar3.graphics import style
-import activity_model
from sourceview_editor import TabLabel
#does not import develop_app, but references internals from the activity,
@@ -42,50 +45,33 @@ class LogMinder(Gtk.VBox):
self.activity = activity
self._openlogs = []
- logging.info('creating MultiLogView')
+ logging.info('creating MultiLogView namefilter %s', namefilter)
if not path:
# Main path to watch: ~/.sugar/someuser/logs...
path = os.path.join(os.path.expanduser("~"), ".sugar", "default",
"logs")
- if not extra_files:
- # extra files to watch in logviewer
- extra_files = []
- extra_files.append("/var/log/Xorg.0.log")
- extra_files.append("/var/log/syslog")
- extra_files.append("/var/log/messages")
-
self._logs_path = path + '/'
self._active_log = None
self._extra_files = extra_files
self._namefilter = namefilter
# Creating Main treeview with Actitivities list
- self._tv_menu = Gtk.TreeView()
- self._tv_menu.connect('cursor-changed', self._load_log)
- self._tv_menu.set_rules_hint(True)
- cellrenderer = Gtk.CellRendererText()
- self.treecolumn = Gtk.TreeViewColumn(_("Sugar logs"), cellrenderer,
- text=1)
- self._tv_menu.append_column(self.treecolumn)
- self._tv_menu.set_size_request(220, 900)
-
- # Create scrollbars around the tree view.
- scrolled = Gtk.ScrolledWindow()
- scrolled.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
- scrolled.add(self._tv_menu)
+ self.file_viewer = FileViewer()
+ self.file_viewer.connect('file-selected', self._load_log)
+ self.file_viewer.set_title(_("Sugar logs"))
# the internals of the treeview
- self._model = activity_model.DirectoryAndExtraModel(
- path, extra_files, self._filter_by_name)
+ self.file_viewer.load_logs(path, self._filter_by_name)
- self._tv_menu.set_model(self._model)
+ #self._model = activity_model.DirectoryAndExtraModel(
+ # path, extra_files, self._filter_by_name)
self._logs = {}
self._monitors = []
# Activities menu
- self.activity.treenotebook.add_page(_("Log"), scrolled)
+ self.activity.treenotebook.add_page(_("Log"), self.file_viewer)
self._configure_watcher()
@@ -120,14 +106,7 @@ class LogMinder(Gtk.VBox):
#If the log is open, just leave it that way
# Load the log information in View (text_view)
- def _load_log(self, treeview):
- node = activity_model.get_selected_file(self._tv_menu)
- logging.error('_load_log node:%s', node)
- if node is None:
- return
-
- path = node["path"]
-
+ def _load_log(self, path):
if os.path.isdir(path):
#do not try to open folders
logging.debug("Cannot open a folder as text :)")
@@ -157,8 +136,8 @@ class LogMinder(Gtk.VBox):
self.activity.editor.show_all()
self.activity.editor.set_current_page(-1)
- def _filter_by_name(self, node):
- return (self._namefilter in node.filename) or node.isDirectory
+ def _filter_by_name(self, filename):
+ return self._namefilter in filename
# Insert a Row in our TreeView
def _insert_row(self, store, parent, name):
@@ -175,6 +154,82 @@ class LogMinder(Gtk.VBox):
logging.debug("_remove_logview failed")
+class FileViewer(Gtk.ScrolledWindow):
+ __gtype_name__ = 'LogFileViewer'
+
+ __gsignals__ = {
+ 'file-selected': (GObject.SignalFlags.RUN_FIRST,
+ None,
+ ([str])),
+ }
+
+ def __init__(self):
+ Gtk.ScrolledWindow.__init__(self)
+
+ self.props.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC
+ self.props.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC
+ self.set_size_request(style.GRID_CELL_SIZE * 3, -1)
+
+ self._path = None
+
+ self._tree_view = Gtk.TreeView()
+ self._tree_view.connect('cursor-changed', self.__cursor_changed_cb)
+ self.add(self._tree_view)
+ self._tree_view.show()
+
+ self._tree_view.props.headers_visible = False
+ selection = self._tree_view.get_selection()
+ selection.connect('changed', self.__selection_changed_cb)
+
+ cell = Gtk.CellRendererText()
+ self._column = Gtk.TreeViewColumn()
+ self._column.pack_start(cell, True)
+ self._column.add_attribute(cell, 'text', 0)
+ self._tree_view.append_column(self._column)
+ self._tree_view.set_search_column(0)
+
+ def load_logs(self, path, filter_function):
+ self._path = path
+
+ self._tree_view.set_model(Gtk.TreeStore(str, str))
+ self._model = self._tree_view.get_model()
+ self._add_dir_to_model(path, filter_function)
+
+ def _add_dir_to_model(self, dir_path, filter_function, parent=None):
+ for f in os.listdir(dir_path):
+ full_path = os.path.join(dir_path, f)
+ if os.path.isdir(full_path):
+ new_iter = self._model.append(parent, [f, full_path])
+ self._add_dir_to_model(full_path, filter_function, new_iter)
+ else:
+ if filter_function(full_path):
+ self._model.append(parent, [f, full_path])
+
+ def __selection_changed_cb(self, selection):
+ model, tree_iter = selection.get_selected()
+ if tree_iter is None:
+ file_path = None
+ else:
+ file_path = model.get_value(tree_iter, 1)
+ self.emit('file-selected', file_path)
+
+ def __cursor_changed_cb(self, treeview):
+ selection = treeview.get_selection()
+ store, iter_ = selection.get_selected()
+ if iter_ is None:
+ # Nothing selected. This happens at startup
+ return
+ if store.iter_has_child(iter_):
+ path = store.get_path(iter_)
+ if treeview.row_expanded(path):
+ treeview.collapse_row(path)
+ else:
+ treeview.expand_row(path, False)
+
+ def set_title(self, title):
+ self._column.set_title(title)
+
+
class LogBuffer(Gtk.TextBuffer):
def __init__(self, logfile, tagtable):
GObject.GObject.__init__(self, table=tagtable)