diff -cNr old/sc/source/ui/drawfunc/fusel2.cxx new/sc/source/ui/drawfunc/fusel2.cxx *** old/sc/source/ui/drawfunc/fusel2.cxx Tue Nov 14 23:52:32 2006 --- new/sc/source/ui/drawfunc/fusel2.cxx Fri Jul 20 22:39:02 2007 *************** *** 53,58 **** --- 53,62 ---- #include "detfunc.hxx" #include "futext.hxx" #include "sc.hrc" + #include "userdat.hxx" + #include "drwlayer.hxx" + #include "attrib.hxx" + #include "scitems.hxx" // ----------------------------------------------------------------------- *************** *** 130,135 **** --- 134,140 ---- return FALSE; SdrObject* pFoundObj = NULL; + ScAddress aTabPos; SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT ); SdrObject* pObject = aIter.Next(); *************** *** 139,144 **** --- 144,154 ---- && pObject->GetLogicRect().IsInside( rPos ) ) { pFoundObj = pObject; + ScDrawObjData* pData = ScDrawLayer::GetObjDataTab( pObject, pViewShell->GetViewData()->GetTabNo() ); + if( pData ) + { + aTabPos = ScAddress( pData->aStt); + } // keep searching - use the last matching object (on top) } pObject = aIter.Next(); *************** *** 149,158 **** { SdrLayer* pLockLayer = NULL; // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); if (pLockLayer && pView->IsLayerLocked(pLockLayer->GetName())) ! pView->SetLayerLocked( pLockLayer->GetName(), FALSE ); } return (pFoundObj != NULL); --- 159,175 ---- { SdrLayer* pLockLayer = NULL; + ScDocument* pDoc = pViewShell->GetViewData()->GetDocument(); + SfxObjectShell* pDocSh = pViewShell->GetViewData()->GetSfxDocShell(); + const ScProtectionAttr* pProtAttr = static_cast< const ScProtectionAttr* > (pDoc->GetAttr(aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), ATTR_PROTECTION ) ); + BOOL bProtectAttr = pProtAttr->GetProtection() || pProtAttr->GetHideCell() ; + BOOL bProtectDoc = pDoc->IsTabProtected(aTabPos.Tab()) || pDocSh->IsReadOnly() ; + BOOL bProtect = bProtectDoc && bProtectAttr ; // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); if (pLockLayer && pView->IsLayerLocked(pLockLayer->GetName())) ! //pView->SetLayerLocked( pLockLayer->GetName(), FALSE ); ! pView->SetLayerLocked( pLockLayer->GetName(), bProtect); } return (pFoundObj != NULL); diff -cNr old/sc/source/ui/drawfunc/futext3.cxx new/sc/source/ui/drawfunc/futext3.cxx *** old/sc/source/ui/drawfunc/futext3.cxx Tue Nov 14 23:53:16 2006 --- new/sc/source/ui/drawfunc/futext3.cxx Fri Jul 20 22:43:08 2007 *************** *** 303,308 **** --- 303,310 ---- #include "futext.hxx" #include "docsh.hxx" #include "globstr.hrc" + #include "attrib.hxx" + #include "scitems.hxx" //------------------------------------------------------------------------ *************** *** 367,372 **** --- 369,385 ---- // Ignore if text unchanged. If called from a change in // TextDirection mode then always enter as we need to // store the new EditTextObject. + if ( bWas ) + { + const ScProtectionAttr* pProtAttr = static_cast< const ScProtectionAttr* > (pDoc->GetAttr(aTabPos.Col(), aTabPos.Row(), aTabPos.Tab(), ATTR_PROTECTION ) ); + BOOL bProtectAttr = pProtAttr->GetProtection() || pProtAttr->GetHideCell() ; + BOOL bProtectDoc = pDoc->IsTabProtected(aTabPos.Tab()) || pObjSh->IsReadOnly() ; + BOOL bProtect = bProtectDoc && bProtectAttr ; + + SdrLayer* pLockLayer = pDrDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); + if ( pLockLayer && !pView->IsLayerLocked(pLockLayer->GetName())) + pView->SetLayerLocked( pLockLayer->GetName(),bProtect ); + } if ( eResult != SDRENDTEXTEDIT_UNCHANGED || !bWas || !aNote.IsShown() || bTextDirection) { diff -cNr old/sc/source/ui/inc/fusel.hxx new/sc/source/ui/inc/fusel.hxx *** old/sc/source/ui/inc/fusel.hxx Fri Sep 9 05:29:58 2005 --- new/sc/source/ui/inc/fusel.hxx Fri Jul 20 22:44:32 2007 *************** *** 42,52 **** #ifndef SC_FUDRAW_HXX #include "fudraw.hxx" #endif ! //class Outliner; //class OutlinerView; class SdrPageView; ! /************************************************************************* |* --- 42,52 ---- #ifndef SC_FUDRAW_HXX #include "fudraw.hxx" #endif ! #include "gridwin.hxx" //class Outliner; //class OutlinerView; class SdrPageView; ! class ScGridWindow; /************************************************************************* |* *************** *** 56,61 **** --- 56,62 ---- class FuSelection : public FuDraw { + friend class ScGridWindow; protected: // Outliner* pOutliner; // OutlinerView* pOutlinerView; diff -cNr old/sc/source/ui/view/gridwin.cxx new/sc/source/ui/view/gridwin.cxx *** old/sc/source/ui/view/gridwin.cxx Fri May 11 01:00:50 2007 --- new/sc/source/ui/view/gridwin.cxx Fri Jul 20 22:51:04 2007 *************** *** 159,164 **** --- 159,165 ---- #ifndef _SV_SVAPP_HXX //autogen #include #endif + #include "fusel.hxx" using namespace com::sun::star; *************** *** 420,455 **** } ! void lcl_UnLockComment( SdrView* pView, SdrPageView* pPV, SdrModel* pDoc, const Point& rPos ) ! { ! if (!pView && !pPV && !pDoc) ! return ; ! ! SdrObject* pFoundObj = NULL; ! ! SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT ); ! SdrObject* pObject = aIter.Next(); ! while (pObject && !pFoundObj) ! { ! if ( pObject->GetLayer() == SC_LAYER_INTERN && pObject->ISA(SdrCaptionObj) ! && pObject->GetLogicRect().IsInside( rPos ) ) ! { ! pFoundObj = pObject; ! } ! pObject = aIter.Next(); ! } ! ! if ( pFoundObj ) ! { ! SdrLayer* pLockLayer = NULL; ! ! // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() ! pLockLayer = pDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); ! if (pLockLayer) ! pView->SetLayerLocked( pLockLayer->GetName(), FALSE ); ! } ! ! } //================================================================== --- 421,456 ---- } ! //void lcl_UnLockComment( SdrView* pView, SdrPageView* pPV, SdrModel* pDoc, const Point& rPos ) ! //{ ! // if (!pView && !pPV && !pDoc) ! // return ; ! // ! // SdrObject* pFoundObj = NULL; ! // ! // SdrObjListIter aIter( *pPV->GetObjList(), IM_FLAT ); ! // SdrObject* pObject = aIter.Next(); ! // while (pObject && !pFoundObj) ! // { ! // if ( pObject->GetLayer() == SC_LAYER_INTERN && pObject->ISA(SdrCaptionObj) ! // && pObject->GetLogicRect().IsInside( rPos ) ) ! // { ! // pFoundObj = pObject; ! // } ! // pObject = aIter.Next(); ! // } ! // ! // if ( pFoundObj ) ! // { ! // SdrLayer* pLockLayer = NULL; ! // ! // // Leave the internal note object unlocked - re-lock in ScDrawView::MarkListHasChanged() ! // pLockLayer = pDoc->GetLayerAdmin().GetLayerPerID(SC_LAYER_INTERN); ! // if (pLockLayer) ! // pView->SetLayerLocked( pLockLayer->GetName(), FALSE ); ! // } ! // ! //} //================================================================== *************** *** 3071,3077 **** pDrawView->UnmarkAllObj(); // Unlock the Internal Layer in order to activate the context menu. // re-lock in ScDrawView::MarkListHasChanged() ! lcl_UnLockComment( pDrawView, pDrawView->GetSdrPageView(), pDrawView->GetModel(), aLogicPos ); bHitDraw = pDrawView->MarkObj( aLogicPos ); // draw shell is activated in MarkListHasChanged } --- 3072,3084 ---- pDrawView->UnmarkAllObj(); // Unlock the Internal Layer in order to activate the context menu. // re-lock in ScDrawView::MarkListHasChanged() ! FuPoor* pPoor = pView->GetDrawFuncPtr(); ! if( pPoor ) ! { ! FuSelection* pSelection = static_cast(pPoor); ! pSelection->TestComment(pDrawView->GetPageViewPvNum(0),aLogicPos); ! } ! //lcl_UnLockComment( pDrawView, pDrawView->GetPageViewPvNum(0), pDrawView->GetModel(), aLogicPos ); bHitDraw = pDrawView->MarkObj( aLogicPos ); // draw shell is activated in MarkListHasChanged }