--- sw/source/ui/utlui/content.cxx 2006-03-27 18:18:48.000000000 +0800 +++ sw/source/ui/utlui/content.cxx 2006-04-27 23:29:42.000000000 +0800 @@ -1255,19 +1255,64 @@ SwContentType* pCntType = (SwContentType*)pParent->GetUserData(); sal_uInt16 nCount = pCntType->GetMemberCount(); - for(sal_uInt16 i = 0; i < nCount; i++) - { - const SwContent* pCnt = pCntType->GetMember(i); - if(pCnt) - { - String sEntry = pCnt->GetName(); - if(!sEntry.Len()) + /************************************************************** + Add for outline plus/minus + ***************************************************************/ + if(pCntType->GetType() == CONTENT_TYPE_OUTLINE) + { + SvLBoxEntry* pChild = 0; + for(sal_uInt16 i = 0; i < nCount; i++) + { + const SwContent* pCnt = pCntType->GetMember(i); + if(pCnt) + { + sal_uInt16 nLevel = ((SwOutlineContent*)pCnt)->GetOutlineLevel(); + String sEntry = pCnt->GetName(); + if(!sEntry.Len()) + sEntry = sSpace; + if(!pChild || (nLevel == 0)) + pChild = InsertEntry(sEntry, pParent, + sal_False, LIST_APPEND,(void*)pCnt); + else + { + //back search parent. + if(((SwOutlineContent*)pCntType->GetMember(i-1))->GetOutlineLevel() < nLevel) + pChild = InsertEntry(sEntry, pChild, + sal_False, LIST_APPEND, (void*)pCnt); + else + { + pChild = Prev(pChild); + while(pChild && + lcl_IsContent(pChild) && + !(((SwOutlineContent*)pChild->GetUserData())->GetOutlineLevel() < nLevel) + ) + { + pChild = Prev(pChild); + } + if(pChild) + pChild = InsertEntry(sEntry, pChild, + sal_False, LIST_APPEND, (void*)pCnt); + } + } + } + } + } + else + { + for(sal_uInt16 i = 0; i < nCount; i++) + { + const SwContent* pCnt = pCntType->GetMember(i); + if(pCnt) + { + String sEntry = pCnt->GetName(); + if(!sEntry.Len()) sEntry = sSpace; - SvLBoxEntry* pChild = InsertEntry(sEntry, pParent, - sal_False, LIST_APPEND, (void*)pCnt); - } + SvLBoxEntry* pChild = InsertEntry(sEntry, pParent, + sal_False, LIST_APPEND, (void*)pCnt); + } - } + } + } } } } @@ -1291,6 +1336,19 @@ } else nHiddenBlock |= nOr; + if((pCntType->GetType() == CONTENT_TYPE_OUTLINE)) + { + sal_Bool bBool = SvTreeListBox::Expand(pParent); + SvLBoxEntry* pChild = Next(pParent); + while(pChild && lcl_IsContent(pChild) && pParent->HasChilds()) + { + if(pChild->HasChilds()) + SvTreeListBox::Expand(pChild); + pChild = Next(pChild); + } + return bBool; + } + } } return SvTreeListBox::Expand(pParent); @@ -1338,7 +1396,7 @@ DBG_ASSERT(pEntry, "kein aktueller Eintrag!") if(pEntry) { - if(lcl_IsContentType(pEntry)) + if(lcl_IsContentType(pEntry) && !pEntry->HasChilds()) RequestingChilds(pEntry); else if(bIsActive || bIsConstant) { @@ -1864,9 +1922,9 @@ // or if the visibility of objects (frames, sections, tables) has changed // i.e. in header/footer pArrType->FillMemberList(&bLevelOrVisibiblityChanged); - if(bLevelOrVisibiblityChanged) - bInvalidate = sal_True; sal_uInt16 nChildCount = (sal_uInt16)GetChildCount(pEntry); + if((nType == CONTENT_TYPE_OUTLINE) && bLevelOrVisibiblityChanged) + bRepaint = sal_True; if(bLevelOrVisibiblityChanged) bInvalidate = sal_True; @@ -2759,6 +2817,10 @@ return sal_False; sal_Bool bEnable = sal_False; SvLBoxEntry* pParentEntry = GetParent(pEntry); + while(pParentEntry && (!lcl_IsContentType(pParentEntry))) + { + pParentEntry = GetParent(pParentEntry); + } if(!bIsLastReadOnly && (!IsVisible() || (bIsRoot && nRootType == CONTENT_TYPE_OUTLINE && pParentEntry || lcl_IsContent(pEntry) && ((SwContentType*)pParentEntry->GetUserData())->GetType() == CONTENT_TYPE_OUTLINE))) @@ -2768,6 +2830,11 @@ pNavi->aContentToolBox.EnableItem(FN_ITEM_DOWN, bEnable); pNavi->aContentToolBox.EnableItem(FN_ITEM_LEFT, bEnable); pNavi->aContentToolBox.EnableItem(FN_ITEM_RIGHT,bEnable); + if(pParentEntry && (((SwContentType*)pParentEntry->GetUserData())->GetType() == CONTENT_TYPE_OUTLINE) && bSelect) + { + SwContent* pCnt = (SwContent*)pEntry->GetUserData(); + GotoContent(pCnt); + } return SvTreeListBox::Select(pEntry, bSelect); }