void OReportController::Execute()

in main/reportdesign/source/ui/report/ReportController.cxx [997:1663]


void OReportController::Execute(sal_uInt16 _nId, const Sequence< PropertyValue >& aArgs)
{
	::vos::OGuard aSolarGuard( Application::GetSolarMutex() );
	::osl::MutexGuard aGuard( getMutex() );

    sal_Bool bForceBroadcast = sal_False;
	switch(_nId)
	{
        case SID_RPT_TEXTDOCUMENT:
            if ( m_xReportDefinition.is() )
                m_xReportDefinition->setMimeType( MIMETYPE_OASIS_OPENDOCUMENT_TEXT );
            break;
        case SID_RPT_SPREADSHEET:
            if (m_xReportDefinition.is() )
                m_xReportDefinition->setMimeType( MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET );
            break;
		case SID_REPORTHEADER_WITHOUT_UNDO:
		case SID_REPORTFOOTER_WITHOUT_UNDO:
		case SID_REPORTHEADERFOOTER:
            switchReportSection(_nId);
			break;
		case SID_PAGEHEADER_WITHOUT_UNDO:
		case SID_PAGEFOOTER_WITHOUT_UNDO:
		case SID_PAGEHEADERFOOTER:
            switchPageSection(_nId);
			break;
		case SID_GROUP_APPEND:
		case SID_GROUP_REMOVE:
            modifyGroup(_nId == SID_GROUP_APPEND,aArgs);
			break;
		case SID_GROUPHEADER_WITHOUT_UNDO:
		case SID_GROUPHEADER:
            createGroupSection(SID_GROUPHEADER == _nId,true,aArgs);
			break;
		case SID_GROUPFOOTER_WITHOUT_UNDO:
		case SID_GROUPFOOTER:
            createGroupSection(SID_GROUPFOOTER == _nId,false,aArgs);
			break;
		case SID_ADD_CONTROL_PAIR:
            addPairControls(aArgs);
			break;
		case SID_REDO:
        case SID_UNDO:
        {
            const OXUndoEnvironment::OUndoMode aLock( m_aReportModel->GetUndoEnv() );
            sal_Bool ( SfxUndoManager::*doXDo )() =
                ( _nId == SID_UNDO ) ? &SfxUndoManager::Undo : &SfxUndoManager::Redo;

            SfxUndoManager& rUndoManager( getUndoManager() );
            (rUndoManager.*doXDo)();
            InvalidateAll();
            updateFloater();
        }
		break;
		case SID_CUT:
            executeMethodWithUndo(RID_STR_UNDO_REMOVE_SELECTION,::std::mem_fun(&ODesignView::Cut));
			break;
		case SID_COPY:
			getDesignView()->Copy();
			break;
		case SID_PASTE:
            executeMethodWithUndo(RID_STR_UNDO_PASTE,::std::mem_fun(&ODesignView::Paste));
			break;

        case SID_FRAME_TO_TOP:
        case SID_FRAME_DOWN:
        case SID_FRAME_UP:
        case SID_FRAME_TO_BOTTOM:
        case SID_OBJECT_HEAVEN:
        case SID_OBJECT_HELL:
            changeZOrder(_nId);
			break;
        case SID_DISTRIBUTION:
            {
                OSectionView* pSectionView = getCurrentSectionView();
                if ( pSectionView )
                    pSectionView->DistributeMarkedObjects();
            }
            break;
        case SID_OBJECT_SMALLESTWIDTH:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::WIDTH_SMALLEST);
            break;
        case SID_OBJECT_SMALLESTHEIGHT:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::HEIGHT_SMALLEST);
            break;
        case SID_OBJECT_GREATESTWIDTH:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::WIDTH_GREATEST);
            break;
        case SID_OBJECT_GREATESTHEIGHT:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::HEIGHT_GREATEST);
            break;
        case SID_SECTION_ALIGN_LEFT:
        case SID_OBJECT_ALIGN_LEFT:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::LEFT,SID_SECTION_ALIGN_LEFT == _nId);
			break;
        case SID_SECTION_ALIGN_CENTER:
        case SID_OBJECT_ALIGN_CENTER:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::CENTER_HORIZONTAL,SID_SECTION_ALIGN_CENTER == _nId);
			break;
        case SID_SECTION_ALIGN_RIGHT:
        case SID_OBJECT_ALIGN_RIGHT:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::RIGHT,SID_SECTION_ALIGN_RIGHT == _nId);
			break;
        case SID_SECTION_ALIGN_UP:
        case SID_OBJECT_ALIGN_UP:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::TOP,SID_SECTION_ALIGN_UP == _nId);
			break;
        case SID_SECTION_ALIGN_MIDDLE:
        case SID_OBJECT_ALIGN_MIDDLE:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::CENTER_VERTICAL,SID_SECTION_ALIGN_MIDDLE == _nId);
			break;
        case SID_SECTION_ALIGN_DOWN:
        case SID_OBJECT_ALIGN_DOWN:
            alignControlsWithUndo(RID_STR_UNDO_ALIGNMENT,ControlModification::BOTTOM,SID_SECTION_ALIGN_DOWN == _nId);
			break;

        case SID_SECTION_SHRINK_BOTTOM:
        case SID_SECTION_SHRINK_TOP:
        case SID_SECTION_SHRINK:
            {
        		uno::Reference<report::XSection> xSection = getDesignView()->getCurrentSection();
                shrinkSection(RID_STR_UNDO_SHRINK, xSection, _nId);
            }
            break;

        case SID_SELECTALL:
			getDesignView()->SelectAll(OBJ_NONE);
			break;
        case SID_SELECTALL_IN_SECTION:
            {
                OSectionView* pSectionView = getCurrentSectionView();
                if ( pSectionView )
                    pSectionView->MarkAll();
            }
            break;
        case SID_ESCAPE:
            getDesignView()->SetMode(RPTUI_SELECT);
            InvalidateFeature( SID_OBJECT_SELECT );
            break;
        case SID_SELECT_ALL_EDITS:
            getDesignView()->SelectAll(OBJ_DLG_FORMATTEDFIELD);
            break;
        case SID_SELECT_ALL_LABELS:
            getDesignView()->SelectAll(OBJ_DLG_FIXEDTEXT);
            break;
        case SID_TERMINATE_INPLACEACTIVATION:
            {
                ::boost::shared_ptr<OSectionWindow> pSection = getDesignView()->getMarkedSection();
                if ( pSection )
                    pSection->getReportSection().deactivateOle();
            }
            break;
        case SID_SELECT:
            if ( aArgs.getLength() == 1 )
                select(aArgs[0].Value);
            break;
		case SID_SELECT_REPORT:
            select(uno::makeAny(m_xReportDefinition));
			break;
        case SID_EXECUTE_REPORT:
            /*m_nExecuteReportEvent = */getView()->PostUserEvent(LINK(this, OReportController,OnExecuteReport));
            break;
        case SID_RPT_NEW_FUNCTION:
            createNewFunction(aArgs[0].Value);
            break;
        case SID_COLLAPSE_SECTION:
            collapseSection(true);
            break;
        case SID_EXPAND_SECTION:
            collapseSection(false);
            break;
        case SID_NEXT_MARK:
            markSection(true);
            break;
        case SID_PREV_MARK:
            markSection(false);
            break;
		case SID_DELETE:
            if ( aArgs.getLength() == 1 )
            {
                uno::Reference< report::XFunction> xFunction;
                aArgs[0].Value >>= xFunction;
                if ( xFunction.is() )
                {
                    uno::Reference< report::XFunctions> xFunctions(xFunction->getParent(),uno::UNO_QUERY_THROW);
                    sal_Int32 nIndex = getPositionInIndexAccess(xFunctions.get(),xFunction);
                    const String sUndoAction = String((ModuleRes(RID_STR_UNDO_REMOVE_FUNCTION)));
                    UndoContext aUndoContext( getUndoManager(), sUndoAction );
                    xFunctions->removeByIndex(nIndex);
                    select(uno::makeAny(xFunctions->getParent()));
	                InvalidateFeature( SID_SAVEDOC );
	                InvalidateFeature( SID_UNDO );
                }
            }
            else
                executeMethodWithUndo(RID_STR_UNDO_REMOVE_SELECTION,::std::mem_fun(&ODesignView::Delete));
			break;
		case SID_GRID_USE:
            getDesignView()->setGridSnap(m_bGridUse = !m_bGridUse);
			break;
        case SID_HELPLINES_MOVE:
            getDesignView()->setDragStripes(m_bHelplinesMove = !m_bHelplinesMove);
            break;
		case SID_GRID_VISIBLE:
			getDesignView()->toggleGrid(m_bGridVisible = !m_bGridVisible);
			break;
		case SID_RULER:
			getDesignView()->showRuler(m_bShowRuler = !m_bShowRuler);
			break;
		case SID_OBJECT_SELECT:
			getDesignView()->SetMode(RPTUI_SELECT);
			InvalidateAll();
			break;
        case SID_INSERT_DIAGRAM:
            getDesignView()->SetMode( RPTUI_INSERT );
			getDesignView()->SetInsertObj( OBJ_OLE2);
            createDefaultControl(aArgs);
			InvalidateAll();
            break;
		case SID_FM_FIXEDTEXT:
			getDesignView()->SetMode( RPTUI_INSERT );
			getDesignView()->SetInsertObj( OBJ_DLG_FIXEDTEXT );
            createDefaultControl(aArgs);
			InvalidateAll();
			break;
        case SID_INSERT_HFIXEDLINE:
			getDesignView()->SetMode( RPTUI_INSERT );
			getDesignView()->SetInsertObj( OBJ_DLG_HFIXEDLINE );
            createDefaultControl(aArgs);
			InvalidateAll();
			break;
        case SID_INSERT_VFIXEDLINE:
			getDesignView()->SetMode( RPTUI_INSERT );
			getDesignView()->SetInsertObj( OBJ_DLG_VFIXEDLINE );
            createDefaultControl(aArgs);
			InvalidateAll();
			break;
		case SID_FM_EDIT:
			getDesignView()->SetMode( RPTUI_INSERT );
			getDesignView()->SetInsertObj( OBJ_DLG_FORMATTEDFIELD );
            createDefaultControl(aArgs);
			InvalidateAll();
			break;
		case SID_FM_IMAGECONTROL:
			getDesignView()->SetMode( RPTUI_INSERT );
			getDesignView()->SetInsertObj( OBJ_DLG_IMAGECONTROL );
            createDefaultControl(aArgs);
			InvalidateAll();
			break;
        case SID_DRAWTBX_CS_BASIC:
        case SID_DRAWTBX_CS_BASIC1:
        case SID_DRAWTBX_CS_BASIC2:
        case SID_DRAWTBX_CS_BASIC3:
        case SID_DRAWTBX_CS_BASIC4:
        case SID_DRAWTBX_CS_BASIC5:
        case SID_DRAWTBX_CS_BASIC6:
        case SID_DRAWTBX_CS_BASIC7:
        case SID_DRAWTBX_CS_BASIC8:
        case SID_DRAWTBX_CS_BASIC9:
        case SID_DRAWTBX_CS_BASIC10:
        case SID_DRAWTBX_CS_BASIC11:
        case SID_DRAWTBX_CS_BASIC12:
        case SID_DRAWTBX_CS_BASIC13:
        case SID_DRAWTBX_CS_BASIC14:
        case SID_DRAWTBX_CS_BASIC15:
        case SID_DRAWTBX_CS_BASIC16:
        case SID_DRAWTBX_CS_BASIC17:
        case SID_DRAWTBX_CS_BASIC18:
        case SID_DRAWTBX_CS_BASIC19:
        case SID_DRAWTBX_CS_BASIC20:
        case SID_DRAWTBX_CS_BASIC21:
        case SID_DRAWTBX_CS_BASIC22:
        case SID_DRAWTBX_CS_SYMBOL1:
		case SID_DRAWTBX_CS_SYMBOL2:
		case SID_DRAWTBX_CS_SYMBOL3:
		case SID_DRAWTBX_CS_SYMBOL4:
		case SID_DRAWTBX_CS_SYMBOL5:
		case SID_DRAWTBX_CS_SYMBOL6:
		case SID_DRAWTBX_CS_SYMBOL7:
		case SID_DRAWTBX_CS_SYMBOL8:
		case SID_DRAWTBX_CS_SYMBOL9:
		case SID_DRAWTBX_CS_SYMBOL10:
		case SID_DRAWTBX_CS_SYMBOL11:
		case SID_DRAWTBX_CS_SYMBOL12:
		case SID_DRAWTBX_CS_SYMBOL13:
		case SID_DRAWTBX_CS_SYMBOL14:
		case SID_DRAWTBX_CS_SYMBOL15:
		case SID_DRAWTBX_CS_SYMBOL16:
		case SID_DRAWTBX_CS_SYMBOL17:
		case SID_DRAWTBX_CS_SYMBOL18:
		case SID_DRAWTBX_CS_ARROW1:
		case SID_DRAWTBX_CS_ARROW2:
		case SID_DRAWTBX_CS_ARROW3:
		case SID_DRAWTBX_CS_ARROW4:
		case SID_DRAWTBX_CS_ARROW5:
		case SID_DRAWTBX_CS_ARROW6:
		case SID_DRAWTBX_CS_ARROW7:
		case SID_DRAWTBX_CS_ARROW8:
		case SID_DRAWTBX_CS_ARROW9:
		case SID_DRAWTBX_CS_ARROW10:
		case SID_DRAWTBX_CS_ARROW11:
		case SID_DRAWTBX_CS_ARROW12:
		case SID_DRAWTBX_CS_ARROW13:
		case SID_DRAWTBX_CS_ARROW14:
		case SID_DRAWTBX_CS_ARROW15:
		case SID_DRAWTBX_CS_ARROW16:
		case SID_DRAWTBX_CS_ARROW17:
		case SID_DRAWTBX_CS_ARROW18:
		case SID_DRAWTBX_CS_ARROW19:
		case SID_DRAWTBX_CS_ARROW20:
		case SID_DRAWTBX_CS_ARROW21:
		case SID_DRAWTBX_CS_ARROW22:
		case SID_DRAWTBX_CS_ARROW23:
		case SID_DRAWTBX_CS_ARROW24:
		case SID_DRAWTBX_CS_ARROW25:
		case SID_DRAWTBX_CS_ARROW26:
		case SID_DRAWTBX_CS_STAR1:
		case SID_DRAWTBX_CS_STAR2:
		case SID_DRAWTBX_CS_STAR3:
		case SID_DRAWTBX_CS_STAR4:
		case SID_DRAWTBX_CS_STAR5:
		case SID_DRAWTBX_CS_STAR6:
		case SID_DRAWTBX_CS_STAR7:
		case SID_DRAWTBX_CS_STAR8:
		case SID_DRAWTBX_CS_STAR9:
		case SID_DRAWTBX_CS_STAR10:
		case SID_DRAWTBX_CS_STAR11:
		case SID_DRAWTBX_CS_STAR12:
		case SID_DRAWTBX_CS_FLOWCHART1:
		case SID_DRAWTBX_CS_FLOWCHART2:
		case SID_DRAWTBX_CS_FLOWCHART3:
		case SID_DRAWTBX_CS_FLOWCHART4:
		case SID_DRAWTBX_CS_FLOWCHART5:
		case SID_DRAWTBX_CS_FLOWCHART6:
		case SID_DRAWTBX_CS_FLOWCHART7:
		case SID_DRAWTBX_CS_FLOWCHART8:
		case SID_DRAWTBX_CS_FLOWCHART9:
		case SID_DRAWTBX_CS_FLOWCHART10:
		case SID_DRAWTBX_CS_FLOWCHART11:
		case SID_DRAWTBX_CS_FLOWCHART12:
		case SID_DRAWTBX_CS_FLOWCHART13:
		case SID_DRAWTBX_CS_FLOWCHART14:
		case SID_DRAWTBX_CS_FLOWCHART15:
		case SID_DRAWTBX_CS_FLOWCHART16:
		case SID_DRAWTBX_CS_FLOWCHART17:
		case SID_DRAWTBX_CS_FLOWCHART18:
		case SID_DRAWTBX_CS_FLOWCHART19:
		case SID_DRAWTBX_CS_FLOWCHART20:
		case SID_DRAWTBX_CS_FLOWCHART21:
		case SID_DRAWTBX_CS_FLOWCHART22:
		case SID_DRAWTBX_CS_FLOWCHART23:
		case SID_DRAWTBX_CS_FLOWCHART24:
		case SID_DRAWTBX_CS_FLOWCHART25:
		case SID_DRAWTBX_CS_FLOWCHART26:
		case SID_DRAWTBX_CS_FLOWCHART27:
		case SID_DRAWTBX_CS_FLOWCHART28:
		case SID_DRAWTBX_CS_CALLOUT1:
		case SID_DRAWTBX_CS_CALLOUT2:
		case SID_DRAWTBX_CS_CALLOUT3:
		case SID_DRAWTBX_CS_CALLOUT4:
		case SID_DRAWTBX_CS_CALLOUT5:
		case SID_DRAWTBX_CS_CALLOUT6:
		case SID_DRAWTBX_CS_CALLOUT7:
        case SID_DRAWTBX_CS_SYMBOL:
        case SID_DRAWTBX_CS_ARROW:
        case SID_DRAWTBX_CS_FLOWCHART:
        case SID_DRAWTBX_CS_CALLOUT:
        case SID_DRAWTBX_CS_STAR:
            getDesignView()->SetMode( RPTUI_INSERT );
            {
                URL aUrl = getURLForId(_nId);
                sal_Int32 nIndex = 1;
                ::rtl::OUString sType = aUrl.Complete.getToken(0,'.',nIndex);
                if ( nIndex == -1 || !sType.getLength() )
                {
                    switch(_nId)
                    {
                        case SID_DRAWTBX_CS_SYMBOL:
                            sType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("smiley"));
                            break;
                        case SID_DRAWTBX_CS_ARROW:
                            sType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("left-right-arrow"));
                            break;
                        case SID_DRAWTBX_CS_FLOWCHART:
                            sType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("flowchart-internal-storage"));
                            break;
                        case SID_DRAWTBX_CS_CALLOUT:
                            sType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("round-rectangular-callout"));
                            break;
                        case SID_DRAWTBX_CS_STAR:
                            sType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("star5"));
                            break;
                        case SID_DRAWTBX_CS_BASIC:
                        default:
                            sType = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("diamond"));
                    }
                }
                else
                    sType = aUrl.Complete.getToken(0,'.',nIndex);

			    getDesignView()->SetInsertObj( OBJ_CUSTOMSHAPE ,sType);
                createDefaultControl(aArgs);
            }
            InvalidateAll();
            break;
        case SID_RPT_SHOWREPORTEXPLORER:
			if ( isUiVisible() )
	            getDesignView()->toggleReportExplorer();
            break;
		case SID_FM_ADD_FIELD:
			if ( isUiVisible() )
				getDesignView()->toggleAddField();
			break;
		case SID_SHOW_PROPERTYBROWSER:
            if ( m_bShowProperties )
                m_sLastActivePage = getDesignView()->getCurrentPage();
            else
                getDesignView()->setCurrentPage(m_sLastActivePage);

			if ( isUiVisible() )
			{
	            m_bShowProperties = !m_bShowProperties;
    	        if ( aArgs.getLength() == 1 )
        	        aArgs[0].Value >>= m_bShowProperties;

				getDesignView()->togglePropertyBrowser(m_bShowProperties);
			}
			break;
        case SID_PROPERTYBROWSER_LAST_PAGE: // nothing to do
            m_sLastActivePage = getDesignView()->getCurrentPage();
            break;
        case SID_SPLIT_POSITION:
            getDesignView()->Resize();
            break;
		case SID_PAGEDIALOG:
		case SID_ATTR_CHAR_COLOR_BACKGROUND:
			{
				uno::Reference<report::XSection> xSection;
				if (aArgs.getLength() == 1 )
					aArgs[0].Value >>= xSection;
				openPageDialog(xSection);
                bForceBroadcast = sal_True;
			}
			break;
		case SID_SORTINGANDGROUPING:
			openSortingAndGroupingDialog();
            m_bGroupFloaterWasVisible = m_pGroupsFloater && m_pGroupsFloater->IsVisible();
			break;
		case SID_BACKGROUND_COLOR:
			{
                const util::Color aColor( lcl_extractBackgroundColor( aArgs ) );
                if ( !impl_setPropertyAtControls_throw(RID_STR_UNDO_CHANGEFONT,PROPERTY_CONTROLBACKGROUND,uno::makeAny(aColor),aArgs) )
                {
                    uno::Reference< report::XSection > xSection = getDesignView()->getCurrentSection();
                    if ( xSection.is() )
		            {
			            xSection->setBackColor( aColor );
		            }
                }
                bForceBroadcast = sal_True;
			}
			break;
        case SID_ATTR_CHAR_WEIGHT:
		case SID_ATTR_CHAR_POSTURE:
        case SID_ATTR_CHAR_UNDERLINE:
			{
				uno::Reference< awt::XWindow> xWindow;
                ::std::vector< uno::Reference< uno::XInterface > > aControlsFormats;
                lcl_getReportControlFormat( aArgs, getDesignView(), xWindow, aControlsFormats );

                const String sUndoAction(ModuleRes(RID_STR_UNDO_CHANGEFONT));
                UndoContext aUndoContext( getUndoManager(), sUndoAction );

                ::std::vector< uno::Reference< uno::XInterface > >::iterator aIter = aControlsFormats.begin();
                for(; aIter != aControlsFormats.end();++aIter)
                {
                    uno::Reference< report::XReportControlFormat> xReportControlFormat(*aIter,uno::UNO_QUERY);
                    lcl_setFontWPU_nothrow(xReportControlFormat,_nId);
                }
			}
			break;
		case SID_ATTR_CHAR_COLOR:
		case SID_ATTR_CHAR_COLOR2:
			{
                const SequenceAsHashMap aMap(aArgs);
                const util::Color aColor = aMap.getUnpackedValueOrDefault(PROPERTY_FONTCOLOR,util::Color());
                impl_setPropertyAtControls_throw(RID_STR_UNDO_CHANGEFONT,PROPERTY_CHARCOLOR,uno::makeAny(aColor),aArgs);
                bForceBroadcast = sal_True;
			}
			break;
        case SID_ATTR_CHAR_FONT:
            if ( aArgs.getLength() == 1 )
            {
                awt::FontDescriptor aFont;
                if ( aArgs[0].Value >>= aFont )
                {
                    impl_setPropertyAtControls_throw(RID_STR_UNDO_CHANGEFONT,PROPERTY_CHARFONTNAME,uno::makeAny(aFont.Name),aArgs);
                } // if ( aArgs[0].Value >>= aFont )
            }
            break;
        case SID_ATTR_CHAR_FONTHEIGHT:
            if ( aArgs.getLength() == 1 )
            {
                float fSelVal = 0.0;
                if ( aArgs[0].Value >>= fSelVal )
                    impl_setPropertyAtControls_throw(RID_STR_UNDO_CHANGEFONT,PROPERTY_CHARHEIGHT,aArgs[0].Value,aArgs);
            }
            break;
        case SID_ATTR_PARA_ADJUST_LEFT:
        case SID_ATTR_PARA_ADJUST_CENTER:
        case SID_ATTR_PARA_ADJUST_RIGHT:
        case SID_ATTR_PARA_ADJUST_BLOCK:
            {
                sal_Int16 eParagraphAdjust = style::ParagraphAdjust_LEFT;
                switch(_nId)
                {
                    case SID_ATTR_PARA_ADJUST_LEFT:
                        eParagraphAdjust = style::ParagraphAdjust_LEFT;
                        break;
                    case SID_ATTR_PARA_ADJUST_CENTER:
                        eParagraphAdjust = style::ParagraphAdjust_CENTER;
                        break;
                    case SID_ATTR_PARA_ADJUST_RIGHT:
                        eParagraphAdjust = style::ParagraphAdjust_RIGHT;
                        break;
                    case SID_ATTR_PARA_ADJUST_BLOCK:
                        eParagraphAdjust = style::ParagraphAdjust_BLOCK;
                        break;
                } // switch(_nId)
                impl_setPropertyAtControls_throw(RID_STR_UNDO_ALIGNMENT,PROPERTY_PARAADJUST,uno::makeAny(eParagraphAdjust),aArgs);

                InvalidateFeature(SID_ATTR_PARA_ADJUST_LEFT);
                InvalidateFeature(SID_ATTR_PARA_ADJUST_CENTER);
                InvalidateFeature(SID_ATTR_PARA_ADJUST_RIGHT);
                InvalidateFeature(SID_ATTR_PARA_ADJUST_BLOCK);
            }
            break;
		case SID_CHAR_DLG:
			{
                uno::Sequence< beans::NamedValue > aSettings;
				uno::Reference< awt::XWindow> xWindow;
                ::std::vector< uno::Reference< uno::XInterface > > aControlsFormats;
                lcl_getReportControlFormat( aArgs, getDesignView(), xWindow, aControlsFormats );

                if ( !aControlsFormats.empty() )
                {
                    const String sUndoAction( ModuleRes( RID_STR_UNDO_CHANGEFONT ) );
                    UndoContext aUndoContext( getUndoManager(), sUndoAction );

                    ::std::vector< uno::Reference< uno::XInterface > >::iterator aIter = aControlsFormats.begin();
                    for(; aIter != aControlsFormats.end();++aIter)
                    {
                        uno::Reference< report::XReportControlFormat > xFormat( *aIter, uno::UNO_QUERY );
				        if ( !xFormat.is() )
                            continue;

                        if ( aSettings.getLength() == 0 )
                        {
                            ::rptui::openCharDialog( xFormat, xWindow, aSettings );
                            if ( aSettings.getLength() == 0 )
                                break;
                        }

                        applyCharacterSettings( xFormat, aSettings );
                    }

                    InvalidateAll();
                }
			}
			break;
		case SID_INSERT_GRAPHIC:
            insertGraphic();
            break;
		case SID_SETCONTROLDEFAULTS:
			break;
		case SID_CONDITIONALFORMATTING:
			{
				uno::Reference< report::XFormattedField> xFormattedField(getDesignView()->getCurrentControlModel(),uno::UNO_QUERY);
				if ( xFormattedField.is() )
				{
					ConditionalFormattingDialog aDlg( getView(), xFormattedField.get(), *this );
					aDlg.Execute();
				}
			}
			break;
		case SID_DATETIME:
			if ( m_xReportDefinition.is() )
			{
                if ( !aArgs.getLength() )
                {
				    ODateTimeDialog aDlg(getView(),getDesignView()->getCurrentSection(),this);
				    aDlg.Execute();
                }
                else
                    createDateTime(aArgs);
			} // if ( m_xReportDefinition.is() )
			break;
		case SID_INSERT_FLD_PGNUMBER:
			if ( m_xReportDefinition.is() )
			{
                if ( !aArgs.getLength() )
                {
				    OPageNumberDialog aDlg(getView(),m_xReportDefinition,this);
				    aDlg.Execute();
                }
                else
                    createPageNumber(aArgs);
			} // if ( m_xReportDefinition.is() )
			break;
		case SID_EXPORTDOC:
		case SID_EXPORTDOCASPDF:
			break;
		case SID_PRINTPREVIEW:
			if ( m_xReportDefinition.is() )
			{
			}
			break;
		case SID_EDITDOC:
			if(isEditable())
			{ // the state should be changed to not editable
				switch (saveModified())
				{
					case RET_CANCEL:
						// don't change anything here so return
						return;
					case RET_NO:
						setModified(sal_False);		// and we are not modified yet
						break;
					default:
						break;
				}
			}
			setEditable(!isEditable());
			//getJoinView()->setReadOnly(!isEditable());
			InvalidateAll();
			return;
        case SID_GROUP:
            break;
        case SID_ATTR_ZOOM:
            if ( aArgs.getLength() == 0 )
            {
                openZoomDialog();
            }
            else if ( aArgs.getLength() == 1 && aArgs[0].Name.equalsAscii("Zoom") )
            {
                SvxZoomItem aZoomItem;
                aZoomItem.PutValue(aArgs[0].Value);
                m_nZoomValue = aZoomItem.GetValue();
                m_eZoomType = aZoomItem.GetType();
                impl_zoom_nothrow();
            } // if ( aArgs.getLength() == 1 && aArgs[0].Name.equalsAscii("Zoom") )
            break;
        case SID_ATTR_ZOOMSLIDER:
            if ( aArgs.getLength() == 1 && aArgs[0].Name.equalsAscii("ZoomSlider") )
            {
                SvxZoomSliderItem aZoomSlider;
                aZoomSlider.PutValue(aArgs[0].Value);
                m_nZoomValue = aZoomSlider.GetValue();
                m_eZoomType = SVX_ZOOM_PERCENT;
                impl_zoom_nothrow();
            }
			break;
		default:
			OReportController_BASE::Execute(_nId,aArgs);
	}
	InvalidateFeature(_nId,Reference< XStatusListener >(),bForceBroadcast);
}