Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTon Roosendaal <ton@blender.org>2008-12-08 18:02:57 +0300
committerTon Roosendaal <ton@blender.org>2008-12-08 18:02:57 +0300
commit02e23c16dd9e403deb1694829c11d16dc47392ee (patch)
treef5ec9e3f68bad13137bdeafa326281c74387327e /source/blender/editors/space_time
parent11e15bf68979670b2257814aa296886222b3ee40 (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.c101
-rw-r--r--source/blender/editors/space_time/time_ops.c26
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);
}