Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/YardStickActivity.py
diff options
context:
space:
mode:
Diffstat (limited to 'YardStickActivity.py')
-rw-r--r--YardStickActivity.py1400
1 files changed, 1400 insertions, 0 deletions
diff --git a/YardStickActivity.py b/YardStickActivity.py
new file mode 100644
index 0000000..66ee52d
--- /dev/null
+++ b/YardStickActivity.py
@@ -0,0 +1,1400 @@
+# Copyright 2011-2012 Almira Cayetano
+# Copyright 2011-2012 Christian Joy Aranas
+# Copyright 2011-2012 Ma. Rowena Solamo
+# Copyright 2011-2012 Rommel Feria
+# Copyright 2007-2008 One Laptop Per Child
+#
+# 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
+#
+# This program is a project of the University of the Philippines, College
+# of Engineering, Department of Computer Science intended for
+# educational purposes. If you have any suggestions and comments, you can contact us
+# with the following email addresses :
+#
+# Almira Cayetano - almiracayetano@gmail.com
+# Christian Joy Aranas - cjmaranas@gmail.com
+# Ma. Rowena Solamo - rcsolamo@dcs.upd.edu.ph
+# Rommel Feria - rpferia@dcs.upd.edu.ph
+
+import pygtk
+pygtk.require('2.0')
+import gtk, gobject
+from Models import*
+from Template import Template
+from Bundler import Bundler
+import datetime
+import pango
+import hippo
+import logging
+import telepathy
+
+import cjson
+import logging
+import telepathy
+from dbus.service import method, signal
+from dbus.gobject_service import ExportedGObject
+
+from sugar.activity.activity import Activity, ActivityToolbox
+from sugar.activity import activity
+from sugar.graphics import style
+from sugar.graphics.alert import NotifyAlert
+from sugar.presence import presenceservice
+from sugar.presence.tubeconn import TubeConnection
+
+from telepathy.interfaces import (
+ CHANNEL_INTERFACE, CHANNEL_INTERFACE_GROUP, CHANNEL_TYPE_TEXT,
+ CONN_INTERFACE_ALIASING)
+from telepathy.constants import (
+ CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES,
+ CHANNEL_TEXT_MESSAGE_TYPE_NORMAL)
+from telepathy.client import Connection, Channel
+
+SERVICE = "org.laptop.YardStick"
+IFACE = SERVICE
+PATH = "/org/laptop/YardStick"
+
+
+BORDER_COLOR = '#FFDE00'
+BACKGROUND_COLOR = '#66CC00'
+BUTTON_COLOR = '#097054'
+WHITE = '#FFFFFF'
+BLUE = '#82CAFA'
+PINK = '#FF0198'
+
+restrictions_level = ["2", "3", "4", "5", "6", "7", "8", "9"]
+restrictions_category = ["1", "2", "3", "4", "5", "6", "7", "8", "9"]
+RUBRICTITLE = []
+RUBRICLIST = []
+
+
+def theme_button(button):
+
+ button.modify_bg(gtk.STATE_NORMAL, gtk.gdk.color_parse(BLUE))
+ return button
+
+def image_button(button, path):
+ pixbufanim = gtk.gdk.PixbufAnimation(path)
+ image = gtk.Image()
+ image.set_from_animation(pixbufanim)
+ image.show()
+ button.add(image)
+ return button
+
+def theme_box(box, color):
+ eb = gtk.EventBox()
+ box.set_border_width(5)
+ eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(color))
+ eb.add(box)
+
+ return eb
+
+class YardStickActivity(activity.Activity):
+#class YardStickActivity():
+ def __init__(self, handle):
+# def __init__(self):
+ Activity.__init__(self, handle)
+ self.set_title('YardStick Activity')
+
+ toolbox = ActivityToolbox(self)
+ self.set_toolbox(toolbox)
+ toolbox.show()
+
+ self.pservice = presenceservice.get_instance()
+
+ owner = self.pservice.get_owner()
+ self.owner = owner
+ self.owner_nick = owner.props.nick
+ self.is_exists = False
+ self.overwrite = False
+ self.current_category_id = None
+# self.owner_nick = "cnix"
+
+ self.yardstickDB = YardStickDB()
+ is_newlycreated = self.yardstickDB.connect_db(self.owner_nick)
+ if(is_newlycreated):
+ template = Template(self.owner_nick, self.yardstickDB)
+ logging.debug("ScorepadDB --> template")
+ template.save_template()
+ logging.debug("ScorepadDB -->save_template")
+
+ list = self.yardstickDB.queryall_rubric(1)
+
+ for temp in list:
+ RUBRICLIST.append(temp)
+ RUBRICTITLE.append(temp.title)
+
+ list = self.yardstickDB.queryall_rubric(0)
+
+ for temp in list:
+ RUBRICLIST.append(temp)
+ RUBRICTITLE.append(temp.title)
+
+ self.main_table_eb = gtk.EventBox()
+ self.main_table = gtk.Table(1,3,True)
+ self.main_table_eb.add(self.main_table)
+ self.main_table_eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ self.main_table_eb.set_border_width(20)
+
+ self.rubric_box = gtk.Table(12,3, True)
+ self.processpanel = gtk.Frame()
+ self.processpanel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ self.processpanel.set_border_width(10)
+ self.processpanel.set_label("Welcome to YardStick!")
+ logo = gtk.Image()
+ logo.set_from_file("images/homepage.png")
+ logo.show()
+ self.rubric_box.attach(logo,0,3,0,12)
+
+ self.processpanel.add(self.rubric_box)
+
+ self.hpaned_window = gtk.HPaned()
+ self.hpaned_window.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+
+ self.left_hpaned = self.create_rubric_list()
+ self.hpaned_window.add1(self.left_hpaned)
+ self.hpaned_window.set_position(270)
+
+ self.hpaned_window.add2(self.processpanel)
+
+ self.main_event_box = gtk.EventBox()
+ self.main_event_box.add(self.hpaned_window)
+ self.main_event_box.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ self.main_event_box.show_all()
+ self.set_canvas(self.main_event_box)
+
+
+ self.is_shared = False
+ self.text_channel = None
+ if self.shared_activity:
+ logging.debug('Activity joined')
+ self.connect('joined', self._joined_cb)
+ if self.get_shared():
+ self._joined_cb(self)
+ else:
+ logging.debug('Activity shared')
+ self.connect('shared', self._shared_cb)
+
+# self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
+# self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS)
+# self.window.set_title("YardStick")
+# self.window.resize(730,650)
+# self.window.add(self.main_event_box)
+# self.window.show_all()
+
+ def load_window(self):
+ self.left_hpaned.destroy()
+ self.left_hpaned = self.create_rubric_list()
+ self.hpaned_window.add1(self.left_hpaned)
+
+ self.processpanel.set_label("Welcome to YardStick!")
+
+ logo = gtk.Image()
+ logo.set_from_file("images/homepage.png")
+ logo.show()
+
+ self.rubric_box.attach(logo,0,3,0,12)
+ self.processpanel.add(self.rubric_box)
+
+ self.hpaned_window.add2(self.processpanel)
+ self.hpaned_window.show_all()
+
+ def create_rubric_list(self):
+ rubric_list_table = gtk.Table(12,1,True)
+
+ tree_store = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN)
+
+ count = 0
+ for r in RUBRICTITLE:
+ tree_store.append(None, (r + " - " +str(RUBRICLIST[count].author),None))
+ count = count+1
+
+ scrolled_window = gtk.ScrolledWindow()
+ scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ scrolled_window.set_border_width(5)
+
+ self.model = gtk.ListStore(gobject.TYPE_STRING)
+ self.tree_view = gtk.TreeView(tree_store)
+
+ scrolled_window.add_with_viewport (self.tree_view)
+ self.tree_view.show()
+
+ self.cell = gtk.CellRendererText()
+
+ self.column = gtk.TreeViewColumn("Rubrics List", self.cell, text=0)
+
+ self.tree_view.append_column(self.column)
+
+ share_button = gtk.Button()
+ share_button = image_button(share_button,"images/share.png")
+ share_button = theme_button(share_button)
+
+ box = gtk.HBox(False,2)
+ new_rubric_button = gtk.Button()
+ new_rubric_button = image_button(new_rubric_button,"images/addnew.png")
+ new_rubric_button = theme_button(new_rubric_button)
+ new_rubric_button.connect("clicked", self.enter_row_column, "Rubric")
+ box.add(new_rubric_button)
+ box = theme_box(box,BUTTON_COLOR)
+
+ rubric_list_table.attach(box,0,1,11,12)
+
+ logo = gtk.Image()
+ logo.set_from_file("images/YardStick.png")
+ logo.show()
+
+ self.tree_view.connect("row-activated", self.view_rubric_details)
+ self.tree_view.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(BLUE))
+ rubric_list_table.attach(logo, 0,1,0,4)
+
+ rubric_list_table.attach(scrolled_window,0,1,4,11)
+ rubric_list_table.show_all()
+ scrolled_window.show_all()
+
+ return rubric_list_table
+
+ def view_rubric_details(self,widget,row,col):
+ r = row[0]
+ self.selected_rubric = r
+ rubric = RUBRICLIST[r]
+ rubric_id = RUBRICLIST[r].rubric_id
+ print "almira"+str(RUBRICLIST[r].rubric_id)
+ self.selected_rubric_id = rubric_id
+ category = self.yardstickDB.queryall_category(rubric_id)
+ category_id = category[0].category_id
+ row = len(category)+1
+
+ c = len(self.yardstickDB.query_level(category_id))+1
+ column_names = self.yardstickDB.query_level(category_id)
+ level_names = []
+
+ for i in column_names:
+ level_names.append(i.name)
+
+ levels = []
+
+ for i in range(c-1):
+ level = []
+ for j in range(row-1):
+ category_id = category[j].category_id
+ level_temp = self.yardstickDB.query_level(category_id)
+ level.append(level_temp[i].description)
+ levels.append(level)
+
+ tree_store = self.create_tree_store(c)
+
+ column = []
+
+ for i in range(len(levels)):
+ column.append(levels[i])
+
+ rubric_id = rubric.rubric_id
+ category = self.yardstickDB.queryall_category(rubric_id)
+ tuple = []
+ for i in range(len(category)):
+ tuple = []
+ tuple.append(category[i].name + " (" + str(category[i].percentage) + ")")
+
+ for j in range(c-1):
+ tuple.append(column[j][i])
+
+ tree_store.append(None, tuple)
+
+ view = gtk.TreeView(tree_store)
+ view.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(BLUE))
+ view.set_rules_hint(True)
+ renderer = gtk.CellRendererText()
+ renderer.props.wrap_width = 100
+ renderer.props.wrap_mode = pango.WRAP_WORD
+ column0 = gtk.TreeViewColumn("Category", renderer, text=0)
+ column0.set_resizable(True)
+ view.append_column(column0)
+
+ for i in range(len(levels)):
+ render = gtk.CellRendererText()
+ render.props.wrap_width = 100
+ render.props.wrap_mode = pango.WRAP_WORD
+ column = gtk.TreeViewColumn(column_names[i].name + " (" + str(column_names[i].points) + ")", render, text=i+1)
+ column.set_resizable(True)
+ view.append_column(column)
+
+ hbox = gtk.HBox(False, 2)
+ self.rubric_title_copy = rubric.title
+
+ edit_button = gtk.Button()
+ edit_button = image_button(edit_button,"images/edit.png")
+ edit_button = theme_button(edit_button)
+ edit_button.connect("clicked", self.edit_rubric, rubric, r, row, c, level_names, levels)
+ hbox.add(edit_button)
+
+ delete_button = gtk.Button()
+ delete_button = image_button(delete_button,"images/delete.png")
+ delete_button = theme_button(delete_button)
+ delete_button.connect("clicked", self.delete_rubric, rubric, r)
+ hbox.add(delete_button)
+
+ share_button = gtk.Button()
+ share_button = image_button(share_button,"images/share.png")
+ share_button = theme_button(share_button)
+ share_button.connect("clicked", self.share_cb)
+ hbox.add(share_button)
+
+ send_sp = gtk.Button()
+ send_sp = image_button(send_sp,"images/sendtoscorepad.png")
+ send_sp = theme_button(send_sp)
+ send_sp.connect("clicked", self.send_to_ScorePad)
+ hbox.add(send_sp)
+
+ hbox = theme_box(hbox, BUTTON_COLOR)
+
+ author_img = gtk.Image()
+ author_img.set_from_file("images/author.png")
+ author_text = gtk.Entry()
+ author_text.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ author_text.set_text(rubric.author)
+
+ description_img = gtk.Image()
+ description_img.set_from_file("images/description.png")
+ description_text = gtk.Entry()
+ description_text.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ description_text.set_text(rubric.description)
+
+ vbox1 = gtk.VBox(False,2)
+ vbox1.add(author_img)
+ vbox1.add(description_img)
+
+ vbox2 = gtk.VBox(False,2)
+ vbox2.add(author_text)
+ vbox2.add(description_text)
+
+ box = view
+ box = theme_box(box,BACKGROUND_COLOR)
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_AUTOMATIC)
+ sw.add_with_viewport(box)
+ sw.set_border_width(5)
+
+ self.processpanel.destroy()
+
+ design = gtk.Image()
+ design.set_from_file("images/child.png")
+
+ self.view_rubric_table = gtk.Table(12,3,True)
+ self.view_rubric_table.attach(vbox1,0,1,0,2)
+ self.view_rubric_table.attach(vbox2,1,2,0,2)
+ self.view_rubric_table.attach(design,2,3,0,2)
+ self.view_rubric_table.attach(sw,0,3,2,11)
+ self.view_rubric_table.attach(hbox,0,3,11,12)
+
+ self.processpanel.add(self.view_rubric_table)
+ self.processpanel.set_label(rubric.title + " Details")
+
+ self.hpaned_window.add2(self.processpanel)
+ self.hpaned_window.show_all()
+
+ def edit_rubric(self, widget, rubric, r, row, column, levels, level_description):
+
+ title_img = gtk.Image()
+ title_img.set_from_file("images/title.png")
+ author_img = gtk.Image()
+ author_img.set_from_file("images/author.png")
+ self.title_entry = gtk.Entry(50)
+ self.title_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ self.title_entry.set_text(rubric.title)
+ self.author_entry = gtk.Entry(50)
+ self.author_entry.set_text(rubric.author)
+ self.author_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ self.description_field = gtk.TextView()
+ self.description_field.set_wrap_mode(gtk.WRAP_WORD)
+ df_buffer = self.description_field.get_buffer()
+ df_buffer.set_text(rubric.description)
+ self.description_field.set_border_width(3)
+ self.description_field.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BUTTON_COLOR))
+ df_sw = gtk.ScrolledWindow()
+ df_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ df_sw.add_with_viewport(self.description_field)
+
+ self.category_entries = []
+ self.level_entries = []
+ self.text_entries = []
+
+ hbox = gtk.HBox(False,2)
+
+ self.checkbox = gtk.CheckButton("Enable Points")
+ self.checkbox = theme_button(self.checkbox)
+
+ is_enabled = self.yardstickDB.is_points_enabled(rubric.rubric_id)
+ self.checkbox.set_active(is_enabled)
+ self.checkbox.connect("clicked", self.enable_points)
+ self.rubric_box.attach(self.checkbox,0,1,11,12)
+
+ self.points_button = gtk.Button()
+ self.points_button = image_button(self.points_button,"images/editpoints.png")
+
+ if is_enabled :
+ self.points_button.set_sensitive(True)
+ else:
+ self.points_button.set_sensitive(False)
+ self.points_button = theme_button(self.points_button)
+ hbox.add(self.points_button)
+
+ self.update_button = gtk.Button()
+ self.update_button = image_button(self.update_button,"images/update.png")
+ self.update_button = theme_button(self.update_button)
+ self.update_button.connect("clicked", self.update_warning, rubric, r)
+ hbox.add(self.update_button)
+
+ hbox = theme_box(hbox, BUTTON_COLOR)
+
+ self.rubric_text_view_table = gtk.Table((row*5)+1,(column*5)+1,True)
+ rubric_text_eb = gtk.EventBox()
+ rubric_text_eb.add(self.rubric_text_view_table)
+ rubric_text_eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+
+ categories = self.yardstickDB.queryall_category(rubric.rubric_id)
+ category_names = []
+ category_ids = []
+ description = []
+
+ for i in categories:
+ category_names.append(i.name)
+ category_ids.append(i.category_id)
+
+ for i in category_ids:
+ level = self.yardstickDB.query_level(i)
+
+ for j in level:
+ description.append(j.description)
+
+ self.points_button.connect("clicked", self.points_cb, rubric, categories, level)
+
+ left = 1
+ right = 5
+ up = 1
+ down = 5
+ level_counter = 0
+ category_counter = 0
+ description_counter = 0
+ for i in range(row):
+ for j in range(column):
+
+ if i == 0 and j == 0:
+ self.level_label = gtk.Label("Level")
+ self.category_label = gtk.Label("Category")
+ self.rubric_text_view_table.attach(self.level_label,1,5,1,3)
+ self.rubric_text_view_table.attach(self.category_label,1,5,3,5)
+ left += 5
+ right += 5
+ elif i == 0:
+ temp = gtk.TextView()
+ temp.set_wrap_mode(gtk.WRAP_WORD)
+ buffer = temp.get_buffer()
+ buffer.set_text(levels[level_counter])
+ level_counter += 1
+ self.level_entries.append(buffer)
+ temp.set_border_width(3)
+ temp.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(PINK))
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_NEVER)
+ sw.add(temp)
+ self.rubric_text_view_table.attach(sw, left, right, up, down)
+ left += 5
+ right += 5
+ elif j == 0:
+ temp = gtk.TextView()
+ temp.set_wrap_mode(gtk.WRAP_WORD)
+ buffer = temp.get_buffer()
+ buffer.set_text(category_names[category_counter])
+ category_counter += 1
+ self.category_entries.append(buffer)
+ temp.set_border_width(3)
+ temp.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(PINK))
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_NEVER)
+ sw.add(temp)
+ self.rubric_text_view_table.attach(sw, left, right, up, down)
+ left += 5
+ right += 5
+ else:
+ temp = gtk.TextView()
+ temp.set_wrap_mode(gtk.WRAP_WORD)
+ buffer = temp.get_buffer()
+ buffer.set_text(description[description_counter])
+ description_counter += 1
+ self.text_entries.append(buffer)
+ temp.set_border_width(3)
+ temp.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BUTTON_COLOR))
+ temp.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE))
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC,gtk.POLICY_NEVER)
+ sw.add(temp)
+ self.rubric_text_view_table.attach(sw, left, right, up, down)
+ left += 5
+ right += 5
+ left = 1
+ right = 5
+ up += 5
+ down += 5
+
+ self.rubricVB1 = gtk.VBox(False,0)
+ self.rubricVB2 = gtk.VBox(False,0)
+
+ self.processpanel.destroy()
+ self.processpanel.add(self.rubric_box)
+ self.processpanel.set_label("Rubric Maker")
+
+ self.rubricVB1.add(title_img)
+ self.rubricVB1.add(author_img)
+
+ description_frame = gtk.Frame()
+ description_frame.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ description_frame.set_border_width(5)
+ description_frame.set_label("Description")
+ description_frame.add(df_sw)
+
+ self.rubricVB2.add(self.title_entry)
+ self.rubricVB2.add(self.author_entry)
+
+ self.rubric_box.attach(self.rubricVB1, 0,1,0,2)
+ self.rubric_box.attach(self.rubricVB2, 1,2,0,2)
+ self.rubric_box.attach(description_frame,2,3,0,2)
+ self.rubric_box.attach(hbox, 1,3,11,12)
+
+ sw_eb = gtk.EventBox()
+
+ self.scrolled_window = gtk.ScrolledWindow()
+ self.scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
+ self.scrolled_window.add_with_viewport(rubric_text_eb)
+ self.scrolled_window = theme_box(self.scrolled_window, BORDER_COLOR)
+
+ sw_eb.add(self.scrolled_window)
+ self.rubric_box.attach(sw_eb, 0,3,2,11)
+
+ self.hpaned_window.add2(self.processpanel)
+ self.hpaned_window.show_all()
+
+ def points_cb(self,widget,rubric, categories,levels):
+ title_img = gtk.Image()
+ title_img.set_from_file("images/title.png")
+ author_img = gtk.Image()
+ author_img.set_from_file("images/author.png")
+ self.title_entry = gtk.Entry(50)
+ self.title_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ self.title_entry.set_text(rubric.title)
+ self.author_entry = gtk.Entry(50)
+ self.author_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ self.author_entry.set_text(rubric.author)
+ self.description_field = gtk.TextView()
+ self.description_field.set_wrap_mode(gtk.WRAP_WORD)
+ df_buffer = self.description_field.get_buffer()
+ df_buffer.set_text(rubric.description)
+ self.description_field.set_border_width(3)
+ self.description_field.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BUTTON_COLOR))
+ df_sw = gtk.ScrolledWindow()
+ df_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ df_sw.add_with_viewport(self.description_field)
+
+ self.rubricVB1 = gtk.VBox(False,0)
+ self.rubricVB2 = gtk.VBox(False,0)
+
+ self.processpanel.destroy()
+ self.processpanel.add(self.rubric_box)
+ self.processpanel.set_label("Rubric Maker")
+
+ self.rubricVB1.add(title_img)
+ self.rubricVB1.add(author_img)
+
+ description_frame = gtk.Frame()
+ description_frame.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ description_frame.set_border_width(5)
+ description_frame.set_label("Description")
+ description_frame.add(df_sw)
+
+ self.rubricVB2.add(self.title_entry)
+ self.rubricVB2.add(self.author_entry)
+
+ self.rubric_box.attach(self.rubricVB1, 0,1,0,2)
+ self.rubric_box.attach(self.rubricVB2, 1,2,0,2)
+ self.rubric_box.attach(description_frame,2,3,0,2)
+
+ self.level_attr = []
+ self.category_attr = []
+
+ middlebox = gtk.HBox(False,20)
+ middlebox.add(self.build_pointbox(levels, 0))
+ middlebox.add(self.build_pointbox(categories, 1))
+ middlebox = theme_box(middlebox, BLUE)
+ self.rubric_box.attach(middlebox,0,3,3,11)
+
+ img_box = gtk.HBox(False,20)
+ level_img = gtk.Image()
+ level_img.set_from_file("images/levels.png")
+ category_img = gtk.Image()
+ category_img.set_from_file("images/categories.png")
+ img_box.add(level_img)
+ img_box.add(category_img)
+ img_box = theme_box(img_box, BLUE)
+
+ self.rubric_box.attach(img_box,0,3,2,3)
+
+ hbox = gtk.HBox(False,2)
+
+ save_points_button = gtk.Button()
+ save_points_button = image_button(save_points_button,"images/save.png")
+ save_points_button = theme_button(save_points_button)
+ save_points_button.connect("clicked", self.save_points, rubric.rubric_id)
+ hbox.add(save_points_button)
+ hbox = theme_box(hbox, BUTTON_COLOR)
+ self.rubric_box.attach(hbox, 2,3,11,12)
+
+ self.hpaned_window.add2(self.processpanel)
+ self.hpaned_window.show_all()
+
+
+ def enable_points(self, widget, data=None):
+ if self.checkbox.get_active():
+ self.points_button.set_sensitive(True)
+ else:
+ self.points_button.set_sensitive(False)
+
+
+ def build_pointbox(self, elements, checker):
+ label_vbox = gtk.VBox(False,0)
+ spinner_vbox = gtk.VBox(False,0)
+ count = len(elements)
+ equal_percentage = 100.0/count
+
+ for element in elements:
+ label_temp = gtk.Label(element.name)
+ label_vbox.add(label_temp)
+ if checker == 0:
+ initial = element.points
+ else:
+ initial = element.percentage
+ if initial == 0.0:
+ initial = equal_percentage
+
+ adj = gtk.Adjustment(initial,1,100,10,0,0)
+ spinner = gtk.SpinButton(adj, 0, 0)
+ spinner.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BLUE))
+ spinner.set_wrap(True)
+ spinner_vbox.add(spinner)
+ if checker == 0:
+ tuple = (element.name, spinner)
+ self.level_attr.append(tuple)
+ else:
+ tuple = (element.category_id, spinner)
+ self.category_attr.append(tuple)
+ hbox = gtk.HBox(False,0)
+ hbox.add(label_vbox)
+ hbox.add(spinner_vbox)
+
+ return hbox
+
+ def save_points(self, widget, rubric_id):
+
+ percent = 0
+ for attr in self.category_attr:
+ id = attr[0]
+ spinner = attr[1]
+ percent = percent + spinner.get_value_as_int()
+
+ if percent > 100 or percent < 100:
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Total percentage must exactly be 100%")
+ md.run()
+ md.destroy()
+ else:
+ self.yardstickDB.update_enablepoints(rubric_id,1)
+ for attr in self.category_attr:
+ id = attr[0]
+ spinner = attr[1]
+ self.yardstickDB.update_percentage(id, spinner.get_value_as_int())
+ for attr2 in self.level_attr:
+ name = attr2[0]
+ spinner2 = attr2[1]
+ self.yardstickDB.update_points(id, name, spinner2.get_value_as_int())
+
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Points saved!")
+ md.run()
+ md.destroy()
+ self.processpanel.destroy()
+ self.load_window()
+
+
+ def update_warning(self, widget, rubric, r):
+ warning = gtk.MessageDialog(parent = None,buttons = gtk.BUTTONS_YES_NO, \
+ flags =gtk.DIALOG_DESTROY_WITH_PARENT,\
+ type = gtk.MESSAGE_WARNING,\
+ message_format = "Are you sure you want to save changes?")
+ result = warning.run()
+
+ if(result == gtk.RESPONSE_YES):
+ count = self.yardstickDB.rubric_title_exists(self.title_entry.get_text())
+ warning.destroy()
+ if(count == None):
+ self.update_rubric(widget,rubric,r)
+ self.processpanel.destroy()
+ self.load_window()
+ print "Count if"
+ else:
+ print self.title_entry.get_text() + " " + self.rubric_title_copy
+ if(self.title_entry.get_text() == self.rubric_title_copy):
+ self.update_rubric(widget,rubric,r)
+ self.processpanel.destroy()
+ self.load_window()
+ print "Count else title if"
+ else:
+ warning2 = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Name already exists. Please rename the rubric.")
+ result = warning2.run()
+ warning2.destroy()
+ elif(result == gtk.RESPONSE_NO):
+ warning.destroy()
+ warning.destroy()
+
+ def update_rubric(self,widget,orig_rubric,r):
+
+ title = self.title_entry.get_text()
+ author = self.author_entry.get_text()
+ description_buffer = self.description_field.get_buffer()
+ start = description_buffer.get_start_iter()
+ end = description_buffer.get_end_iter()
+ description = description_buffer.get_text(start,end,True)
+
+ self.get_texts()
+ #self.processpanel.destroy()
+
+ if self.checkbox.get_active():
+ enable_points = 1
+ else :
+ enable_points = 0
+
+ rubric = Rubric(orig_rubric.rubric_id, title, author, description, 0, self.owner_nick, "",enable_points)
+ self.yardstickDB.update_rubric(rubric)
+ rubric = self.yardstickDB.query_rubric(orig_rubric.rubric_id)
+
+ RUBRICTITLE[r] = rubric.title
+ RUBRICLIST[r] = rubric
+
+ level = []
+ category_id_retrieve = []
+
+ temporary = self.yardstickDB.queryall_category(orig_rubric.rubric_id)
+
+ for i in temporary:
+ category_id_retrieve.append(i.category_id)
+
+ level_id_retrieve = []
+
+ for i in category_id_retrieve:
+
+ temporary = self.yardstickDB.query_level(i)
+
+ for j in temporary:
+ level_id_retrieve.append(j.level_id)
+
+ for i in self.levels:
+ temp = Level()
+ temp.name = i
+ temp.rubric_id = orig_rubric.rubric_id
+ level.append(temp)
+
+ counter = 0
+ category_counter = 0
+ level_counter = 0
+ category_array = []
+
+ for i in self.categories:
+ for k in level:
+ k.description = self.criteria_description[counter]
+ counter += 1
+ k.category_id = category_id_retrieve[category_counter]
+ k.level_id = level_id_retrieve[level_counter]
+ level_counter += 1
+
+ category = Category()
+ category.name = i
+ category.description = "NONE"
+ category.rubric_id = orig_rubric.rubric_id
+ category.category_id = category_id_retrieve[category_counter]
+ category_counter += 1
+ category_array.append(category)
+ self.yardstickDB.update_levels(level)
+ self.yardstickDB.update_categories(category_array)
+ #self.load_window()
+
+ def delete_rubric(self, widget, rubric, r):
+
+ warning = gtk.MessageDialog(parent = None,buttons = gtk.BUTTONS_YES_NO, \
+ flags =gtk.DIALOG_DESTROY_WITH_PARENT,\
+ type = gtk.MESSAGE_WARNING,\
+ message_format = "Are you sure you want to delete the rubric?")
+ result = warning.run()
+ rubric_id = rubric.rubric_id
+
+ if result == gtk.RESPONSE_YES:
+ RUBRICTITLE.remove(rubric.title)
+ RUBRICLIST.remove(rubric)
+ self.yardstickDB.delete_rubric(rubric_id)
+ warning.destroy()
+ self.processpanel.destroy()
+ self.load_window()
+ elif result == gtk.RESPONSE_NO:
+ warning.destroy()
+ warning.destroy()
+
+ def create_tree_store(self, c):
+
+ if c == 2:
+ p = gtk.TreeStore(str,str)
+ elif c == 3:
+ p = gtk.TreeStore(str,str,str)
+ elif c == 4:
+ p = gtk.TreeStore(str,str,str,str)
+ elif c == 5:
+ p = gtk.TreeStore(str,str,str,str,str)
+ elif c == 6:
+ p = gtk.TreeStore(str,str,str,str,str,str)
+ elif c == 7:
+ p = gtk.TreeStore(str,str,str,str,str,str,str)
+ elif c == 8:
+ p = gtk.TreeStore(str,str,str,str,str,str,str,str)
+ elif c == 9:
+ p = gtk.TreeStore(str,str,str,str,str,str,str,str,str)
+ return p
+
+ def enter_row_column(self,widget,label):
+
+ self.processpanel.destroy()
+ self.processpanel.set_label("Enter number of categories and levels")
+
+ self.rc_table = gtk.Table(8,3, True)
+
+ level_label = gtk.Label("Levels")
+ category_label = gtk.Label("Categories")
+
+ level_adj = gtk.Adjustment(2,2,9,1,0,0)
+ level_spinner = gtk.SpinButton(level_adj, 0, 0)
+ level_spinner.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ level_spinner.set_wrap(True)
+
+ category_adj = gtk.Adjustment(1,1,9,1,0,0)
+ category_spinner = gtk.SpinButton(category_adj, 0, 0)
+ category_spinner.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ category_spinner.set_wrap(True)
+
+ submit_button = gtk.Button()
+ submit_button = image_button(submit_button,"images/submit.png")
+ submit_button = theme_button(submit_button)
+ submit_button.connect("clicked", self.add_rubric, category_spinner, level_spinner)
+
+ vbox1 = gtk.VBox(False,2)
+ vbox2 = gtk.VBox(False,2)
+
+ button_table = gtk.Table(2,1,True)
+ button_table.attach(submit_button, 0,1,0,1)
+
+ vbox1.add(level_label)
+ vbox1.add(category_label)
+
+ vbox2.add(level_spinner)
+ vbox2.add(category_spinner)
+
+ self.rc_table.attach(vbox1,0,1,3,4)
+ self.rc_table.attach(vbox2,1,2,3,4)
+ self.rc_table.attach(button_table,1,2,4,5)
+
+ self.processpanel.add(self.rc_table)
+
+ self.hpaned_window.add2(self.processpanel)
+ self.hpaned_window.show_all()
+
+ def add_rubric(self,widget,r,c):
+ self.title_label = gtk.Label("Rubric Title")
+ self.author_label = gtk.Label("Author")
+ self.title_entry = gtk.Entry(50)
+ self.title_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ self.author_entry = gtk.Entry(50)
+ self.author_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR))
+ self.description_field = gtk.TextView()
+ self.description_field.set_wrap_mode(gtk.WRAP_WORD)
+ self.description_field.set_border_width(3)
+ self.description_field.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BUTTON_COLOR))
+ df_sw = gtk.ScrolledWindow()
+ df_sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
+ df_sw.add_with_viewport(self.description_field)
+
+ self.category_entries = []
+ self.level_entries = []
+ self.text_entries = []
+
+ hbox = gtk.HBox(False, 2)
+
+ self.finalize_button = gtk.Button()
+ self.finalize_button = image_button(self.finalize_button,"images/finalize.png")
+ self.finalize_button = theme_button(self.finalize_button)
+ self.finalize_button.connect("clicked", self.finalize_cb)
+ hbox.add(self.finalize_button)
+ hbox = theme_box(hbox, BUTTON_COLOR)
+
+ row = r.get_value_as_int() + 1
+ column = c.get_value_as_int() + 1
+ self.rubric_text_view_table = gtk.Table((row*5)+1,(column*5)+1,True)
+ rubric_text_eb = gtk.EventBox()
+ rubric_text_eb.add(self.rubric_text_view_table)
+ rubric_text_eb.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+
+ left = 1
+ right = 5
+ up = 1
+ down = 5
+
+ for i in range(row):
+ for j in range(column):
+
+ if i == 0 and j == 0:
+ self.level_label = gtk.Label("Level")
+ self.category_label = gtk.Label("Category")
+ self.rubric_text_view_table.attach(self.level_label,1,5,1,3)
+ self.rubric_text_view_table.attach(self.category_label,1,5,3,5)
+ left += 5
+ right += 5
+ elif i == 0:
+ temp = gtk.TextView()
+ temp.set_wrap_mode(gtk.WRAP_WORD)
+ buffer = temp.get_buffer()
+ self.level_entries.append(buffer)
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+ temp.set_border_width(3)
+ temp.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(PINK))
+ sw.add(temp)
+ self.rubric_text_view_table.attach(sw, left, right, up, down)
+ left += 5
+ right += 5
+ elif j == 0:
+ temp = gtk.TextView()
+ temp.set_wrap_mode(gtk.WRAP_WORD)
+ buffer = temp.get_buffer()
+ self.category_entries.append(buffer)
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+ temp.set_border_width(3)
+ temp.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(PINK))
+ sw.add(temp)
+ self.rubric_text_view_table.attach(sw, left, right, up, down)
+ left += 5
+ right += 5
+ else:
+ temp = gtk.TextView()
+ temp.set_wrap_mode(gtk.WRAP_WORD)
+ buffer = temp.get_buffer()
+ self.text_entries.append(buffer)
+ sw = gtk.ScrolledWindow()
+ sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_NEVER)
+ temp.set_border_width(3)
+ temp.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BUTTON_COLOR))
+ temp.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE))
+ sw.add(temp)
+ self.rubric_text_view_table.attach(sw, left, right, up, down)
+ left += 5
+ right += 5
+ left = 1
+ right = 5
+ up += 5
+ down += 5
+
+ self.rubricVB1 = gtk.VBox(False,3)
+ self.rubricVB2 = gtk.VBox(False, 3)
+
+ self.processpanel.destroy()
+ self.processpanel.add(self.rubric_box)
+ self.processpanel.set_label("Rubric Maker")
+ self.processpanel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ self.processpanel.set_border_width(5)
+
+ self.rubricVB1.add(self.title_label)
+ self.rubricVB1.add(self.author_label)
+
+ description_frame = gtk.Frame()
+ description_frame.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR))
+ description_frame.set_border_width(5)
+ description_frame.set_label("Description")
+ description_frame.add(df_sw)
+
+ self.rubricVB2.add(self.title_entry)
+ self.rubricVB2.add(self.author_entry)
+
+ self.rubric_box.attach(self.rubricVB1, 0,1,0,2)
+ self.rubric_box.attach(self.rubricVB2, 1,2,0,2)
+ self.rubric_box.attach(description_frame,2,3,0,2)
+ self.rubric_box.attach(hbox,2,3,11,12)
+
+ scrolled_window = gtk.ScrolledWindow()
+ scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
+ scrolled_window.add_with_viewport(rubric_text_eb)
+ scrolled_window.set_border_width(5)
+ scrolled_window = theme_box(scrolled_window, BORDER_COLOR)
+
+ self.rubric_box.attach(scrolled_window, 0,3,2,11)
+
+ self.hpaned_window.add2(self.processpanel)
+ self.hpaned_window.show_all()
+
+ def get_texts(self):
+
+ self.categories = []
+ self.levels = []
+ self.criteria_description = []
+
+ for i in self.category_entries:
+ start, end = i.get_bounds()
+ text = i.get_slice(start,end, True)
+ self.categories.append(text)
+
+ for i in self.level_entries:
+ start, end = i.get_bounds()
+ text = i.get_text(start,end, True)
+ self.levels.append(text)
+
+ for i in self.text_entries:
+ start, end = i.get_bounds()
+ text = i.get_text(start,end, True)
+ self.criteria_description.append(text)
+
+ def finalize_cb(self, widget):
+
+ rubric_id = self.yardstickDB.query_maxrubric() + 1
+ title = self.title_entry.get_text()
+ author = self.author_entry.get_text()
+ description_buffer = self.description_field.get_buffer()
+ start = description_buffer.get_start_iter()
+ end = description_buffer.get_end_iter()
+ description = description_buffer.get_text(start,end,True)
+
+ self.get_texts()
+ rubric = Rubric(None, title, author, description, 0, self.owner_nick, "",0)
+ count = self.yardstickDB.rubric_title_exists(rubric.title)
+
+ if(count == None):
+ self.yardstickDB.insert_rubric(rubric)
+ rubric_id = self.yardstickDB.query_maxrubric()
+ rubric = self.yardstickDB.query_rubric(rubric_id)
+ RUBRICLIST.append(rubric)
+ RUBRICTITLE.append(rubric.title)
+
+ counter = 0
+ for i in self.categories:
+ levels = []
+ category = Category(None, i, rubric_id, "", 0.0)
+ for j in self.levels:
+ level = Level(None, j, self.criteria_description[counter], None, rubric_id, "", 0)
+ counter += 1
+ levels.append(level)
+ self.yardstickDB.insert_criteria(category, levels)
+ self.processpanel.destroy()
+ self.load_window()
+ else:
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Name already exists. Please rename the rubric.")
+ md.run()
+ md.destroy()
+
+ def send_to_ScorePad(self, widget):
+ rubric = RUBRICLIST[self.selected_rubric]
+ categories = []
+ categories = self.yardstickDB.queryall_category(self.selected_rubric_id)
+ levels = []
+
+ self.yardstickDB.close_db()
+
+ self.scorepadDB = ScorePadDB(self.owner_nick)
+
+ if(self.scorepadDB.rubric_exists(rubric.title, rubric.author)==None):
+ self.scorepadDB.insert_rubric(rubric)
+ rubric_id = self.scorepadDB.query_maxrubric()
+ self.scorepadDB.close_db()
+
+ for category in categories:
+ self.yardstickDB = YardStickDB()
+ self.yardstickDB.connect_db(self.owner_nick)
+ levels = self.yardstickDB.query_level(category.category_id)
+ self.yardstickDB.close_db()
+ self.scorepadDB = ScorePadDB(self.owner_nick)
+ self.scorepadDB.insert_criteria2(category,levels,rubric_id)
+ self.scorepadDB.close_db()
+
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Rubric sucessfully inserted")
+ md.run()
+ md.destroy()
+ else:
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Rubric exists. Please rename the rubric title.")
+ md.run()
+ md.destroy()
+
+ self.yardstickDB = YardStickDB()
+ self.yardstickDB.connect_db(self.owner_nick)
+
+ def share_cb(self,widget,data=None):
+
+ if self.is_shared :
+ rubric = RUBRICLIST[self.selected_rubric]
+
+ bundler = Bundler()
+ rubric_bundle = bundler.bundle_rubric(rubric)
+ logging.debug("Rubric Bundle")
+ logging.debug(rubric_bundle)
+ categories = self.yardstickDB.queryall_category(rubric.rubric_id)
+ category_bundle = bundler.bundle_category(categories)
+ level_bundle_list = []
+ for category in categories:
+ levels = self.yardstickDB.query_level(category.category_id)
+ level_bundle = bundler.bundle_level(levels)
+ level_bundle_list.append(level_bundle)
+
+ self.sendbundle_cb(rubric_bundle)
+ for i in range(len(category_bundle)):
+ self.sendbundle_cb(category_bundle[i])
+ level_temp = level_bundle_list[i]
+ for level in level_temp:
+ logging.debug('Function: share_cb --> levelbundle sent')
+ self.sendbundle_cb(level)
+
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Rubric shared")
+ md.run()
+ md.destroy()
+ else:
+ md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \
+ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \
+ type = gtk.MESSAGE_INFO,\
+ message_format = "Cannot share. You are not connected to anybody.")
+ md.run()
+ md.destroy()
+
+# def destroy(self, widget, data=None):
+# gtk.main_quit()
+
+# def main(self):
+# gtk.main()
+
+
+#if __name__ == "__main__":
+# yardStick = YardStickActivity()
+# yardStick.main()
+
+ def update_status(self, nick, text):
+ text = text.split("|")
+ model_name = text[0]
+
+ if model_name == "Rubric":
+ self._alert("A Rubric was shared by", nick)
+ rubric = Rubric(None, text[2], text[3], text[4], 0, text[6], text[7], text[8])
+
+ logging.debug("Update Status->Rubric")
+
+ self.rubric_exists = self.yardstickDB.rubric_exists(rubric.rubric_sha, rubric.description)
+ if self.rubric_exists == None:
+ logging.debug("Update Status->Rubric: rubric_exists = None")
+ self.yardstickDB.insert_rubric(rubric)
+ rubric_id = self.yardstickDB.query_maxrubric()
+ rubric = self.yardstickDB.query_rubric(rubric_id)
+ RUBRICLIST.append(rubric)
+ RUBRICTITLE.append(rubric.title)
+ self.is_exists = False
+
+ logging.debug("Update Status->Rubric: rubric_exists =None; is_exists = False")
+ else:
+ logging.debug("Update Status->Rubric: rubric_exists = not None")
+ self.is_exists = True
+ logging.debug("Update Status->Rubric: is_exists = True")
+ warning = gtk.MessageDialog(parent = None,buttons = gtk.BUTTONS_YES_NO, \
+ flags =gtk.DIALOG_DESTROY_WITH_PARENT,\
+ type = gtk.MESSAGE_WARNING,\
+ message_format = "Rubric exists. Would like to overwrite?")
+ result = warning.run()
+ if(result == gtk.RESPONSE_YES):
+ logging.debug("Update Status->Rubric: response yes")
+ self.overwrite = True
+ warning.destroy()
+ self.yardstickDB.delete_rubric(self.rubric_exists)
+ self.yardstickDB.insert_rubric(rubric)
+ elif(result == gtk.RESPONSE_NO):
+ logging.debug("Update Status->Rubric: response no")
+ warning.destroy()
+ self.overwrite = False
+ warning.destroy()
+ self.processpanel.destroy()
+ self.load_window()
+
+ if model_name == "Category":
+ if self.is_exists == False or self.overwrite == True:
+ logging.debug("Update Status->Category: is_exists = False")
+ rubric_id = self.yardstickDB.query_maxrubric()
+ category = Category(None, text[2], rubric_id, text[4],text[5])
+ self.yardstickDB.insert_category(category)
+ logging.debug("Update Status->Category: is_exists = False; category_inserted")
+
+ if model_name == "Level":
+ if self.is_exists == False or self.overwrite == True:
+ logging.debug("Update Status->Level: is_exists = False")
+ rubric_id = self.yardstickDB.query_maxrubric()
+ category_id = self.yardstickDB.query_maxcategory()
+ level = Level(None, text[2], text[3], category_id, rubric_id, text[6], text[7])
+ self.yardstickDB.insert_level(level)
+ logging.debug("Update Status->Level: level inserted")
+
+ def _alert(self, title, text=None):
+ alert = NotifyAlert(timeout=3)
+ alert.props.title = title
+ alert.props.msg = text
+ self.add_alert(alert)
+ alert.connect('response', self._alert_cancel_cb)
+ alert.show()
+
+ def _alert_cancel_cb(self, alert, response_id):
+ self.remove_alert(alert)
+
+ def _shared_cb(self, sender):
+ self._setup()
+ self.is_shared = True
+ self._alert('Shared', 'The activity is shared')
+
+ def _setup(self):
+ self.text_channel = TextChannelWrapper(
+ self.shared_activity.telepathy_text_chan,
+ self.shared_activity.telepathy_conn)
+ self.text_channel.set_received_callback(self._received_cb)
+ self._alert("Activity Shared", "Connected")
+ self.shared_activity.connect('buddy-joined', self._buddy_joined_cb)
+ self.shared_activity.connect('buddy-left', self._buddy_left_cb)
+
+ def _joined_cb(self, sender):
+ if not self.shared_activity:
+ return
+ for buddy in self.shared_activity.get_joined_buddies():
+ self._buddy_already_exists(buddy)
+ self.is_shared = True
+ self._setup()
+ self._alert("Joined", "Joined Scorepad Activity")
+
+ def _received_cb(self, buddy, text):
+ if buddy:
+ if type(buddy) is dict:
+ nick = buddy['nick']
+ else:
+ nick = buddy.props.nick
+ else:
+ nick = '???'
+ self.update_status(str(nick),text)
+
+ def _buddy_joined_cb(self, sender, buddy):
+ if buddy == self.owner:
+ return
+ self._alert(str(buddy.props.nick), "joined the activity")
+
+ def _buddy_left_cb(self, sender, buddy):
+ if buddy == self.owner:
+ return
+ self._alert(str(buddy.props.nick), "left")
+
+ def _buddy_already_exists(self, buddy):
+ if buddy == self.owner:
+ return
+ self._alert(str(buddy.props.nick), "is here")
+
+ def sendbundle_cb(self, bundle):
+ text = bundle
+ if text:
+ if self.text_channel:
+ self.text_channel.send(text)
+ else:
+ print "Not connected"
+ self._alert("Bundle", "sent!")
+
+# def main(self):
+# gtk.main()
+
+class TextChannelWrapper(object):
+
+ def __init__(self, text_chan, conn):
+ self._activity_cb = None
+ self._text_chan = text_chan
+ self._conn = conn
+ self._signal_matches = []
+
+ def send(self, text):
+ if self._text_chan is not None:
+ self._text_chan[CHANNEL_TYPE_TEXT].Send(
+ CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, text)
+
+ def set_received_callback(self, callback):
+ if self._text_chan is None:
+ return
+ self._activity_cb = callback
+ m = self._text_chan[CHANNEL_TYPE_TEXT].connect_to_signal('Received',
+ self._received_cb)
+ self._signal_matches.append(m)
+
+ def _received_cb(self, identity, timestamp, sender, type_, flags, text):
+ if self._activity_cb:
+ try:
+ self._text_chan[CHANNEL_INTERFACE_GROUP]
+ except Exception:
+ nick = self._conn[
+ CONN_INTERFACE_ALIASING].RequestAliases([sender])[0]
+ buddy = {'nick': nick, 'color': '#000000,#808080'}
+ else:
+ buddy = self._get_buddy(sender)
+ self._activity_cb(buddy, text)
+ self._text_chan[
+ CHANNEL_TYPE_TEXT].AcknowledgePendingMessages([identity])
+ else:
+ print "Disconnected"
+
+ def _get_buddy(self, cs_handle):
+ pservice = presenceservice.get_instance()
+ tp_name, tp_path = pservice.get_preferred_connection()
+ conn = Connection(tp_name, tp_path)
+ group = self._text_chan[CHANNEL_INTERFACE_GROUP]
+ my_csh = group.GetSelfHandle()
+ if my_csh == cs_handle:
+ handle = conn.GetSelfHandle()
+ elif group.GetGroupFlags() & \
+ CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES:
+ handle = group.GetHandleOwners([cs_handle])[0]
+ else:
+ handle = cs_handle
+ assert handle != 0
+
+ return pservice.get_buddy_by_telepathy_handle(
+ tp_name, tp_path, handle)