class Ball(object):
DEFAULT_WIDTH = 10
- def __init__(self, x, y, r, name='', position=0):
+ def __init__(self, x, y, r, name='', position=0, selected=False):
self.position = position
+ self.selected = selected
self.x = int(x)
self.y = int(y)
self.radius = int(r)
self.dialog.set_transient_for(parent)
def get_project(self):
- if not self.dialog.run():
+ # This '1' was defined in the glade file
+ if not self.dialog.run() == 1:
return None
fname = self.wid('image').get_filename()
self.model = gtk.ListStore(int, str)
self.treeview = self.wid('treeview')
self.treeview.set_model(self.model)
+ self.treeview.connect('button-press-event', self.select_fp)
self.draw = self.wid('draw')
self.draw.connect_after('expose-event', self.expose_draw)
self.setup_treeview()
# drawing stuff
- self.selecting = False
self.start_x = -1
self.start_y = -1
self.radius = Ball.DEFAULT_WIDTH
project = proj.get_project()
proj.destroy()
- # This '1' was defined in the glade file
if project:
self.load_project(project)
self.balls = self.load_balls_from_file(project.focus_points_file)
self.image = project.image
- # loading the picture image and getting some useful
- # information to draw it in the widget's background
+ # I'm loading a pixbuf first because I need to get its
+ # dimensions this with a pixbuf is easier than with an image.
try:
- self.draw.set_from_file(project.image)
+ pixbuf = gtk.gdk.pixbuf_new_from_file(project.image)
except gobject.GError:
msg = _("Couldn't recognize the image file format.")
dialog = gtk.MessageDialog(self.window,
dialog.destroy()
return self.unload_project()
+ self.draw.set_from_pixbuf(pixbuf)
self.load_balls_to_treeview()
def unload_project(self):
del model[path]
self.draw.queue_draw()
+ def select_fp(self, treeview, event):
+ path, column, x, y = \
+ self.treeview.get_path_at_pos(int(event.x), int(event.y))
+ if path:
+ model = self.treeview.get_model()
+ ball = self.balls[model[path][0]]
+
+ # making sure that only one ball is selected
+ for i in self.balls:
+ i.selected = False
+ ball.selected = True
+
+ self.draw.queue_draw()
+
def save_fp_list(self, *args):
assert self.project is not None
def draw_ball(self, ball):
ctx = self.draw.window.cairo_create()
ctx.arc(ball.x, ball.y, ball.radius, 0, 64*math.pi)
- ctx.set_source_rgba(0.5, 0.0, 0.0, 0.4)
+ ctx.set_source_rgba(0.0, 0.0, 0.5, 0.4)
ctx.fill()
+ if ball.selected:
+ ctx.set_source_rgba(0.0, 0.5, 0.0, 0.4)
+ ctx.set_line_width(5)
+ ctx.arc(ball.x, ball.y, ball.radius+1, 0, 64*math.pi)
+ ctx.stroke()
+
def draw_current_ball(self):
if self.start_x < 0:
return
def button_press(self, widget, event):
if event.button == 1:
- self.selecting = True
self.start_x = event.x
self.start_y = event.y
self.last_x = event.x
def button_release(self, widget, event):
if event.button == 1:
- self.selecting = False
self.finish_drawing()
def motion_notify(self, widget, event):
self.model.append([position, ''])
self.treeview.set_cursor(str(position), self.fpcolumn, True)
- # returning to the standard radius
+ # reseting to the default coordenades
+ self.start_x = -1
+ self.start_y = -1
self.radius = Ball.DEFAULT_WIDTH
if __name__ == '__main__':