diff options
author | Joshua Leung <aligorith@gmail.com> | 2009-07-10 05:57:55 +0400 |
---|---|---|
committer | Joshua Leung <aligorith@gmail.com> | 2009-07-10 05:57:55 +0400 |
commit | 0051f1be8ea6e329649d4a476e6c4cb5d1d101ef (patch) | |
tree | b96dd939058d529f88a990876e2ec002ea6a0c8f /source/blender/editors/space_file | |
parent | d7a7081e633f458d3c68f6ccff5376c0340fe42e (diff) | |
parent | 9241559ab4c223d30a949f2e06c776642b69715c (diff) |
NLA SoC: Merge from 2.5
21330 to 21469
Diffstat (limited to 'source/blender/editors/space_file')
-rw-r--r-- | source/blender/editors/space_file/file_intern.h | 6 | ||||
-rw-r--r-- | source/blender/editors/space_file/file_ops.c | 117 | ||||
-rw-r--r-- | source/blender/editors/space_file/file_panels.c | 7 | ||||
-rw-r--r-- | source/blender/editors/space_file/filelist.c | 88 | ||||
-rw-r--r-- | source/blender/editors/space_file/filelist.h | 6 | ||||
-rw-r--r-- | source/blender/editors/space_file/filesel.c | 38 | ||||
-rw-r--r-- | source/blender/editors/space_file/space_file.c | 96 |
7 files changed, 317 insertions, 41 deletions
diff --git a/source/blender/editors/space_file/file_intern.h b/source/blender/editors/space_file/file_intern.h index 668e14c95e6..2f3fae47abb 100644 --- a/source/blender/editors/space_file/file_intern.h +++ b/source/blender/editors/space_file/file_intern.h @@ -65,17 +65,23 @@ void FILE_OT_loadimages(struct wmOperatorType *ot); void FILE_OT_exec(struct wmOperatorType *ot); void FILE_OT_cancel(struct wmOperatorType *ot); void FILE_OT_parent(struct wmOperatorType *ot); +void FILE_OT_previous(struct wmOperatorType *ot); +void FILE_OT_next(struct wmOperatorType *ot); void FILE_OT_refresh(struct wmOperatorType *ot); void FILE_OT_bookmark_toggle(struct wmOperatorType *ot); +void FILE_OT_filenum(struct wmOperatorType *ot); int file_exec(bContext *C, struct wmOperator *unused); int file_cancel_exec(bContext *C, struct wmOperator *unused); int file_parent_exec(bContext *C, struct wmOperator *unused); +int file_previous_exec(bContext *C, struct wmOperator *unused); +int file_next_exec(bContext *C, struct wmOperator *unused); int file_hilight_set(struct SpaceFile *sfile, struct ARegion *ar, int mx, int my); /* filesel.c */ float file_string_width(const char* str); float file_font_pointsize(); +void file_change_dir(struct SpaceFile *sfile); /* file_panels.c */ void file_panels_register(struct ARegionType *art); diff --git a/source/blender/editors/space_file/file_ops.c b/source/blender/editors/space_file/file_ops.c index aaa1793efbb..c4435e85749 100644 --- a/source/blender/editors/space_file/file_ops.c +++ b/source/blender/editors/space_file/file_ops.c @@ -146,9 +146,7 @@ static void file_select(SpaceFile* sfile, ARegion* ar, const rcti* rect, short v strcat(params->dir,"/"); params->file[0] = '\0'; BLI_cleanup_dir(G.sce, params->dir); - filelist_setdir(sfile->files, params->dir); - filelist_free(sfile->files); - params->active_file = -1; + file_change_dir(sfile); } } else if (file) @@ -305,10 +303,8 @@ static int bookmark_select_invoke(bContext *C, wmOperator *op, wmEvent *event) RNA_string_get(op->ptr, "dir", entry); BLI_strncpy(params->dir, entry, sizeof(params->dir)); BLI_cleanup_dir(G.sce, params->dir); - filelist_free(sfile->files); - filelist_setdir(sfile->files, params->dir); - params->file[0] = '\0'; - params->active_file = -1; + file_change_dir(sfile); + params->file[0] = '\0'; WM_event_add_notifier(C, NC_FILE|ND_PARAMS, NULL); } @@ -362,9 +358,9 @@ void FILE_OT_add_bookmark(wmOperatorType *ot) static int bookmark_delete_invoke(bContext *C, wmOperator *op, wmEvent *event) { ScrArea *sa= CTX_wm_area(C); - SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); struct FSMenu* fsmenu = fsmenu_get(); int nentries = fsmenu_get_nentries(fsmenu, FS_CATEGORY_BOOKMARKS); + if(RNA_struct_find_property(op->ptr, "index")) { int index = RNA_int_get(op->ptr, "index"); if ( (index >-1) && (index < nentries)) { @@ -467,7 +463,10 @@ void FILE_OT_highlight(struct wmOperatorType *ot) int file_cancel_exec(bContext *C, wmOperator *unused) { SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); - + + folderlist_free(sfile->folders_prev); + folderlist_free(sfile->folders_next); + WM_event_fileselect_event(C, sfile->op, EVT_FILESELECT_CANCEL); sfile->op = NULL; @@ -529,6 +528,9 @@ int file_exec(bContext *C, wmOperator *unused) } } + folderlist_free(sfile->folders_prev); + folderlist_free(sfile->folders_next); + fsmenu_insert_entry(fsmenu_get(), FS_CATEGORY_RECENT, sfile->params->dir,0, 1); BLI_make_file_string(G.sce, name, BLI_gethome(), ".Bfs"); fsmenu_write_file(fsmenu_get(), name); @@ -556,9 +558,7 @@ int file_parent_exec(bContext *C, wmOperator *unused) if(sfile->params) { BLI_parent_dir(sfile->params->dir); - filelist_setdir(sfile->files, sfile->params->dir); - filelist_free(sfile->files); - sfile->params->active_file = -1; + file_change_dir(sfile); } WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); @@ -583,17 +583,74 @@ int file_refresh_exec(bContext *C, wmOperator *unused) { SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + file_change_dir(sfile); + + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + + return OPERATOR_FINISHED; + +} + +void FILE_OT_previous(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Previous Folder"; + ot->idname= "FILE_OT_previous"; + + /* api callbacks */ + ot->exec= file_previous_exec; + ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ +} + +int file_previous_exec(bContext *C, wmOperator *unused) +{ + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + if(sfile->params) { - filelist_setdir(sfile->files, sfile->params->dir); - filelist_free(sfile->files); - sfile->params->active_file = -1; + if (!sfile->folders_next) + sfile->folders_next = folderlist_new(); + + folderlist_pushdir(sfile->folders_next, sfile->params->dir); + folderlist_popdir(sfile->folders_prev, sfile->params->dir); + folderlist_pushdir(sfile->folders_next, sfile->params->dir); + + file_change_dir(sfile); } WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); return OPERATOR_FINISHED; +} +void FILE_OT_next(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Next Folder"; + ot->idname= "FILE_OT_next"; + + /* api callbacks */ + ot->exec= file_next_exec; + ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ } +int file_next_exec(bContext *C, wmOperator *unused) +{ + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + if(sfile->params) { + if (!sfile->folders_next) + sfile->folders_next = folderlist_new(); + + folderlist_pushdir(sfile->folders_prev, sfile->params->dir); + folderlist_popdir(sfile->folders_next, sfile->params->dir); + + // update folder_prev so we can check for it in folderlist_clear_next() + folderlist_pushdir(sfile->folders_prev, sfile->params->dir); + + file_change_dir(sfile); + } + WM_event_add_notifier(C, NC_FILE|ND_FILELIST, NULL); + + return OPERATOR_FINISHED; +} void FILE_OT_refresh(struct wmOperatorType *ot) { @@ -685,3 +742,33 @@ void FILE_OT_bookmark_toggle(struct wmOperatorType *ot) ot->exec= file_bookmark_toggle_exec; ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ } + + +int file_filenum_exec(bContext *C, wmOperator *op) +{ + SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); + + int inc = RNA_int_get(op->ptr, "increment"); + if(sfile->params && (inc != 0)) { + BLI_newname(sfile->params->file, inc); + WM_event_add_notifier(C, NC_WINDOW, NULL); + } + + return OPERATOR_FINISHED; + +} + +void FILE_OT_filenum(struct wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Increment Number in Filename"; + ot->idname= "FILE_OT_filenum"; + + /* api callbacks */ + ot->exec= file_filenum_exec; + ot->poll= ED_operator_file_active; /* <- important, handler is on window level */ + + /* props */ + RNA_def_int(ot->srna, "increment", 1, 0, 100, "Increment", "", 0,100); +} + diff --git a/source/blender/editors/space_file/file_panels.c b/source/blender/editors/space_file/file_panels.c index 29c759d43c0..96366b9f82b 100644 --- a/source/blender/editors/space_file/file_panels.c +++ b/source/blender/editors/space_file/file_panels.c @@ -57,11 +57,9 @@ static void do_file_panel_events(bContext *C, void *arg, int event) static void file_panel_category(const bContext *C, Panel *pa, FSMenuCategory category, int icon, int allow_delete) { uiBlock *block; - uiStyle *style= U.uistyles.first; - int i; - int fontsize = file_font_pointsize(); struct FSMenu* fsmenu = fsmenu_get(); int nentries = fsmenu_get_nentries(fsmenu, category); + int i; uiLayoutSetAlignment(pa->layout, UI_LAYOUT_ALIGN_LEFT); block= uiLayoutFreeBlock(pa->layout); @@ -162,4 +160,5 @@ void file_panels_register(ARegionType *art) strcpy(pt->label, "Operator"); pt->draw= file_panel_operator; BLI_addtail(&art->paneltypes, pt); -}
\ No newline at end of file +} + diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 573aed72728..6e442c654ca 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -123,6 +123,12 @@ typedef struct FileList ListBase threads; } FileList; +typedef struct FolderList +{ + struct FolderList *next, *prev; + char *foldername; +} FolderList; + #define SPECIAL_IMG_SIZE 48 #define SPECIAL_IMG_ROWS 4 #define SPECIAL_IMG_COLS 4 @@ -354,6 +360,86 @@ void filelist_free_icons() } } +//-----------------FOLDERLIST (previous/next) --------------// +struct ListBase* folderlist_new() +{ + ListBase* p = MEM_callocN( sizeof(ListBase), "folderlist" ); + return p; +} + +void folderlist_popdir(struct ListBase* folderlist, char *dir) +{ + const char *prev_dir; + struct FolderList *folder; + folder = folderlist->last; + + if(folder){ + // remove the current directory + MEM_freeN(folder->foldername); + BLI_freelinkN(folderlist, folder); + + folder = folderlist->last; + if(folder){ + prev_dir = folder->foldername; + BLI_strncpy(dir, prev_dir, FILE_MAXDIR); + } + } + // delete the folder next or use setdir directly before PREVIOUS OP +} + +void folderlist_pushdir(ListBase* folderlist, const char *dir) +{ + struct FolderList *folder, *previous_folder; + previous_folder = folderlist->last; + + // check if already exists + if(previous_folder){ + if(! strcmp(previous_folder->foldername, dir)){ + return; + } + } + + // create next folder element + folder = (FolderList*)MEM_mallocN(sizeof(FolderList),"FolderList"); + folder->foldername = (char*)MEM_mallocN(sizeof(char)*(strlen(dir)+1), "foldername"); + folder->foldername[0] = '\0'; + + BLI_strncpy(folder->foldername, dir, FILE_MAXDIR); + + // add it to the end of the list + BLI_addtail(folderlist, folder); +} + +int folderlist_clear_next(struct SpaceFile *sfile) +{ + struct FolderList *folder; + + // if there is no folder_next there is nothing we can clear + if (!sfile->folders_next) + return 0; + + // if previous_folder, next_folder or refresh_folder operators are executed it doesn't clear folder_next + folder = sfile->folders_prev->last; + if ((!folder) ||(!strcmp(folder->foldername, sfile->params->dir))) + return 0; + + // eventually clear flist->folders_next + return 1; +} + +void folderlist_free(ListBase* folderlist) +{ + FolderList *folder; + if (folderlist){ + for(folder= folderlist->last; folder; folder= folderlist->last) { + MEM_freeN(folder->foldername); + BLI_freelinkN(folderlist, folder); + } + } + folderlist= NULL; +} + +//------------------FILELIST------------------------// struct FileList* filelist_new() { FileList* p = MEM_callocN( sizeof(FileList), "filelist" ); @@ -375,7 +461,7 @@ void filelist_free(struct FileList* filelist) int i; if (!filelist) { - printf("Attemtping to delete empty filelist.\n"); + printf("Attempting to delete empty filelist.\n"); return; } diff --git a/source/blender/editors/space_file/filelist.h b/source/blender/editors/space_file/filelist.h index e929e028849..dd3c2c766c1 100644 --- a/source/blender/editors/space_file/filelist.h +++ b/source/blender/editors/space_file/filelist.h @@ -38,6 +38,7 @@ extern "C" { #endif struct FileList; +struct FolderList; struct direntry; struct BlendHandle; struct Scene; @@ -70,6 +71,11 @@ int filelist_empty(struct FileList* filelist); void filelist_parent(struct FileList* filelist); void filelist_setfiletypes(struct FileList* filelist, short has_quicktime); +struct ListBase * folderlist_new(); +void folderlist_free(struct ListBase* folderlist); +void folderlist_popdir(struct ListBase* folderlist, char *dir); +void folderlist_pushdir(struct ListBase* folderlist, const char *dir); +int folderlist_clear_next(struct SpaceFile* sfile); #ifdef __cplusplus } diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c index e1d81138e5a..476145d11a2 100644 --- a/source/blender/editors/space_file/filesel.c +++ b/source/blender/editors/space_file/filesel.c @@ -84,12 +84,12 @@ FileSelectParams* ED_fileselect_get_params(struct SpaceFile *sfile) { if (!sfile->params) { - ED_fileselect_set_params(sfile, "", "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORT_ALPHA); + ED_fileselect_set_params(sfile, "", NULL, "/", 0, FILE_SHORTDISPLAY, 0, FILE_SORT_ALPHA); } return sfile->params; } -short ED_fileselect_set_params(SpaceFile *sfile, const char *title, const char *path, +short ED_fileselect_set_params(SpaceFile *sfile, const char *title, const char *last_dir, const char *path, short flag, short display, short filter, short sort) { char name[FILE_MAX], dir[FILE_MAX], file[FILE_MAX]; @@ -107,14 +107,19 @@ short ED_fileselect_set_params(SpaceFile *sfile, const char *title, const char * params->sort = sort; BLI_strncpy(params->title, title, sizeof(params->title)); - - BLI_strncpy(name, path, sizeof(name)); - BLI_convertstringcode(name, G.sce); - BLI_split_dirfile(name, dir, file); - BLI_strncpy(params->file, file, sizeof(params->file)); - BLI_strncpy(params->dir, dir, sizeof(params->dir)); - BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ + if(last_dir){ + BLI_strncpy(params->dir, last_dir, sizeof(params->dir)); + } + else { + BLI_strncpy(name, path, sizeof(name)); + BLI_convertstringcode(name, G.sce); + + BLI_split_dirfile(name, dir, file); + BLI_strncpy(params->file, file, sizeof(params->file)); + BLI_strncpy(params->dir, dir, sizeof(params->dir)); + BLI_make_file_string(G.sce, params->dir, dir, ""); /* XXX needed ? - also solve G.sce */ + } return 1; } @@ -282,3 +287,18 @@ FileLayout* ED_fileselect_get_layout(struct SpaceFile *sfile, struct ARegion *ar } return sfile->layout; } + +void file_change_dir(struct SpaceFile *sfile) +{ + if (sfile->params) { + filelist_setdir(sfile->files, sfile->params->dir); + + if(folderlist_clear_next(sfile)) + folderlist_free(sfile->folders_next); + + folderlist_pushdir(sfile->folders_prev, sfile->params->dir); + + filelist_free(sfile->files); + sfile->params->active_file = -1; + } +} diff --git a/source/blender/editors/space_file/space_file.c b/source/blender/editors/space_file/space_file.c index 156c7d6f9be..3167d2809c9 100644 --- a/source/blender/editors/space_file/space_file.c +++ b/source/blender/editors/space_file/space_file.c @@ -34,6 +34,8 @@ #include "DNA_scene_types.h" #include "DNA_screen_types.h" +#include "RNA_access.h" + #include "MEM_guardedalloc.h" #include "BIF_gl.h" @@ -122,6 +124,18 @@ static void file_free(SpaceLink *sl) sfile->files= NULL; } + if(sfile->folders_prev) { + folderlist_free(sfile->folders_prev); + MEM_freeN(sfile->folders_prev); + sfile->folders_prev= NULL; + } + + if(sfile->folders_next) { + folderlist_free(sfile->folders_next); + MEM_freeN(sfile->folders_next); + sfile->folders_next= NULL; + } + if (sfile->params) { if(sfile->params->pupmenu) MEM_freeN(sfile->params->pupmenu); @@ -151,11 +165,15 @@ static SpaceLink *file_duplicate(SpaceLink *sl) sfilen->op = NULL; /* file window doesn't own operators */ sfilen->files = filelist_new(); - + if(sfileo->folders_prev) + sfilen->folders_prev = MEM_dupallocN(sfileo->folders_prev); + + if(sfileo->folders_next) + sfilen->folders_next = MEM_dupallocN(sfileo->folders_next); + if(sfileo->params) { sfilen->params= MEM_dupallocN(sfileo->params); - - filelist_setdir(sfilen->files, sfilen->params->dir); + file_change_dir(sfilen); } if (sfileo->layout) { sfilen->layout= MEM_dupallocN(sfileo->layout); @@ -168,9 +186,11 @@ static void file_refresh(const bContext *C, ScrArea *sa) SpaceFile *sfile= (SpaceFile*)CTX_wm_space_data(C); FileSelectParams *params = ED_fileselect_get_params(sfile); + if (!sfile->folders_prev) + sfile->folders_prev = folderlist_new(); if (!sfile->files) { sfile->files = filelist_new(); - filelist_setdir(sfile->files, params->dir); + file_change_dir(sfile); params->active_file = -1; // added this so it opens nicer (ton) } filelist_hidedot(sfile->files, params->flag & FILE_HIDE_DOT); @@ -211,8 +231,11 @@ static void file_main_area_init(wmWindowManager *wm, ARegion *ar) UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_LIST, ar->winx, ar->winy); - /* own keymap */ - keymap= WM_keymap_listbase(wm, "File", SPACE_FILE, 0); /* XXX weak? */ + /* own keymaps */ + keymap= WM_keymap_listbase(wm, "File", SPACE_FILE, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + + keymap= WM_keymap_listbase(wm, "FileMain", SPACE_FILE, 0); WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); @@ -290,35 +313,76 @@ void file_operatortypes(void) WM_operatortype_append(FILE_OT_exec); WM_operatortype_append(FILE_OT_cancel); WM_operatortype_append(FILE_OT_parent); + WM_operatortype_append(FILE_OT_previous); + WM_operatortype_append(FILE_OT_next); WM_operatortype_append(FILE_OT_refresh); WM_operatortype_append(FILE_OT_bookmark_toggle); WM_operatortype_append(FILE_OT_add_bookmark); WM_operatortype_append(FILE_OT_delete_bookmark); WM_operatortype_append(FILE_OT_hidedot); + WM_operatortype_append(FILE_OT_filenum); } /* NOTE: do not add .blend file reading on this level */ void file_keymap(struct wmWindowManager *wm) { + wmKeymapItem *kmi; + /* keys for all areas */ ListBase *keymap= WM_keymap_listbase(wm, "File", SPACE_FILE, 0); WM_keymap_add_item(keymap, "FILE_OT_bookmark_toggle", NKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_parent", PKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_add_bookmark", BKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "FILE_OT_hidedot", HKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_previous", BACKSPACEKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "FILE_OT_next", BACKSPACEKEY, KM_PRESS, KM_SHIFT, 0); + + /* keys for main area */ + keymap= WM_keymap_listbase(wm, "FileMain", SPACE_FILE, 0); WM_keymap_add_item(keymap, "FILE_OT_select", LEFTMOUSE, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_select_border", BKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_highlight", MOUSEMOVE, KM_ANY, 0, 0); - WM_keymap_add_item(keymap, "FILE_OT_parent", PKEY, KM_PRESS, 0, 0); - WM_keymap_add_item(keymap, "FILE_OT_add_bookmark", BKEY, KM_PRESS, KM_CTRL, 0); - WM_keymap_add_item(keymap, "FILE_OT_hidedot", HKEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "FILE_OT_loadimages", TIMER1, KM_ANY, KM_ANY, 0); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, 0, 0); + RNA_int_set(kmi->ptr, "increment", 1); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_SHIFT, 0); + RNA_int_set(kmi->ptr, "increment", 10); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); + RNA_int_set(kmi->ptr, "increment", 100); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, 0,0); + RNA_int_set(kmi->ptr, "increment", -1); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_SHIFT, 0); + RNA_int_set(kmi->ptr, "increment", -10); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_CTRL, 0); + RNA_int_set(kmi->ptr, "increment",-100); - keymap= WM_keymap_listbase(wm, "FileBookmark", SPACE_FILE, 0); - WM_keymap_add_item(keymap, "FILE_OT_select_bookmark", LEFTMOUSE, KM_PRESS, 0, 0); + /* keys for button area (top) */ + keymap= WM_keymap_listbase(wm, "FileButtons", SPACE_FILE, 0); + WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, 0, 0); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, 0, 0); + RNA_int_set(kmi->ptr, "increment", 1); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_SHIFT, 0); + RNA_int_set(kmi->ptr, "increment", 10); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADPLUSKEY, KM_PRESS, KM_CTRL, 0); + RNA_int_set(kmi->ptr, "increment", 100); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, 0, 0); + RNA_int_set(kmi->ptr, "increment", -1); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_SHIFT,0); + RNA_int_set(kmi->ptr, "increment", -10); + kmi = WM_keymap_add_item(keymap, "FILE_OT_filenum", PADMINUS, KM_PRESS, KM_CTRL,0); + RNA_int_set(kmi->ptr, "increment",-100); } static void file_channel_area_init(wmWindowManager *wm, ARegion *ar) { + ListBase *keymap; + ED_region_panels_init(wm, ar); + + /* own keymaps */ + keymap= WM_keymap_listbase(wm, "File", SPACE_FILE, 0); + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } static void file_channel_area_draw(const bContext *C, ARegion *ar) @@ -348,7 +412,16 @@ static void file_header_area_draw(const bContext *C, ARegion *ar) /* add handlers, stuff you only do once or on area/region changes */ static void file_ui_area_init(wmWindowManager *wm, ARegion *ar) { + ListBase *keymap; + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_HEADER, ar->winx, ar->winy); + + /* own keymap */ + keymap= WM_keymap_listbase(wm, "File", SPACE_FILE, 0); /* XXX weak? */ + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); + + keymap= WM_keymap_listbase(wm, "FileButtons", SPACE_FILE, 0); /* XXX weak? */ + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); } static void file_ui_area_draw(const bContext *C, ARegion *ar) @@ -428,7 +501,6 @@ void ED_spacetype_file(void) BLI_addhead(&st->regiontypes, art); file_panels_register(art); - BKE_spacetype_register(st); } |