diff options
author | Ton Roosendaal <ton@blender.org> | 2008-12-14 13:52:48 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2008-12-14 13:52:48 +0300 |
commit | 3a58eddec5d47973f19c1c6102fa3e45a27a71ba (patch) | |
tree | 19f33f95274d2a8f17154a11edc4bf4c12967945 /source/blender/editors/space_info | |
parent | 616ab233fa1d91453dd1790d7126bdc41dcb12f9 (diff) |
2.5
The basics for InfoSpace.
Also added InfoSpace data to area by default, older files allowed to
have nothing here (space empty). (prevents reported crasher in switching
space info to others).
Also: added ifdeffed code in readfile.c to debug missing memory frees
from data read from files. (instead of "data from SCR" it will print
the actual struct names).
Diffstat (limited to 'source/blender/editors/space_info')
-rw-r--r-- | source/blender/editors/space_info/Makefile | 53 | ||||
-rw-r--r-- | source/blender/editors/space_info/SConscript | 9 | ||||
-rw-r--r-- | source/blender/editors/space_info/info_header.c | 189 | ||||
-rw-r--r-- | source/blender/editors/space_info/info_intern.h | 39 | ||||
-rw-r--r-- | source/blender/editors/space_info/space_info.c | 235 |
5 files changed, 525 insertions, 0 deletions
diff --git a/source/blender/editors/space_info/Makefile b/source/blender/editors/space_info/Makefile new file mode 100644 index 00000000000..31401d8f628 --- /dev/null +++ b/source/blender/editors/space_info/Makefile @@ -0,0 +1,53 @@ +# +# $Id: Makefile 14 2002-10-13 15:57:19Z hans $ +# +# ***** BEGIN GPL LICENSE BLOCK ***** +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# The Original Code is Copyright (C) 2007 Blender Foundation +# All rights reserved. +# +# The Original Code is: all of this file. +# +# Contributor(s): none yet. +# +# ***** END GPL LICENSE BLOCK ***** +# +# Makes module object directory and bounces make to subdirectories. + +LIBNAME = ed_info +DIR = $(OCGDIR)/blender/$(LIBNAME) + +include nan_compile.mk + +CFLAGS += $(LEVEL_1_C_WARNINGS) + +CPPFLAGS += -I$(NAN_GLEW)/include +CPPFLAGS += -I$(OPENGL_HEADERS) + +# not very neat.... +CPPFLAGS += -I../../windowmanager +CPPFLAGS += -I../../blenloader +CPPFLAGS += -I../../blenkernel +CPPFLAGS += -I../../blenlib +CPPFLAGS += -I../../makesdna +CPPFLAGS += -I../../imbuf +CPPFLAGS += -I../../python +CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include + +# own include + +CPPFLAGS += -I../include diff --git a/source/blender/editors/space_info/SConscript b/source/blender/editors/space_info/SConscript new file mode 100644 index 00000000000..c967cf9c4b6 --- /dev/null +++ b/source/blender/editors/space_info/SConscript @@ -0,0 +1,9 @@ +#!/usr/bin/python +Import ('env') + +sources = env.Glob('*.c') + +incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' +incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' + +env.BlenderLib ( 'bf_editors_space_info', sources, Split(incs), [], libtype=['core','intern'], priority=[35, 40] ) diff --git a/source/blender/editors/space_info/info_header.c b/source/blender/editors/space_info/info_header.c new file mode 100644 index 00000000000..e41177f196a --- /dev/null +++ b/source/blender/editors/space_info/info_header.c @@ -0,0 +1,189 @@ +/** + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <string.h> +#include <stdio.h> + +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_windowmanager_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" + +#include "BKE_global.h" +#include "BKE_screen.h" + +#include "ED_screen.h" +#include "ED_util.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "BIF_gl.h" +#include "BIF_glutil.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "info_intern.h" + + +/* ************************ header area region *********************** */ + +static void do_viewmenu(bContext *C, void *arg, int event) +{ + +} + +static uiBlock *dummy_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused) +{ + ScrArea *curarea= C->area; + uiBlock *block; + short yco= 0, menuwidth=120; + + block= uiBeginBlock(C, handle->region, "dummy_viewmenu", UI_EMBOSSP, UI_HELV); + uiBlockSetButmFunc(block, do_viewmenu, NULL); + + uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Nothing yet", 0, yco-=20, + menuwidth, 19, NULL, 0.0, 0.0, 1, 3, ""); + + if(curarea->headertype==HEADERTOP) { + uiBlockSetDirection(block, UI_DOWN); + } + else { + uiBlockSetDirection(block, UI_TOP); + uiBlockFlipOrder(block); + } + + uiTextBoundsBlock(block, 50); + uiEndBlock(C, block); + + return block; +} + +#define B_NEWSPACE 100 + +static void do_info_buttons(bContext *C, void *arg, int event) +{ + switch(event) { + case B_NEWSPACE: + ED_newspace(C->area, C->area->butspacetype); + WM_event_add_notifier(C, WM_NOTE_SCREEN_CHANGED, 0, NULL); + break; + } +} + + +void info_header_buttons(const bContext *C, ARegion *ar) +{ + ScrArea *sa= C->area; + uiBlock *block; + int xco, yco= 3; + + block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS, UI_HELV); + uiBlockSetHandleFunc(block, do_info_buttons, NULL); + + if(ED_screen_area_active(C)) uiBlockSetCol(block, TH_HEADER); + else uiBlockSetCol(block, TH_HEADERDESEL); + + xco = 8; + + uiDefIconTextButC(block, ICONTEXTROW,B_NEWSPACE, ICON_VIEW3D, + windowtype_pup(), xco, yco, XIC+10, YIC, + &(C->area->butspacetype), 1.0, SPACEICONMAX, 0, 0, + "Displays Current Window Type. " + "Click for menu of available types."); + + xco += XIC + 14; + + uiBlockSetEmboss(block, UI_EMBOSSN); + if (sa->flag & HEADER_NO_PULLDOWN) { + uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, + ICON_DISCLOSURE_TRI_RIGHT, + xco,yco,XIC,YIC-2, + &(sa->flag), 0, 0, 0, 0, + "Show pulldown menus"); + } + else { + uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, 0, + ICON_DISCLOSURE_TRI_DOWN, + xco,yco,XIC,YIC-2, + &(sa->flag), 0, 0, 0, 0, + "Hide pulldown menus"); + } + uiBlockSetEmboss(block, UI_EMBOSS); + xco+=XIC; + + if((sa->flag & HEADER_NO_PULLDOWN)==0) { + int xmax; + + /* pull down menus */ + uiBlockSetEmboss(block, UI_EMBOSSP); + + xmax= GetButStringLength("File"); + uiDefPulldownBut(block, dummy_viewmenu, C->area, "File", xco, yco, xmax-3, 22, ""); + xco+= xmax; + + xmax= GetButStringLength("Add"); + uiDefPulldownBut(block, dummy_viewmenu, C->area, "Add", xco, yco, xmax-3, 22, ""); + xco+= xmax; + + xmax= GetButStringLength("Timeline"); + uiDefPulldownBut(block, dummy_viewmenu, C->area, "Timeline", xco, yco, xmax-3, 22, ""); + xco+= xmax; + + xmax= GetButStringLength("Game"); + uiDefPulldownBut(block, dummy_viewmenu, C->area, "Game", xco, yco, xmax-3, 22, ""); + xco+= xmax; + + xmax= GetButStringLength("Render"); + uiDefPulldownBut(block, dummy_viewmenu, C->area, "Render", xco, yco, xmax-3, 22, ""); + xco+= xmax; + + xmax= GetButStringLength("Help"); + uiDefPulldownBut(block, dummy_viewmenu, NULL, "Help", xco, yco, xmax-3, 22, ""); + xco+= xmax; + + + + } + + uiBlockSetEmboss(block, UI_EMBOSS); + + /* always as last */ + sa->headbutlen= xco+XIC+80; // +80 because the last button is not an icon + + uiEndBlock(C, block); + uiDrawBlock(block); +} + + diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h new file mode 100644 index 00000000000..213c0688f20 --- /dev/null +++ b/source/blender/editors/space_info/info_intern.h @@ -0,0 +1,39 @@ +/** + * $Id: + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ +#ifndef ED_INFO_INTERN_H +#define ED_INFO_INTERN_H + +/* internal exports only */ + + +/* info_header.c */ +void info_header_buttons(const bContext *C, ARegion *ar); + + +#endif /* ED_INFO_INTERN_H */ + diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c new file mode 100644 index 00000000000..7a54297a2f3 --- /dev/null +++ b/source/blender/editors/space_info/space_info.c @@ -0,0 +1,235 @@ +/** + * $Id: + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2008 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include <string.h> +#include <stdio.h> + +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_blenlib.h" +#include "BLI_arithb.h" +#include "BLI_rand.h" + +#include "BKE_colortools.h" +#include "BKE_global.h" +#include "BKE_screen.h" + +#include "ED_space_api.h" +#include "ED_screen.h" + +#include "BIF_gl.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "ED_markers.h" + +#include "info_intern.h" // own include + +/* ******************** default callbacks for info space ***************** */ + +static SpaceLink *info_new(void) +{ + ARegion *ar; + SpaceInfo *sinfo; + + sinfo= MEM_callocN(sizeof(SpaceInfo), "initinfo"); + sinfo->spacetype= SPACE_INFO; + + /* header */ + ar= MEM_callocN(sizeof(ARegion), "header for info"); + + BLI_addtail(&sinfo->regionbase, ar); + ar->regiontype= RGN_TYPE_HEADER; + ar->alignment= RGN_ALIGN_BOTTOM; + UI_view2d_header_default(&ar->v2d); + + /* main area */ + ar= MEM_callocN(sizeof(ARegion), "main area for info"); + + BLI_addtail(&sinfo->regionbase, ar); + ar->regiontype= RGN_TYPE_WINDOW; + + /* channel list region XXX */ + + + return (SpaceLink *)sinfo; +} + +/* not spacelink itself */ +static void info_free(SpaceLink *sl) +{ +// SpaceInfo *sinfo= (SpaceInfo*) sl; + +} + + +/* spacetype; init callback */ +static void info_init(struct wmWindowManager *wm, ScrArea *sa) +{ + +} + +static SpaceLink *info_duplicate(SpaceLink *sl) +{ + SpaceInfo *sinfon= MEM_dupallocN(sl); + + /* clear or remove stuff from old */ + + return (SpaceLink *)sinfon; +} + + + +/* add handlers, stuff you only do once or on area/region changes */ +static void info_main_area_init(wmWindowManager *wm, ARegion *ar) +{ + ListBase *keymap; + + UI_view2d_size_update(&ar->v2d, ar->winx, ar->winy); + + /* own keymap */ + keymap= WM_keymap_listbase(wm, "info", SPACE_INFO, 0); /* XXX weak? */ + WM_event_add_keymap_handler_bb(&ar->handlers, keymap, &ar->v2d.mask, &ar->winrct); +} + +static void info_main_area_draw(const bContext *C, ARegion *ar) +{ + /* draw entirely, view changes should be handled here */ + // SpaceInfo *sinfo= C->area->spacedata.first; + View2D *v2d= &ar->v2d; + float col[3]; + + /* clear and setup matrix */ + UI_GetThemeColor3fv(TH_BACK, col); + glClearColor(col[0], col[1], col[2], 0.0); + glClear(GL_COLOR_BUFFER_BIT); + + UI_view2d_view_ortho(C, v2d); + + /* data... */ + + + /* reset view matrix */ + UI_view2d_view_restore(C); + + /* scrollers? */ +} + +void info_operatortypes(void) +{ + +} + +void info_keymap(struct wmWindowManager *wm) +{ + +} + +/* add handlers, stuff you only do once or on area/region changes */ +static void info_header_area_init(wmWindowManager *wm, ARegion *ar) +{ + UI_view2d_size_update(&ar->v2d, ar->winx, ar->winy); +} + +static void info_header_area_draw(const bContext *C, ARegion *ar) +{ + float col[3]; + + /* clear */ + if(ED_screen_area_active(C)) + UI_GetThemeColor3fv(TH_HEADER, col); + else + UI_GetThemeColor3fv(TH_HEADERDESEL, col); + + glClearColor(col[0], col[1], col[2], 0.0); + glClear(GL_COLOR_BUFFER_BIT); + + /* set view2d view matrix for scrolling (without scrollers) */ + UI_view2d_view_ortho(C, &ar->v2d); + + info_header_buttons(C, ar); + + /* restore view matrix? */ + UI_view2d_view_restore(C); +} + +static void info_main_area_listener(ARegion *ar, wmNotifier *wmn) +{ + /* context changes */ +} + +/* only called once, from space/spacetypes.c */ +void ED_spacetype_info(void) +{ + SpaceType *st= MEM_callocN(sizeof(SpaceType), "spacetype info"); + ARegionType *art; + + st->spaceid= SPACE_INFO; + + st->new= info_new; + st->free= info_free; + st->init= info_init; + st->duplicate= info_duplicate; + st->operatortypes= info_operatortypes; + st->keymap= info_keymap; + + /* regions: main window */ + art= MEM_callocN(sizeof(ARegionType), "spacetype info region"); + art->regionid = RGN_TYPE_WINDOW; + art->init= info_main_area_init; + art->draw= info_main_area_draw; + art->listener= info_main_area_listener; + art->keymapflag= ED_KEYMAP_VIEW2D; + + BLI_addhead(&st->regiontypes, art); + + /* regions: header */ + art= MEM_callocN(sizeof(ARegionType), "spacetype info region"); + art->regionid = RGN_TYPE_HEADER; + art->minsizey= HEADERY; + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_VIEW2D; + + art->init= info_header_area_init; + art->draw= info_header_area_draw; + + BLI_addhead(&st->regiontypes, art); + + + BKE_spacetype_register(st); +} + |