Could you merge this into trunk? - else any changes made to outliner.c in the coming months will be a pain to apply back.
On Tue, Jul 12, 2011 at 8:01 PM, Joshua Leung <[email protected]> wrote: > Sure, go ahead. I never use CMake, so I've no idea what's breaking it. > > On Tue, Jul 12, 2011 at 9:04 PM, Mitchell Stokes <[email protected]> wrote: >> This commit broke building with CMake. I have the fix if you want me >> to commit it. >> >> Cheers, >> Mitchell >> >> On Mon, Jul 11, 2011 at 3:59 AM, Joshua Leung <[email protected]> wrote: >>> Revision: 38303 >>> >>> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38303 >>> Author: aligorith >>> Date: 2011-07-11 10:59:53 +0000 (Mon, 11 Jul 2011) >>> Log Message: >>> ----------- >>> == The great Outliner code split up == >>> >>> As per my proposal (http://lists.blender.org/pipermail/bf- >>> committers/2011-July/032553.html), I've split outliner.c into several >>> new files based on the purpose of the relevant code. >>> >>> * outliner_tree.c - building outliner structure >>> * outliner_draw.c - outliner drawing (including toggle buttons and >>> their handling) >>> * outliner_edit.c - all operators for toggling stuff, and/or hotkey >>> accessed operators. Also KeyingSet and Driver operators go here >>> * outliner_tools.c - all operators and callbacks used for handling RMB >>> click on items >>> * outliner_select.c - stuff for selecting rows, and handling the >>> active/selected toggling stuff >>> >>> In a few cases, the split hasn't been totally clear-cut due to cross- >>> dependencies and other spaghetti. However, in a few cases, I have >>> managed to remove the need for some of the prototypes that were needed >>> in the past by judicious reshuffling of functions, which also makes it >>> easier to actually find what you're looking for. >>> >>> Modified Paths: >>> -------------- >>> >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_intern.h >>> >>> Added Paths: >>> ----------- >>> >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_draw.c >>> >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_edit.c >>> >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_select.c >>> >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_tools.c >>> >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner_tree.c >>> >>> Removed Paths: >>> ------------- >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner.c >>> >>> Deleted: >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner.c >>> =================================================================== >>> --- >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner.c >>> 2011-07-11 09:47:13 UTC (rev 38302) >>> +++ >>> branches/soc-2011-pepper/source/blender/editors/space_outliner/outliner.c >>> 2011-07-11 10:59:53 UTC (rev 38303) >>> @@ -1,6148 +0,0 @@ >>> -/* >>> - * $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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. >>> - * >>> - * The Original Code is Copyright (C) 2004 Blender Foundation. >>> - * All rights reserved. >>> - * >>> - * The Original Code is: all of this file. >>> - * >>> - * Contributor(s): none yet. >>> - * >>> - * ***** END GPL LICENSE BLOCK ***** >>> - */ >>> - >>> -/** \file blender/editors/space_outliner/outliner.c >>> - * \ingroup spoutliner >>> - */ >>> - >>> - >>> -#include <math.h> >>> -#include <string.h> >>> -#include <stdlib.h> >>> -#include <stddef.h> >>> - >>> -#include "MEM_guardedalloc.h" >>> - >>> -#include "DNA_anim_types.h" >>> -#include "DNA_armature_types.h" >>> -#include "DNA_constraint_types.h" >>> -#include "DNA_camera_types.h" >>> -#include "DNA_group_types.h" >>> -#include "DNA_key_types.h" >>> -#include "DNA_lamp_types.h" >>> -#include "DNA_material_types.h" >>> -#include "DNA_mesh_types.h" >>> -#include "DNA_meta_types.h" >>> -#include "DNA_particle_types.h" >>> -#include "DNA_scene_types.h" >>> -#include "DNA_world_types.h" >>> -#include "DNA_sequence_types.h" >>> -#include "DNA_object_types.h" >>> - >>> -#include "BLI_blenlib.h" >>> -#include "BLI_utildefines.h" >>> -#include "BLI_math_base.h" >>> - >>> -#if defined WIN32 && !defined _LIBC >>> -# include "BLI_fnmatch.h" /* use fnmatch included in blenlib */ >>> -#else >>> -# ifndef _GNU_SOURCE >>> -# define _GNU_SOURCE >>> -# endif >>> -# include <fnmatch.h> >>> -#endif >>> - >>> - >>> -#include "BKE_animsys.h" >>> -#include "BKE_context.h" >>> -#include "BKE_deform.h" >>> -#include "BKE_depsgraph.h" >>> -#include "BKE_fcurve.h" >>> -#include "BKE_global.h" >>> -#include "BKE_group.h" >>> -#include "BKE_library.h" >>> -#include "BKE_main.h" >>> -#include "BKE_modifier.h" >>> -#include "BKE_report.h" >>> -#include "BKE_scene.h" >>> -#include "BKE_sequencer.h" >>> - >>> -#include "ED_armature.h" >>> -#include "ED_object.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_interface_icons.h" >>> -#include "UI_resources.h" >>> -#include "UI_view2d.h" >>> - >>> -#include "RNA_access.h" >>> -#include "RNA_define.h" >>> -#include "RNA_enum_types.h" >>> - >>> -#include "ED_keyframing.h" >>> - >>> -#include "outliner_intern.h" >>> - >>> - >>> -#define OL_Y_OFFSET 2 >>> - >>> -#define OL_TOG_RESTRICT_VIEWX (UI_UNIT_X*3) >>> -#define OL_TOG_RESTRICT_SELECTX (UI_UNIT_X*2) >>> -#define OL_TOG_RESTRICT_RENDERX UI_UNIT_X >>> - >>> -#define OL_TOGW OL_TOG_RESTRICT_VIEWX >>> - >>> -#define OL_RNA_COLX (UI_UNIT_X*15) >>> -#define OL_RNA_COL_SIZEX (UI_UNIT_X*7.5) >>> -#define OL_RNA_COL_SPACEX (UI_UNIT_X*2.5) >>> - >>> -#define TS_CHUNK 128 >>> - >>> -#define TREESTORE(a) ((a)?soops->treestore->data+(a)->store_index:NULL) >>> - >>> -/* ************* XXX **************** */ >>> - >>> -static void error(const char *UNUSED(arg), ...) {} >>> - >>> -/* ********************************** */ >>> - >>> - >>> -/* ******************** PROTOTYPES ***************** */ >>> -static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene >>> *scene, ARegion *ar, SpaceOops *soops, TreeElement *te, int startx, int >>> *starty); >>> -static void outliner_do_object_operation(bContext *C, Scene *scene, >>> SpaceOops *soops, ListBase *lb, >>> - >>> void (*operation_cb)(bContext *C, Scene *scene, TreeElement *, >>> TreeStoreElem *, TreeStoreElem *)); >>> - >>> -static int group_select_flag(Group *gr); >>> - >>> -/* ******************** PERSISTANT DATA ***************** */ >>> - >>> -static void outliner_storage_cleanup(SpaceOops *soops) >>> -{ >>> - TreeStore *ts= soops->treestore; >>> - >>> - if(ts) { >>> - TreeStoreElem *tselem; >>> - int a, unused= 0; >>> - >>> - /* each element used once, for ID blocks with more users to >>> have each a treestore */ >>> - for(a=0, tselem= ts->data; a<ts->usedelem; a++, tselem++) >>> tselem->used= 0; >>> - >>> - /* cleanup only after reading file or undo step, and always >>> for >>> - * RNA datablocks view in order to save memory */ >>> - if(soops->storeflag & SO_TREESTORE_CLEANUP) { >>> - >>> - for(a=0, tselem= ts->data; a<ts->usedelem; a++, >>> tselem++) { >>> - if(tselem->id==NULL) unused++; >>> - } >>> - >>> - if(unused) { >>> - if(ts->usedelem == unused) { >>> - MEM_freeN(ts->data); >>> - ts->data= NULL; >>> - ts->usedelem= ts->totelem= 0; >>> - } >>> - else { >>> - TreeStoreElem *tsnewar, *tsnew; >>> - >>> - tsnew=tsnewar= >>> MEM_mallocN((ts->usedelem-unused)*sizeof(TreeStoreElem), "new tselem"); >>> - for(a=0, tselem= ts->data; >>> a<ts->usedelem; a++, tselem++) { >>> - if(tselem->id) { >>> - *tsnew= *tselem; >>> - tsnew++; >>> - } >>> - } >>> - MEM_freeN(ts->data); >>> - ts->data= tsnewar; >>> - ts->usedelem-= unused; >>> - ts->totelem= ts->usedelem; >>> - } >>> - } >>> - } >>> - } >>> -} >>> - >>> -static void check_persistant(SpaceOops *soops, TreeElement *te, ID *id, >>> short type, short nr) >>> -{ >>> - TreeStore *ts; >>> - TreeStoreElem *tselem; >>> - int a; >>> - >>> - /* case 1; no TreeStore */ >>> - if(soops->treestore==NULL) { >>> - soops->treestore= MEM_callocN(sizeof(TreeStore), >>> "treestore"); >>> - } >>> - ts= soops->treestore; >>> - >>> - /* check if 'te' is in treestore */ >>> - tselem= ts->data; >>> - for(a=0; a<ts->usedelem; a++, tselem++) { >>> - if(tselem->id==id && tselem->used==0) { >>> - if((type==0 && tselem->type==0) >>> ||(tselem->type==type && tselem->nr==nr)) { >>> - te->store_index= a; >>> - tselem->used= 1; >>> - return; >>> - } >>> - } >>> - } >>> - >>> - /* add 1 element to treestore */ >>> - if(ts->usedelem==ts->totelem) { >>> - TreeStoreElem *tsnew; >>> - >>> - tsnew= >>> MEM_mallocN((ts->totelem+TS_CHUNK)*sizeof(TreeStoreElem), "treestore data"); >>> - if(ts->data) { >>> - memcpy(tsnew, ts->data, >>> ts->totelem*sizeof(TreeStoreElem)); >>> - MEM_freeN(ts->data); >>> - } >>> - ts->data= tsnew; >>> - ts->totelem+= TS_CHUNK; >>> - } >>> - >>> - tselem= ts->data+ts->usedelem; >>> - >>> - tselem->type= type; >>> - if(type) tselem->nr= nr; // we're picky! :) >>> - else tselem->nr= 0; >>> - tselem->id= id; >>> - tselem->used = 0; >>> - tselem->flag= TSE_CLOSED; >>> - te->store_index= ts->usedelem; >>> - >>> - ts->usedelem++; >>> -} >>> - >>> -/* ******************** TREE MANAGEMENT ****************** */ >>> - >>> -void outliner_free_tree(ListBase *lb) >>> -{ >>> - >>> - while(lb->first) { >>> - TreeElement *te= lb->first; >>> - >>> - outliner_free_tree(&te->subtree); >>> - BLI_remlink(lb, te); >>> - >>> - if(te->flag & TE_FREE_NAME) MEM_freeN((void *)te->name); >>> - MEM_freeN(te); >>> - } >>> -} >>> - >>> -static void outliner_height(SpaceOops *soops, ListBase *lb, int *h) >>> -{ >>> - TreeElement *te= lb->first; >>> - while(te) { >>> - TreeStoreElem *tselem= TREESTORE(te); >>> - if((tselem->flag & TSE_CLOSED)==0) >>> - outliner_height(soops, &te->subtree, h); >>> - (*h) += UI_UNIT_Y; >>> - te= te->next; >>> - } >>> -} >>> - >>> -#if 0 // XXX this is currently disabled until te->xend is set correctly >>> -static void outliner_width(SpaceOops *soops, ListBase *lb, int *w) >>> -{ >>> - TreeElement *te= lb->first; >>> - while(te) { >>> -// TreeStoreElem *tselem= TREESTORE(te); >>> - >>> - // XXX fixme... te->xend is not set yet >>> - if(tselem->flag & TSE_CLOSED) { >>> - if (te->xend > *w) >>> - *w = te->xend; >>> - } >>> - outliner_width(soops, &te->subtree, w); >>> - te= te->next; >>> - } >>> -} >>> -#endif >>> - >>> -static void outliner_rna_width(SpaceOops *soops, ListBase *lb, int *w, int >>> startx) >>> -{ >>> - TreeElement *te= lb->first; >>> - while(te) { >>> - TreeStoreElem *tselem= TREESTORE(te); >>> - // XXX fixme... (currently, we're using a fixed >>> length of 100)! >>> - /*if(te->xend) { >>> - if(te->xend > *w) >>> - *w = te->xend; >>> - }*/ >>> - if(startx+100 > *w) >>> - *w = startx+100; >>> - >>> - if((tselem->flag & TSE_CLOSED)==0) >>> - outliner_rna_width(soops, &te->subtree, w, >>> startx+UI_UNIT_X); >>> - te= te->next; >>> - } >>> -} >>> - >>> -static TreeElement *outliner_find_tree_element(ListBase *lb, int >>> store_index) >>> -{ >>> - TreeElement *te= lb->first, *tes; >>> - while(te) { >>> - if(te->store_index==store_index) return te; >>> - tes= outliner_find_tree_element(&te->subtree, store_index); >>> - if(tes) return tes; >>> - te= te->next; >>> - } >>> - return NULL; >>> -} >>> - >>> - >>> - >>> -static ID *outliner_search_back(SpaceOops *soops, TreeElement *te, short >>> idcode) >>> -{ >>> - TreeStoreElem *tselem; >>> - te= te->parent; >>> - >>> - while(te) { >>> - tselem= TREESTORE(te); >>> - if(tselem->type==0 && te->idcode==idcode) return tselem->id; >>> - te= te->parent; >>> - } >>> - return NULL; >>> -} >>> - >>> -struct treesort { >>> - TreeElement *te; >>> - ID *id; >>> - const char *name; >>> - short idcode; >>> -}; >>> - >>> -static int treesort_alpha(const void *v1, const void *v2) >>> -{ >>> - const struct treesort *x1= v1, *x2= v2; >>> - int comp; >>> - >>> - /* first put objects last (hierarchy) */ >>> - comp= (x1->idcode==ID_OB); >>> - if(x2->idcode==ID_OB) comp+=2; >>> - >>> - if(comp==1) return 1; >>> - else if(comp==2) return -1; >>> - else if(comp==3) { >>> - comp= strcmp(x1->name, x2->name); >>> - >>> - if( comp>0 ) return 1; >>> - else if( comp<0) return -1; >>> - return 0; >>> - } >>> - return 0; >>> -} >>> - >>> -/* this is nice option for later? doesnt look too useful... */ >>> -#if 0 >>> -static int treesort_obtype_alpha(const void *v1, const void *v2) >>> -{ >>> - const struct treesort *x1= v1, *x2= v2; >>> - >>> - /* first put objects last (hierarchy) */ >>> - if(x1->idcode==ID_OB && x2->idcode!=ID_OB) return 1; >>> - else if(x2->idcode==ID_OB && x1->idcode!=ID_OB) return -1; >>> - else { >>> - /* 2nd we check ob type */ >>> - if(x1->idcode==ID_OB && x2->idcode==ID_OB) { >>> - if( ((Object *)x1->id)->type > ((Object >>> *)x2->id)->type) return 1; >>> - else if( ((Object *)x1->id)->type > ((Object >>> *)x2->id)->type) return -1; >>> - else return 0; >>> - } >>> - else { >>> - int comp= strcmp(x1->name, x2->name); >>> - >>> - if( comp>0 ) return 1; >>> - else if( comp<0) return -1; >>> - return 0; >>> - } >>> - } >>> -} >>> -#endif >>> - >>> -/* sort happens on each subtree individual */ >>> -static void outliner_sort(SpaceOops *soops, ListBase *lb) >>> -{ >>> - TreeElement *te; >>> - TreeStoreElem *tselem; >>> - int totelem=0; >>> - >>> - te= lb->last; >>> - if(te==NULL) return; >>> - tselem= TREESTORE(te); >>> - >>> - /* sorting rules; only object lists or deformgroups */ >>> - if( (tselem->type==TSE_DEFGROUP) || (tselem->type==0 && >>> te->idcode==ID_OB)) { >>> - >>> - /* count first */ >>> - for(te= lb->first; te; te= te->next) totelem++; >>> - >>> - if(totelem>1) { >>> - struct treesort *tear= >>> MEM_mallocN(totelem*sizeof(struct treesort), "tree sort array"); >>> >>> @@ Diff output truncated at 10240 characters. @@ >>> _______________________________________________ >>> Bf-blender-cvs mailing list >>> [email protected] >>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs >>> >> _______________________________________________ >> Bf-committers mailing list >> [email protected] >> http://lists.blender.org/mailman/listinfo/bf-committers >> > _______________________________________________ > Bf-committers mailing list > [email protected] > http://lists.blender.org/mailman/listinfo/bf-committers > -- - Campbell _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
