comparison tools/rect_drawer.py @ 482:2bef605a0ef2

Refactor to add support for key movement of images
author Neil Muller <neil@dip.sun.ac.za>
date Sun, 29 Aug 2010 14:09:34 +0200
parents 0630a37cb371
children f53aaba58273
comparison
equal deleted inserted replaced
477:51055400a9a8 482:2bef605a0ef2
12 from albow.widget import Widget 12 from albow.widget import Widget
13 from albow.controls import Button, Image 13 from albow.controls import Button, Image
14 from albow.palette_view import PaletteView 14 from albow.palette_view import PaletteView
15 from albow.file_dialogs import request_old_filename 15 from albow.file_dialogs import request_old_filename
16 from albow.resource import get_font 16 from albow.resource import get_font
17 from pygame.locals import SWSURFACE 17 from pygame.locals import SWSURFACE, K_LEFT, K_RIGHT, K_UP, K_DOWN
18 import pygame 18 import pygame
19 from pygame.colordict import THECOLORS 19 from pygame.colordict import THECOLORS
20 20
21 from gamelib import constants 21 from gamelib import constants
22 constants.DEBUG = True 22 constants.DEBUG = True
283 def mouse_move(self, e): 283 def mouse_move(self, e):
284 if self.mode == 'image' and self.current_image: 284 if self.mode == 'image' and self.current_image:
285 self.current_image.rect.topleft = e.pos 285 self.current_image.rect.topleft = e.pos
286 self.invalidate() 286 self.invalidate()
287 287
288 def key_down(self, e):
289 if self.mode == 'image' and self.current_image:
290 # Move the image by 1 pixel
291 cur_pos = self.current_image.rect.topleft
292 if e.key == K_LEFT:
293 self.current_image.rect.topleft = (cur_pos[0] - 1, cur_pos[1])
294 elif e.key == K_RIGHT:
295 self.current_image.rect.topleft = (cur_pos[0] + 1, cur_pos[1])
296 elif e.key == K_UP:
297 self.current_image.rect.topleft = (cur_pos[0], cur_pos[1] - 1)
298 elif e.key == K_DOWN:
299 self.current_image.rect.topleft = (cur_pos[0], cur_pos[1] + 1)
300
288 def mouse_down(self, e): 301 def mouse_down(self, e):
289 if self.mode == 'del': 302 if self.mode == 'del':
290 pos = e.pos 303 pos = e.pos
291 cand = None 304 cand = None
292 # Images are drawn above rectangles, so search those first 305 # Images are drawn above rectangles, so search those first
320 cand = image 333 cand = image
321 break 334 break
322 if cand: 335 if cand:
323 self.images.remove(cand) 336 self.images.remove(cand)
324 self.current_image = cand 337 self.current_image = cand
338 self.current_image.topleft = e.pos
325 self.invalidate() 339 self.invalidate()
326 340
327 def mouse_up(self, e): 341 def mouse_up(self, e):
328 if self.mode == 'draw': 342 if self.mode == 'draw':
329 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1], 343 rect = pygame.rect.Rect(self.start_pos[0], self.start_pos[1],
343 button.align = 'l' 357 button.align = 'l'
344 button.rect = pygame.rect.Rect(0, 0, 200, 35) 358 button.rect = pygame.rect.Rect(0, 0, 200, 35)
345 button.rect.move_ip(805, ypos) 359 button.rect.move_ip(805, ypos)
346 return button 360 return button
347 361
362 class RectApp(RootWidget):
363 """Handle the app stuff for the rect drawer"""
364
365 def __init__(self, display):
366 super(RectApp, self).__init__(display)
367 self.image = AppImage(state)
368 self.add(self.image)
369 draw = make_button('Draw Rect', self.image.draw_mode, 0)
370 self.add(draw)
371 load_image = make_button("Load image", self.image.image_load, 35)
372 self.add(load_image)
373 add_image = make_button("Place/Move images", self.image.image_mode, 70)
374 add_image.enabled = False
375 self.add(add_image)
376 self.image.place_image_menu = add_image
377 delete = make_button('Delete Objects', self.image.del_mode, 105)
378 self.add(delete)
379 palette = AppPalette(self.image)
380 palette.rect.move_ip(810, 140)
381 self.add(palette)
382 print_rects = make_button("Print objects", self.image.print_objs, 300)
383 self.add(print_rects)
384 toggle_things = make_button("Toggle Things", self.image.toggle_things, 335)
385 self.add(toggle_things)
386 toggle_thing_rects = make_button("Toggle Thing Rects", self.image.toggle_thing_rects, 370)
387 self.add(toggle_thing_rects)
388 toggle_images = make_button("Toggle Images", self.image.toggle_images, 405)
389 self.add(toggle_images)
390 toggle_rects = make_button("Toggle Rects", self.image.toggle_rects, 440)
391 self.add(toggle_rects)
392 toggle_toolbar = make_button("Toggle Toolbar", self.image.toggle_toolbar, 475)
393 self.add(toggle_toolbar)
394 quit_but = make_button("Quit", self.quit, 565)
395 self.add(quit_but)
396
397 def key_down(self, event):
398 # Dispatch to image widget
399 self.image.key_down(event)
400
401
348 if __name__ == "__main__": 402 if __name__ == "__main__":
349 # FIXME: should load an actual scene with current things, not just a 403 # FIXME: should load an actual scene with current things, not just a
350 # background image 404 # background image
351 if len(sys.argv) < 2: 405 if len(sys.argv) < 2:
352 print 'Please provide a scene name' 406 print 'Please provide a scene name'
353 sys.exit(0) 407 sys.exit(0)
354 pygame.display.init() 408 pygame.display.init()
355 pygame.font.init() 409 pygame.font.init()
410 # enable key repeating
411 pygame.key.set_repeat(200, 100)
356 display = pygame.display.set_mode((1000, 600)) 412 display = pygame.display.set_mode((1000, 600))
357 state = state.initial_state() 413 state = state.initial_state()
358 if len(sys.argv) < 3: 414 if len(sys.argv) < 3:
359 try: 415 try:
360 state.set_current_scene(sys.argv[1]) 416 state.set_current_scene(sys.argv[1])
368 state.set_current_detail(sys.argv[2]) 424 state.set_current_detail(sys.argv[2])
369 state.do_check = None 425 state.do_check = None
370 except KeyError: 426 except KeyError:
371 print 'Invalid scene name' 427 print 'Invalid scene name'
372 sys.exit(1) 428 sys.exit(1)
373 app = RootWidget(display) 429 app = RectApp(display)
374 image = AppImage(state)
375 app.add(image)
376 draw = make_button('Draw Rect', image.draw_mode, 0)
377 app.add(draw)
378 load_image = make_button("Load image", image.image_load, 35)
379 app.add(load_image)
380 add_image = make_button("Place/Move images", image.image_mode, 70)
381 add_image.enabled = False
382 app.add(add_image)
383 image.place_image_menu = add_image
384 delete = make_button('Delete Objects', image.del_mode, 105)
385 app.add(delete)
386 palette = AppPalette(image)
387 palette.rect.move_ip(810, 140)
388 app.add(palette)
389 print_rects = make_button("Print objects", image.print_objs, 300)
390 app.add(print_rects)
391 toggle_things = make_button("Toggle Things", image.toggle_things, 335)
392 app.add(toggle_things)
393 toggle_thing_rects = make_button("Toggle Thing Rects", image.toggle_thing_rects, 370)
394 app.add(toggle_thing_rects)
395 toggle_images = make_button("Toggle Images", image.toggle_images, 405)
396 app.add(toggle_images)
397 toggle_rects = make_button("Toggle Rects", image.toggle_rects, 440)
398 app.add(toggle_rects)
399 toggle_toolbar = make_button("Toggle Toolbar", image.toggle_toolbar, 475)
400 app.add(toggle_toolbar)
401 quit_but = make_button("Quit", app.quit, 565)
402 app.add(quit_but)
403 app.run() 430 app.run()