FeatureState OReportController::GetState()

in main/reportdesign/source/ui/report/ReportController.cxx [412:970]


FeatureState OReportController::GetState(sal_uInt16 _nId) const
{
	FeatureState aReturn;
	// (disabled automatically)
	aReturn.bEnabled = sal_False;
	// check this first
	if ( !getView() )
		return aReturn;

	switch (_nId)
	{
        case SID_RPT_TEXTDOCUMENT:
            aReturn.bEnabled = isEditable();
            aReturn.bChecked = (m_xReportDefinition.is() && m_xReportDefinition->getMimeType() == MIMETYPE_OASIS_OPENDOCUMENT_TEXT);
            break;
        case SID_RPT_SPREADSHEET:
            aReturn.bEnabled = isEditable();
            aReturn.bChecked = (m_xReportDefinition.is() && m_xReportDefinition->getMimeType() == MIMETYPE_OASIS_OPENDOCUMENT_SPREADSHEET);
            break;
		case SID_REPORTHEADER_WITHOUT_UNDO:
		case SID_REPORTFOOTER_WITHOUT_UNDO:
		case SID_REPORTHEADERFOOTER:
            {
			    aReturn.bEnabled = isEditable();
                ::rtl::OUString sText = String(ModuleRes((m_xReportDefinition.is() && m_xReportDefinition->getReportHeaderOn()) ? RID_STR_REPORTHEADERFOOTER_DELETE : RID_STR_REPORTHEADERFOOTER_INSERT));
                aReturn.sTitle = sText;
            }
			break;
		case SID_PAGEHEADER_WITHOUT_UNDO:
		case SID_PAGEFOOTER_WITHOUT_UNDO:
		case SID_PAGEHEADERFOOTER:
            {
			    aReturn.bEnabled = isEditable();
                ::rtl::OUString sText = String(ModuleRes((m_xReportDefinition.is() && m_xReportDefinition->getPageHeaderOn()) ? RID_STR_PAGEHEADERFOOTER_DELETE : RID_STR_PAGEHEADERFOOTER_INSERT));
                aReturn.sTitle = sText;
            }
			break;
		case SID_GROUP_APPEND:
		case SID_GROUP_REMOVE:
		case SID_GROUPHEADER_WITHOUT_UNDO:
		case SID_GROUPHEADER:
		case SID_GROUPFOOTER_WITHOUT_UNDO:
		case SID_GROUPFOOTER:
            aReturn.bEnabled = isEditable();
            break;
		case SID_ADD_CONTROL_PAIR:
			aReturn.bEnabled = isEditable();
			break;
		case SID_REDO:
		case SID_UNDO:
            {
                size_t ( SfxUndoManager::*retrieveCount )( bool const ) const =
                    ( _nId == SID_UNDO ) ? &SfxUndoManager::GetUndoActionCount : &SfxUndoManager::GetRedoActionCount;

                SfxUndoManager& rUndoManager( getUndoManager() );
                aReturn.bEnabled = ( rUndoManager.*retrieveCount )( ::svl::IUndoManager::TopLevel ) > 0;
                if ( aReturn.bEnabled )
                {
                    // TODO: add "Undo/Redo: prefix"
                    String ( SfxUndoManager::*retrieveComment )( size_t, bool const ) const =
                        ( _nId == SID_UNDO ) ? &SfxUndoManager::GetUndoActionComment : &SfxUndoManager::GetRedoActionComment;
                    aReturn.sTitle = (rUndoManager.*retrieveComment)( 0, ::svl::IUndoManager::TopLevel );
                }
            }
			break;
        case SID_OBJECT_RESIZING:
        case SID_OBJECT_SMALLESTWIDTH:
        case SID_OBJECT_SMALLESTHEIGHT:
        case SID_OBJECT_GREATESTWIDTH:
        case SID_OBJECT_GREATESTHEIGHT:
            aReturn.bEnabled = isEditable() && getDesignView()->HasSelection();// && getDesignView()->isAlignPossible();
            if ( aReturn.bEnabled )
                aReturn.bEnabled = m_nSelectionCount > 1;
			break;

        case SID_DISTRIBUTION:
            aReturn.bEnabled = isEditable() && getDesignView()->HasSelection();
            if ( aReturn.bEnabled )
            {
                OSectionView* pSectionView = getCurrentSectionView();
                aReturn.bEnabled = pSectionView && pSectionView->GetMarkedObjectCount() > 2;
            }
            break;
        case SID_ARRANGEMENU:
        case SID_FRAME_DOWN:
        case SID_FRAME_UP:
        case SID_FRAME_TO_TOP:
        case SID_FRAME_TO_BOTTOM:
        case SID_OBJECT_HEAVEN:
        case SID_OBJECT_HELL:
            aReturn.bEnabled = isEditable() && getDesignView()->HasSelection();
            if ( aReturn.bEnabled )
            {
                OSectionView* pSectionView = getCurrentSectionView();
                aReturn.bEnabled = pSectionView && pSectionView->OnlyShapesMarked();
                if ( aReturn.bEnabled )
                {
                    if ( SID_OBJECT_HEAVEN == _nId )
                        aReturn.bEnabled = pSectionView->GetLayerIdOfMarkedObjects() != RPT_LAYER_FRONT;
                    else if ( SID_OBJECT_HELL == _nId )
                        aReturn.bEnabled = pSectionView->GetLayerIdOfMarkedObjects() != RPT_LAYER_BACK;
                }
            }
            break;

        case SID_SECTION_SHRINK:
        case SID_SECTION_SHRINK_TOP:
        case SID_SECTION_SHRINK_BOTTOM:
        	{
                sal_Int32 nCount = 0;
                uno::Reference<report::XSection> xSection = getDesignView()->getCurrentSection();
                if ( xSection.is() )
                {
                    nCount = xSection->getCount();
                }
                aReturn.bEnabled = isEditable() && nCount > 0;
            }
            break;
        case SID_OBJECT_ALIGN:
        case SID_OBJECT_ALIGN_LEFT:
        case SID_OBJECT_ALIGN_CENTER:
        case SID_OBJECT_ALIGN_RIGHT:
        case SID_OBJECT_ALIGN_UP:
        case SID_OBJECT_ALIGN_MIDDLE:
        case SID_OBJECT_ALIGN_DOWN:
        case SID_SECTION_ALIGN:
        case SID_SECTION_ALIGN_LEFT:
        case SID_SECTION_ALIGN_CENTER:
        case SID_SECTION_ALIGN_RIGHT:
        case SID_SECTION_ALIGN_UP:
        case SID_SECTION_ALIGN_MIDDLE:
        case SID_SECTION_ALIGN_DOWN:
            aReturn.bEnabled = isEditable() && getDesignView()->HasSelection();// && getDesignView()->isAlignPossible();
			break;
		case SID_CUT:
			aReturn.bEnabled = isEditable() && getDesignView()->HasSelection() && !getDesignView()->isHandleEvent(_nId);
			break;
		case SID_COPY:
			aReturn.bEnabled = getDesignView()->HasSelection() && !getDesignView()->isHandleEvent(_nId);
			break;
		case SID_PASTE:
			aReturn.bEnabled = isEditable()  && !getDesignView()->isHandleEvent(_nId) && getDesignView()->IsPasteAllowed();
			break;
		case SID_SELECTALL:
			aReturn.bEnabled = !getDesignView()->isHandleEvent(_nId);
			break;
        case SID_SELECTALL_IN_SECTION:
            aReturn.bEnabled = !getDesignView()->isHandleEvent(_nId);
            if ( aReturn.bEnabled )
                aReturn.bEnabled = getCurrentSectionView() != NULL;
			break;
        case SID_ESCAPE:
            aReturn.bEnabled = getDesignView()->GetMode() == RPTUI_INSERT;
            break;
        case SID_TERMINATE_INPLACEACTIVATION:
            aReturn.bEnabled = sal_True;
            break;
        case SID_SELECT_ALL_EDITS:
        case SID_SELECT_ALL_LABELS:
            aReturn.bEnabled = sal_True;
            break;
        case SID_RPT_NEW_FUNCTION:
            aReturn.bEnabled = isEditable();
            break;
        case SID_COLLAPSE_SECTION:
        case SID_EXPAND_SECTION:
        case SID_NEXT_MARK:
        case SID_PREV_MARK:
            aReturn.bEnabled = isEditable() && !getDesignView()->isHandleEvent(_nId);
            break;
        case SID_SELECT:
		case SID_SELECT_REPORT:
			aReturn.bEnabled = sal_True;
			break;
        case SID_EXECUTE_REPORT:
            aReturn.bEnabled = isConnected() && m_xReportDefinition.is();
            break;
		case SID_DELETE:
			aReturn.bEnabled = isEditable() && getDesignView()->HasSelection() && !getDesignView()->isHandleEvent(_nId);
            if ( aReturn.bEnabled )
            {
                ::boost::shared_ptr<OSectionWindow> pSectionWindow = getDesignView()->getMarkedSection();
                if ( pSectionWindow )
                    aReturn.bEnabled = !pSectionWindow->getReportSection().isUiActive();
            }
            {
                ::rtl::OUString sText = String(ModuleRes(RID_STR_DELETE));
                aReturn.sTitle = sText;
            }
			break;
		case SID_GRID_VISIBLE:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = m_bGridVisible;
			break;
		case SID_GRID_USE:
            aReturn.bEnabled = isEditable();
			aReturn.bChecked = m_bGridUse;
			break;
        case SID_HELPLINES_MOVE:
            aReturn.bEnabled = isEditable();
			aReturn.bChecked = m_bHelplinesMove;
            break;
		case SID_RULER:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = m_bShowRuler;
			break;
		case SID_OBJECT_SELECT:
			aReturn.bEnabled = sal_True;
			aReturn.bChecked = getDesignView()->GetMode() == RPTUI_SELECT;
			break;
        case SID_INSERT_DIAGRAM:
            aReturn.bEnabled = isEditable();
            aReturn.bInvisible = optional< bool >(!m_bChartEnabled);
			aReturn.bChecked = getDesignView()->GetInsertObj() == OBJ_OLE2;
            break;
		case SID_FM_FIXEDTEXT:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = getDesignView()->GetInsertObj() == OBJ_DLG_FIXEDTEXT;
			break;
        case SID_INSERT_HFIXEDLINE:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = getDesignView()->GetInsertObj() == OBJ_DLG_HFIXEDLINE;
			break;
        case SID_INSERT_VFIXEDLINE:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = getDesignView()->GetInsertObj() == OBJ_DLG_VFIXEDLINE;
			break;
		case SID_FM_EDIT:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = getDesignView()->GetInsertObj() == OBJ_DLG_FORMATTEDFIELD;
			break;
		case SID_FM_IMAGECONTROL:
			aReturn.bEnabled = isEditable();
			aReturn.bChecked = getDesignView()->GetInsertObj() == OBJ_DLG_IMAGECONTROL;
			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:
            impl_fillCustomShapeState_nothrow("diamond",aReturn);
	        break;
        case SID_DRAWTBX_CS_SYMBOL:
		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:
            impl_fillCustomShapeState_nothrow("smiley",aReturn);
            break;
        case SID_DRAWTBX_CS_ARROW:
		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:
            impl_fillCustomShapeState_nothrow("left-right-arrow",aReturn);
            break;
        case SID_DRAWTBX_CS_STAR:
		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:
            impl_fillCustomShapeState_nothrow("star5",aReturn);
            break;
        case SID_DRAWTBX_CS_FLOWCHART:
		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:
            impl_fillCustomShapeState_nothrow("flowchart-internal-storage",aReturn);
            break;
        case SID_DRAWTBX_CS_CALLOUT:
		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:
            impl_fillCustomShapeState_nothrow("round-rectangular-callout",aReturn);
            break;
        case SID_RPT_SHOWREPORTEXPLORER:
            aReturn.bEnabled = m_xReportDefinition.is();
			aReturn.bChecked = getDesignView() && getDesignView()->isReportExplorerVisible();
            break;
		case SID_FM_ADD_FIELD:
            aReturn.bEnabled = isConnected() && isEditable() && m_xReportDefinition.is()
                && m_xReportDefinition->getCommand().getLength();
			aReturn.bChecked = getDesignView() && getDesignView()->isAddFieldVisible();
			break;
		case SID_SHOW_PROPERTYBROWSER:
			aReturn.bEnabled = sal_True;
			aReturn.bChecked = m_bShowProperties;
			break;
        case SID_PROPERTYBROWSER_LAST_PAGE:
			aReturn.bEnabled = sal_True;
            aReturn.aValue <<= m_sLastActivePage;
            break;
        case SID_SPLIT_POSITION:
            aReturn.bEnabled = sal_True;
            aReturn.aValue <<= getSplitPos();
            break;
		case SID_SAVEDOC:
			aReturn.bEnabled = impl_isModified() && isEditable();
			break;
		case SID_SAVEASDOC:
			aReturn.bEnabled = isConnected() && isEditable();
			break;
		case SID_EDITDOC:
			aReturn.bChecked = isEditable();
			break;
        case SID_PAGEDIALOG:
			aReturn.bEnabled = isEditable();
			break;
		case SID_BACKGROUND_COLOR:
            impl_fillState_nothrow(PROPERTY_CONTROLBACKGROUND,aReturn);
			break;
		case SID_ATTR_CHAR_COLOR_BACKGROUND:
            aReturn.bEnabled = isEditable();
			{
				uno::Reference<report::XSection> xSection = getDesignView()->getCurrentSection();
				if ( xSection.is() )
					try
					{
						aReturn.aValue <<= xSection->getBackColor();
                        const uno::Reference< report::XReportControlModel> xControlModel(getDesignView()->getCurrentControlModel(),uno::UNO_QUERY);
						aReturn.bEnabled = !xControlModel.is();
					}
					catch(beans::UnknownPropertyException&)
					{
					}
				else
					aReturn.bEnabled = sal_False;
			}
			break;
		case SID_SORTINGANDGROUPING:
			aReturn.bEnabled = sal_True;
			aReturn.bChecked = m_pGroupsFloater && m_pGroupsFloater->IsVisible();
			break;
		case SID_ATTR_CHAR_WEIGHT:
		case SID_ATTR_CHAR_POSTURE:
		case SID_ATTR_CHAR_UNDERLINE:
			impl_fillState_nothrow(PROPERTY_FONTDESCRIPTOR,aReturn);
            if ( aReturn.bEnabled )
            {
                awt::FontDescriptor aFontDescriptor;
                aReturn.aValue >>= aFontDescriptor;
                aReturn.aValue.clear();

			    switch(_nId)
			    {
				    case SID_ATTR_CHAR_WEIGHT:
					    aReturn.bChecked = awt::FontWeight::BOLD == aFontDescriptor.Weight;
					    break;
				    case SID_ATTR_CHAR_POSTURE:
					    aReturn.bChecked = awt::FontSlant_ITALIC == aFontDescriptor.Slant;
					    break;
				    case SID_ATTR_CHAR_UNDERLINE:
					    aReturn.bChecked = awt::FontUnderline::SINGLE == aFontDescriptor.Underline;
					    break;
				    default:
					    ;
			        } // switch(_nCommand)
            }
			break;
		case SID_ATTR_CHAR_COLOR:
		case SID_ATTR_CHAR_COLOR2:
            impl_fillState_nothrow(PROPERTY_CHARCOLOR,aReturn);
			break;
        case SID_ATTR_CHAR_FONT:
            impl_fillState_nothrow(PROPERTY_FONTDESCRIPTOR,aReturn);
            break;
        case SID_ATTR_CHAR_FONTHEIGHT:
            impl_fillState_nothrow(PROPERTY_CHARHEIGHT,aReturn);
            if ( aReturn.aValue.hasValue() )
            {
                frame::status::FontHeight aFontHeight;
                aReturn.aValue >>= aFontHeight.Height;
                aReturn.aValue <<= aFontHeight; // another type is needed here, so
            }
            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:
            impl_fillState_nothrow(PROPERTY_PARAADJUST,aReturn);
            if ( aReturn.bEnabled )
            {
                ::sal_Int16 nParaAdjust = 0;
                if ( aReturn.aValue >>= nParaAdjust )
                {
                    switch(nParaAdjust)
                    {
                        case style::ParagraphAdjust_LEFT:
                            aReturn.bChecked = _nId == SID_ATTR_PARA_ADJUST_LEFT;
                            break;
                        case style::ParagraphAdjust_RIGHT:
                            aReturn.bChecked = _nId == SID_ATTR_PARA_ADJUST_RIGHT;
                            break;
                        case style::ParagraphAdjust_BLOCK:
                        case style::ParagraphAdjust_STRETCH:
                            aReturn.bChecked = _nId == SID_ATTR_PARA_ADJUST_BLOCK;
                            break;
                        case style::ParagraphAdjust_CENTER:
                            aReturn.bChecked = _nId == SID_ATTR_PARA_ADJUST_CENTER;
                            break;
                    }
                } // if ( aReturn.aValue >>= nParaAdjust )
                aReturn.aValue.clear();
            }
            break;

		case SID_INSERT_GRAPHIC:
            aReturn.bEnabled = m_xReportDefinition.is() && isEditable() && getDesignView()->getCurrentSection().is();
			break;
        case SID_CHAR_DLG:
		case SID_SETCONTROLDEFAULTS:
			aReturn.bEnabled = m_xReportDefinition.is() && isEditable();// && getDesignView()->getCurrentControlModel().is();
            if ( aReturn.bEnabled )
            {
                ::std::vector< uno::Reference< uno::XInterface > > aSelection;
                getDesignView()->fillControlModelSelection(aSelection);
                ::std::vector< uno::Reference< uno::XInterface > >::iterator aIter = aSelection.begin();
                for(; aIter != aSelection.end()
                    && !uno::Reference< report::XFixedLine >(*aIter,uno::UNO_QUERY).is()
                    && !uno::Reference< report::XImageControl >(*aIter,uno::UNO_QUERY).is()
                    && uno::Reference< report::XReportControlFormat >(*aIter,uno::UNO_QUERY).is() ;++aIter)
                    ;
                aReturn.bEnabled = !aSelection.empty() && aIter == aSelection.end();
            }
			break;
		case SID_CONDITIONALFORMATTING:
			{
                const uno::Reference< report::XFormattedField> xFormattedField(getDesignView()->getCurrentControlModel(),uno::UNO_QUERY);
				aReturn.bEnabled = xFormattedField.is();
			}
			break;
		case SID_INSERT_FLD_PGNUMBER:
		case SID_DATETIME:
			aReturn.bEnabled = m_xReportDefinition.is() && isEditable() && getDesignView()->getCurrentSection().is();
			break;
		case SID_EXPORTDOC:
		case SID_EXPORTDOCASPDF:
			aReturn.bEnabled = m_xReportDefinition.is();
			break;
		case SID_PRINTPREVIEW:
            aReturn.bEnabled = sal_False;
			break;
        case SID_ATTR_ZOOM:
            aReturn.bEnabled = sal_True;
            {
                SvxZoomItem aZoom(m_eZoomType,m_nZoomValue);
                aZoom.SetValueSet(SVX_ZOOM_ENABLE_50|SVX_ZOOM_ENABLE_75|SVX_ZOOM_ENABLE_100|SVX_ZOOM_ENABLE_200);
                aZoom.QueryValue(aReturn.aValue);
                //aReturn.sTitle = ::rtl::OUString::valueOf((sal_Int32)m_nZoomValue);
            }
            break;
        case SID_ATTR_ZOOMSLIDER:
            aReturn.bEnabled = sal_True;
            {
                SvxZoomSliderItem aZoomSlider(m_nZoomValue,20,400);
                aZoomSlider.AddSnappingPoint(50);
                aZoomSlider.AddSnappingPoint(75);
                aZoomSlider.AddSnappingPoint(100);
                aZoomSlider.AddSnappingPoint(200);
                aZoomSlider.QueryValue(aReturn.aValue);
                //aReturn.sTitle = ::rtl::OUString::valueOf((sal_Int32)m_nZoomValue);
            }
			break;
		default:
			aReturn = OReportController_BASE::GetState(_nId);
	}
	return aReturn;
}