Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/datastoretree.py
diff options
context:
space:
mode:
authorolpc user <olpc@localhost.localdomain>2010-01-30 13:13:29 (GMT)
committer olpc user <olpc@localhost.localdomain>2010-01-30 13:13:29 (GMT)
commitf8a54f5c2f4487f264fe4647cec62599db93d063 (patch)
tree8758b1412c524129dad7e90a4da6b463a85ed96f /datastoretree.py
initial save 1-30-2010 bangladesh
Diffstat (limited to 'datastoretree.py')
-rw-r--r--datastoretree.py228
1 files changed, 228 insertions, 0 deletions
diff --git a/datastoretree.py b/datastoretree.py
new file mode 100644
index 0000000..9cd80f4
--- /dev/null
+++ b/datastoretree.py
@@ -0,0 +1,228 @@
+#!/usr/bin/env python
+# Copyright (C) 2008, One Laptop Per Child
+#
+# This program is jobjectree 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 os, sys, time
+
+from sugar.datastore import datastore
+from sugar import profile
+from sugar import util
+
+from gettext import gettext as _
+
+#major packages
+import gtk
+import gtk.glade
+#import pydebug
+#from pydebug import pydebug_instance
+
+# Initialize logging.
+import logging
+from sugar import logger
+#Get the standard logging directory.
+std_log_dir = logger.get_logs_dir()
+_logger = logging.getLogger('PyDebug')
+
+class DataStoreTree():
+ column_names = [_('Name'), _('Size'), _('Last Changed')]
+
+ def __init__(self, parent, widget=None,wTree=None):
+ self.parent = parent
+ self.treeview = widget
+ self.wTree = wTree
+ self.init_model()
+ self.init_columns()
+ self.connect_object()
+ self.limit=10
+ self.journal_page_size =10
+ self.journal_page_num = 0
+ self.journal_max = 0
+ self.new_directory()
+ button = self.wTree.get_widget('from_journal')
+ button.set_tooltip_text(_('Load the selected Journal XO file to the debug workplace'))
+ button = self.wTree.get_widget('to_journal')
+ button.set_tooltip_text(_('Zip up all the files in your debug workplace and store them in the Journal'))
+
+
+ def connect_object(self, wTree=None):
+ mdict = {
+ 'younger_clicked_cb':self.newer_in_journal_cb,
+ 'older_clicked_cb':self.older_in_journal_cb,
+ 'from_journal_clicked_cb':self.load_from_journal_cb,
+ 'to_journal_clicked_cb':self.save_to_journal_cb ,
+ }
+ self.wTree.signal_autoconnect(mdict)
+
+ def init_model(self):
+ #plan for the store: pixbuf,title,size,last-updated,tooltip,jobject-id
+ self.journal_model = gtk.TreeStore(gtk.gdk.Pixbuf, str,str,str,str,str,str,str,str,str,str)
+ if not self.treeview:
+ self.treeview = gtk.TreeView()
+ self.treeview.set_model(self.journal_model)
+ self.treeview.show()
+ #self.treeview.has_tooltip = True
+ self.treeview.set_tooltip_column(10)
+ #self.treeview.connect('query-tooltip',self.display_tooltip)
+ self.show_hidden = False
+
+ def init_columns(self):
+ col = gtk.TreeViewColumn()
+ col.set_title(self.column_names[0])
+ render_pixbuf = gtk.CellRendererPixbuf()
+ col.pack_start(render_pixbuf, expand=False)
+ col.add_attribute(render_pixbuf, 'pixbuf', 0)
+ render_text = gtk.CellRendererText()
+ col.pack_start(render_text, expand=True)
+ col.add_attribute(render_text, 'text', 1)
+ col.set_fixed_width(20)
+ self.treeview.append_column(col)
+ cell = gtk.CellRendererText()
+ col = gtk.TreeViewColumn(self.column_names[1], cell)
+ col.add_attribute(cell, 'text', 2)
+ self.treeview.append_column(col)
+ cell = gtk.CellRendererText()
+ col = gtk.TreeViewColumn(self.column_names[2], cell)
+ col.add_attribute(cell, 'text', 3)
+ self.treeview.append_column(col)
+
+
+ def get_datastore_list(self, next=False):
+ dslist = []
+ """
+ if not next:
+ self.journal_page_num -= 1
+ else:
+ self.journal_page_num += 1
+ if self.journal_page_num < 0: self.journal_page_num = 0
+ if self.journal_max != 0:
+ if self.journal_page_num * self.journal_page_size >= self.journal_max:
+ self.journal_page_num -= 1
+ #_logger.debug('fetch datastore data. limit:%s. offset: %s'%(self.limit,self.journal_page_num * self.journal_page_size))
+ #(results,count)=datastore.find({'limit':self.limit,'offset':self.journal_page_num * self.journal_page_size})
+ """
+ results,count=datastore.find({'Activity':'org.laptop.PyDebug'})
+ if count < self.limit:
+ self.journal_max = self.journal_page_num * self.journal_page_size + count
+ _logger.debug( 'datastoretree-get_datastore_list: count= %s'%count)
+ keys = ('title','size','timestamp','activity','package','mime_type','file_path')
+ for jobject in results:
+ itemlist = [None,]
+ datastoredict=jobject.get_metadata().get_dictionary() #get the property dictionary
+ src = jobject.get_file_path() #returns the full path of the file
+ datastoredict['object_id'] = jobject.object_id
+ if src == '': #if null, there is no file related to this meta data
+ jobject.destroy()
+ continue #go get the next iterations
+ info = os.stat(src) #get the directory information about this file
+ #add in the info that we intend to use
+ datastoredict['size'] = info.st_size
+ datastoredict['file_path'] = src
+ for key in keys:
+ if datastoredict.has_key(key):
+ if key == 'timestamp':
+ pkg = time.strftime('%Y-%m-%d %H:%M:%S',time.gmtime(float(datastoredict[key])))
+ elif key == 'title':
+ pkg = datastoredict[key][:18]
+ else:
+ pkg = '%s'%(datastoredict[key])
+ else:
+ pkg = ''
+ itemlist.append(pkg)
+ itemlist.append(datastoredict['title'])
+ itemlist.append(jobject.object_id)
+ text = 'Mime_type: %s, Activity: %s, Package: %s'%(datastoredict.get('mime_type',''),
+ datastoredict.get('activity','').split('.')[-1:][0],
+ datastoredict.get('package',''))
+ itemlist.append(text)
+ #_logger.debug('journal tooltip:%s'%text)
+ dslist.append(itemlist)
+ jobject.destroy()
+ return dslist
+
+ def new_directory(self,piter = None, next=True):
+ journal_list = self.get_datastore_list(next)
+ for journal_selected_data in journal_list:
+ appended_iter = self.journal_model.append(piter, journal_selected_data )
+ model=self.journal_model
+ appended_path = model.get_path(appended_iter)
+
+ def file_pixbuf(self, filename):
+ folderpb = self.get_icon_pixbuf('STOCK_DIRECTORY')
+ filepb = self.get_icon_pixbuf('STOCK_FILE')
+ if os.path.isdir(filename):
+ pb = folderpb
+ else:
+ pb = filepb
+ return pb
+
+ def get_icon_pixbuf(self, stock):
+ return self.treeview.render_icon(stock_id=getattr(gtk, stock),
+ size=gtk.ICON_SIZE_MENU,
+ detail=None)
+
+ def get_treeview(self):
+ return self.treeview
+
+ def newer_in_journal_cb(self,button):
+ _logger.debug('younger call back')
+ self.get_datastore_list(next=False)
+
+ def older_in_journal_cb(self,button):
+ _logger.debug('older call back')
+ self.get_datastore_list(next=True)
+
+ def save_to_journal_cb(self,button):
+ self.parent.write_binary_to_datastore()
+
+ def load_from_journal_cb(self,button):
+ selection=self.treeview.get_selection()
+ (model,iter)=selection.get_selected()
+ if iter == None:
+ self.parent.alert(_('Must select Journal item to Load'))
+ return
+ object_id = model.get(iter,9)
+ _logger.debug('object id %s from journal'%object_id)
+ self.parent.try_to_load_from_journal(object_id)
+
+ def datastore_row_activated_cb(self):
+ self.load_from_journal_cb()
+
+ def display_tooltip(self, widget,x,y,mode,tooltip):
+ _logger.debug('in display_tooltip')
+ tooltip.show()
+ return True
+
+def main():
+ gtk.main()
+
+if __name__ == "__main__":
+ # Create a new window
+ """window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+ window.set_size_request(400, 300)
+ window.show()
+ """
+ wTree=gtk.glade.XML('/home/olpc/Activities/PyDebug.activity/project.glade')
+ top = wTree.get_widget('toplevel')
+ top.show()
+ file_system = wTree.get_widget('journal')
+
+ #pydebug.Activity.set_canvas(pydebug_instance,self.contents)
+ flcdexample = DataStoreTree(None, file_system,wTree)
+
+ #flcdexample.connect_object(mdict)
+ main()
+
+