From 5eaecae93f7ba32b6bec9515dfa465130bc8b808 Mon Sep 17 00:00:00 2001 From: Jeff Armstrong Date: Sun, 24 Jul 2011 22:26:32 -0400 Subject: Added VDI routines. Added proper resource handling, some menu library code, and object library code. --- example/simple.h | 8 ++++ example/simple.hrd | Bin 0 -> 82 bytes example/simple.py | 119 ++++++++++++++++++++++++++++++++++++----------------- example/simple.rsc | Bin 0 -> 1118 bytes 4 files changed, 89 insertions(+), 38 deletions(-) create mode 100644 example/simple.h create mode 100644 example/simple.hrd create mode 100644 example/simple.rsc (limited to 'example') diff --git a/example/simple.h b/example/simple.h new file mode 100644 index 0000000..470c481 --- /dev/null +++ b/example/simple.h @@ -0,0 +1,8 @@ +/* Resource file indices for SIMPLE. */ + +#define MENU 0 /* Menu-tree */ +#define M_ABOUT 7 /* STRING in tree MENU */ +#define M_QUIT 16 /* STRING in tree MENU */ + +#define ABOUT 1 /* Form/Dialog-box */ +#define B_ABOUT_OK 1 /* BUTTON in tree ABOUT */ diff --git a/example/simple.hrd b/example/simple.hrd new file mode 100644 index 0000000..89efe33 Binary files /dev/null and b/example/simple.hrd differ diff --git a/example/simple.py b/example/simple.py index 8cfc487..aa91184 100644 --- a/example/simple.py +++ b/example/simple.py @@ -1,39 +1,82 @@ -import gem - -class AppMessageEvent(gem.MessageEvent): - def __init__(self,app): - gem.MessageEvent.__init__(self) - - self.app = app - self.window = app.windows[0] - - def process(self): - - # First call the super's process() - gem.MessageEvent.process(self) - - if self.message == gem.WM_CLOSED: - self.app.event_processing = False - - elif self.message == gem.WM_TOPPED: - self.window.top() - - elif self.message == gem.WM_MOVED or self.message == gem.WM_SIZED: - rect = (self.get_word(4),self.get_word(5),self.get_word(6),self.get_word(7)) - self.window.resize(rect) - -def start_app(): - - app = gem.Application() - - w = app.new_window((60,60,500,300),'Awesome!') - - app.message_event = AppMessageEvent(app) - - app.event_loop() - - app.destroy() - - -if __name__ == "__main__": +import gem +import gem.vdi + +# Taken from resource headers +MENU = 0 +M_ABOUT = 7 +M_QUIT = 16 +ABOUT = 1 +B_ABOUT_OK = 1 + +def redraw(window): + + window.begin_update() + vh = window.graphics_handle() + gem.vdi.vsf_color(vh,0) + + for r in window.get_invalid_rectangles(): + todraw = window.intersect_work_area(r) + if todraw is not None: + gem.vdi.vs_clip(vh, True, todraw) + gem.vdi.bar(vh,todraw) + gem.vdi.vs_clip(vh, False, todraw) + + window.end_update() + +class AppMessageEvent(gem.MessageEvent): + def __init__(self,app): + gem.MessageEvent.__init__(self) + + self.app = app + self.window = app.windows[0] + + def handle_menu(self,item): + if item == M_QUIT: + self.app.send_message((gem.WM_CLOSED, 0, 0, self.window.id)) + + elif item == M_ABOUT: + dlg = self.app.get_resource_address(gem.R_OBJECT,ABOUT) + self.app.draw_object(dlg,2) + self.app.form_do(dlg) + + def process(self): + + # First call the super's process() + gem.MessageEvent.process(self) + + if self.message == gem.WM_CLOSED: + self.app.event_processing = False + + elif self.message == gem.WM_TOPPED: + self.window.top() + + elif self.message == gem.WM_MOVED or self.message == gem.WM_SIZED: + rect = (self.get_word(4),self.get_word(5),self.get_word(6),self.get_word(7)) + self.window.resize(rect) + + elif self.message == gem.WM_REDRAW: + redraw(self.window) + + # Menu handling + elif self.message == gem.MN_SELECTED: + self.handle_menu(self.get_word(4)) + +def start_app(): + + app = gem.Application() + + app.load_resource("simple.rsc") + + app.set_menu(MENU) + + w = app.new_window((60,60,500,300),'Awesome!') + + app.message_event = AppMessageEvent(app) + + app.event_loop() + + app.destroy() + + +if __name__ == "__main__": start_app() \ No newline at end of file diff --git a/example/simple.rsc b/example/simple.rsc new file mode 100644 index 0000000..599c5bb Binary files /dev/null and b/example/simple.rsc differ -- cgit v1.2.3