class InkToolBar(gtk.Toolbar): # Constructor def __init__(self, arbiter): gtk.Toolbar.__init__(self) self.__arbiter = arbiter self.__logger = logging.getLogger('InkToolBar') self.__logger.setLevel(logging.DEBUG) self.__cur_color = self.__arbiter.get_pen_color() self.__cur_color_str = "blue" self.__cur_pen = self.__arbiter.get_pen_size() self.__arbiter.connect_slide_redraw(self.update_buttons) self.__arbiter.connect_undo_redo_changed(self.update_buttons) # Red Ink self.__red = gtk.RadioToolButton() self.__red.set_icon_name('red-button') self.insert(self.__red, -1) self.__red.show() #self.__red.set_tooltip('Red Ink') self.__red.connect('clicked', self.set_ink_color, 1.0, 0.0, 0.0, "red") # Green Ink self.__green = gtk.RadioToolButton(group=self.__red) self.__green.set_icon_name('green-button') self.insert(self.__green, -1) self.__green.show() #self.__green.set_tooltip('Green Ink') self.__green.connect('clicked', self.set_ink_color, 0.0, 1.0, 0.0, "green") # Blue Ink self.__blue = gtk.RadioToolButton(group=self.__red) self.__blue.set_icon_name('blue-button') self.insert(self.__blue, -1) self.__blue.show() #self.__blue.set_tooltip('Blue Ink') self.__blue.connect('clicked', self.set_ink_color, 0.0, 0.0, 1.0, "blue") # Black Ink self.__black = gtk.RadioToolButton(group=self.__red) self.__black.set_icon_name('black-button') self.insert(self.__black, -1) self.__black.show() #self.__black.set_tooltip('Black Ink') self.__black.connect('clicked', self.set_ink_color, 0.0, 0.0, 0.0, "black") # Separate ink from untensils separator = gtk.SeparatorToolItem() separator.set_draw(False) self.insert(separator, -1) separator.show() # Pencil self.__pencil = gtk.RadioToolButton() self.__pencil.set_icon_name('tool-pencil') self.insert(self.__pencil, -1) self.__pencil.show() #self.__pencil.set_tooltip('Pencil') self.__pencil.connect('clicked', self.set_cur_pen, 4) # Brush self.__brush = gtk.RadioToolButton(self.__pencil) self.__brush.set_icon_name('tool-brush') self.insert(self.__brush, -1) self.__brush.show() #self.__brush.set_tooltip('Brush') self.__brush.connect('clicked', self.set_cur_pen, 8) # Erase self.__erase = ToolButton('tool-eraser') self.insert(self.__erase, -1) self.__erase.show() self.__erase.set_tooltip(_('Erase All Ink')) self.__erase.connect('clicked', self.erase_btn_clicked) """ # Text self.__text = ToolButton('text') self.insert(self.__text, -1) self.__text.show() self.__text.set_tooltip('Text') """ # Separate tools from text separator = gtk.SeparatorToolItem() separator.set_draw(False) self.insert(separator, -1) separator.show() # Undo self.__undo = ToolButton('edit-undo') self.insert(self.__undo, -1) self.__undo.show() self.__undo.set_tooltip(_('Undo')) self.__undo.connect('clicked', self.undo) # Redo self.__redo = ToolButton('edit-redo') self.insert(self.__redo, -1) self.__redo.show() self.__redo.set_tooltip(_('Redo')) self.__redo.connect('clicked', self.redo) separator = gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.insert(separator, -1) separator.show() self.__submit = ToolButton('broadcast') self.insert(self.__submit, -1) self.__submit.show() self.__submit.set_tooltip(_('Broadcast Submission')) self.__submit.connect('clicked', self.submit_ink_cb) self.__arbiter.connect_joined(self.activity_joined_cb) self.set_tool_buttons() self.show() self.update_buttons() def activity_joined_cb(self, widget): self.__submit.set_tooltip(_('Submit Ink')) self.__submit.set_icon('dialog-ok') def set_cur_pen(self, widget, size): self.__arbiter.do_set_pen(size) def set_ink_color(self, widget, r, g, b, color): self.__arbiter.do_set_color(r, g, b) def erase_btn_clicked(self, widget): self.__arbiter.do_clear_ink() def set_tool_buttons(self): if self.__cur_color == (1.0, 0.0, 0.0): self.__red.set_active(True) elif self.__cur_color == (0.0, 1.0, 0.0): self.__green.set_active(True) elif self.__cur_color == (0.0, 0.0, 1.0): self.__blue.set_active(True) else: self.__black.set_active(True) if self.__cur_pen == 2: self.__pencil.set_active(True) elif self.__cur_pen == 5: self.__brush.set_active(True) def submit_ink_cb(self, widget): if self.__arbiter.get_is_instructor(): self.__logger.debug("Broadcast clicked") self.broadcast_ink() else: self.__logger.debug("Submit clicked") self.__submit.set_sensitive(False) self.__timer = threading.Timer(10.0, self.reenable_submissions) self.__timer.start() self.__arbiter.do_submit_ink() def broadcast_ink(self): self.__arbiter.do_broadcast_ink() def reenable_submissions(self): gtk.gdk.threads_enter() self.__submit.set_sensitive(True) self.__submit.queue_draw() gtk.gdk.threads_leave() def undo(self, widget): self.__arbiter.do_undo() def redo(self, widget): self.__arbiter.do_redo() def update_buttons(self, widget=None): can_undo, can_redo = self.__arbiter.get_can_undo_redo() self.__undo.set_sensitive(can_undo) self.__redo.set_sensitive(can_redo) if self.__arbiter.get_is_instructor(): if self.__arbiter.get_active_submission() == -1: self.__submit.set_sensitive(False) else: self.__submit.set_sensitive(True)
class InkToolBar(gtk.Toolbar): # Constructor def __init__(self, slideviewer, deck): gtk.Toolbar.__init__(self) self.__slideviewer = slideviewer self.__cur_color = slideviewer.get_color() self.__cur_color_str = "blue" self.__cur_pen = slideviewer.get_pen() self.__deck = deck self.__deck.connect('slide-redraw', self.update_buttons) self.__slideviewer.connect('undo-redo-changed', self.update_buttons) self.__is_instr = False # Red Ink self.__red = gtk.RadioToolButton() self.__red.set_icon_name('red-button') self.insert(self.__red, -1) self.__red.show() #self.__red.set_tooltip('Red Ink') self.__red.connect('clicked', self.set_ink_color, 1.0, 0.0, 0.0, "red") # Green Ink self.__green = gtk.RadioToolButton(group=self.__red) self.__green.set_icon_name('green-button') self.insert(self.__green, -1) self.__green.show() #self.__green.set_tooltip('Green Ink') self.__green.connect('clicked', self.set_ink_color, 0.0, 1.0, 0.0, "green") # Blue Ink self.__blue = gtk.RadioToolButton(group=self.__red) self.__blue.set_icon_name('blue-button') self.insert(self.__blue, -1) self.__blue.show() #self.__blue.set_tooltip('Blue Ink') self.__blue.connect('clicked', self.set_ink_color, 0.0, 0.0, 1.0, "blue") # Black Ink self.__black = gtk.RadioToolButton(group=self.__red) self.__black.set_icon_name('black-button') self.insert(self.__black, -1) self.__black.show() #self.__black.set_tooltip('Black Ink') self.__black.connect('clicked', self.set_ink_color, 0.0, 0.0, 0.0, "black") # Separate ink from untensils separator = gtk.SeparatorToolItem() separator.set_draw(False) self.insert(separator, -1) separator.show() # Pencil self.__pencil = gtk.RadioToolButton() self.__pencil.set_icon_name('tool-pencil') self.insert(self.__pencil, -1) self.__pencil.show() #self.__pencil.set_tooltip('Pencil') self.__pencil.connect('clicked', self.set_cur_pen, 4) # Brush self.__brush = gtk.RadioToolButton(self.__pencil) self.__brush.set_icon_name('tool-brush') self.insert(self.__brush, -1) self.__brush.show() #self.__brush.set_tooltip('Brush') self.__brush.connect('clicked', self.set_cur_pen, 8) # Erase self.__erase = ToolButton('tool-eraser') self.insert(self.__erase, -1) self.__erase.show() self.__erase.set_tooltip('Erase All Ink') self.__erase.connect('clicked', self.set_erase) """ # Text self.__text = ToolButton('text') self.insert(self.__text, -1) self.__text.show() self.__text.set_tooltip('Text') """ # Separate tools from text separator = gtk.SeparatorToolItem() separator.set_draw(False) self.insert(separator, -1) separator.show() # Undo self.__undo = ToolButton('edit-undo') self.insert(self.__undo, -1) self.__undo.show() self.__undo.set_tooltip('Undo') self.__undo.connect('clicked', self.undo) # Redo self.__redo = ToolButton('edit-redo') self.insert(self.__redo, -1) self.__redo.show() self.__redo.set_tooltip('Redo') self.__redo.connect('clicked', self.redo) separator = gtk.SeparatorToolItem() separator.set_draw(False) separator.set_expand(True) self.insert(separator, -1) separator.show() self.__submit = ToolButton('dialog-ok') #FIXME (though actually not a terrible icon) self.insert(self.__submit, -1) self.__submit.show() self.__submit.set_tooltip('Broadcast Submission') self.__submit.connect('clicked', self.submit_ink) self.__deck.connect('instr_state_propagate', self.instructor_state_cb) self.set_tool_buttons() self.show() def instructor_state_cb(self, widget, is_instr): self.__is_instr = is_instr if is_instr: self.__submit.set_tooltip('Broadcast Submission') else: self.__submit.set_tooltip('Submit Ink') def set_cur_pen(self, widget, size): self.__slideviewer.set_pen(size) def set_ink_color(self, widget, r, g, b, color): self.__slideviewer.set_color(r, g, b) def set_erase(self, widget): self.__slideviewer.clear_ink() def set_tool_buttons(self): if self.__cur_color == (1.0, 0.0, 0.0): self.__red.set_active(True) elif self.__cur_color == (0.0, 1.0, 0.0): self.__green.set_active(True) elif self.__cur_color == (0.0, 0.0, 1.0): self.__blue.set_active(True) else: self.__black.set_active(True) if self.__cur_pen == 2: self.__pencil.set_active(True) elif self.__cur_pen == 5: self.__brush.set_active(True) def submit_ink(self, widget): if self.__is_instr: self.broadcast_ink() else: self.__submit.set_sensitive(False) self.__timer = threading.Timer(3.0, self.reenable_submissions) self.__timer.start() self.__slideviewer.submit_ink() def broadcast_ink(self): self.__slideviewer.broadcast_ink() def reenable_submissions(self): self.__submit.set_sensitive(True) self.__submit.queue_draw() def undo(self, widget): self.__slideviewer.undo() def redo(self, widget): self.__slideviewer.redo() def update_buttons(self, widget=None): can_undo, can_redo = self.__slideviewer.can_undo_redo() self.__undo.set_sensitive(can_undo) self.__redo.set_sensitive(can_redo) if self.__is_instr: if self.__deck.getActiveSubmission() == -1: self.__submit.set_sensitive(False) else: self.__submit.set_sensitive(True)