15d39f272SZheng Fan /**************************************************************
25d39f272SZheng Fan  *
35d39f272SZheng Fan  * Licensed to the Apache Software Foundation (ASF) under one
45d39f272SZheng Fan  * or more contributor license agreements.  See the NOTICE file
55d39f272SZheng Fan  * distributed with this work for additional information
65d39f272SZheng Fan  * regarding copyright ownership.  The ASF licenses this file
75d39f272SZheng Fan  * to you under the Apache License, Version 2.0 (the
85d39f272SZheng Fan  * "License"); you may not use this file except in compliance
95d39f272SZheng Fan  * with the License.  You may obtain a copy of the License at
105d39f272SZheng Fan  *
115d39f272SZheng Fan  *   http://www.apache.org/licenses/LICENSE-2.0
125d39f272SZheng Fan  *
135d39f272SZheng Fan  * Unless required by applicable law or agreed to in writing,
145d39f272SZheng Fan  * software distributed under the License is distributed on an
155d39f272SZheng Fan  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165d39f272SZheng Fan  * KIND, either express or implied.  See the License for the
175d39f272SZheng Fan  * specific language governing permissions and limitations
185d39f272SZheng Fan  * under the License.
195d39f272SZheng Fan  *
205d39f272SZheng Fan  *************************************************************/
215d39f272SZheng Fan 
225d39f272SZheng Fan #include "precompiled_svx.hxx"
235d39f272SZheng Fan 
245d39f272SZheng Fan #include "svx/sidebar/SelectionAnalyzer.hxx"
255d39f272SZheng Fan #include "svx/svdmrkv.hxx"
265d39f272SZheng Fan #include "svx/svdobj.hxx"
2703e5ec27SOliver-Rainer Wittmann #include "svx/svdotext.hxx"
285d39f272SZheng Fan #include "svx/svdpage.hxx"
295d39f272SZheng Fan #include "svx/fmglob.hxx"
305d39f272SZheng Fan #include "svx/globl3d.hxx"
315d39f272SZheng Fan 
325d39f272SZheng Fan using sfx2::sidebar::EnumContext;
335d39f272SZheng Fan 
345d39f272SZheng Fan 
355d39f272SZheng Fan namespace svx { namespace sidebar {
365d39f272SZheng Fan 
375d39f272SZheng Fan EnumContext::Context SelectionAnalyzer::GetContextForSelection_SC (const SdrMarkList& rMarkList)
385d39f272SZheng Fan {
395d39f272SZheng Fan     EnumContext::Context eContext = EnumContext::Context_Unknown;
405d39f272SZheng Fan 
415d39f272SZheng Fan     switch (rMarkList.GetMarkCount())
425d39f272SZheng Fan     {
435d39f272SZheng Fan         case 0:
445d39f272SZheng Fan             // Empty selection.  Return Context_Unknown to let the caller
455d39f272SZheng Fan             // substitute it with the default context.
465d39f272SZheng Fan             break;
475d39f272SZheng Fan 
485d39f272SZheng Fan         case 1:
495d39f272SZheng Fan         {
505d39f272SZheng Fan             SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
5103e5ec27SOliver-Rainer Wittmann             if ( pObj->ISA(SdrTextObj) && ((SdrTextObj*)pObj)->IsInEditMode() )
5203e5ec27SOliver-Rainer Wittmann             {
5303e5ec27SOliver-Rainer Wittmann                 eContext = EnumContext::Context_DrawText;
5403e5ec27SOliver-Rainer Wittmann             }
5503e5ec27SOliver-Rainer Wittmann             else
5603e5ec27SOliver-Rainer Wittmann             {
5703e5ec27SOliver-Rainer Wittmann                 const sal_uInt32 nInv = pObj->GetObjInventor();
5803e5ec27SOliver-Rainer Wittmann                 const sal_uInt16 nObjId = pObj->GetObjIdentifier();
5903e5ec27SOliver-Rainer Wittmann                 if (nInv == SdrInventor)
6003e5ec27SOliver-Rainer Wittmann                     eContext = GetContextForObjectId_SC(nObjId);
6103e5ec27SOliver-Rainer Wittmann                 else if (nInv == FmFormInventor)
6203e5ec27SOliver-Rainer Wittmann                     eContext = EnumContext::Context_Form;
6303e5ec27SOliver-Rainer Wittmann             }
645d39f272SZheng Fan             break;
655d39f272SZheng Fan         }
665d39f272SZheng Fan 
675d39f272SZheng Fan         default:
685d39f272SZheng Fan         {
695d39f272SZheng Fan             // Multi selection.
705d39f272SZheng Fan             switch (GetInventorTypeFromMark(rMarkList))
715d39f272SZheng Fan             {
725d39f272SZheng Fan                 case SdrInventor:
735d39f272SZheng Fan                 {
745d39f272SZheng Fan                     const sal_uInt16 nObjId (GetObjectTypeFromMark(rMarkList));
755d39f272SZheng Fan                     if (nObjId == 0)
765d39f272SZheng Fan                         eContext = EnumContext::Context_MultiObject;
775d39f272SZheng Fan                     else
785d39f272SZheng Fan                         eContext = GetContextForObjectId_SC(nObjId);
795d39f272SZheng Fan                     break;
805d39f272SZheng Fan                 }
815d39f272SZheng Fan 
825d39f272SZheng Fan                 case FmFormInventor:
835d39f272SZheng Fan                     eContext = EnumContext::Context_Form;
845d39f272SZheng Fan                     break;
855d39f272SZheng Fan 
865d39f272SZheng Fan                 case 0:
875d39f272SZheng Fan                     eContext = EnumContext::Context_MultiObject;
885d39f272SZheng Fan                     break;
895d39f272SZheng Fan             }
905d39f272SZheng Fan         }
915d39f272SZheng Fan     }
925d39f272SZheng Fan 
935d39f272SZheng Fan     return eContext;
945d39f272SZheng Fan }
955d39f272SZheng Fan 
965d39f272SZheng Fan 
975d39f272SZheng Fan 
985d39f272SZheng Fan 
995d39f272SZheng Fan EnumContext::Context SelectionAnalyzer::GetContextForSelection_SD (
1005d39f272SZheng Fan     const SdrMarkList& rMarkList,
1015d39f272SZheng Fan     const bool bIsMasterPage,
1025d39f272SZheng Fan     const bool bIsHandoutPage,
1035d39f272SZheng Fan     const bool bIsNotesPage)
1045d39f272SZheng Fan {
1055d39f272SZheng Fan     EnumContext::Context eContext = EnumContext::Context_Unknown;
1065d39f272SZheng Fan 
1075d39f272SZheng Fan     // Note that some cases are handled by the caller.  They rely on
1085d39f272SZheng Fan     // sd specific data.
1095d39f272SZheng Fan     switch (rMarkList.GetMarkCount())
1105d39f272SZheng Fan     {
1115d39f272SZheng Fan         case 0:
1125d39f272SZheng Fan             if (bIsHandoutPage)
1135d39f272SZheng Fan                 eContext = EnumContext::Context_HandoutPage;
1145d39f272SZheng Fan             else if (bIsNotesPage)
1155d39f272SZheng Fan                 eContext = EnumContext::Context_NotesPage;
1165d39f272SZheng Fan             else if (bIsMasterPage)
1175d39f272SZheng Fan                 eContext = EnumContext::Context_MasterPage;
1185d39f272SZheng Fan             else
1195d39f272SZheng Fan                 eContext = EnumContext::Context_DrawPage;
1205d39f272SZheng Fan             break;
1215d39f272SZheng Fan 
1225d39f272SZheng Fan         case 1:
1235d39f272SZheng Fan         {
1245d39f272SZheng Fan             SdrObject* pObj = rMarkList.GetMark(0)->GetMarkedSdrObj();
125*c9c475c9SAndre Fischer             if (pObj->ISA(SdrTextObj) && ((SdrTextObj*)pObj)->IsInEditMode())
1265d39f272SZheng Fan             {
127*c9c475c9SAndre Fischer                 if (pObj->GetObjIdentifier() == OBJ_TABLE)
128*c9c475c9SAndre Fischer                 {
129*c9c475c9SAndre Fischer                     // Let a table object take precedence over text
130*c9c475c9SAndre Fischer                     // edit mode.  The panels for text editing are
131*c9c475c9SAndre Fischer                     // present for table context as well, anyway.
132*c9c475c9SAndre Fischer                     eContext = EnumContext::Context_Table;
133*c9c475c9SAndre Fischer                 }
134*c9c475c9SAndre Fischer                 else
135*c9c475c9SAndre Fischer                     eContext = EnumContext::Context_DrawText;
1365d39f272SZheng Fan             }
13703e5ec27SOliver-Rainer Wittmann             else
1385d39f272SZheng Fan             {
13903e5ec27SOliver-Rainer Wittmann                 const sal_uInt32 nInv = pObj->GetObjInventor();
14003e5ec27SOliver-Rainer Wittmann                 sal_uInt16 nObjId = pObj->GetObjIdentifier();
14103e5ec27SOliver-Rainer Wittmann                 if (nInv == SdrInventor)
14203e5ec27SOliver-Rainer Wittmann                 {
14303e5ec27SOliver-Rainer Wittmann                     if (nObjId == OBJ_GRUP)
14403e5ec27SOliver-Rainer Wittmann                     {
14503e5ec27SOliver-Rainer Wittmann                         nObjId = GetObjectTypeFromGroup(pObj);
14603e5ec27SOliver-Rainer Wittmann                         if (nObjId == 0)
14703e5ec27SOliver-Rainer Wittmann                             nObjId = OBJ_GRUP;
14803e5ec27SOliver-Rainer Wittmann                     }
14903e5ec27SOliver-Rainer Wittmann                     eContext = GetContextForObjectId_SD(nObjId, bIsHandoutPage, bIsNotesPage);
15003e5ec27SOliver-Rainer Wittmann                 }
15103e5ec27SOliver-Rainer Wittmann                 else if (nInv == E3dInventor)
15203e5ec27SOliver-Rainer Wittmann                 {
15303e5ec27SOliver-Rainer Wittmann                     eContext = EnumContext::Context_3DObject;
15403e5ec27SOliver-Rainer Wittmann                 }
15503e5ec27SOliver-Rainer Wittmann                 else if (nInv == FmFormInventor)
15603e5ec27SOliver-Rainer Wittmann                 {
15703e5ec27SOliver-Rainer Wittmann                     eContext = EnumContext::Context_Form;
15803e5ec27SOliver-Rainer Wittmann                 }
1595d39f272SZheng Fan             }
1605d39f272SZheng Fan             break;
1615d39f272SZheng Fan         }
1625d39f272SZheng Fan 
1635d39f272SZheng Fan         default:
1645d39f272SZheng Fan         {
1655d39f272SZheng Fan             switch (GetInventorTypeFromMark(rMarkList))
1665d39f272SZheng Fan             {
1675d39f272SZheng Fan                 case SdrInventor:
1685d39f272SZheng Fan                 {
1695d39f272SZheng Fan                     const sal_uInt16 nObjId = GetObjectTypeFromMark(rMarkList);
1705d39f272SZheng Fan                     if (nObjId == 0)
1715d39f272SZheng Fan                         eContext = EnumContext::Context_MultiObject;
1725d39f272SZheng Fan                     else
1735d39f272SZheng Fan                         eContext = GetContextForObjectId_SD(nObjId, bIsHandoutPage, bIsNotesPage);
1745d39f272SZheng Fan                     break;
1755d39f272SZheng Fan                 }
1765d39f272SZheng Fan 
1775d39f272SZheng Fan                 case E3dInventor:
1785d39f272SZheng Fan                     eContext = EnumContext::Context_3DObject;
1795d39f272SZheng Fan                     break;
1805d39f272SZheng Fan 
1815d39f272SZheng Fan                 case FmFormInventor:
1825d39f272SZheng Fan                     eContext = EnumContext::Context_Form;
1835d39f272SZheng Fan                     break;
1845d39f272SZheng Fan 
1855d39f272SZheng Fan                 case 0:
1865d39f272SZheng Fan                     eContext = EnumContext::Context_MultiObject;
1875d39f272SZheng Fan                     break;
1885d39f272SZheng Fan             }
1895d39f272SZheng Fan             break;
1905d39f272SZheng Fan         }
1915d39f272SZheng Fan     }
1925d39f272SZheng Fan 
1935d39f272SZheng Fan 	return eContext;
1945d39f272SZheng Fan }
1955d39f272SZheng Fan 
1965d39f272SZheng Fan 
1975d39f272SZheng Fan 
1985d39f272SZheng Fan 
1995d39f272SZheng Fan EnumContext::Context SelectionAnalyzer::GetContextForObjectId_SC (const sal_uInt16 nObjectId)
2005d39f272SZheng Fan {
2015d39f272SZheng Fan     switch (nObjectId)
2025d39f272SZheng Fan     {
2035d39f272SZheng Fan         case OBJ_CAPTION:
2045d39f272SZheng Fan         case OBJ_TITLETEXT:
2055d39f272SZheng Fan         case OBJ_OUTLINETEXT:
2065d39f272SZheng Fan         case OBJ_TEXT:
2075d39f272SZheng Fan         case OBJ_TEXTEXT:
2085d39f272SZheng Fan         case OBJ_PATHLINE:
2095d39f272SZheng Fan         case OBJ_PLIN:
2105d39f272SZheng Fan         case OBJ_FREELINE:
2115d39f272SZheng Fan         case OBJ_EDGE:
2125d39f272SZheng Fan         case OBJ_LINE:
2135d39f272SZheng Fan         case OBJ_MEASURE:
2145d39f272SZheng Fan         case OBJ_RECT:
2155d39f272SZheng Fan         case OBJ_CIRC:
2165d39f272SZheng Fan         case OBJ_FREEFILL:
2175d39f272SZheng Fan         case OBJ_PATHFILL:
2185d39f272SZheng Fan         case OBJ_POLY:
2195d39f272SZheng Fan         case OBJ_SECT:
2205d39f272SZheng Fan         case OBJ_CARC:
2215d39f272SZheng Fan         case OBJ_CCUT:
2225d39f272SZheng Fan         case OBJ_CUSTOMSHAPE:
2235d39f272SZheng Fan         case OBJ_GRUP:
2245d39f272SZheng Fan             return EnumContext::Context_Draw;
2255d39f272SZheng Fan 
2265d39f272SZheng Fan         case OBJ_GRAF:
2275d39f272SZheng Fan             return EnumContext::Context_Graphic;
2285d39f272SZheng Fan 
2295d39f272SZheng Fan         case OBJ_OLE2:
2305d39f272SZheng Fan             return EnumContext::Context_OLE;
2315d39f272SZheng Fan 
2325d39f272SZheng Fan         case OBJ_MEDIA:
2335d39f272SZheng Fan             return EnumContext::Context_Media;
2345d39f272SZheng Fan             break;
2355d39f272SZheng Fan 
2365d39f272SZheng Fan         default:
2375d39f272SZheng Fan             return EnumContext::Context_Unknown;
2385d39f272SZheng Fan     }
2395d39f272SZheng Fan }
2405d39f272SZheng Fan 
2415d39f272SZheng Fan 
2425d39f272SZheng Fan 
2435d39f272SZheng Fan 
2445d39f272SZheng Fan EnumContext::Context SelectionAnalyzer::GetContextForObjectId_SD (
2455d39f272SZheng Fan     const sal_uInt16 nObjectId,
2465d39f272SZheng Fan     const bool bIsHandoutPage,
2475d39f272SZheng Fan     const bool bIsNotesPage)
2485d39f272SZheng Fan {
2495d39f272SZheng Fan 	switch (nObjectId)
2505d39f272SZheng Fan 	{
2515d39f272SZheng Fan 		case OBJ_CAPTION:
2525d39f272SZheng Fan 		case OBJ_PATHLINE:
2535d39f272SZheng Fan 		case OBJ_PLIN:
2545d39f272SZheng Fan 		case OBJ_FREELINE:
2555d39f272SZheng Fan 		case OBJ_EDGE:
2565d39f272SZheng Fan 		case OBJ_LINE:
2575d39f272SZheng Fan 		case OBJ_MEASURE:
2585d39f272SZheng Fan 		case OBJ_RECT:
2595d39f272SZheng Fan 		case OBJ_CIRC:
2605d39f272SZheng Fan 		case OBJ_FREEFILL:
2615d39f272SZheng Fan 		case OBJ_PATHFILL:
2625d39f272SZheng Fan 		case OBJ_POLY:
2635d39f272SZheng Fan 		case OBJ_SECT:
2645d39f272SZheng Fan 		case OBJ_CARC:
2655d39f272SZheng Fan 		case OBJ_CCUT:
2665d39f272SZheng Fan 		case OBJ_CUSTOMSHAPE:
2675d39f272SZheng Fan 		case OBJ_GRUP:
2685d39f272SZheng Fan 			return EnumContext::Context_Draw;
2695d39f272SZheng Fan 
2705d39f272SZheng Fan 		case OBJ_TITLETEXT:
2715d39f272SZheng Fan 		case OBJ_OUTLINETEXT:
2725d39f272SZheng Fan 		case OBJ_TEXT:
2735d39f272SZheng Fan 		case OBJ_TEXTEXT:
2745d39f272SZheng Fan 			return EnumContext::Context_TextObject;
2755d39f272SZheng Fan 
2765d39f272SZheng Fan 		case OBJ_GRAF:
2775d39f272SZheng Fan 			return EnumContext::Context_Graphic;
2785d39f272SZheng Fan 
2795d39f272SZheng Fan 		case OBJ_OLE2:
2805d39f272SZheng Fan 			return EnumContext::Context_OLE;
2815d39f272SZheng Fan 
2825d39f272SZheng Fan 		case OBJ_MEDIA:
2835d39f272SZheng Fan 			return EnumContext::Context_Media;
2845d39f272SZheng Fan 
2855d39f272SZheng Fan 		case OBJ_TABLE:
2865d39f272SZheng Fan 			return EnumContext::Context_Table;
2875d39f272SZheng Fan 
2885d39f272SZheng Fan 		case OBJ_PAGE:
2895d39f272SZheng Fan             if (bIsHandoutPage)
2905d39f272SZheng Fan 				return EnumContext::Context_HandoutPage;
2915d39f272SZheng Fan             else if (bIsNotesPage)
2925d39f272SZheng Fan 				return EnumContext::Context_NotesPage;
2935d39f272SZheng Fan 			else
2945d39f272SZheng Fan                 return EnumContext::Context_Unknown;
2955d39f272SZheng Fan 
2965d39f272SZheng Fan         default:
2975d39f272SZheng Fan             return EnumContext::Context_Unknown;
2985d39f272SZheng Fan 	}
2995d39f272SZheng Fan }
3005d39f272SZheng Fan 
3015d39f272SZheng Fan 
3025d39f272SZheng Fan 
3035d39f272SZheng Fan 
3045d39f272SZheng Fan sal_uInt32 SelectionAnalyzer::GetInventorTypeFromMark (const SdrMarkList& rMarkList)
3055d39f272SZheng Fan {
3065d39f272SZheng Fan     const sal_uLong nMarkCount (rMarkList.GetMarkCount());
3075d39f272SZheng Fan 
3085d39f272SZheng Fan     if (nMarkCount < 1)
3095d39f272SZheng Fan         return 0;
3105d39f272SZheng Fan 
3115d39f272SZheng Fan     SdrMark* pMark = rMarkList.GetMark(0);
3125d39f272SZheng Fan     SdrObject* pObj = pMark->GetMarkedSdrObj();
3135d39f272SZheng Fan     const sal_uInt32 nFirstInv = pObj->GetObjInventor();
3145d39f272SZheng Fan 
3155d39f272SZheng Fan     for (sal_uLong nIndex=1; nIndex<nMarkCount; ++nIndex)
3165d39f272SZheng Fan     {
3175d39f272SZheng Fan         pMark = rMarkList.GetMark(nIndex);
3185d39f272SZheng Fan         pObj = pMark->GetMarkedSdrObj();
3195d39f272SZheng Fan         const sal_uInt32 nInv (pObj->GetObjInventor());
3205d39f272SZheng Fan 
3215d39f272SZheng Fan         if (nInv != nFirstInv)
3225d39f272SZheng Fan             return 0;
3235d39f272SZheng Fan     }
3245d39f272SZheng Fan 
3255d39f272SZheng Fan     return nFirstInv;
3265d39f272SZheng Fan }
3275d39f272SZheng Fan 
3285d39f272SZheng Fan 
3295d39f272SZheng Fan 
3305d39f272SZheng Fan 
3315d39f272SZheng Fan sal_uInt16 SelectionAnalyzer::GetObjectTypeFromGroup (const SdrObject* pObj)
3325d39f272SZheng Fan {
3335d39f272SZheng Fan     SdrObjList* pObjList = pObj->GetSubList();
3345d39f272SZheng Fan     if (pObjList)
3355d39f272SZheng Fan     {
3365d39f272SZheng Fan         const sal_uLong nSubObjCount (pObjList->GetObjCount());
3375d39f272SZheng Fan 
3385d39f272SZheng Fan         if (nSubObjCount>0)
3395d39f272SZheng Fan         {
3405d39f272SZheng Fan             SdrObject* pObj = pObjList->GetObj(0);
3415d39f272SZheng Fan             sal_uInt16 nResultType = pObj->GetObjIdentifier();
3425d39f272SZheng Fan 
3435d39f272SZheng Fan             if (nResultType == OBJ_GRUP)
3445d39f272SZheng Fan                 nResultType = GetObjectTypeFromGroup(pObj);
3455d39f272SZheng Fan 
3465d39f272SZheng Fan             if (IsShapeType(nResultType))
3475d39f272SZheng Fan                 nResultType = OBJ_CUSTOMSHAPE;
3485d39f272SZheng Fan 
3495d39f272SZheng Fan             if (IsTextObjType(nResultType))
3505d39f272SZheng Fan                 nResultType = OBJ_TEXT;
3515d39f272SZheng Fan 
3525d39f272SZheng Fan             for (sal_uInt16 nIndex=1; nIndex<nSubObjCount; ++nIndex)
3535d39f272SZheng Fan             {
3545d39f272SZheng Fan                 pObj = pObjList->GetObj(nIndex);
3555d39f272SZheng Fan                 sal_uInt16 nType (pObj->GetObjIdentifier());
3565d39f272SZheng Fan 
3575d39f272SZheng Fan                 if(nType == OBJ_GRUP)
3585d39f272SZheng Fan                     nType = GetObjectTypeFromGroup(pObj);
3595d39f272SZheng Fan 
3605d39f272SZheng Fan                 if (IsShapeType(nType))
3615d39f272SZheng Fan                     nType = OBJ_CUSTOMSHAPE;
3625d39f272SZheng Fan 
3635d39f272SZheng Fan                 if ((nType == OBJ_CUSTOMSHAPE) && (nResultType == OBJ_TEXT))
3645d39f272SZheng Fan                     nType = OBJ_TEXT;
3655d39f272SZheng Fan 
3665d39f272SZheng Fan                 if (IsTextObjType(nType))
3675d39f272SZheng Fan                     nType = OBJ_TEXT;
3685d39f272SZheng Fan 
3695d39f272SZheng Fan                 if ((nType == OBJ_TEXT) && (nResultType == OBJ_CUSTOMSHAPE))
3705d39f272SZheng Fan                     nResultType = OBJ_TEXT;
3715d39f272SZheng Fan 
3725d39f272SZheng Fan                 if (nType != nResultType)
3735d39f272SZheng Fan                     return 0;
3745d39f272SZheng Fan             }
3755d39f272SZheng Fan 
3765d39f272SZheng Fan             return nResultType;
3775d39f272SZheng Fan         }
3785d39f272SZheng Fan     }
3795d39f272SZheng Fan 
3805d39f272SZheng Fan     return 0;
3815d39f272SZheng Fan }
3825d39f272SZheng Fan 
3835d39f272SZheng Fan 
3845d39f272SZheng Fan 
3855d39f272SZheng Fan 
3865d39f272SZheng Fan sal_uInt16  SelectionAnalyzer::GetObjectTypeFromMark (const SdrMarkList& rMarkList)
3875d39f272SZheng Fan {
3885d39f272SZheng Fan     const sal_uLong nMarkCount (rMarkList.GetMarkCount());
3895d39f272SZheng Fan 
3905d39f272SZheng Fan     if (nMarkCount < 1)
3915d39f272SZheng Fan         return 0;
3925d39f272SZheng Fan 
3935d39f272SZheng Fan     SdrMark* pMark = rMarkList.GetMark(0);
3945d39f272SZheng Fan     SdrObject* pObj = pMark->GetMarkedSdrObj();
3955d39f272SZheng Fan     sal_uInt16 nResultType = pObj->GetObjIdentifier();
3965d39f272SZheng Fan 
3975d39f272SZheng Fan     if(nResultType == OBJ_GRUP)
3985d39f272SZheng Fan         nResultType = GetObjectTypeFromGroup(pObj);
3995d39f272SZheng Fan 
4005d39f272SZheng Fan     if (IsShapeType(nResultType))
4015d39f272SZheng Fan         nResultType = OBJ_CUSTOMSHAPE;
4025d39f272SZheng Fan 
4035d39f272SZheng Fan     if (IsTextObjType(nResultType))
4045d39f272SZheng Fan         nResultType = OBJ_TEXT;
4055d39f272SZheng Fan 
4065d39f272SZheng Fan     for (sal_uLong nIndex=1; nIndex<nMarkCount; ++nIndex)
4075d39f272SZheng Fan     {
4085d39f272SZheng Fan         pMark = rMarkList.GetMark(nIndex);
4095d39f272SZheng Fan         pObj = pMark->GetMarkedSdrObj();
4105d39f272SZheng Fan         sal_uInt16 nType = pObj->GetObjIdentifier();
4115d39f272SZheng Fan 
4125d39f272SZheng Fan         if(nType == OBJ_GRUP)
4135d39f272SZheng Fan             nType = GetObjectTypeFromGroup(pObj);
4145d39f272SZheng Fan 
4155d39f272SZheng Fan         if (IsShapeType(nType))
4165d39f272SZheng Fan             nType = OBJ_CUSTOMSHAPE;
4175d39f272SZheng Fan 
4185d39f272SZheng Fan         if ((nType == OBJ_CUSTOMSHAPE) && (nResultType == OBJ_TEXT))
4195d39f272SZheng Fan             nType = OBJ_TEXT;
4205d39f272SZheng Fan 
4215d39f272SZheng Fan         if (IsTextObjType(nType))
4225d39f272SZheng Fan             nType = OBJ_TEXT;
4235d39f272SZheng Fan 
4245d39f272SZheng Fan         if ((nType == OBJ_TEXT) && (nResultType == OBJ_CUSTOMSHAPE))
4255d39f272SZheng Fan             nResultType = OBJ_TEXT;
4265d39f272SZheng Fan 
4275d39f272SZheng Fan         if (nType != nResultType)
4285d39f272SZheng Fan             return 0;
4295d39f272SZheng Fan     }
4305d39f272SZheng Fan 
4315d39f272SZheng Fan     return nResultType;
4325d39f272SZheng Fan }
4335d39f272SZheng Fan 
4345d39f272SZheng Fan 
4355d39f272SZheng Fan 
4365d39f272SZheng Fan 
4375d39f272SZheng Fan bool SelectionAnalyzer::IsShapeType (const sal_uInt16 nType)
4385d39f272SZheng Fan {
4395d39f272SZheng Fan 	switch (nType)
4405d39f272SZheng Fan     {
4415d39f272SZheng Fan 		case OBJ_LINE:
4425d39f272SZheng Fan 		case OBJ_CARC:
4435d39f272SZheng Fan 		case OBJ_PLIN:
4445d39f272SZheng Fan 		case OBJ_PATHLINE:
4455d39f272SZheng Fan 		case OBJ_RECT:
4465d39f272SZheng Fan 		case OBJ_CIRC:
4475d39f272SZheng Fan 		case OBJ_SECT:
4485d39f272SZheng Fan 		case OBJ_CCUT:
4495d39f272SZheng Fan 		case OBJ_PATHFILL:
4505d39f272SZheng Fan 		case OBJ_CUSTOMSHAPE:
4515d39f272SZheng Fan 		case OBJ_CAPTION:
4525d39f272SZheng Fan 		case OBJ_MEASURE:
4535d39f272SZheng Fan 		case OBJ_EDGE:
4545d39f272SZheng Fan 		case OBJ_POLY:
4555d39f272SZheng Fan 		case OBJ_FREELINE:
4565d39f272SZheng Fan 		case OBJ_FREEFILL:
4575d39f272SZheng Fan 			return true;
4585d39f272SZheng Fan 
4595d39f272SZheng Fan 		default:
4605d39f272SZheng Fan             return false;
4615d39f272SZheng Fan 	}
4625d39f272SZheng Fan }
4635d39f272SZheng Fan 
4645d39f272SZheng Fan 
4655d39f272SZheng Fan 
4665d39f272SZheng Fan 
4675d39f272SZheng Fan bool SelectionAnalyzer::IsTextObjType (const sal_uInt16 nType)
4685d39f272SZheng Fan {
4695d39f272SZheng Fan 	switch(nType)
4705d39f272SZheng Fan     {
4715d39f272SZheng Fan 		case OBJ_TEXT:
4725d39f272SZheng Fan 		case OBJ_TEXTEXT:
4735d39f272SZheng Fan 		case OBJ_TITLETEXT:
4745d39f272SZheng Fan 		case OBJ_OUTLINETEXT:
4755d39f272SZheng Fan 			return true;
4765d39f272SZheng Fan 
4775d39f272SZheng Fan 		default:
4785d39f272SZheng Fan             return false;
4795d39f272SZheng Fan 	}
4805d39f272SZheng Fan }
4815d39f272SZheng Fan 
4825d39f272SZheng Fan 
4835d39f272SZheng Fan 
4845d39f272SZheng Fan } } // end of namespace ::svx::sidebar
485