diff options
Diffstat (limited to 'YardStickActivity.py')
-rw-r--r-- | YardStickActivity.py | 1400 |
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) |