# Copyright 2008 by Peter Moxhay and Wade Brainerd. # This file is part of Math. # # Math 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 3 of the License, or # (at your option) any later version. # # Math 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 Math. If not, see . from objectarea import Object from vector import Vector import gtk from droporiginobject import DropOriginObject from symbolobject import SymbolObject class SignsOriginObject(DropOriginObject): """Rectangular area that is a source of draggable signs.""" def __init__(self, pos, container, drop_targets): DropOriginObject.__init__(self, pos, Vector(80, 320), container) self.drop_targets = drop_targets self.ltsymbol = SymbolObject(Vector(0, 0), '<', self.drop_targets, self.container, size=80) self.ltsymbol.drop_origin = self self.ltsymbol.use_minimum_width_and_height = True self.eqsymbol = SymbolObject(Vector(100, 0), '=', self.drop_targets, self.container, size=80) self.eqsymbol.drop_origin = self self.eqsymbol.use_minimum_width_and_height = True self.gtsymbol = SymbolObject(Vector(200, 0), '>', self.drop_targets, self.container, size=80) self.gtsymbol.drop_origin = self self.gtsymbol.use_minimum_width_and_height = True self.ltsymbol.drag_type = None self.ltsymbol.selected = False self.ltsymbol.selectable = True self.ltsymbol.dragged = False self.ltsymbol.draggable = True self.eqsymbol.drag_type = None self.eqsymbol.selected = False self.eqsymbol.selectable = True self.eqsymbol.dragged = False self.eqsymbol.draggable = True self.gtsymbol.drag_type = None self.gtsymbol.selected = False self.gtsymbol.selectable = True self.gtsymbol.dragged = False self.gtsymbol.draggable = True self.add_object(self.ltsymbol) self.add_object(self.eqsymbol) self.add_object(self.gtsymbol) self.background_visible = True def reset(self): self.ltsymbol.move(self.pos + Vector(0, 0)) self.eqsymbol.move(self.pos + Vector(100, 0)) self.gtsymbol.move(self.pos + Vector(200, 0)) self.ltsymbol.drag_type = None self.ltsymbol.selectable = True self.ltsymbol.dragged = False self.ltsymbol.draggable = True self.ltsymbol.moving_by_key_press = False self.eqsymbol.drag_type = None self.eqsymbol.selectable = True self.eqsymbol.dragged = False self.eqsymbol.draggable = True self.eqsymbol.moving_by_key_press = False self.gtsymbol.drag_type = None self.gtsymbol.selectable = True self.gtsymbol.dragged = False self.gtsymbol.draggable = True self.gtsymbol.moving_by_key_press = False # Adjust tabbing order. if self.container: #self.container.select_object(self.ltsymbol) self.container.adjust_tab_order() def remove_contents(self): self.ltsymbol.drag_type = None self.ltsymbol.selected = False self.ltsymbol.selectable = False self.ltsymbol.dragged = False self.ltsymbol.draggable = False self.eqsymbol.drag_type = None self.eqsymbol.selected = False self.eqsymbol.selectable = False self.eqsymbol.dragged = False self.eqsymbol.draggable = False self.gtsymbol.drag_type = None self.gtsymbol.selected = False self.gtsymbol.selectable = False self.gtsymbol.dragged = False self.gtsymbol.draggable = False self.ltsymbol.move(Vector(10000, 10000)) self.eqsymbol.move(Vector(10000, 10000)) self.gtsymbol.move(Vector(10000, 10000)) self.remove_object(self.ltsymbol) self.remove_object(self.eqsymbol) self.remove_object(self.gtsymbol) def draw(self, cr): pass def get_bounds(self): return self.pos, self.pos + self.size def draw_background(self, cr): if not self.background_visible: return text = '<' pos = Vector(850, 750) cr.set_source_rgb(0, 0, 0) cr.set_font_size(80) x_bearing, y_bearing, width, height = cr.text_extents(text)[:4] cr.move_to(pos.x - x_bearing - width/2, pos.y - y_bearing - height/2) cr.show_text(text) text = '=' pos = Vector(950, 750) cr.set_source_rgb(0, 0, 0) cr.set_font_size(80) x_bearing, y_bearing, width, height = cr.text_extents(text)[:4] cr.move_to(pos.x - x_bearing - width/2, pos.y - y_bearing - height/2) cr.show_text(text) text = '>' pos = Vector(1050, 750) cr.set_source_rgb(0, 0, 0) cr.set_font_size(80) x_bearing, y_bearing, width, height = cr.text_extents(text)[:4] cr.move_to(pos.x - x_bearing - width/2, pos.y - y_bearing - height/2) cr.show_text(text)