summaryrefslogtreecommitdiff
path: root/scratch/quickdiagramming-ui.diff
diff options
context:
space:
mode:
Diffstat (limited to 'scratch/quickdiagramming-ui.diff')
-rw-r--r--scratch/quickdiagramming-ui.diff9953
1 files changed, 0 insertions, 9953 deletions
diff --git a/scratch/quickdiagramming-ui.diff b/scratch/quickdiagramming-ui.diff
deleted file mode 100644
index daf5ce562..000000000
--- a/scratch/quickdiagramming-ui.diff
+++ /dev/null
@@ -1,9953 +0,0 @@
-Quick diagramming ui
-
-From: Thorsten Behrens <thb@openoffice.org>
-
-
----
-
- sd/inc/app.hrc | 3
- sd/inc/glob.hrc | 1
- sd/inc/helpids.h | 1
- sd/prj/build.lst | 1
- sd/sdi/_drvwsh.sdi | 12
- sd/sdi/sdraw.sdi | 50 +
- sd/source/ui/animations/makefile.mk | 2
- sd/source/ui/app/menuids2_tmpl.src | 8
- sd/source/ui/app/menuids_tmpl.src | 24
- sd/source/ui/app/popup2_tmpl.src | 12
- sd/source/ui/app/res_bmp.src | 20
- sd/source/ui/app/strings.src | 4
- sd/source/ui/framework/tools/FrameworkHelper.cxx | 2
- sd/source/ui/ig/BulletTextIterator.cxx | 202 +++
- sd/source/ui/ig/CircleLayoutAlgorithm.cxx | 87 +
- sd/source/ui/ig/FieldLayoutAlgorithm.cxx | 364 +++++
- sd/source/ui/ig/GroupedListLayout.cxx | 337 +++++
- sd/source/ui/ig/HorizontalListLayoutAlgorithm.cxx | 51 +
- sd/source/ui/ig/IntelligentGroup.cxx | 171 +++
- sd/source/ui/ig/IntelligentGroupBulletList.cxx | 135 ++
- sd/source/ui/ig/IntelligentGroupController.cxx | 149 ++
- sd/source/ui/ig/IntelligentGroupFrame.cxx | 1364 ++++++++++++++++++++
- sd/source/ui/ig/IntelligentGroupLayoutBase.cxx | 202 +++
- sd/source/ui/ig/IntelligentGroupLayoutManager.cxx | 180 +++
- sd/source/ui/ig/IntelligentGroupLayouter.cxx | 259 ++++
- sd/source/ui/ig/IntelligentGroupModel.cxx | 589 +++++++++
- sd/source/ui/ig/IntelligentGroupPane.cxx | 521 ++++++++
- sd/source/ui/ig/IntelligentGroupPane.hrc | 53 +
- sd/source/ui/ig/IntelligentGroupPane.hxx | 104 ++
- sd/source/ui/ig/IntelligentGroupPane.src | 136 ++
- sd/source/ui/ig/IntelligentGroupShapeAccessor.cxx | 110 ++
- sd/source/ui/ig/IntelligentGroupText.cxx | 138 ++
- sd/source/ui/ig/IntelligentGroupTextIterator.cxx | 112 ++
- sd/source/ui/ig/LayoutBase.cxx | 190 +++
- sd/source/ui/ig/ListLayoutAlgorithm.cxx | 170 ++
- sd/source/ui/ig/PictureAccentListLayout.cxx | 286 ++++
- sd/source/ui/ig/RowFieldLayoutAlgorithm.cxx | 51 +
- sd/source/ui/ig/SelectionManager.cxx | 299 ++++
- sd/source/ui/ig/TreeLayout.cxx | 182 +++
- sd/source/ui/ig/TreeLayoutAlgorithm.cxx | 153 ++
- sd/source/ui/ig/makefile.mk | 81 +
- sd/source/ui/inc/BulletTextIterator.hxx | 66 +
- sd/source/ui/inc/CircleLayoutAlgorithm.hxx | 57 +
- sd/source/ui/inc/FieldLayoutAlgorithm.hxx | 80 +
- sd/source/ui/inc/GroupedListLayout.hxx | 67 +
- sd/source/ui/inc/HorizontalListLayoutAlgorithm.hxx | 50 +
- sd/source/ui/inc/IntelligentGroup.hxx | 74 +
- sd/source/ui/inc/IntelligentGroupAlgorithmBase.hxx | 55 +
- sd/source/ui/inc/IntelligentGroupBulletList.hxx | 68 +
- sd/source/ui/inc/IntelligentGroupController.hxx | 62 +
- sd/source/ui/inc/IntelligentGroupDescriptors.hxx | 190 +++
- sd/source/ui/inc/IntelligentGroupFrame.hxx | 132 ++
- sd/source/ui/inc/IntelligentGroupLayoutBase.hxx | 75 +
- sd/source/ui/inc/IntelligentGroupLayoutManager.hxx | 73 +
- sd/source/ui/inc/IntelligentGroupLayouter.hxx | 78 +
- sd/source/ui/inc/IntelligentGroupModel.hxx | 103 ++
- sd/source/ui/inc/IntelligentGroupShapeAccessor.hxx | 62 +
- sd/source/ui/inc/IntelligentGroupText.hxx | 59 +
- sd/source/ui/inc/IntelligentGroupTextAccess.hxx | 50 +
- sd/source/ui/inc/IntelligentGroupTextIterator.hxx | 75 +
- sd/source/ui/inc/ListLayoutAlgorithm.hxx | 63 +
- sd/source/ui/inc/PictureAccentListLayout.hxx | 64 +
- sd/source/ui/inc/RowFieldLayoutAlgorithm.hxx | 50 +
- sd/source/ui/inc/SelectionManager.hxx | 99 +
- sd/source/ui/inc/TaskPaneViewShell.hxx | 1
- sd/source/ui/inc/TreeLayout.hxx | 62 +
- sd/source/ui/inc/TreeLayoutAlgorithm.hxx | 77 +
- sd/source/ui/inc/ViewShellBase.hxx | 5
- sd/source/ui/inc/framework/FrameworkHelper.hxx | 1
- sd/source/ui/inc/res_bmp.hrc | 6
- sd/source/ui/toolpanel/TaskPaneViewShell.cxx | 17
- .../toolpanel/controls/IntelligentGroupPanel.cxx | 118 ++
- .../toolpanel/controls/IntelligentGroupPanel.hxx | 78 +
- sd/source/ui/toolpanel/controls/makefile.mk | 3
- sd/source/ui/view/ViewShellBase.cxx | 21
- sd/source/ui/view/drviews2.cxx | 14
- sd/source/ui/view/drviewse.cxx | 62 +
- sd/uiconfig/simpress/menubar/menubar.xml | 1
- sd/util/makefile.mk | 7
- 79 files changed, 9037 insertions(+), 4 deletions(-)
- create mode 100644 sd/source/ui/ig/BulletTextIterator.cxx
- create mode 100644 sd/source/ui/ig/CircleLayoutAlgorithm.cxx
- create mode 100644 sd/source/ui/ig/FieldLayoutAlgorithm.cxx
- create mode 100644 sd/source/ui/ig/GroupedListLayout.cxx
- create mode 100644 sd/source/ui/ig/HorizontalListLayoutAlgorithm.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroup.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupBulletList.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupController.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupFrame.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupLayoutBase.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupLayoutManager.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupLayouter.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupModel.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupPane.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupPane.hrc
- create mode 100644 sd/source/ui/ig/IntelligentGroupPane.hxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupPane.src
- create mode 100644 sd/source/ui/ig/IntelligentGroupShapeAccessor.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupText.cxx
- create mode 100644 sd/source/ui/ig/IntelligentGroupTextIterator.cxx
- create mode 100644 sd/source/ui/ig/LayoutBase.cxx
- create mode 100644 sd/source/ui/ig/ListLayoutAlgorithm.cxx
- create mode 100644 sd/source/ui/ig/PictureAccentListLayout.cxx
- create mode 100644 sd/source/ui/ig/RowFieldLayoutAlgorithm.cxx
- create mode 100644 sd/source/ui/ig/SelectionManager.cxx
- create mode 100644 sd/source/ui/ig/TreeLayout.cxx
- create mode 100644 sd/source/ui/ig/TreeLayoutAlgorithm.cxx
- create mode 100644 sd/source/ui/ig/makefile.mk
- create mode 100644 sd/source/ui/inc/BulletTextIterator.hxx
- create mode 100644 sd/source/ui/inc/CircleLayoutAlgorithm.hxx
- create mode 100644 sd/source/ui/inc/FieldLayoutAlgorithm.hxx
- create mode 100644 sd/source/ui/inc/GroupedListLayout.hxx
- create mode 100644 sd/source/ui/inc/HorizontalListLayoutAlgorithm.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroup.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupAlgorithmBase.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupBulletList.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupController.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupDescriptors.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupFrame.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupLayoutBase.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupLayoutManager.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupLayouter.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupModel.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupShapeAccessor.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupText.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupTextAccess.hxx
- create mode 100644 sd/source/ui/inc/IntelligentGroupTextIterator.hxx
- create mode 100644 sd/source/ui/inc/ListLayoutAlgorithm.hxx
- create mode 100644 sd/source/ui/inc/PictureAccentListLayout.hxx
- create mode 100644 sd/source/ui/inc/RowFieldLayoutAlgorithm.hxx
- create mode 100644 sd/source/ui/inc/SelectionManager.hxx
- create mode 100644 sd/source/ui/inc/TreeLayout.hxx
- create mode 100644 sd/source/ui/inc/TreeLayoutAlgorithm.hxx
- create mode 100644 sd/source/ui/toolpanel/controls/IntelligentGroupPanel.cxx
- create mode 100644 sd/source/ui/toolpanel/controls/IntelligentGroupPanel.hxx
-
-
-diff --git sd/inc/app.hrc sd/inc/app.hrc
-index 4c87bfd..f5196a6 100644
---- sd/inc/app.hrc
-+++ sd/inc/app.hrc
-@@ -468,5 +468,8 @@
-
- #define SID_ADD_MOTION_PATH (SID_SD_START+443)
- #define SID_TABLE_TOOLBOX (SID_SD_START+444)
-+#define SID_INSERT_INTELLIGENT_GROUP (SID_SD_START+445)
-+#define SID_INTELLIGENT_GROUP (SID_SD_START+446)
-+#define SID_ADD_SHAPE (SID_SD_START+447)
-
- #endif
-diff --git sd/inc/glob.hrc sd/inc/glob.hrc
-index 3fb822e..cc18b8b 100644
---- sd/inc/glob.hrc
-+++ sd/inc/glob.hrc
-@@ -151,5 +151,6 @@
- #define DLG_TABLEDESIGNPANE RID_GLOB_START+224
- #define STR_TABLEOBJECTBARSHELL RID_GLOB_START+225
- #define RID_TABPAGE_PARA_NUMBERING RID_GLOB_START+226
-+#define DLG_INTELLIGENTGROUPPANE RID_GLOB_START+227
-
-
-diff --git sd/inc/helpids.h sd/inc/helpids.h
-index 9d5260e..391508e 100644
---- sd/inc/helpids.h
-+++ sd/inc/helpids.h
-@@ -280,3 +280,4 @@
- #define HID_SD_CELL_STYLE_LAST_COLUMN (HID_SD_START + 199)
-
- #define HID_SD_TABLE_DESIGN (HID_SD_START + 200)
-+#define HID_SD_INTELLIGENT_GROUP (HID_SD_START + 201)
-diff --git sd/prj/build.lst sd/prj/build.lst
-index 949153b..8c52ab7 100644
---- sd/prj/build.lst
-+++ sd/prj/build.lst
-@@ -8,6 +8,7 @@ sd sd\res\imagelst get - all sd_resil NULL
- sd sd\sdi nmake - all sd_sdi NULL
- sd sd\source\helper nmake - all sd_helper sd_inc NULL
- sd sd\source\ui\func nmake - all sd_func sd_sdi sd_inc NULL
-+sd sd\source\ui\ig nmake - all sd_ig sd_sdi sd_inc NULL
- sd sd\source\ui\view nmake - all sd_view sd_sdi sd_inc NULL
- sd sd\source\ui\app nmake - all sd_app sd_sdi sd_inc NULL
- sd sd\source\ui\dlg nmake - all sd_dlg sd_sdi sd_inc NULL
-diff --git sd/sdi/_drvwsh.sdi sd/sdi/_drvwsh.sdi
-index aacab01..3bc0e81 100644
---- sd/sdi/_drvwsh.sdi
-+++ sd/sdi/_drvwsh.sdi
-@@ -2240,6 +2240,18 @@ interface DrawView
- StateMethod = GetMenuState ;
- ]
-
-+ SID_INSERT_INTELLIGENT_GROUP
-+ [
-+ ExecMethod = FuPermanent ;
-+ StateMethod = GetMenuState ;
-+ ]
-+
-+ SID_ADD_SHAPE
-+ [
-+ ExecMethod = FuTemporary ;
-+ StateMethod = GetMenuState ;
-+ ]
-+
- SID_INSERT_DATE_TIME // ole : no, status : ?
- [
- ExecMethod = ExecCtrl ;
-diff --git sd/sdi/sdraw.sdi sd/sdi/sdraw.sdi
-index bfb834a..cb30c1a 100644
---- sd/sdi/sdraw.sdi
-+++ sd/sdi/sdraw.sdi
-@@ -6692,6 +6692,56 @@ SfxVoidItem InsertPageNumber SID_INSERT_PAGE_NUMBER
- ]
-
- //--------------------------------------------------------------------------
-+SfxVoidItem InsertIntelligentGroup SID_INSERT_INTELLIGENT_GROUP
-+()
-+[
-+ /* flags: */
-+ AutoUpdate = FALSE,
-+ Cachable = Cachable,
-+ FastCall = FALSE,
-+ HasCoreId = FALSE,
-+ HasDialog = TRUE,
-+ ReadOnlyDoc = FALSE,
-+ Toggle = FALSE,
-+ Container = FALSE,
-+ RecordAbsolute = FALSE,
-+ RecordPerSet;
-+ Synchron;
-+
-+ /* config: */
-+ AccelConfig = TRUE,
-+ MenuConfig = TRUE,
-+ StatusBarConfig = FALSE,
-+ ToolBoxConfig = TRUE,
-+ GroupId = GID_MODIFY;
-+]
-+
-+//--------------------------------------------------------------------------
-+SfxVoidItem AddShape SID_ADD_SHAPE
-+()
-+[
-+ /* flags: */
-+ AutoUpdate = FALSE,
-+ Cachable = Cachable,
-+ FastCall = FALSE,
-+ HasCoreId = FALSE,
-+ HasDialog = FALSE,
-+ ReadOnlyDoc = FALSE,
-+ Toggle = FALSE,
-+ Container = FALSE,
-+ RecordAbsolute = FALSE,
-+ RecordPerSet;
-+ Synchron;
-+
-+ /* config: */
-+ AccelConfig = TRUE,
-+ MenuConfig = TRUE,
-+ StatusBarConfig = FALSE,
-+ ToolBoxConfig = TRUE,
-+ GroupId = GID_MODIFY;
-+]
-+
-+//--------------------------------------------------------------------------
- SfxVoidItem InsertDateAndTime SID_INSERT_DATE_TIME
- ()
- [
-diff --git sd/source/ui/animations/makefile.mk sd/source/ui/animations/makefile.mk
-index e3754a6..9684cf2 100644
---- sd/source/ui/animations/makefile.mk
-+++ sd/source/ui/animations/makefile.mk
-@@ -63,7 +63,7 @@ SLOFILES = \
- $(SLO)$/DialogListBox.obj \
- $(SLO)$/SlideTransitionPane.obj \
- $(SLO)$/STLPropertySet.obj \
-- $(SLO)$/motionpathtag.obj
-+ $(SLO)$/motionpathtag.obj
-
- # --- Tagets -------------------------------------------------------
-
-diff --git sd/source/ui/app/menuids2_tmpl.src sd/source/ui/app/menuids2_tmpl.src
-index 614a671..a54270f 100644
---- sd/source/ui/app/menuids2_tmpl.src
-+++ sd/source/ui/app/menuids2_tmpl.src
-@@ -686,6 +686,14 @@
- Text [ en-US ] = "~Check..." ; \
- };
-
-+#define MN_INSERT_INTELLIGENT_GROUP \
-+ MenuItem\
-+ {\
-+ Identifier = SID_INSERT_INTELLIGENT_GROUP ; \
-+ HelpID = SID_INSERT_INTELLIGENT_GROUP ; \
-+ Text = "Intelligent Group..."; \
-+ };
-+
- #define MN_AUTOSPELL_CHECK \
- MenuItem\
- {\
-diff --git sd/source/ui/app/menuids_tmpl.src sd/source/ui/app/menuids_tmpl.src
-index 6221028..1f30867 100644
---- sd/source/ui/app/menuids_tmpl.src
-+++ sd/source/ui/app/menuids_tmpl.src
-@@ -1211,6 +1211,30 @@
- };\
- };
-
-+#define MN_ADD_SHAPE \
-+ MenuItem\
-+ {\
-+ Identifier = SID_ADD_SHAPE ; \
-+ HelpID = SID_ADD_SHAPE ; \
-+ Text [ en-US ] = "Add shape" ; \
-+ };
-+
-+#define MNSUB_INTELLIGENTGROUP \
-+ MenuItem\
-+ {\
-+ Identifier = SID_INTELLIGENT_GROUP ; \
-+ Command = ".uno:IntelligentGroupMenu" ; \
-+ HelpID = SID_INTELLIGENT_GROUP ; \
-+ Text [ en-US ] = "Intelligent Group" ;\
-+ SubMenu = Menu\
-+ {\
-+ ItemList = \
-+ {\
-+ MN_ADD_SHAPE\
-+ };\
-+ };\
-+ };
-+
- #define MNSUB_MIRROR \
- MenuItem\
- {\
-diff --git sd/source/ui/app/popup2_tmpl.src sd/source/ui/app/popup2_tmpl.src
-index 77e712b..15a9d56 100644
---- sd/source/ui/app/popup2_tmpl.src
-+++ sd/source/ui/app/popup2_tmpl.src
-@@ -64,6 +64,7 @@
- MN_OBJECT_ALIGN
- MN_DISTRIBUTE
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
-
- //-#i68101#----------------------
- SEPARATOR
-@@ -148,6 +149,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_DISMANTLE
-@@ -192,6 +194,7 @@
- MNSUB_MIRROR
- // #i37263#
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_DISMANTLE
-@@ -233,6 +236,7 @@
- MN_OBJECT_ALIGN
- MN_DISTRIBUTE
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_ENTER_GROUP
- MN_3D_WIN
-@@ -312,6 +316,7 @@
- MN_OBJECT_ALIGN
- MN_DISTRIBUTE
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_3D_WIN
-@@ -355,6 +360,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
-
- //-#i68101#----------------------
- SEPARATOR
-@@ -395,6 +401,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_DISMANTLE
-@@ -439,6 +446,7 @@
- MN_OBJECT_ALIGN
- MN_DISTRIBUTE
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_DISMANTLE
-@@ -483,6 +491,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_DISMANTLE
-@@ -527,6 +536,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_LEAVE_GROUP
- MN_DISMANTLE
-@@ -607,6 +617,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- SEPARATOR
- MN_GROUP
- MN_UNGROUP
-@@ -649,6 +660,7 @@
- MN_DISTRIBUTE
- MNSUB_MIRROR
- MNSUB_CONVERT
-+ MNSUB_INTELLIGENTGROUP
- MN_BREAK
-
- //-#i68101#----------------------
-diff --git sd/source/ui/app/res_bmp.src sd/source/ui/app/res_bmp.src
-index 639a1b9..20eabdd 100644
---- sd/source/ui/app/res_bmp.src
-+++ sd/source/ui/app/res_bmp.src
-@@ -297,6 +297,26 @@ Bitmap BMP_FOIL_NONE
- {
- File = "foilnone.bmp" ;
- };
-+Bitmap BMP_IGLAYOUTS_GROUPEDLIST
-+{
-+ File = "foiln01_h.bmp";
-+};
-+Bitmap BMP_IGLAYOUTS_PICTUREACCENTLIST
-+{
-+ File = "foiln01_h.bmp";
-+};
-+Bitmap BMP_IGLAYOUTS_TREE
-+{
-+ File = "foiln01_h.bmp";
-+};
-+Bitmap BMP_IGLAYOUTS_SIMPLEFIELD
-+{
-+ File = "foiln01_h.bmp";
-+};
-+Bitmap BMP_IGLAYOUTS_BASECIRCLE
-+{
-+ File = "foiln01_h.bmp";
-+};
- Bitmap BMP_PAGE
- {
- File = "page.bmp" ;
-diff --git sd/source/ui/app/strings.src sd/source/ui/app/strings.src
-index 6d82912..febd8c4 100644
---- sd/source/ui/app/strings.src
-+++ sd/source/ui/app/strings.src
-@@ -1241,6 +1241,10 @@ String DLG_TABLEDESIGNPANE
- {
- Text [ en-US ] = "Table Designs";
- };
-+String DLG_INTELLIGENTGROUPPANE
-+{
-+ Text [ en-US ] = "Intelligent Group";
-+};
- String STR_NAVIGATOR_SHOW_NAMED_SHAPES
- {
- Text [ en-US ] = "Named shapes";
-diff --git sd/source/ui/framework/tools/FrameworkHelper.cxx sd/source/ui/framework/tools/FrameworkHelper.cxx
-index 579bd13..f2f0c61 100644
---- sd/source/ui/framework/tools/FrameworkHelper.cxx
-+++ sd/source/ui/framework/tools/FrameworkHelper.cxx
-@@ -226,6 +226,8 @@ const ::rtl::OUString FrameworkHelper::msMasterPagesTaskPanelURL(
- msTaskPanelURLPrefix + OUString::createFromAscii("MasterPages"));
- const ::rtl::OUString FrameworkHelper::msLayoutTaskPanelURL(
- msTaskPanelURLPrefix + OUString::createFromAscii("Layouts"));
-+const ::rtl::OUString FrameworkHelper::msIntelligentGroupTaskPanelURL(
-+ msTaskPanelURLPrefix + OUString::createFromAscii("IntelligentGroup"));
- const ::rtl::OUString FrameworkHelper::msTableDesignPanelURL(
- msTaskPanelURLPrefix + OUString::createFromAscii("TableDesign"));
- const ::rtl::OUString FrameworkHelper::msCustomAnimationTaskPanelURL(
-diff --git sd/source/ui/ig/BulletTextIterator.cxx sd/source/ui/ig/BulletTextIterator.cxx
-new file mode 100644
-index 0000000..835b9d9
---- /dev/null
-+++ sd/source/ui/ig/BulletTextIterator.cxx
-@@ -0,0 +1,202 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: BulletTextIterator.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "BulletTextIterator.hxx"
-+
-+namespace sd{
-+
-+ BulletTextIterator::BulletTextIterator(IntelligentGroupTextAccess* pTextAccess)
-+ :mpTextAccess(pTextAccess)
-+ {
-+ Rewind();
-+ }
-+
-+
-+ BulletTextIterator::BulletTextIterator(BulletTextIterator* pIterator)
-+ : IntelligentGroupTextIterator(pIterator),
-+ mpTextAccess(pIterator->mpTextAccess)
-+ {
-+ }
-+
-+
-+ BulletTextIterator::~BulletTextIterator()
-+ {
-+
-+ }
-+
-+
-+ bool BulletTextIterator::Rewind()
-+ {
-+ if (mpTextAccess->GetItemCount() == 0)
-+ return false;
-+ else
-+ {
-+ IntelligentGroupTextIterator::Rewind();
-+ mnCurrentLevel = mpTextAccess->GetDepth(mnCurrentIndex);
-+ return true;
-+ }
-+ }
-+
-+
-+ sal_Int32 BulletTextIterator::GetChildCount()
-+ {
-+ /** Count entries for following the current one that
-+ * have one more * than the current one and until
-+ * there is one with the same or a smaller number.
-+ */
-+
-+ sal_Int32 nChildCount = 0;
-+ const sal_Int32 nCount = mpTextAccess->GetItemCount();
-+
-+ for (sal_Int32 nIndex = mnCurrentIndex+1; nIndex < nCount; ++nIndex)
-+ {
-+ const sal_Int32 nDepth = mpTextAccess->GetDepth(nIndex);
-+ if (nDepth <= mnCurrentLevel)
-+ break;
-+ else if (nDepth == mnCurrentLevel+1)
-+ ++nChildCount;
-+ }
-+ return nChildCount;
-+ }
-+
-+
-+ sal_Int32 BulletTextIterator::GetItemCount()
-+ {
-+ const sal_Int32 nSavedIndex = mnCurrentIndex;
-+ const sal_Int32 nSavedLevel = mnCurrentLevel;
-+ sal_Int32 nCount = 0;
-+
-+ if ( GotoParent() )
-+ {
-+ if ( GotoFirstChild() )
-+ {
-+ ++nCount;
-+ while ( GotoNext() )
-+ ++nCount;
-+ }
-+ }
-+ else
-+ {
-+ // Count elements on the top level;
-+ //ReWind();
-+ if ( Rewind() ) // jianli modify for delete all the shapes
-+ ++nCount;
-+ while ( GotoNext() )
-+ ++nCount;
-+ }
-+ mnCurrentIndex = nSavedIndex;
-+ mnCurrentLevel = nSavedLevel;
-+ return nCount;
-+ }
-+
-+ rtl::OUString BulletTextIterator::GetText()
-+ {
-+ const rtl::OUString sText (mpTextAccess->GetText(mnCurrentIndex, mnCurrentLevel));
-+
-+ if ( sText.endsWithAsciiL("\n", 1) )
-+ return sText.copy( 0, sText.getLength()-1 );
-+ else
-+ return sText;
-+ }
-+
-+
-+ bool BulletTextIterator::GotoFirstChild()
-+ {
-+ if ( HasChildren() )
-+ {
-+ ++mnCurrentIndex;
-+ Down();
-+ return true;
-+ }
-+ else
-+ return false;
-+ }
-+
-+
-+ bool BulletTextIterator::GotoNext()
-+ {
-+ sal_Int32 nIndex = mnCurrentIndex;
-+
-+ while ( ++nIndex < mpTextAccess->GetItemCount() )
-+ {
-+ const sal_Int32 nDepth = mpTextAccess->GetDepth(nIndex);
-+ if (nDepth < 0)
-+ return false;
-+ else if (nDepth == mnCurrentLevel)
-+ {
-+ mnCurrentIndex = nIndex;
-+ ++mnCurrentIndexOnLevel;
-+ return true;
-+ }
-+ else if (nDepth < mnCurrentLevel)
-+ break;
-+ }
-+ return false;
-+ }
-+
-+
-+ bool BulletTextIterator::GotoParent()
-+ {
-+ if (mnCurrentLevel == 0)
-+ return false;
-+
-+ const sal_Int32 nParentLevel = mnCurrentLevel - 1;
-+ for (sal_Int32 nIndex = mnCurrentIndex-1; nIndex >= 0; --nIndex)
-+ {
-+ if (mpTextAccess->GetDepth(nIndex) == nParentLevel)
-+ {
-+ mnCurrentIndex = nIndex;
-+ Up();
-+ return true;
-+ }
-+ }
-+ return false;
-+ }
-+
-+
-+ bool BulletTextIterator::HasChildren()
-+ {
-+ return mnCurrentIndex < mpTextAccess->GetItemCount() - 1
-+ && mpTextAccess->GetDepth(mnCurrentIndex+1) == mnCurrentLevel + 1;
-+ }
-+
-+
-+ boost::shared_ptr<IntelligentGroupTextIterator> BulletTextIterator::GetCopy()
-+ {
-+ return ::boost::shared_ptr<IntelligentGroupTextIterator> ( new BulletTextIterator(this) );
-+ }
-+
-+
-+}
-+
-+
-+
-diff --git sd/source/ui/ig/CircleLayoutAlgorithm.cxx sd/source/ui/ig/CircleLayoutAlgorithm.cxx
-new file mode 100644
-index 0000000..e2fae52
---- /dev/null
-+++ sd/source/ui/ig/CircleLayoutAlgorithm.cxx
-@@ -0,0 +1,87 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: CircleLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#include "CircleLayoutAlgorithm.hxx"
-+#include "IntelligentGroupLayoutBase.hxx"
-+#include <math.h>
-+
-+#define PI 3.14159265358979323846
-+
-+namespace sd {
-+
-+
-+CircleLayoutAlgorithm::CircleLayoutAlgorithm()
-+{
-+}
-+
-+
-+CircleLayoutAlgorithm::~CircleLayoutAlgorithm()
-+{
-+}
-+
-+
-+void CircleLayoutAlgorithm::PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor>>& aShapeDescriptors,
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ css::awt::Rectangle aGroupBoundingBox)
-+{
-+// sal_Int32 nShapeGroupCount = aShapeDescriptors.size();
-+ sal_Int32 nShapeGroupCount = pModel->GetShapeGroupCount();
-+ if (nShapeGroupCount == 0)
-+ return;
-+ sal_Int32 nTotalRadius = std::min(aGroupBoundingBox.Width/2, aGroupBoundingBox.Height/2);
-+ sal_Int32 nRadius = (sal_Int32)(sin(PI/nShapeGroupCount) * (nTotalRadius/2) * 0.8 + 0.5);
-+ sal_Int32 nCenterX = aGroupBoundingBox.X+aGroupBoundingBox.Width/2;
-+ sal_Int32 nCenterY = aGroupBoundingBox.Y+aGroupBoundingBox.Height/2;
-+ double nAngle = PI * 2 / nShapeGroupCount;
-+
-+ for (sal_Int32 nIndex=0; nIndex<nShapeGroupCount; ++nIndex)
-+ {
-+ css::awt::Rectangle aBoundingBox(
-+ (long)(nCenterX + cos(nIndex*nAngle) * (nTotalRadius-nRadius))-nRadius,
-+ (long)(nCenterY + sin(nIndex*nAngle) * (nTotalRadius-nRadius))-nRadius,
-+ 2*nRadius,
-+ 2*nRadius);
-+
-+ pLayout->PlaceShapes(
-+// aShapeDescriptors[nIndex],
-+ nIndex,
-+ aBoundingBox,
-+ aGroupBoundingBox,
-+ css::awt::Size(2*nRadius,2*nRadius),
-+ 1);
-+
-+ }
-+}
-+
-+
-+
-+}
-\ No newline at end of file
-diff --git sd/source/ui/ig/FieldLayoutAlgorithm.cxx sd/source/ui/ig/FieldLayoutAlgorithm.cxx
-new file mode 100644
-index 0000000..f5ae32b
---- /dev/null
-+++ sd/source/ui/ig/FieldLayoutAlgorithm.cxx
-@@ -0,0 +1,364 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: FieldLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#include "FieldLayoutAlgorithm.hxx"
-+#include "IntelligentGroupLayoutBase.hxx"
-+#include <math.h>
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd {
-+
-+
-+ class FieldLayoutAlgorithm::Line
-+ {
-+ public:
-+ Line ();
-+
-+ void Add ( const css::awt::Size aSize );
-+
-+ public:
-+ css::awt::Size maTotalSize;
-+ std::vector<css::awt::Size> maSizes;
-+ };
-+
-+ FieldLayoutAlgorithm::Line::Line()
-+ {
-+ maTotalSize =css::awt::Size(0,0);
-+ }
-+
-+ void FieldLayoutAlgorithm::Line::Add( const css::awt::Size aSize )
-+ {
-+ maSizes.push_back(aSize);
-+ maTotalSize.Width += aSize.Width;
-+ if (aSize.Height > maTotalSize.Height)
-+ maTotalSize.Height = aSize.Height;
-+ }
-+
-+
-+FieldLayoutAlgorithm::FieldLayoutAlgorithm(const ig::Orientation eOrientation)
-+{
-+ meOrientation = eOrientation;
-+}
-+
-+
-+FieldLayoutAlgorithm::~FieldLayoutAlgorithm()
-+{
-+}
-+
-+
-+void FieldLayoutAlgorithm::PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor>>& aShapeDescriptors,
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ css::awt::Rectangle aGroupBoundingBox)
-+{
-+ // There is one group of shapes for every top level text entry.
-+// sal_Int32 nCount = aShapeDescriptors.size();
-+ sal_Int32 nCount = pModel->GetShapeGroupCount();
-+ if (nCount == 0)
-+ {
-+ // There are no text entries => Nothing to do.
-+ return;
-+ }
-+
-+ sal_Int32 nGap = (sal_Int32)(pLayout->GetGap(aGroupBoundingBox) + 0.5);
-+
-+ // Default aspect ratio of shapes is 5:3.
-+ double nDefaultAspectRatio = 5.0 / 3.0;
-+ css::awt::Size aDefaultSize(300, (long)(300/nDefaultAspectRatio));
-+
-+ // Setup an array of the sizes of the individual shape groups.
-+ std::vector<css::awt::Size> aSizes;
-+ sal_Int32 nIndex = 0;
-+ for (; nIndex<nCount; ++nIndex)
-+ {
-+ aSizes.push_back(
-+ pLayout->GetBoundingSize(
-+ nIndex,
-+ aDefaultSize,
-+// aShapeDescriptors[nIndex]));
-+ pModel->GetShapeDescriptorVector(nIndex)));
-+ }
-+
-+ // Start with one line that contains all shapes.
-+ std::vector<FieldLayoutAlgorithm::Line> aLines;
-+ FieldLayoutAlgorithm::Line aFirstLine;
-+ for (std::vector<css::awt::Size>::iterator aIter = aSizes.begin(); aIter != aSizes.end(); aIter++)
-+ aFirstLine.Add(*aIter);
-+ aLines.push_back(aFirstLine);
-+
-+ // Calculate aspect ratio of the intelligent group shape.
-+ double nBoundingBoxAspectRatio = aGroupBoundingBox.Width / (double)aGroupBoundingBox.Height;
-+
-+ // Now start an iterative process of shortening lines to optimize the
-+ // aspect ratio of the combined lines.
-+ while (true)
-+ {
-+ double nLinesAspectRatio = CalculateAspectRatio(aLines, nGap, aGroupBoundingBox);
-+
-+ // Reduce the width of the longest line and re-flow shapes so
-+ // that all lines obey the new width.
-+ double nNewWidth = CalculateNewWidth(aLines);
-+ std::vector<FieldLayoutAlgorithm::Line> aNewLines = ReflowLines(aLines, nNewWidth, nGap);
-+
-+ double nNewLinesAspectRatio = CalculateAspectRatio(aNewLines, nGap, aGroupBoundingBox);
-+
-+ if (abs(nBoundingBoxAspectRatio-nNewLinesAspectRatio) <= abs(nBoundingBoxAspectRatio-nLinesAspectRatio)
-+ && nNewLinesAspectRatio != nLinesAspectRatio)
-+ {
-+ aLines = aNewLines;
-+ }
-+ else
-+ break;
-+ }
-+
-+ // The line structure has been determined. First calculate the scale factor.
-+ css::awt::Size aTotalSize = CalculateTotalSize(aLines);
-+ double nScale = CalculateScale(aLines, nGap, aGroupBoundingBox);
-+
-+ // Now layout the individual shape groups.
-+ nIndex = 0;
-+ double nTotalHeight = aTotalSize.Height * nScale + CalculateTotalGapSize(aLines, nGap).Height;
-+ sal_Int32 nY = (sal_Int32)(aGroupBoundingBox.Y + (aGroupBoundingBox.Height - nTotalHeight) / 2);
-+ for (std::vector<FieldLayoutAlgorithm::Line>::iterator aIter=aLines.begin(); aIter!=aLines.end(); aIter++)
-+ {
-+ double nTotalLineWidth = (*aIter).maTotalSize.Width*nScale
-+ + (((*aIter).maSizes.size() > 1) ? ((*aIter).maSizes.size()-1)*nGap : 0);
-+ sal_Int32 nX = (sal_Int32)(aGroupBoundingBox.X + (aGroupBoundingBox.Width - nTotalLineWidth) / 2);
-+ for (std::vector<css::awt::Size>::iterator aInnerIter = (*aIter).maSizes.begin();
-+ aInnerIter!=(*aIter).maSizes.end();
-+ aInnerIter++)
-+ {
-+ sal_Int32 nWidth = (sal_Int32)((*aInnerIter).Width * nScale + 0.5);
-+ sal_Int32 nHeight = (sal_Int32)((*aInnerIter).Height * nScale + 0.5);
-+ sal_Int32 nTop = nY + (sal_Int32)(((*aIter).maTotalSize.Height*nScale - nHeight)/2);
-+ if(nIndex<nCount)
-+ pLayout->PlaceShapes(
-+// aShapeDescriptors[nIndex],
-+ nIndex,
-+ css::awt::Rectangle(
-+ nX,
-+ nTop,
-+ nWidth,
-+ nHeight),
-+ aGroupBoundingBox,
-+ aDefaultSize,
-+ nScale);
-+ nX += (sal_Int32)((*aInnerIter).Width * nScale + nGap);
-+ ++nIndex;
-+ }
-+ nY += (sal_Int32)((*aIter).maTotalSize.Height * nScale + nGap);
-+ }
-+}
-+
-+
-+std::vector<FieldLayoutAlgorithm::Line> FieldLayoutAlgorithm::ReflowLines(const std::vector<FieldLayoutAlgorithm::Line> aLines, double nMaximalWidth, sal_Int32 nGap)
-+{
-+ std::vector<FieldLayoutAlgorithm::Line> aNewLines;
-+ bool bIsReflowActive = false;
-+ boost::shared_ptr<Line> pReflowLine(new Line());
-+ for (std::vector<FieldLayoutAlgorithm::Line>::const_iterator aIter = aLines.begin(); aIter != aLines.end(); aIter++)
-+ {
-+ if ((*aIter).maTotalSize.Width > nMaximalWidth)
-+ {
-+ bIsReflowActive = true;
-+ }
-+ if (bIsReflowActive)
-+ {
-+ for (std::vector<css::awt::Size>::const_iterator aInnerIter = (*aIter).maSizes.begin();
-+ aInnerIter!=(*aIter).maSizes.end();
-+ aInnerIter++)
-+ {
-+ if (pReflowLine->maSizes.empty()
-+ || pReflowLine->maTotalSize.Width+(*aInnerIter).Width+nGap <= nMaximalWidth)
-+ {
-+ pReflowLine->Add(*aInnerIter);
-+ }
-+ else
-+ {
-+ aNewLines.push_back(*(pReflowLine.get()));
-+ pReflowLine.reset(new Line());
-+ pReflowLine->Add(*aInnerIter);
-+ }
-+ }
-+ }
-+ else
-+ aNewLines.push_back(*aIter);
-+ }
-+ if ( ! pReflowLine->maSizes.empty())
-+ aNewLines.push_back(*(pReflowLine.get()));
-+ return aNewLines;
-+}
-+
-+
-+double FieldLayoutAlgorithm::CalculateNewWidth (std::vector<FieldLayoutAlgorithm::Line> aLines)
-+{
-+ double nLargestWidth = 0;
-+ for (std::vector<FieldLayoutAlgorithm::Line>::iterator aIter = aLines.begin(); aIter != aLines.end(); aIter++)
-+ {
-+ if ((*aIter).maTotalSize.Width > nLargestWidth)
-+ {
-+ nLargestWidth = (*aIter).maTotalSize.Width;
-+ }
-+ }
-+ return nLargestWidth - 1;
-+}
-+
-+
-+double FieldLayoutAlgorithm::CalculateAspectRatio (
-+ const std::vector<FieldLayoutAlgorithm::Line> aLines,
-+ const sal_Int32 nGap,
-+ const css::awt::Rectangle aBoundingBox)
-+{
-+ css::awt::Size aTotalSize = CalculateTotalSize(aLines);
-+ css::awt::Size aTotalGapSize = CalculateTotalGapSize(aLines, nGap);
-+ css::awt::Size aAvailableSize (
-+ aBoundingBox.Width - aTotalGapSize.Width,
-+ aBoundingBox.Height - aTotalGapSize.Height);
-+ double nScale;
-+ if (aTotalSize.Width / (double)aTotalSize.Height
-+ > aAvailableSize.Width/(double)aAvailableSize.Height)
-+ {
-+ nScale = aAvailableSize.Width / (double)aTotalSize.Width;
-+ }
-+ else
-+ {
-+ nScale = aAvailableSize.Height/ (double)aTotalSize.Height;
-+ }
-+ const css::awt::Size aFinalTotalSize (
-+ (long)(aTotalSize.Width * nScale + aTotalGapSize.Width),
-+ (long)(aTotalSize.Height * nScale + aTotalGapSize.Height));
-+ return aFinalTotalSize.Width / (double)aFinalTotalSize.Height;
-+}
-+
-+
-+double FieldLayoutAlgorithm::CalculateScale (
-+ const std::vector<FieldLayoutAlgorithm::Line> aLines,
-+ const sal_Int32 nGap,
-+ const css::awt::Rectangle aBoundingBox)
-+{
-+ css::awt::Size aTotalSize = CalculateTotalSize(aLines);
-+ css::awt::Size aTotalGapSize = CalculateTotalGapSize(aLines, nGap);
-+ css::awt::Size aAvailableSize (
-+ aBoundingBox.Width - aTotalGapSize.Width,
-+ aBoundingBox.Height - aTotalGapSize.Height);
-+ double nScale;
-+ if (aTotalSize.Width / (double)aTotalSize.Height
-+ > aAvailableSize.Width/(double)aAvailableSize.Height)
-+ {
-+ nScale = aAvailableSize.Width / (double)aTotalSize.Width;
-+ }
-+ else
-+ {
-+ nScale = aAvailableSize.Height/ (double)aTotalSize.Height;
-+ }
-+ return nScale;
-+}
-+
-+
-+
-+css::awt::Size FieldLayoutAlgorithm::CalculateTotalSize (const std::vector<Line> aLines)
-+{
-+ css::awt::Size aTotalSize(0,0);
-+ for (std::vector<FieldLayoutAlgorithm::Line>::const_iterator aIter = aLines.begin(); aIter!=aLines.end(); aIter++)
-+ {
-+ if ((*aIter).maTotalSize.Width > aTotalSize.Width)
-+ aTotalSize.Width = (*aIter).maTotalSize.Width;
-+ aTotalSize.Height += (*aIter).maTotalSize.Height;
-+ }
-+ return aTotalSize;
-+}
-+
-+
-+css::awt::Size FieldLayoutAlgorithm::CalculateTotalGapSize (const std::vector<Line> aLines, const sal_Int32 nGap)
-+{
-+ sal_Int32 nMaxItemCount = 0;
-+ for (std::vector<FieldLayoutAlgorithm::Line>::const_iterator aIter=aLines.begin(); aIter!=aLines.end(); aIter++)
-+ if ((sal_Int32)(*aIter).maSizes.size() > nMaxItemCount)
-+ nMaxItemCount = (*aIter).maSizes.size();
-+
-+ return css::awt::Size(
-+ (aLines.size() > 1) ? (aLines.size()-1)*nGap : 0,
-+ (nMaxItemCount > 1) ? (nMaxItemCount-1)*nGap : 0);
-+}
-+
-+
-+
-+sal_Int32 FieldLayoutAlgorithm::Project(const sal_Int32 nFirst, const sal_Int32 nSecond, const bool bProjectToPrimaryAxis)
-+{
-+ switch( meOrientation)
-+ {
-+ case ig::Horizontal:
-+ if (bProjectToPrimaryAxis)
-+ return nFirst;
-+ else
-+ return nSecond;
-+ case ig::Vertical:
-+ if (bProjectToPrimaryAxis)
-+ return nSecond;
-+ else
-+ return nFirst;
-+ default:
-+ return 0; // It's better to throw a exception.
-+ }
-+}
-+
-+
-+css::awt::Size FieldLayoutAlgorithm::CreateSize(const sal_Int32 nSizeOnPrimaryAxis, const sal_Int32 nSizeOnSecondaryAxis)
-+{
-+ switch(meOrientation)
-+ {
-+ case ig::Horizontal:
-+ return css::awt::Size(nSizeOnPrimaryAxis, nSizeOnSecondaryAxis);
-+ case ig::Vertical:
-+ return css::awt::Size(nSizeOnSecondaryAxis, nSizeOnPrimaryAxis);
-+ default:
-+ return css::awt::Size(0 ,0); // It's better to throw a exception.
-+ }
-+}
-+
-+
-+css::awt::Point FieldLayoutAlgorithm::CreatePosition(const sal_Int32 nPositionOnPrimaryAxis, const sal_Int32 nPositionOnSecondaryAxis)
-+{
-+ switch(meOrientation)
-+ {
-+ case ig::Horizontal:
-+ return css::awt::Point(nPositionOnPrimaryAxis, nPositionOnSecondaryAxis);
-+ case ig::Vertical:
-+ return css::awt::Point(nPositionOnSecondaryAxis, nPositionOnPrimaryAxis);
-+ default:
-+ return css::awt::Point(0, 0); // It's better to throw a exception.
-+ }
-+}
-+
-+
-+}
-\ No newline at end of file
-diff --git sd/source/ui/ig/GroupedListLayout.cxx sd/source/ui/ig/GroupedListLayout.cxx
-new file mode 100644
-index 0000000..c1411b6
---- /dev/null
-+++ sd/source/ui/ig/GroupedListLayout.cxx
-@@ -0,0 +1,337 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: groupedlistlayout.cxx,v $
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "GroupedListLayout.hxx"
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/drawing/FillStyle.hpp>
-+#include <com/sun/star/drawing/LineStyle.hpp>
-+#include <com/sun/star/style/ParagraphAdjust.hpp>
-+#include <com/sun/star/drawing/ColorMode.hpp>
-+#include <com/sun/star/drawing/XDrawPage.hpp>
-+#include <com/sun/star/drawing/TextFitToSizeType.hpp>
-+#include <svtools/colorcfg.hxx>
-+
-+using namespace ::com::sun::star;
-+
-+namespace sd{
-+
-+GroupedListLayout::GroupedListLayout(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+ :IntelligentGroupLayoutBase(pModel,pDescriptor)
-+{
-+}
-+
-+double GroupedListLayout::GetGap( awt::Rectangle aGroupBoundingBox )
-+{
-+ return aGroupBoundingBox.Width / 50;
-+}
-+
-+awt::Size GroupedListLayout::GetBoundingSize (
-+ sal_Int32 /*nIndex*/,
-+ awt::Size aDefaultSize,
-+ std::vector<IntelligentGroupShapeDescriptor> aDescriptors)
-+{
-+
-+ if (aDescriptors.size() == 0)
-+ return aDefaultSize;
-+
-+ sal_Int32 nMaxWidth = 0;
-+ sal_Int32 nMaxHeight = 0;
-+ for (sal_uInt32 nChildIndex=0; nChildIndex<aDescriptors.size(); ++nChildIndex)
-+ {
-+ sal_Int32 nWidth = 0;
-+ sal_Int32 nHeight = 0;
-+ if (aDescriptors[nChildIndex].Exists)
-+ {
-+ nWidth = aDescriptors[nChildIndex].ShapeSize.Width;
-+ nHeight = aDescriptors[nChildIndex].ShapeSize.Height;
-+ }
-+ else
-+ {
-+ nWidth = aDefaultSize.Width;
-+ nHeight = aDefaultSize.Height;
-+ if (nChildIndex > 0)
-+ {
-+ nWidth *= 8 / 10;
-+ nHeight *= 6/10 / (aDescriptors.size()-1);
-+ }
-+ }
-+ if (nWidth > nMaxWidth)
-+ nMaxWidth = nWidth;
-+ if (nHeight > nMaxHeight)
-+ nMaxHeight = nHeight;
-+ }
-+ awt::Size aSize(nMaxWidth, nMaxHeight);
-+ return aSize;
-+}
-+
-+std::vector<IntelligentGroupShapeDescriptor> GroupedListLayout::PrepareShapes (boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator, sal_Int32 nIndex, bool bCreatedByUser)
-+{
-+ std::vector<IntelligentGroupShapeDescriptor> aDescriptors;
-+ IntelligentGroupStyle aStyle;
-+
-+ if(!bCreatedByUser)
-+ {
-+ sal_Int32 nChildCount = pTextIterator->GetChildCount();
-+
-+ aStyle.aBackground = IntelligentGroupStyle::Background;
-+ aStyle.aBorder = IntelligentGroupStyle::None_Border;
-+ aStyle.aText = IntelligentGroupStyle::Primary;
-+
-+ //aDescriptors[0] = GetShapeDescriptor(
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ GetShapeName(ig::TopLevelText, nIndex),
-+ ig::Primary,
-+ aStyle));
-+
-+ sal_Int32 nChildIndex = 0;
-+ if (pTextIterator->GotoFirstChild())
-+ {
-+ do
-+ {
-+ aStyle.aBackground = IntelligentGroupStyle::Foreground;
-+ aStyle.aBorder = IntelligentGroupStyle::Regular;
-+ aStyle.aText = IntelligentGroupStyle::Secondary;
-+ //aDescriptors[nChildIndex+1] = GetShapeDescriptor(
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ GetShapeName(ig::SecondLevelText, nIndex, nChildIndex),
-+ ig::Accent,
-+ aStyle));
-+ ++nChildIndex;
-+ }
-+ while (pTextIterator->GotoNext());
-+
-+ pTextIterator->GotoParent();
-+ }
-+
-+ mpModel->AddShapeGroup(aDescriptors, mpModel->GetShapeGroupCount());
-+ }
-+ else
-+ {
-+ aStyle.aBackground = IntelligentGroupStyle::Background;
-+ aStyle.aBorder = IntelligentGroupStyle::None_Border;
-+ aStyle.aText = IntelligentGroupStyle::Primary;
-+
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ rtl::OUString::createFromAscii("Primary"),
-+ ig::Primary,
-+ aStyle));
-+
-+ aStyle.aBackground = IntelligentGroupStyle::Foreground;
-+ aStyle.aBorder = IntelligentGroupStyle::Regular;
-+ aStyle.aText = IntelligentGroupStyle::Secondary;
-+
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ rtl::OUString::createFromAscii("Secondary"),
-+ ig::Accent,
-+ aStyle));
-+
-+ }
-+
-+ return aDescriptors;
-+}
-+
-+//void GroupedListLayout::PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aShapeDescriptors,
-+void GroupedListLayout::PlaceShapes(sal_Int32 nShapeGroupIndex,
-+ awt::Rectangle aBoundingBox,
-+ awt::Rectangle aGroupBoundingBox,
-+ awt::Size /*aDefaultSize*/,
-+ double nScale)
-+{ // Provide default sizes and locations.
-+ // IntelligentGroupShapeDescriptor& aTopLevelTextDescriptor = aShapeDescriptors[0];
-+ IntelligentGroupShapeDescriptor aTopLevelTextDescriptor;
-+ aTopLevelTextDescriptor.DefaultLocation = awt::Point( aBoundingBox.X, aBoundingBox.Y );
-+ aTopLevelTextDescriptor.DefaultSize = awt::Size(aBoundingBox.Width, aBoundingBox.Height);
-+ if (aTopLevelTextDescriptor.SizeTransformation.Width != 0 && aTopLevelTextDescriptor.SizeTransformation.Height != 0)
-+ if (aTopLevelTextDescriptor.ShapeSize.Height < aGroupBoundingBox.Height)
-+ aTopLevelTextDescriptor.DefaultSize.Height = (long)(aTopLevelTextDescriptor.ShapeSize.Height * nScale);
-+
-+ // sal_Int32 nChildCount = aShapeDescriptors.size() - 1;
-+
-+ sal_Int32 nShapeDescriptorIndex = mpModel->GetShapeDescriptorIndex(nShapeGroupIndex,0);
-+ mpModel->SetSizeLocation(nShapeDescriptorIndex,aTopLevelTextDescriptor);
-+
-+ sal_Int32 nChildCount = mpModel->GetGroupShapeCount(nShapeGroupIndex)-1;
-+ if (nChildCount > 0)
-+ {
-+ sal_Int32 nGap = aBoundingBox.Height / 30;
-+ sal_Int32 nChildAreaHeight = (sal_Int32)(0.6 * aBoundingBox.Height);
-+ sal_Int32 nChildHeight = (nChildAreaHeight+nGap) / nChildCount - nGap;
-+ sal_Int32 nY = (sal_Int32)(0.3 * aBoundingBox.Height);
-+ for (sal_Int32 nChildIndex=1; nChildIndex<=nChildCount; ++nChildIndex)
-+ {
-+ // IntelligentGroupShapeDescriptor& aSecondLevelTextDescriptor = aShapeDescriptors[nChildIndex];
-+ IntelligentGroupShapeDescriptor aSecondLevelTextDescriptor;
-+ aSecondLevelTextDescriptor.DefaultLocation = awt::Point(
-+ aBoundingBox.X + (sal_Int32)(0.1*aBoundingBox.Width),
-+ aBoundingBox.Y + nY);
-+ aSecondLevelTextDescriptor.DefaultSize = awt::Size(
-+ (sal_Int32)(0.8 * aBoundingBox.Width),
-+ nChildHeight);
-+ nY += nChildHeight + nGap;
-+ mpModel->SetSizeLocation(nShapeDescriptorIndex+nChildIndex,aSecondLevelTextDescriptor);
-+ }
-+ }
-+
-+ // SetSizeLocation(aTopLevelTextDescriptor);
-+
-+
-+
-+ // for (sal_Int32 nChildIndex=1; nChildIndex<=nChildCount; ++nChildIndex)
-+ // SetSizeLocation(aShapeDescriptors[nChildIndex]);
-+
-+
-+ // Move shapes into the bounding box of the enclosing group.
-+ // MoveShapeIntoGroupBoundingBox(aTopLevelTextDescriptor, aGroupBoundingBox);
-+ for (sal_Int32 nChildIndex=0; nChildIndex<=nChildCount; ++nChildIndex)
-+ // MoveShapeIntoGroupBoundingBox(aShapeDescriptors[nChildIndex],aGroupBoundingBox);
-+ mpModel->MoveShapeIntoGroupBoundingBox(nShapeDescriptorIndex+nChildIndex,aGroupBoundingBox);
-+}
-+
-+uno::Reference<drawing::XShape> GroupedListLayout::CreateShape(rtl::OUString aIdentifier)
-+{
-+ uno::Reference<drawing::XShape> xShape = NULL;
-+
-+ ig::ShapeClass eClass = GetClassForName(aIdentifier);
-+
-+ switch (eClass)
-+ {
-+ case ig::TopLevelText:
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.TextShape"))),
-+ uno::UNO_QUERY);
-+ uno::Reference<beans::XPropertySet> xProperties(xShape, uno::UNO_QUERY);
-+ if (xProperties.is())
-+ {
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("CornerRadius"), uno::makeAny(sal_Int32(500)));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillStyle"), uno::makeAny(drawing::FillStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("LineStyle"), uno::makeAny(drawing::LineStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillColor"), uno::makeAny(sal_Int32(0xFFFF00)));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("ParaAdjust"), uno::makeAny(style::ParagraphAdjust_CENTER));
-+ }
-+ }
-+ break;
-+
-+ case ig::SecondLevelText:
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ // OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.OutlinerShape"))),
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.TextShape"))),
-+ uno::UNO_QUERY);
-+ uno::Reference<beans::XPropertySet> xProperties(xShape, uno::UNO_QUERY);
-+ if (xProperties.is())
-+ {
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("CornerRadius"), uno::makeAny(sal_Int32(400)));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillStyle"), uno::makeAny(drawing::FillStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("LineStyle"), uno::makeAny(drawing::LineStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("ParaAdjust"), uno::makeAny(style::ParagraphAdjust_CENTER));
-+ // xProperties->setPropertyValue(rtl::OUString::createFromAscii("TextFitToSize"), uno::makeAny(drawing::TextFitToSizeType_PROPORTIONAL));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillColor"), uno::makeAny(sal_Int32(0x0099ccff)));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("TextAutoGrowHeight"), uno::makeAny(sal_Bool(sal_True)));
-+ }
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ if (xShape.is())
-+ {
-+ xShape->setSize(awt::Size(0,0));
-+ }
-+
-+ return xShape;
-+}
-+
-+
-+
-+rtl::OUString GroupedListLayout::GetShapePrefix(ig::ShapeClass eClass)
-+{
-+ switch (eClass)
-+ {
-+ case ig::TopLevelText : return rtl::OUString::createFromAscii("Primary");
-+ case ig::SecondLevelText : return rtl::OUString::createFromAscii("Secondary");
-+ default:
-+ return rtl::OUString();
-+ }
-+}
-+
-+rtl::OUString GroupedListLayout::GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex)
-+{
-+ return GetShapePrefix(eClass) + rtl::OUString::valueOf(nIndex);
-+}
-+
-+
-+rtl::OUString GroupedListLayout::GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex, sal_Int32 nChildIndex)
-+{
-+ return GetShapePrefix(eClass) + rtl::OUString::valueOf(nIndex)+rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("."))+rtl::OUString::valueOf(nChildIndex);
-+}
-+
-+ig::ShapeClass GroupedListLayout::GetClassForName(rtl::OUString sIdentifier)
-+{
-+
-+ ig::ShapeClass eClass;
-+ sal_Int32 aLength;
-+
-+ eClass = ig::TopLevelText;
-+ aLength = GetShapePrefix(eClass).getLength();
-+ if(sIdentifier.copy(0, aLength) == GetShapePrefix(eClass))
-+ return eClass;
-+ else
-+ return ig::SecondLevelText;
-+
-+}
-+
-+
-+
-+void GroupedListLayout::AddShape(css::uno::Reference<css::drawing::XShape> rxSelectedShape)
-+{
-+ IntelligentGroupStyle aStyle;
-+ aStyle.aBackground = IntelligentGroupStyle::Foreground;
-+ aStyle.aBorder = IntelligentGroupStyle::Regular;
-+ aStyle.aText = IntelligentGroupStyle::Secondary;
-+
-+ sal_Int32 nIndex = mpModel->GetShapeIndex(rxSelectedShape);
-+
-+ mpModel->AddShapeDescriptor(nIndex+1,
-+ GetShapeDescriptor(rtl::OUString::createFromAscii("Secondary"),
-+ ig::Accent,
-+ aStyle));
-+}
-+
-+
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/HorizontalListLayoutAlgorithm.cxx sd/source/ui/ig/HorizontalListLayoutAlgorithm.cxx
-new file mode 100644
-index 0000000..7e410bf
---- /dev/null
-+++ sd/source/ui/ig/HorizontalListLayoutAlgorithm.cxx
-@@ -0,0 +1,51 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: HorizontalListLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+
-+#include "HorizontalListLayoutAlgorithm.hxx"
-+
-+
-+namespace sd {
-+
-+
-+
-+HorizontalListLayoutAlgorithm::HorizontalListLayoutAlgorithm()
-+:ListLayoutAlgorithm( ig::Horizontal )
-+{
-+}
-+
-+
-+HorizontalListLayoutAlgorithm::~HorizontalListLayoutAlgorithm()
-+{
-+}
-+
-+
-+} // end of namespace ::sd::intelligentgroup
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroup.cxx sd/source/ui/ig/IntelligentGroup.cxx
-new file mode 100644
-index 0000000..8e3d708
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroup.cxx
-@@ -0,0 +1,171 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgroup.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroup.hxx"
-+#include "IntelligentGroupLayoutManager.hxx"
-+#include <com/sun/star/drawing/XShapeGroup.hpp>
-+
-+using namespace ::com::sun::star;
-+
-+
-+
-+namespace sd{
-+
-+IntelligentGroup::IntelligentGroupVector IntelligentGroup::maActiveGroup;
-+
-+IntelligentGroup::IntelligentGroup(
-+ uno::Reference<frame::XModel> rxModel,
-+ uno::Reference<drawing::XShape> rxShape)
-+{
-+ awt::Point aPoint = rxShape->getPosition();
-+ awt::Size aSize = rxShape->getSize();
-+ mpModel.reset(new IntelligentGroupModel(rxModel,awt::Rectangle(aPoint.X, aPoint.Y, aSize.Width, aSize.Height)));
-+// msLayoutName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("NULL"));
-+}
-+
-+bool IntelligentGroup::IsIntelligentGroup(uno::Reference<drawing::XShape> xShape)
-+{
-+ std::vector<boost::shared_ptr<IntelligentGroup> >::iterator aIter = maActiveGroup.begin();
-+ for( ; aIter != maActiveGroup.end(); aIter++ )
-+ {
-+ boost::shared_ptr<IntelligentGroupModel> pModel = (*aIter)->GetModel();
-+ if( pModel->IsInModel( xShape ) )
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+
-+boost::shared_ptr<IntelligentGroup> IntelligentGroup::Instance(
-+ uno::Reference< frame::XModel > rxModel,
-+ uno::Reference< drawing::XShape > rxShape)
-+{
-+ if( !rxModel.is() )
-+ return boost::shared_ptr<IntelligentGroup>();
-+
-+ std::vector<boost::shared_ptr<IntelligentGroup> >::iterator aIter = maActiveGroup.begin();
-+ for ( ; aIter != maActiveGroup.end(); aIter++ )
-+ {
-+ if( (*aIter)->GetModel()->IsInModel( rxShape ))
-+ return (*aIter);
-+ }
-+ boost::shared_ptr<IntelligentGroup> pGroup( new IntelligentGroup(rxModel,rxShape) );
-+ maActiveGroup.push_back(pGroup);
-+ return pGroup;
-+}
-+
-+void IntelligentGroup::Dispose()
-+{
-+ maActiveGroup.clear();
-+}
-+
-+boost::shared_ptr<IntelligentGroupModel> IntelligentGroup::GetModel()
-+{
-+ return mpModel;
-+}
-+
-+void IntelligentGroup::SetLayout(rtl::OUString sLayoutName)
-+{
-+ if(!sLayoutName.equals(msLayoutName))
-+ {
-+ msLayoutName = sLayoutName;
-+ GetLayouter();
-+ UpdateLayout();
-+ }
-+}
-+
-+void IntelligentGroup::SetText(boost::shared_ptr<IntelligentGroupText> pText)
-+{
-+ mpText = pText;
-+ UpdateLayout();
-+}
-+
-+void IntelligentGroup::UpdateLayout()
-+{
-+ mpText.reset(new IntelligentGroupText(true));
-+ if(mpText!=NULL)
-+ {
-+ GetLayouter();
-+
-+ if(mpLayouter.get()!=NULL)
-+ {
-+ mpLayouter->DoLayout(mpText);
-+ }
-+ }
-+
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayouter> IntelligentGroup::GetLayouter()
-+{
-+ if (mpLayouter.get() == NULL)
-+ {
-+ if (msLayoutName != NULL)
-+ {
-+ mpLayout = IntelligentGroupLayoutManager::Instance()->GetLayout(msLayoutName, mpModel);
-+ mpLayouter = IntelligentGroupLayoutManager::Instance()->GetLayouter(mpModel, mpLayout);
-+ }
-+ }
-+ return mpLayouter;
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayoutBase> IntelligentGroup::GetLayout()
-+{
-+ if(mpLayout.get() != NULL)
-+ return mpLayout;
-+ else
-+ return boost::shared_ptr<IntelligentGroupLayoutBase>();
-+}
-+
-+
-+
-+void IntelligentGroup::AddShape(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxSelectedShape)
-+{
-+ if(mpLayouter.get() != NULL)
-+ {
-+ if(mpModel.get() != NULL)
-+ {
-+ sal_Int32 nCount = mpModel->GetShapeCount();
-+ for(sal_Int32 nIndex = 0; nIndex<nCount; nIndex++)
-+ {
-+ if(rxSelectedShape == mpModel->GetShape(nIndex))
-+ {
-+ mpLayouter->AddShape(mpModel->GetShapeDescriptor(nIndex));
-+ UpdateLayout();
-+ break;
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+}// end of namespace sd
-diff --git sd/source/ui/ig/IntelligentGroupBulletList.cxx sd/source/ui/ig/IntelligentGroupBulletList.cxx
-new file mode 100644
-index 0000000..f727697
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupBulletList.cxx
-@@ -0,0 +1,135 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupBulletList.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupBulletList.hxx"
-+#include "BulletTextIterator.hxx"
-+
-+namespace sd{
-+
-+ IntelligentGroupBulletList::IntelligentGroupBulletList()
-+ :msIndentationString (::rtl::OUString::createFromAscii("* "))
-+ {
-+ }
-+
-+
-+ IntelligentGroupBulletList::~IntelligentGroupBulletList()
-+ {
-+ }
-+
-+
-+ void IntelligentGroupBulletList::SetText(const std::vector< ::rtl::OUString >& rTextVector)
-+ {
-+ maTextVector.clear();
-+
-+ std::vector<rtl::OUString>::const_iterator aIter(rTextVector.begin());
-+ for (; aIter != rTextVector.end(); aIter++)
-+ {
-+ sal_uInt32 nLength = 0;
-+ const sal_Int32 nDepth = aIter->lastIndexOf('*') + 1;
-+
-+ if (nDepth)
-+ nLength = aIter->getLength() - 1;
-+ else
-+ nLength = aIter->getLength();
-+
-+ rtl::OUString aSubString (aIter->copy( nDepth, nLength ));
-+ AddText(nDepth, aSubString);
-+ }
-+ }
-+
-+
-+ boost::shared_ptr<IntelligentGroupTextIterator> IntelligentGroupBulletList::CreateIterator()
-+ {
-+ return boost::shared_ptr<IntelligentGroupTextIterator> (new BulletTextIterator(this));
-+ }
-+
-+
-+
-+ void IntelligentGroupBulletList::AddText(const sal_Int32 nDepth, const ::rtl::OUString& rShapeText)
-+ {
-+ ::rtl::OUString sText(::rtl::OUString::createFromAscii(""));
-+ for (sal_Int32 i = 0; i < nDepth; i++)
-+ sText += msIndentationString;
-+ sText += rShapeText;
-+ maTextVector.push_back(sText);
-+ }
-+
-+
-+ sal_Int32 IntelligentGroupBulletList::GetIndentation(const ::rtl::OUString& rText)
-+ {
-+ sal_Int32 nDepth = 0;
-+ const sal_Int32 nLength = msIndentationString.getLength();
-+
-+ const ::rtl::OUString sCandidate (rText.copy(0, nLength));
-+ if ( sCandidate.equals(msIndentationString) )
-+ ++nDepth;
-+
-+ return nDepth;
-+ }
-+
-+
-+ sal_Int32 IntelligentGroupBulletList::GetDepth(sal_Int32 nIndex)
-+ {
-+ return GetIndentation( maTextVector.at(nIndex) );
-+ }
-+
-+
-+ sal_Int32 IntelligentGroupBulletList::GetItemCount()
-+ {
-+ return maTextVector.size();
-+ }
-+
-+
-+ ::rtl::OUString IntelligentGroupBulletList::GetText(sal_Int32 nItemIndex, sal_Int32 nDepth)
-+ {
-+ const sal_Int32 nLength = msIndentationString.getLength()
-+ ;
-+ const ::rtl::OUString sText (maTextVector.at(nItemIndex));
-+ const ::rtl::OUString sCandidate (sText.copy(0, nLength));
-+
-+ if ( sCandidate.equals(msIndentationString) )
-+ return sText.copy( nLength, sText.getLength()-nLength );
-+ else
-+ return sText;
-+ }
-+
-+
-+ void IntelligentGroupBulletList::Clear()
-+ {
-+ maTextVector.clear();
-+ }
-+
-+
-+} //end of namespace sd
-+
-+
-+
-diff --git sd/source/ui/ig/IntelligentGroupController.cxx sd/source/ui/ig/IntelligentGroupController.cxx
-new file mode 100644
-index 0000000..24c2bab
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupController.cxx
-@@ -0,0 +1,149 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgroupcontroller.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupController.hxx"
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/drawing/XDrawPage.hpp>
-+using namespace ::com::sun::star;
-+
-+
-+
-+namespace sd{
-+
-+IntelligentGroupController::IntelligentGroupController(
-+ uno::Reference<frame::XModel> rxModel,
-+ uno::Reference<frame::XController> rxController,
-+ ViewShellBase& rBase)
-+ :mxModel(rxModel)
-+ ,mxController(rxController)
-+{
-+ if(rBase.GetIGSelectionManager().get() != NULL)
-+ {
-+ mpSelectionManager = rBase.GetIGSelectionManager();
-+ }
-+ else
-+ {
-+ mpSelectionManager.reset(new SelectionManager(rxController, rxModel));
-+ rBase.SetIGSelectionManager(mpSelectionManager);
-+ }
-+}
-+
-+IntelligentGroupController::~IntelligentGroupController()
-+{
-+
-+}
-+
-+
-+void IntelligentGroupController::SetLayout(rtl::OUString sLayoutName, bool /*bCreate*/)
-+{
-+ // When there is no selected intelligent group then create one and select it.
-+ if (mpSelectionManager->GetSelectedIntelligentGroup().get() == NULL)
-+ {
-+ boost::shared_ptr<IntelligentGroup> pIntelligentGroup = CreateIntelligentGroup();
-+ pIntelligentGroup->SetLayout(sLayoutName);
-+ mpSelectionManager->Select(pIntelligentGroup);
-+ }
-+ else
-+ {
-+ boost::shared_ptr<IntelligentGroup> pIntelligentGroup = mpSelectionManager->GetSelectedIntelligentGroup();
-+ if (pIntelligentGroup->GetLayout().get() != NULL)
-+ {
-+ if(!pIntelligentGroup->GetLayout()->GetLayoutDescriptor()->Name.equals(sLayoutName))
-+ {
-+ boost::shared_ptr<IntelligentGroup> pIntelligentGroup = CreateIntelligentGroup();
-+ pIntelligentGroup->SetLayout(sLayoutName);
-+ mpSelectionManager->Select(pIntelligentGroup);
-+ }
-+ }
-+ }
-+}
-+
-+void IntelligentGroupController::DoLayout()
-+{
-+ boost::shared_ptr<IntelligentGroup> pGroup = mpSelectionManager->GetSelectedIntelligentGroup();
-+ if(pGroup.get()!=NULL)
-+ {
-+ pGroup->UpdateLayout();
-+ }
-+}
-+
-+boost::shared_ptr<IntelligentGroup> IntelligentGroupController::GetSelectedIntelligentGroup()
-+{
-+ return mpSelectionManager->GetSelectedIntelligentGroup();
-+}
-+
-+/*
-+boost::shared_ptr<SelectionManager> IntelligentGroupController::GetSelectionManager()
-+{
-+ return mpSelectionManager;
-+}
-+*/
-+
-+boost::shared_ptr<IntelligentGroup> IntelligentGroupController::CreateIntelligentGroup()
-+{
-+ // Create a new shape group. Everything else is done by the
-+ // IG model and layout assignment.
-+ uno::Reference<lang::XMultiServiceFactory> xFactory(mxModel,uno::UNO_QUERY);
-+ if (!xFactory.is())
-+ {
-+ return boost::shared_ptr<IntelligentGroup>();
-+ }
-+
-+ uno::Reference<beans::XPropertySet> xProperties(mxController,uno::UNO_QUERY);
-+ uno::Reference<drawing::XDrawPage> xPage(xProperties->getPropertyValue(
-+ rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage"))),
-+ uno::UNO_QUERY);
-+
-+ uno::Reference< drawing::XShape > xShape (
-+ xFactory->createInstance(
-+ rtl::OUString::createFromAscii( "com.sun.star.drawing.RectangleShape" ) ),
-+ uno::UNO_QUERY );
-+
-+ // Set size and location of the new group.
-+ uno::Reference<beans::XPropertySet> xPageProperties(xPage,uno::UNO_QUERY);
-+ if (xPageProperties.is())
-+ {
-+ uno::Any aAny = xPageProperties->getPropertyValue(rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("Width")));
-+ sal_Int32 nPageWidth; aAny >>= nPageWidth;
-+ aAny = xPageProperties->getPropertyValue(rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("Height")));
-+ sal_Int32 nPageHeight; aAny >>= nPageHeight;
-+ awt::Point aPosition( (long)nPageWidth*1/6, (long)nPageHeight*1/6 );
-+ xShape->setPosition( aPosition );
-+ awt::Size aSize( (long)nPageWidth*2/3, (long)nPageHeight*2/3 );
-+ xShape->setSize( aSize );
-+ }
-+
-+ // Finally create and return the intelligent group wrapper.
-+ return IntelligentGroup::Instance(mxModel,xShape);
-+}
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupFrame.cxx sd/source/ui/ig/IntelligentGroupFrame.cxx
-new file mode 100644
-index 0000000..15d911e
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupFrame.cxx
-@@ -0,0 +1,1364 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgroupframe.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_sd.hxx"
-+
-+#include <com/sun/star/util/XChangesNotifier.hpp>
-+
-+#include <basegfx/matrix/b2dhommatrix.hxx>
-+#include <basegfx/polygon/b2dpolygontools.hxx>
-+
-+#include <sfx2/viewfrm.hxx>
-+#include <sfx2/dispatch.hxx>
-+
-+#include <svx/sdr/overlay/overlaymanager.hxx>
-+#include <svx/sdr/overlay/overlaysdrobject.hxx>
-+#include <svx/sdr/overlay/overlaypolypolygon.hxx>
-+#include <svx/svdpagv.hxx>
-+#include <svx/sdrpagewindow.hxx>
-+#include <svx/sdrpaintwindow.hxx>
-+#include <svx/svdopath.hxx>
-+#include <svx/xlndsit.hxx>
-+#include <svx/xlnclit.hxx>
-+#include <svx/xlnstit.hxx>
-+#include <svx/xlnedit.hxx>
-+#include <svx/xlnstwit.hxx>
-+#include <svx/xlnedwit.hxx>
-+#include <svx/xlnstcit.hxx>
-+#include <svx/xlnedcit.hxx>
-+#include <svx/xlntrit.hxx>
-+#include <svx/svxids.hrc>
-+#include <svx/polypolygoneditor.hxx>
-+#include <svx/svddrgmt.hxx>
-+#include <comphelper/processfactory.hxx>
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/animations/XAnimationNodeSupplier.hpp>
-+#include <svx/xlnwtit.hxx>
-+
-+
-+#include "IntelligentGroupFrame.hxx"
-+#include "View.hxx"
-+#include "sdpage.hxx"
-+#include "ViewShell.hxx"
-+#include "app.hrc"
-+#include "Window.hxx"
-+
-+using ::rtl::OUString;
-+using ::sdr::PolyPolygonEditor;
-+using namespace ::com::sun::star::uno;
-+using namespace ::com::sun::star::lang;
-+using namespace ::com::sun::star::util;
-+using namespace ::com::sun::star::drawing;
-+
-+
-+
-+
-+namespace sd{
-+
-+const sal_uInt32 SMART_TAG_HDL_NUM = SAL_MAX_UINT32;
-+static const int DRGPIX = 2;
-+
-+// --------------------------------------------------------------------
-+
-+class FrameDragMove : public SdrDragMove
-+{
-+private:
-+ basegfx::B2DPolyPolygon maPathPolyPolygon;
-+
-+protected:
-+ virtual void createSdrDragEntries();
-+
-+public:
-+ FrameDragMove(SdrDragView& rNewView,
-+ const rtl::Reference <IntelligentGroupFrame >& xFrame,
-+ const basegfx::B2DPolyPolygon& rPathPolyPolygon)
-+ : SdrDragMove(rNewView),
-+ maPathPolyPolygon(rPathPolyPolygon),
-+ mxFrame( xFrame )
-+ {}
-+
-+ FrameDragMove(SdrDragView& rNewView,
-+ const rtl::Reference <IntelligentGroupFrame >& xFrame)
-+ : SdrDragMove(rNewView),
-+ maPathPolyPolygon(),
-+ mxFrame( xFrame )
-+ {}
-+
-+ virtual bool BeginSdrDrag();
-+ virtual bool EndSdrDrag(bool bCopy);
-+
-+ rtl::Reference <IntelligentGroupFrame > mxFrame;
-+};
-+
-+void FrameDragMove::createSdrDragEntries()
-+{
-+ // call parent
-+ SdrDragMove::createSdrDragEntries();
-+
-+ if(maPathPolyPolygon.count())
-+ {
-+ addSdrDragEntry(new SdrDragEntryPolyPolygon(maPathPolyPolygon));
-+ }
-+}
-+
-+bool FrameDragMove::BeginSdrDrag()
-+{
-+ if( mxFrame.is() )
-+ {
-+ SdrPathObj* pPathObj = mxFrame->getPathObj();
-+ if( pPathObj )
-+ {
-+ DragStat().SetActionRect(pPathObj->GetCurrentBoundRect());
-+ }
-+ }
-+ Show();
-+ return TRUE;
-+}
-+
-+bool FrameDragMove::EndSdrDrag(bool /*bCopy*/)
-+{
-+ Hide();
-+ if( mxFrame.is() )
-+ mxFrame->MovePath( DragStat().GetDX(), DragStat().GetDY() );
-+ return TRUE;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+class FrameDragResize : public SdrDragResize
-+{
-+private:
-+ basegfx::B2DPolyPolygon maPathPolyPolygon;
-+
-+protected:
-+ virtual void createSdrDragEntries();
-+
-+public:
-+ FrameDragResize(SdrDragView& rNewView,
-+ const rtl::Reference <IntelligentGroupFrame >& xFrame,
-+ const basegfx::B2DPolyPolygon& rPathPolyPolygon)
-+ : SdrDragResize(rNewView),
-+ maPathPolyPolygon(rPathPolyPolygon),
-+ mxFrame( xFrame )
-+ {}
-+
-+ FrameDragResize(SdrDragView& rNewView,
-+ const rtl::Reference <IntelligentGroupFrame >& xFrame)
-+ : SdrDragResize(rNewView),
-+ maPathPolyPolygon(),
-+ mxFrame( xFrame )
-+ {}
-+
-+ virtual bool EndSdrDrag(bool bCopy);
-+ rtl::Reference <IntelligentGroupFrame > mxFrame;
-+};
-+
-+// --------------------------------------------------------------------
-+
-+void FrameDragResize::createSdrDragEntries()
-+{
-+ // call parent
-+ SdrDragResize::createSdrDragEntries();
-+
-+ if(maPathPolyPolygon.count())
-+ {
-+ addSdrDragEntry(new SdrDragEntryPolyPolygon(maPathPolyPolygon));
-+ }
-+}
-+
-+bool FrameDragResize::EndSdrDrag(bool /*bCopy*/)
-+{
-+ Hide();
-+ if( mxFrame.is() )
-+ {
-+ SdrPathObj* pPathObj = mxFrame->getPathObj();
-+ if( pPathObj )
-+ {
-+ basegfx::B2DHomMatrix aTrans;
-+ const Point aRef( DragStat().Ref1() );
-+ aTrans.translate(-aRef.X(), -aRef.Y());
-+ aTrans.scale(double(aXFact), double(aYFact));
-+ aTrans.translate(aRef.X(), aRef.Y());
-+ basegfx::B2DPolyPolygon aDragPoly(pPathObj->GetPathPoly());
-+ aDragPoly.transform(aTrans);
-+ pPathObj->SetPathPoly( aDragPoly );
-+ //IG
-+ basegfx::B2DRange aRange = aDragPoly.getB2DRange();
-+ mxFrame->GetModel()->SetLocation(
-+ ::com::sun::star::awt::Point(long(aRange.getMinX()+aRange.getWidth()/22),long(aRange.getMinY()+aRange.getHeight()/22)));
-+ mxFrame->GetModel()->SetSize(
-+ ::com::sun::star::awt::Size(long(aRange.getWidth()*11/12),long(aRange.getHeight()*11/12)));
-+ if(mxFrame->GetLayouter().get() != NULL)
-+ {
-+ mxFrame->GetLayouter()->GetLayoutAlgorithm()->PlaceShape(
-+ mxFrame->GetLayouter()->GetLayout(),
-+// mxFrame->GetLayouter()->GetShapeDescriptors(),
-+ mxFrame->GetModel(),
-+ ::com::sun::star::awt::Rectangle(mxFrame->GetModel()->GetLocation().X,
-+ mxFrame->GetModel()->GetLocation().Y,
-+ mxFrame->GetModel()->GetSize().Width,
-+ mxFrame->GetModel()->GetSize().Height));
-+ }
-+ }
-+ }
-+ return TRUE;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+class FrameDragObjOwn : public SdrDragObjOwn
-+{
-+private:
-+ basegfx::B2DPolyPolygon maPathPolyPolygon;
-+
-+protected:
-+ virtual void createSdrDragEntries();
-+
-+public:
-+ FrameDragObjOwn(SdrDragView& rNewView,
-+ const basegfx::B2DPolyPolygon& rPathPolyPolygon)
-+ : SdrDragObjOwn(rNewView),
-+ maPathPolyPolygon(rPathPolyPolygon)
-+ {}
-+
-+ FrameDragObjOwn(SdrDragView& rNewView)
-+ : SdrDragObjOwn(rNewView),
-+ maPathPolyPolygon()
-+ {}
-+
-+ virtual bool EndSdrDrag(bool bCopy);
-+};
-+
-+// --------------------------------------------------------------------
-+
-+void FrameDragObjOwn::createSdrDragEntries()
-+{
-+ // call parent
-+ SdrDragObjOwn::createSdrDragEntries();
-+
-+ if(maPathPolyPolygon.count())
-+ {
-+ addSdrDragEntry(new SdrDragEntryPolyPolygon(maPathPolyPolygon));
-+ }
-+}
-+
-+bool FrameDragObjOwn::EndSdrDrag(bool /*bCopy*/)
-+{
-+ Hide();
-+ SdrObject* pObj=GetDragObj();
-+ if (pObj!=NULL)
-+ return pObj->applySpecialDrag(DragStat());
-+ else
-+ return FALSE;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+class SdFrameHdl : public SmartHdl
-+{
-+public:
-+ SdFrameHdl( const SmartTagReference& xTag, SdrPathObj* mpPathObj );
-+ virtual ~SdFrameHdl();
-+ virtual void CreateB2dIAObject();
-+ virtual BOOL IsFocusHdl() const;
-+ virtual Pointer GetPointer() const;
-+ virtual bool isMarkable() const;
-+
-+private:
-+ SdrPathObj* mpPathObj;
-+ rtl::Reference< IntelligentGroupFrame > mxFrame;
-+ ::sdr::overlay::OverlayObject* pNewOverlayObject;
-+};
-+
-+// --------------------------------------------------------------------
-+
-+SdFrameHdl::SdFrameHdl( const SmartTagReference& xTag, SdrPathObj* pPathObj )
-+: SmartHdl( xTag, pPathObj->GetCurrentBoundRect().TopLeft() )
-+, mpPathObj( pPathObj )
-+, mxFrame( dynamic_cast< IntelligentGroupFrame* >( xTag.get() ) )
-+, pNewOverlayObject( NULL )
-+{
-+}
-+
-+// --------------------------------------------------------------------
-+
-+SdFrameHdl::~SdFrameHdl()
-+{
-+
-+}
-+
-+// --------------------------------------------------------------------
-+
-+void SdFrameHdl::CreateB2dIAObject()
-+{
-+ // first throw away old one
-+ GetRidOfIAObject();
-+
-+ if(pHdlList)
-+ {
-+ SdrMarkView* pView = pHdlList->GetView();
-+
-+ if(pView && !pView->areMarkHandlesHidden())
-+ {
-+ SdrPageView* pPageView = pView->GetSdrPageView();
-+
-+ if(pPageView)
-+ {
-+ for(sal_uInt32 b(0L); b < pPageView->PageWindowCount(); b++)
-+ {
-+ // const SdrPageViewWinRec& rPageViewWinRec = rPageViewWinList[b];
-+ const SdrPageWindow& rPageWindow = *pPageView->GetPageWindow(b);
-+
-+ if(rPageWindow.GetPaintWindow().OutputToWindow())
-+ {
-+ if(rPageWindow.GetOverlayManager())
-+ {
-+ const SdrPathObj& rPath = *mpPathObj;
-+
-+ ::sdr::overlay::OverlayObject* pNewOverlayObject = new
-+ ::sdr::overlay::OverlaySdrObject(basegfx::B2DPoint(), rPath);
-+ //::sdr::overlay::OverlayPolyPolygonStriped( maPolyPolygon );
-+ DBG_ASSERT(pNewOverlayObject, "Got NO new IAO!");
-+
-+ // OVERLAYMANAGER
-+ if(pNewOverlayObject)
-+ {
-+ rPageWindow.GetOverlayManager()->add(*pNewOverlayObject);
-+ maOverlayGroup.append(*pNewOverlayObject);
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+BOOL SdFrameHdl::IsFocusHdl() const
-+{
-+ return FALSE;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+bool SdFrameHdl::isMarkable() const
-+{
-+ return false;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+Pointer SdFrameHdl::GetPointer() const
-+{
-+ PointerStyle eStyle = POINTER_NOTALLOWED;
-+ if( mxFrame.is() )
-+ {
-+ if( mxFrame->isSelected() )
-+ {
-+ if( !mxFrame->getView().IsFrameDragSingles() && mxFrame->getView().IsInsObjPointMode() )
-+ eStyle = POINTER_CROSS;
-+ else
-+ eStyle = POINTER_MOVE;
-+ }
-+ else
-+ {
-+ eStyle = POINTER_ARROW;
-+
-+ }
-+ }
-+ return Pointer( eStyle );
-+}
-+
-+
-+// ====================================================================
-+
-+IntelligentGroupFrame::IntelligentGroupFrame( boost::shared_ptr<IntelligentGroupModel> pModel, ::sd::View& rView )
-+: SmartTag( rView )
-+, mpModel( pModel )
-+{
-+ mpPathObj = new SdrPathObj(OBJ_RECT);
-+
-+ ::com::sun::star::awt::Rectangle rBoundingBox(mpModel->GetLocation().X,mpModel->GetLocation().Y,mpModel->GetSize().Width,mpModel->GetSize().Height);
-+ basegfx::B2DPolygon aRectanglePolygon;
-+ aRectanglePolygon.append(::basegfx::B2DPoint( rBoundingBox.X-rBoundingBox.Width/20,rBoundingBox.Y-rBoundingBox.Height/20));
-+ aRectanglePolygon.append(::basegfx::B2DPoint( rBoundingBox.Width*21/20+rBoundingBox.X,rBoundingBox.Y-rBoundingBox.Height/20));
-+
-+ aRectanglePolygon.append(::basegfx::B2DPoint( rBoundingBox.Width*21/20+rBoundingBox.X,rBoundingBox.Height*21/20+rBoundingBox.Y));
-+ aRectanglePolygon.append(::basegfx::B2DPoint( rBoundingBox.X-rBoundingBox.Width/20,rBoundingBox.Height*21/20+rBoundingBox.Y));
-+
-+ basegfx::B2DPolyPolygon aGeometry(aRectanglePolygon);
-+ aGeometry.setClosed(true);
-+ mpPathObj->SetPathPoly(aGeometry);
-+ maOriginPos = ::com::sun::star::awt::Point(long(aGeometry.getB2DRange().getMinX()),long(aGeometry.getB2DRange().getMinY()));
-+
-+ SdrPage* pPage = mrView.GetSdrPageView()->GetPage();
-+ if( pPage )
-+ {
-+ mpPathObj->SetPage( pPage );
-+ mpPathObj->SetObjList( pPage );
-+ }
-+
-+ XDash aDash( XDASH_RECT, 1, 80, 1, 80, 80);
-+ String aEmpty( RTL_CONSTASCII_USTRINGPARAM("?") );
-+// mpPathObj->SetMergedItem( XLineDashItem( aEmpty, aDash ) );
-+ mpPathObj->SetMergedItem( XLineStyleItem( XLINE_DASH ) );
-+
-+ mpPathObj->SetMergedItem( XLineColorItem(aEmpty, ::Color(COL_GRAY)) );
-+ mpPathObj->SetMergedItem( XFillStyleItem( XFILL_SOLID ) );
-+ mpPathObj->SetMergedItem( XLineWidthItem(100));
-+
-+ //Do not need arrow here
-+/* ::basegfx::B2DPolygon aStartArrow;
-+ aStartArrow.append(::basegfx::B2DPoint(20.0, 0.0));
-+ aStartArrow.append(::basegfx::B2DPoint(0.0, 0.0));
-+ aStartArrow.append(::basegfx::B2DPoint(10.0, 30.0));
-+ aStartArrow.setClosed(true);
-+ mpPathObj->SetMergedItem(XLineStartItem(aEmpty,::basegfx::B2DPolyPolygon(aStartArrow)));
-+ mpPathObj->SetMergedItem(XLineStartWidthItem(400));
-+ mpPathObj->SetMergedItem(XLineStartCenterItem(TRUE));
-+*/
-+// updatePathAttributes();
-+
-+ mpPathObj->SetMergedItem(XLineTransparenceItem(50));
-+
-+ mpMark = new SdrMark( mpPathObj, mrView.GetSdrPageView() );
-+
-+ select();
-+
-+// mpPathObj->AddListener( *this );
-+
-+/* Reference< XChangesNotifier > xNotifier( mrModel.GetUnoModel(), UNO_QUERY);
-+ if( xNotifier.is() )
-+ {
-+ Reference< XChangesListener > xListener( this );
-+ xNotifier->addChangesListener( this );
-+ }
-+*/
-+}
-+
-+// --------------------------------------------------------------------
-+
-+IntelligentGroupFrame::~IntelligentGroupFrame()
-+{
-+ DBG_ASSERT( mpPathObj == 0, "sd::MotionPathTag::~MotionPathTag(), dispose me first!" );
-+ if( !isDisposed() )
-+ Dispose();
-+}
-+
-+// --------------------------------------------------------------------
-+
-+
-+void IntelligentGroupFrame::SetLayouter(boost::shared_ptr<IntelligentGroupLayouter> pLayouter)
-+{
-+ mpLayouter = pLayouter;
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayouter> IntelligentGroupFrame::GetLayouter()
-+{
-+ return mpLayouter;
-+}
-+
-+boost::shared_ptr<IntelligentGroupModel> IntelligentGroupFrame::GetModel()
-+{
-+ return mpModel;
-+}
-+
-+/*
-+void IntelligentGroupFrame::updatePathAttributes()
-+{
-+ String aEmpty( RTL_CONSTASCII_USTRINGPARAM("?") );
-+
-+ ::basegfx::B2DPolygon aCandidate;
-+ if( mxPolyPoly.count() )
-+ {
-+ aCandidate = mxPolyPoly.getB2DPolygon(0);
-+ ::basegfx::tools::checkClosed( aCandidate );
-+ }
-+
-+ if( !aCandidate.isClosed() )
-+ {
-+ //Do not need arrow here
-+ ::basegfx::B2DPolygon aEndArrow;
-+ aEndArrow.append(::basegfx::B2DPoint(10.0, 0.0));
-+ aEndArrow.append(::basegfx::B2DPoint(0.0, 30.0));
-+ aEndArrow.append(::basegfx::B2DPoint(20.0, 30.0));
-+ aEndArrow.setClosed(true);
-+ mpPathObj->SetMergedItem(XLineEndItem(aEmpty,::basegfx::B2DPolyPolygon(aEndArrow)));
-+ mpPathObj->SetMergedItem(XLineEndWidthItem(400));
-+ mpPathObj->SetMergedItem(XLineEndCenterItem(TRUE));
-+ }
-+ else
-+ {
-+ mpPathObj->SetMergedItem(XLineEndItem());
-+ }
-+}
-+*/
-+
-+
-+// --------------------------------------------------------------------
-+
-+void IntelligentGroupFrame::MovePath( int nDX, int nDY )
-+{
-+ if( mpPathObj )
-+ {
-+ mpPathObj->Move( Size( nDX, nDY ) );
-+ mpModel->SetLocation(::com::sun::star::awt::Point(mpModel->GetLocation().X+nDX,mpModel->GetLocation().Y+nDY));
-+ if(mpLayouter.get() != NULL)
-+ {
-+ mpLayouter->GetLayoutAlgorithm()->PlaceShape(
-+ mpLayouter->GetLayout(),
-+// mpLayouter->GetShapeDescriptors(),
-+ mpModel,
-+ ::com::sun::star::awt::Rectangle(mpModel->GetLocation().X,
-+ mpModel->GetLocation().Y,
-+ mpModel->GetSize().Width,
-+ mpModel->GetSize().Height));
-+ }
-+
-+ mrView.updateHandles();
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+/** returns true if the MotionPathTag handled the event. */
-+bool IntelligentGroupFrame::MouseButtonDown( const MouseEvent& rMEvt, SmartHdl& rHdl )
-+{
-+ if( !mpPathObj )
-+ return false;
-+
-+ if( !isSelected() )
-+ {
-+ SmartTagReference xTag( this );
-+ mrView.getSmartTags().select( xTag );
-+ return true;
-+ }
-+ else
-+ {
-+ if( rMEvt.IsLeft() && (rMEvt.GetClicks() == 2) )
-+ {
-+ mrView.GetViewShell()->GetViewFrame()->GetDispatcher()->Execute(SID_BEZIER_EDIT, SFX_CALLMODE_ASYNCHRON);
-+ return true;
-+ }
-+ else if( rMEvt.IsLeft() )
-+ {
-+ OutputDevice* pOut = mrView.GetViewShell()->GetActiveWindow();
-+ Point aMDPos( pOut->PixelToLogic( rMEvt.GetPosPixel() ) );
-+
-+ if( !mrView.IsFrameDragSingles() && mrView.IsInsObjPointMode() && (rHdl.GetObjHdlNum() == SMART_TAG_HDL_NUM) )
-+ {
-+ // insert a point in edit mode
-+ const bool bNewObj = rMEvt.IsMod1();
-+
-+ mrView.BrkAction();
-+
-+ Point aPt(aMDPos); // - pMarkedPV->GetOffset());
-+
-+ if(bNewObj)
-+ aPt = mrView.GetSnapPos(aPt,mrView.GetSdrPageView());
-+
-+ sal_Bool bClosed0(mpPathObj->IsClosedObj());
-+
-+ sal_uInt32 nInsPointNum = mpPathObj->NbcInsPointOld(aPt, bNewObj, sal_True);
-+
-+ if(bClosed0 != mpPathObj->IsClosedObj())
-+ {
-+ // Obj was closed implicit
-+ // object changed
-+ mpPathObj->SetChanged();
-+ mpPathObj->BroadcastObjectChange();
-+ }
-+
-+ if(0xffffffff != nInsPointNum)
-+ {
-+ mrView.UnmarkAllPoints();
-+ mrView.updateHandles();
-+
-+ bool bRet = mrView.BegDragObj(aMDPos, pOut, mrView.GetHdl(nInsPointNum+1), 0, new FrameDragObjOwn( mrView ) );
-+
-+ if (bRet)
-+ {
-+ const_cast< SdrDragStat* >( &mrView.GetDragStat() )->SetMinMoved();
-+ mrView.MovDragObj(aMDPos);
-+ }
-+ }
-+ return true;
-+ }
-+ else
-+ {
-+ SmartHdl* pHdl = &rHdl;
-+ if (!mrView.IsPointMarked(*pHdl) || rMEvt.IsShift())
-+ {
-+ if (!rMEvt.IsShift())
-+ {
-+ mrView.UnmarkAllPoints();
-+ pHdl = dynamic_cast< SmartHdl* >( mrView.PickHandle(aMDPos) );
-+ }
-+ else
-+ {
-+ if (mrView.IsPointMarked(*pHdl) )
-+ {
-+ mrView.UnmarkPoint(*pHdl);
-+ pHdl = NULL;
-+ }
-+ else
-+ {
-+ pHdl = dynamic_cast< SmartHdl* >( mrView.PickHandle(aMDPos) );
-+ }
-+ }
-+
-+ if (pHdl)
-+ mrView.MarkPoint(*pHdl);
-+ }
-+
-+
-+ if( pHdl && !rMEvt.IsRight() )
-+ {
-+ mrView.BrkAction();
-+ const USHORT nDrgLog = (USHORT)pOut->PixelToLogic(Size(DRGPIX,0)).Width();
-+
-+ rtl::Reference< IntelligentGroupFrame > xTag( this );
-+ SdrDragMethod* pDragMethod;
-+
-+ const basegfx::B2DPolyPolygon aDragPoly(mpPathObj->GetPathPoly());
-+
-+ if( (pHdl->GetKind() == HDL_MOVE) || (pHdl->GetKind() == HDL_SMARTTAG) )
-+ {
-+ pDragMethod = new FrameDragMove( mrView, xTag );
-+ pHdl->SetPos( aMDPos );
-+ }
-+ else if( pHdl->GetKind() == HDL_POLY )
-+ {
-+ pDragMethod = new FrameDragObjOwn( mrView );
-+ }
-+ else
-+ {
-+ pDragMethod = new FrameDragResize( mrView, xTag );
-+ }
-+
-+ mrView.BegDragObj(aMDPos, NULL, pHdl, nDrgLog, pDragMethod );
-+
-+/* basegfx::B2DPolyPolygon aDragPoly(mpPathObj->GetPathPoly());
-+ mrView.GetSdrPageView()->setDragPoly0(aDragPoly);
-+ mrView.GetSdrPageView()->setDragPoly(aDragPoly);
-+*/ }
-+ return true;
-+ }
-+ }
-+ }
-+
-+ return false;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+/** returns true if the SmartTag consumes this event. */
-+bool IntelligentGroupFrame::KeyInput( const KeyEvent& rKEvt )
-+{
-+ if( !mpPathObj )
-+ return false;
-+
-+ USHORT nCode = rKEvt.GetKeyCode().GetCode();
-+ switch( nCode )
-+ {
-+ case KEY_DELETE:
-+ return OnDelete();
-+
-+ case KEY_DOWN:
-+ case KEY_UP:
-+ case KEY_LEFT:
-+ case KEY_RIGHT:
-+ return OnMove( rKEvt );
-+
-+ case KEY_ESCAPE:
-+ {
-+ SmartTagReference xThis( this );
-+ mrView.getSmartTags().deselect();
-+ return true;
-+ }
-+
-+ case KEY_TAB:
-+ return OnTabHandles( rKEvt );
-+
-+ case KEY_SPACE:
-+ return OnMarkHandle( rKEvt );
-+
-+ default:
-+ break;
-+ }
-+ return false;
-+}
-+
-+bool IntelligentGroupFrame::OnDelete()
-+{
-+// mrPane.remove( mpEffect );
-+ return true;
-+}
-+
-+bool IntelligentGroupFrame::OnTabHandles( const KeyEvent& rKEvt )
-+{
-+ if(rKEvt.GetKeyCode().IsMod1() || rKEvt.GetKeyCode().IsMod2())
-+ {
-+ const SdrHdlList& rHdlList = mrView.GetHdlList();
-+ sal_Bool bForward(!rKEvt.GetKeyCode().IsShift());
-+
-+ ((SdrHdlList&)rHdlList).TravelFocusHdl(bForward);
-+
-+ // guarantee visibility of focused handle
-+ SdrHdl* pHdl = rHdlList.GetFocusHdl();
-+
-+ if(pHdl)
-+ {
-+ Window* pWindow = mrView.GetViewShell()->GetActiveWindow();
-+ if( pWindow )
-+ {
-+ Point aHdlPosition(pHdl->GetPos());
-+ Rectangle aVisRect(aHdlPosition - Point(100, 100), Size(200, 200));
-+ mrView.MakeVisible(aVisRect, *pWindow);
-+ }
-+ }
-+
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+bool IntelligentGroupFrame::OnMarkHandle( const KeyEvent& rKEvt )
-+{
-+ const SdrHdlList& rHdlList = mrView.GetHdlList();
-+ SdrHdl* pHdl = rHdlList.GetFocusHdl();
-+
-+ if(pHdl && pHdl->GetKind() == HDL_POLY )
-+ {
-+ // rescue ID of point with focus
-+ sal_uInt32 nPol(pHdl->GetPolyNum());
-+ sal_uInt32 nPnt(pHdl->GetPointNum());
-+
-+ if(mrView.IsPointMarked(*pHdl))
-+ {
-+ if(rKEvt.GetKeyCode().IsShift())
-+ {
-+ mrView.UnmarkPoint(*pHdl);
-+ }
-+ }
-+ else
-+ {
-+ if(!rKEvt.GetKeyCode().IsShift())
-+ {
-+ mrView.UnmarkAllPoints();
-+ }
-+ mrView.MarkPoint(*pHdl);
-+ }
-+
-+ if(0L == rHdlList.GetFocusHdl())
-+ {
-+ // restore point with focus
-+ SdrHdl* pNewOne = 0L;
-+
-+ for(sal_uInt32 a(0); !pNewOne && a < rHdlList.GetHdlCount(); a++)
-+ {
-+ SdrHdl* pAct = rHdlList.GetHdl(a);
-+
-+ if(pAct && pAct->GetKind() == HDL_POLY && pAct->GetPolyNum() == nPol && pAct->GetPointNum() == nPnt)
-+ pNewOne = pAct;
-+ }
-+
-+ if(pNewOne)
-+ ((SdrHdlList&)rHdlList).SetFocusHdl(pNewOne);
-+ }
-+ }
-+
-+ return true;
-+}
-+
-+bool IntelligentGroupFrame::OnMove( const KeyEvent& rKEvt )
-+{
-+ long nX = 0;
-+ long nY = 0;
-+
-+ switch( rKEvt.GetKeyCode().GetCode() )
-+ {
-+ case KEY_UP: nY = -1; break;
-+ case KEY_DOWN: nY = 1; break;
-+ case KEY_LEFT: nX = -1; break;
-+ case KEY_RIGHT: nX = 1; break;
-+ default: break;
-+ }
-+
-+ if(rKEvt.GetKeyCode().IsMod2())
-+ {
-+ OutputDevice* pOut = mrView.GetViewShell()->GetActiveWindow();
-+ Size aLogicSizeOnePixel = (pOut) ? pOut->PixelToLogic(Size(1,1)) : Size(100, 100);
-+ nX *= aLogicSizeOnePixel.Width();
-+ nY *= aLogicSizeOnePixel.Height();
-+ }
-+ else
-+ {
-+ // old, fixed move distance
-+ nX *= 100;
-+ nY *= 100;
-+ }
-+
-+ if( nX || nY )
-+ {
-+ // in point edit mode move the handle with the focus
-+ const SdrHdlList& rHdlList = mrView.GetHdlList();
-+ SdrHdl* pHdl = rHdlList.GetFocusHdl();
-+
-+ if(pHdl)
-+ {
-+ // now move the Handle (nX, nY)
-+ Point aStartPoint(pHdl->GetPos());
-+ Point aEndPoint(pHdl->GetPos() + Point(nX, nY));
-+
-+ // start dragging
-+ rtl::Reference< IntelligentGroupFrame > xTag( this );
-+ SdrDragMethod* pDragMethod = 0;
-+ if( (pHdl->GetKind() == HDL_MOVE) || (pHdl->GetKind() == HDL_SMARTTAG) )
-+ {
-+ pDragMethod = new FrameDragMove( mrView, xTag );
-+ }
-+ else if( pHdl->GetKind() == HDL_POLY )
-+ {
-+ pDragMethod = new FrameDragObjOwn( mrView );
-+ }
-+ else if( pHdl->GetKind() != HDL_BWGT )
-+ {
-+ pDragMethod = new FrameDragResize( mrView, xTag );
-+ }
-+ mrView.BegDragObj(aStartPoint, 0, pHdl, 0, pDragMethod);
-+
-+ if(mrView.IsDragObj())
-+ {
-+ FASTBOOL bWasNoSnap = mrView.GetDragStat().IsNoSnap();
-+ BOOL bWasSnapEnabled = mrView.IsSnapEnabled();
-+
-+ // switch snapping off
-+ if(!bWasNoSnap)
-+ ((SdrDragStat&)mrView.GetDragStat()).SetNoSnap(TRUE);
-+ if(bWasSnapEnabled)
-+ mrView.SetSnapEnabled(FALSE);
-+
-+ mrView.MovAction(aEndPoint);
-+ mrView.EndDragObj();
-+
-+ // restore snap
-+ if(!bWasNoSnap)
-+ ((SdrDragStat&)mrView.GetDragStat()).SetNoSnap(bWasNoSnap);
-+ if(bWasSnapEnabled)
-+ mrView.SetSnapEnabled(bWasSnapEnabled);
-+ }
-+ }
-+ else
-+ {
-+ // move the path
-+ MovePath( nX, nY );
-+ }
-+ }
-+
-+ return true;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+ULONG IntelligentGroupFrame::GetMarkablePointCount() const
-+{
-+ if( mpPathObj && isSelected() )
-+ {
-+ return mpPathObj->GetPointCount();
-+ }
-+ else
-+ {
-+ return 0;
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+ULONG IntelligentGroupFrame::GetMarkedPointCount() const
-+{
-+ if( mpMark )
-+ {
-+ const SdrUShortCont* pPts=mpMark->GetMarkedPoints();
-+ return pPts ? pPts->GetCount() : 0;
-+ }
-+ else
-+ {
-+ return 0;
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+BOOL IntelligentGroupFrame::MarkPoint(SdrHdl& rHdl, BOOL bUnmark )
-+{
-+ BOOL bRet=FALSE;
-+ if( mpPathObj && mrView.IsPointMarkable( rHdl ) && (rHdl.GetKind() != HDL_SMARTTAG) )
-+ {
-+ SmartHdl* pSmartHdl = dynamic_cast< SmartHdl* >( &rHdl );
-+ if( pSmartHdl && pSmartHdl->getTag().get() == this )
-+ {
-+ SdrUShortCont* pPts=mpMark->ForceMarkedPoints();
-+ pPts->ForceSort();
-+ if (mrView.MarkPointHelper(&rHdl,mpMark,bUnmark))
-+ {
-+ pPts->ForceSort();
-+ mrView.MarkListHasChanged();
-+ bRet=TRUE;
-+ }
-+ }
-+ }
-+ return bRet;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+BOOL IntelligentGroupFrame::MarkPoints(const Rectangle* pRect, BOOL bUnmark )
-+{
-+ BOOL bChgd=FALSE;
-+
-+ if( mpPathObj && isSelected() )
-+ {
-+ sal_Int32 nHdlNum = mrView.GetHdlList().GetHdlCount() - 1;
-+ while( nHdlNum > 0 )
-+ {
-+ SmartHdl* pHdl = dynamic_cast< SmartHdl* >( mrView.GetHdl( sal::static_int_cast< ULONG >( nHdlNum-- ) ) );
-+
-+ if( pHdl && (pHdl->getTag().get() == this) && mrView.IsPointMarkable(*pHdl) && pHdl->IsSelected()==bUnmark)
-+ {
-+ Point aPos(pHdl->GetPos());
-+ if( pRect==NULL || pRect->IsInside(aPos))
-+ {
-+ if( mrView.MarkPointHelper(pHdl,mpMark,bUnmark) )
-+ bChgd=TRUE;
-+ }
-+ }
-+ }
-+
-+ if(bChgd)
-+ mrView.MarkListHasChanged();
-+ }
-+
-+ return bChgd;
-+}
-+
-+// --------------------------------------------------------------------
-+
-+bool IntelligentGroupFrame::getContext( SdrViewContext& rContext )
-+{
-+ if( mpPathObj && isSelected() && !mrView.IsFrameDragSingles() )
-+ {
-+ rContext = SDRCONTEXT_POINTEDIT;
-+ return true;
-+ }
-+ else
-+ {
-+ return false;
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+void IntelligentGroupFrame::CheckPossibilities()
-+{
-+ if( mpPathObj )
-+ {
-+ if( isSelected() )
-+ {
-+ if( mrView.IsFrameDragSingles() )
-+ {
-+ mrView.SetMoveAllowed( true );
-+ mrView.SetMoveProtected( false );
-+ mrView.SetResizeFreeAllowed( true );
-+ mrView.SetResizePropAllowed( true );
-+ mrView.SetResizeProtected( false );
-+
-+ }
-+ else
-+ {
-+ bool b1stSmooth(true);
-+ bool b1stSegm(true);
-+ bool bCurve(false);
-+ bool bSmoothFuz(false);
-+ bool bSegmFuz(false);
-+ basegfx::B2VectorContinuity eSmooth = basegfx::CONTINUITY_NONE;
-+
-+ mrView.CheckPolyPossibilitiesHelper( mpMark, b1stSmooth, b1stSegm, bCurve, bSmoothFuz, bSegmFuz, eSmooth );
-+ }
-+ }
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+void IntelligentGroupFrame::addCustomHandles( SdrHdlList& rHandlerList )
-+{
-+ if( mpPathObj )
-+ {
-+ SmartTagReference xThis( this );
-+ SdFrameHdl* pHdl = new SdFrameHdl( xThis, mpPathObj );
-+
-+ pHdl->SetObjHdlNum( SMART_TAG_HDL_NUM );
-+ pHdl->SetPageView( mrView.GetSdrPageView() );
-+
-+ pHdl->SetObj(mpPathObj);
-+ rHandlerList.AddHdl( pHdl );
-+
-+ if( isSelected() )
-+ {
-+ if( mrView.GetSdrPageView() )
-+ mrView.GetSdrPageView()->SetHasMarkedObj(TRUE);
-+
-+ if( !mrView.IsFrameDragSingles() )
-+ {
-+ SdrHdlList aTemp( rHandlerList.GetView() );
-+ mpPathObj->AddToHdlList( aTemp );
-+ const SdrUShortCont* pMrkPnts=mpMark->GetMarkedPoints();
-+
-+ sal_uInt32 nHandle;
-+ for( nHandle = 0; nHandle < aTemp.GetHdlCount(); ++nHandle )
-+ {
-+ SdrHdl* pTempHdl = aTemp.GetHdl( nHandle );
-+
-+ SmartHdl* pSmartHdl = new SmartHdl( xThis, mpPathObj, pTempHdl->GetPos(), pTempHdl->GetKind() );
-+ pSmartHdl->SetObjHdlNum( nHandle );
-+ pSmartHdl->SetPolyNum( pTempHdl->GetPolyNum() );
-+ pSmartHdl->SetPointNum( pTempHdl->GetPointNum() );
-+ pSmartHdl->SetPlusHdl( pTempHdl->IsPlusHdl() );
-+ pSmartHdl->SetSourceHdlNum( pTempHdl->GetSourceHdlNum() );
-+ pSmartHdl->SetPageView( mrView.GetSdrPageView() );
-+
-+ rHandlerList.AddHdl( pSmartHdl );
-+
-+ const bool bSelected= pMrkPnts && pMrkPnts->Exist(sal::static_int_cast< USHORT >(nHandle));
-+ pSmartHdl->SetSelected(bSelected);
-+
-+ if( mrView.IsPlusHandlesAlwaysVisible() || bSelected )
-+ {
-+ sal_uInt32 nPlusAnz=mpPathObj->GetPlusHdlCount(*pSmartHdl);
-+ for (sal_uInt32 nPlusNum=0; nPlusNum<nPlusAnz; nPlusNum++)
-+ {
-+ SdrHdl* pPlusHdl = mpPathObj->GetPlusHdl(*pSmartHdl,nPlusNum);
-+ if (pPlusHdl!=NULL)
-+ {
-+ pPlusHdl->SetObj(mpPathObj);
-+ pPlusHdl->SetPageView(mrView.GetSdrPageView());
-+ pPlusHdl->SetPlusHdl(TRUE);
-+ rHandlerList.AddHdl(pPlusHdl);
-+ }
-+ }
-+ }
-+ }
-+ }
-+ else
-+ {
-+ Rectangle aRect(mpPathObj->GetCurrentBoundRect());
-+
-+ if(!aRect.IsEmpty())
-+ {
-+ ULONG nCount = rHandlerList.GetHdlCount();
-+
-+ BOOL bWdt0=aRect.Left()==aRect.Right();
-+ BOOL bHgt0=aRect.Top()==aRect.Bottom();
-+ if (bWdt0 && bHgt0)
-+ {
-+ rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.TopLeft(),HDL_UPLFT));
-+ }
-+ else if (bWdt0 || bHgt0)
-+ {
-+ rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.TopLeft() ,HDL_UPLFT));
-+ rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.BottomRight(),HDL_LWRGT));
-+ }
-+ else
-+ {
-+ if (!bWdt0 && !bHgt0) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.TopLeft() ,HDL_UPLFT));
-+ if ( !bHgt0) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.TopCenter() ,HDL_UPPER));
-+ if (!bWdt0 && !bHgt0) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.TopRight() ,HDL_UPRGT));
-+ if (!bWdt0 ) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.LeftCenter() ,HDL_LEFT ));
-+ if (!bWdt0 ) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.RightCenter() ,HDL_RIGHT));
-+ if (!bWdt0 && !bHgt0) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.BottomLeft() ,HDL_LWLFT));
-+ if ( !bHgt0) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.BottomCenter(),HDL_LOWER));
-+ if (!bWdt0 && !bHgt0) rHandlerList.AddHdl(new SmartHdl( xThis, mpPathObj, aRect.BottomRight() ,HDL_LWRGT));
-+ }
-+
-+ while( nCount < rHandlerList.GetHdlCount() )
-+ {
-+ rHandlerList.GetHdl(nCount++)->SetPageView( mrView.GetSdrPageView() );
-+ }
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+
-+void IntelligentGroupFrame::disposing()
-+{
-+ if( mpPathObj )
-+ {
-+ SdrPathObj* pPathObj = mpPathObj;
-+ mpPathObj = 0;
-+ mrView.updateHandles();
-+
-+ delete pPathObj;
-+ }
-+
-+ if( mpMark )
-+ {
-+ delete mpMark;
-+ mpMark = 0;
-+ }
-+
-+ SmartTag::disposing();
-+}
-+
-+// --------------------------------------------------------------------
-+
-+void IntelligentGroupFrame::deselect()
-+{
-+ SmartTag::deselect();
-+
-+ if( mpMark )
-+ {
-+ SdrUShortCont* pPts = mpMark->GetMarkedPoints();
-+
-+ if( pPts )
-+ pPts->Clear();
-+ }
-+}
-+
-+// --------------------------------------------------------------------
-+// IPolyPolygonEditorController
-+// --------------------------------------------------------------------
-+
-+void IntelligentGroupFrame::DeleteMarkedPoints()
-+{
-+ if( mpPathObj && IsDeleteMarkedPointsPossible() )
-+ {
-+ mrView.BrkAction();
-+
-+ // Description
-+ // BegUndo(ImpGetResStr(STR_EditDelete),GetDescriptionOfMarkedPoints(),SDRREPFUNC_OBJ_DELETE);
-+
-+ SdrUShortCont* pPts = mpMark->GetMarkedPoints();
-+
-+ if( pPts )
-+ {
-+ PolyPolygonEditor aEditor( mpPathObj->GetPathPoly(), mpPathObj->IsClosed() );
-+ if( aEditor.DeletePoints( pPts->getContainer() ) )
-+ {
-+ if( aEditor.GetPolyPolygon().count() )
-+ {
-+ // AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pPath ));
-+ mpPathObj->SetPathPoly( aEditor.GetPolyPolygon() );
-+ }
-+ else
-+ {
-+ // AddUndo( GetModel()->GetSdrUndoFactory().CreateUndoDeleteObject(*pPath ) );
-+ // pM->GetPageView()->GetObjList()->RemoveObject(pObj->GetOrdNum());
-+ }
-+
-+ mrView.UnmarkAllPoints();
-+ mrView.MarkListHasChanged();
-+ mrView.updateHandles();
-+ }
-+ }
-+
-+ // EndUndo();
-+ }
-+}
-+
-+BOOL IntelligentGroupFrame::IsDeleteMarkedPointsPossible() const
-+{
-+ return mpPathObj && isSelected() && (GetMarkedPointCount() != 0);
-+}
-+
-+void IntelligentGroupFrame::RipUpAtMarkedPoints()
-+{
-+ // not supported for motion path
-+}
-+
-+bool IntelligentGroupFrame::IsRipUpAtMarkedPointsPossible() const
-+{
-+ // not supported for motion path
-+ return false;
-+}
-+
-+BOOL IntelligentGroupFrame::IsSetMarkedSegmentsKindPossible() const
-+{
-+ if( mpPathObj )
-+ return mrView.IsSetMarkedSegmentsKindPossible();
-+ else
-+ return FALSE;
-+}
-+
-+SdrPathSegmentKind IntelligentGroupFrame::GetMarkedSegmentsKind() const
-+{
-+ if( mpPathObj )
-+ return mrView.GetMarkedSegmentsKind();
-+ else
-+ return SDRPATHSEGMENT_LINE;
-+}
-+
-+void IntelligentGroupFrame::SetMarkedSegmentsKind(SdrPathSegmentKind eKind)
-+{
-+ if(mpPathObj && isSelected() && (GetMarkedPointCount() != 0))
-+ {
-+ SdrUShortCont* pPts = mpMark->GetMarkedPoints();
-+ if(pPts)
-+ {
-+ PolyPolygonEditor aEditor( mpPathObj->GetPathPoly(), mpPathObj->IsClosed() );
-+ if(aEditor.SetSegmentsKind( eKind, pPts->getContainer()) )
-+ {
-+ // AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pPath));
-+ mpPathObj->SetPathPoly(aEditor.GetPolyPolygon());
-+ mrView.MarkListHasChanged();
-+ mrView.updateHandles();
-+ }
-+ }
-+ }
-+}
-+
-+BOOL IntelligentGroupFrame::IsSetMarkedPointsSmoothPossible() const
-+{
-+ if( mpPathObj )
-+ return mrView.IsSetMarkedPointsSmoothPossible();
-+ else
-+ return FALSE;
-+}
-+
-+SdrPathSmoothKind IntelligentGroupFrame::GetMarkedPointsSmooth() const
-+{
-+ if( mpPathObj )
-+ return mrView.GetMarkedPointsSmooth();
-+ else
-+ return SDRPATHSMOOTH_ANGULAR;
-+}
-+
-+void IntelligentGroupFrame::SetMarkedPointsSmooth(SdrPathSmoothKind eKind)
-+{
-+ basegfx::B2VectorContinuity eFlags;
-+
-+ if(SDRPATHSMOOTH_ANGULAR == eKind)
-+ {
-+ eFlags = basegfx::CONTINUITY_NONE;
-+ }
-+ else if(SDRPATHSMOOTH_ASYMMETRIC == eKind)
-+ {
-+ eFlags = basegfx::CONTINUITY_C1;
-+ }
-+ else if(SDRPATHSMOOTH_SYMMETRIC == eKind)
-+ {
-+ eFlags = basegfx::CONTINUITY_C2;
-+ }
-+ else
-+ {
-+ return;
-+ }
-+
-+ if(mpPathObj && mpMark && isSelected() && (GetMarkedPointCount() != 0))
-+ {
-+ SdrUShortCont* pPts = mpMark->GetMarkedPoints();
-+ if(pPts)
-+ {
-+ PolyPolygonEditor aEditor( mpPathObj->GetPathPoly(), mpPathObj->IsClosed() );
-+ if(aEditor.SetPointsSmooth( eFlags, pPts->getContainer() ) )
-+ {
-+ // AddUndo(GetModel()->GetSdrUndoFactory().CreateUndoGeoObject(*pPath));
-+ mpPathObj->SetPathPoly(aEditor.GetPolyPolygon());
-+ mrView.MarkListHasChanged();
-+ mrView.updateHandles();
-+ }
-+ }
-+ }
-+}
-+
-+void IntelligentGroupFrame::CloseMarkedObjects(BOOL /*bToggle*/, BOOL /*bOpen*/ )
-+{
-+ // not supported for motion path
-+}
-+
-+bool IntelligentGroupFrame::IsOpenCloseMarkedObjectsPossible() const
-+{
-+ // not supported for motion path
-+ return false;
-+}
-+
-+SdrObjClosedKind IntelligentGroupFrame::GetMarkedObjectsClosedState() const
-+{
-+ // not supported for motion path
-+ return SDROBJCLOSED_OPEN;
-+}
-+
-+// XChangesListener
-+void SAL_CALL IntelligentGroupFrame::changesOccurred( const ChangesEvent& /*Event*/ ) throw (RuntimeException)
-+{
-+ if( mpPathObj/* && !mbInUpdatePath && (mpEffect->getPath() != msLastPath)*/ )
-+ {
-+// updatePathAttributes();
-+ mrView.updateHandles();
-+ }
-+}
-+
-+void SAL_CALL IntelligentGroupFrame::disposing( const EventObject& /*Source*/ ) throw (RuntimeException)
-+{
-+ if( mpPathObj )
-+ Dispose();
-+}
-+
-+Any SAL_CALL IntelligentGroupFrame::queryInterface( const ::com::sun::star::uno::Type& aType ) throw (RuntimeException)
-+{
-+ if( aType == XChangesListener::static_type() )
-+ return Any( Reference< XChangesListener >( this ) );
-+ if( aType == XEventListener::static_type() )
-+ return Any( Reference< XEventListener >( this ) );
-+ if( aType == XInterface::static_type() )
-+ return Any( Reference< XInterface >( this ) );
-+
-+ return Any();
-+}
-+
-+void SAL_CALL IntelligentGroupFrame::acquire() throw ()
-+{
-+ SimpleReferenceComponent::acquire();
-+}
-+
-+void SAL_CALL IntelligentGroupFrame::release( ) throw ()
-+{
-+ SimpleReferenceComponent::release();
-+}
-+
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupLayoutBase.cxx sd/source/ui/ig/IntelligentGroupLayoutBase.cxx
-new file mode 100644
-index 0000000..386136d
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupLayoutBase.cxx
-@@ -0,0 +1,202 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgrouplayoutbase.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupLayoutBase.hxx"
-+
-+using namespace ::com::sun::star;
-+
-+namespace sd{
-+
-+IntelligentGroupLayoutBase::IntelligentGroupLayoutBase(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+ :mpModel(pModel)
-+ ,mpLayoutDescriptor(pDescriptor)
-+{
-+}
-+
-+
-+IntelligentGroupLayoutBase::~IntelligentGroupLayoutBase()
-+{
-+
-+}
-+
-+
-+boost::shared_ptr<IntelligentGroupLayoutDescriptor>IntelligentGroupLayoutBase::GetLayoutDescriptor()
-+{
-+ return mpLayoutDescriptor;
-+}
-+
-+
-+IntelligentGroupShapeDescriptor IntelligentGroupLayoutBase::GetShapeDescriptor(
-+ const rtl::OUString sShapeIdentifier,
-+ const ig::ShapeRole eRole,
-+ const IntelligentGroupStyle aStyle)
-+{
-+ IntelligentGroupShapeDescriptor aShapeDescriptor;
-+ aShapeDescriptor.Shape = mpModel->GetShape(sShapeIdentifier);
-+ aShapeDescriptor.Identifier = sShapeIdentifier;
-+ aShapeDescriptor.Role = eRole;
-+ aShapeDescriptor.Style = aStyle;
-+ aShapeDescriptor.Exists = aShapeDescriptor.Shape!=NULL;
-+ if (aShapeDescriptor.Exists)
-+ {
-+ aShapeDescriptor.ShapeLocation = aShapeDescriptor.Shape->getPosition();
-+ aShapeDescriptor.ShapeSize = aShapeDescriptor.Shape->getSize();
-+ }
-+ else
-+ {
-+ aShapeDescriptor.Shape = CreateShape(aShapeDescriptor.Identifier);
-+// mpModel->AddShape(aShapeDescriptor.Identifier, aShapeDescriptor.Role, aShapeDescriptor.Shape);
-+ }
-+
-+ return aShapeDescriptor;
-+}
-+
-+void IntelligentGroupLayoutBase::MoveShapeIntoGroupBoundingBox (
-+ IntelligentGroupShapeDescriptor& aDescriptor,
-+ awt::Rectangle aGroupBoundingBox)
-+{
-+ if ( ! aDescriptor.Exists)
-+ {
-+ // Shape has just been created and is at its default position.
-+ return;
-+ }
-+
-+ bool bLocationModified = false;
-+ awt::Point aLocation(
-+ aDescriptor.ShapeLocation.X,
-+ aDescriptor.ShapeLocation.Y);
-+ if (aLocation.Y < aGroupBoundingBox.Y)
-+ {
-+ aLocation.Y = aGroupBoundingBox.Y;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.Y+aDescriptor.ShapeSize.Height > aGroupBoundingBox.Y+aGroupBoundingBox.Height)
-+ {
-+ aLocation.Y = aGroupBoundingBox.Y+aGroupBoundingBox.Height-aDescriptor.ShapeSize.Height;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.X < aGroupBoundingBox.X)
-+ {
-+ aLocation.X = aGroupBoundingBox.X;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.X+aDescriptor.ShapeSize.Width > aGroupBoundingBox.X+aGroupBoundingBox.Width)
-+ {
-+ aLocation.X = aGroupBoundingBox.X+aGroupBoundingBox.Width-aDescriptor.ShapeSize.Width;
-+ bLocationModified = true;
-+ }
-+
-+ if (bLocationModified)
-+ {
-+ // Place the shape at the corrected location.
-+ aDescriptor.Shape->setPosition(aLocation);
-+
-+ if (aDescriptor.LocationTransformation.X != 0 && aDescriptor.LocationTransformation.Y != 0)
-+ {
-+ // Now that the location of the shape has been corrected,
-+ // we have to figure out how the correction affects the
-+ // location transformation (manual translation made by user).
-+
-+ // Calculate the corrections that have to be made to the current
-+ // location in order to move the shape inside the bounding box of
-+ // the group.
-+ const int nDX = aLocation.X - aDescriptor.ShapeLocation.X;
-+ const int nDY = aLocation.Y - aDescriptor.ShapeLocation.Y;
-+
-+ // If we change the location transformation at all then we reduce it.
-+ // This is the case only when the current transformation and
-+ // the correction have different signs.
-+ if (aDescriptor.LocationTransformation.X * nDX < 0)
-+ {
-+ const sal_Int32 nNewFirst = aDescriptor.LocationTransformation.X + nDX;
-+ // We must not overshoot. When the correction is larger (in absolute value)
-+ // then the location transformation then set the later to 0.
-+ if (nNewFirst * aDescriptor.LocationTransformation.X <= 0)
-+ aDescriptor.LocationTransformation.X = 0;
-+ else
-+ aDescriptor.LocationTransformation.X = nNewFirst;
-+ }
-+
-+ // Now do the same with the other coordinate.
-+ if (aDescriptor.LocationTransformation.Y * nDY < 0)
-+ {
-+ const sal_Int32 nNewSecond = aDescriptor.LocationTransformation.Y + nDY;
-+ // We must not overshoot. When the correction is larger (in absolute value)
-+ // then the location transformation then set the later to 0.
-+ if (nNewSecond * aDescriptor.LocationTransformation.Y <= 0)
-+ aDescriptor.LocationTransformation.Y = 0;
-+ else
-+ aDescriptor.LocationTransformation.Y = nNewSecond;
-+ }
-+ }
-+
-+ // Remember the new location.
-+ aDescriptor.ShapeLocation = aLocation;
-+ }
-+}
-+
-+void IntelligentGroupLayoutBase::SetSizeLocation (IntelligentGroupShapeDescriptor& aDescriptor)
-+{
-+ if ( ! aDescriptor.Exists)
-+ {
-+ aDescriptor.Shape->setPosition(aDescriptor.DefaultLocation);
-+ aDescriptor.Shape->setSize(aDescriptor.DefaultSize);
-+ }
-+ else
-+ {
-+ awt::Point aLocation = aDescriptor.DefaultLocation;
-+ if (aDescriptor.LocationTransformation.X != 0 && aDescriptor.LocationTransformation.Y != 0)
-+ {
-+ aLocation.X += aDescriptor.LocationTransformation.X;
-+ aLocation.Y += aDescriptor.LocationTransformation.Y;
-+ }
-+ aDescriptor.Shape->setPosition(aLocation);
-+ aDescriptor.Shape->setSize(aDescriptor.DefaultSize);
-+ aDescriptor.ShapeLocation = aLocation;
-+ aDescriptor.ShapeSize = aDescriptor.DefaultSize;
-+ }
-+}
-+
-+bool IntelligentGroupLayoutBase::IsGeometryModified(const IntelligentGroupShapeDescriptor& aDescriptor)
-+{ return aDescriptor.Exists
-+ && ((aDescriptor.SizeTransformation.Width!=0 && aDescriptor.SizeTransformation.Height!=0)||
-+ (aDescriptor.LocationTransformation.X!=0 && aDescriptor.LocationTransformation.Y!=0));
-+}
-+
-+void IntelligentGroupLayoutBase::AddShape(css::uno::Reference<css::drawing::XShape> /*rxShape*/)
-+{
-+
-+}
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupLayoutManager.cxx sd/source/ui/ig/IntelligentGroupLayoutManager.cxx
-new file mode 100644
-index 0000000..1984a2a
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupLayoutManager.cxx
-@@ -0,0 +1,180 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgrouplayoutmanager.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupLayoutManager.hxx"
-+#include "GroupedListLayout.hxx"
-+#include "HorizontalListLayoutAlgorithm.hxx"
-+//#include "VerticalListLayoutAlgorithm.hxx"
-+#include "PictureAccentListLayout.hxx"
-+#include "TreeLayout.hxx"
-+#include "TreeLayoutAlgorithm.hxx"
-+#include "RowFieldLayoutAlgorithm.hxx"
-+#include "CircleLayoutAlgorithm.hxx"
-+
-+namespace sd{
-+
-+boost::shared_ptr<IntelligentGroupLayoutManager> IntelligentGroupLayoutManager::mpInstance;
-+
-+const ::rtl::OUString IntelligentGroupLayoutManager::msGroupedListLayout(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedListLayout")));
-+const ::rtl::OUString IntelligentGroupLayoutManager::msPictureAccentListLayout(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PictureAccentListLayout")));
-+const ::rtl::OUString IntelligentGroupLayoutManager::msTreeLayout(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TreeLayout")));
-+
-+const ::rtl::OUString IntelligentGroupLayoutManager::msCircleLayoutAlgorithm(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CircleLayoutAlgorithm")));
-+const ::rtl::OUString IntelligentGroupLayoutManager::msHorizontalListLayoutAlgorithm(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HorizontalListLayoutAlgorithm")));
-+const ::rtl::OUString IntelligentGroupLayoutManager::msRowFieldLayoutAlgorithm(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RowFieldLayoutAlgorithm")));
-+const ::rtl::OUString IntelligentGroupLayoutManager::msTreeLayoutAlgorithm(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TreeLayoutAlgorithm")));
-+
-+IntelligentGroupLayoutManager::IntelligentGroupLayoutManager()
-+{
-+ // This initialization would best be done via the configuration.
-+ AddLayout(GroupedListDescriptor::Get());
-+ AddLayout(CircleLayoutDescriptor::Get());
-+ AddLayout(TreeDescriptor::Get());
-+ AddLayout(PictureAccentListDescriptor::Get());
-+ AddLayout(SimpleFieldDescriptor::Get());
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayoutManager> IntelligentGroupLayoutManager::Instance()
-+{
-+ if(mpInstance.get() == NULL)
-+ mpInstance.reset(new IntelligentGroupLayoutManager());
-+ return mpInstance;
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayoutDescriptor> IntelligentGroupLayoutManager::GetLayoutDescriptor(const rtl::OUString& sLayoutName)
-+{
-+ LayoutDescriptors::iterator aIter = maLayoutDescriptors.find(sLayoutName);
-+ OSL_ASSERT (aIter != maLayoutDescriptors.end());
-+ return aIter->second;
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayoutBase> IntelligentGroupLayoutManager::GetLayout(const rtl::OUString& sLayoutName,boost::shared_ptr<IntelligentGroupModel> pModel)
-+{
-+ return CreateLayout(pModel,sLayoutName);
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayouter> IntelligentGroupLayoutManager::GetLayouter(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutBase> pLayout)
-+{
-+ boost::shared_ptr<IntelligentGroupAlgorithmBase> pAlgorithm = CreateLayoutAlgorithm(pLayout->GetLayoutDescriptor());
-+ if(pAlgorithm.get() != NULL)
-+ return boost::shared_ptr<IntelligentGroupLayouter> (
-+ new IntelligentGroupLayouter(
-+ pModel,
-+ pLayout,
-+ pAlgorithm));
-+ else
-+ return boost::shared_ptr<IntelligentGroupLayouter>();
-+}
-+
-+void IntelligentGroupLayoutManager::AddLayout(boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+{
-+ rtl::OUString sCategory = pDescriptor->Category;
-+ rtl::OUString sLayout = pDescriptor->Name;
-+ Categories::iterator aIter = maCategories.find(sCategory);
-+ std::vector<rtl::OUString> aLayoutsOfCategory;
-+ if(aIter != maCategories.end())
-+ aLayoutsOfCategory = aIter->second;
-+ if (aLayoutsOfCategory.empty())
-+ {
-+ maCategories.insert(Categories::value_type(sCategory, aLayoutsOfCategory));
-+ }
-+ aLayoutsOfCategory.push_back(sLayout);
-+ maLayoutDescriptors.insert(LayoutDescriptors::value_type(sLayout, pDescriptor));
-+// std::pair<LayoutDescriptors::iterator,bool> pr;
-+// pr = maLayoutDescriptors.insert(LayoutDescriptors::value_type(sLayout, aDescriptor));
-+// bool aValue = pr.second;
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayoutBase> IntelligentGroupLayoutManager::CreateLayout(boost::shared_ptr<IntelligentGroupModel> pModel, const rtl::OUString& sLayoutName)
-+{
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor = GetLayoutDescriptor(sLayoutName);
-+ if(pLayoutDescriptor.get() != NULL)
-+ return CreateLayout(pModel, pLayoutDescriptor);
-+ else
-+ return boost::shared_ptr<IntelligentGroupLayoutBase>();
-+}
-+
-+boost::shared_ptr<IntelligentGroupLayoutBase> IntelligentGroupLayoutManager::CreateLayout(boost::shared_ptr<IntelligentGroupModel> pModel, boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+{
-+ rtl::OUString aLayoutName = pDescriptor->LayoutServiceName;
-+ boost::shared_ptr<IntelligentGroupLayoutBase> pLayout;
-+ if(aLayoutName == IntelligentGroupLayoutManager::msGroupedListLayout)
-+ {
-+ pLayout.reset((IntelligentGroupLayoutBase*)new GroupedListLayout(pModel,pDescriptor));
-+ }
-+ else if(aLayoutName == IntelligentGroupLayoutManager::msPictureAccentListLayout)
-+ {
-+ pLayout.reset((IntelligentGroupLayoutBase*)new PictureAccentListLayout(pModel,pDescriptor));
-+ }
-+ else if(aLayoutName == IntelligentGroupLayoutManager::msTreeLayout)
-+ {
-+ pLayout.reset((IntelligentGroupLayoutBase*)new TreeLayout(pModel,pDescriptor));
-+ }
-+
-+ return pLayout;
-+}
-+
-+boost::shared_ptr<IntelligentGroupAlgorithmBase> IntelligentGroupLayoutManager::CreateLayoutAlgorithm(boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+{
-+ rtl::OUString aClassName = pDescriptor->LayoutAlgorithmServiceName;
-+ boost::shared_ptr<IntelligentGroupAlgorithmBase> pAlgorithm;
-+ if(aClassName == IntelligentGroupLayoutManager::msHorizontalListLayoutAlgorithm)
-+ {
-+ pAlgorithm.reset((IntelligentGroupAlgorithmBase*)new HorizontalListLayoutAlgorithm());
-+ }
-+ else if(aClassName == IntelligentGroupLayoutManager::msTreeLayoutAlgorithm)
-+ {
-+ pAlgorithm.reset((IntelligentGroupAlgorithmBase*)new TreeLayoutAlgorithm());
-+ }
-+ else if(aClassName == IntelligentGroupLayoutManager::msRowFieldLayoutAlgorithm)
-+ {
-+ pAlgorithm.reset((IntelligentGroupAlgorithmBase*)new RowFieldLayoutAlgorithm());
-+ }
-+ else if(aClassName == IntelligentGroupLayoutManager::msCircleLayoutAlgorithm)
-+ {
-+ pAlgorithm.reset((IntelligentGroupAlgorithmBase*)new CircleLayoutAlgorithm());
-+ }
-+
-+ return pAlgorithm;
-+}
-+
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupLayouter.cxx sd/source/ui/ig/IntelligentGroupLayouter.cxx
-new file mode 100644
-index 0000000..3b965d9
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupLayouter.cxx
-@@ -0,0 +1,259 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgrouplayouter.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupLayouter.hxx"
-+
-+using namespace ::com::sun::star;
-+
-+
-+namespace sd{
-+
-+IntelligentGroupLayouter::IntelligentGroupLayouter(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+ boost::shared_ptr<IntelligentGroupAlgorithmBase> pAlgorithm)
-+ : mpModel(pModel)
-+ , mpLayout(pLayout)
-+ , mpAlgorithm(pAlgorithm)
-+{
-+
-+}
-+
-+IntelligentGroupLayouter::~IntelligentGroupLayouter()
-+{
-+
-+}
-+
-+
-+void IntelligentGroupLayouter::DoLayout(boost::shared_ptr<IntelligentGroupText> pText)
-+{
-+ if(mpModel->GetShapeDescriptors().empty())
-+ {
-+// maShapeDescriptors = PrepareShapes(pText->CreateIterator());
-+ PrepareShapes(pText->CreateIterator());
-+ }
-+
-+ // Get bounding box of the group shape.
-+ awt::Rectangle aGroupBoundingBox(
-+ mpModel->GetLocation().X,
-+ mpModel->GetLocation().Y,
-+ mpModel->GetSize().Width,
-+ mpModel->GetSize().Height);
-+// mpAlgorithm->PlaceShape(mpLayout, maShapeDescriptors, aGroupBoundingBox);
-+ mpAlgorithm->PlaceShape(mpLayout, mpModel, aGroupBoundingBox);
-+// UpdateText(pText);
-+}
-+
-+
-+//std::vector<std::vector<IntelligentGroupShapeDescriptor> > IntelligentGroupLayouter::PrepareShapes(
-+void IntelligentGroupLayouter::PrepareShapes(
-+ boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator)
-+{
-+ mpTextIterator = pTextIterator;
-+ sal_Int32 nGroupCount = pTextIterator->GetItemCount();
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor> > aShapeDescriptors;
-+
-+ for (int nIndex=0; nIndex<nGroupCount; ++nIndex)
-+ {
-+// std::vector<IntelligentGroupShapeDescriptor> aShapeDescriptor = mpLayout->PrepareShapes(
-+ mpLayout->PrepareShapes(
-+ pTextIterator,
-+ nIndex);
-+// aShapeDescriptors.push_back(aShapeDescriptor);
-+ pTextIterator->GotoNext();
-+ }
-+
-+ // Find all shapes in the model that have not been requested
-+ // in the recent prepareShapes() calls.
-+
-+ // Create a flat list with the identifiers of the requested shapes.
-+ std::vector<rtl::OUString> aRequestedShapes;
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor> >::const_iterator aIter = aShapeDescriptors.begin();
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> >::const_iterator aIter = mpModel->GetShapeDescriptors().begin();
-+// for (; aIter != aShapeDescriptors.end(); ++aIter)
-+ for (; aIter != mpModel->GetShapeDescriptors().end(); ++aIter)
-+ for(std::vector<IntelligentGroupShapeDescriptor>::const_iterator aIterator = (*aIter).begin();
-+ aIterator != (*aIter).end(); ++aIterator)
-+ aRequestedShapes.push_back((*aIterator).Identifier);
-+
-+// return aShapeDescriptors;
-+}
-+
-+
-+void IntelligentGroupLayouter::AddShape(const IntelligentGroupShapeDescriptor& rShapeDescriptor)
-+{
-+ if(ig::Primary == rShapeDescriptor.Role)
-+ {
-+ sal_Int32 nGroupIndex = mpModel->GetShapeGroupIndex(rShapeDescriptor.Shape);
-+ std::vector<IntelligentGroupShapeDescriptor> aDescriptorVector = mpLayout->PrepareShapes(
-+ mpTextIterator,
-+ nGroupIndex+1,
-+ true);
-+
-+ mpModel->AddShapeGroup(aDescriptorVector, nGroupIndex+1);
-+ }
-+ else if(ig::Accent == rShapeDescriptor.Role)
-+ {
-+ mpLayout->AddShape(rShapeDescriptor.Shape);
-+ }
-+}
-+
-+
-+/*
-+void IntelligentGroupLayouter::UpdateText(::boost::shared_ptr<IntelligentGroupText> pText)
-+{
-+ boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator = pText->CreateIterator();
-+ boost::shared_ptr<IntelligentGroupShapeAccessor> pShapeAccessor = mpLayout->GetShapeAccessor(maShapeDescriptors);
-+ boost::shared_ptr<IntelligentGroupShapeIterator> pShapeIterator(new IntelligentGroupShapeDescriptor(pShapeAccessor.get()));
-+
-+ if (pTextIterator->Rewind() && pShapeIterator->Rewind() )
-+ {
-+ while (true)
-+ {
-+ if ( pShapeIterator->IsOutliner() )
-+ {
-+ if (pShapeIterator->GetItemCount() > 1)
-+ {
-+ // When there is more than one shape on this level then
-+ // each will display on text item on the current level of the text iterator
-+ // and all its children.
-+ do
-+ {
-+ UpdateOutlineText(
-+ pShapeIterator->GetShape(),
-+ boost::shared_ptr<IntelligentGroupFlatSubTextIterator> (
-+ new IntelligentGroupFlatSubTextIterator(pTextIterator.get(), true)),
-+ -pTextIterator->GetLevel() );
-+ }
-+ while( pTextIterator->GotoNext() && aShapeIterator.GotoNext() );
-+ }
-+ else
-+ {
-+ // When there is only one shape then this will display all text
-+ // on the current level and the levels below of the text iterator.
-+
-+ UpdateOutlineText(
-+ pShapeIterator->GetShape(),
-+ boost::shared_ptr<IntelligentGroupFlatSubTextIterator> (
-+ new IntelligentGroupFlatSubTextIterator(pTextIterator.get(), false)),
-+ -pTextIterator->GetLevel() );
-+ }
-+ }
-+ else
-+ {
-+ // The current shape does not have outline text. Therefore it just
-+ // displays the current text.
-+ UpdateText( pShapeIterator->GetShape(), pTextIterator->GetText() );
-+ }
-+
-+ // Depth first traversal.
-+ if ( !pShapeIterator->IsOutliner() && pShapeIterator->GotoFirstChild()
-+ && pTextIterator->GotoFirstChild() )
-+ continue;
-+
-+ // Goto next sibling when there are no children.
-+ if (pTextIterator->GotoNext() && pShapeIterator->GotoNext() )
-+ continue;
-+
-+ // Go to next element on one of the upper levels.
-+ bool bLoop = false;
-+ while ( pTextIterator->GotoParent() && pShapeIterator->GotoParent() )
-+ {
-+ if ( pTextIterator->GotoNext() && pShapeIterator->GotoNext() )
-+ {
-+ bLoop = true;
-+ break;
-+ }
-+ }
-+ if (!bLoop)
-+ break;
-+ }
-+ }
-+}
-+
-+
-+
-+void IntelligentGroupLayouter::UpdateOutlineText(const uno::Reference<drawing::XShape> xShape,
-+ boost::shared_ptr<IntelligentGroupFlatTextIterator> pTextIterator,
-+ const sal_Int32 nIndentationOffset)
-+{
-+ uno::Reference<text::XTextRange> xShapeText (xShape, uno::UNO_QUERY_THROW);
-+ if (!xShapeText.is())
-+ return;
-+
-+ // Clear old content.
-+ xShapeText->setString( ::rtl::OUString::createFromAscii("") );
-+
-+ bool bFirst = true;
-+ do
-+ {
-+ // Insert a new line before any but the first line.
-+ if (bFirst)
-+ bFirst = false;
-+ else
-+ xShapeText->setString( ::rtl::OUString::createFromAscii("\n") );
-+
-+ // Append next line and set the right indentation level.
-+ xShapeText = xShapeText->getEnd();
-+ uno::Reference<beans::XPropertySet> xProperties (xShapeText, uno::UNO_QUERY_THROW);
-+ try
-+ {
-+ sal_Int32 nCharHeight = 20;
-+ sal_Int32 nNumberingLevel = pTextIterator->GetLevel()+nIndentationOffset;
-+ xProperties->setPropertyValue( ::rtl::OUString::createFromAscii("CharHeight"), uno::makeAny(nCharHeight) );
-+ xProperties->setPropertyValue( ::rtl::OUString::createFromAscii("NumberingLevel"), uno::makeAny(nNumberingLevel) );
-+ }
-+ catch (uno::Exception&)
-+ {
-+ DBG_ERROR("IntelligentGroupLayouter::UpdateOutlineText(), exception caught!");
-+ }
-+ ::rtl::OUString sText = pTextIterator->GetText();
-+ xShapeText->setString(sText);
-+ xShapeText = xShapeText->getEnd();
-+ }
-+ while (pTextIterator->GotoNext());
-+}
-+
-+
-+
-+
-+void IntelligentGroupLayouter::UpdateText(
-+ const uno::Reference<drawing::XShape> xShape,
-+ const ::rtl::OUString sText)
-+{
-+ uno::Reference<text::XTextRange> xShapeText (xShape, uno::UNO_QUERY_THROW);
-+ if (xShapeText.is())
-+ xShapeText->setString(sText);
-+}
-+*/
-+
-+}// end of namespace sd
-diff --git sd/source/ui/ig/IntelligentGroupModel.cxx sd/source/ui/ig/IntelligentGroupModel.cxx
-new file mode 100644
-index 0000000..499bcc9
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupModel.cxx
-@@ -0,0 +1,589 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgroupmodel.cxx,v $
-+ * $Revision: 1.1 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_sd.hxx"
-+
-+#include "IntelligentGroupModel.hxx"
-+#include <com/sun/star/drawing/XShapeGroup.hpp>
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/drawing/XDrawPage.hpp>
-+
-+using namespace ::com::sun::star;
-+
-+namespace sd{
-+
-+IntelligentGroupModel::IntelligentGroupModel(
-+ uno::Reference<frame::XModel> xModel,
-+ awt::Rectangle aBoundingBox)
-+ :mxModel(xModel)
-+{
-+ maSize = awt::Size(aBoundingBox.Width, aBoundingBox.Height);
-+ maLocation = awt::Point(aBoundingBox.X, aBoundingBox.Y);
-+
-+ SetupShapeList();
-+}
-+
-+IntelligentGroupModel::~IntelligentGroupModel()
-+{
-+ maContentShapeMap.clear();
-+ maDisposedShapes.clear();
-+ maContentShapeGroups.clear();
-+ maDisposedShapeMap.clear();
-+}
-+
-+uno::Reference<drawing::XShapes> IntelligentGroupModel::GetGroupShape(void)
-+{
-+ return mxGroup;
-+}
-+/*
-+void IntelligentGroupModel::AddShape(
-+ rtl::OUString rIdentifier,
-+ ig::ShapeRole rRole,
-+ uno::Reference<drawing::XShape> xShape)
-+{
-+ IntelligentGroupShapeDescriptor aDescriptor;
-+ aDescriptor.Identifier = rIdentifier;
-+ aDescriptor.Role = rRole;
-+ aDescriptor.Shape = xShape;
-+
-+ maContentShapeMap.insert(DescriptorInfo::value_type(rIdentifier, aDescriptor));
-+ maContentShapeVector.push_back(aDescriptor);
-+
-+ uno::Reference< beans::XPropertySet > xProperties(mxModel->getCurrentController(),uno::UNO_QUERY);
-+ uno::Reference< drawing::XDrawPage > xPage (xProperties->getPropertyValue(
-+ rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage"))),
-+ uno::UNO_QUERY);
-+ xPage->add(xShape);
-+ // Add shape to underlying group shape.
-+// mxGroup->add(xShape);
-+}
-+*/
-+
-+void IntelligentGroupModel::AddShapeGroup(const std::vector<IntelligentGroupShapeDescriptor>& aShapeDescriptorVector, sal_Int32 nIndex)
-+{
-+ maContentShapeGroups.insert(maContentShapeGroups.begin()+nIndex,aShapeDescriptorVector);
-+ uno::Reference< beans::XPropertySet > xProperties(mxModel->getCurrentController(),uno::UNO_QUERY);
-+ uno::Reference< drawing::XDrawPage > xPage (xProperties->getPropertyValue(
-+ rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage"))),
-+ uno::UNO_QUERY);
-+ for(std::vector<IntelligentGroupShapeDescriptor>::const_iterator aIter = aShapeDescriptorVector.begin(); aIter!=aShapeDescriptorVector.end(); aIter++)
-+ {
-+ xPage->add(aIter->Shape);
-+ }
-+}
-+
-+sal_Int32 IntelligentGroupModel::GetShapeGroupIndex(uno::Reference< drawing::XShape > rxShape)
-+{
-+ sal_Int32 nIndex = 0;
-+ bool bFound = false;
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> >::iterator aOuterIter = maContentShapeGroups.begin();
-+ for(; aOuterIter!=maContentShapeGroups.end(); aOuterIter++)
-+ {
-+ std::vector<IntelligentGroupShapeDescriptor>::iterator aInnerIter = aOuterIter->begin();
-+ for(; aInnerIter!=aOuterIter->end(); aInnerIter++)
-+ if(aInnerIter->Shape == rxShape)
-+ {
-+ bFound = true;
-+ break;
-+ }
-+
-+ if(bFound)
-+ break;
-+
-+ nIndex++;
-+ }
-+
-+ return nIndex;
-+}
-+
-+
-+
-+
-+std::vector<IntelligentGroupShapeDescriptor> IntelligentGroupModel::GetShapeDescriptorVector(sal_Int32 nIndex)
-+{
-+ return maContentShapeGroups[nIndex];
-+}
-+
-+
-+sal_Int32 IntelligentGroupModel::GetShapeDescriptorIndex(sal_Int32 nShapeGroupIndex, sal_Int32 nInnerIndex)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_Int32 nGroupIndex = 0; nGroupIndex < nShapeGroupIndex; nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ }
-+
-+ return nCount+nInnerIndex;
-+}
-+
-+
-+void IntelligentGroupModel::SetSizeLocation(sal_Int32 nShapeDescriptorIndex, IntelligentGroupShapeDescriptor aShapeDescriptor)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_uInt32 nGroupIndex = 0; nGroupIndex < maContentShapeGroups.size(); nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ if(nCount>nShapeDescriptorIndex)
-+ {
-+ sal_Int32 nRelativeIndex = nShapeDescriptorIndex-nCount+maContentShapeGroups[nGroupIndex].size();
-+
-+ if ( ! maContentShapeGroups[nGroupIndex][nRelativeIndex].Exists)
-+ {
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].Shape->setPosition(aShapeDescriptor.DefaultLocation);
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].Shape->setSize(aShapeDescriptor.DefaultSize);
-+ }
-+ else
-+ {
-+ awt::Point aLocation = maContentShapeGroups[nGroupIndex][nRelativeIndex].DefaultLocation;
-+ if (maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X != 0
-+ && maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y != 0)
-+ {
-+ aLocation.X += maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X;
-+ aLocation.Y += maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y;
-+ }
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].Shape->setPosition(aLocation);
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].Shape->setSize(maContentShapeGroups[nGroupIndex][nRelativeIndex].DefaultSize);
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeLocation = aLocation;
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeSize = aShapeDescriptor.DefaultSize;
-+ }
-+ break;
-+ }
-+ }
-+}
-+
-+
-+
-+
-+sal_Int32 IntelligentGroupModel::GetGroupShapeCount(sal_Int32 nShapeGroupIndex)
-+{
-+ return maContentShapeGroups[nShapeGroupIndex].size();
-+
-+}
-+
-+
-+
-+
-+void IntelligentGroupModel::MoveShapeIntoGroupBoundingBox(sal_Int32 nShapeIndex,::com::sun::star::awt::Rectangle aGroupBoundingBox)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_uInt32 nGroupIndex = 0; nGroupIndex<maContentShapeGroups.size(); nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ if(nCount>nShapeIndex)
-+ {
-+ sal_Int32 nRelativeIndex = nShapeIndex-nCount+maContentShapeGroups[nGroupIndex].size();
-+
-+ if ( ! maContentShapeGroups[nGroupIndex][nRelativeIndex].Exists)
-+ {
-+ // Shape has just been created and is at its default position.
-+ return;
-+ }
-+
-+ bool bLocationModified = false;
-+ awt::Point aLocation(
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeLocation.X,
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeLocation.Y);
-+ if (aLocation.Y < aGroupBoundingBox.Y)
-+ {
-+ aLocation.Y = aGroupBoundingBox.Y;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.Y+maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeSize.Height > aGroupBoundingBox.Y+aGroupBoundingBox.Height)
-+ {
-+ aLocation.Y = aGroupBoundingBox.Y+aGroupBoundingBox.Height-maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeSize.Height;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.X < aGroupBoundingBox.X)
-+ {
-+ aLocation.X = aGroupBoundingBox.X;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.X+maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeSize.Width > aGroupBoundingBox.X+aGroupBoundingBox.Width)
-+ {
-+ aLocation.X = aGroupBoundingBox.X+aGroupBoundingBox.Width-maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeSize.Width;
-+ bLocationModified = true;
-+ }
-+
-+ if (bLocationModified)
-+ {
-+ // Place the shape at the corrected location.
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].Shape->setPosition(aLocation);
-+
-+ if (maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X != 0 && maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y != 0)
-+ {
-+ // Now that the location of the shape has been corrected,
-+ // we have to figure out how the correction affects the
-+ // location transformation (manual translation made by user).
-+
-+ // Calculate the corrections that have to be made to the current
-+ // location in order to move the shape inside the bounding box of
-+ // the group.
-+ const int nDX = aLocation.X - maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeLocation.X;
-+ const int nDY = aLocation.Y - maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeLocation.Y;
-+
-+ // If we change the location transformation at all then we reduce it.
-+ // This is the case only when the current transformation and
-+ // the correction have different signs.
-+ if (maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X * nDX < 0)
-+ {
-+ const sal_Int32 nNewFirst = maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X + nDX;
-+ // We must not overshoot. When the correction is larger (in absolute value)
-+ // then the location transformation then set the later to 0.
-+ if (nNewFirst * maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X <= 0)
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X = 0;
-+ else
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.X = nNewFirst;
-+ }
-+
-+ // Now do the same with the other coordinate.
-+ if (maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y * nDY < 0)
-+ {
-+ const sal_Int32 nNewSecond = maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y + nDY;
-+ // We must not overshoot. When the correction is larger (in absolute value)
-+ // then the location transformation then set the later to 0.
-+ if (nNewSecond * maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y <= 0)
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y = 0;
-+ else
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].LocationTransformation.Y = nNewSecond;
-+ }
-+ }
-+
-+ // Remember the new location.
-+ maContentShapeGroups[nGroupIndex][nRelativeIndex].ShapeLocation = aLocation;
-+ }
-+
-+ break;
-+ }
-+ }
-+}
-+
-+
-+
-+void IntelligentGroupModel::AddShapeDescriptor(sal_Int32 nIndex, IntelligentGroupShapeDescriptor aShapeDescriptor)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_uInt32 nGroupIndex = 0; nGroupIndex<maContentShapeGroups.size(); nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ if(nCount>nIndex-1)
-+ {
-+ sal_Int32 nRelativeIndex = nIndex-nCount+maContentShapeGroups[nGroupIndex].size();
-+ std::vector<IntelligentGroupShapeDescriptor>::iterator aIter = maContentShapeGroups[nGroupIndex].begin();
-+ maContentShapeGroups[nGroupIndex].insert(aIter+nRelativeIndex, aShapeDescriptor);
-+ uno::Reference< beans::XPropertySet > xProperties(mxModel->getCurrentController(),uno::UNO_QUERY);
-+ uno::Reference< drawing::XDrawPage > xPage (xProperties->getPropertyValue(
-+ rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage"))),
-+ uno::UNO_QUERY);
-+ xPage->add(aShapeDescriptor.Shape);
-+ break;
-+ }
-+ }
-+}
-+
-+
-+
-+
-+sal_Int32 IntelligentGroupModel::GetShapeGroupCount()
-+{
-+ return maContentShapeGroups.size();
-+}
-+
-+
-+
-+sal_Int32 IntelligentGroupModel::GetShapeIndex(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxShape)
-+{
-+ sal_Int32 nGroupIndex = GetShapeGroupIndex(rxShape);
-+ sal_Int32 nCount = 0;
-+ for(sal_Int32 nIndex = 0; nIndex<nGroupIndex; nIndex++)
-+ {
-+ nCount += GetGroupShapeCount(nIndex);
-+ }
-+ for(std::vector<IntelligentGroupShapeDescriptor>::iterator aIter=maContentShapeGroups[nGroupIndex].begin();
-+ aIter!=maContentShapeGroups[nGroupIndex].end();
-+ aIter++)
-+ {
-+ if(aIter->Shape == rxShape)
-+ break;
-+ nCount++;
-+ }
-+ return nCount;
-+}
-+
-+
-+
-+std::vector<std::vector<IntelligentGroupShapeDescriptor> >& IntelligentGroupModel::GetShapeDescriptors()
-+{
-+ return maContentShapeGroups;
-+}
-+
-+/*
-+void IntelligentGroupModel::RemoveShape(rtl::OUString rIdentifier)
-+{
-+ maContentShapeMap.erase(rIdentifier);
-+
-+ IntelligentGroupShapeDescriptor aDescriptor = maContentShapeMap[rIdentifier];
-+ std::vector<IntelligentGroupShapeDescriptor>::iterator aIter = maContentShapeVector.begin();
-+ while(aIter != maContentShapeVector.end())
-+ {
-+ if((*aIter).Identifier == rIdentifier)
-+ {
-+ maContentShapeVector.erase(aIter);
-+
-+ uno::Reference<beans::XPropertySet> xProperties(mxModel->getCurrentController(),uno::UNO_QUERY);
-+ uno::Reference< drawing::XDrawPage > xPage (xProperties->getPropertyValue(
-+ rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage"))),
-+ uno::UNO_QUERY);
-+ xPage->remove( (*aIter).Shape );
-+ break;
-+ }
-+ aIter++;
-+ }
-+
-+// mxGroup->remove(aDescriptor.Shape);
-+}
-+*/
-+
-+
-+void IntelligentGroupModel::RemoveShape(uno::Reference<drawing::XShape> rxShape)
-+{
-+ bool bRemoved = false;
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> >::iterator aOuterIter = maContentShapeGroups.begin();
-+ for(; aOuterIter!=maContentShapeGroups.end(); aOuterIter++)
-+ {
-+ for(std::vector<IntelligentGroupShapeDescriptor>::iterator aInnerIter = aOuterIter->begin(); aInnerIter != aOuterIter->end(); aInnerIter++)
-+ if(rxShape == aInnerIter->Shape)
-+ {
-+ maDisposedShapes.push_back(*aInnerIter);
-+ maDisposedShapeMap.insert(IndexInfo::value_type(aInnerIter->Identifier,GetShapeIndex(rxShape)));
-+ aOuterIter->erase(aInnerIter);
-+
-+ if(aOuterIter->empty())
-+ maContentShapeGroups.erase(aOuterIter);
-+
-+/* uno::Reference<beans::XPropertySet> xProperties(mxModel->getCurrentController(),uno::UNO_QUERY);
-+ uno::Reference< drawing::XDrawPage > xPage (xProperties->getPropertyValue(
-+ rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage"))),
-+ uno::UNO_QUERY);
-+ xPage->remove( (*aInnerIter).Shape );
-+*/ bRemoved = true;
-+ break;
-+ }
-+ if(bRemoved)
-+ break;
-+ }
-+}
-+
-+
-+uno::Reference<drawing::XShape> IntelligentGroupModel::GetShape( rtl::OUString rIdentifier)
-+{
-+ IntelligentGroupShapeDescriptor aDescriptor = maContentShapeMap[rIdentifier];
-+ if (aDescriptor.Shape.is())
-+ return aDescriptor.Shape;
-+ else
-+ return NULL;
-+}
-+
-+uno::Reference<drawing::XShape> IntelligentGroupModel::GetShape(sal_Int32 nIndex)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_uInt32 nGroupIndex = 0; nGroupIndex < maContentShapeGroups.size(); nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ if(nCount>nIndex)
-+ {
-+ sal_Int32 nRelativeIndex = nIndex-nCount+maContentShapeGroups[nGroupIndex].size();
-+ return maContentShapeGroups[nGroupIndex][nRelativeIndex].Shape;
-+ }
-+ }
-+}
-+
-+rtl::OUString IntelligentGroupModel::GetShapeIdentifier (sal_Int32 nIndex)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_uInt32 nGroupIndex = 0; nGroupIndex < maContentShapeGroups.size(); nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ if(nCount>nIndex)
-+ {
-+ sal_Int32 nRelativeIndex = nIndex-nCount+maContentShapeGroups[nGroupIndex].size();
-+ return maContentShapeGroups[nGroupIndex][nRelativeIndex].Identifier;
-+ }
-+ }
-+ return rtl::OUString();
-+}
-+
-+sal_Int32 IntelligentGroupModel::GetShapeCount(void)
-+{
-+// return maContentShapeVector.size();
-+ sal_Int32 nCount = 0;
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> >::iterator aOuterIter = maContentShapeGroups.begin();
-+ for(; aOuterIter!=maContentShapeGroups.end(); aOuterIter++)
-+ {
-+ nCount += aOuterIter->size();
-+ }
-+ return nCount;
-+}
-+
-+
-+void IntelligentGroupModel::SetupShapeList(void)
-+{
-+ maContentShapeMap.clear();
-+// maContentShapeVector.clear();
-+ maContentShapeGroups.clear();
-+}
-+
-+void IntelligentGroupModel::SetSize(awt::Size rSize)
-+{
-+ maSize = rSize;
-+}
-+
-+
-+awt::Size IntelligentGroupModel::GetSize(void)
-+{
-+ return maSize;
-+}
-+
-+void IntelligentGroupModel::SetLocation(awt::Point rPoint)
-+{
-+ maLocation = rPoint;
-+}
-+
-+awt::Point IntelligentGroupModel::GetLocation(void)
-+{
-+ return maLocation;
-+}
-+
-+uno::Reference<lang::XMultiServiceFactory> IntelligentGroupModel::GetShapeFactory(void)
-+{
-+ return uno::Reference<lang::XMultiServiceFactory>( mxModel, uno::UNO_QUERY);
-+}
-+
-+void IntelligentGroupModel::UpdateSizeAndLocation(void)
-+{
-+ const uno::Reference<drawing::XShapeGroup> xGroup(mxGroup,uno::UNO_QUERY);
-+ maSize = awt::Size(xGroup->getSize().Width, xGroup->getSize().Height);
-+ maLocation = awt::Point(xGroup->getPosition().X, xGroup->getPosition().Y);
-+}
-+/*
-+void IntelligentGroupModel::RemoveUnusedShapes (rtl::OUString rUsedShapes[])
-+{
-+ std::vector<rtl::OUString> aShapesToBeDeleted;
-+ std::vector<IntelligentGroupShapeDescriptor>::iterator iter=maContentShapeVector.begin();
-+ for (;iter!=maContentShapeVector.end();++iter)
-+ {
-+ bool bFound = false;
-+ for (int i=0;rUsedShapes[i]!=NULL;i++)
-+ if ((*iter).Identifier.equals(rUsedShapes[i]))
-+ {
-+ bFound = true;
-+ break;
-+ }
-+ if ( ! bFound)
-+ aShapesToBeDeleted.push_back((*iter).Identifier);
-+ }
-+
-+ std::vector<rtl::OUString>::iterator aIter=aShapesToBeDeleted.begin();
-+ for (;aIter!=aShapesToBeDeleted.end();++aIter)
-+ {
-+ RemoveShape(*aIter);
-+ }
-+}
-+*/
-+uno::Reference<frame::XModel> IntelligentGroupModel::GetUnoModel()
-+{
-+ return mxModel;
-+}
-+
-+bool IntelligentGroupModel::IsInModel( ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape )
-+{
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> >::iterator aIter = maContentShapeGroups.begin();
-+ for ( ; aIter != maContentShapeGroups.end(); aIter++ )
-+ {
-+ for(std::vector<IntelligentGroupShapeDescriptor>::iterator aInnerIter = aIter->begin(); aInnerIter!=aIter->end(); aInnerIter++)
-+ if ( (*aInnerIter).Shape == xShape )
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+
-+IntelligentGroupShapeDescriptor IntelligentGroupModel::GetShapeDescriptor(sal_Int32 nIndex)
-+{
-+ sal_Int32 nCount = 0;
-+ for(sal_uInt32 nGroupIndex = 0; nGroupIndex < maContentShapeGroups.size(); nGroupIndex++)
-+ {
-+ nCount += maContentShapeGroups[nGroupIndex].size();
-+ if(nCount>nIndex)
-+ {
-+ sal_Int32 nRelativeIndex = nIndex-nCount+maContentShapeGroups[nGroupIndex].size();
-+ return maContentShapeGroups[nGroupIndex][nRelativeIndex];
-+ }
-+ }
-+
-+ return IntelligentGroupShapeDescriptor();
-+}
-+
-+
-+
-+bool IntelligentGroupModel::RequestUndo()
-+{
-+ uno::Reference<beans::XPropertySet> xProperties(mxModel->getCurrentController(),uno::UNO_QUERY);
-+ sal_Int32 nShapeCount = 0;
-+ if (xProperties.is())
-+ {
-+ uno::Reference<container::XIndexAccess> xPage (
-+ xProperties->getPropertyValue(rtl::OUString::createFromAscii("CurrentPage")), uno::UNO_QUERY);
-+ nShapeCount = xPage->getCount();
-+ if(GetShapeCount()<nShapeCount)
-+ {
-+ for(sal_Int32 nIndex = 0; nIndex<nShapeCount; nIndex++)
-+ {
-+
-+ uno::Reference<drawing::XShape> xShape (
-+ xPage->getByIndex(nIndex), uno::UNO_QUERY);
-+
-+ if(xShape == maDisposedShapes.back().Shape)
-+ {
-+ IndexInfo::iterator aIter = maDisposedShapeMap.find(maDisposedShapes.back().Identifier);
-+ AddShapeDescriptor(aIter->second, maDisposedShapes.back());
-+ maDisposedShapes.pop_back();
-+ maDisposedShapeMap.erase(aIter);
-+ return true;
-+ }
-+ }
-+ }
-+ }
-+ return false;
-+}
-+
-+
-+} //end of namespace sd
-diff --git sd/source/ui/ig/IntelligentGroupPane.cxx sd/source/ui/ig/IntelligentGroupPane.cxx
-new file mode 100644
-index 0000000..5bf23c2
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupPane.cxx
-@@ -0,0 +1,521 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: IntelligentGroupPane.cxx,v $
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_sd.hxx"
-+
-+#include "IntelligentGroupPane.hxx"
-+#include "IntelligentGroupPane.hrc"
-+#include "glob.hrc"
-+#include "sdresid.hxx"
-+#include "ViewShellBase.hxx"
-+#include "DrawDocShell.hxx"
-+#include "drawdoc.hxx"
-+#include "DialogListBox.hxx"
-+#include <sfx2/request.hxx>
-+#include <sfx2/viewfrm.hxx>
-+#include "res_bmp.hrc"
-+#include <vcl/bitmap.hxx>
-+#include <sfx2/app.hxx>
-+#include "app.hrc"
-+#include <sfx2/dispatch.hxx>
-+#include <sfx2/bindings.hxx>
-+
-+
-+
-+namespace sd
-+{
-+
-+// ___________________
-+//
-+// IntelligentGroupPane
-+// ___________________
-+
-+IntelligentGroupPane::IntelligentGroupPane(
-+ ::Window * pParent,
-+ ViewShellBase & rBase,
-+ const Size& rMinSize,
-+ SdDrawDocument* pDoc ) :
-+Control( pParent, SdResId( DLG_INTELLIGENTGROUPPANE ) ),
-+
-+ mrBase( rBase ),
-+ mpDrawDoc( pDoc ),
-+ maMinSize( rMinSize )
-+{
-+ mpFLIntelligentGroupLayouts = new FixedLine( this, SdResId( FL_INTELLIGENT_GROUP_LAYOUTS ) );
-+ mpFLIntelligentGroupStyle = new FixedLine( this, SdResId( FL_INTELLIGENT_GROUP_STYLE ) );
-+ mpFLIntelligentGroupThemeColor = new FixedLine( this, SdResId( FL_INTELLIGENT_GROUP_THEME_COLOR ) );
-+
-+ mpVSIntelligentGroupLayouts = new ValueSet( this, SdResId( CT_INTELLIGENT_GROUP_LAYOUTS ) );
-+ mpVSIntelligentGroupLayouts->SetStyle( mpVSIntelligentGroupLayouts->GetStyle() & ~(WB_ITEMBORDER|WB_BORDER) | WB_NO_DIRECTSELECT |
-+ WB_FLATVALUESET | WB_NOBORDER );
-+ mpVSIntelligentGroupLayouts->SetColor();
-+ mpVSIntelligentGroupLayouts->SetExtraSpacing(8);
-+
-+ mpVSIntelligentGroupStyle = new ValueSet( this, SdResId( CT_INTELLIGENT_GROUP_STYLE ) );
-+ mpVSIntelligentGroupStyle->SetStyle( mpVSIntelligentGroupStyle->GetStyle() & ~(WB_ITEMBORDER|WB_BORDER) | WB_NO_DIRECTSELECT |
-+ WB_FLATVALUESET | WB_NOBORDER );
-+ mpVSIntelligentGroupStyle->SetColor();
-+ mpVSIntelligentGroupStyle->SetExtraSpacing(8);
-+
-+ mpVSIntelligentGroupThemeColor = new ValueSet( this, SdResId( CT_INTELLIGENT_GROUP_THEME_COLOR ) );
-+ mpVSIntelligentGroupThemeColor->SetStyle( mpVSIntelligentGroupThemeColor->GetStyle() & ~(WB_ITEMBORDER|WB_BORDER) | WB_NO_DIRECTSELECT |
-+ WB_FLATVALUESET | WB_NOBORDER );
-+ mpVSIntelligentGroupThemeColor->SetColor();
-+ mpVSIntelligentGroupThemeColor->SetExtraSpacing(8);
-+
-+
-+ mpFLSeperator = new FixedLine( this, SdResId( FL_SEPERATOR ) );
-+ mpRBTLayouts = new RadioButton( this, SdResId( RBT_LAYOUTS ) );
-+ mpRBTStyle = new RadioButton( this, SdResId( RBT_STYLE ) );
-+ mpRBTThemeColor = new RadioButton( this, SdResId( RBT_THEME_COLOR ) );
-+ mpLBLayouts = new ListBox( this ,SdResId( LB_LAYOUTS ) );
-+
-+ mpRBTLayouts->Check();
-+ mpLBLayouts->SelectEntryPos(0);
-+
-+ // update the state of radio buttons and list box.
-+ UpdateControlState();
-+
-+ // fill intelligent group layouts preview control in the valueset.
-+ UpdateIntelligentGroupLayouts();
-+
-+ // resize controls according to current size
-+ UpdateLayout();
-+
-+ // set handlers
-+ mpVSIntelligentGroupLayouts->SetSelectHdl( LINK(this, IntelligentGroupPane, LayoutClickHandler) );
-+ mpVSIntelligentGroupStyle->SetSelectHdl( LINK(this, IntelligentGroupPane, StyleClickHandler) );
-+ mpVSIntelligentGroupThemeColor->SetSelectHdl( LINK(this, IntelligentGroupPane, ThemeColorClickHandler) );
-+ mpLBLayouts->SetSelectHdl( LINK(this, IntelligentGroupPane, LayoutsSelectHdl) );
-+ mpRBTLayouts->SetToggleHdl( LINK( this, IntelligentGroupPane, RadioButtonToggled ));
-+ mpRBTStyle->SetToggleHdl( LINK( this, IntelligentGroupPane, RadioButtonToggled ));
-+ mpRBTThemeColor->SetToggleHdl( LINK( this, IntelligentGroupPane, RadioButtonToggled ));
-+
-+ // use no resource ids from here on
-+ FreeResource();
-+}
-+
-+
-+IntelligentGroupPane::~IntelligentGroupPane()
-+{
-+ delete mpFLIntelligentGroupLayouts;
-+ delete mpFLIntelligentGroupStyle;
-+ delete mpFLIntelligentGroupThemeColor;
-+ delete mpVSIntelligentGroupLayouts;
-+ delete mpVSIntelligentGroupStyle;
-+ delete mpVSIntelligentGroupThemeColor;
-+ delete mpFLSeperator;
-+ delete mpRBTLayouts;
-+ delete mpRBTStyle;
-+ delete mpRBTThemeColor;
-+ delete mpLBLayouts;
-+}
-+
-+
-+void IntelligentGroupPane::Resize()
-+{
-+ Size aPaneSize( GetSizePixel() );
-+ Size aValueSetSize( mpVSIntelligentGroupLayouts->GetSizePixel() );
-+ if (IsVisible() && aPaneSize.Width() > 0)
-+ {
-+ // Calculate the number of rows and columns.
-+ if (mpVSIntelligentGroupLayouts->GetItemCount() > 0 && mpRBTLayouts->IsChecked())
-+ {
-+ Image aImage = mpVSIntelligentGroupLayouts->GetItemImage(mpVSIntelligentGroupLayouts->GetItemId(0));
-+ Size aItemSize = mpVSIntelligentGroupLayouts->CalcItemSizePixel ( aImage.GetSizePixel());
-+ aItemSize.Width() += 10;
-+ aItemSize.Height() += 10;
-+ int nColumnCount = ( aPaneSize.Width() - mpVSIntelligentGroupLayouts->GetScrollWidth() ) / aItemSize.Width();
-+ if (nColumnCount < 1)
-+ nColumnCount = 1;
-+ else if (nColumnCount > 4)
-+ nColumnCount = 4;
-+
-+ int nRowCount = (mpVSIntelligentGroupLayouts->GetItemCount() + nColumnCount - 1) / nColumnCount;
-+
-+ if (nRowCount < 4)
-+ mpVSIntelligentGroupLayouts->SetLineCount( 4 );
-+ else
-+ {
-+ int nVisibleRowCount = (aValueSetSize.Height() + 2) / aItemSize.Height();
-+ mpVSIntelligentGroupLayouts->SetLineCount( (nRowCount < nVisibleRowCount) ? (USHORT) nRowCount : (USHORT)nVisibleRowCount );
-+
-+ if ( nRowCount > nVisibleRowCount )
-+ {
-+ mpVSIntelligentGroupLayouts->SetStyle( mpVSIntelligentGroupLayouts->GetStyle() | WB_VSCROLL );
-+ }
-+ }
-+
-+ mpVSIntelligentGroupLayouts->SetColCount( (USHORT)nColumnCount );
-+ }
-+
-+ // Calculate the number of rows and columns.
-+ if (mpVSIntelligentGroupStyle->GetItemCount() > 0 && mpRBTStyle->IsChecked())
-+ {
-+ Image aImage = mpVSIntelligentGroupStyle->GetItemImage(mpVSIntelligentGroupStyle->GetItemId(0));
-+ Size aItemSize = mpVSIntelligentGroupStyle->CalcItemSizePixel ( aImage.GetSizePixel());
-+ aItemSize.Width() += 10;
-+ aItemSize.Height() += 10;
-+ int nColumnCount = ( aPaneSize.Width() - mpVSIntelligentGroupStyle->GetScrollWidth() ) / aItemSize.Width();
-+ if (nColumnCount < 1)
-+ nColumnCount = 1;
-+ else if (nColumnCount > 4)
-+ nColumnCount = 4;
-+
-+ int nRowCount = (mpVSIntelligentGroupStyle->GetItemCount() + nColumnCount - 1) / nColumnCount;
-+
-+ if (nRowCount < 4)
-+ mpVSIntelligentGroupStyle->SetLineCount( 4 );
-+ else
-+ {
-+ int nVisibleRowCount = (aValueSetSize.Height() + 2) / aItemSize.Height();
-+ mpVSIntelligentGroupStyle->SetLineCount( (nRowCount < nVisibleRowCount) ? (USHORT) nRowCount : (USHORT)nVisibleRowCount );
-+
-+ if ( nRowCount > nVisibleRowCount )
-+ {
-+ mpVSIntelligentGroupStyle->SetStyle( mpVSIntelligentGroupLayouts->GetStyle() | WB_VSCROLL );
-+ }
-+ }
-+
-+ mpVSIntelligentGroupStyle->SetColCount( (USHORT)nColumnCount );
-+ }
-+
-+ // Calculate the number of rows and columns.
-+ if (mpVSIntelligentGroupThemeColor->GetItemCount() > 0 && mpRBTThemeColor->IsChecked())
-+ {
-+ Image aImage = mpVSIntelligentGroupThemeColor->GetItemImage(mpVSIntelligentGroupThemeColor->GetItemId(0));
-+ Size aItemSize = mpVSIntelligentGroupThemeColor->CalcItemSizePixel ( aImage.GetSizePixel());
-+ aItemSize.Width() += 10;
-+ aItemSize.Height() += 10;
-+ int nColumnCount = ( aPaneSize.Width() - mpVSIntelligentGroupThemeColor->GetScrollWidth() ) / aItemSize.Width();
-+ if (nColumnCount < 1)
-+ nColumnCount = 1;
-+ else if (nColumnCount > 4)
-+ nColumnCount = 4;
-+
-+ int nRowCount = (mpVSIntelligentGroupThemeColor->GetItemCount() + nColumnCount - 1) / nColumnCount;
-+
-+ if (nRowCount < 4)
-+ mpVSIntelligentGroupThemeColor->SetLineCount( 4 );
-+ else
-+ {
-+ int nVisibleRowCount = (aValueSetSize.Height() + 2) / aItemSize.Height();
-+ mpVSIntelligentGroupThemeColor->SetLineCount( (nRowCount < nVisibleRowCount) ? (USHORT) nRowCount : (USHORT)nVisibleRowCount );
-+
-+ if ( nRowCount > nVisibleRowCount )
-+ {
-+ mpVSIntelligentGroupThemeColor->SetStyle( mpVSIntelligentGroupThemeColor->GetStyle() | WB_VSCROLL );
-+ }
-+ }
-+
-+ mpVSIntelligentGroupThemeColor->SetColCount( (USHORT)nColumnCount );
-+ }
-+ }
-+
-+ UpdateLayout();
-+}
-+
-+
-+static SfxBindings* getBindings( ViewShellBase& rBase )
-+{
-+ if( rBase.GetMainViewShell().get() && rBase.GetMainViewShell()->GetViewFrame() )
-+ return &rBase.GetMainViewShell()->GetViewFrame()->GetBindings();
-+ else
-+ return 0;
-+}
-+
-+
-+void IntelligentGroupPane::UpdateIntelligentGroupLayouts ( void )
-+{
-+ mpVSIntelligentGroupLayouts->Clear();
-+ USHORT nIndex = mpLBLayouts->GetSelectEntryPos();
-+
-+ Bitmap aGroupListBmp( SdResId(BMP_IGLAYOUTS_GROUPEDLIST));
-+ Bitmap aPictureAccentListBmp( SdResId(BMP_IGLAYOUTS_PICTUREACCENTLIST));
-+ Bitmap aTreeBmp( SdResId(BMP_IGLAYOUTS_TREE) );
-+ Bitmap aSimpleFieldBmp( SdResId(BMP_IGLAYOUTS_SIMPLEFIELD) );
-+ Bitmap aBaseCircleBmp( SdResId(BMP_IGLAYOUTS_BASECIRCLE) );
-+
-+ switch( nIndex )
-+ {
-+ case 0: // Insert All the layouts
-+ {
-+ mpVSIntelligentGroupLayouts->InsertItem( 1, aGroupListBmp );
-+ mpVSIntelligentGroupLayouts->InsertItem( 2, aPictureAccentListBmp );
-+ mpVSIntelligentGroupLayouts->InsertItem( 3, aTreeBmp );
-+ mpVSIntelligentGroupLayouts->InsertItem( 4, aSimpleFieldBmp);
-+ mpVSIntelligentGroupLayouts->InsertItem( 5, aBaseCircleBmp );
-+ }
-+ break;
-+
-+ case 1: // Insert List layouts
-+ {
-+ mpVSIntelligentGroupLayouts->InsertItem( 1, aGroupListBmp );
-+ mpVSIntelligentGroupLayouts->InsertItem( 2, aPictureAccentListBmp );
-+ }
-+ break;
-+
-+ case 2: // Insert Process layouts
-+ {
-+ mpVSIntelligentGroupLayouts->InsertItem( 4, aSimpleFieldBmp);
-+ }
-+ break;
-+
-+ case 3: // Insert Cycle layouts
-+ {
-+ mpVSIntelligentGroupLayouts->InsertItem( 5, aBaseCircleBmp );
-+ }
-+ break;
-+
-+ case 4: // Insert Hierarchy layouts
-+ {
-+ mpVSIntelligentGroupLayouts->InsertItem( 3, aTreeBmp );
-+ }
-+ break;
-+
-+ case 5: // Insert Relationship layouts
-+ //TODO
-+ break;
-+
-+ case 6: // Insert Matrix layouts
-+ //TODO
-+ break;
-+ default:
-+ break;
-+ }
-+}
-+
-+
-+void IntelligentGroupPane::UpdateLayout()
-+{
-+ Size aPaneSize( GetSizePixel() );
-+ if( aPaneSize.Width() < maMinSize.Width() )
-+ aPaneSize.Width() = maMinSize.Width();
-+
-+ if( aPaneSize.Height() < maMinSize.Height() )
-+ aPaneSize.Height() = maMinSize.Height();
-+
-+ // We should layout elements from bottom to top.Because the size of topmost
-+ // control rest with the remaining space.
-+ Point aOffset( LogicToPixel( Point(1,1), MAP_APPFONT ) );
-+ long nOffsetX = aOffset.getX();
-+ long nOffsetY = aOffset.getY();
-+ long nOffsetRbtX = LogicToPixel( Point( 6, 1 ), MAP_APPFONT ).getX();
-+
-+ Point aUpperLeft( nOffsetX, aPaneSize.getHeight() - nOffsetY );
-+ long nMaxWidth = aPaneSize.getWidth() - 2*nOffsetX;
-+
-+ // "Theme Color" RadioButton
-+ Size aCtrlSize = mpRBTThemeColor->GetSizePixel();
-+ aCtrlSize.setWidth( mpRBTThemeColor->CalcMinimumSize().getWidth() + nOffsetRbtX );
-+ aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() );
-+ mpRBTThemeColor->SetPosSizePixel( aUpperLeft, aCtrlSize );
-+
-+ // "Style" RadioButton
-+ aCtrlSize = mpRBTStyle->GetSizePixel();
-+ aCtrlSize.setWidth( mpRBTThemeColor->CalcMinimumSize().getWidth() + nOffsetRbtX );
-+ aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - 3*nOffsetY );
-+ mpRBTStyle->SetPosSizePixel( aUpperLeft, aCtrlSize );
-+
-+ // "Layouts" RadioButton
-+ aCtrlSize = mpRBTLayouts->GetSizePixel();
-+ aCtrlSize.setWidth( mpRBTLayouts->CalcMinimumSize().getWidth() + nOffsetRbtX );
-+ aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - 3*nOffsetY );
-+ mpRBTLayouts->SetPosSizePixel( aUpperLeft, aCtrlSize );
-+
-+ // "Layouts select" ListBox
-+ aCtrlSize = mpLBLayouts->GetSizePixel();
-+ aCtrlSize.setWidth( nMaxWidth - mpRBTLayouts->CalcMinimumSize().getWidth() - 2*nOffsetX );
-+ aUpperLeft.setX( mpRBTLayouts->CalcMinimumSize().getWidth() + 4*nOffsetX );
-+ mpLBLayouts->SetPosSizePixel( aUpperLeft, aCtrlSize );
-+ aUpperLeft.setX( nOffsetX );
-+
-+ // Fixedline above "Layouts RadioButton"
-+ aCtrlSize = mpFLSeperator->GetSizePixel();
-+ aCtrlSize.setWidth( nMaxWidth );
-+ aUpperLeft.setY( aUpperLeft.getY() - aCtrlSize.getHeight() - 3*nOffsetY );
-+ mpFLSeperator->SetPosSizePixel( aUpperLeft, aCtrlSize );
-+
-+ // "Intelligent Group Layouts" FixedLine
-+ Point aUpperLeftCorner( 2*nOffsetX, 2*nOffsetY );
-+ aCtrlSize = mpFLIntelligentGroupLayouts->GetSizePixel();
-+ aCtrlSize.setWidth( nMaxWidth );
-+ mpFLIntelligentGroupLayouts->SetPosSizePixel( aUpperLeftCorner, aCtrlSize );
-+
-+ // "Intelligent Group Style" FixedLine
-+ aCtrlSize = mpFLIntelligentGroupStyle->GetSizePixel();
-+ aCtrlSize.setWidth( nMaxWidth );
-+ mpFLIntelligentGroupStyle->SetPosSizePixel( aUpperLeftCorner, aCtrlSize );
-+
-+ // "Intelligent Group Theme Color" FixedLine
-+ aCtrlSize = mpFLIntelligentGroupThemeColor->GetSizePixel();
-+ aCtrlSize.setWidth( nMaxWidth );
-+ mpFLIntelligentGroupThemeColor->SetPosSizePixel( aUpperLeftCorner, aCtrlSize );
-+ aUpperLeftCorner.setY( aUpperLeftCorner.getY() + aCtrlSize.Height() + 3*nOffsetY );
-+ aUpperLeft.setY( aUpperLeft.getY() - nOffsetY );
-+
-+ // "Intelligent Group Valueset" control
-+ aCtrlSize.setWidth( nMaxWidth );
-+ aCtrlSize.setHeight( aUpperLeft.getY() - aUpperLeftCorner.getY() );
-+ mpVSIntelligentGroupLayouts->SetPosSizePixel( aUpperLeftCorner, aCtrlSize );
-+ mpVSIntelligentGroupStyle->SetPosSizePixel( aUpperLeftCorner, aCtrlSize );
-+ mpVSIntelligentGroupThemeColor->SetPosSizePixel( aUpperLeftCorner, aCtrlSize );
-+}
-+
-+
-+::Window * createIntelligentGroupPanel( ::Window* pParent, ViewShellBase& rBase )
-+{
-+ DialogListBox* pWindow = 0;
-+
-+ DrawDocShell* pDocSh = rBase.GetDocShell();
-+ if( pDocSh )
-+ {
-+ pWindow = new DialogListBox( pParent, WB_CLIPCHILDREN|WB_TABSTOP|WB_AUTOHSCROLL );
-+
-+ Size aMinSize( pWindow->LogicToPixel( Size( 80, 230 ), MAP_APPFONT ) );
-+ ::Window* pPaneWindow = new IntelligentGroupPane( pWindow, rBase, aMinSize, pDocSh->GetDoc() );
-+ pWindow->SetChildWindow( pPaneWindow, aMinSize );
-+ pWindow->SetText( pPaneWindow->GetText() );
-+ }
-+
-+ return pWindow;
-+}
-+
-+
-+IMPL_LINK( IntelligentGroupPane, LayoutClickHandler, ValueSet*, EMPTYARG )
-+{
-+ ApplyIntelligentGroupLayout();
-+ return 0;
-+}
-+
-+
-+IMPL_LINK( IntelligentGroupPane, StyleClickHandler, ValueSet*, EMPTYARG )
-+{
-+ AssignStyleToSelectLayout();
-+ return 0;
-+}
-+
-+
-+IMPL_LINK( IntelligentGroupPane, ThemeColorClickHandler, ValueSet*, EMPTYARG )
-+{
-+ AssignThemeColorToSelectLayout();
-+ return 0;
-+}
-+
-+
-+IMPL_LINK( IntelligentGroupPane, RadioButtonToggled, void *, EMPTYARG )
-+{
-+ UpdateControlState();
-+ return 0;
-+}
-+
-+
-+IMPL_LINK(IntelligentGroupPane, LayoutsSelectHdl, ListBox *, EMPTYARG )
-+{
-+ UpdateIntelligentGroupLayouts();
-+ return 0;
-+}
-+
-+void IntelligentGroupPane::UpdateControlState()
-+{
-+ mpFLIntelligentGroupLayouts->Hide();
-+ mpVSIntelligentGroupLayouts->Hide();
-+ mpFLIntelligentGroupStyle->Hide();
-+ mpVSIntelligentGroupStyle->Hide();
-+ mpFLIntelligentGroupThemeColor->Hide();
-+ mpVSIntelligentGroupThemeColor->Hide();
-+ mpLBLayouts->Disable();
-+
-+ if ( mpRBTLayouts->IsChecked() )
-+ {
-+ mpFLIntelligentGroupLayouts->Show();
-+ mpVSIntelligentGroupLayouts->Show();
-+ mpLBLayouts->Enable();
-+ }
-+
-+ if ( mpRBTStyle->IsChecked() )
-+ {
-+ mpFLIntelligentGroupStyle->Show();
-+ mpVSIntelligentGroupStyle->Show();
-+ }
-+
-+ if ( mpRBTThemeColor->IsChecked() )
-+ {
-+ mpFLIntelligentGroupThemeColor->Show();
-+ mpVSIntelligentGroupThemeColor->Show();
-+ }
-+}
-+
-+
-+static SfxDispatcher* getDispatcher( ViewShellBase& rBase )
-+{
-+ if( rBase.GetMainViewShell().get() && rBase.GetMainViewShell()->GetViewFrame() )
-+ return rBase.GetMainViewShell()->GetViewFrame()->GetDispatcher();
-+ else
-+ return 0;
-+}
-+
-+
-+void IntelligentGroupPane::ApplyIntelligentGroupLayout()
-+{
-+ USHORT aLayoutIndex = mpVSIntelligentGroupLayouts->GetSelectItemId();
-+ rtl::OUString sStyleName;
-+ switch(aLayoutIndex)
-+ {
-+ case 1: sStyleName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedList")); break;
-+ case 2: sStyleName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PictureAccentList")); break;
-+ case 3: sStyleName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tree")); break;
-+ case 4: sStyleName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SimpleField"));break;
-+ case 5: sStyleName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BaseCircle"));break;
-+ }
-+ SfxRequest aReq (mrBase.GetViewFrame(), SID_INSERT_INTELLIGENT_GROUP);
-+ aReq.AppendItem( SfxStringItem( SID_INSERT_INTELLIGENT_GROUP, sStyleName ) );
-+ ViewShell* pMainViewShell = mrBase.GetMainViewShell().get();
-+
-+ if ( pMainViewShell )
-+ {
-+ pMainViewShell->ExecuteSlot (aReq);
-+ }
-+}
-+
-+
-+void IntelligentGroupPane::AssignStyleToSelectLayout()
-+{
-+ //TODO:
-+}
-+
-+
-+void IntelligentGroupPane::AssignThemeColorToSelectLayout()
-+{
-+ //TODO:
-+}
-+
-+} // namespace sd
-diff --git sd/source/ui/ig/IntelligentGroupPane.hrc sd/source/ui/ig/IntelligentGroupPane.hrc
-new file mode 100644
-index 0000000..53ce7a5
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupPane.hrc
-@@ -0,0 +1,53 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupPane.hrc,v $
-+ *
-+ * $Revision: 1.4 $
-+ *
-+ * last change: $Author: rt $ $Date: 2005/09/09 03:37:38 $
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#ifndef _SD_INTELLIGENTGROUPPANE_HRC
-+#define _SD_INTELLIGENTGROUPPANE_HRC
-+
-+// spec: 1
-+
-+#define FL_INTELLIGENT_GROUP_LAYOUTS 1
-+#define FL_INTELLIGENT_GROUP_STYLE 2
-+#define FL_INTELLIGENT_GROUP_THEME_COLOR 3
-+#define CT_INTELLIGENT_GROUP_LAYOUTS 4
-+#define CT_INTELLIGENT_GROUP_STYLE 5
-+#define CT_INTELLIGENT_GROUP_THEME_COLOR 6
-+#define FL_SEPERATOR 7
-+#define RBT_LAYOUTS 8
-+#define LB_LAYOUTS 9
-+#define RBT_STYLE 10
-+#define RBT_THEME_COLOR 11
-+
-+#endif // _SD_INTELLIGENTGROUPPANE_HRC
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupPane.hxx sd/source/ui/ig/IntelligentGroupPane.hxx
-new file mode 100644
-index 0000000..377c02c
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupPane.hxx
-@@ -0,0 +1,104 @@
-+/*************************************************************************
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: IntelligentGroupPane.hxx,v $
-+*
-+* $Revision: 1.7 $
-+*
-+* last change: $Author: kz $ $Date: 2006/04/26 20:45:07 $
-+*
-+* The Contents of this file are made available subject to
-+* the terms of GNU Lesser General Public License Version 2.1.
-+*
-+*
-+* GNU Lesser General Public License Version 2.1
-+* =============================================
-+* Copyright 2005 by Sun Microsystems, Inc.
-+* 901 San Antonio Road, Palo Alto, CA 94303, USA
-+*
-+* This library is free software; you can redistribute it and/or
-+* modify it under the terms of the GNU Lesser General Public
-+* License version 2.1, as published by the Free Software Foundation.
-+*
-+* This library 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
-+* Lesser General Public License for more details.
-+*
-+* You should have received a copy of the GNU Lesser General Public
-+* License along with this library; if not, write to the Free Software
-+* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+* MA 02111-1307 USA
-+*
-+************************************************************************/
-+#ifndef SD_INTELLIGENTGOUPPANE_HXX
-+#define SD_INTELLIGENTGOUPPANE_HXX
-+
-+
-+#include <vcl/fixed.hxx>
-+#include <vcl/button.hxx>
-+#include <vcl/lstbox.hxx>
-+//#include <tools/string.hxx>
-+#include <svtools/valueset.hxx>
-+
-+
-+class SdDrawDocument;
-+
-+
-+namespace sd
-+{
-+
-+
-+class ViewShellBase;
-+
-+class IntelligentGroupPane : public Control
-+{
-+public:
-+ explicit IntelligentGroupPane(
-+ ::Window * pParent,
-+ ViewShellBase & rBase,
-+ const Size& rMinSize,
-+ SdDrawDocument* pDoc );
-+ virtual ~IntelligentGroupPane();
-+
-+ virtual void Resize();
-+private:
-+
-+ DECL_LINK( LayoutClickHandler, ValueSet* );
-+ DECL_LINK( StyleClickHandler, ValueSet* );
-+ DECL_LINK( ThemeColorClickHandler, ValueSet* );
-+ DECL_LINK( LayoutsSelectHdl, ListBox * );
-+ DECL_LINK( RadioButtonToggled, void * );
-+
-+ void UpdateLayout();
-+ void UpdateControlState();
-+ void UpdateIntelligentGroupLayouts( );
-+
-+ void ApplyIntelligentGroupLayout();
-+ void AssignStyleToSelectLayout();
-+ void AssignThemeColorToSelectLayout();
-+
-+private:
-+ ViewShellBase & mrBase;
-+ SdDrawDocument * mpDrawDoc;
-+ Size maMinSize;
-+
-+ FixedLine* mpFLIntelligentGroupLayouts;
-+ FixedLine* mpFLIntelligentGroupStyle;
-+ FixedLine* mpFLIntelligentGroupThemeColor;
-+ ValueSet* mpVSIntelligentGroupLayouts;
-+ ValueSet* mpVSIntelligentGroupStyle;
-+ ValueSet* mpVSIntelligentGroupThemeColor;
-+ FixedLine* mpFLSeperator;
-+ PushButton* mpPBEditColorSchemes;
-+ RadioButton* mpRBTLayouts;
-+ ListBox* mpLBLayouts;
-+ RadioButton* mpRBTStyle;
-+ RadioButton* mpRBTThemeColor;
-+};
-+
-+} // namespace sd
-+
-+// SD_COLORSCHEMESPANE_HXX
-+#endif;
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupPane.src sd/source/ui/ig/IntelligentGroupPane.src
-new file mode 100644
-index 0000000..627e6e0
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupPane.src
-@@ -0,0 +1,136 @@
-+/*************************************************************************
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupPane.src,v $
-+ *
-+ * $Revision: 1.9 $
-+ *
-+ * last change: $Author: ihi $ $Date: 2007/04/19 12:16:08 $
-+ *
-+ * The Contents of this file are made available subject to
-+ * the terms of GNU Lesser General Public License Version 2.1.
-+ *
-+ *
-+ * GNU Lesser General Public License Version 2.1
-+ * =============================================
-+ * Copyright 2005 by Sun Microsystems, Inc.
-+ * 901 San Antonio Road, Palo Alto, CA 94303, USA
-+ *
-+ * This library is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License version 2.1, as published by the Free Software Foundation.
-+ *
-+ * This library 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
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with this library; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
-+ * MA 02111-1307 USA
-+ *
-+ ************************************************************************/
-+
-+#include "IntelligentGroupPane.hrc"
-+#include "glob.hrc"
-+#include <svtools/controldims.hrc>
-+
-+Control DLG_INTELLIGENTGROUPPANE
-+{
-+ OutputSize = TRUE;
-+ DialogControl = TRUE;
-+ Size = MAP_APPFONT( 1, 1 );
-+
-+ Text [ en-US ] = "Intelligent Group";
-+
-+ FixedLine FL_INTELLIGENT_GROUP_LAYOUTS
-+ {
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_FIXEDLINE_HEIGHT );
-+ Text [ en-US ] = "Layouts";
-+ };
-+
-+ FixedLine FL_INTELLIGENT_GROUP_STYLE
-+ {
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_FIXEDLINE_HEIGHT );
-+ Text [ en-US ] = "Style";
-+ };
-+
-+ FixedLine FL_INTELLIGENT_GROUP_THEME_COLOR
-+ {
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_FIXEDLINE_HEIGHT );
-+ Text [ en-US ] = "Theme Color";
-+ };
-+
-+ Control CT_INTELLIGENT_GROUP_LAYOUTS
-+ {
-+ Size = MAP_APPFONT( 1, 1 );
-+ Border = TRUE ;
-+ TabStop = TRUE ;
-+ };
-+
-+ Control CT_INTELLIGENT_GROUP_STYLE
-+ {
-+ Size = MAP_APPFONT( 1, 1 );
-+ Border = TRUE ;
-+ TabStop = TRUE ;
-+ };
-+
-+ Control CT_INTELLIGENT_GROUP_THEME_COLOR
-+ {
-+ Size = MAP_APPFONT( 1, 1 );
-+ Border = TRUE ;
-+ TabStop = TRUE ;
-+ };
-+
-+ FixedLine FL_SEPERATOR
-+ {
-+ OutputSize = TRUE;
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_FIXEDLINE_HEIGHT );
-+ };
-+
-+ RadioButton RBT_LAYOUTS
-+ {
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_RADIOBUTTON_HEIGHT );
-+ Text [ en-US ] = "Layouts";
-+ };
-+
-+ ListBox LB_LAYOUTS
-+ {
-+ Size = MAP_APPFONT ( 1 , RSC_CD_DROPDOWN_HEIGHT );
-+ Border = TRUE ;
-+ DropDown = TRUE ;
-+
-+ StringList [ en-US ] =
-+ {
-+ < "ALL" ; > ;
-+ < "List" ; > ;
-+ < "Process" ; > ;
-+ < "Cycle" ; > ;
-+ < "Hierarchy" ; > ;
-+ < "Relationship" ; > ;
-+ < "Matrix" ; > ;
-+ < "Pyramid" ; > ;
-+ };
-+ };
-+
-+ RadioButton RBT_STYLE
-+ {
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_RADIOBUTTON_HEIGHT );
-+ Text [ en-US ] = "Style";
-+ };
-+
-+ RadioButton RBT_THEME_COLOR
-+ {
-+ OutputSize = TRUE;
-+ Size = MAP_APPFONT( 1, RSC_CD_RADIOBUTTON_HEIGHT );
-+ Text [ en-US ] = "Theme Color";
-+ };
-+};
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupShapeAccessor.cxx sd/source/ui/ig/IntelligentGroupShapeAccessor.cxx
-new file mode 100644
-index 0000000..93be96c
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupShapeAccessor.cxx
-@@ -0,0 +1,110 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupShapeAccessor.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupShapeAccessor.hxx"
-+
-+
-+using namespace ::com::sun::star;
-+
-+
-+namespace sd{
-+
-+ IntelligentGroupShapeAccessor::IntelligentGroupShapeAccessor(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ std::vector< std::vector<IntelligentGroupShapeDescriptor> > aShapeDescriptorVector)
-+ : mpModel(pModel),
-+ maShapeDescriptors(aShapeDescriptorVector)
-+ {
-+ }
-+
-+
-+ IntelligentGroupShapeAccessor::~IntelligentGroupShapeAccessor()
-+ {
-+ }
-+
-+
-+ uno::Reference<drawing::XShape> IntelligentGroupShapeAccessor::GetShape(std::vector<sal_Int32> aPathVector)
-+ {
-+ switch (aPathVector.size())
-+ {
-+ case 1:
-+ {
-+ rtl::OUString sText = (maShapeDescriptors.at(aPathVector.at(0))).at(0).Identifier;
-+ return mpModel->GetShape(sText);
-+ }
-+ case 2:
-+ {
-+ rtl::OUString sText = (maShapeDescriptors.at(aPathVector.at(0))).at(aPathVector.at(1)+1).Identifier;
-+ return mpModel->GetShape(sText);
-+ }
-+ default:
-+ return NULL;
-+ }
-+ }
-+
-+
-+ bool IntelligentGroupShapeAccessor::IsOutliner(std::vector<sal_Int32> aPathVector)
-+ {
-+ sal_Int32 nCount = aPathVector.size();
-+ return aPathVector.size() >= 2;
-+ }
-+
-+
-+ sal_Int32 IntelligentGroupShapeAccessor::GetShapeCount(std::vector<sal_Int32> aPathVector)
-+ {
-+ switch (aPathVector.size())
-+ {
-+ case 1:
-+ return maShapeDescriptors.size();
-+ case 2:
-+ return maShapeDescriptors.at(aPathVector.at(0)).size() - 1;
-+ default:
-+ return 0;
-+ }
-+ }
-+
-+
-+ sal_Int32 IntelligentGroupShapeAccessor::GetChildCount(std::vector<sal_Int32> aPathVector)
-+ {
-+ switch (aPathVector.size())
-+ {
-+ case 1:
-+ return maShapeDescriptors.at(aPathVector.at(0)).size() - 1;
-+ case 2:
-+ return 0;
-+ default:
-+ return 0;
-+ }
-+ }
-+
-+
-+}//end of namespace sd
-diff --git sd/source/ui/ig/IntelligentGroupText.cxx sd/source/ui/ig/IntelligentGroupText.cxx
-new file mode 100644
-index 0000000..aade2ff
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupText.cxx
-@@ -0,0 +1,138 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: intelligentgrouptext.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupText.hxx"
-+
-+
-+
-+namespace sd{
-+
-+IntelligentGroupText::IntelligentGroupText(bool bIsUpdateFromShapeAllowed)
-+{
-+ mbIsUpdateFromShapeAllowed = bIsUpdateFromShapeAllowed;
-+
-+ Layout();
-+ Initialize3();
-+}
-+
-+
-+void IntelligentGroupText::Layout ()
-+{
-+ mpText.reset(new IntelligentGroupBulletList());
-+}
-+
-+
-+void IntelligentGroupText::Initialize1 ()
-+{
-+ std::vector<rtl::OUString> aText;
-+ aText.push_back(rtl::OUString::createFromAscii("One"));
-+ aText.push_back(rtl::OUString::createFromAscii("Two"));
-+ aText.push_back(rtl::OUString::createFromAscii("Three"));
-+ aText.push_back(rtl::OUString::createFromAscii("Four"));
-+ aText.push_back(rtl::OUString::createFromAscii("Five"));
-+ mpText->SetText(aText);
-+}
-+
-+
-+void IntelligentGroupText::Initialize2 ()
-+{
-+ std::vector<rtl::OUString> aText;
-+ aText.push_back(rtl::OUString::createFromAscii("January"));
-+ aText.push_back(rtl::OUString::createFromAscii("February"));
-+ aText.push_back(rtl::OUString::createFromAscii("March"));
-+ aText.push_back(rtl::OUString::createFromAscii("April"));
-+ aText.push_back(rtl::OUString::createFromAscii("May"));
-+ aText.push_back(rtl::OUString::createFromAscii("June"));
-+ aText.push_back(rtl::OUString::createFromAscii("July"));
-+ aText.push_back(rtl::OUString::createFromAscii("August"));
-+ aText.push_back(rtl::OUString::createFromAscii("September"));
-+ aText.push_back(rtl::OUString::createFromAscii("October"));
-+ aText.push_back(rtl::OUString::createFromAscii("November"));
-+ aText.push_back(rtl::OUString::createFromAscii("December"));
-+ mpText->SetText(aText);
-+}
-+
-+
-+
-+void IntelligentGroupText::Initialize3 ()
-+{
-+ std::vector<rtl::OUString> aText;
-+ aText.push_back(rtl::OUString::createFromAscii("Earth"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Moon"));
-+ aText.push_back(rtl::OUString::createFromAscii("Mars"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Phobos"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Deimos"));
-+ aText.push_back(rtl::OUString::createFromAscii("Jupiter"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Io"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Europa"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Ganymede"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Callisto"));
-+ aText.push_back(rtl::OUString::createFromAscii("Neptune"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Proteus"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Triton"));
-+ aText.push_back(rtl::OUString::createFromAscii("*Nereid"));
-+ mpText->SetText(aText);
-+}
-+
-+/*
-+void IntelligentGroupText::UpdateList (boost::shared_ptr<IntelligentGroup> pGroup)
-+{
-+ if ( ! mbIsUpdateFromShapeAllowed)
-+ return;
-+ // When there is no group selected then leave without
-+ // clearing the current content.
-+ if (pGroup.get() == NULL)
-+ return;
-+
-+ mpText->Clear();
-+ boost::shared_ptr<IntelligentGroupModel> pModel = pGroup->GetModel();
-+ if (pModel.get() == NULL)
-+ return;
-+
-+ boost::shared_ptr<IntelligentGroupTextIterator> pIterator = pGroup->GetLayouter()->CreateTextIterator();
-+ boost::shared_ptr<IntelligentGroupFlatTextIterator> pFlatIterator(new IntelligentGroupFlatTextIterator(pIterator));
-+
-+ while (pFlatIterator->GotoNext())
-+ {
-+ mpText->AddText(pFlatIterator->GetLevel(), pFlatIterator->GetText());
-+ }
-+}
-+*/
-+
-+boost::shared_ptr<IntelligentGroupTextIterator> IntelligentGroupText::CreateIterator()
-+{
-+ return mpText->CreateIterator();
-+}
-+
-+
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/IntelligentGroupTextIterator.cxx sd/source/ui/ig/IntelligentGroupTextIterator.cxx
-new file mode 100644
-index 0000000..49998ca
---- /dev/null
-+++ sd/source/ui/ig/IntelligentGroupTextIterator.cxx
-@@ -0,0 +1,112 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupTextIterator.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "IntelligentGroupTextIterator.hxx"
-+
-+namespace sd{
-+
-+IntelligentGroupTextIterator::IntelligentGroupTextIterator()
-+{
-+ mnCurrentIndex = 0;
-+ mnCurrentLevel = 0;
-+ mnCurrentIndexOnLevel = 0;
-+}
-+
-+
-+IntelligentGroupTextIterator::~IntelligentGroupTextIterator()
-+{
-+ maIndexPath.clear();
-+}
-+
-+
-+IntelligentGroupTextIterator::IntelligentGroupTextIterator(IntelligentGroupTextIterator* pIterator)
-+{
-+ mnCurrentIndex = pIterator->mnCurrentIndex;
-+ mnCurrentLevel = pIterator->mnCurrentLevel;
-+ mnCurrentIndexOnLevel = pIterator->mnCurrentIndexOnLevel;
-+
-+ sal_Int32 nCount = pIterator->maIndexPath.size();
-+ for (sal_Int32 nIndex=0; nIndex<nCount; ++nIndex)
-+ maIndexPath.push_back(pIterator->maIndexPath[nIndex]);
-+}
-+
-+
-+
-+sal_Int32 IntelligentGroupTextIterator::GetLevel()
-+{
-+ return mnCurrentLevel;
-+}
-+
-+
-+bool IntelligentGroupTextIterator::HasParent()
-+{
-+ return mnCurrentLevel>0;
-+}
-+
-+
-+void IntelligentGroupTextIterator::Down ()
-+{
-+ ++mnCurrentLevel;
-+ maIndexPath.push_back(mnCurrentIndexOnLevel);
-+ mnCurrentIndexOnLevel = 0;
-+}
-+
-+
-+void IntelligentGroupTextIterator::Up ()
-+{
-+ --mnCurrentLevel;
-+ mnCurrentIndexOnLevel = maIndexPath.back();
-+ maIndexPath.pop_back();
-+}
-+
-+
-+sal_Int32 IntelligentGroupTextIterator::GetParentIndex (const sal_Int32 nLevel)
-+{
-+ return maIndexPath[nLevel];
-+}
-+
-+
-+
-+bool IntelligentGroupTextIterator::Rewind ()
-+{
-+ mnCurrentIndex = 0;
-+ mnCurrentLevel = 0;
-+ mnCurrentIndexOnLevel = 0;
-+ maIndexPath.clear();
-+ return true;
-+}
-+
-+
-+}
-+
-+
-+
-diff --git sd/source/ui/ig/LayoutBase.cxx sd/source/ui/ig/LayoutBase.cxx
-new file mode 100644
-index 0000000..f750389
---- /dev/null
-+++ sd/source/ui/ig/LayoutBase.cxx
-@@ -0,0 +1,190 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: layoutbase.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_sd.hxx"
-+
-+#include "LayoutBase.hxx"
-+
-+using namespace ::com::sun::star;
-+
-+namespace sd{
-+
-+LayoutBase::LayoutBase(
-+ IntelligentGroupModel* pModel,
-+ LayoutDescriptor* pDescriptor)
-+ :mpModel(pModel)
-+ ,mpLayoutDescriptor(pDescriptor)
-+{
-+}
-+
-+LayoutDescriptor* LayoutBase::GetLayoutDescriptor(void)
-+{
-+ return mpLayoutDescriptor;
-+}
-+
-+ShapeDescriptor LayoutBase::GetShapeDescriptor(
-+ const rtl::OUString sShapeIdentifier,
-+ const ig::ShapeRole eRole,
-+ const IntelligentGroupStyle aStyle)
-+{
-+ ShapeDescriptor aShapeDescriptor;
-+ aShapeDescriptor.Shape = mpModel->GetShape(sShapeIdentifier);
-+ aShapeDescriptor.Identifier = sShapeIdentifier;
-+ aShapeDescriptor.Role = eRole;
-+ aShapeDescriptor.Style = aStyle;
-+ aShapeDescriptor.Exists = aShapeDescriptor.Shape!=NULL;
-+ if (aShapeDescriptor.Exists)
-+ {
-+ aShapeDescriptor.ShapeLocation = aShapeDescriptor.Shape->getPosition();
-+ aShapeDescriptor.ShapeSize = aShapeDescriptor.Shape->getSize();
-+ }
-+ else
-+ {
-+ aShapeDescriptor.Shape = CreateShape(aShapeDescriptor.Identifier);
-+ mpModel->AddShape(aShapeDescriptor.Identifier, aShapeDescriptor.Role, aShapeDescriptor.Shape);
-+ }
-+
-+ return aShapeDescriptor;
-+}
-+
-+void LayoutBase::MoveShapeIntoGroupBoundingBox (
-+ ShapeDescriptor& aDescriptor,
-+ awt::Rectangle aGroupBoundingBox)
-+{
-+ if ( ! aDescriptor.Exists)
-+ {
-+ // Shape has just been created and is at its default position.
-+ return;
-+ }
-+
-+ bool bLocationModified = false;
-+ awt::Point aLocation(
-+ aDescriptor.ShapeLocation.X,
-+ aDescriptor.ShapeLocation.Y);
-+ if (aLocation.Y < aGroupBoundingBox.Y)
-+ {
-+ aLocation.Y = aGroupBoundingBox.Y;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.Y+aDescriptor.ShapeSize.Height > aGroupBoundingBox.Y+aGroupBoundingBox.Height)
-+ {
-+ aLocation.Y = aGroupBoundingBox.Y+aGroupBoundingBox.Height-aDescriptor.ShapeSize.Height;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.X < aGroupBoundingBox.X)
-+ {
-+ aLocation.X = aGroupBoundingBox.X;
-+ bLocationModified = true;
-+ }
-+ if (aLocation.X+aDescriptor.ShapeSize.Width > aGroupBoundingBox.X+aGroupBoundingBox.Width)
-+ {
-+ aLocation.X = aGroupBoundingBox.X+aGroupBoundingBox.Width-aDescriptor.ShapeSize.Width;
-+ bLocationModified = true;
-+ }
-+
-+ if (bLocationModified)
-+ {
-+ // Place the shape at the corrected location.
-+ aDescriptor.Shape->setPosition(aLocation);
-+
-+ if (aDescriptor.LocationTransformation.X != 0 && aDescriptor.LocationTransformation.Y != 0)
-+ {
-+ // Now that the location of the shape has been corrected,
-+ // we have to figure out how the correction affects the
-+ // location transformation (manual translation made by user).
-+
-+ // Calculate the corrections that have to be made to the current
-+ // location in order to move the shape inside the bounding box of
-+ // the group.
-+ const int nDX = aLocation.X - aDescriptor.ShapeLocation.X;
-+ const int nDY = aLocation.Y - aDescriptor.ShapeLocation.Y;
-+
-+ // If we change the location transformation at all then we reduce it.
-+ // This is the case only when the current transformation and
-+ // the correction have different signs.
-+ if (aDescriptor.LocationTransformation.X * nDX < 0)
-+ {
-+ const sal_Int32 nNewFirst = aDescriptor.LocationTransformation.X + nDX;
-+ // We must not overshoot. When the correction is larger (in absolute value)
-+ // then the location transformation then set the later to 0.
-+ if (nNewFirst * aDescriptor.LocationTransformation.X <= 0)
-+ aDescriptor.LocationTransformation.X = 0;
-+ else
-+ aDescriptor.LocationTransformation.X = nNewFirst;
-+ }
-+
-+ // Now do the same with the other coordinate.
-+ if (aDescriptor.LocationTransformation.Y * nDY < 0)
-+ {
-+ const sal_Int32 nNewSecond = aDescriptor.LocationTransformation.Y + nDY;
-+ // We must not overshoot. When the correction is larger (in absolute value)
-+ // then the location transformation then set the later to 0.
-+ if (nNewSecond * aDescriptor.LocationTransformation.Y <= 0)
-+ aDescriptor.LocationTransformation.Y = 0;
-+ else
-+ aDescriptor.LocationTransformation.Y = nNewSecond;
-+ }
-+ }
-+
-+ // Remember the new location.
-+ aDescriptor.ShapeLocation = aLocation;
-+ }
-+}
-+
-+void LayoutBase::SetSizeLocation (ShapeDescriptor& aDescriptor)
-+{
-+ if ( ! aDescriptor.Exists)
-+ {
-+ aDescriptor.Shape->setPosition(aDescriptor.DefaultLocation);
-+ aDescriptor.Shape->setSize(aDescriptor.DefaultSize);
-+ }
-+ else
-+ {
-+ awt::Point aLocation = aDescriptor.DefaultLocation;
-+ if (aDescriptor.LocationTransformation.X != 0 && aDescriptor.LocationTransformation.Y != 0)
-+ {
-+ aLocation.X += aDescriptor.LocationTransformation.X;
-+ aLocation.Y += aDescriptor.LocationTransformation.Y;
-+ }
-+ aDescriptor.Shape->setPosition(aLocation);
-+ aDescriptor.Shape->setSize(aDescriptor.DefaultSize);
-+ aDescriptor.ShapeLocation = aLocation;
-+ aDescriptor.ShapeSize = aDescriptor.DefaultSize;
-+ }
-+}
-+
-+bool LayoutBase::IsGeometryModified(const ShapeDescriptor& aDescriptor)
-+{ return aDescriptor.Exists
-+ && ((aDescriptor.SizeTransformation.Width!=0 && aDescriptor.SizeTransformation.Height!=0)||
-+ (aDescriptor.LocationTransformation.X!=0 && aDescriptor.LocationTransformation.Y!=0));
-+}
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/ListLayoutAlgorithm.cxx sd/source/ui/ig/ListLayoutAlgorithm.cxx
-new file mode 100644
-index 0000000..b353fe3
---- /dev/null
-+++ sd/source/ui/ig/ListLayoutAlgorithm.cxx
-@@ -0,0 +1,170 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: ListLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#include "ListLayoutAlgorithm.hxx"
-+#include "IntelligentGroupLayoutBase.hxx"
-+
-+
-+namespace sd {
-+
-+
-+ListLayoutAlgorithm::ListLayoutAlgorithm(const ig::Orientation eOrientation)
-+{
-+ meOrientation = eOrientation;
-+}
-+
-+
-+ListLayoutAlgorithm::~ListLayoutAlgorithm()
-+{
-+}
-+
-+
-+void ListLayoutAlgorithm::PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor>>& rShapeDescriptorVector,
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ css::awt::Rectangle aGroupBoundingBox)
-+{
-+ // There is one group of shapes for every top of level text entry.
-+// const sal_Int32 nCount = rShapeDescriptorVector.size();
-+ const sal_Int32 nCount = pModel->GetShapeGroupCount();
-+ if (nCount == 0)
-+ {
-+ // There are no text entries => Nothing to do.
-+ return;
-+ }
-+
-+ const double nGap = pLayout->GetGap(aGroupBoundingBox);
-+
-+ // Determine the available size.
-+ const sal_Int32 nAvailableSize = Project(aGroupBoundingBox.Width, aGroupBoundingBox.Height, true) - sal_Int32((nCount-1)*nGap);
-+
-+ // The default size depends on the available size and the number of
-+ // shape groups but not an the actual sizes of the shape groups.
-+ const sal_Int32 nDefaultSize = (sal_Int32)(nAvailableSize / nCount);
-+
-+ // Setup an array of the weights of the individual shape groups.
-+ std::vector<sal_Int32> aWeightsVector;
-+ sal_Int32 nTotalWeight = 0;
-+ for (sal_Int32 nIndex = 0; nIndex < nCount; nIndex++)
-+ {
-+ css::awt::Size aBoundingSize = pLayout->GetBoundingSize( nIndex,
-+ css::awt::Size(nDefaultSize, aGroupBoundingBox.Height),
-+// rShapeDescriptorVector[nIndex] );
-+ pModel->GetShapeDescriptorVector(nIndex));
-+ sal_Int32 nWeight = aBoundingSize.Width;
-+
-+ if (nWeight == 0)
-+ nWeight = nDefaultSize;
-+ else if (nWeight < 0)
-+ nWeight =- nWeight;
-+
-+ nTotalWeight =+ nWeight;
-+ aWeightsVector.push_back(nWeight);
-+ }
-+
-+ // Scale all shapes up or down so that they fit the available size.
-+ double nScale = nAvailableSize / nTotalWeight;
-+
-+ // Scale and place the shape groups.
-+ sal_Int32 nPosition = 0;
-+ for (sal_Int32 nIndex = 0; nIndex < nCount; nIndex++)
-+ {
-+ const css::awt::Point aRelativePosition = CreatePosition(nPosition, 0);
-+ const sal_Int32 nWidth = sal_Int32(aWeightsVector.at(nIndex) * nScale + 0.5);
-+
-+ pLayout->PlaceShapes(
-+// rShapeDescriptorVector[nIndex],
-+ nIndex,
-+ css::awt::Rectangle(
-+ aGroupBoundingBox.X + aRelativePosition.X,
-+ aGroupBoundingBox.Y + aRelativePosition.Y,
-+ //nWidth,
-+ nWidth/nCount,
-+ aGroupBoundingBox.Height),
-+ aGroupBoundingBox,
-+ css::awt::Size((sal_Int32)nDefaultSize, aGroupBoundingBox.Height),
-+ nScale );
-+
-+ //nPosition += nWidth + nGap;
-+ nPosition += sal_Int32(nWidth/nCount + nGap);
-+ }
-+}
-+
-+
-+sal_Int32 ListLayoutAlgorithm::Project(const sal_Int32 nFirst, const sal_Int32 nSecond, const bool bProjectToPrimaryAxis)
-+{
-+ switch( meOrientation)
-+ {
-+ case ig::Horizontal:
-+ if (bProjectToPrimaryAxis)
-+ return nFirst;
-+ else
-+ return nSecond;
-+ case ig::Vertical:
-+ if (bProjectToPrimaryAxis)
-+ return nSecond;
-+ else
-+ return nFirst;
-+ default:
-+ return 0; // It's better to throw a exception.
-+ }
-+}
-+
-+
-+css::awt::Size ListLayoutAlgorithm::CreateSize(const sal_Int32 nSizeOnPrimaryAxis, const sal_Int32 nSizeOnSecondaryAxis)
-+{
-+ switch(meOrientation)
-+ {
-+ case ig::Horizontal:
-+ return css::awt::Size(nSizeOnPrimaryAxis, nSizeOnSecondaryAxis);
-+ case ig::Vertical:
-+ return css::awt::Size(nSizeOnSecondaryAxis, nSizeOnPrimaryAxis);
-+ default:
-+ return css::awt::Size(0 ,0); // It's better to throw a exception.
-+ }
-+}
-+
-+
-+css::awt::Point ListLayoutAlgorithm::CreatePosition(const sal_Int32 nPositionOnPrimaryAxis, const sal_Int32 nPositionOnSecondaryAxis)
-+{
-+ switch(meOrientation)
-+ {
-+ case ig::Horizontal:
-+ return css::awt::Point(nPositionOnPrimaryAxis, nPositionOnSecondaryAxis);
-+ case ig::Vertical:
-+ return css::awt::Point(nPositionOnSecondaryAxis, nPositionOnPrimaryAxis);
-+ default:
-+ return css::awt::Point(0, 0); // It's better to throw a exception.
-+ }
-+}
-+
-+
-+}
-\ No newline at end of file
-diff --git sd/source/ui/ig/PictureAccentListLayout.cxx sd/source/ui/ig/PictureAccentListLayout.cxx
-new file mode 100644
-index 0000000..2ae1c0f
---- /dev/null
-+++ sd/source/ui/ig/PictureAccentListLayout.cxx
-@@ -0,0 +1,286 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: PictureAccentListLayout.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "PictureAccentListLayout.hxx"
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/drawing/FillStyle.hpp>
-+#include <com/sun/star/drawing/LineStyle.hpp>
-+#include <com/sun/star/style/ParagraphAdjust.hpp>
-+#include <com/sun/star/drawing/ColorMode.hpp>
-+#include <com/sun/star/drawing/XDrawPage.hpp>
-+#include <com/sun/star/drawing/TextFitToSizeType.hpp>
-+#include <com/sun/star/text/WritingMode.hpp>
-+#include <svtools/colorcfg.hxx>
-+
-+using namespace ::com::sun::star;
-+
-+namespace sd{
-+
-+PictureAccentListLayout::PictureAccentListLayout(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+ :IntelligentGroupLayoutBase(pModel,pDescriptor)
-+{
-+}
-+
-+double PictureAccentListLayout::GetGap( awt::Rectangle aGroupBoundingBox )
-+{
-+ return aGroupBoundingBox.Width / 50;
-+}
-+
-+awt::Size PictureAccentListLayout::GetBoundingSize (
-+ sal_Int32 nIndex,
-+ awt::Size aDefaultSize,
-+ std::vector<IntelligentGroupShapeDescriptor> aDescriptors)
-+{
-+ uno::Reference<drawing::XShape> xTopLevelTextShape = mpModel->GetShape(GetShapeName(ig::TopLevelText, nIndex));
-+ uno::Reference<drawing::XShape> xSecondLevelTextShape = mpModel->GetShape(GetShapeName(ig::SecondLevelText, nIndex));
-+ uno::Reference<drawing::XShape> xAccentShape = mpModel->GetShape(GetShapeName(ig::Image, nIndex));
-+ if (xTopLevelTextShape.is() && xSecondLevelTextShape.is() && xAccentShape.is())
-+ {
-+ sal_Int32 nTopLevelTextShapeWidth = xTopLevelTextShape->getSize().Width;
-+ sal_Int32 nSecondLevelTextShapeWidth = xSecondLevelTextShape->getSize().Width;
-+ sal_Int32 nAccentWidth = xAccentShape->getSize().Width;
-+ // The accent image is centered on the left side of the second level text shape.
-+ // Take it only into account when it is wider then the top level text shape on its left or
-+ // the second level text shape on its right.
-+ sal_Int32 nWidth = (sal_Int32)(std::max(nAccentWidth/2,nTopLevelTextShapeWidth)
-+ + std::max(nAccentWidth/2, nSecondLevelTextShapeWidth) + 0.5);
-+
-+ if ( ! (IsGeometryModified(aDescriptors[0])
-+ || IsGeometryModified(aDescriptors[1])
-+ || IsGeometryModified(aDescriptors[2])))
-+ {
-+ // The shapes do not yet exist or their geometry has not been modified manually.
-+ return aDefaultSize;
-+ }
-+
-+ return awt::Size(nWidth, aDefaultSize.Height);
-+ }
-+ else
-+ {
-+ // The shape does not yet exist. When it is later created then it
-+ // will have the default width.
-+ return aDefaultSize;
-+ }
-+}
-+
-+std::vector<IntelligentGroupShapeDescriptor> PictureAccentListLayout::PrepareShapes (boost::shared_ptr<IntelligentGroupTextIterator> /*pTextIterator*/, sal_Int32 nIndex, bool bCreatedByUser)
-+{
-+ std::vector<IntelligentGroupShapeDescriptor> aDescriptors;
-+
-+ IntelligentGroupStyle aStyle;
-+
-+ aStyle.aBackground = IntelligentGroupStyle::None_Background;
-+ aStyle.aBorder = IntelligentGroupStyle::None_Border;
-+ aStyle.aText = IntelligentGroupStyle::Primary;
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ GetShapeName(ig::TopLevelText, nIndex),
-+ ig::Primary,
-+ aStyle));
-+
-+ aStyle.aBackground = IntelligentGroupStyle::Foreground;
-+ aStyle.aBorder = IntelligentGroupStyle::Regular;
-+ aStyle.aText = IntelligentGroupStyle::Secondary;
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ GetShapeName(ig::SecondLevelText, nIndex),
-+ ig::Primary,
-+ aStyle));
-+
-+ aStyle.aBackground = IntelligentGroupStyle::Accent;
-+ aStyle.aBorder = IntelligentGroupStyle::None_Border;
-+ aStyle.aText = IntelligentGroupStyle::None_Text;
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ GetShapeName(ig::Image, nIndex),
-+ ig::Accent,
-+ aStyle));
-+
-+ if(!bCreatedByUser)
-+ mpModel->AddShapeGroup(aDescriptors, mpModel->GetShapeGroupCount());
-+
-+ return aDescriptors;
-+}
-+
-+//void PictureAccentListLayout::PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aShapeDescriptors,
-+void PictureAccentListLayout::PlaceShapes(sal_Int32 nShapeGroupIndex,
-+ awt::Rectangle aBoundingBox,
-+ awt::Rectangle aGroupBoundingBox,
-+ awt::Size aDefaultSize,
-+ double /*nScale*/)
-+{ // Provide default sizes and locations.
-+ sal_Int32 nAccentSize = (sal_Int32)(aDefaultSize.Width*2/7+0.5);
-+ sal_Int32 nTopLevelTextWidth = (sal_Int32)aBoundingBox.Width*1/4;
-+// IntelligentGroupShapeDescriptor aSecondLevelTextDescriptor = aShapeDescriptors[1];
-+ IntelligentGroupShapeDescriptor aSecondLevelTextDescriptor;
-+ aSecondLevelTextDescriptor.DefaultLocation =awt::Point(
-+ long(aBoundingBox.X + std::max(nAccentSize/2, nTopLevelTextWidth)),
-+ long(aBoundingBox.Y + nAccentSize*2/3));
-+ aSecondLevelTextDescriptor.DefaultSize = awt::Size(
-+ long(aBoundingBox.Width*3/4),
-+ long(aBoundingBox.Height - nAccentSize*2/3));
-+
-+// IntelligentGroupShapeDescriptor aTopLevelTextDescriptor = aShapeDescriptors[0];
-+ IntelligentGroupShapeDescriptor aTopLevelTextDescriptor;
-+ aTopLevelTextDescriptor.DefaultLocation = awt::Point(
-+ aBoundingBox.X,
-+ aBoundingBox.Y + nAccentSize);
-+ aTopLevelTextDescriptor.DefaultSize = awt::Size(
-+ nTopLevelTextWidth,
-+ aBoundingBox.Height - nAccentSize);
-+
-+// IntelligentGroupShapeDescriptor aAccentDescriptor = aShapeDescriptors[2];
-+ IntelligentGroupShapeDescriptor aAccentDescriptor;
-+ aAccentDescriptor.DefaultLocation = awt::Point(
-+ long(aBoundingBox.X + std::max(nAccentSize/2, nTopLevelTextWidth) - nAccentSize/2),
-+ aBoundingBox.Y);
-+ aAccentDescriptor.DefaultSize = awt::Size (
-+ nAccentSize,
-+ nAccentSize);
-+
-+ // Move shapes into the bounding box of the enclosing group.
-+// MoveShapeIntoGroupBoundingBox(aTopLevelTextDescriptor, aGroupBoundingBox);
-+// MoveShapeIntoGroupBoundingBox(aSecondLevelTextDescriptor,aGroupBoundingBox);
-+// MoveShapeIntoGroupBoundingBox(aAccentDescriptor, aGroupBoundingBox);
-+
-+ sal_Int32 nShapeDescriptorIndex = mpModel->GetShapeDescriptorIndex(nShapeGroupIndex,0);
-+ mpModel->SetSizeLocation(nShapeDescriptorIndex,aTopLevelTextDescriptor);
-+ mpModel->SetSizeLocation(nShapeDescriptorIndex+1,aSecondLevelTextDescriptor);
-+ mpModel->SetSizeLocation(nShapeDescriptorIndex+2,aAccentDescriptor);
-+ for(sal_Int32 nIndex = nShapeDescriptorIndex; nIndex<=nShapeDescriptorIndex+2; nIndex++)
-+ mpModel->MoveShapeIntoGroupBoundingBox(nIndex, aGroupBoundingBox);
-+
-+}
-+
-+uno::Reference<drawing::XShape> PictureAccentListLayout::CreateShape(rtl::OUString aIdentifier)
-+{
-+ uno::Reference<drawing::XShape> xShape = NULL;
-+
-+ ig::ShapeClass eClass = GetClassForName(aIdentifier);
-+ uno::Reference<beans::XPropertySet> xProperties;
-+
-+ switch (eClass)
-+ {
-+ case ig::TopLevelText:
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.TextShape"))),
-+ uno::UNO_QUERY);
-+ xProperties = uno::Reference<beans::XPropertySet>(xShape, uno::UNO_QUERY);
-+ if (xProperties.is())
-+ {
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("TextWritingMode"), uno::makeAny(text::WritingMode_TB_RL));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("CornerRadius"), uno::makeAny((sal_Int32)100));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillStyle"), uno::makeAny(drawing::FillStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillColor"), uno::makeAny(sal_Int32(0xA90052)));
-+ }
-+ }
-+ break;
-+
-+ case ig::SecondLevelText:
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.OutlinerShape"))),
-+ uno::UNO_QUERY);
-+ xProperties = uno::Reference<beans::XPropertySet>(xShape, uno::UNO_QUERY);
-+ if (xProperties.is())
-+ {
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("CornerRadius"), uno::makeAny((sal_Int32)200));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillStyle"), uno::makeAny(drawing::FillStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillColor"), uno::makeAny(sal_Int32(0x2E8B57)));
-+ }
-+ }
-+ break;
-+ case ig::Image:
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.presentation.GraphicObjectShape"))),
-+ uno::UNO_QUERY);
-+ xProperties = uno::Reference<beans::XPropertySet>(xShape, uno::UNO_QUERY);
-+ if (xProperties.is())
-+ {
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("CornerRadius"), uno::makeAny((sal_Int32)50));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillStyle"), uno::makeAny(drawing::FillStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillColor"), uno::makeAny(sal_Int32(0xA90052)));
-+ }
-+ }
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ if (xShape.is())
-+ {
-+ xShape->setSize(awt::Size(0,0));
-+ }
-+
-+ return xShape;
-+}
-+
-+
-+rtl::OUString PictureAccentListLayout::GetShapePrefix(ig::ShapeClass eClass)
-+{
-+ rtl::OUString aShapePrefix;
-+ switch (eClass)
-+ {
-+ case ig::TopLevelText : aShapePrefix = rtl::OUString::createFromAscii("Primary"); break;
-+ case ig::SecondLevelText : aShapePrefix = rtl::OUString::createFromAscii("Secondary"); break;
-+ case ig::Image: aShapePrefix = rtl::OUString::createFromAscii("Image"); break;
-+ }
-+ return aShapePrefix;
-+}
-+
-+rtl::OUString PictureAccentListLayout::GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex)
-+{
-+ return GetShapePrefix(eClass) + rtl::OUString::valueOf(nIndex);
-+}
-+
-+
-+ig::ShapeClass PictureAccentListLayout::GetClassForName(rtl::OUString sIdentifier)
-+{
-+ ig::ShapeClass eShapeClass, eClass1 = ig::TopLevelText, eClass2 = ig::SecondLevelText, eClass3 = ig::Image;
-+ if(sIdentifier.match(GetShapePrefix(eClass1)))
-+ eShapeClass = eClass1;
-+ else if(sIdentifier.match(GetShapePrefix(eClass2)))
-+ eShapeClass = eClass2;
-+ else if(sIdentifier.match(GetShapePrefix(eClass3)))
-+ eShapeClass = eClass3;
-+
-+ return eShapeClass;
-+
-+}
-+
-+
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/RowFieldLayoutAlgorithm.cxx sd/source/ui/ig/RowFieldLayoutAlgorithm.cxx
-new file mode 100644
-index 0000000..97c7382
---- /dev/null
-+++ sd/source/ui/ig/RowFieldLayoutAlgorithm.cxx
-@@ -0,0 +1,51 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: RowFieldLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+
-+#include "RowFieldLayoutAlgorithm.hxx"
-+
-+
-+namespace sd {
-+
-+
-+
-+RowFieldLayoutAlgorithm::RowFieldLayoutAlgorithm()
-+:FieldLayoutAlgorithm( ig::Horizontal )
-+{
-+}
-+
-+
-+RowFieldLayoutAlgorithm::~RowFieldLayoutAlgorithm()
-+{
-+}
-+
-+
-+}
-\ No newline at end of file
-diff --git sd/source/ui/ig/SelectionManager.cxx sd/source/ui/ig/SelectionManager.cxx
-new file mode 100644
-index 0000000..e7f43b7
---- /dev/null
-+++ sd/source/ui/ig/SelectionManager.cxx
-@@ -0,0 +1,299 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: selectionmanager.cxx,v $
-+ * $Revision: 1.1 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "SelectionManager.hxx"
-+#include <com/sun/star/container/XIndexAccess.hpp>
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+
-+#include <com/sun/star/drawing/XDrawPage.hpp>
-+#include "View.hxx"
-+#include "framework/FrameworkHelper.hxx"
-+
-+using namespace ::com::sun::star;
-+using ::sd::framework::FrameworkHelper;
-+
-+namespace sd{
-+
-+SelectionManager::SelectionManager(uno::Reference<frame::XController> xController,
-+ uno::Reference<frame::XModel> xModel)
-+{
-+ mxController = xController;
-+ mxModel = xModel;
-+ mpIntelligentGroupFrame = 0;
-+
-+ if (xController.is())
-+ {
-+ mxSelectionSupplier = uno::Reference<view::XSelectionSupplier>(
-+ xController, uno::UNO_QUERY );
-+ if (mxSelectionSupplier.is())
-+ mxSelectionSupplier->addSelectionChangeListener(this);
-+
-+ uno::Reference< beans::XPropertySet > xPropertySet (
-+ xController, uno::UNO_QUERY );
-+ if ( xPropertySet.is() )
-+ xPropertySet->addPropertyChangeListener( ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage")), this );
-+ }
-+}
-+
-+SelectionManager::~SelectionManager()
-+{
-+ if(mpIntelligentGroupFrame != NULL)
-+ {
-+ mpIntelligentGroupFrame->Dispose();
-+ mpIntelligentGroupFrame = 0;
-+ }
-+
-+ IntelligentGroup::Dispose();
-+}
-+
-+boost::shared_ptr<IntelligentGroup> SelectionManager::GetSelectedIntelligentGroup()
-+{
-+ if (mpSelectedIntelligentGroup.get() == NULL && mxSelectedShape.is())
-+ mpSelectedIntelligentGroup = IntelligentGroup::Instance(mxModel, mxSelectedShape);
-+
-+ return mpSelectedIntelligentGroup;
-+}
-+
-+bool SelectionManager::IsSelectedIntelligentGroupEntered()
-+{
-+ return mbIsEntered;
-+}
-+
-+void SelectionManager::DisposeFrame()
-+{
-+ if( mpIntelligentGroupFrame != NULL )
-+ {
-+ mpIntelligentGroupFrame->Dispose();
-+ mpIntelligentGroupFrame = 0;
-+ }
-+}
-+
-+
-+void SAL_CALL
-+SelectionManager::selectionChanged (const ::com::sun::star::lang::EventObject& /*rEvent*/)
-+throw (::com::sun::star::uno::RuntimeException)
-+{
-+ uno::Reference<drawing::XShape> xShape = GetSelectedShape();
-+ SetSelectedShape(xShape);
-+
-+ boost::shared_ptr<ViewShell> pCenterViewShell =
-+ FrameworkHelper::Instance(mxController)->
-+ GetViewShell(framework::FrameworkHelper::msCenterPaneURL);
-+ if (pCenterViewShell.get() != NULL)
-+ {
-+ if(mpIntelligentGroupFrame == NULL && xShape.is() && mbIsEntered)
-+ {
-+ if(pCenterViewShell->GetShellType() == ViewShell::ST_IMPRESS)
-+ {
-+ sd::View* pView = pCenterViewShell->GetView();
-+ mpIntelligentGroupFrame = new IntelligentGroupFrame(mpSelectedIntelligentGroup->GetModel(),*pView);
-+ mpIntelligentGroupFrame->SetLayouter(mpSelectedIntelligentGroup->GetLayouter());
-+ }
-+ }
-+ else if(mpIntelligentGroupFrame != NULL && !xShape.is() && !mbIsEntered)
-+ {
-+ mpIntelligentGroupFrame->Dispose();
-+ mpIntelligentGroupFrame = 0;
-+ }
-+ }
-+ else
-+ {
-+ if(mpIntelligentGroupFrame != NULL)
-+ {
-+ mpIntelligentGroupFrame->Dispose();
-+ mpIntelligentGroupFrame = 0;
-+ }
-+ }
-+}
-+
-+
-+void SAL_CALL
-+SelectionManager::propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& rEventObject)
-+throw (::com::sun::star::uno::RuntimeException)
-+{
-+ OSL_TRACE ("AccessibleDrawDocumentView::propertyChange");
-+ if (rEventObject.PropertyName == ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage")))
-+ {
-+ if( mpIntelligentGroupFrame != NULL )
-+ {
-+ mpIntelligentGroupFrame->Dispose();
-+// mpView->updateHandles();
-+ mpIntelligentGroupFrame = 0;
-+ }
-+
-+ mpSelectedIntelligentGroup.reset();
-+ }
-+}
-+
-+void SAL_CALL
-+SelectionManager::disposing (const ::com::sun::star::lang::EventObject& rEventObject)
-+throw (::com::sun::star::uno::RuntimeException)
-+{
-+ if (rEventObject.Source == mxSelectionSupplier)
-+ {
-+ if(mxSelectionSupplier.is())
-+ mxSelectionSupplier->removeSelectionChangeListener(this);
-+
-+ uno::Reference< beans::XPropertySet > xPropertySet (
-+ mxController, uno::UNO_QUERY );
-+ if ( xPropertySet.is() )
-+ xPropertySet->removePropertyChangeListener( ::rtl::OUString (RTL_CONSTASCII_USTRINGPARAM("CurrentPage")), this );
-+
-+ mxSelectionSupplier = NULL;
-+ }
-+}
-+
-+void SelectionManager::SetSelectedShape(uno::Reference<drawing::XShape> xShape)
-+{
-+// AddOrRemovePropertyListener(mpSelectedIntelligentGroup.get(), false);
-+
-+ mxSelectedShape = xShape;
-+ mbIsEntered = false;
-+ if (mxSelectedShape.is())
-+ {
-+ if (IntelligentGroup::IsIntelligentGroup(mxSelectedShape))
-+ {
-+ mpSelectedIntelligentGroup = IntelligentGroup::Instance(mxModel, mxSelectedShape);
-+ mbIsEntered = true;
-+ }
-+ else
-+ {
-+ mpSelectedIntelligentGroup = FindShapeInGroup(xShape);
-+ mbIsEntered = mpSelectedIntelligentGroup.get()!=NULL;
-+ }
-+ }
-+/* else
-+ {
-+ mpSelectedIntelligentGroup = 0;
-+ }
-+*/
-+// AddOrRemovePropertyListener(mpSelectedIntelligentGroup.get(), true);
-+
-+// std::vector<uno::Reference<view::XSelectionChangeListener> >::iterator aIter = maListeners.begin();
-+// for (; aIter!=maListeners.end(); ++aIter)
-+// (*aIter)->NotifySelectionChange(mpSelectedIntelligentGroup);
-+
-+}
-+
-+
-+void SelectionManager::Select(boost::shared_ptr<IntelligentGroup> pIntelligentGroup)
-+{
-+ if (mxSelectionSupplier.is())
-+ mxSelectionSupplier->select(uno::makeAny(pIntelligentGroup->GetModel()->GetGroupShape()));
-+}
-+
-+uno::Reference<drawing::XShape> SelectionManager::GetSelectedShape()
-+{
-+ uno::Reference<drawing::XShape> xShape;
-+ sal_Int32 nCount = 0;
-+
-+ if (mxSelectionSupplier.is())
-+ {
-+ uno::Any aSelection = mxSelectionSupplier->getSelection();
-+// if (aSelection.hasValue())
-+// {
-+// xShape = uno::Reference<drawing::XShape>(aSelection, uno::UNO_QUERY);
-+ aSelection >>= xShape;
-+
-+ if (xShape.is())
-+ nCount = 1;
-+ else
-+ {
-+// uno::Reference<container::XIndexAccess> xShapes(aSelection, uno::UNO_QUERY);
-+ uno::Reference<container::XIndexAccess> xShapes;
-+ aSelection >>= xShapes;
-+ if (xShapes.is())
-+ {
-+ nCount = xShapes->getCount();
-+ if (nCount == 1)
-+ {
-+ xShape = uno::Reference<drawing::XShape>(xShapes->getByIndex(0), uno::UNO_QUERY);
-+ if (xShape.is())
-+ nCount = 0;
-+ }
-+ }
-+ }
-+// }
-+ }
-+ return xShape;
-+}
-+
-+boost::shared_ptr<IntelligentGroup> SelectionManager::FindShapeInGroup(uno::Reference<drawing::XShape> xShape)
-+{
-+/* uno::Reference<beans::XPropertySet> xProperties (mxController, uno::UNO_QUERY);
-+ if (xProperties.is())
-+ {
-+ uno::Reference<container::XIndexAccess> xPage (
-+ xProperties->getPropertyValue(rtl::OUString::createFromAscii("CurrentPage")), uno::UNO_QUERY);
-+ sal_Int32 nShapeCount = xPage->getCount();
-+ for (sal_Int32 nIndex=0; nIndex<nShapeCount; ++nIndex)
-+ {
-+ uno::Reference<drawing::XShape> xChild (
-+ xPage->getByIndex(nIndex), uno::UNO_QUERY);
-+ if (IntelligentGroup::IsIntelligentGroup(xChild))
-+ {
-+ uno::Reference<container::XIndexAccess> xGroup (
-+ xChild, uno::UNO_QUERY);
-+ sal_Int32 nGroupCount = xGroup->getCount();
-+ for (sal_Int32 nGroupIndex=0; nGroupIndex<nGroupCount; ++nGroupIndex)
-+ {
-+ uno::Reference<drawing::XShape> xGroupChild (
-+ xGroup->getByIndex(nGroupIndex), uno::UNO_QUERY);
-+ if (xGroupChild == xShape)
-+ return IntelligentGroup::Instance(mxModel, xChild);
-+ }
-+ }
-+ }
-+ }
-+*/
-+ if(IntelligentGroup::IsIntelligentGroup(xShape))
-+ return IntelligentGroup::Instance(mxModel, xShape);
-+ else
-+ return boost::shared_ptr<IntelligentGroup>();
-+}
-+
-+void SelectionManager::AddSelectionChangeListener(uno::Reference<view::XSelectionChangeListener> xListener)
-+{
-+ maListeners.push_back(xListener);
-+}
-+
-+void SelectionManager::RemoveSelectionChangeListener(uno::Reference<view::XSelectionChangeListener> xListener)
-+{
-+ std::vector<uno::Reference<view::XSelectionChangeListener> >::iterator aIter = maListeners.begin();
-+ while(aIter!=maListeners.end())
-+ {
-+ if(*aIter == xListener)
-+ maListeners.erase(aIter);
-+ }
-+}
-+
-+} //end of namespace sd
-diff --git sd/source/ui/ig/TreeLayout.cxx sd/source/ui/ig/TreeLayout.cxx
-new file mode 100644
-index 0000000..7025d10
---- /dev/null
-+++ sd/source/ui/ig/TreeLayout.cxx
-@@ -0,0 +1,182 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: TreeLayout.cxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#include "TreeLayout.hxx"
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+#include <com/sun/star/drawing/FillStyle.hpp>
-+#include <com/sun/star/drawing/LineStyle.hpp>
-+#include <com/sun/star/style/ParagraphAdjust.hpp>
-+#include <com/sun/star/drawing/ColorMode.hpp>
-+#include <com/sun/star/drawing/XDrawPage.hpp>
-+#include <com/sun/star/drawing/TextFitToSizeType.hpp>
-+#include <com/sun/star/text/WritingMode.hpp>
-+#include <svtools/colorcfg.hxx>
-+
-+using namespace ::com::sun::star;
-+
-+namespace sd{
-+
-+TreeLayout::TreeLayout(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor)
-+ :IntelligentGroupLayoutBase(pModel,pDescriptor)
-+{
-+}
-+
-+double TreeLayout::GetGap( awt::Rectangle /*aGroupBoundingBox*/ )
-+{
-+ return 0;
-+}
-+
-+awt::Size TreeLayout::GetBoundingSize (
-+ sal_Int32 /*nIndex*/,
-+ awt::Size aDefaultSize,
-+ std::vector<IntelligentGroupShapeDescriptor> /*aDescriptors*/)
-+{
-+ return aDefaultSize;
-+}
-+
-+std::vector<IntelligentGroupShapeDescriptor> TreeLayout::PrepareShapes (boost::shared_ptr<IntelligentGroupTextIterator> /*pTextIterator*/, sal_Int32 nIndex, bool bCreatedByUser)
-+{
-+ std::vector<IntelligentGroupShapeDescriptor> aDescriptors;
-+
-+ IntelligentGroupStyle aStyle;
-+
-+ aStyle.aBackground = IntelligentGroupStyle::Foreground;
-+ aStyle.aBorder = IntelligentGroupStyle::Regular;
-+ aStyle.aText = IntelligentGroupStyle::Primary;
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ rtl::OUString::createFromAscii("Primary")+rtl::OUString::valueOf(nIndex),
-+ ig::Primary,
-+ aStyle));
-+
-+ // Every shape except the root at index 0 has a connector to its parent.
-+ if (nIndex > 0)
-+ {
-+ aStyle.aBackground = IntelligentGroupStyle::None_Background;
-+ aStyle.aBorder = IntelligentGroupStyle::None_Border;
-+ aStyle.aText = IntelligentGroupStyle::None_Text;
-+ aDescriptors.push_back(GetShapeDescriptor(
-+ rtl::OUString::createFromAscii("Connector")+rtl::OUString::valueOf(nIndex),
-+ ig::Connector,
-+ aStyle));
-+ }
-+
-+ if(!bCreatedByUser)
-+ mpModel->AddShapeGroup(aDescriptors, mpModel->GetShapeGroupCount());
-+
-+ return aDescriptors;
-+}
-+
-+//void TreeLayout::PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aShapeDescriptors,
-+void TreeLayout::PlaceShapes(sal_Int32 nShapeGroupIndex,
-+ awt::Rectangle aBoundingBox,
-+ awt::Rectangle /*aGroupBoundingBox*/,
-+ awt::Size /*aDefaultSize*/,
-+ double /*nScale*/)
-+{
-+// aShapeDescriptors[0].DefaultLocation = awt::Point(
-+ IntelligentGroupShapeDescriptor aShapeDescriptor;
-+ aShapeDescriptor.DefaultLocation = awt::Point(
-+ aBoundingBox.X,
-+ aBoundingBox.Y);
-+// aShapeDescriptors[0].DefaultSize = awt::Size(
-+ aShapeDescriptor.DefaultSize = awt::Size(
-+ aBoundingBox.Width,
-+ aBoundingBox.Height);
-+// SetSizeLocation(aShapeDescriptors[0]);
-+ sal_Int32 nShapeDescriptorIndex = mpModel->GetShapeDescriptorIndex(nShapeGroupIndex,0);
-+ mpModel->SetSizeLocation(nShapeDescriptorIndex, aShapeDescriptor);
-+}
-+
-+uno::Reference<drawing::XShape> TreeLayout::CreateShape(rtl::OUString aIdentifier)
-+{
-+ uno::Reference<drawing::XShape> xShape = NULL;
-+
-+ uno::Reference<beans::XPropertySet> xProperties;
-+
-+ if (aIdentifier.match(rtl::OUString::createFromAscii("Connector")))
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.ConnectorShape"))),
-+ uno::UNO_QUERY);
-+
-+ xProperties = uno::Reference<beans::XPropertySet>(xShape, uno::UNO_QUERY);
-+ if(xProperties.is())
-+ {
-+ // glue point positions: 0=top 1=left 2=bottom 3=right
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("StartGluePointIndex"), uno::makeAny((sal_Int32)2));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("EndGluePointIndex"), uno::makeAny((sal_Int32)0));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("LineWidth"), uno::makeAny((sal_Int32)100));
-+ }
-+ }
-+ else if (aIdentifier.match(rtl::OUString::createFromAscii("Primary")))
-+ {
-+ xShape = uno::Reference<drawing::XShape>(
-+ mpModel->GetShapeFactory()->createInstance(
-+ rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.drawing.TextShape"))),
-+ uno::UNO_QUERY);
-+
-+ xProperties = uno::Reference<beans::XPropertySet>(xShape, uno::UNO_QUERY);
-+
-+ if (xProperties.is())
-+ {
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillStyle"), uno::makeAny(drawing::FillStyle_SOLID));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("FillColor"), uno::makeAny(sal_Int32(0x9ACD00)));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("LineWidth"), uno::makeAny((sal_Int32)200));
-+ xProperties->setPropertyValue(rtl::OUString::createFromAscii("CornerRadius"), uno::makeAny((sal_Int32)200));
-+ }
-+ }
-+
-+ return xShape;
-+}
-+
-+
-+rtl::OUString TreeLayout::GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex)
-+{
-+ return GetShapePrefix(eClass) + rtl::OUString::valueOf(nIndex);
-+}
-+
-+rtl::OUString TreeLayout::GetShapePrefix(ig::ShapeClass eClass)
-+{
-+ rtl::OUString aShapePrefix;
-+ switch (eClass)
-+ {
-+ case ig::TopLevelText : aShapePrefix = rtl::OUString::createFromAscii("Primary"); break;
-+ case ig::SecondLevelText : aShapePrefix = rtl::OUString::createFromAscii("Secondary"); break;
-+ case ig::Image: aShapePrefix = rtl::OUString::createFromAscii("Image"); break;
-+ }
-+ return aShapePrefix;
-+}
-+
-+}// end of namespace sd
-\ No newline at end of file
-diff --git sd/source/ui/ig/TreeLayoutAlgorithm.cxx sd/source/ui/ig/TreeLayoutAlgorithm.cxx
-new file mode 100644
-index 0000000..fe9698c
---- /dev/null
-+++ sd/source/ui/ig/TreeLayoutAlgorithm.cxx
-@@ -0,0 +1,153 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: TreeLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#include "TreeLayoutAlgorithm.hxx"
-+#include "IntelligentGroupLayoutBase.hxx"
-+#include <math.h>
-+#include <com/sun/star/beans/XPropertySet.hpp>
-+
-+namespace sd {
-+
-+
-+TreeLayoutAlgorithm::TreeLayoutAlgorithm()
-+{
-+
-+}
-+
-+
-+TreeLayoutAlgorithm::~TreeLayoutAlgorithm()
-+{
-+}
-+
-+
-+void TreeLayoutAlgorithm::PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor>>& rShapeDescriptorVector,
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ css::awt::Rectangle aGroupBoundingBox)
-+{
-+ const sal_Int32 nGroupCount = pModel->GetShapeGroupCount();
-+
-+ mnLevelCount = (sal_Int32)ceil(log((float)(nGroupCount+1)) / log((float)2.0));
-+ const sal_Int32 nMaxHorizontalElementCount = (sal_Int32)pow(2.0, mnLevelCount-1);
-+
-+ maGroupBoundingBox = aGroupBoundingBox;
-+
-+ // calculate shape sizes and positions
-+ mnShapeWidth = (sal_Int32)(0.8 * maGroupBoundingBox.Width / nMaxHorizontalElementCount);
-+ mnShapeHeight = (sal_Int32)(0.8 * maGroupBoundingBox.Height / mnLevelCount);
-+ mnHorizontalSpace = (maGroupBoundingBox.Width- mnShapeWidth*nMaxHorizontalElementCount) / (nMaxHorizontalElementCount-1);
-+ mnVerticalSpace = (maGroupBoundingBox.Height - mnShapeHeight*mnLevelCount) / (mnLevelCount-1);
-+
-+ PlaceSubTree(pLayout, pModel, 0, nGroupCount, NULL, maGroupBoundingBox.X);
-+}
-+
-+
-+
-+Rectangle TreeLayoutAlgorithm::PlaceSubTree(boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor>>& aShapeDescriptors,
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ sal_Int32 nIndex,
-+ sal_Int32 nCount,
-+ css::uno::Reference<css::drawing::XShape> xParent,
-+ sal_Int32 nLeft)
-+{
-+ if (nIndex >= nCount)
-+ return Rectangle();
-+
-+ const sal_Int32 nLevel = (sal_Int32)floor(log((float)(nIndex+1)) / log((float)2.0));
-+ const sal_Int32 nTotalHeight = mnLevelCount * mnShapeHeight + (mnLevelCount-1)*mnVerticalSpace;
-+
-+ const sal_Int32 nY = maGroupBoundingBox.Y + (maGroupBoundingBox.Height - nTotalHeight) / 2 + nLevel * (mnShapeHeight+mnVerticalSpace);
-+
-+ // Create shape for node, size and place it, and add it to the group shape.
-+// IntelligentGroupShapeDescriptor& aDescriptor = aShapeDescriptors[nIndex][0];
-+ IntelligentGroupShapeDescriptor aDescriptor = pModel->GetShapeDescriptor(pModel->GetShapeDescriptorIndex(nIndex,0));
-+
-+ // Create nodes for the two children.
-+ Rectangle aBBox = Rectangle(nLeft,nY,mnShapeWidth+nLeft, mnShapeHeight+nY);
-+
-+ // Place left sub-tree.
-+ Rectangle aLeftBBox = PlaceSubTree(
-+// pLayout, aShapeDescriptors, nIndex*2+1, nCount, aDescriptor.Shape, nLeft);
-+ pLayout, pModel, nIndex*2+1, nCount, aDescriptor.Shape, nLeft);
-+ sal_Int32 nRightLeft;
-+ if (!aLeftBBox.IsEmpty())
-+ {
-+ aBBox.Union(aLeftBBox);
-+ nRightLeft = (sal_Int32)aLeftBBox.Right() + mnHorizontalSpace;
-+ }
-+ else
-+ nRightLeft = nLeft;
-+
-+ // Place right sub-tree.
-+ Rectangle aRightBBox = PlaceSubTree(
-+// pLayout, aShapeDescriptors, nIndex*2+2, nCount, aDescriptor.Shape, nRightLeft);
-+ pLayout, pModel, nIndex*2+2, nCount, aDescriptor.Shape, nRightLeft);
-+ if (!aRightBBox.IsEmpty())
-+ aBBox.Union(aRightBBox);
-+
-+ sal_Int32 nX = (sal_Int32)(aBBox.Right() + aBBox.Left() - mnShapeWidth)/2;
-+
-+// pLayout->PlaceShapes(aShapeDescriptors[nIndex],
-+ pLayout->PlaceShapes(nIndex,
-+ css::awt::Rectangle(
-+ nX,
-+ nY,
-+ mnShapeWidth,
-+ mnShapeHeight),
-+ maGroupBoundingBox,
-+ css::awt::Size(mnShapeWidth, mnShapeHeight),
-+ 1);
-+
-+ // Add Connector to children
-+ if (nIndex*2+1 < nCount)
-+ {
-+// IntelligentGroupShapeDescriptor aConnectorDescriptor = aShapeDescriptors[nIndex*2+1][1];
-+ IntelligentGroupShapeDescriptor aConnectorDescriptor = pModel->GetShapeDescriptor(pModel->GetShapeDescriptorIndex(nIndex*2+1,1));
-+ css::uno::Reference<css::beans::XPropertySet> xConnectorProps (aConnectorDescriptor.Shape, css::uno::UNO_QUERY);
-+ xConnectorProps->setPropertyValue(rtl::OUString::createFromAscii("StartShape"), css::uno::makeAny(aDescriptor.Shape));
-+ xConnectorProps->setPropertyValue(rtl::OUString::createFromAscii("EndShape"), css::uno::makeAny(pModel->GetShapeDescriptor(pModel->GetShapeDescriptorIndex(nIndex*2+1,0)).Shape));
-+ }
-+ if (nIndex*2+2 < nCount)
-+ {
-+// IntelligentGroupShapeDescriptor aConnectorDescriptor = aShapeDescriptors[nIndex*2+2][1];
-+ IntelligentGroupShapeDescriptor aConnectorDescriptor = pModel->GetShapeDescriptor(pModel->GetShapeDescriptorIndex(nIndex*2+2,1));
-+ css::uno::Reference<css::beans::XPropertySet> xConnectorProps (aConnectorDescriptor.Shape, css::uno::UNO_QUERY);
-+ xConnectorProps->setPropertyValue(rtl::OUString::createFromAscii("StartShape"), css::uno::makeAny(aDescriptor.Shape));
-+ xConnectorProps->setPropertyValue(rtl::OUString::createFromAscii("EndShape"), css::uno::makeAny(pModel->GetShapeDescriptor(pModel->GetShapeDescriptorIndex(nIndex*2+2,0)).Shape));
-+ }
-+
-+ return aBBox;
-+}
-+
-+
-+
-+}
-\ No newline at end of file
-diff --git sd/source/ui/ig/makefile.mk sd/source/ui/ig/makefile.mk
-new file mode 100644
-index 0000000..7eb2c91
---- /dev/null
-+++ sd/source/ui/ig/makefile.mk
-@@ -0,0 +1,81 @@
-+ #*************************************************************************
-+#
-+# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+#
-+# Copyright 2008 by Sun Microsystems, Inc.
-+#
-+# OpenOffice.org - a multi-platform office productivity suite
-+#
-+# $RCSfile: makefile.mk,v $
-+#
-+# $Revision: 1.0 $
-+#
-+# This file is part of OpenOffice.org.
-+#
-+# OpenOffice.org is free software: you can redistribute it and/or modify
-+# it under the terms of the GNU Lesser General Public License version 3
-+# only, as published by the Free Software Foundation.
-+#
-+# OpenOffice.org 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 Lesser General Public License version 3 for more details
-+# (a copy is included in the LICENSE file that accompanied this code).
-+#
-+# You should have received a copy of the GNU Lesser General Public License
-+# version 3 along with OpenOffice.org. If not, see
-+# <http://www.openoffice.org/license.html>
-+# for a copy of the LGPLv3 License.
-+#
-+#*************************************************************************
-+
-+PRJ=..$/..$/..
-+
-+PROJECTPCH=sd
-+PROJECTPCHSOURCE=$(PRJ)$/util$/sd
-+PRJNAME=sd
-+TARGET=ig
-+ENABLE_EXCEPTIONS=TRUE
-+AUTOSEG=true
-+
-+# --- Settings -----------------------------------------------------
-+
-+.INCLUDE : settings.mk
-+.INCLUDE : $(PRJ)$/util$/makefile.pmk
-+
-+
-+# --- Files --------------------------------------------------------
-+
-+SRS1NAME=$(TARGET)
-+SRC1FILES =\
-+ IntelligentGroupPane.src
-+
-+SLOFILES = \
-+ $(SLO)$/IntelligentGroupTextIterator.obj \
-+ $(SLO)$/BulletTextIterator.obj \
-+ $(SLO)$/IntelligentGroupBulletList.obj \
-+ $(SLO)$/IntelligentGroupShapeAccessor.obj \
-+ $(SLO)$/IntelligentGroupModel.obj \
-+ $(SLO)$/IntelligentGroupLayoutBase.obj \
-+ $(SLO)$/GroupedListLayout.obj \
-+ $(SLO)$/ListLayoutAlgorithm.obj \
-+ $(SLO)$/HorizontalListLayoutAlgorithm.obj \
-+ $(SLO)$/IntelligentGroupController.obj \
-+ $(SLO)$/IntelligentGroupText.obj \
-+ $(SLO)$/IntelligentGroupLayouter.obj \
-+ $(SLO)$/IntelligentGroupLayoutManager.obj \
-+ $(SLO)$/IntelligentGroup.obj \
-+ $(SLO)$/IntelligentGroupFrame.obj \
-+ $(SLO)$/SelectionManager.obj \
-+ $(SLO)$/IntelligentGroupPane.obj \
-+ $(SLO)$/PictureAccentListLayout.obj \
-+ $(SLO)$/TreeLayout.obj \
-+ $(SLO)$/TreeLayoutAlgorithm.obj \
-+ $(SLO)$/FieldLayoutAlgorithm.obj \
-+ $(SLO)$/RowFieldLayoutAlgorithm.obj \
-+ $(SLO)$/CircleLayoutAlgorithm.obj
-+
-+
-+# --- Tagets -------------------------------------------------------
-+
-+.INCLUDE : target.mk
-diff --git sd/source/ui/inc/BulletTextIterator.hxx sd/source/ui/inc/BulletTextIterator.hxx
-new file mode 100644
-index 0000000..461f5c9
---- /dev/null
-+++ sd/source/ui/inc/BulletTextIterator.hxx
-@@ -0,0 +1,66 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: BulletTextIterator.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_BULLET_TEXT_ITERATOR_HXX
-+#define SD_BULLET_TEXT_ITERATOR_HXX
-+
-+#include "IntelligentGroupTextIterator.hxx"
-+#include "IntelligentGroupTextAccess.hxx"
-+
-+namespace sd
-+{
-+
-+class BulletTextIterator : public IntelligentGroupTextIterator
-+{
-+public:
-+ BulletTextIterator(IntelligentGroupTextAccess* pTextAccess);
-+ virtual ~BulletTextIterator();
-+ virtual bool Rewind();
-+ virtual sal_Int32 GetChildCount();
-+ virtual sal_Int32 GetItemCount();
-+ virtual rtl::OUString GetText();
-+ virtual bool GotoFirstChild();
-+ virtual bool GotoNext();
-+ virtual bool GotoParent();
-+ virtual bool HasChildren();
-+ virtual ::boost::shared_ptr<IntelligentGroupTextIterator> GetCopy();
-+
-+
-+private:
-+ BulletTextIterator(BulletTextIterator* pIterator);
-+
-+ IntelligentGroupTextAccess* mpTextAccess;
-+};
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/CircleLayoutAlgorithm.hxx sd/source/ui/inc/CircleLayoutAlgorithm.hxx
-new file mode 100644
-index 0000000..68cddc9
---- /dev/null
-+++ sd/source/ui/inc/CircleLayoutAlgorithm.hxx
-@@ -0,0 +1,57 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: CircleLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_CIRCLE_LAYOUT_ALGORITHM_HXX
-+#define SD_CIRCLE_LAYOUT_ALGORITHM_HXX
-+
-+
-+#include "IntelligentGroupAlgorithmBase.hxx"
-+
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd {
-+
-+
-+class CircleLayoutAlgorithm : public IntelligentGroupAlgorithmBase
-+{
-+public:
-+ CircleLayoutAlgorithm();
-+ virtual ~CircleLayoutAlgorithm();
-+// void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, std::vector<std::vector<IntelligentGroupShapeDescriptor>>& rShapeDescriptorVector, const css::awt::Rectangle aGroupBoundingBox );
-+ void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, boost::shared_ptr<IntelligentGroupModel> pModel, const css::awt::Rectangle aGroupBoundingBox );
-+};
-+
-+
-+ }
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/FieldLayoutAlgorithm.hxx sd/source/ui/inc/FieldLayoutAlgorithm.hxx
-new file mode 100644
-index 0000000..22e89bd
---- /dev/null
-+++ sd/source/ui/inc/FieldLayoutAlgorithm.hxx
-@@ -0,0 +1,80 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: FieldLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_FIELD_LAYOUT_ALGORITHM_HXX
-+#define SD_FIELD_LAYOUT_ALGORITHM_HXX
-+
-+
-+#include "IntelligentGroupAlgorithmBase.hxx"
-+
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd {
-+
-+
-+class FieldLayoutAlgorithm : public IntelligentGroupAlgorithmBase
-+{
-+public:
-+ FieldLayoutAlgorithm( const ig::Orientation eOrientation );
-+ virtual ~FieldLayoutAlgorithm();
-+// void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, std::vector<std::vector<IntelligentGroupShapeDescriptor>>& rShapeDescriptorVector, const css::awt::Rectangle aGroupBoundingBox );
-+ void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, boost::shared_ptr<IntelligentGroupModel> pModel, const css::awt::Rectangle aGroupBoundingBox );
-+
-+
-+protected:
-+ css::awt::Point CreatePosition( const sal_Int32 nPositionOnPrimaryAxis, const sal_Int32 nPositionOnSecondaryAxis );
-+ sal_Int32 Project( const sal_Int32 nFirst, const sal_Int32 nSecond, const bool bProjectToPrimaryAxis );
-+ css::awt::Size CreateSize( const sal_Int32 nSizeOnPrimaryAxis, const sal_Int32 nSizeOnSecondaryAxis );
-+
-+private:
-+ class Line;
-+ ig::Orientation meOrientation;
-+
-+ std::vector<FieldLayoutAlgorithm::Line> ReflowLines(const std::vector<Line> aLines, double nMaximalWidth, sal_Int32 nGap);
-+ double CalculateNewWidth (std::vector<FieldLayoutAlgorithm::Line> aLines);
-+ double CalculateAspectRatio (
-+ const std::vector<FieldLayoutAlgorithm::Line> aLines,
-+ const sal_Int32 nGap,
-+ const css::awt::Rectangle aBoundingBox);
-+ double CalculateScale (
-+ const std::vector<FieldLayoutAlgorithm::Line> aLines,
-+ const sal_Int32 nGap,
-+ const css::awt::Rectangle aBoundingBox);
-+ css::awt::Size CalculateTotalSize (const std::vector<FieldLayoutAlgorithm::Line> aLines);
-+ css::awt::Size CalculateTotalGapSize (const std::vector<FieldLayoutAlgorithm::Line> aLines, const sal_Int32 nGap);
-+};
-+
-+
-+ }
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/GroupedListLayout.hxx sd/source/ui/inc/GroupedListLayout.hxx
-new file mode 100644
-index 0000000..ede0b34
---- /dev/null
-+++ sd/source/ui/inc/GroupedListLayout.hxx
-@@ -0,0 +1,67 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: GroupedListLayout.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_GROUPED_LIST_LAYOUT_HXX
-+#define SD_GROUPED_LIST_LAYOUT_HXX
-+
-+#include "IntelligentGroupLayoutBase.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+namespace sd{
-+
-+ class GroupedListLayout: public IntelligentGroupLayoutBase
-+ {
-+ public:
-+ GroupedListLayout(boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+ double GetGap(css::awt::Rectangle aGroupBoundingBox);
-+ css::awt::Size GetBoundingSize(sal_Int32 nIndex, css::awt::Size aDefaultSize, std::vector<IntelligentGroupShapeDescriptor> aDescriptos);
-+ std::vector<IntelligentGroupShapeDescriptor> PrepareShapes(boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator, sal_Int32 nIndex, bool bCreatedByUser = false);
-+// void PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aDescriptors, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale);
-+ void PlaceShapes(sal_Int32 nShapeGroupIndex, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale);
-+ css::uno::Reference<css::drawing::XShape> CreateShape(rtl::OUString aIdentifier);
-+ void AddShape(css::uno::Reference<css::drawing::XShape> rxSelectedShape);
-+
-+
-+ private:
-+ virtual rtl::OUString GetShapePrefix(ig::ShapeClass eClass);
-+ virtual rtl::OUString GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex);
-+ virtual rtl::OUString GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex, sal_Int32 nChildIndex);
-+ virtual ig::ShapeClass GetClassForName(rtl::OUString sIdentifier);
-+ };
-+
-+
-+
-+} //end of nameclass sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/HorizontalListLayoutAlgorithm.hxx sd/source/ui/inc/HorizontalListLayoutAlgorithm.hxx
-new file mode 100644
-index 0000000..8c0c912
---- /dev/null
-+++ sd/source/ui/inc/HorizontalListLayoutAlgorithm.hxx
-@@ -0,0 +1,50 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: HorizontalListLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_HORIZONTALLISTLAYOUTALGORITHM_HXX
-+#define SD_HORIZONTALLISTLAYOUTALGORITHM_HXX
-+
-+
-+#include "ListLayoutAlgorithm.hxx"
-+
-+
-+namespace sd {
-+
-+class HorizontalListLayoutAlgorithm : public ListLayoutAlgorithm
-+{
-+public:
-+ HorizontalListLayoutAlgorithm();
-+ ~HorizontalListLayoutAlgorithm();
-+};
-+
-+} // end of namespace ::sd::intelligentgroup
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroup.hxx sd/source/ui/inc/IntelligentGroup.hxx
-new file mode 100644
-index 0000000..d8ef20b
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroup.hxx
-@@ -0,0 +1,74 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroup.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_HXX
-+#define SD_INTELLIGENT_GROUP_HXX
-+
-+#include <com/sun/star/frame/XController.hpp>
-+#include "IntelligentGroupLayouter.hxx"
-+#include <boost/shared_ptr.hpp>
-+
-+
-+namespace sd{
-+
-+ class IntelligentGroup
-+ {
-+ public:
-+ static bool IsIntelligentGroup( ::com::sun::star::uno::Reference< com::sun::star::drawing::XShape > xShape );
-+ static boost::shared_ptr<IntelligentGroup> Instance(
-+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > rxModel,
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxShape);
-+ static void Dispose();
-+ boost::shared_ptr<IntelligentGroupModel> GetModel();
-+ void SetLayout(::rtl::OUString sLayoutName);
-+ void SetText(boost::shared_ptr<IntelligentGroupText> pText);
-+ void UpdateLayout();
-+ boost::shared_ptr<IntelligentGroupLayouter> GetLayouter();
-+ boost::shared_ptr<IntelligentGroupLayoutBase> GetLayout();
-+ void AddShape(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxSelectedShape);
-+
-+ private:
-+ IntelligentGroup(::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > xModel,
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxShape);
-+
-+ private:
-+ boost::shared_ptr<IntelligentGroupModel> mpModel;
-+ boost::shared_ptr<IntelligentGroupLayoutBase> mpLayout;
-+ boost::shared_ptr<IntelligentGroupLayouter> mpLayouter;
-+ boost::shared_ptr<IntelligentGroupText> mpText;
-+ rtl::OUString msLayoutName;
-+
-+ typedef std::vector<boost::shared_ptr<IntelligentGroup> > IntelligentGroupVector;
-+ static IntelligentGroupVector maActiveGroup;
-+ };
-+
-+}//end of namespace sd
-+
-+#endif
-diff --git sd/source/ui/inc/IntelligentGroupAlgorithmBase.hxx sd/source/ui/inc/IntelligentGroupAlgorithmBase.hxx
-new file mode 100644
-index 0000000..64f7aac
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupAlgorithmBase.hxx
-@@ -0,0 +1,55 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: IntelligentGroupAlgorithmBase.hxx,v $
-+*
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_ALGORITHM_BASE_HXX
-+#define SD_INTELLIGENT_GROUP_ALGORITHM_BASE_HXX
-+
-+#include "IntelligentGroupDescriptors.hxx"
-+#include "IntelligentGroupLayoutBase.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd {
-+
-+
-+class IntelligentGroupAlgorithmBase
-+{
-+public:
-+ IntelligentGroupAlgorithmBase(){};
-+ virtual ~IntelligentGroupAlgorithmBase(){};
-+ virtual void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, boost::shared_ptr<IntelligentGroupModel> pModel, const css::awt::Rectangle aGroupBoundingBox ) = 0;
-+};
-+
-+
-+ } // end of namespace
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupBulletList.hxx sd/source/ui/inc/IntelligentGroupBulletList.hxx
-new file mode 100644
-index 0000000..64d433a
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupBulletList.hxx
-@@ -0,0 +1,68 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupBulletList.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_INTELLIGENT_GROUP_BULLET_LIST_HXX
-+#define SD_INTELLIGENT_GROUP_BULLET_LIST_HXX
-+
-+#include "IntelligentGroupTextAccess.hxx"
-+#include "IntelligentGroupTextIterator.hxx"
-+
-+namespace sd
-+{
-+
-+class IntelligentGroupController;
-+
-+class IntelligentGroupBulletList : public IntelligentGroupTextAccess
-+{
-+public:
-+
-+ IntelligentGroupBulletList();
-+ virtual ~IntelligentGroupBulletList();
-+ boost::shared_ptr< IntelligentGroupTextIterator > CreateIterator();
-+ void SetText(const std::vector< rtl::OUString >& aText);
-+ void AddText(const sal_Int32 nDepth, const ::rtl::OUString& rShapeText);
-+
-+ sal_Int32 GetDepth(const sal_Int32 nIndex);
-+ sal_Int32 GetItemCount();
-+ ::rtl::OUString GetText(sal_Int32 nItemIndex, sal_Int32 nDepth);
-+ void Clear();
-+
-+private:
-+ sal_Int32 GetIndentation(const ::rtl::OUString& rText);
-+
-+ rtl::OUString msIndentationString;
-+ std::vector<rtl::OUString> maTextVector;
-+};
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupController.hxx sd/source/ui/inc/IntelligentGroupController.hxx
-new file mode 100644
-index 0000000..7298a2e
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupController.hxx
-@@ -0,0 +1,62 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupText.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_CONTROLLER_HXX
-+#define SD_INTELLIGENT_GROUP_CONTROLLER_HXX
-+
-+#include "ViewShellBase.hxx"
-+
-+namespace sd{
-+
-+ class IntelligentGroupController//: public cppu::WeakImplHelper1<::com::sun::star::view::XSelectionChangeListener>, public ::com::sun::star::beans::XPropertyChangeListener
-+ {
-+ public:
-+ IntelligentGroupController(
-+ com::sun::star::uno::Reference< com::sun::star::frame::XModel > rxModel,
-+ com::sun::star::uno::Reference< com::sun::star::frame::XController > rxController,
-+ ViewShellBase& rBase);
-+ virtual ~IntelligentGroupController();
-+ void SetLayout(rtl::OUString sLayoutName, bool bCreate);
-+ void DoLayout();
-+ boost::shared_ptr<IntelligentGroup> GetSelectedIntelligentGroup();
-+// boost::shared_ptr< SelectionManager > GetSelectionManager();
-+
-+ private:
-+ boost::shared_ptr<IntelligentGroup> CreateIntelligentGroup();
-+
-+ private:
-+ com::sun::star::uno::Reference< com::sun::star::frame::XModel > mxModel;
-+ com::sun::star::uno::Reference< com::sun::star::frame::XController > mxController;
-+ boost::shared_ptr<SelectionManager> mpSelectionManager;
-+ };
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupDescriptors.hxx sd/source/ui/inc/IntelligentGroupDescriptors.hxx
-new file mode 100644
-index 0000000..443a94b
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupDescriptors.hxx
-@@ -0,0 +1,190 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupDescriptors.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+
-+#ifndef SD_INTELLIGENT_GROUP_DESCRIPTORS_HXX
-+#define SD_INTELLIGENT_GROUP_DESCRIPTORS_HXX
-+
-+#include <vcl/image.hxx>
-+#include <com/sun/star/drawing/XShape.hpp>
-+#include <boost/shared_ptr.hpp>
-+
-+
-+namespace sd{ namespace ig{
-+
-+ enum ShapeRole{ Primary, Accent, Connector, Other, User };
-+ enum ShapeClass { TopLevelText, SecondLevelText, Image };
-+ enum Orientation { Horizontal, Vertical };
-+}
-+struct IntelligentGroupLayoutDescriptor
-+{
-+ rtl::OUString Category;
-+ rtl::OUString Name;
-+ rtl::OUString DisplayName;
-+ rtl::OUString Description;
-+ Image Icon;
-+ Image Colorable;
-+ Image Preview;
-+ rtl::OUString LayoutServiceName;
-+ rtl::OUString LayoutAlgorithmServiceName;
-+ USHORT MinimalShapeCount;
-+ USHORT MaximalShapeCount;
-+};
-+
-+struct IntelligentGroupStyle
-+{
-+ enum StyleBackground { None_Background, Background, Foreground, Accent };
-+ enum Border { None_Border, Regular };
-+ enum Text { None_Text, Primary, Secondary };
-+
-+ StyleBackground aBackground;
-+ Border aBorder;
-+ Text aText;
-+ rtl::OUString GetDisplayName(void);
-+};
-+
-+struct IntelligentGroupShapeDescriptor
-+{
-+ rtl::OUString Identifier;
-+ ig::ShapeRole Role;
-+ IntelligentGroupStyle Style;
-+ bool Exists;
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > Shape;
-+ ::com::sun::star::awt::Point DefaultLocation;
-+ ::com::sun::star::awt::Size DefaultSize;
-+ ::com::sun::star::awt::Point ShapeLocation;
-+ ::com::sun::star::awt::Size ShapeSize;
-+ ::com::sun::star::awt::Size SizeTransformation;
-+ ::com::sun::star::awt::Point LocationTransformation;
-+};
-+
-+struct GroupedListDescriptor
-+{
-+ static boost::shared_ptr<IntelligentGroupLayoutDescriptor> Get()
-+ {
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+ pLayoutDescriptor->Category = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Horizontal List"));
-+ pLayoutDescriptor->Description = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Horizontal grouped list"));
-+ pLayoutDescriptor->DisplayName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Grouped List"));
-+ pLayoutDescriptor->LayoutServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedListLayout"));
-+ pLayoutDescriptor->LayoutAlgorithmServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HorizontalListLayoutAlgorithm"));
-+ pLayoutDescriptor->MaximalShapeCount = 0;
-+ pLayoutDescriptor->MinimalShapeCount = 1;
-+ pLayoutDescriptor->Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedList"));
-+ return pLayoutDescriptor;
-+ }
-+// static boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor;
-+};
-+//boost::shared_ptr<IntelligentGroupLayoutDescriptor> GroupedListDescriptor::pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+
-+struct CircleLayoutDescriptor
-+{
-+ static boost::shared_ptr<IntelligentGroupLayoutDescriptor> Get()
-+ {
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+ pLayoutDescriptor->Category = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Primary Circle"));
-+ pLayoutDescriptor->Description = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Basic circular layout"));
-+ pLayoutDescriptor->DisplayName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Base Circle"));
-+ pLayoutDescriptor->LayoutServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedListLayout"));
-+ pLayoutDescriptor->LayoutAlgorithmServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("CircleLayoutAlgorithm"));
-+ pLayoutDescriptor->MaximalShapeCount = 0;
-+ pLayoutDescriptor->MinimalShapeCount = 1;
-+ pLayoutDescriptor->Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("BaseCircle"));
-+ return pLayoutDescriptor;
-+ }
-+// static boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor;
-+};
-+//boost::shared_ptr<IntelligentGroupLayoutDescriptor> CircleLayoutDescriptor::pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+
-+struct SimpleFieldDescriptor
-+{
-+ static boost::shared_ptr<IntelligentGroupLayoutDescriptor> Get()
-+ {
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+ pLayoutDescriptor->Category = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Field"));
-+ pLayoutDescriptor->Description = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Row first field"));
-+ pLayoutDescriptor->DisplayName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Simple Field"));
-+ pLayoutDescriptor->LayoutServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedListLayout"));
-+ pLayoutDescriptor->LayoutAlgorithmServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("RowFieldLayoutAlgorithm"));
-+ pLayoutDescriptor->MaximalShapeCount = 0;
-+ pLayoutDescriptor->MinimalShapeCount = 1;
-+ pLayoutDescriptor->Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("SimpleField"));
-+ return pLayoutDescriptor;
-+ }
-+// static boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor;
-+};
-+//boost::shared_ptr<IntelligentGroupLayoutDescriptor> SimpleFieldDescriptor::pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+
-+
-+struct TreeDescriptor
-+{
-+ static boost::shared_ptr<IntelligentGroupLayoutDescriptor> Get()
-+ {
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+ pLayoutDescriptor->Category = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tree"));
-+ pLayoutDescriptor->Description = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Binary tree layout"));
-+ pLayoutDescriptor->DisplayName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tree"));
-+ pLayoutDescriptor->LayoutServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TreeLayout"));
-+ pLayoutDescriptor->LayoutAlgorithmServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("TreeLayoutAlgorithm"));
-+ pLayoutDescriptor->MaximalShapeCount = 0;
-+ pLayoutDescriptor->MinimalShapeCount = 1;
-+ pLayoutDescriptor->Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Tree"));
-+ return pLayoutDescriptor;
-+ }
-+// static boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor;
-+};
-+//boost::shared_ptr<IntelligentGroupLayoutDescriptor> TreeDescriptor::pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+
-+
-+struct PictureAccentListDescriptor
-+{
-+ static boost::shared_ptr<IntelligentGroupLayoutDescriptor> Get()
-+ {
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+ pLayoutDescriptor->Category = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Horizontal List"));
-+ pLayoutDescriptor->Description = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Horizontal list with image accents"));
-+ pLayoutDescriptor->DisplayName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("Picture Accent List"));
-+ pLayoutDescriptor->LayoutServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PictureAccentListLayout"));
-+ pLayoutDescriptor->LayoutAlgorithmServiceName = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("HorizontalListLayoutAlgorithm"));
-+ pLayoutDescriptor->MaximalShapeCount = 0;
-+ pLayoutDescriptor->MinimalShapeCount = 1;
-+ pLayoutDescriptor->Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("PictureAccentList"));
-+ return pLayoutDescriptor;
-+ }
-+// static boost::shared_ptr<IntelligentGroupLayoutDescriptor> pLayoutDescriptor;
-+};
-+//boost::shared_ptr<IntelligentGroupLayoutDescriptor> PictureAccentListDescriptor::pLayoutDescriptor(new IntelligentGroupLayoutDescriptor);
-+
-+
-+}//end of namespace sd
-+
-+#endif
-diff --git sd/source/ui/inc/IntelligentGroupFrame.hxx sd/source/ui/inc/IntelligentGroupFrame.hxx
-new file mode 100644
-index 0000000..20484e5
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupFrame.hxx
-@@ -0,0 +1,132 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupFrame.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#include "precompiled_sd.hxx"
-+
-+#ifndef SD_INTELLIGENT_GROUP_FRAME_HXX
-+#define SD_INTELLIGENT_GROUP_FRAME_HXX
-+
-+#include <com/sun/star/util/XChangesListener.hpp>
-+#include <com/sun/star/drawing/XShape.hpp>
-+#include <basegfx/polygon/b2dpolypolygon.hxx>
-+#include <basegfx/polygon/b2dpolypolygontools.hxx>
-+#include "smarttag.hxx"
-+#include "IntelligentGroupModel.hxx"
-+#include "IntelligentGroupLayouter.hxx"
-+
-+class SdrPathObj;
-+
-+namespace sd {
-+
-+ class View;
-+ class SmartTag;
-+ /*************************************************************************
-+ |*
-+ |* Basisklasse fuer alle Funktionen
-+ |*
-+ \************************************************************************/
-+
-+ class IntelligentGroupFrame : public SmartTag, public IPolyPolygonEditorController, public SfxListener, public ::com::sun::star::util::XChangesListener
-+ {
-+ public:
-+ IntelligentGroupFrame( boost::shared_ptr<IntelligentGroupModel> pModel, ::sd::View& rView );
-+
-+ virtual ~IntelligentGroupFrame();
-+
-+ SdrPathObj* getPathObj() const { return mpPathObj; }
-+ boost::shared_ptr<IntelligentGroupLayouter> GetLayouter();
-+ boost::shared_ptr<IntelligentGroupModel> GetModel();
-+
-+ /** returns true if the SmartTag handled the event. */
-+ virtual bool MouseButtonDown( const MouseEvent&, SmartHdl& );
-+
-+ /** returns true if the SmartTag consumes this event. */
-+ virtual bool KeyInput( const KeyEvent& rKEvt );
-+
-+ void SetLayouter(boost::shared_ptr<IntelligentGroupLayouter> pLayouter);
-+ // callbacks from sdr view
-+ virtual ULONG GetMarkablePointCount() const;
-+ virtual ULONG GetMarkedPointCount() const;
-+ virtual BOOL MarkPoint(SdrHdl& rHdl, BOOL bUnmark=FALSE);
-+ virtual void CheckPossibilities();
-+ virtual BOOL MarkPoints(const Rectangle* pRect, BOOL bUnmark);
-+
-+ // IPolyPolygonEditorController
-+ virtual void DeleteMarkedPoints();
-+ virtual BOOL IsDeleteMarkedPointsPossible() const;
-+
-+ virtual void RipUpAtMarkedPoints();
-+ virtual bool IsRipUpAtMarkedPointsPossible() const;
-+
-+ virtual BOOL IsSetMarkedSegmentsKindPossible() const;
-+ virtual SdrPathSegmentKind GetMarkedSegmentsKind() const;
-+ virtual void SetMarkedSegmentsKind(SdrPathSegmentKind eKind);
-+
-+ virtual BOOL IsSetMarkedPointsSmoothPossible() const;
-+ virtual SdrPathSmoothKind GetMarkedPointsSmooth() const;
-+ virtual void SetMarkedPointsSmooth(SdrPathSmoothKind eKind);
-+
-+ virtual void CloseMarkedObjects(BOOL bToggle, BOOL bOpen );
-+ virtual bool IsOpenCloseMarkedObjectsPossible() const;
-+ virtual SdrObjClosedKind GetMarkedObjectsClosedState() const;
-+
-+ void MovePath( int nDX, int nDY );
-+ bool OnDelete();
-+ bool OnTabHandles( const KeyEvent& rKEvt );
-+ bool OnMarkHandle( const KeyEvent& rKEvt );
-+ bool OnMove( const KeyEvent& rKEvt );
-+
-+ // XChangesListener
-+ virtual void SAL_CALL changesOccurred( const ::com::sun::star::util::ChangesEvent& Event ) throw (::com::sun::star::uno::RuntimeException);
-+ virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException);
-+ virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( const ::com::sun::star::uno::Type& aType ) throw (::com::sun::star::uno::RuntimeException);
-+ virtual void SAL_CALL acquire( ) throw ();
-+ virtual void SAL_CALL release( ) throw ();
-+
-+ protected:
-+ virtual void addCustomHandles( SdrHdlList& rHandlerList );
-+ virtual bool getContext( SdrViewContext& rContext );
-+ virtual void disposing();
-+ virtual void deselect();
-+
-+// void updatePathAttributes();
-+
-+ private:
-+
-+ boost::shared_ptr<IntelligentGroupModel> mpModel;
-+ boost::shared_ptr<IntelligentGroupLayouter> mpLayouter;
-+ SdrPathObj* mpPathObj;
-+ ::com::sun::star::awt::Point maOriginPos;
-+ SdrMark* mpMark;
-+ };
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupLayoutBase.hxx sd/source/ui/inc/IntelligentGroupLayoutBase.hxx
-new file mode 100644
-index 0000000..6be9862
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupLayoutBase.hxx
-@@ -0,0 +1,75 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupLayoutBase.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_INTELLIGENT_GROUP_LAYOUT_BASE_HXX
-+#define SD_INTELLIGENT_GROUP_LAYOUT_BASE_HXX
-+
-+#include "IntelligentGroupModel.hxx"
-+#include "IntelligentGroupTextIterator.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+namespace sd{
-+
-+ class IntelligentGroupLayoutBase
-+ {
-+ public:
-+ IntelligentGroupLayoutBase(boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+ virtual ~IntelligentGroupLayoutBase();
-+ virtual boost::shared_ptr<IntelligentGroupLayoutDescriptor> GetLayoutDescriptor(void);
-+ virtual IntelligentGroupShapeDescriptor GetShapeDescriptor(
-+ const rtl::OUString sShapeIdentifier,
-+ const ig::ShapeRole eRole,
-+ const IntelligentGroupStyle aStyle);
-+ virtual css::uno::Reference<css::drawing::XShape> CreateShape(rtl::OUString aIdentifier) = 0;
-+ virtual rtl::OUString GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex) = 0;
-+ virtual double GetGap(css::awt::Rectangle aGroupBoundingBox) = 0;
-+ virtual css::awt::Size GetBoundingSize(sal_Int32 nIndex, css::awt::Size aDefaultSize, std::vector<IntelligentGroupShapeDescriptor> aDescriptos) = 0;
-+ virtual std::vector<IntelligentGroupShapeDescriptor> PrepareShapes(boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator, sal_Int32 nIndex, bool bCreatedByUser = false) = 0;
-+// virtual void PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aDescriptors, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale) = 0;
-+ virtual void PlaceShapes(sal_Int32 nShapeGroupIndex, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale) = 0;
-+ virtual void AddShape(css::uno::Reference<css::drawing::XShape> rxSelectedShape);
-+
-+ protected:
-+ virtual void MoveShapeIntoGroupBoundingBox(IntelligentGroupShapeDescriptor& aDescriptor,
-+ css::awt::Rectangle aRectangle);
-+ virtual void SetSizeLocation(IntelligentGroupShapeDescriptor& aDescriptor);
-+ virtual bool IsGeometryModified(const IntelligentGroupShapeDescriptor& aDescriptor);
-+
-+ protected:
-+ boost::shared_ptr<IntelligentGroupModel> mpModel;
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> mpLayoutDescriptor;
-+ };
-+}
-+
-+#endif //SD_LAYOUT_BASE_HXX
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupLayoutManager.hxx sd/source/ui/inc/IntelligentGroupLayoutManager.hxx
-new file mode 100644
-index 0000000..b8ac86c
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupLayoutManager.hxx
-@@ -0,0 +1,73 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupLayoutManager.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_LAYOUT_MANAGER_HXX
-+#define SD_INTELLIGENT_GROUP_LAYOUT_MANAGER_HXX
-+
-+#include "IntelligentGroupAlgorithmBase.hxx"
-+#include "IntelligentGroupLayouter.hxx"
-+#include <hash_map>
-+
-+
-+namespace sd{
-+
-+ class IntelligentGroupLayoutManager
-+ {
-+ public:
-+ static const ::rtl::OUString msGroupedListLayout;
-+ static const ::rtl::OUString msPictureAccentListLayout;
-+ static const ::rtl::OUString msTreeLayout;
-+
-+ static const ::rtl::OUString msCircleLayoutAlgorithm;
-+ static const ::rtl::OUString msHorizontalListLayoutAlgorithm;
-+ static const ::rtl::OUString msRowFieldLayoutAlgorithm;
-+ static const ::rtl::OUString msTreeLayoutAlgorithm;
-+ static boost::shared_ptr<IntelligentGroupLayoutManager> Instance();
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> GetLayoutDescriptor(const rtl::OUString& sLayoutName);
-+ boost::shared_ptr<IntelligentGroupLayoutBase> GetLayout(const rtl::OUString& sLayoutName, boost::shared_ptr<IntelligentGroupModel> pModel);
-+ boost::shared_ptr<IntelligentGroupLayouter> GetLayouter(boost::shared_ptr<IntelligentGroupModel> pModel, boost::shared_ptr<IntelligentGroupLayoutBase> pLayout);
-+ void AddLayout(boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+
-+ private:
-+ IntelligentGroupLayoutManager();
-+ boost::shared_ptr<IntelligentGroupLayoutBase> CreateLayout(boost::shared_ptr<IntelligentGroupModel> pModel, const rtl::OUString& sLayoutName);
-+ boost::shared_ptr<IntelligentGroupLayoutBase> CreateLayout(boost::shared_ptr<IntelligentGroupModel> pModel, boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+ boost::shared_ptr<IntelligentGroupAlgorithmBase> CreateLayoutAlgorithm(boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+
-+ private:
-+ typedef std::hash_map<rtl::OUString,std::vector<rtl::OUString>,rtl::OUStringHash,std::equal_to<rtl::OUString> > Categories;
-+ Categories maCategories;
-+ typedef std::hash_map<rtl::OUString,boost::shared_ptr<IntelligentGroupLayoutDescriptor>,rtl::OUStringHash,std::equal_to<rtl::OUString> > LayoutDescriptors;
-+ LayoutDescriptors maLayoutDescriptors;
-+ static boost::shared_ptr<IntelligentGroupLayoutManager> mpInstance;
-+ };
-+}//end of namespace sd
-+
-+#endif
-diff --git sd/source/ui/inc/IntelligentGroupLayouter.hxx sd/source/ui/inc/IntelligentGroupLayouter.hxx
-new file mode 100644
-index 0000000..cdedf60
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupLayouter.hxx
-@@ -0,0 +1,78 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupLayouter.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_LAYOUTER_HXX
-+#define SD_INTELLIGENT_GROUP_LAYOUTER_HXX
-+
-+#include "IntelligentGroupAlgorithmBase.hxx"
-+#include "IntelligentGroupText.hxx"
-+
-+
-+namespace sd{
-+
-+ class IntelligentGroupLayouter
-+ {
-+ public:
-+ IntelligentGroupLayouter(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+ boost::shared_ptr<IntelligentGroupAlgorithmBase> pAlgorithm);
-+ ~IntelligentGroupLayouter();
-+ inline boost::shared_ptr<IntelligentGroupLayoutBase> GetLayout(void) { return mpLayout; }
-+ inline boost::shared_ptr<IntelligentGroupModel> GetModel(void){ return mpModel; }
-+ inline std::vector<std::vector<IntelligentGroupShapeDescriptor> >& GetShapeDescriptors(){ return mpModel->GetShapeDescriptors(); }
-+ inline boost::shared_ptr<IntelligentGroupAlgorithmBase> GetLayoutAlgorithm(){ return mpAlgorithm; }
-+ void DoLayout(boost::shared_ptr<IntelligentGroupText> pText);
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor> > PrepareShapes(boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator);
-+ void PrepareShapes(boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator);
-+ void AddShape(const IntelligentGroupShapeDescriptor& rShapeDescriptor);
-+// void UpdateText(boost::shared_ptr<IntelligentGroupText> pText);
-+
-+
-+// protected:
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor> > maShapeDescriptors;
-+
-+ private:
-+/* void UpdateOutlineText(const css::uno::Reference<css::drawing::XShape> xShape,
-+ boost::shared_ptr<IntelligentGroupFlatTextIterator> pTextIterator,
-+ const sal_Int32 nIndentationOffset);
-+ void IntelligentGroupLayouter::UpdateText(
-+ const uno::Reference<drawing::XShape> xShape,
-+ const ::rtl::OUString sText);
-+*/
-+ boost::shared_ptr<IntelligentGroupModel> mpModel;
-+ boost::shared_ptr<IntelligentGroupLayoutBase> mpLayout;
-+ boost::shared_ptr<IntelligentGroupAlgorithmBase> mpAlgorithm;
-+ boost::shared_ptr<IntelligentGroupTextIterator> mpTextIterator;
-+ };
-+
-+}//end of namespace sd
-+
-+#endif
-diff --git sd/source/ui/inc/IntelligentGroupModel.hxx sd/source/ui/inc/IntelligentGroupModel.hxx
-new file mode 100644
-index 0000000..a8833c5
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupModel.hxx
-@@ -0,0 +1,103 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupModel.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_MODEL_HXX
-+#define SD_INTELLIGENT_GROUP_MODEL_HXX
-+
-+#include <hash_map>
-+#include <com/sun/star/drawing/XShape.hpp>
-+#include <com/sun/star/frame/XModel.hpp>
-+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
-+#include <com/sun/star/drawing/XShapes.hpp>
-+
-+#include"IntelligentGroupDescriptors.hxx"
-+
-+namespace sd{
-+
-+class IntelligentGroupModel
-+{
-+public:
-+ IntelligentGroupModel(
-+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > xModel,
-+ ::com::sun::star::awt::Rectangle aBoudingBox);
-+// IntelligentGroupModel();
-+ ~IntelligentGroupModel();
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > GetGroupShape(void);
-+// void AddShape(rtl::OUString rIdentifier,
-+// ig::ShapeRole rRole,
-+// ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape);
-+// void RemoveShape(rtl::OUString rIdentifier);
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > GetShape(rtl::OUString rIdentifier);
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > GetShape(sal_Int32 nIndex);
-+ rtl::OUString GetShapeIdentifier(sal_Int32 nIndex);
-+ sal_Int32 GetShapeCount(void);
-+ void SetupShapeList(void);
-+ void SetSize(::com::sun::star::awt::Size rSize);
-+ ::com::sun::star::awt::Size GetSize(void);
-+ void SetLocation(::com::sun::star::awt::Point rLocation);
-+ ::com::sun::star::awt::Point GetLocation(void);
-+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > GetShapeFactory();
-+ void UpdateSizeAndLocation();
-+// void RemoveUnusedShapes(rtl::OUString rUsedShapes[]);
-+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > GetUnoModel();
-+ bool IsInModel(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xShape);
-+ IntelligentGroupShapeDescriptor GetShapeDescriptor(sal_Int32 nIndex);
-+ void RemoveShape(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxShape);
-+ void AddShapeGroup(const std::vector<IntelligentGroupShapeDescriptor>& aShapeDescriptorVector, sal_Int32 nIndex);
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> >& GetShapeDescriptors();
-+ sal_Int32 GetShapeGroupIndex(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxShape);
-+ sal_Int32 GetShapeDescriptorIndex(sal_Int32 nShapeGroupIndex, sal_Int32 nInnerIndex);
-+ void SetSizeLocation(sal_Int32 nShapeDescriptorIndex, IntelligentGroupShapeDescriptor aShapeDescriptor);
-+ sal_Int32 GetGroupShapeCount(sal_Int32 nShapeGroupIndex);
-+ void MoveShapeIntoGroupBoundingBox(sal_Int32 nShapeIndex,::com::sun::star::awt::Rectangle aGroupBoundingBox);
-+ void AddShapeDescriptor(sal_Int32 nIndex, IntelligentGroupShapeDescriptor aShapeDescriptor);
-+ sal_Int32 GetShapeIndex(::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > rxShape);
-+ sal_Int32 GetShapeGroupCount();
-+ std::vector<IntelligentGroupShapeDescriptor> GetShapeDescriptorVector(sal_Int32 nGroupIndex);
-+ bool RequestUndo();
-+
-+protected:
-+ typedef std::hash_map<rtl::OUString,IntelligentGroupShapeDescriptor,rtl::OUStringHash,std::equal_to<rtl::OUString> > DescriptorInfo;
-+ DescriptorInfo maContentShapeMap;
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> > maContentShapeGroups;
-+ std::vector< IntelligentGroupShapeDescriptor > maDisposedShapes;
-+ typedef std::hash_map<rtl::OUString,sal_Int32,rtl::OUStringHash,std::equal_to<rtl::OUString> > IndexInfo;
-+ IndexInfo maDisposedShapeMap;
-+ ::com::sun::star::awt::Size maSize;
-+ ::com::sun::star::awt::Point maLocation;
-+
-+private:
-+ ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > mxGroup;
-+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > mxModel;
-+};
-+
-+}//end of namespace sd
-+
-+#endif //SD_INTELLIGENT_GROUP_MODEL_HXX
-diff --git sd/source/ui/inc/IntelligentGroupShapeAccessor.hxx sd/source/ui/inc/IntelligentGroupShapeAccessor.hxx
-new file mode 100644
-index 0000000..0f2f2db
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupShapeAccessor.hxx
-@@ -0,0 +1,62 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupShapeAccessor.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+
-+#ifndef SD_INTELLIGENT_GROUP_SHAPE_ACCESSOR_HXX
-+#define SD_INTELLIGENT_GROUP_SHAPE_ACCESSOR_HXX
-+
-+#include "IntelligentGroupModel.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+namespace sd{
-+
-+class IntelligentGroupShapeAccessor
-+{
-+public:
-+ IntelligentGroupShapeAccessor(
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> > rShapeDescriptors);
-+ virtual ~IntelligentGroupShapeAccessor();
-+ virtual css::uno::Reference<css::drawing::XShape> GetShape(std::vector<sal_Int32> aPath) ;
-+ virtual bool IsOutliner(std::vector<sal_Int32> /*aPath*/);
-+ virtual sal_Int32 GetShapeCount(std::vector<sal_Int32> /*aPath*/) ;
-+ virtual sal_Int32 GetChildCount(std::vector<sal_Int32> /*aPath*/) ;
-+
-+protected:
-+ boost::shared_ptr<IntelligentGroupModel> mpModel;
-+ std::vector<std::vector<IntelligentGroupShapeDescriptor> > maShapeDescriptors;
-+};
-+
-+}//end of namespace sd
-+
-+#endif
-diff --git sd/source/ui/inc/IntelligentGroupText.hxx sd/source/ui/inc/IntelligentGroupText.hxx
-new file mode 100644
-index 0000000..c46cb0f
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupText.hxx
-@@ -0,0 +1,59 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupText.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_INTELLIGENT_GROUP_TEXT_HXX
-+#define SD_INTELLIGENT_GROUP_TEXT_HXX
-+
-+#include "IntelligentGroupTextIterator.hxx"
-+#include "IntelligentGroupBulletList.hxx"
-+
-+
-+namespace sd{
-+
-+ class IntelligentGroupText
-+ {
-+ public:
-+ IntelligentGroupText(bool bIsUpdateFromShapeAllowed);
-+// void UpdateList (boost::shared_ptr< IntelligentGroup > pGroup);
-+ boost::shared_ptr< IntelligentGroupTextIterator > CreateIterator();
-+
-+ private:
-+ void Layout ();
-+ void Initialize1 ();
-+ void Initialize2 ();
-+ void Initialize3 ();
-+
-+ bool mbIsUpdateFromShapeAllowed;
-+ boost::shared_ptr< IntelligentGroupBulletList > mpText;
-+ };
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupTextAccess.hxx sd/source/ui/inc/IntelligentGroupTextAccess.hxx
-new file mode 100644
-index 0000000..efdd7e1
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupTextAccess.hxx
-@@ -0,0 +1,50 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupTextAccess.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_INTELLIGENT_GROUP_TEXT_ACCESS_HXX
-+#define SD_INTELLIGENT_GROUP_TEXT_ACCESS_HXX
-+
-+#include <rtl/ustring.hxx>
-+
-+namespace sd{
-+
-+ class IntelligentGroupTextAccess
-+ {
-+ public:
-+ virtual sal_Int32 GetItemCount() = 0;
-+ virtual sal_Int32 GetDepth(const sal_Int32 nItemIndex) = 0;
-+ virtual rtl::OUString GetText(sal_Int32 nCurrentIndex, sal_Int32 nCurrentLevel) = 0;
-+ };
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/IntelligentGroupTextIterator.hxx sd/source/ui/inc/IntelligentGroupTextIterator.hxx
-new file mode 100644
-index 0000000..feab3af
---- /dev/null
-+++ sd/source/ui/inc/IntelligentGroupTextIterator.hxx
-@@ -0,0 +1,75 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: IntelligentGroupTextIterator.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_INTELLIGENT_GROUP_TEXT_ITERATOR_HXX
-+#define SD_INTELLIGENT_GROUP_TEXT_ITERATOR_HXX
-+
-+#include <sal/types.h>
-+#include <vector>
-+#include <boost/shared_ptr.hpp>
-+
-+namespace sd
-+{
-+
-+class IntelligentGroupTextIterator
-+{
-+public:
-+
-+ virtual ~IntelligentGroupTextIterator();
-+ virtual bool Rewind ();
-+ virtual bool HasParent();
-+ virtual sal_Int32 GetLevel();
-+ virtual sal_Int32 GetChildCount() = 0;
-+ virtual sal_Int32 GetItemCount() = 0;
-+ virtual bool GotoFirstChild() = 0;
-+ virtual bool GotoNext() = 0;
-+ virtual bool GotoParent() = 0;
-+
-+
-+protected:
-+ sal_Int32 mnCurrentIndex;
-+ sal_Int32 mnCurrentLevel;
-+ sal_Int32 mnCurrentIndexOnLevel;
-+
-+ IntelligentGroupTextIterator();
-+ IntelligentGroupTextIterator(IntelligentGroupTextIterator* pIterator);
-+ void Up();
-+ void Down();
-+ sal_Int32 GetParentIndex (sal_Int32 nLevel);
-+
-+private:
-+ std::vector<sal_Int32> maIndexPath;
-+};
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/ListLayoutAlgorithm.hxx sd/source/ui/inc/ListLayoutAlgorithm.hxx
-new file mode 100644
-index 0000000..cad4f29
---- /dev/null
-+++ sd/source/ui/inc/ListLayoutAlgorithm.hxx
-@@ -0,0 +1,63 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: ListLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_LIST_LAYOUT_ALGORITHM_HXX
-+#define SD_LIST_LAYOUT_ALGORITHM_HXX
-+
-+
-+#include "IntelligentGroupAlgorithmBase.hxx"
-+
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd {
-+
-+
-+class ListLayoutAlgorithm : public IntelligentGroupAlgorithmBase
-+{
-+public:
-+ ListLayoutAlgorithm( const ig::Orientation eOrientation );
-+ virtual ~ListLayoutAlgorithm();
-+ void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, boost::shared_ptr<IntelligentGroupModel> pModel, const css::awt::Rectangle aGroupBoundingBox );
-+ css::awt::Point CreatePosition( const sal_Int32 nPositionOnPrimaryAxis, const sal_Int32 nPositionOnSecondaryAxis );
-+
-+protected:
-+ sal_Int32 Project( const sal_Int32 nFirst, const sal_Int32 nSecond, const bool bProjectToPrimaryAxis );
-+ css::awt::Size CreateSize( const sal_Int32 nSizeOnPrimaryAxis, const sal_Int32 nSizeOnSecondaryAxis );
-+
-+private:
-+ ig::Orientation meOrientation;
-+};
-+
-+
-+ }
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/PictureAccentListLayout.hxx sd/source/ui/inc/PictureAccentListLayout.hxx
-new file mode 100644
-index 0000000..2d467af
---- /dev/null
-+++ sd/source/ui/inc/PictureAccentListLayout.hxx
-@@ -0,0 +1,64 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: PictureAccentListLayout.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_PICTURE_ACCENT_LIST_LAYOUT_HXX
-+#define SD_PICTURE_ACCENT_LIST_LAYOUT_HXX
-+
-+#include "IntelligentGroupLayoutBase.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+namespace sd{
-+
-+ class PictureAccentListLayout: public IntelligentGroupLayoutBase
-+ {
-+ public:
-+ PictureAccentListLayout(boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+ double GetGap(css::awt::Rectangle aGroupBoundingBox);
-+ css::awt::Size GetBoundingSize(sal_Int32 nIndex, css::awt::Size aDefaultSize, std::vector<IntelligentGroupShapeDescriptor> aDescriptos);
-+ std::vector<IntelligentGroupShapeDescriptor> PrepareShapes(boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator, sal_Int32 nIndex, bool bCreatedByUser = false);
-+// void PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aDescriptors, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale);
-+ void PlaceShapes(sal_Int32 nShapeGroupIndex, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale);
-+ css::uno::Reference<css::drawing::XShape> CreateShape(rtl::OUString aIdentifier);
-+ rtl::OUString GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex);
-+
-+
-+ private:
-+ rtl::OUString GetShapePrefix(ig::ShapeClass eClass);
-+ ig::ShapeClass GetClassForName(rtl::OUString sIdentifier);
-+ };
-+
-+
-+} //end of nameclass sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/RowFieldLayoutAlgorithm.hxx sd/source/ui/inc/RowFieldLayoutAlgorithm.hxx
-new file mode 100644
-index 0000000..21c241d
---- /dev/null
-+++ sd/source/ui/inc/RowFieldLayoutAlgorithm.hxx
-@@ -0,0 +1,50 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: RowFieldLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_ROW_FIELD_LAYOUT_ALGORITHM_HXX
-+#define SD_ROW_FIELD_LAYOUT_ALGORITHM_HXX
-+
-+
-+#include "FieldLayoutAlgorithm.hxx"
-+
-+
-+namespace sd {
-+
-+class RowFieldLayoutAlgorithm : public FieldLayoutAlgorithm
-+{
-+public:
-+ RowFieldLayoutAlgorithm();
-+ ~RowFieldLayoutAlgorithm();
-+};
-+
-+}
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/SelectionManager.hxx sd/source/ui/inc/SelectionManager.hxx
-new file mode 100644
-index 0000000..14034be
---- /dev/null
-+++ sd/source/ui/inc/SelectionManager.hxx
-@@ -0,0 +1,99 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: SelectionManager.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+#ifndef SD_SELECTION_MANAGER_HXX
-+#define SD_SELECTION_MANAGER_HXX
-+
-+#include <hash_map>
-+#include <cppuhelper/implbase2.hxx>
-+#include <com/sun/star/view/XSelectionChangeListener.hpp>
-+#include <com/sun/star/beans/XPropertyChangeListener.hpp>
-+#include <com/sun/star/view/XSelectionSupplier.hpp>
-+#include "IntelligentGroup.hxx"
-+#include "IntelligentGroupFrame.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd{
-+
-+class View;
-+
-+typedef ::cppu::WeakImplHelper2< ::com::sun::star::view::XSelectionChangeListener, ::com::sun::star::beans::XPropertyChangeListener > SelectionChangeListener;
-+
-+class SelectionManager: public SelectionChangeListener
-+{
-+public:
-+
-+ SelectionManager(css::uno::Reference< css::frame::XController > xController,
-+ css::uno::Reference< css::frame::XModel > xModel) ;
-+ virtual ~SelectionManager() ;
-+ boost::shared_ptr<IntelligentGroup> GetSelectedIntelligentGroup();
-+ bool IsSelectedIntelligentGroupEntered();
-+ void Select(boost::shared_ptr<IntelligentGroup> pIntelligentGroup);
-+ void AddSelectionChangeListener(css::uno::Reference< css::view::XSelectionChangeListener > xListener);
-+ void RemoveSelectionChangeListener(css::uno::Reference< css::view::XSelectionChangeListener > xListener);
-+ void SetSelectedShape(css::uno::Reference< css::drawing::XShape > xShape);
-+ css::uno::Reference< css::drawing::XShape > GetSelectedShape();
-+ void DisposeFrame();
-+
-+ // lang::XEventListener
-+ void SAL_CALL
-+ disposing (const ::com::sun::star::lang::EventObject& rEventObject)
-+ throw (::com::sun::star::uno::RuntimeException);
-+
-+ // view::XSelectionChangeListener
-+ void SAL_CALL
-+ selectionChanged (const ::com::sun::star::lang::EventObject& rEvent)
-+ throw (::com::sun::star::uno::RuntimeException);
-+
-+ // beans::XPropertyChangeListener
-+ void SAL_CALL
-+ propertyChange (const ::com::sun::star::beans::PropertyChangeEvent& rEventObject)
-+ throw (::com::sun::star::uno::RuntimeException);
-+private:
-+ boost::shared_ptr<IntelligentGroup> FindShapeInGroup(css::uno::Reference< css::drawing::XShape > xShape);
-+
-+private:
-+
-+// css::uno::Reference< css::view::XSelectionSupplier > mxSelectionSupplier;
-+ css::uno::Reference< css::drawing::XShape > mxSelectedShape;
-+ css::uno::Reference< css::frame::XModel > mxModel;
-+ css::uno::Reference< css::frame::XController > mxController;
-+ std::vector< css::uno::Reference< css::view::XSelectionChangeListener > > maListeners;
-+ css::uno::Reference< css::view::XSelectionSupplier > mxSelectionSupplier;
-+ boost::shared_ptr<IntelligentGroup> mpSelectedIntelligentGroup;
-+ bool mbIsEntered;
-+ IntelligentGroupFrame* mpIntelligentGroupFrame;
-+};
-+
-+}//end of namespace sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/TaskPaneViewShell.hxx sd/source/ui/inc/TaskPaneViewShell.hxx
-index 6659064..e36f1e5 100644
---- sd/source/ui/inc/TaskPaneViewShell.hxx
-+++ sd/source/ui/inc/TaskPaneViewShell.hxx
-@@ -76,6 +76,7 @@ public:
- PID_UNKNOWN = PID__START,
- PID_MASTER_PAGES,
- PID_LAYOUT,
-+ PID_INTELLIGENT_GROUP,
- PID_TABLE_DESIGN,
- PID_ANIMATION_SCHEMES,
- PID_CUSTOM_ANIMATION,
-diff --git sd/source/ui/inc/TreeLayout.hxx sd/source/ui/inc/TreeLayout.hxx
-new file mode 100644
-index 0000000..24d396f
---- /dev/null
-+++ sd/source/ui/inc/TreeLayout.hxx
-@@ -0,0 +1,62 @@
-+/*************************************************************************
-+ *
-+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+ *
-+ * Copyright 2008 by Sun Microsystems, Inc.
-+ *
-+ * OpenOffice.org - a multi-platform office productivity suite
-+ *
-+ * $RCSfile: TreeLayout.hxx,v $
-+ * $Revision: 1.0 $
-+ *
-+ * This file is part of OpenOffice.org.
-+ *
-+ * OpenOffice.org is free software: you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 3
-+ * only, as published by the Free Software Foundation.
-+ *
-+ * OpenOffice.org 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 Lesser General Public License version 3 for more details
-+ * (a copy is included in the LICENSE file that accompanied this code).
-+ *
-+ * You should have received a copy of the GNU Lesser General Public License
-+ * version 3 along with OpenOffice.org. If not, see
-+ * <http://www.openoffice.org/license.html>
-+ * for a copy of the LGPLv3 License.
-+ *
-+ ************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+
-+#ifndef SD_TREE_LAYOUT_HXX
-+#define SD_TREE_LAYOUT_HXX
-+
-+#include "IntelligentGroupLayoutBase.hxx"
-+
-+namespace css = ::com::sun::star;
-+
-+namespace sd{
-+
-+ class TreeLayout: public IntelligentGroupLayoutBase
-+ {
-+ public:
-+ TreeLayout(boost::shared_ptr<IntelligentGroupModel> pModel,
-+ boost::shared_ptr<IntelligentGroupLayoutDescriptor> pDescriptor);
-+ double GetGap(css::awt::Rectangle aGroupBoundingBox);
-+ css::awt::Size GetBoundingSize(sal_Int32 nIndex, css::awt::Size aDefaultSize, std::vector<IntelligentGroupShapeDescriptor> aDescriptos);
-+ std::vector<IntelligentGroupShapeDescriptor> PrepareShapes(boost::shared_ptr<IntelligentGroupTextIterator> pTextIterator, sal_Int32 nIndex, bool bCreatedByUser = false);
-+// void PlaceShapes(std::vector<IntelligentGroupShapeDescriptor> aDescriptors, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale);
-+ void PlaceShapes(sal_Int32 nShapeGroupIndex, css::awt::Rectangle aBoundingBox, css::awt::Rectangle aGroupBoundingBox, css::awt::Size aDefaultSize, double nScale);
-+ css::uno::Reference<css::drawing::XShape> CreateShape(rtl::OUString aIdentifier);
-+ rtl::OUString GetShapeName(ig::ShapeClass eClass, sal_Int32 nIndex);
-+
-+ private:
-+ rtl::OUString GetShapePrefix(ig::ShapeClass eClass);
-+ };
-+
-+
-+} //end of nameclass sd
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/TreeLayoutAlgorithm.hxx sd/source/ui/inc/TreeLayoutAlgorithm.hxx
-new file mode 100644
-index 0000000..e083503
---- /dev/null
-+++ sd/source/ui/inc/TreeLayoutAlgorithm.hxx
-@@ -0,0 +1,77 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: TreeLayoutAlgorithm.hxx,v $
-+*
-+* $Revision: 1.3 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+#ifndef SD_TREE_LAYOUT_ALGORITHM_HXX
-+#define SD_TREE_LAYOUT_ALGORITHM_HXX
-+
-+
-+#include "IntelligentGroupAlgorithmBase.hxx"
-+
-+
-+namespace css = ::com::sun::star;
-+
-+
-+namespace sd {
-+
-+
-+class TreeLayoutAlgorithm : public IntelligentGroupAlgorithmBase
-+{
-+public:
-+ TreeLayoutAlgorithm();
-+ virtual ~TreeLayoutAlgorithm();
-+// void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, std::vector<std::vector<IntelligentGroupShapeDescriptor>>& rShapeDescriptorVector, const css::awt::Rectangle aGroupBoundingBox );
-+ void PlaceShape( boost::shared_ptr<IntelligentGroupLayoutBase> pLayout, boost::shared_ptr<IntelligentGroupModel> pModel, const css::awt::Rectangle aGroupBoundingBox );
-+
-+
-+protected:
-+ Rectangle PlaceSubTree(
-+ boost::shared_ptr<IntelligentGroupLayoutBase> pLayout,
-+// std::vector<std::vector<IntelligentGroupShapeDescriptor>>& aShapeDescriptors,
-+ boost::shared_ptr<IntelligentGroupModel> pModel,
-+ sal_Int32 nIndex,
-+ sal_Int32 nCount,
-+ css::uno::Reference<css::drawing::XShape> xParent,
-+ sal_Int32 nLeft);
-+
-+
-+private:
-+ css::awt::Rectangle maGroupBoundingBox;
-+ sal_Int32 mnLevelCount;
-+ sal_Int32 mnShapeWidth;
-+ sal_Int32 mnShapeHeight;
-+ sal_Int32 mnHorizontalSpace;
-+ sal_Int32 mnVerticalSpace;
-+};
-+
-+
-+ }
-+
-+#endif
-\ No newline at end of file
-diff --git sd/source/ui/inc/ViewShellBase.hxx sd/source/ui/inc/ViewShellBase.hxx
-index fdd8b95..1017018 100644
---- sd/source/ui/inc/ViewShellBase.hxx
-+++ sd/source/ui/inc/ViewShellBase.hxx
-@@ -39,6 +39,7 @@
- #include <memory>
- #include <boost/shared_ptr.hpp>
- #include <boost/scoped_ptr.hpp>
-+#include "SelectionManager.hxx"
-
- #include <set>
-
-@@ -202,6 +203,9 @@ public:
- */
- void SetBusyState (bool bBusy);
-
-+ void SetIGSelectionManager(::boost::shared_ptr<SelectionManager> pSelectionManager);
-+ ::boost::shared_ptr<SelectionManager> GetIGSelectionManager(void);
-+
- /** Call this method when the controls of this view shell or the
- embedded sub shell need to be rearranged. This is necessary
- e.g. when the border has been modified (UpdateBorder() calls this
-@@ -271,6 +275,7 @@ private:
- ::boost::scoped_ptr<Implementation> mpImpl;
- DrawDocShell* mpDocShell;
- SdDrawDocument* mpDocument;
-+ ::boost::shared_ptr<SelectionManager> mpIGSelectionManager;
-
- /** Determine from the properties of the document shell the initial type
- of the view shell in the center pane. We use this method to avoid
-diff --git sd/source/ui/inc/framework/FrameworkHelper.hxx sd/source/ui/inc/framework/FrameworkHelper.hxx
-index 3e06aac..cee3bbd 100644
---- sd/source/ui/inc/framework/FrameworkHelper.hxx
-+++ sd/source/ui/inc/framework/FrameworkHelper.hxx
-@@ -100,6 +100,7 @@ public:
- static const ::rtl::OUString msTaskPanelURLPrefix;
- static const ::rtl::OUString msMasterPagesTaskPanelURL;
- static const ::rtl::OUString msLayoutTaskPanelURL;
-+ static const ::rtl::OUString msIntelligentGroupTaskPanelURL;
- static const ::rtl::OUString msTableDesignPanelURL;
- static const ::rtl::OUString msCustomAnimationTaskPanelURL;
- static const ::rtl::OUString msSlideTransitionTaskPanelURL;
-diff --git sd/source/ui/inc/res_bmp.hrc sd/source/ui/inc/res_bmp.hrc
-index 8565e1b..659c2e2 100644
---- sd/source/ui/inc/res_bmp.hrc
-+++ sd/source/ui/inc/res_bmp.hrc
-@@ -304,6 +304,12 @@
- #define RID_DRAW_OUTLINETEXTOBJ_POPUP RID_APP_START+94
- #define RID_GRAPHIC_OUTLINETEXTOBJ_POPUP RID_APP_START+95
-
-+#define BMP_IGLAYOUTS_GROUPEDLIST RID_APP_START+93
-+#define BMP_IGLAYOUTS_PICTUREACCENTLIST RID_APP_START+94
-+#define BMP_IGLAYOUTS_TREE RID_APP_START+95
-+#define BMP_IGLAYOUTS_SIMPLEFIELD RID_APP_START+96
-+#define BMP_IGLAYOUTS_BASECIRCLE RID_APP_START+97
-+
- /*
- * Pointer (Mauszeiger)
- */
-diff --git sd/source/ui/toolpanel/TaskPaneViewShell.cxx sd/source/ui/toolpanel/TaskPaneViewShell.cxx
-index 6322365..aac1e11 100644
---- sd/source/ui/toolpanel/TaskPaneViewShell.cxx
-+++ sd/source/ui/toolpanel/TaskPaneViewShell.cxx
-@@ -46,6 +46,7 @@
- #include "taskpane/TaskPaneControlFactory.hxx"
- #include "controls/MasterPagesPanel.hxx"
- #include "controls/MasterPagesSelector.hxx"
-+#include "controls/IntelligentGroupPanel.hxx"
- #include "controls/TableDesignPanel.hxx"
- #include "controls/CustomAnimationPanel.hxx"
- #include "controls/SlideTransitionPanel.hxx"
-@@ -248,6 +249,22 @@ void TaskPaneViewShell::Implementation::Setup (
- nIdOfControlToExpand = nId;
-
- {
-+ DummyControl aControl (pToolPanel, SdResId(DLG_INTELLIGENTGROUPPANE));
-+
-+ //IntelligentGroupPanel
-+ nId = pToolPanel->AddControl (
-+ controls::IntelligentGroupPanel::CreateControlFactory(rBase),
-+ aControl.GetText(),
-+ HID_SD_INTELLIGENT_GROUP,
-+ ResourceActivationClickHandler(
-+ pFrameworkHelper,
-+ pFrameworkHelper->CreateResourceId(
-+ FrameworkHelper::msIntelligentGroupTaskPanelURL, xTaskPaneId),
-+ pToolPanel->GetControlContainer()));
-+ AddPanel (nId, PID_INTELLIGENT_GROUP);
-+ }
-+
-+ {
- DummyControl aControl (pToolPanel, SdResId(DLG_TABLEDESIGNPANE));
-
- // TableDesignPanel
-diff --git sd/source/ui/toolpanel/controls/IntelligentGroupPanel.cxx sd/source/ui/toolpanel/controls/IntelligentGroupPanel.cxx
-new file mode 100644
-index 0000000..ec0bdd0
---- /dev/null
-+++ sd/source/ui/toolpanel/controls/IntelligentGroupPanel.cxx
-@@ -0,0 +1,118 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: IntelligentGroupPanel.cxx,v $
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+
-+// MARKER(update_precomp.py): autogen include statement, do not remove
-+#include "precompiled_sd.hxx"
-+#include "IntelligentGroupPanel.hxx"
-+
-+#include "taskpane/TaskPaneControlFactory.hxx"
-+
-+#include "strings.hrc"
-+#include "sdresid.hxx"
-+
-+#ifndef _COM_SUN_STAR_FRAME_XMODEL_HPP_
-+#include <com/sun/star/frame/XModel.hpp>
-+#endif
-+
-+namespace sd
-+{
-+
-+ class ViewShellBase;
-+ extern ::Window * createIntelligentGroupPanel( ::Window* pParent, ViewShellBase& rBase );
-+
-+ namespace toolpanel { namespace controls {
-+
-+
-+
-+ IntelligentGroupPanel::IntelligentGroupPanel(TreeNode* pParent, ViewShellBase& rBase)
-+ : SubToolPanel (pParent),
-+ maPreferredSize( 100, 200 )
-+ {
-+ mpWrappedControl = createIntelligentGroupPanel( pParent->GetWindow(), rBase );
-+ mpWrappedControl->Show();
-+ }
-+
-+ IntelligentGroupPanel::~IntelligentGroupPanel()
-+ {
-+ delete mpWrappedControl;
-+ }
-+
-+ std::auto_ptr<ControlFactory> IntelligentGroupPanel::CreateControlFactory (ViewShellBase& rBase)
-+ {
-+ return std::auto_ptr<ControlFactory>(
-+ new ControlFactoryWithArgs1<IntelligentGroupPanel,ViewShellBase>(rBase));
-+ }
-+
-+ Size IntelligentGroupPanel::GetPreferredSize()
-+ {
-+ return maPreferredSize;
-+ }
-+
-+ sal_Int32 IntelligentGroupPanel::GetPreferredWidth(sal_Int32 )
-+ {
-+ return maPreferredSize.Width();
-+ }
-+
-+ sal_Int32 IntelligentGroupPanel::GetPreferredHeight(sal_Int32 )
-+ {
-+ return maPreferredSize.Height();
-+ }
-+
-+ ::Window* IntelligentGroupPanel::GetWindow()
-+ {
-+ return mpWrappedControl;
-+ }
-+
-+ bool IntelligentGroupPanel::IsResizable()
-+ {
-+ return true;
-+ }
-+
-+ bool IntelligentGroupPanel::IsExpandable() const
-+ {
-+ return true;
-+ }
-+
-+
-+
-+
-+ ::com::sun::star::uno::Reference<
-+ ::com::sun::star::accessibility::XAccessible> IntelligentGroupPanel::CreateAccessibleObject (
-+ const ::com::sun::star::uno::Reference<
-+ ::com::sun::star::accessibility::XAccessible>& )
-+ {
-+ if (GetWindow() != NULL)
-+ return GetWindow()->GetAccessible();
-+ else
-+ return NULL;
-+ }
-+
-+
-+ } } } // end of namespace ::sd::toolpanel::controls
-\ No newline at end of file
-diff --git sd/source/ui/toolpanel/controls/IntelligentGroupPanel.hxx sd/source/ui/toolpanel/controls/IntelligentGroupPanel.hxx
-new file mode 100644
-index 0000000..efad609
---- /dev/null
-+++ sd/source/ui/toolpanel/controls/IntelligentGroupPanel.hxx
-@@ -0,0 +1,78 @@
-+/*************************************************************************
-+*
-+* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
-+*
-+* Copyright 2008 by Sun Microsystems, Inc.
-+*
-+* OpenOffice.org - a multi-platform office productivity suite
-+*
-+* $RCSfile: IntelligentGroupPanel.hxx,v $
-+* $Revision: 1.0 $
-+*
-+* This file is part of OpenOffice.org.
-+*
-+* OpenOffice.org is free software: you can redistribute it and/or modify
-+* it under the terms of the GNU Lesser General Public License version 3
-+* only, as published by the Free Software Foundation.
-+*
-+* OpenOffice.org 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 Lesser General Public License version 3 for more details
-+* (a copy is included in the LICENSE file that accompanied this code).
-+*
-+* You should have received a copy of the GNU Lesser General Public License
-+* version 3 along with OpenOffice.org. If not, see
-+* <http://www.openoffice.org/license.html>
-+* for a copy of the LGPLv3 License.
-+*
-+************************************************************************/
-+#ifndef SD_TOOLPANEL_CONTROLS_INTELLIGENT_GROUOP_PANEL_HXX
-+#define SD_TOOLPANEL_CONTROLS_INTELLIGENT_GROUOP_PANEL_HXX
-+
-+#include "taskpane/SubToolPanel.hxx"
-+
-+namespace sd {
-+ class ViewShellBase;
-+}
-+
-+namespace sd { namespace toolpanel {
-+ class ControlFactory;
-+ class TreeNode;
-+} }
-+
-+namespace sd { namespace toolpanel { namespace controls {
-+
-+ class IntelligentGroupPanel
-+ : public SubToolPanel
-+ {
-+ public:
-+ IntelligentGroupPanel (
-+ TreeNode* pParent,
-+ ViewShellBase& rBase);
-+ virtual ~IntelligentGroupPanel (void);
-+
-+ static std::auto_ptr<ControlFactory> CreateControlFactory (ViewShellBase& rBase);
-+
-+ virtual Size GetPreferredSize (void);
-+ virtual sal_Int32 GetPreferredWidth (sal_Int32 nHeigh);
-+ virtual sal_Int32 GetPreferredHeight (sal_Int32 nWidth);
-+ virtual ::Window* GetWindow (void);
-+ virtual bool IsResizable (void);
-+ virtual bool IsExpandable (void) const;
-+
-+ virtual ::com::sun::star::uno::Reference<
-+ ::com::sun::star::accessibility::XAccessible > CreateAccessibleObject (
-+ const ::com::sun::star::uno::Reference<
-+ ::com::sun::star::accessibility::XAccessible>& rxParent);
-+
-+ using Window::GetWindow;
-+
-+ private:
-+ Size maPreferredSize;
-+ ::Window* mpWrappedControl;
-+ };
-+
-+} } } // end of namespace ::sd::toolpanel::controls
-+
-+#endif
-diff --git sd/source/ui/toolpanel/controls/makefile.mk sd/source/ui/toolpanel/controls/makefile.mk
-index 693a30f..3f281a4 100644
---- sd/source/ui/toolpanel/controls/makefile.mk
-+++ sd/source/ui/toolpanel/controls/makefile.mk
-@@ -64,7 +64,8 @@ SLOFILES = \
- $(SLO)$/CustomAnimationPanel.obj \
- $(SLO)$/SlideTransitionPanel.obj \
- $(SLO)$/TableDesignPanel.obj \
-- $(SLO)$/AnimationSchemesPanel.obj
-+ $(SLO)$/AnimationSchemesPanel.obj \
-+ $(SLO)$/IntelligentGroupPanel.obj
-
-
- # --- Tagets -------------------------------------------------------
-diff --git sd/source/ui/view/ViewShellBase.cxx sd/source/ui/view/ViewShellBase.cxx
-index 78d5092..23856db 100644
---- sd/source/ui/view/ViewShellBase.cxx
-+++ sd/source/ui/view/ViewShellBase.cxx
-@@ -416,6 +416,27 @@ void ViewShellBase::LateInit (const ::rtl::OUString& rsDefaultView)
-
-
-
-+void ViewShellBase::SetIGSelectionManager( ::boost::shared_ptr<SelectionManager> pIGSelectionManger )
-+{
-+ if(mpIGSelectionManager != pIGSelectionManger)
-+ {
-+ mpIGSelectionManager.reset();
-+ mpIGSelectionManager = pIGSelectionManger;
-+ }
-+}
-+
-+
-+
-+
-+::boost::shared_ptr<SelectionManager> ViewShellBase::GetIGSelectionManager( void )
-+{
-+ return mpIGSelectionManager;
-+}
-+
-+
-+
-+
-+
- ::boost::shared_ptr<ViewShellManager> ViewShellBase::GetViewShellManager (void) const
- {
- return mpImpl->mpViewShellManager;
-diff --git sd/source/ui/view/drviews2.cxx sd/source/ui/view/drviews2.cxx
-index 8326f7a..4a4b836 100644
---- sd/source/ui/view/drviews2.cxx
-+++ sd/source/ui/view/drviews2.cxx
-@@ -93,6 +93,8 @@
- #include "slideshow.hxx"
- #include "fuvect.hxx"
- #include "stlpool.hxx"
-+#include "ViewShellBase.hxx"
-+#include "SelectionManager.hxx"
-
- // #90356#
- #include "optsitem.hxx"
-@@ -834,6 +836,18 @@ void DrawViewShell::FuTemporary(SfxRequest& rReq)
- rReq.Done ();
- break;
-
-+ case SID_ADD_SHAPE:
-+ {
-+ Reference<drawing::XShape> xShape ( GetViewShellBase().GetIGSelectionManager()->GetSelectedShape() );
-+ if(!IntelligentGroup::IsIntelligentGroup(xShape))
-+ break;
-+ GetViewShellBase().GetIGSelectionManager()->GetSelectedIntelligentGroup()->AddShape(xShape);
-+ }
-+
-+ Cancel();
-+ rReq.Done();
-+ break;
-+
- case SID_SET_DEFAULT:
- {
- SfxItemSet* pSet = NULL;
-diff --git sd/source/ui/view/drviewse.cxx sd/source/ui/view/drviewse.cxx
-index 1c77e6a..b94ba5b 100644
---- sd/source/ui/view/drviewse.cxx
-+++ sd/source/ui/view/drviewse.cxx
-@@ -71,7 +71,9 @@
- #include <svtools/urihelper.hxx>
- #include <sfx2/topfrm.hxx>
- #include <sfx2/docfile.hxx>
-+#include <svx/unoshape.hxx>
-
-+#include "IntelligentGroupController.hxx"
- #include "DrawViewShell.hxx"
- #include "slideshow.hxx"
- #include "ViewShellImplementation.hxx"
-@@ -273,6 +275,33 @@ void DrawViewShell::FuPermanent(SfxRequest& rReq)
- }
- break;
-
-+ case SID_INSERT_INTELLIGENT_GROUP:
-+ {
-+ SdPage* pPage = GetActualPage();
-+
-+ IntelligentGroupController* pIGController = new IntelligentGroupController(
-+ uno::Reference<frame::XModel>(pPage->GetModel()->getUnoModel(),uno::UNO_QUERY),
-+ GetViewShellBase().GetController(),
-+ GetViewShellBase());
-+
-+ SFX_REQUEST_ARG (rReq, pName, SfxStringItem, SID_INSERT_INTELLIGENT_GROUP, FALSE);
-+ rtl::OUString sLayoutName;
-+ if(pName)
-+ {
-+ sLayoutName = pName->GetValue();
-+ pIGController->SetLayout(sLayoutName,true);
-+ }
-+ else
-+ pIGController->SetLayout(OUString(RTL_CONSTASCII_USTRINGPARAM("GroupedList")),true);
-+
-+ delete pIGController;
-+
-+ SetCurrentFunction( FuSelection::Create(this, GetActiveWindow(), mpDrawView, GetDoc(), rReq) );
-+ rReq.Done();
-+ Invalidate( SID_OBJECT_SELECT );
-+ }
-+ break;
-+
- // #98721#
- case SID_FM_CREATE_FIELDCONTROL:
- {
-@@ -854,6 +883,32 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
- ::sd::Window* pWindow = GetActiveWindow();
- InfoBox(pWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
- }
-+ else if (GetViewShellBase().GetIGSelectionManager().get() &&
-+ IntelligentGroup::IsIntelligentGroup(GetViewShellBase().GetIGSelectionManager()->GetSelectedShape()))
-+ {
-+ boost::shared_ptr<IntelligentGroup> pCurrentGroup = GetViewShellBase().GetIGSelectionManager()->GetSelectedIntelligentGroup();
-+
-+ pCurrentGroup->GetModel()->RemoveShape(GetViewShellBase().GetIGSelectionManager()->GetSelectedShape());
-+
-+ KeyCode aKCode(KEY_DELETE);
-+ KeyEvent aKEvt( 0, aKCode);
-+
-+ bool bConsumed = mpDrawView && mpDrawView->getSmartTags().KeyInput( aKEvt );
-+
-+ if( !bConsumed && HasCurrentFunction() )
-+ bConsumed = GetCurrentFunction()->KeyInput(aKEvt);
-+
-+ if( !bConsumed && mpDrawView )
-+ mpDrawView->DeleteMarked();
-+
-+
-+ if(pCurrentGroup->GetModel()->GetShapeCount() == 0)
-+ {
-+ GetViewShellBase().GetIGSelectionManager()->DisposeFrame();
-+ }
-+ else
-+ pCurrentGroup->UpdateLayout();
-+ }
- else
- {
- KeyCode aKCode(KEY_DELETE);
-@@ -1425,6 +1480,13 @@ void DrawViewShell::FuSupport(SfxRequest& rReq)
- {
- // #96090# moved implementation to BaseClass
- ImpSidUndo(TRUE, rReq);
-+
-+ boost::shared_ptr<IntelligentGroup> pIntelligentGroup = GetViewShellBase().GetIGSelectionManager()->GetSelectedIntelligentGroup();
-+ if(pIntelligentGroup.get())
-+ {
-+ if(pIntelligentGroup->GetModel()->RequestUndo())
-+ pIntelligentGroup->UpdateLayout();
-+ }
- }
- break;
- case SID_REDO :
-diff --git sd/uiconfig/simpress/menubar/menubar.xml sd/uiconfig/simpress/menubar/menubar.xml
-index 8e6fd46..7394432 100644
---- sd/uiconfig/simpress/menubar/menubar.xml
-+++ sd/uiconfig/simpress/menubar/menubar.xml
-@@ -173,6 +173,7 @@
- </menu:menupopup>
- </menu:menu>
- <menu:menuitem menu:id=".uno:InsertTable"/>
-+ <menu:menuitem menu:id=".uno:InsertIntelligentGroup"/>
- <menu:menuitem menu:id=".uno:InsertAVMedia"/>
- <menu:menu menu:id=".uno:ObjectMenu">
- <menu:menupopup>
-diff --git sd/util/makefile.mk sd/util/makefile.mk
-index c2409f4..cee9b83 100644
---- sd/util/makefile.mk
-+++ sd/util/makefile.mk
-@@ -60,6 +60,7 @@ RESLIB1SRSFILES=\
- $(SRS)$/animui.srs \
- $(SRS)$/slideshow.srs \
- $(SRS)$/uitable.srs \
-+ $(SRS)$/ig.srs \
- $(SOLARCOMMONRESDIR)$/sfx.srs
-
- # --- StarDraw DLL
-@@ -140,7 +141,8 @@ LIB5FILES= \
- $(SLB)$/accessibility.lib \
- $(SLB)$/toolpanel.lib \
- $(SLB)$/uitools.lib \
-- $(SLB)$/tpcontrols.lib
-+ $(SLB)$/tpcontrols.lib \
-+ $(SLB)$/ig.lib
-
- LIB6TARGET=$(SLB)$/sdraw3_3.lib
- LIB6FILES= \
-@@ -156,7 +158,8 @@ LIB6FILES= \
- $(SLB)$/framework_factories.lib \
- $(SLB)$/framework_module.lib \
- $(SLB)$/framework_tools.lib \
-- $(SLB)$/presenter.lib
-+ $(SLB)$/presenter.lib
-+
-
- # sdd
- SHL2TARGET= sdd$(DLLPOSTFIX)