From 2798d1c8b03a1ab53325fcce1378e08e919a71c9 Mon Sep 17 00:00:00 2001 From: accayetano Date: Thu, 17 May 2012 07:26:09 +0000 Subject: version 2 --- diff --git a/Bundler.py b/Bundler.py index a00ee14..9f3bb6a 100644 --- a/Bundler.py +++ b/Bundler.py @@ -1,4 +1,5 @@ from Models import * +import logging class Bundler(): @@ -9,7 +10,9 @@ class Bundler(): str(project.publish_date)+"|"+\ str(project.is_owned) + "|"+str(project.is_shared)+"|"+\ str(project.rubric_id) +"|"+project.xo_name+"|"+\ - project.project_sha + project.project_sha + "|"+str(project.total_score) + + logging.debug(project_bundle) return project_bundle @@ -18,7 +21,9 @@ class Bundler(): rubric_bundle = "Rubric|" + str(rubric.rubric_id)+"|"+rubric.title+"|"+\ rubric.author+"|"+rubric.description+"|"+\ str(rubric.is_predefined) +"|"+rubric.xo_name +"|"+\ - rubric.rubric_sha + rubric.rubric_sha+"|"+str(rubric.enable_points) + + logging.debug(rubric_bundle) return rubric_bundle @@ -28,9 +33,9 @@ class Bundler(): for category in categories: bundle = "Category|" + str(category.category_id)+"|"+category.name+"|"+\ str(category.rubric_id) +"|"+\ - category.category_sha + category.category_sha +"|"+str(category.percentage) categorylist.append(bundle) - + logging.debug(bundle) return categorylist def bundle_level(self, levels): @@ -39,8 +44,9 @@ class Bundler(): for level in levels: bundle = "Level|" + str(level.level_id) +"|"+ level.name+"|"+level.description+"|"+\ str(level.category_id)+"|"+str(level.rubric_id)+"|"+\ - level.level_sha + level.level_sha +"|"+str(level.points) levelist.append(bundle) + logging.debug(bundle) return levelist @@ -50,6 +56,7 @@ class Bundler(): score_bundle = "Score|" + str(score.score_id) + "|" + str(score.project_id) + "|" + \ str(score.rubric_id) + "|" + str(score.category_id) + "|" + str(score.level_id) + "|" + \ score.project_sha + "|" + score.rubric_sha + "|" + score.category_sha + "|" +\ - score.level_sha + "|" + str(score.count) + score.level_sha + "|" + str(score.score_count) + logging.debug(score_bundle) return score_bundle diff --git a/MANIFEST b/MANIFEST index 1aeaf1b..d1302ec 100644 --- a/MANIFEST +++ b/MANIFEST @@ -2,26 +2,40 @@ ScorePadActivity.py activity/activity.info activity/activity-scorepad.svg setup.py -images/hello2.png -images/green_button2.png -images/wel2.png Template.py Models.py Bundler.py -LessonPlanTemplate.txt pygtk_chart/data/tango.color pygtk_chart/bar_chart.py pygtk_chart/basics.py pygtk_chart/chart.py pygtk_chart/__init__.py pygtk_chart/pie_chart.py -db/cnixdb.sqlite -images/logo5.png -images/start.png -images/logo4.png -images/background.jpg pygtk_chart/chart_object.py pygtk_chart/multi_bar_chart.py pygtk_chart/label.py COPYING +images/author.png +images/date.png +images/delete.png +images/description.png +images/design1.png +images/edit.png +images/evaluate.png +images/finalize.png +images/green_button2.png +images/projectdetails.png +images/rubric.png +images/seegrades.png +images/share.png +images/subject.png +images/submit.png +images/title.png +images/update.png +images/Projects.png +images/AddProject.png +images/right.png +images/scorepad.png +images/Rubrics.png +images/left.png diff --git a/Models.py b/Models.py index c504886..a921cc7 100644 --- a/Models.py +++ b/Models.py @@ -1,35 +1,51 @@ import sqlite3 import hashlib +import logging +import os class ScorePadDB(): - - def __init__(self, nickname = ""): - - #self.scorepaddb = "/home/cnix/ThesisWorkspace2/ScorePad1.4/src/db/scorepaddb.sqlite" + + def connect_db(self, nickname = ""): + is_newlycreated = False + self.scorepaddb = str(nickname)+"db.sqlite" + if not os.path.isfile(self.scorepaddb): + logging.debug("the database already exist") - self.scorepaddb = "db/"+str(nickname)+"db.sqlite" self.connection = sqlite3.connect(self.scorepaddb) + logging.debug("ScorepadDB-->connect") self.cursor = self.connection.cursor() + try: + self.create_tables() + is_newlycreated = True + logging.debug("ScorepadDB -->create_tables") + except: + logging.debug("Exception here") + return is_newlycreated + def create_tables(self): + rubric_table = "CREATE TABLE rubric_table (rubric_id INTEGER PRIMARY KEY,\ title VARCHAR(40) NOT NULL,\ author VARCHAR(40) NOT NULL,\ description TEXT,\ is_predefined INTEGER,\ xo_name VARCHAR(50),\ - rubric_sha TEXT)" + rubric_sha TEXT,\ + enable_points INTERGER)" category_table = "CREATE TABLE category_table (category_id INTEGER PRIMARY KEY,\ name VARCHAR(40) NOT NULL,\ rubric_id INTEGER NOT NULL REFERENCES rubric_table(rubric_id),\ - category_sha TEXT)" + category_sha TEXT,\ + percentage FLOAT)" level_table = "CREATE TABLE level_table (level_id INTEGER PRIMARY KEY,\ name VARCHAR(40) NOT NULL,\ description TEXT NOT NULL,\ category_id INTEGER NOT NULL REFERENCES category_table(category_id),\ rubric_id INTEGER NOT NULL REFERENCES rubric_table(rubric_id),\ - level_sha TEXT)" + level_sha TEXT,\ + points INTEGER)" project_table = "CREATE TABLE project_table (project_id INTEGER PRIMARY KEY,\ title VARCHAR(40) NOT NULL,\ @@ -41,7 +57,8 @@ class ScorePadDB(): is_shared INTEGER,\ rubric_id INTEGER NOT NULL REFERENCES rubric_table(rubric_id),\ xo_name VARCHAR(50),\ - project_sha TEXT)" + project_sha TEXT,\ + total_score FLOAT)" score_table = "CREATE TABLE score_table (score_id INTEGER PRIMARY KEY,\ project_id INTEGER NOT NULL REFERENCES project_table(project_id),\ @@ -52,33 +69,26 @@ class ScorePadDB(): rubric_sha TEXT REFERENCES rubric_table(rubric_sha),\ category_sha TEXT REFERENCES category_table(category_sha),\ level_sha TEXT REFERENCES level_table(level_sha),\ - count INTEGER NOT NULL)" - - assessor_table = "CREATE TABLE assessor_table (assessor_id INTEGER PRIMARY KEY,\ - name TEXT NOT NULL, \ - score_id INTEGER NOT NULL REFERENCES score_table(score_id))" + score_count INTEGER NOT NULL)" self.cursor.execute(rubric_table) - print "rubric table created" + logging.debug("rubric table created") self.cursor.execute(category_table) - print "category table created" + logging.debug("category table created") self.cursor.execute(level_table) - print "level table created" + logging.debug("level table created") self.cursor.execute(project_table) - print "project table created" + logging.debug("project table created") self.cursor.execute(score_table) - print "score table created" - self.cursor.execute(assessor_table) - print "assessor table created" - self.cursor.close() - + logging.debug("score table created") + def insert_rubric(self, rubric): temp = (rubric.title, rubric.author, rubric.description, rubric.is_predefined, - rubric.xo_name, rubric.rubric_sha) + rubric.xo_name, rubric.rubric_sha, rubric.enable_points) insert_str = "INSERT INTO rubric_table(title, author, description,is_predefined,\ - xo_name, rubric_sha)\ - VALUES(?,?,?,?,?,?)" + xo_name, rubric_sha, enable_points)\ + VALUES(?,?,?,?,?,?,?)" self.cursor.execute(insert_str,temp) self.connection.commit() @@ -89,8 +99,8 @@ class ScorePadDB(): return rubric_id def insert_criteria(self, category, levels): - temp = (category.name, category.rubric_id, category.category_sha) - insert_str = "INSERT INTO category_table(name,rubric_id,category_sha) VALUES (?,?,?)" + temp = (category.name, category.rubric_id, category.category_sha, category.percentage) + insert_str = "INSERT INTO category_table(name,rubric_id,category_sha,percentage) VALUES (?,?,?,?)" self.cursor.execute(insert_str, temp) self.connection.commit() @@ -98,11 +108,11 @@ class ScorePadDB(): self.cursor.execute(query_str) category_id = self.cursor.fetchone()[0] - insert_str = "INSERT INTO level_table(name,description,category_id,rubric_id,level_sha)\ - VALUES(?,?,?,?,?)" + insert_str = "INSERT INTO level_table(name,description,category_id,rubric_id,level_sha,points)\ + VALUES(?,?,?,?,?,?)" for i in range(len(levels)): temp = (levels[i].name, levels[i].description,category_id ,\ - levels[i].rubric_id, levels[i].level_sha) + levels[i].rubric_id,levels[i].level_sha,levels[i].points) self.cursor.execute(insert_str, temp) self.connection.commit() @@ -110,11 +120,11 @@ class ScorePadDB(): temp = (project.title, project.author, project.description, project.subject,\ project.publish_date, project.is_owned,\ project.is_shared, project.rubric_id,project.xo_name,\ - project.project_sha) + project.project_sha, project.total_score) insert_str = "INSERT INTO project_table(title, author, description, subject,\ publish_date, is_owned, is_shared, rubric_id,xo_name,\ - project_sha) VALUES (?,?,?,?,?,?,?,?,?,?)" + project_sha,total_score) VALUES (?,?,?,?,?,?,?,?,?,?,?)" self.cursor.execute(insert_str,temp) self.connection.commit() @@ -127,23 +137,23 @@ class ScorePadDB(): def insert_score(self, score): temp = (score.project_id, score.rubric_id, score.category_id, score.level_id, - score.project_sha, score.rubric_sha, score.category_sha, score.level_sha, score.count) + score.project_sha, score.rubric_sha, score.category_sha, score.level_sha, score.score_count) insert_str = "INSERT INTO score_table(project_id,rubric_id,category_id,level_id,\ - project_sha, rubric_sha, category_sha, level_sha, count)\ + project_sha, rubric_sha, category_sha, level_sha, score_count)\ VALUES (?,?,?,?,?,?,?,?,?)" self.cursor.execute(insert_str,temp) self.connection.commit() def insert_category(self, category): - temp = (category.name, category.rubric_id, category.category_sha) - insert_str = "INSERT INTO category_table(name,rubric_id,category_sha) VALUES (?,?,?)" + temp = (category.name, category.rubric_id, category.category_sha, category.percentage) + insert_str = "INSERT INTO category_table(name,rubric_id,category_sha,percentage) VALUES (?,?,?,?)" self.cursor.execute(insert_str, temp) self.connection.commit() def insert_level(self, level): - temp = (level.name, level.description, level.category_id, level.rubric_id, level.level_sha) - insert_str = "INSERT INTO level_table(name, description, category_id, rubric_id, level_sha) \ - VALUES(?,?,?,?,?)" + temp = (level.name, level.description, level.category_id, level.rubric_id, level.level_sha,level.points) + insert_str = "INSERT INTO level_table(name, description, category_id, rubric_id,level_sha,points) \ + VALUES(?,?,?,?,?,?)" self.cursor.execute(insert_str, temp) self.connection.commit() @@ -166,7 +176,7 @@ class ScorePadDB(): rubric_list = [] for row in self.cursor: - rubric = Rubric(row[0], row[1], row[2], row[3], row[4], row[5], row[6]) + rubric = Rubric(row[0], row[1], row[2], row[3], row[4], row[5], row[6],row[7]) rubric_list.append(rubric) return rubric_list @@ -177,7 +187,7 @@ class ScorePadDB(): project_list = [] for row in self.cursor: project = Project(row[0],row[1],row[2],row[3],row[4], - row[5],row[6],row[7],row[8], row[9],row[10]) + row[5],row[6],row[7],row[8], row[9],row[10],row[11]) project_list.append(project) return project_list @@ -186,7 +196,7 @@ class ScorePadDB(): self.cursor.execute(query_str) for row in self.cursor: - rubric = Rubric(row[0],row[1],row[2],row[3],row[4],row[5],row[6]) + rubric = Rubric(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7]) return rubric @@ -196,7 +206,7 @@ class ScorePadDB(): category_list = [] for row in self.cursor: - category = Category(row[0], row[1], row[2], row[3]) + category = Category(row[0], row[1], row[2], row[3],row[4]) category_list.append(category) return category_list @@ -207,7 +217,7 @@ class ScorePadDB(): level_list = [] for row in self.cursor: - level = Level(row[0], row[1], row[2], row[3], row[4], row[5]) + level = Level(row[0], row[1], row[2], row[3], row[4], row[5],row[6]) level_list.append(level) return level_list @@ -221,7 +231,7 @@ class ScorePadDB(): def query_score(self, project_id, rubric_id, category_id, level_id): temp = (project_id, rubric_id, category_id, level_id) - query_str = "SELECT count from score_table WHERE project_id = ? \ + query_str = "SELECT score_count from score_table WHERE project_id = ? \ and rubric_id = ? and category_id = ? and \ level_id = ?" self.cursor.execute(query_str, temp) @@ -251,7 +261,7 @@ class ScorePadDB(): self.cursor.execute(query_str) for row in self.cursor: - project = Project(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9],row[10]) + project = Project(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11]) return project @@ -284,32 +294,50 @@ class ScorePadDB(): score_id = self.cursor.fetchone()[0] return score_id - def update_project(self, modified_project): temp = (modified_project.title,modified_project.author,modified_project.description,\ modified_project.subject,\ modified_project.publish_date,\ modified_project.rubric_id,modified_project.project_sha,\ - modified_project.project_id) + modified_project.total_score,modified_project.project_id) update_str = "UPDATE project_table SET title = ?,"+\ "author = ?, "+\ "description = ?,"+\ "subject = ?,"+\ "publish_date = ?,"+\ "rubric_id = ?,"+\ - "project_sha = ?"+\ + "project_sha = ?,"+\ + "total_score = ?"+\ "WHERE project_id = ?" print update_str self.cursor.execute(update_str,temp) self.connection.commit() - + def update_projectshare(self, project_id, is_shared): + temp = (is_shared, project_id) + update_str = "UPDATE project_table SET is_shared = ?"+\ + "WHERE project_id = ?" + self.cursor.execute(update_str,temp) + self.connection.commit() + def delete_project(self, project_id): delete_str = "DELETE FROM project_table WHERE project_id ="+ str(project_id) self.cursor.execute(delete_str) self.connection.commit() + def delete_rubric(self, rubric_id): + delete_str = "DELETE FROM rubric_table WHERE rubric_id ="+ str(rubric_id) + self.cursor.execute(delete_str) + + delete_str = "DELETE FROM category_table WHERE rubric_id ="+ str(rubric_id) + self.cursor.execute(delete_str) + + delete_str = "DELETE FROM level_table WHERE rubric_id ="+ str(rubric_id) + self.cursor.execute(delete_str) + + self.connection.commit() + def score_exists(self, project_id, rubric_id, category_id, level_id): temp = (project_id, rubric_id, category_id, level_id) query_str = "SELECT * FROM score_table WHERE project_id = ? and rubric_id = ? and \ @@ -328,14 +356,14 @@ class ScorePadDB(): except: return False - def project_exists(self, project_sha, author): - temp = (project_sha, author) - query_str = "SELECT * FROM project_table WHERE project_sha = ? and author = ?" + def project_exists(self, title, author): + temp = (title, author) + query_str = "SELECT * FROM project_table WHERE title = ? and author = ?" self.cursor.execute(query_str, temp) for row in self.cursor: project = Project(row[0],row[1],row[2],row[3],row[4],row[5],row[6],\ - row[7],row[8],row[9],row[10]) + row[7],row[8],row[9],row[10],row[11]) try: if project.project_id == None: @@ -344,14 +372,23 @@ class ScorePadDB(): return True except: return False - + + def is_ownedproject(self, project_sha): + query_str = "SELECT is_owned FROM project_table WHERE project_sha = \'" + str(project_sha) +"\'" + self.cursor.execute(query_str) + is_owned = self.cursor.fetchone()[0] + + if is_owned == None: + return 0 + return is_owned + def rubric_exists(self, rubric_sha, description): temp = (rubric_sha, description) query_str = "SELECT * FROM rubric_table WHERE rubric_sha = ? and description = ?" self.cursor.execute(query_str, temp) for row in self.cursor: - rubric = Rubric(row[0],row[1],row[2],row[3],row[4],row[5],row[6]) + rubric = Rubric(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7]) try: if rubric.rubric_id == None: @@ -361,6 +398,22 @@ class ScorePadDB(): except: return None + def check_relatedproject(self, rubric_id): + query_str = "SELECT * FROM project_table WHERE rubric_id = "+str(rubric_id) + self.cursor.execute(query_str) + + for row in self.cursor: + project = Project(row[0],row[1],row[2],row[3],row[4],row[5],row[6],\ + row[7],row[8],row[9],row[10],row[11]) + + try: + if project.project_id == None: + return False + else: + return True + except: + return False + def query_score_attr(self, score_id): query_str = "SELECT * from score_table WHERE score_id = " + str(score_id) self.cursor.execute(query_str) @@ -383,22 +436,36 @@ class ScorePadDB(): score = Score(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9]) score_id = score.score_id - count = score.count + count = score.score_count count = count +1 temp = (count, score_id) - update_str = "UPDATE score_table SET count = ?"+\ + update_str = "UPDATE score_table SET score_count = ?"+\ "WHERE score_id = ?" self.cursor.execute(update_str, temp) self.connection.commit() return score_id - + + + #def count_assessor(self, category_id): + # query_str = "SELECT COUNT(*) FROM level_table WHERE category_id = " + str(category_id) + # self.cursor.execute(query_str) + # count = self.cursor.fetchone()[0] + # return count + + def get_scorecount(self, project_id, category_id, level_id): + temp = (project_id, category_id, level_id) + query_str = "SELECT count FROM score_table WHERE project_id = ? AND" +\ + "category_id = ? AND level_id = ?" + self.cursor.execute(query_str, temp) + count = self.cursor.fetchone()[0] + return count class Project(): def __init__(self, project_id = 0, title = "", author = "", description = "", subject = "", publish_date = "", - is_owned = 1, is_shared = 1, rubric_id = None, xo_name = "", - project_sha = ""): + is_owned = 1, is_shared = 0, rubric_id = None, xo_name = "", + project_sha = "",total_score = 0): self.project_id = project_id self.title = title self.author = author @@ -410,7 +477,7 @@ class Project(): self.rubric_id = rubric_id self.xo_name = xo_name self.project_sha = self.get_sha(xo_name, title, publish_date) - + self.total_score = total_score def get_sha(self, xo_name, title, publish_date): text = xo_name + title + str(publish_date) @@ -420,12 +487,10 @@ class Project(): return project_sha - - class Rubric(): def __init__(self, rubric_id = 0, title = "", author = "", description = "",\ - is_predefined =None, xo_name = "", rubric_sha = ""): + is_predefined =None, xo_name = "", rubric_sha = "",enable_points = 0): self.rubric_id = rubric_id self.title = title self.author = author @@ -433,6 +498,7 @@ class Rubric(): self.is_predefined = is_predefined self.xo_name = xo_name self.rubric_sha = self.get_sha(xo_name, title, author) + self.enable_points = enable_points def get_sha(self, xo_name, title, author): text = xo_name + title + author @@ -446,11 +512,12 @@ class Rubric(): class Category(): def __init__(self, category_id = None, name = "", rubric_id = None, - category_sha = ""): + category_sha = "",percentage = 0): self.category_id = category_id self.name = name self.rubric_id = rubric_id self.category_sha = self.get_sha(name) + self.percentage = percentage def get_sha(self, name): text = name @@ -465,13 +532,14 @@ class Level(): def __init__(self, level_id = None, name = "", description = "", category_id = None, rubric_id = None, - level_sha = ""): + level_sha = "",points = 0): self.level_id = level_id self.name = name self.description = description self.category_id = category_id self.rubric_id = rubric_id self.level_sha = self.get_sha(name,description) + self.points = points def get_sha(self, name, description): text = name + description @@ -484,7 +552,7 @@ class Level(): class Score(): def __init__(self, score_id = 0, project_id = None, rubric_id = None, category_id = None,level_id = None, - project_sha = "", rubric_sha = "", category_sha = "", level_sha = "",count = 0): + project_sha = "", rubric_sha = "", category_sha = "", level_sha = "",score_count = 0): self.score_id = score_id self.project_id = project_id self.rubric_id = rubric_id @@ -494,5 +562,5 @@ class Score(): self.rubric_sha = rubric_sha self.category_sha = category_sha self.level_sha = level_sha - self.count = count + self.score_count = score_count diff --git a/ScorePadActivity.py b/ScorePadActivity.py index b4e798d..614d35a 100644 --- a/ScorePadActivity.py +++ b/ScorePadActivity.py @@ -1,11 +1,8 @@ -# Copyright 2011-2012 Almira Cayetano -# Copyright 2011-2012 Christian Joy Aranas -# Copyright 2011-2012 Ma. Rowena Solamo -# Copyright 2011-2012 Rommel Feria -# -# University of the Philippines -# College of Engineering -# Department of Computer Science +# 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 @@ -21,10 +18,15 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # -# Copyright 2007-2008 One Laptop Per Child Chat Activity for the method on -# connecting sugar activities -# Copyright 2008 Sven Festersen for the pygtk_chart library - +# 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 - accayetano@ittc.up.edu.ph +# 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') @@ -37,10 +39,10 @@ from Bundler import Bundler from pygtk_chart import multi_bar_chart import cjson -import logging import telepathy from dbus.service import method, signal from dbus.gobject_service import ExportedGObject +import logging from sugar.activity.activity import Activity, ActivityToolbox from sugar.activity import activity @@ -66,7 +68,6 @@ BUTTON_COLOR = '#097054' WHITE = '#FFFFFF' BLUE = '#82CAFA' -lessonplan_path = 'LessonPlanTemplate.txt' PROJECTLIST = [] TITLELIST = [] @@ -101,6 +102,14 @@ def theme_button(button): 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) @@ -110,8 +119,11 @@ def theme_box(box, color): return eb class ScorePadActivity(activity.Activity): - +#class ScorePadActivity(): def __init__(self, handle): +# def __init__(self): + + logging.root.setLevel(logging.DEBUG) Activity.__init__(self, handle) self.set_title('ScorePad Activity') @@ -124,29 +136,39 @@ class ScorePadActivity(activity.Activity): owner = self.pservice.get_owner() self.owner = owner self.owner_nick = owner.props.nick - +# self.owner_nick = "cnix" main_canvas = self.build_root() self.set_canvas(main_canvas) main_canvas.show_all() - + #self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + #self.window.set_position(gtk.WIN_POS_CENTER_ALWAYS) + #self.window.set_title("ScorePad") + #self.window.resize(730,650) + #self.window.add(main_canvas) + #self.window.show_all() + 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) def build_root(self): - self.scorepadDB = ScorePadDB(self.owner_nick) - try: - self.scorepadDB.create_tables() - template = Template(self.owner_nick) + logging.debug("Function: build_root") + + self.scorepadDB = ScorePadDB() + is_newlycreated = self.scorepadDB.connect_db(self.owner_nick) + if(is_newlycreated): + template = Template(self.owner_nick, self.scorepadDB) + logging.debug("ScorepadDB --> template") template.save_template() - except: - print "tables exist" - + logging.debug("ScorepadDB -->save_template") + list = self.scorepadDB.queryall_rubric(1) for temp in list: RUBRICLIST.append(temp) @@ -169,8 +191,10 @@ class ScorePadActivity(activity.Activity): print "friends :" +str(temp.title) self.is_owned = True - self.category_titles = [] #submit grades + self.category_titles = [] self.is_exists = False + self.rubric_received = False + self.is_project_owned = True self.main_table = gtk.HPaned() self.main_table.set_position(270) @@ -178,69 +202,59 @@ class ScorePadActivity(activity.Activity): self.main_table.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.Color(BACKGROUND_COLOR)) menupanel = self.build_menupanel() self.main_table.add1(menupanel) - - self.build_startpage("Start Page") + + self.build_processframe("Projects") + self.build_projectlist() main_table_eb = theme_box(self.main_table, BACKGROUND_COLOR) - return main_table_eb def build_menupanel(self): - menupanel = gtk.Table(2,1, True) + logging.debug("Function: build_menupanel") + menupanel = gtk.VBox(False,0) menupanel.set_border_width(2) logo = gtk.Image() - logo.set_from_file("images/hello2.png") + logo.set_from_file("images/scorepad.png") logo.show() - project_button = gtk.Button("Projects") + project_button = gtk.Button() + project_button = image_button(project_button,"images/Projects.png") project_button = theme_button(project_button) project_button.connect("clicked", self.project_cb, "Projects") - create_button = gtk.Button("Create New Project") + + create_button = gtk.Button() + create_button = image_button(create_button,"images/AddProject.png") create_button = theme_button(create_button) create_button.connect("clicked", self.addproject_cb, "Create new project") - rubrics_button = gtk.Button("Rubrics") + + rubrics_button = gtk.Button() + rubrics_button = image_button(rubrics_button,"images/Rubrics.png") rubrics_button = theme_button(rubrics_button) rubrics_button.connect("clicked", self.rubrics_cb, "Rubrics") - lessonplan_button = gtk.Button("Lesson Plan") - lessonplan_button = theme_button(lessonplan_button) - lessonplan_button.connect("clicked", self.lessonplan_cb) - tutorial_button = gtk.Button("Tutorial") - tutorial_button = theme_button(tutorial_button) - tutorial_button.connect("clicked", self.tutorial_cb) - - button_array = [project_button, create_button, rubrics_button, lessonplan_button, tutorial_button] - - menupanel.attach(logo,0,1,0,1) - menu_table_box = gtk.VBox(False,0) - for i in range(5) : - button = theme_box(button_array[i], BORDER_COLOR) - menu_table_box.add(button) - menupanel.attach(menu_table_box,0,1,1,2) - - return menupanel - - def build_startpage(self,label): - self.build_processframe(label) - logo = gtk.Image() - logo.set_from_file("images/wel2.png") + menupanel.pack_start(logo,False,False,0) + menupanel.add(project_button) + menupanel.add(create_button) + menupanel.add(rubrics_button) - self.processtable.attach(logo, 0,2,0,12) - self.main_table.show_all() + return menupanel def build_processframe(self,label): + logging.debug('Function: build_processframe') self.processtable = gtk.Table(12,2,True) self.processpanel = gtk.Frame() self.processpanel.add(self.processtable) self.processpanel.set_label(label) + self.processpanel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) self.main_table.add2(self.processpanel) self.main_table.show_all() - def addproject_cb(self,widget,label): + logging.debug('Function: addproject_cb') entries = self.build_projectentry(label) - finalize_button = gtk.Button(" Finalize ") + finalize_button = gtk.Button() + finalize_button = image_button(finalize_button, "images/finalize.png") finalize_button = theme_button(finalize_button) finalize_button.connect("clicked", self.finalize_cb, entries) box = gtk.HBox(False,0) @@ -250,38 +264,54 @@ class ScorePadActivity(activity.Activity): self.main_table.show_all() def build_projectentry(self,label): + logging.debug('Function: build_projectentry') self.processpanel.destroy() self.build_processframe(label) - title_label = gtk.Label("Project Title") - author_label = gtk.Label("Author") - description_label = gtk.Label("Project Description") - subject_label = gtk.Label("Subject") - date_label = gtk.Label("Date") - rubric_label = gtk.Label("Rubric Name") + title_img = gtk.Image() + title_img.set_from_file("images/title.png") + author_img = gtk.Image() + author_img.set_from_file("images/author.png") + description_img = gtk.Image() + description_img.set_from_file("images/description.png") + subject_img = gtk.Image() + subject_img.set_from_file("images/subject.png") + date_img = gtk.Image() + date_img.set_from_file("images/date.png") + rubric_img = gtk.Image() + rubric_img.set_from_file("images/rubric.png") title = gtk.Entry(50) + title.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR)) author = gtk.Entry(50) + author.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR)) description = gtk.TextView() description.set_wrap_mode(gtk.WRAP_WORD) description.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE)) - description.set_border_width(3) + description.set_border_width(7) subject = gtk.Entry(50) + subject.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR)) publish_date = gtk.Entry(50) + publish_date.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BACKGROUND_COLOR)) + publish_date.set_editable(False) rubric_combobox = gtk.ComboBox() rubric_list = gtk.ListStore(str) cell = gtk.CellRendererText() rubric_combobox.pack_start(cell) rubric_combobox.add_attribute(cell, 'text', 0) - today = datetime.date.today() - publish_date.set_text(str(today)) + today = datetime.datetime.now() + publish_date.set_text(unicode(today.replace(microsecond=0))) for i in range(len(RUBRICTITLE)): - rubric_list.append([RUBRICTITLE[i]]) + rubric_list.append([RUBRICTITLE[i] + " - " + RUBRICLIST[i].author]) + + for i in range(len(OTHER_RUBRICLIST)): + rubric_list.append([OTHER_RUBRICTITLE[i] + " - " + OTHER_RUBRICLIST[i].author]) + rubric_combobox.set_model(rubric_list) rubric_combobox.set_active(0) - label = [title_label, author_label,description_label,subject_label,date_label,rubric_label] + label = [title_img, author_img,description_img,subject_img,date_img,rubric_img] entries = [title, author, description,subject,publish_date,rubric_combobox] j = 0 for i in range(6): @@ -303,17 +333,21 @@ class ScorePadActivity(activity.Activity): entry.modify_bg(gtk.STATE_NORMAL,gtk.gdk.Color(BORDER_COLOR)) self.processtable.attach(entries[i],1,3,j,j+1) j = j+1 - + + design = gtk.Image() + design.set_from_file("images/design1.png") + self.processtable.attach(design,0,3,9,11) return entries def finalize_cb(self,widget,entries): + logging.debug('Function: finalize_cb') project = self.get_entries(entries) - if self.scorepadDB.project_exists(project.project_sha, project.author): + if self.scorepadDB.project_exists(project.title, project.author): md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Error. Duplicated project.") + message_format = "The project already exists.") md.run() md.destroy() else: @@ -322,7 +356,8 @@ class ScorePadActivity(activity.Activity): project.project_id = project_id rubric_id = project.rubric_id - rubric = self.scorepadDB.query_rubric(rubric_id) + rubric = self.scorepadDB.query_rubric(project.rubric_id) + #rubric = self.search_rubric(rubric_id) categories = self.scorepadDB.queryall_category(rubric_id) self.initialize_score(project, rubric, categories) @@ -330,21 +365,21 @@ class ScorePadActivity(activity.Activity): PROJECTLIST.append(project) self.processpanel.destroy() self.build_processframe("Projects") - tuplelist1 = (TITLELIST, PROJECTLIST) - tuplelist2 = (FRIENDSTITLELIST, FRIENDSPROJECTLIST) - projectlist = self.build_projectpanel(tuplelist1, tuplelist2) + projectlist = self.build_projectpanel() self.processtable.attach(projectlist,0,2,0,11) actionpanel = self.build_project_actionpanel() self.processtable.attach(actionpanel,0,2,11,12) self.main_table.show_all() def editproject_cb(self, widget, label): + logging.debug('Function: editproject_cb') try: if self.is_owned: project = PROJECTLIST[self.selected_project] entries = self.build_projectentry(label) - update_button = gtk.Button(" Update ") + update_button = gtk.Button() + update_button = image_button(update_button,"images/update.png") update_button = theme_button(update_button) update_button.connect("clicked", self.update_cb, entries) box = gtk.HBox(False,0) @@ -357,18 +392,19 @@ class ScorePadActivity(activity.Activity): md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Sorry. You cannot edit your friend's project.") + message_format = "Sorry. You cannot edit your neighbor's project.") md.run() md.destroy() except: md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Error. No project selected.") + message_format = "No project selected. Please select a project first.") md.run() md.destroy() def update_cb(self,widget,entries): + logging.debug('Function: update_cb') modified_project = self.get_entries(entries) project = PROJECTLIST[self.selected_project] @@ -379,32 +415,35 @@ class ScorePadActivity(activity.Activity): PROJECTLIST[self.selected_project] = modified_project self.processpanel.destroy() self.build_processframe("Projects") - tuplelist1 = (TITLELIST, PROJECTLIST) - tuplelist2 = (FRIENDSTITLELIST, FRIENDSPROJECTLIST) - projectlist = self.build_projectpanel(tuplelist1, tuplelist2) + projectlist = self.build_projectpanel() self.processtable.attach(projectlist,0,2,0,11) actionpanel = self.build_project_actionpanel() self.processtable.attach(actionpanel,0,2,11,12) self.main_table.show_all() def set_entries(self,entries,project): + logging.debug('Function: set_entries') entries[0].set_text(project.title) entries[1].set_text(project.author) buffer = entries[2].get_buffer() buffer.set_text(project.description) entries[3].set_text(project.subject) - rubric = self.scorepadDB.query_rubric(project.rubric_id) + #rubric = self.search_rubric(project.rubric_id) for i in range(len(RUBRICTITLE)): if str(rubric.title) == str(RUBRICTITLE[i]): active_rubric = i + + for i in range(len(OTHER_RUBRICTITLE)): + if str(rubric.title) == str(OTHER_RUBRICTITLE[i]): + active_rubric = i entries[4].set_text(project.publish_date) entries[5].set_active(active_rubric) def get_entries(self,entries): - + logging.debug('Function: get_entries') title = entries[0].get_text() author = entries[1].get_text() description_buffer = entries[2].get_buffer() @@ -417,42 +456,40 @@ class ScorePadActivity(activity.Activity): chosen_rubric = entries[5].get_active() rubric = model[chosen_rubric][0] + print "rubricj"+str(rubric) for r in RUBRICLIST: - if str(r.title) == str(rubric): + if str(r.title)+" - " +str(r.author) == str(rubric): rubric_id = r.rubric_id + + for r2 in OTHER_RUBRICLIST: + if str(r2.title)+" - " +str(r2.author) == str(rubric): + rubric_id = r2.rubric_id - is_shared = 0 - is_owned = 1 - - project = Project(None,title,author,description,subject,publish_date,is_owned,is_shared,rubric_id, + project = Project(None,title,author,description,subject,publish_date,1,0,rubric_id, self.owner_nick,"") - return project def viewproject_details(self,widget,row,col,tuple): + logging.debug('Function: viewproject_details') buffer = tuple[0] projectlist = tuple[1] buffer.set_text("") r = row[0] self.selected_project = r self.is_owned = tuple[2] - print self.selected_project project = projectlist[r] - print "rubric id : "+str(project.rubric_id) - print "project id :"+str(project.project_id) rubric = self.scorepadDB.query_rubric(project.rubric_id) - - details ="===PROJECT DETAILS===\n\n"+"Title :\n -"+project.title+"\n"+\ + #rubric = self.search_rubric(project.rubric_id) + details ="\nTitle :\n -"+project.title+"\n"+\ "Author :\n -"+project.author+"\n"+\ "Description :\n -"+project.description+"\n"+\ "Subject :\n -"+project.subject+"\n"+\ "Date :\n -"+str(project.publish_date)+"\n"+\ "Rubric :\n -"+rubric.title+"\n" - buffer.set_text(details) def deleteproject_cb(self,widget,data=None): - + logging.debug('Function: deleteproject') try: if self.is_owned == True: project_id = PROJECTLIST[self.selected_project].project_id @@ -473,8 +510,8 @@ class ScorePadActivity(activity.Activity): PROJECTLIST.remove(PROJECTLIST[self.selected_project]) else: self.scorepadDB.delete_project(project_id) - FRIENDSTITLELIST.remove(TITLELIST[self.selected_project]) - FRIENDSPROJECTLIST.remove(PROJECTLIST[self.selected_project]) + FRIENDSTITLELIST.remove(FRIENDSTITLELIST[self.selected_project]) + FRIENDSPROJECTLIST.remove(FRIENDSPROJECTLIST[self.selected_project]) warning.destroy() elif result == gtk.RESPONSE_NO: print "No was clicked" @@ -482,9 +519,7 @@ class ScorePadActivity(activity.Activity): self.processpanel.destroy() self.build_processframe("Projects") - tuplelist1 = (TITLELIST, PROJECTLIST) - tuplelist2 = (FRIENDSTITLELIST, FRIENDSPROJECTLIST) - projectlist = self.build_projectpanel(tuplelist1, tuplelist2) + projectlist = self.build_projectpanel() self.processtable.attach(projectlist,0,2,0,11) actionpanel = self.build_project_actionpanel() self.processtable.attach(actionpanel,0,2,11,12) @@ -493,89 +528,89 @@ class ScorePadActivity(activity.Activity): md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Error. No project selected.") + message_format = "No project selected. Please select a project first.") md.run() md.destroy() def share_cb(self,widget,data=None): - + + logging.debug('Function: share_cb') + if self.is_shared : if self.is_owned: project = PROJECTLIST[self.selected_project] - print "selected " + str(self.selected_project) + self.scorepadDB.update_projectshare(project.project_id, 1) bundler = Bundler() project_bundle = bundler.bundle_project(project) rubric_id = project.rubric_id + logging.debug("UYRUBRIC_ID :"+str(rubric_id)) rubric = self.scorepadDB.query_rubric(rubric_id) - rubric_bundle = bundler.bundle_rubric(rubric) - categories = self.scorepadDB.queryall_category(rubric_id) - category_bundle = bundler.bundle_category(categories) - level_bundle_list = [] - for category in categories: - levels = self.scorepadDB.query_level(category.category_id) - level_bundle = bundler.bundle_level(levels) - level_bundle_list.append(level_bundle) + logging.debug("UYRUBRIC_SHA2 :"+str(rubric.rubric_sha)) + if not rubric.is_predefined: + rubric_bundle = bundler.bundle_rubric(rubric) + categories = self.scorepadDB.queryall_category(rubric_id) + category_bundle = bundler.bundle_category(categories) + level_bundle_list = [] + for category in categories: + levels = self.scorepadDB.query_level(category.category_id) + level_bundle = bundler.bundle_level(levels) + level_bundle_list.append(level_bundle) - self.sendbundle_cb(rubric_bundle) - self.sendbundle_cb(project_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: - self.sendbundle_cb(level) - self.currently_shared = project.project_sha - md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ + 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: + self.sendbundle_cb(level) + self.currently_shared = project.project_sha + md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Project shared") - md.run() - md.destroy() + message_format = "The project was successfully shared!") + md.run() + md.destroy() + self.is_project_owned = True + self.sendbundle_cb(project_bundle) else: md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Cannot send other's project") + message_format = "You cannot share your neighbor's project.") 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.") + message_format = "No one is connected to you. You cannot share the project.") md.run() md.destroy() def project_cb(self,widget,label): + logging.debug('Function: project_cb') self.processpanel.destroy() self.build_processframe(label) + self.build_projectlist() - tuplelist1 = (TITLELIST, PROJECTLIST) - tuplelist2 = (FRIENDSTITLELIST, FRIENDSPROJECTLIST) - - panel = self.build_projectpanel(tuplelist1, tuplelist2) + def build_projectlist(self): + panel = self.build_projectpanel() panel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) panel.set_border_width(5) self.processtable.attach(panel,0,2,0,11) - actionpanel = self.build_project_actionpanel() self.processtable.attach(actionpanel,0,2,11,12) - self.main_table.show_all() - def build_projectpanel(self, tuplelist1, tuplelist2): + def build_projectpanel(self,): + logging.debug('Function: build_projectpanel') vpanel = gtk.VPaned() vpanel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) vpanel.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.Color(BACKGROUND_COLOR)) panel = gtk.HPaned() - mytitlelist = tuplelist1[0] - myprojectlist = tuplelist1[1] - friendstitlelist = tuplelist2[0] - friendsprojectlist = tuplelist2[1] - tree_store1 = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) - for project in mytitlelist: + for project in TITLELIST: tree_store1.append(None, (project,None)) tree_view1 = gtk.TreeView(tree_store1) tree_view1.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(BLUE)) @@ -591,25 +626,26 @@ class ScorePadActivity(activity.Activity): tree_store2 = gtk.TreeStore(gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) - for friendsproject in friendstitlelist: + for friendsproject in FRIENDSTITLELIST: tree_store2.append(None, (friendsproject,None)) tree_view2 = gtk.TreeView(tree_store2) tree_view2.modify_base(gtk.STATE_NORMAL, gtk.gdk.color_parse(BLUE)) tree_view2.set_rules_hint(True) renderer2 = gtk.CellRendererText() - project_column2 = gtk.TreeViewColumn("Friends Projects", renderer2, text = 0) + project_column2 = gtk.TreeViewColumn("Friends' Projects", renderer2, text = 0) tree_view2.append_column(project_column2) tree_view2_scroll = gtk.ScrolledWindow() tree_view2_scroll.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) tree_view2_scroll.add(tree_view2) - vpanel.set_position(300) + vpanel.set_position(350) vpanel.add2(tree_view2_scroll) sw = gtk.ScrolledWindow() sw.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) project_view = gtk.TextView() + project_view.modify_font(pango.FontDescription('Segoe 10')) project_view.set_wrap_mode(gtk.WRAP_WORD) project_view.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE)) buffer = project_view.get_buffer() @@ -617,14 +653,20 @@ class ScorePadActivity(activity.Activity): sw.add(project_view) sw = theme_box(sw, BUTTON_COLOR) + vbox = gtk.VBox(False,0) + pdetails_img = gtk.Image() + pdetails_img.set_from_file("images/projectdetails.png") + vbox.pack_start(pdetails_img,False,False,0) + vbox.add(sw) + panel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) panel.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE)) - panel.set_position(410) + panel.set_position(500) panel.add1(vpanel) - panel.add2(sw) + panel.add2(vbox) - tuple1 = (buffer, myprojectlist,True) - tuple2 = (buffer, friendsprojectlist,False) + tuple1 = (buffer, PROJECTLIST,True) + tuple2 = (buffer, FRIENDSPROJECTLIST,False) tree_view1.connect("row-activated", self.viewproject_details, tuple1) tree_view2.connect("row-activated", self.viewproject_details, tuple2) @@ -632,45 +674,52 @@ class ScorePadActivity(activity.Activity): return panel def build_project_actionpanel(self): - actionpanel = gtk.HBox(False, 20) - leftpanel = gtk.HBox(False,5) - rightpanel = gtk.HBox(False,5) - edit_button = gtk.Button("Edit") + logging.debug('Function: build_project_actionpanel') + actionpanel = gtk.HBox(False,5) + + edit_button = gtk.Button() + edit_button = image_button(edit_button,"images/edit.png") edit_button = theme_button(edit_button) edit_button.connect("clicked", self.editproject_cb, "Edit Project") - share_button = gtk.Button("Share") + + 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) - evaluate_button = gtk.Button("Evaluate") + + evaluate_button = gtk.Button() + evaluate_button = image_button(evaluate_button,"images/evaluate.png") evaluate_button = theme_button(evaluate_button) evaluate_button.connect("clicked", self.evaluate_cb) - grades_button = gtk.Button("See Grades") + + grades_button = gtk.Button() + grades_button = image_button(grades_button,"images/seegrades.png") grades_button = theme_button(grades_button) grades_button.connect("clicked", self.seegrades_cb) - delete_button = gtk.Button("Delete") + + delete_button = gtk.Button() + delete_button = image_button(delete_button,"images/delete.png") delete_button = theme_button(delete_button) delete_button.connect("clicked", self.deleteproject_cb) - leftpanel.add(edit_button) - leftpanel.add(share_button) - rightpanel.add(evaluate_button) - rightpanel.add(grades_button) - rightpanel.add(delete_button) - leftpanel = theme_box(leftpanel, BORDER_COLOR) - rightpanel = theme_box(rightpanel, BORDER_COLOR) - actionpanel.add(leftpanel) - actionpanel.add(rightpanel) + actionpanel.add(edit_button) + actionpanel.add(share_button) + actionpanel.add(evaluate_button) + actionpanel.add(grades_button) + actionpanel.add(delete_button) actionpanel.set_border_width(5) + actionpanel = theme_box(actionpanel, BORDER_COLOR) return actionpanel def evaluate_cb(self, widget): + logging.debug('Function: evaluate_cb') try: if self.is_owned == True: project = PROJECTLIST[self.selected_project] else: project = FRIENDSPROJECTLIST[self.selected_project] - + #rubric = self.search_rubric(project.rubric_id) rubric = self.scorepadDB.query_rubric(project.rubric_id) self.processpanel.destroy() self.build_processframe(project.title+" by "+project.author) @@ -691,23 +740,25 @@ class ScorePadActivity(activity.Activity): sw = theme_box(sw, BUTTON_COLOR) sw.set_border_width(5) lowerbox.add1(sw) - + sw2 = gtk.ScrolledWindow() sw2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) self.level_view = gtk.TextView() + self.level_view.set_border_width(10) self.level_view.set_wrap_mode(gtk.WRAP_WORD) self.level_view.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE)) buffer1 = self.level_view.get_buffer() buffer1.set_text("Rubric description") sw2.add(self.level_view) sw2 = theme_box(sw2, BUTTON_COLOR) - + lowerbox.set_position(380) lowerbox.add2(sw2) tuple = [rubric, project] box = gtk.HBox(False,0) - submit_button = gtk.Button(" Submit ") + submit_button = gtk.Button() + submit_button = image_button(submit_button,"images/submit.png") submit_button = theme_button(submit_button) submit_button.connect("clicked", self.submitgrade_cb, tuple) box.pack_start(submit_button, False, False, 0) @@ -720,11 +771,13 @@ class ScorePadActivity(activity.Activity): md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Error. No project selected.") + message_format = "No project selected. Please select a project first.") md.run() md.destroy() def build_upper_evalbox(self,project): + logging.debug('Function: build_upper_evalbox') + print "nasa build upper evalbox" hpaned = gtk.HPaned() leftbox = gtk.Table(2,1,False) sw = gtk.ScrolledWindow() @@ -744,11 +797,12 @@ class ScorePadActivity(activity.Activity): hpaned.set_position(450) leftbox = theme_box(leftbox, BORDER_COLOR) hpaned.add1(leftbox) - rightbox = gtk.VBox(False,0) + #rubric = self.search_rubric(project.rubric_id) rubric = self.scorepadDB.query_rubric(project.rubric_id) rubric_label = gtk.Label("Rubric") rubric_entry = gtk.Entry() + rubric_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BORDER_COLOR)) rubric_entry.set_text(rubric.title) rbox = gtk.HBox() rbox.add(rubric_label) @@ -756,6 +810,7 @@ class ScorePadActivity(activity.Activity): rightbox.add(rbox) date_label = gtk.Label("Date") date_entry = gtk.Entry() + date_entry.modify_bg(gtk.STATE_INSENSITIVE,gtk.gdk.color_parse(BORDER_COLOR)) date_entry.set_text(project.publish_date) dbox = gtk.HBox() dbox.add(date_label) @@ -763,12 +818,12 @@ class ScorePadActivity(activity.Activity): rightbox.add(dbox) rightbox = theme_box(rightbox, BORDER_COLOR) hpaned.add2(rightbox) - hpaned.set_border_width(5) - + print "tapos ng build upper evalbox" return hpaned def build_lower_evalbox(self, rubric): + logging.debug('Function: build_lower_evalbox') rubric_id = rubric.rubric_id category = self.scorepadDB.queryall_category(rubric_id) row = len(category)+1 @@ -776,9 +831,7 @@ class ScorePadActivity(activity.Activity): column = len(self.scorepadDB.query_level(category_id))+1 column_names = self.scorepadDB.query_level(category_id) - levels = [] - for i in range(column-1): level = [] for j in range(row-1): @@ -787,40 +840,56 @@ class ScorePadActivity(activity.Activity): level.append(level_temp[i].description) levels.append(level) - view = self.build_category_column(rubric, levels, column_names) + view = self.build_category_column(rubric, levels, column_names, column) return view - - def build_category_column(self, rubric, levels,column_names): - self.tree_store = gtk.TreeStore( gobject.TYPE_STRING,gobject.TYPE_BOOLEAN,gobject.TYPE_BOOLEAN, - gobject.TYPE_BOOLEAN,gobject.TYPE_BOOLEAN) - column = [None, None, None, None] + def build_category_column(self, rubric, levels,column_names, column_count): + logging.debug('Function: build_category_column') + self.tree_store = self.create_tree_store2(column_count) + + column = [] for i in range(len(levels)): - column[i] = levels[i] - + column.append(levels[i]) + rubric_id = rubric.rubric_id - category = self.scorepadDB.queryall_category(rubric_id) + category = self.scorepadDB.queryall_category(rubric_id) for i in range(len(category)): - self.tree_store.append( None, (category[i].name, - None, None, - None, None) ) - + if column_count-1 == 2: + self.tree_store.append( None, (category[i].name,None, None)) + if column_count-1 == 3: + self.tree_store.append( None, (category[i].name,None, None,None)) + if column_count-1 == 4: + self.tree_store.append( None, (category[i].name,None, None,None,None)) + if column_count-1 == 5: + self.tree_store.append( None, (category[i].name,None, None,None,None,None)) + if column_count-1 == 6: + self.tree_store.append( None, (category[i].name,None, None,None,None,None,None)) + if column_count-1 == 7: + self.tree_store.append( None, (category[i].name,None, None,None,None,None,None,None)) + if column_count-1 == 8: + self.tree_store.append( None, (category[i].name,None, None,None,None,None,None,None,None)) + if column_count-1 == 9: + self.tree_store.append( None, (category[i].name,None, None,None,None,None,None,None,None,None)) + view = gtk.TreeView(self.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 = 250 + renderer.props.wrap_mode = pango.WRAP_WORD + column0 = gtk.TreeViewColumn("Category", renderer, text=0) - column0.set_resizable(True) + #column0.set_resizable(True) view.append_column(column0) view.connect("row-activated", self.viewlevel_details, rubric_id, category) - + renderlist = [] self.number_of_level = len(levels) for i in range(len(levels)): render = gtk.CellRendererToggle() - render.set_property('indicator-size', 20) + render.set_property('indicator-size', 40) render.set_property('activatable', True) render.connect( 'toggled', self.col1_toggled_cb, i+1 ) renderlist.append(render) @@ -828,8 +897,8 @@ class ScorePadActivity(activity.Activity): column.add_attribute( renderlist[i], "active", i+1) column.set_resizable(True) view.append_column(column) - return view + def col1_toggled_cb( self, cell, path, col ): @@ -841,6 +910,7 @@ class ScorePadActivity(activity.Activity): return def viewlevel_details(self, widget, row, col, rubric_id, categories): + logging.debug('Function: viewlevel_details') selected_row = row[0] category_id = categories[selected_row].category_id @@ -854,47 +924,15 @@ class ScorePadActivity(activity.Activity): details = details + level.name + "\n" + \ " - " + level.description + "\n\n" buffer.set_text(details) - - - def lessonplan_cb(self,widget,data= None): - self.processpanel.destroy() - self.build_processframe("Lesson Plan") - - update_lesson = gtk.Button(" Update ") - update_lesson = theme_button(update_lesson) - - hbox = gtk.HBox(False,0) - box = gtk.HBox(False,0) - box.pack_start(update_lesson, False, False, 0) - box = theme_box(box,BORDER_COLOR) - - lesson_field = gtk.TextView() - lesson_field.modify_base(gtk.STATE_NORMAL, gtk.gdk.Color(BLUE)) - lesson_field.set_wrap_mode(gtk.WRAP_WORD) - lesson_field.set_border_width(5) - lesson_buffer = lesson_field.get_buffer() - self.load_lessonplan(lesson_buffer) - - lesson_field.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BUTTON_COLOR)) - hbox.add(lesson_field) - hbox.set_border_width(5) - self.processtable.attach(hbox,0,2,0,11) - self.processtable.attach(box,0,2,11,12) - self.main_table.show_all() - - def load_lessonplan(self, lesson_buffer): - fp = open(lessonplan_path, 'r') - lines = fp.readlines() - - iter = lesson_buffer.get_iter_at_offset(0) - - for line in lines: - lesson_buffer.insert(iter, line) def rubrics_cb(self,widget,label): + logging.debug('Function: rubrics_cb') self.processpanel.destroy() self.build_processframe(label) + self.build_rubric_box() + def build_rubric_box(self): + logging.debug('Function: build_rubric_box') hpaned = gtk.HPaned() hpaned.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) hpaned.modify_bg(gtk.STATE_ACTIVE, gtk.gdk.Color(BACKGROUND_COLOR)) @@ -914,6 +952,7 @@ class ScorePadActivity(activity.Activity): self.main_table.show_all() def create_rubriclist(self, rubrics, title, label): + logging.debug('Function: create_rubriclist') rubricsbox = gtk.VBox(False,0) buttons = [] @@ -930,7 +969,7 @@ class ScorePadActivity(activity.Activity): if str(title[i]) == str(r.title): rubric = r button = gtk.Button() - box = xpm_label_box( "images/green_button2.png", title[i]) + box = xpm_label_box( "images/green_button2.png", title[i] + " - " + str(r.author)) button.add(box) button = theme_button(button) button.connect("clicked", self.viewrubric_cb, rubric) @@ -941,8 +980,9 @@ class ScorePadActivity(activity.Activity): return rubricsbox def viewrubric_cb(self, widget, rubric): + logging.debug('Function: viewrubric_cb') self.processpanel.destroy() - self.build_processframe("Rubric") + self.build_processframe(rubric.title + " - " + rubric.author) box = self.build_rubriclist(rubric) sw = gtk.ScrolledWindow() @@ -950,11 +990,21 @@ class ScorePadActivity(activity.Activity): sw.add_with_viewport(box) sw.set_border_width(5) sw = theme_box(sw, BUTTON_COLOR) - self.processtable.attach(sw,0,2,0,12) - self.main_table.show_all() + self.processtable.attach(sw,0,2,0,11) + hbox = gtk.HBox(False,0) + remove_button = gtk.Button() + remove_button = image_button(remove_button,"images/delete.png") + remove_button = theme_button(remove_button) + remove_button.connect("clicked", self.remove_rubric_cb, rubric.rubric_id) + hbox.pack_start(remove_button,False,False,0) + hbox = theme_box(hbox, BORDER_COLOR) + + self.processtable.attach(hbox,0,2,11,12) + self.main_table.show_all() def build_rubriclist(self, rubric): + logging.debug('Function: build_rubriclist') rubric_id = rubric.rubric_id category = self.scorepadDB.queryall_category(rubric_id) row = len(category)+1 @@ -973,92 +1023,202 @@ class ScorePadActivity(activity.Activity): level.append(level_temp[i].description) levels.append(level) - view = self.build_categorylist(rubric, levels, column_names) + view = self.build_categorylist(rubric, levels, column_names, column) return view - def build_categorylist(self, rubric, levels,column_names): - tree_store = gtk.TreeStore( gobject.TYPE_STRING,gobject.TYPE_STRING,gobject.TYPE_STRING, - gobject.TYPE_STRING,gobject.TYPE_STRING) - - column = [None, None, None, None] + def build_categorylist(self, rubric, levels,column_names,column_count): + logging.debug('Function: build_categorylist') + tree_store = self.create_tree_store(column_count) + column = [] for i in range(len(levels)): - column[i] = levels[i] + column.append(levels[i]) rubric_id = rubric.rubric_id - category = self.scorepadDB.queryall_category(rubric_id) - + category = self.scorepadDB.queryall_category(rubric_id) + tuple = [] for i in range(len(category)): - tree_store.append( None, (category[i].name, - column[0][i], column[1][i], - column[2][i],column[3][i]) ) + tuple = [] + cat_str = category[i].name + " (" + str(category[i].percentage) + ")" + logging.debug(cat_str) + tuple.append(cat_str) + + for j in range(column_count-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 = 150 + 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() - column = gtk.TreeViewColumn(column_names[i].name, render, text=i+1) - column.set_resizable(True) + render.props.wrap_width = 150 + render.props.wrap_mode = pango.WRAP_WORD + column = gtk.TreeViewColumn(column_names[i].name + " (" +str(column_names[i].points) + ")", render, text=i+1) view.append_column(column) return view + + 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 create_tree_store2(self, c): + b = gobject.TYPE_BOOLEAN + + if c == 2: + p = gtk.TreeStore(str,b) + elif c == 3: + p = gtk.TreeStore(str,b,b) + elif c == 4: + p = gtk.TreeStore(str,b,b,b) + elif c == 5: + p = gtk.TreeStore(str,b,b,b,b) + elif c == 6: + p = gtk.TreeStore(str,b,b,b,b,b) + elif c == 7: + p = gtk.TreeStore(str,b,b,b,b,b,b) + elif c == 8: + p = gtk.TreeStore(str,b,b,b,b,b,b,b) + elif c == 9: + p = gtk.TreeStore(str,b,b,b,b,b,b,b,b) + return p + + def remove_rubric_cb(self, widget, rubric_id): + + if self.scorepadDB.check_relatedproject(rubric_id): + md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ + flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ + type = gtk.MESSAGE_INFO,\ + message_format = "You cannot delete this rubric. This rubric is still used by other projects.") + md.run() + md.destroy() + else: + + 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 this rubric?") + result = warning.run() + + if result == gtk.RESPONSE_YES: + self.scorepadDB.delete_rubric(rubric_id) + + for i in range(len(RUBRICLIST)): + temp = RUBRICLIST[i] + if temp.rubric_id == rubric_id: + RUBRICLIST.remove(RUBRICLIST[i]) + RUBRICTITLE.remove(RUBRICTITLE[i]) + for i in range(len(OTHER_RUBRICLIST)): + temp = OTHER_RUBRICLIST[i] + if temp.rubric_id == rubric_id: + OTHER_RUBRICLIST.remove(OTHER_RUBRICLIST[i]) + OTHER_RUBRICTITLE.remove(OTHER_RUBRICTITLE[i]) + + self.processpanel.destroy() + self.build_processframe("Rubric List") + self.build_rubric_box() + warning.destroy() + elif result == gtk.RESPONSE_NO: + warning.destroy() + def submitgrade_cb(self, widget, tuple): + logging.debug('Function: submitgrade_cb') rubric = tuple[0] project = tuple[1] project_id = project.project_id rubric_id = rubric.rubric_id categories = self.scorepadDB.queryall_category(rubric_id) - self.initialize_score(project, rubric, categories) - category_id = categories[0].category_id level_list = self.scorepadDB.query_level(category_id) - level_name = "" - for i in range(len(categories)): - category_id = categories[i].category_id - for j in range(len(level_list)+1): - if (self.tree_store[i][j] == True): - level_name = level_list[j-1].name - level_id = self.scorepadDB.querylevel_id(category_id, level_name) - score_id = self.scorepadDB.increment_scorecount(project_id, rubric_id, category_id, level_id) - score = self.scorepadDB.query_score2(project_id, rubric_id, category_id, level_id) - bundler = Bundler() - score_bundle = bundler.bundle_score(score) + + if self.check_columns(categories, level_list): + self.initialize_score(project, rubric, categories) + + level_name = "" + for i in range(len(categories)): + category_id = categories[i].category_id + for j in range(len(level_list)+1): + if (self.tree_store[i][j] == True): + level_name = level_list[j-1].name + level_id = self.scorepadDB.querylevel_id(category_id, level_name) + score_id = self.scorepadDB.increment_scorecount(project_id, rubric_id, category_id, level_id) + score = self.scorepadDB.query_score2(project_id, rubric_id, category_id, level_id) + bundler = Bundler() + score_bundle = bundler.bundle_score(score) + logging.debug("Function: submitgrade_cb --> scorebundle : "+score_bundle) + logging.debug('Function: submitgrade_cb --> about to send bundle') + is_send = False + if self.is_shared and project.is_shared: + self.sendbundle_cb(score_bundle) + logging.debug('Function: submitgrade_cb --> bundle sent') + is_send = True + if is_send: + md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ + flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ + type = gtk.MESSAGE_INFO,\ + message_format = "You have successfully evaluated the project!") + md.run() + md.destroy() + + self.processpanel.destroy() + self.build_processframe("Projects") + + panel = self.build_projectpanel() + panel.set_border_width(5) + self.processtable.attach(panel,0,2,0,11) - is_send = False - if self.is_shared: - self.sendbundle_cb(score_bundle) - is_send = True - if is_send: + actionpanel = self.build_project_actionpanel() + self.processtable.attach(actionpanel,0,2,11,12) + + self.main_table.show_all() + else: md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ - flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ - type = gtk.MESSAGE_INFO,\ - message_format = "Evaluation sent!") + flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ + type = gtk.MESSAGE_INFO,\ + message_format = "Please complete the form before proceeding.") md.run() md.destroy() - - self.processpanel.destroy() - self.build_processframe("Projects") - - tuplelist1 = (TITLELIST, PROJECTLIST) - tuplelist2 = (FRIENDSTITLELIST, FRIENDSPROJECTLIST) - - panel = self.build_projectpanel(tuplelist1, tuplelist2) - panel.set_border_width(5) - self.processtable.attach(panel,0,2,0,11) - actionpanel = self.build_project_actionpanel() - self.processtable.attach(actionpanel,0,2,11,12) - - self.main_table.show_all() + def check_columns(self, categories, level_list): + counter = 0 + for i in range(len(categories)): + for j in range(len(level_list)+1): + if (self.tree_store[i][j] == True): + counter = counter +1 + if (counter == len(categories)): + return True + else: + return False def initialize_score(self, project, rubric, categories): + logging.debug('Function: initialize_score') project_id = project.project_id rubric_id = rubric.rubric_id @@ -1079,65 +1239,89 @@ class ScorePadActivity(activity.Activity): self.scorepadDB.insert_score(score) def seegrades_cb(self, widget, data =None): - try: - if self.is_owned == True: + logging.debug('Function: seegrades_cb') + + if self.is_owned == True: + logging.debug('Function: seegrades_cb; is_owned=True') + try: project = PROJECTLIST[self.selected_project] + logging.debug("Function: seegrades_cb; project: "+ str(self.selected_project)) rubric = self.scorepadDB.query_rubric(project.rubric_id) + logging.debug('Function: seegrades_cb; rubric') self.processpanel.destroy() self.build_processframe(project.title+" by "+project.author) - + logging.debug('Function: seegrades_cb; build_processframe') upperbox = self.build_upper_evalbox(project) + logging.debug('Function: seegrades_cb; build_upper_evalbox') upperbox.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) - self.processtable.attach(upperbox,0,2,0,2) self.build_lower_gradebox(project, rubric) - else: + logging.debug('Function: seegrades_cb; build_lower_gradebox') + except: md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ type = gtk.MESSAGE_INFO,\ - message_format = "Sorry. You cannot display your friend's grade") + message_format = "No project selected.") md.run() - except: + md.destroy() + else: md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ - flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ - type = gtk.MESSAGE_INFO,\ - message_format = "Error. No project selected.") + flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ + type = gtk.MESSAGE_INFO,\ + message_format = "Sorry. You cannot display your neighbor's grade.") md.run() md.destroy() - md.destroy() def build_lower_gradebox(self, project, rubric): + logging.debug('Function: build_lower_gradebox') + project_id = project.project_id rubric_id = rubric.rubric_id + categories = self.scorepadDB.queryall_category(rubric_id) category_id = categories[0].category_id + logging.debug('Function: build_lower_gradebox --> queryall_category finished') navpanel = gtk.HBox(False) - left_arrow = gtk.Button("Left") + + left_arrow = gtk.Button() + left_arrow = image_button(left_arrow, "images/left.png") left_arrow = theme_button(left_arrow) - right_arrow = gtk.Button("Right") + right_arrow = gtk.Button() + right_arrow = image_button(right_arrow, "images/right.png") right_arrow = theme_button(right_arrow) navpanel.add(left_arrow) navpanel.add(right_arrow) navpanel = theme_box(navpanel, BORDER_COLOR) self.processtable.attach(navpanel,1,2,11,12) + try: + if rubric.enable_points == 1: + gradepanel = gtk.HBox(False) + grade_label = gtk.Label("Final Grade") + grade = gtk.Label(str("%0.2f%%" % ( (self.compute_score(project, rubric, categories)*100)))) + gradepanel.add(grade_label) + gradepanel.add(grade) + gradepanel = theme_box(gradepanel, BORDER_COLOR) + self.processtable.attach(gradepanel,0,1,11,12) + except: + logging.debug("Points and Percentage not set") + category_list = "" for category in categories: - category_list = category_list + str(category.name) +" " + category_list = category_list + str(category.name.replace(' ', '~&')) + " " level_list = "" levels = self.scorepadDB.query_level(category_id) for level in levels: - level_list = level_list + str(level.name) + " " - + level_list = level_list + str(level.name.replace(' ', '~&')) + " " self.category_length = len(categories) - self.number_of_click = 3 - if self.category_length == (1 or 2 or 3): + self.number_of_click = 3 + if ((self.category_length == 1) or (self.category_length == 2) or (self.category_length ==3)): barchart = self.build_barchart(category_list, categories, level_list, project_id, rubric_id) else : partial_cat_list = "" - partial_cat_list = str(categories[0].name) + " " + str(categories[1].name) + " " + str(categories[2].name) + partial_cat_list = str(categories[0].name) + "~& " + str(categories[1].name) + "~& " + str(categories[2].name) partial_cat = [] partial_cat.append(categories[0]) partial_cat.append(categories[1]) @@ -1154,6 +1338,38 @@ class ScorePadActivity(activity.Activity): navparam = [categories, level_list, project_id, rubric_id] right_arrow.connect("clicked", self.navigate_cb, "0", navparam) left_arrow.connect("clicked", self.navigate_cb, "1", navparam) + + def compute_score(self, project, rubric, categories): + project_id = project.project_id + category_id = categories[0].category_id + rubric_id = rubric.rubric_id + + list = self.scorepadDB.query_level(category_id) + + max = 0 + for item in list: + if max < item.points: + max = item.points + + raw_score = 0 + denom_score = 0 + for category in categories: + list = self.scorepadDB.query_level(category.category_id) + per_cat_total = 0 + per_cat_total2 = 0 + for item in list: + count = self.scorepadDB.query_score(project_id, rubric_id, category.category_id, item.level_id) + per_level_count = count * item.points + per_cat_total = per_cat_total + per_level_count + per_level_count2 = count * max + per_cat_total2 = per_cat_total2 + per_level_count2 + temp = per_cat_total * (category.percentage * 0.01) + temp2 = per_cat_total2 * (category.percentage * 0.01) + raw_score = raw_score + temp + denom_score = denom_score + temp2 + + final_score = raw_score/denom_score + return final_score def navigate_cb(self, widget,position, navparam): categories = navparam[0] #b @@ -1172,7 +1388,7 @@ class ScorePadActivity(activity.Activity): if self.number_of_click <= self.category_length and self.number_of_click != 0: a = "" - a = str(categories[self.number_of_click-3].name) + " " + str(categories[self.number_of_click-2].name) + " " \ + a = str(categories[self.number_of_click-3].name) + "~& " + str(categories[self.number_of_click-2].name) + "~& " \ + str(categories[self.number_of_click-1].name) b = [] b.append(categories[self.number_of_click-3]) @@ -1196,7 +1412,7 @@ class ScorePadActivity(activity.Activity): self.main_table.show_all() if ((self.number_of_click - self.category_length) == 1): a = "" - a = str(categories[self.category_length-2].name) + " " + str(categories[self.number_of_click-1].name) + a = str(categories[self.category_length-2].name) + "~& " + str(categories[self.category_length-1].name) b = [] b.append(categories[self.category_length-2]) b.append(categories[self.category_length-1]) @@ -1206,7 +1422,7 @@ class ScorePadActivity(activity.Activity): self.processtable.attach(self.chartbox, 0,2,2,11) self.main_table.show_all() else: - print "Out of bounds" + logging.debug("Out of bounds") def build_barchart(self,category_list, categories, level_list, project_id, rubric_id): barchart = multi_bar_chart.MultiBarChart() @@ -1215,7 +1431,7 @@ class ScorePadActivity(activity.Activity): i = 0 for categoryname in category_list.split(): - categoryname_label = categoryname.capitalize() + categoryname_label = categoryname.replace('~&',' ').capitalize() multibar = multi_bar_chart.BarGroup(categoryname, categoryname_label) category_id = categories[i].category_id levels_temp = self.scorepadDB.query_level(category_id) @@ -1224,7 +1440,7 @@ class ScorePadActivity(activity.Activity): count = 0 level_id = levels_temp[j].level_id count = self.scorepadDB.query_score(project_id, rubric_id, category_id, level_id) - levelname_label = levelname.capitalize() + levelname_label = levelname.replace('~&',' ').capitalize() sub_bar = multi_bar_chart.Bar(levelname, count, levelname_label) multibar.add_bar(sub_bar) print "count : " + str(count) @@ -1232,14 +1448,26 @@ class ScorePadActivity(activity.Activity): barchart.add_bar(multibar) i = i + 1 return barchart + + def search_rubric(self, rubric_id): + for element in RUBRICLIST: + if element.rubric_id == rubric_id: + return element + for element in OTHER_RUBRICLIST: + if element.rubric_id == rubric_id: + return element + return None + +# def destroy(self, widget, data=None): +# gtk.main_quit() + +# def main(self): +# gtk.main() - def tutorial_cb(self, widget, data=None): - md = gtk.MessageDialog(parent = None, buttons = gtk.BUTTONS_OK, \ - flags = gtk.DIALOG_DESTROY_WITH_PARENT, \ - type = gtk.MESSAGE_INFO,\ - message_format = "Under construction.") - md.run() - md.destroy() + +#if __name__ == "__main__": +# scorepad = ScorePadActivity() +# scorepad.main() def update_status(self, nick, text): text = text.split("|") @@ -1247,13 +1475,22 @@ class ScorePadActivity(activity.Activity): if model_name == "Project": self._alert("Project was shared by", nick) - if self.is_exists: - rubric_id = self.rubric_exists - else: - rubric_id = self.scorepadDB.query_maxrubric() + self.is_project_owned = False + + if self.rubric_received: + if self.is_exists: + rubric_id = self.rubric_exists + logging.debug("rubric_id if not predef, exists in the list: " +str(rubric_id)) + else: + rubric_id = self.scorepadDB.query_maxrubric() + logging.debug("rubric_id if not predef, does not exists in the list: " +str(rubric_id)) + else: + rubric_id = text[9] #predefined kasi to kaya same ng rubric_id + logging.debug("rubric_id if predefined : " + str(rubric_id)) + project = Project(None, text[2], text[3], text[4], text[5],text[6],\ - 0, 1, rubric_id, text[10], text[11]) + 0, 1, rubric_id, text[10], text[11], text[12]) if self.scorepadDB.project_exists(project.project_sha, project.author): print "project exists" @@ -1266,12 +1503,10 @@ class ScorePadActivity(activity.Activity): FRIENDSPROJECTLIST.append(project) FRIENDSTITLELIST.append(project.title) self.currently_shared = project.project_sha - tuplelist1 = (TITLELIST, PROJECTLIST) - tuplelist2 = (FRIENDSTITLELIST, FRIENDSPROJECTLIST) self.processpanel.destroy() self.build_processframe("Projects") - panel = self.build_projectpanel(tuplelist1, tuplelist2) + panel = self.build_projectpanel() panel.modify_bg(gtk.STATE_NORMAL, gtk.gdk.Color(BACKGROUND_COLOR)) panel.set_border_width(5) self.processtable.attach(panel,0,2,0,11) @@ -1282,44 +1517,56 @@ class ScorePadActivity(activity.Activity): self.main_table.show_all() if model_name == "Rubric": - rubric = Rubric(None, text[2], text[3], text[4], 0, text[6], text[7]) + logging.debug("NASA RUBRIC KA!!") + self.rubric_received = True + rubric = Rubric(None, text[2], text[3], text[4], 0, text[6], text[7], text[8]) self.rubric_exists = self.scorepadDB.rubric_exists(rubric.rubric_sha, rubric.description) + logging.debug("ito ang rubric_sha : "+str(rubric.rubric_sha)) if self.rubric_exists == None: self.scorepadDB.insert_rubric(rubric) rubric_id = self.scorepadDB.query_maxrubric() rubric = self.scorepadDB.query_rubric(rubric_id) + logging.debug("ito ang sa loob ng if rubric_sha : "+str(rubric.rubric_sha)) OTHER_RUBRICLIST.append(rubric) OTHER_RUBRICTITLE.append(rubric.title) self.is_exists = False + logging.debug("Di nag-iexists yung rubric") else: self.is_exists = True + logging.debug("Nag-iexists yung rubric") if model_name == "Category": if self.is_exists == False: rubric_id = self.scorepadDB.query_maxrubric() - category = Category(None, text[2], rubric_id, text[4]) + category = Category(None, text[2], rubric_id, text[4], text[5]) self.scorepadDB.insert_category(category) if model_name == "Level": if self.is_exists == False: rubric_id = self.scorepadDB.query_maxrubric() category_id = self.scorepadDB.query_maxcategory() - level = Level(None, text[2], text[3], category_id, rubric_id, text[6]) + level = Level(None, text[2], text[3], category_id, rubric_id, text[6], text[7]) self.scorepadDB.insert_level(level) if model_name == "Score": - self._alert("Score received from", nick) project_sha = text[6] rubric_sha = text[7] category_sha = text[8] level_sha = text[9] - score_id = self.scorepadDB.query_score_id(project_sha, rubric_sha, category_sha, level_sha) - attr = self.scorepadDB.query_score_attr(score_id) - self.scorepadDB.increment_scorecount(attr[0], attr[1], attr[2], attr[3]) + + if self.scorepadDB.is_ownedproject(project_sha): + self._alert("Score received from", nick) + logging.debug('project_sha '+str(project_sha)+'rubric_sha '+str(rubric_sha)+'category_sha '+str(category_sha)\ + +'level_sha '+str(level_sha)) + score_id = self.scorepadDB.query_score_id(project_sha, rubric_sha, category_sha, level_sha) + attr = self.scorepadDB.query_score_attr(score_id) + logging.debug("Function: update_status; query_score_attr; score_id :"+str(score_id)) + self.scorepadDB.increment_scorecount(attr[0], attr[1], attr[2], attr[3]) + logging.debug('Function: update_status; increment_scorecount') def _alert(self, title, text=None): - alert = NotifyAlert(timeout=5) + alert = NotifyAlert(timeout=3) alert.props.title = title alert.props.msg = text self.add_alert(alert) @@ -1440,9 +1687,3 @@ class TextChannelWrapper(object): return pservice.get_buddy_by_telepathy_handle( tp_name, tp_path, handle) - - def destroy(self, widget, data=None): - gtk.main_quit() - - def main(self): - gtk.main() diff --git a/Template.py b/Template.py index c469c24..68ef7e6 100644 --- a/Template.py +++ b/Template.py @@ -1,97 +1,99 @@ -from Models import * +from Models import Rubric +from Models import Project +from Models import Category +from Models import Level import datetime class Template(): - def __init__(self, nickname = ""): + def __init__(self, nickname = "", scorepadDB =None): + self.scorepadDB = scorepadDB self.owner_nick = nickname - self.scorepadDB = ScorePadDB(self.owner_nick) def save_template(self): - today = datetime.date.today() + today = datetime.datetime.now() - rubric = Rubric(None, "Music", "Sample", "Music Rubric",1,self.owner_nick,"") + rubric = Rubric(None, "Music", "Sample", "Music Rubric",1,"sample","",1) self.scorepadDB.insert_rubric(rubric) rubric_id = self.scorepadDB.query_maxrubric() - category = Category(None, "Song", rubric_id,"") - level0 = Level(None, "Exemplary","Song relates to genre", None, rubric_id,"") - level1 = Level(None, "Proficient","Song loosely relates to genre", None, rubric_id,"") - level2 = Level(None, "Developing","Song doesn't relate to genre", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","No song chosen", None, rubric_id,"") + category = Category(None, "Song", rubric_id,"",25) + level0 = Level(None, "Exemplary","Song relates to genre", None, rubric_id,"",4) + level1 = Level(None, "Proficient","Song loosely relates to genre", None, rubric_id,"",3) + level2 = Level(None, "Developing","Song doesn't relate to genre", None, rubric_id,"",2) + level3 = Level(None, "Unsatisfactory","No song chosen", None, rubric_id,"",1) levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) - category = Category(None, "Presentation", rubric_id,"") - level0 = Level(None, "Exemplary","Song is explained.Tied well to genre.", None, rubric_id,"") + category = Category(None, "Presentation", rubric_id,"",25) + level0 = Level(None, "Exemplary","Song is explained.Tied well to genre.", None, rubric_id,"",4) level1 = Level(None, "Proficient","Song explained but not tied well to \ - genre/assignment.", None, rubric_id,"") - level2 = Level(None, "Developing","Vague explanation given.", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","No historical context given.", None, rubric_id,"") + genre/assignment.", None, rubric_id,"",3) + level2 = Level(None, "Developing","Vague explanation given.", None, rubric_id,"",2) + level3 = Level(None, "Unsatisfactory","No historical context given.", None, rubric_id,"",1) levels = [] levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) - category = Category(None, "Performance", rubric_id,"") - level0 = Level(None, "Exemplary","Taken seriously. Performed well", None, rubric_id,"") - level1 = Level(None, "Proficient","Performed well with some mistakes", None, rubric_id,"") - level2 = Level(None, "Developing","Not taken very seriously", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","Weak performance", None, rubric_id,"") + category = Category(None, "Performance", rubric_id,"",25) + level0 = Level(None, "Exemplary","Taken seriously. Performed well", None, rubric_id,"",4) + level1 = Level(None, "Proficient","Performed well with some mistakes", None, rubric_id,"",3) + level2 = Level(None, "Developing","Not taken very seriously", None, rubric_id,"",2) + level3 = Level(None, "Unsatisfactory","Weak performance", None, rubric_id,"",1) levels = [] levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) - category = Category(None, "Effort", rubric_id,"") - level0 = Level(None, "Exemplary","Went above and beyond for effort", None, rubric_id,"") - level1 = Level(None, "Proficient","Put significant effort", None, rubric_id,"") - level2 = Level(None, "Developing","Effort put is only asked in class", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","No effort put in", None, rubric_id,"") + category = Category(None, "Effort", rubric_id,"",25) + level0 = Level(None, "Exemplary","Went above and beyond for effort", None, rubric_id,"",4) + level1 = Level(None, "Proficient","Put significant effort", None, rubric_id,"",3) + level2 = Level(None, "Developing","Effort put is only asked in class", None, rubric_id,"",2) + level3 = Level(None, "Unsatisfactory","No effort put in", None, rubric_id,"",1) levels = [] levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) project = Project(None, "My song", "Sample", "Great Song","Music I",\ - str(today), 1, 1,rubric_id,self.owner_nick,"") + str(unicode(today.replace(microsecond=0))), 1, 1,rubric_id,"sample","",0) print project.subject self.scorepadDB.insert_project(project) - rubric = Rubric(None, "Art", "Sample", "Art Rubric",1,self.owner_nick,"") + rubric = Rubric(None, "Art", "Sample", "Art Rubric",1,"sample","",1) self.scorepadDB.insert_rubric(rubric) rubric_id = self.scorepadDB.query_maxrubric() - category = Category(None, "Creativity", rubric_id,"") - level0 = Level(None, "Exemplary","Generating many ideas", None, rubric_id,"") - level1 = Level(None, "Proficient","Based his or her work on someone else's idea", None, rubric_id,"") - level2 = Level(None, "Developing","Lacked originality", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","No evidence of trying anything unusual", None, rubric_id,"") + category = Category(None, "Creativity", rubric_id,"",33.3333) + level0 = Level(None, "Exemplary","Generating many ideas", None, rubric_id,"",5) + level1 = Level(None, "Proficient","Based his or her work on someone else's idea", None, rubric_id,"",4) + level2 = Level(None, "Developing","Lacked originality", None, rubric_id,"",3) + level3 = Level(None, "Unsatisfactory","No evidence of trying anything unusual", None, rubric_id,"",2) levels = [] levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) - category = Category(None, "Effort", rubric_id,"") - level0 = Level(None, "Exemplary","Gave it effort far beyond that required", None, rubric_id,"") - level1 = Level(None, "Proficient","The student work hard and completed the project", None, rubric_id,"") - level2 = Level(None, "Developing","Chose an easy project and did it indifferently", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","Completed with minimum effort", None, rubric_id,"") + category = Category(None, "Effort", rubric_id,"",33.3333) + level0 = Level(None, "Exemplary","Gave it effort far beyond that required", None, rubric_id,"",5) + level1 = Level(None, "Proficient","The student work hard and completed the project", None, rubric_id,"",4) + level2 = Level(None, "Developing","Chose an easy project and did it indifferently", None, rubric_id,"",3) + level3 = Level(None, "Unsatisfactory","Completed with minimum effort", None, rubric_id,"",2) levels = [] levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) - category = Category(None, "Craftsmanship/Skill", rubric_id,"") - level0 = Level(None, "Exemplary","The artwork was beautiful and patiently done", None, rubric_id,"") - level1 = Level(None, "Proficient","Lacks the finishing touches", None, rubric_id,"") - level2 = Level(None, "Developing","The student showed average craftsmanship", None, rubric_id,"") - level3 = Level(None, "Unsatisfactory","The student showed below average craftsmanship", None, rubric_id,"") + category = Category(None, "Craftsmanship/Skill", rubric_id,"",33.3333) + level0 = Level(None, "Exemplary","The artwork was beautiful and patiently done", None, rubric_id,"",5) + level1 = Level(None, "Proficient","Lacks the finishing touches", None, rubric_id,"",4) + level2 = Level(None, "Developing","The student showed average craftsmanship", None, rubric_id,"",3) + level3 = Level(None, "Unsatisfactory","The student showed below average craftsmanship", None, rubric_id,"",2) levels = [] levels = [level0, level1, level2, level3] self.scorepadDB.insert_criteria(category, levels) project2 = Project(None, "My Mosaic", "Sample", "Art Project","Art Stud I",\ - str(today), 0, 1,rubric_id,self.owner_nick,"") + str(unicode(today.replace(microsecond=0))), 0, 1,rubric_id,"sample","",0) self.scorepadDB.insert_project(project2) - diff --git a/dist/ScorePad-1.xo b/dist/ScorePad-1.xo index 3272bd4..3f1265d 100644 --- a/dist/ScorePad-1.xo +++ b/dist/ScorePad-1.xo Binary files differ diff --git a/images/AddProject.png b/images/AddProject.png new file mode 100644 index 0000000..54a7bef --- /dev/null +++ b/images/AddProject.png Binary files differ diff --git a/images/Projects.png b/images/Projects.png new file mode 100644 index 0000000..9c1c9a5 --- /dev/null +++ b/images/Projects.png Binary files differ diff --git a/images/Rubrics.png b/images/Rubrics.png new file mode 100644 index 0000000..f81c1c9 --- /dev/null +++ b/images/Rubrics.png Binary files differ diff --git a/images/author.png b/images/author.png new file mode 100644 index 0000000..0e693c6 --- /dev/null +++ b/images/author.png Binary files differ diff --git a/images/date.png b/images/date.png new file mode 100644 index 0000000..7d02983 --- /dev/null +++ b/images/date.png Binary files differ diff --git a/images/delete.png b/images/delete.png new file mode 100644 index 0000000..8becb90 --- /dev/null +++ b/images/delete.png Binary files differ diff --git a/images/description.png b/images/description.png new file mode 100644 index 0000000..7a8a1d9 --- /dev/null +++ b/images/description.png Binary files differ diff --git a/images/design1.png b/images/design1.png new file mode 100644 index 0000000..81aaa81 --- /dev/null +++ b/images/design1.png Binary files differ diff --git a/images/edit.png b/images/edit.png new file mode 100644 index 0000000..c15e65c --- /dev/null +++ b/images/edit.png Binary files differ diff --git a/images/evaluate.png b/images/evaluate.png new file mode 100644 index 0000000..f88989a --- /dev/null +++ b/images/evaluate.png Binary files differ diff --git a/images/finalize.png b/images/finalize.png new file mode 100644 index 0000000..5ea049e --- /dev/null +++ b/images/finalize.png Binary files differ diff --git a/images/left.png b/images/left.png new file mode 100644 index 0000000..3e2bc53 --- /dev/null +++ b/images/left.png Binary files differ diff --git a/images/projectdetails.png b/images/projectdetails.png new file mode 100644 index 0000000..c6a12aa --- /dev/null +++ b/images/projectdetails.png Binary files differ diff --git a/images/right.png b/images/right.png new file mode 100644 index 0000000..0742de9 --- /dev/null +++ b/images/right.png Binary files differ diff --git a/images/rubric.png b/images/rubric.png new file mode 100644 index 0000000..631b0b3 --- /dev/null +++ b/images/rubric.png Binary files differ diff --git a/images/scorepad.png b/images/scorepad.png new file mode 100644 index 0000000..b7030c6 --- /dev/null +++ b/images/scorepad.png Binary files differ diff --git a/images/seegrades.png b/images/seegrades.png new file mode 100644 index 0000000..5dc6aa2 --- /dev/null +++ b/images/seegrades.png Binary files differ diff --git a/images/share.png b/images/share.png new file mode 100644 index 0000000..8cd8d91 --- /dev/null +++ b/images/share.png Binary files differ diff --git a/images/subject.png b/images/subject.png new file mode 100644 index 0000000..0780db4 --- /dev/null +++ b/images/subject.png Binary files differ diff --git a/images/submit.png b/images/submit.png new file mode 100644 index 0000000..6482ee2 --- /dev/null +++ b/images/submit.png Binary files differ diff --git a/images/title.png b/images/title.png new file mode 100644 index 0000000..ba3c158 --- /dev/null +++ b/images/title.png Binary files differ diff --git a/images/update.png b/images/update.png new file mode 100644 index 0000000..77329a3 --- /dev/null +++ b/images/update.png Binary files differ -- cgit v0.9.1