diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-08 18:02:57 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-08 18:02:57 +0300 |
commit | 02e23c16dd9e403deb1694829c11d16dc47392ee (patch) | |
tree | f5ec9e3f68bad13137bdeafa326281c74387327e /source/blender/editors/space_time | |
parent | 11e15bf68979670b2257814aa296886222b3ee40 (diff) |
2.5
Part one of wrapping up area/region management.
Read design doc here:
http://wiki.blender.org/index.php/BlenderDev/Blender2.5/AreaManager
This commit:
- brings keymap storage to WM, based on names/types. This structure
allows rna-ifying it too, so you can browse keymaps etc.
- creating areas and regions works slightly different now, wich
regiontypes stored in areatype.
Todo:
- better callbacks and structure for defining which handlers need to
be added.
- using region types to validate regions
- proper implementation of local region data
- code method for customizing keymaps. Current idea is that you have
to indicate an entire keymap to be custom, to prevent too complicated
merging problems of default and custom maps (like order, multiple keys
for same operator, disabling options, etc).
Diffstat (limited to 'source/blender/editors/space_time')
-rw-r--r-- | source/blender/editors/space_time/space_time.c | 101 | ||||
-rw-r--r-- | source/blender/editors/space_time/time_ops.c | 26 |
2 files changed, 70 insertions, 57 deletions
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c index bb9a99ec577..29b3b4559cb 100644 --- a/source/blender/editors/space_time/space_time.c +++ b/source/blender/editors/space_time/space_time.c @@ -36,10 +36,13 @@ #include "MEM_guardedalloc.h" +#include "BLI_blenlib.h" + #include "BKE_global.h" #include "BKE_screen.h" #include "ED_area.h" +#include "ED_screen.h" #include "WM_api.h" #include "WM_types.h" @@ -226,52 +229,38 @@ static void time_free(SpaceLink *sl) { } + /* spacetype; init callback */ +/* init is called to (re)initialize an existing editor (file read, screen changes) */ static void time_init(wmWindowManager *wm, ScrArea *sa) { ARegion *ar; /* link area to SpaceXXX struct */ + sa->type= BKE_spacetype_from_id(SPACE_TIME); /* add handlers to area */ /* define how many regions, the order and types */ - /* add types to regions */ + /* add types to regions, check handlers */ for(ar= sa->regionbase.first; ar; ar= ar->next) { - if(ar->regiontype == RGN_TYPE_WINDOW) { - static ARegionType mainart={NULL, NULL, NULL, NULL, NULL}; - - mainart.init= time_main_area_init; - mainart.refresh= time_main_area_refresh; - mainart.draw= time_main_area_draw; - mainart.listener= time_main_area_listener; - - ar->type= &mainart; - - /* XXX the windowmanager may not be the best place to keep these - * keymaps, and this function callback may not be the best one - * to add the keymap handler, also will need to take care of - * area type changes, etc, basically space callbacks need to - * be looked at further */ - WM_event_remove_keymap_handler(&ar->handlers, &wm->timekeymap); - WM_event_add_keymap_handler(&ar->handlers, &wm->timekeymap); - WM_event_add_keymap_handler(&ar->handlers, &wm->view2dkeymap); // XXX this should be added automatically! - } - else if(ar->regiontype == RGN_TYPE_HEADER) { - static ARegionType headerart={NULL, NULL, NULL, NULL, NULL}; - - headerart.draw= time_header_area_draw; - headerart.free= time_header_area_free; - - ar->type= &headerart; - WM_event_add_keymap_handler(&ar->handlers, &wm->uikeymap); - WM_event_add_keymap_handler(&ar->handlers, &wm->view2dkeymap); // XXX this should be added automatically! - } - else { - static ARegionType art={NULL, NULL, NULL, NULL, NULL}; - - /* for time being; register 1 type */ - ar->type= &art; + + ar->type= ED_regiontype_from_id(sa->type, ar->regiontype); /* XXX fix type and id */ + + if(ar->handlers.first==NULL) { + ListBase *keymap; + + /* XXX fixme, should be smarter */ + + keymap= WM_keymap_listbase(wm, "Interface", 0, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); + + /* own keymap */ + keymap= WM_keymap_listbase(wm, "TimeLine", sa->spacetype, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); + + keymap= WM_keymap_listbase(wm, "View2D", 0, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); } } } @@ -291,20 +280,42 @@ static SpaceLink *time_duplicate(SpaceLink *sl) } /* only called once, from screen/spacetypes.c */ +/* it defines all callbacks to maintain spaces */ void ED_spacetype_time(void) { - static SpaceType st; + SpaceType *st= MEM_callocN(sizeof(SpaceType), "spacetype time"); + ARegionType *art; + + st->spaceid= SPACE_TIME; + strncpy(st->name, "Timeline", BKE_ST_MAXNAME); + + st->new= time_new; + st->free= time_free; + st->init= time_init; + st->refresh= time_refresh; + st->duplicate= time_duplicate; + st->operatortypes= time_operatortypes; + st->keymap= time_keymap; + + /* regions: main window */ + art= MEM_callocN(sizeof(ARegionType), "spacetype time region"); + art->regionid = RGN_TYPE_WINDOW; + + art->init= time_main_area_init; + art->refresh= time_main_area_refresh; + art->draw= time_main_area_draw; + art->listener= time_main_area_listener; + BLI_addhead(&st->regiontypes, art); + + /* regions: header */ + art= MEM_callocN(sizeof(ARegionType), "spacetype time region"); + art->regionid = RGN_TYPE_HEADER; - st.spaceid= SPACE_TIME; + art->draw= time_header_area_draw; + art->free= time_header_area_free; + BLI_addhead(&st->regiontypes, art); - st.new= time_new; - st.free= time_free; - st.init= time_init; - st.refresh= time_refresh; - st.duplicate= time_duplicate; - st.operatortypes= time_operatortypes; - st.keymap= time_keymap; - BKE_spacetype_register(&st); + BKE_spacetype_register(st); } diff --git a/source/blender/editors/space_time/time_ops.c b/source/blender/editors/space_time/time_ops.c index 9b7af8b3f45..bc0ed1634da 100644 --- a/source/blender/editors/space_time/time_ops.c +++ b/source/blender/editors/space_time/time_ops.c @@ -213,24 +213,26 @@ void time_operatortypes(void) void time_keymap(wmWindowManager *wm) { - WM_keymap_verify_item(&wm->timekeymap, "ED_TIME_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_TIME_OT_toggle_time", TKEY, KM_PRESS, 0, 0); + ListBase *keymap= WM_keymap_listbase(wm, "TimeLine", SPACE_TIME, 0); + + WM_keymap_verify_item(keymap, "ED_TIME_OT_change_frame", LEFTMOUSE, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "ED_TIME_OT_toggle_time", TKEY, KM_PRESS, 0, 0); /* markers (XXX move to function?) */ - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_add", MKEY, KM_PRESS, 0, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_move", EVT_TWEAK_R, KM_ANY, 0, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_mouseselect", RIGHTMOUSE, KM_PRESS, 0, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_mouseselect_extend", RIGHTMOUSE, KM_PRESS, KM_SHIFT, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_border_select", BKEY, KM_PRESS, 0, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_select_all", AKEY, KM_PRESS, 0, 0); - WM_keymap_verify_item(&wm->timekeymap, "ED_MARKER_OT_delete", XKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_add", MKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_move", EVT_TWEAK_R, KM_ANY, 0, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_duplicate", DKEY, KM_PRESS, KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_mouseselect", RIGHTMOUSE, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_mouseselect_extend", RIGHTMOUSE, KM_PRESS, KM_SHIFT, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_border_select", BKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_select_all", AKEY, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "ED_MARKER_OT_delete", XKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(&wm->timekeymap, "ED_MARKER_OT_move", GKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "ED_MARKER_OT_move", GKEY, KM_PRESS, 0, 0); /* generates event, in end to make select work */ - WM_keymap_verify_item(&wm->timekeymap, "WM_OT_tweak_gesture", RIGHTMOUSE, KM_PRESS, 0, 0); + WM_keymap_verify_item(keymap, "WM_OT_tweak_gesture", RIGHTMOUSE, KM_PRESS, 0, 0); } |