Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/shell
diff options
context:
space:
mode:
authorEduardo Silva <edsiper@tuto.(none)>2007-01-02 01:39:01 (GMT)
committer Eduardo Silva <edsiper@tuto.(none)>2007-01-02 01:39:01 (GMT)
commit80cd6af44c296ee8bc9ba30ad54f335fd4b7a4fe (patch)
treee11cd61d9ba9444683a342aeb979f161f43c1c82 /shell
parenta4e1b6b3ffb86e96c4a4f5e7a95e9757fb5e7f91 (diff)
New log viewer, no more tabs
Diffstat (limited to 'shell')
-rwxr-xr-xshell/console/console.py18
-rw-r--r--shell/console/logviewer.py168
-rw-r--r--shell/console/memphis.py17
-rw-r--r--shell/console/terminal.py21
4 files changed, 173 insertions, 51 deletions
diff --git a/shell/console/console.py b/shell/console/console.py
index c105e85..a95425c 100755
--- a/shell/console/console.py
+++ b/shell/console/console.py
@@ -1,5 +1,22 @@
#!/usr/bin/env python
+# Copyright (C) 2006, Eduardo Silva (edsiper@gmail.com).
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# 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 General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
import gtk
# Console interfaces
@@ -9,6 +26,7 @@ import terminal
window = gtk.Window()
window.set_title('Developer console')
+window.connect("delete-event", gtk.main_quit)
width = gtk.gdk.screen_width() * 95 / 100
height = gtk.gdk.screen_height() * 95 / 100
diff --git a/shell/console/logviewer.py b/shell/console/logviewer.py
index b93f05e..f458cda 100644
--- a/shell/console/logviewer.py
+++ b/shell/console/logviewer.py
@@ -16,6 +16,9 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+# Rewritten by Eduardo Silva, edsiper@gmail.com
+
import os
import pygtk
@@ -25,77 +28,142 @@ import gobject
from sugar import env
+class MultiLogView(gtk.VBox):
+ def __init__(self, path):
+
+ self._active_log = None
+ self._iters = []
+
+ # Creating Main treeview with Actitivities list
+ tv_menu = gtk.TreeView()
+ tv_menu.connect('cursor-changed', self._load_log)
+ tv_menu.set_rules_hint(True)
+
+ # Set width
+ box_width = gtk.gdk.screen_width() * 80 / 100
+ tv_menu.set_size_request(box_width*25/100, 0)
+
+ self.store_menu = gtk.TreeStore(str)
+ tv_menu.set_model(self.store_menu)
+
+ self._add_column(tv_menu, 'Sugar logs', 0)
+ self._logs_path = os.path.join(env.get_profile_path(), 'logs')
+ self._activity = {}
+
+ # Activities menu
+ self.hbox = gtk.HBox(False, 3)
+ self.hbox.pack_start(tv_menu, True, True, 0)
+
+ # Activity log, set width
+ self._view = LogView()
+ self._view.set_size_request(box_width*75/100, 0)
+
+ self.hbox.pack_start(self._view, True, True, 0)
+ self.hbox.show_all()
+
+ gobject.timeout_add(1000, self._update, tv_menu)
+
+ # Load the log information in View (textview)
+ def _load_log(self, treeview):
+ treeselection = treeview.get_selection()
+
+ treestore, iter = treeselection.get_selected()
+
+ # Get current selection
+ act_log = self.store_menu.get_value(iter, 0)
+
+ # Set buffer and scroll down
+ self._view.textview.set_buffer(self._activity[act_log])
+ self._view.textview.scroll_to_mark(self._activity[act_log].get_insert(), 0);
+ self._active_log = act_log
+
+ def _update(self, tv_menu):
+ # Searching log files
+ for logfile in os.listdir(self._logs_path):
+
+ if not self._activity.has_key(logfile):
+ self._add_activity(logfile)
+ full_log_path = os.path.join(self._logs_path, logfile)
+ model = LogBuffer(full_log_path)
+ self._activity[logfile] = model
+
+ self._activity[logfile].update()
+ written = self._activity[logfile]._written
+
+ # Load the first iter
+ if self._active_log == None:
+ self._active_log = logfile
+ iter = tv_menu.get_model().get_iter_root()
+ tv_menu.get_selection().select_iter(iter)
+ self._load_log(tv_menu)
+
+ if written > 0 and self._active_log == logfile:
+ self._view.textview.scroll_to_mark(self._activity[logfile].get_insert(), 0);
+
+ return True
+
+ def _add_activity(self, name):
+ self._insert_row(self.store_menu, None, name)
+
+ # Add a new column to the main treeview, (code from Memphis)
+ def _add_column(self, treeview, column_name, index):
+ cell = gtk.CellRendererText()
+ col_tv = gtk.TreeViewColumn(column_name, cell, text=index)
+ col_tv.set_resizable(True)
+ col_tv.set_property('clickable', True)
+
+ treeview.append_column(col_tv)
+
+ # Set the last column index added
+ self.last_col_index = index
+
+ # Insert a Row in our TreeView
+ def _insert_row(self, store, parent, name):
+ iter = store.insert_before(parent, None)
+ index = 0
+ store.set_value(iter, index , name)
+
+ return iter
+
class LogBuffer(gtk.TextBuffer):
def __init__(self, logfile):
gtk.TextBuffer.__init__(self)
self._logfile = logfile
self._pos = 0
-
self.update()
def update(self):
f = open(self._logfile, 'r')
- f.seek(self._pos)
+ init_pos = self._pos
+
+ f.seek(self._pos)
self.insert(self.get_end_iter(), f.read())
- self._pos = f.tell()
-
- f.close()
-
- return True
+ self._pos = f.tell()
+
+ f.close()
+
+ self._written = (self._pos - init_pos)
+ return True
class LogView(gtk.ScrolledWindow):
- def __init__(self, model):
+ def __init__(self):
gtk.ScrolledWindow.__init__(self)
self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
- textview = gtk.TextView(model)
- textview.set_wrap_mode(gtk.WRAP_WORD)
- textview.set_editable(False)
-
- self.add(textview)
- textview.show()
-
-class MultiLogView(gtk.Notebook):
- def __init__(self, path):
- gtk.Notebook.__init__(self)
+ self.textview = gtk.TextView()
+ self.textview.set_wrap_mode(gtk.WRAP_WORD)
+ self.textview.set_editable(False)
- self._logs_path = path
- self._pages = {}
-
- self._update()
-
- gobject.timeout_add(1000, self._update)
-
- def _add_page(self, logfile):
- full_log_path = os.path.join(self._logs_path, logfile)
- model = LogBuffer(full_log_path)
-
- view = LogView(model)
- self.append_page(view, gtk.Label(logfile))
- view.show()
-
- self._pages[logfile] = model
-
- def _update(self):
- if not os.path.isdir(self._logs_path):
- return True
-
- for logfile in os.listdir(self._logs_path):
- if self._pages.has_key(logfile):
- self._pages[logfile].update()
- else:
- self._add_page(logfile)
-
- return True
+ self.add(self.textview)
+ self.textview.show()
class Interface:
def __init__(self):
- path = os.path.join(env.get_profile_path(), 'logs')
+ path = None
viewer = MultiLogView(path)
- viewer.show()
- self.widget = viewer
- \ No newline at end of file
+ self.widget = viewer.hbox
+
diff --git a/shell/console/memphis.py b/shell/console/memphis.py
index 5e4e8a2..e533eb1 100644
--- a/shell/console/memphis.py
+++ b/shell/console/memphis.py
@@ -1,5 +1,21 @@
#!/usr/bin/env python
+# Copyright (C) 2006, Eduardo Silva (edsiper@gmail.com).
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# 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 General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
import sys, os
import string
import wnck
@@ -44,7 +60,6 @@ class Interface:
class Data:
- treeview = None
last_col_index = 0
store_data_cols = []
diff --git a/shell/console/terminal.py b/shell/console/terminal.py
index 3a6e445..e30489f 100644
--- a/shell/console/terminal.py
+++ b/shell/console/terminal.py
@@ -1,3 +1,24 @@
+#!/usr/bin/python
+
+# Copyright (C) 2006, Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# 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 General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+
+# Modified by Eduardo Silva, edsiper@gmail.com
+
import ConfigParser
import os.path