Kaydet (Commit) 82fafc47 authored tarafından Oliver-Rainer Wittmann's avatar Oliver-Rainer Wittmann

121443: - register text frames and graphics on the correct page frame

- trigger formatting of selected object when moving view to the selected object or when graphical horizontal line has been inserted.
üst cc147840
......@@ -2459,12 +2459,14 @@ const SwFrmFmt* SwFEShell::GetFlyNum(sal_uInt16 nIdx, FlyCntType eType ) const
return GetDoc()->GetFlyNum(nIdx, eType );
}
// zeige das akt. selektierte "Object" an
void SwFEShell::MakeSelVisible()
{
if( Imp()->HasDrawView() &&
Imp()->GetDrawView()->GetMarkedObjectList().GetMarkCount() )
if ( Imp()->HasDrawView() &&
Imp()->GetDrawView()->GetMarkedObjectList().GetMarkCount() )
{
GetCurrFrm(); // just to trigger formatting in case the selected object is not formatted.
MakeVisible( Imp()->GetDrawView()->GetAllMarkedRect() );
}
else
......
......@@ -2223,40 +2223,10 @@ void SwFrm::AppendFly( SwFlyFrm *pNew )
pDrawObjs->Insert( *pNew );
pNew->ChgAnchorFrm( this );
//Bei der Seite anmelden; kann sein, dass noch keine da ist - die
//Anmeldung wird dann in SwPageFrm::PreparePage durch gefuehrt.
SwPageFrm *pPage = FindPageFrm();
if ( pPage )
SwPageFrm* pPage = FindPageFrm();
if ( pPage != NULL )
{
if ( pNew->IsFlyAtCntFrm() && pNew->Frm().Top() == WEIT_WECH )
{
//Versuch die Seitenformatierung von neuen Dokumenten etwas
//guenstiger zu gestalten.
//Wir haengen die Flys erstenmal nach hinten damit sie bei heftigem
//Fluss der Anker nicht unoetig oft formatiert werden.
//Damit man noch brauchbar an das Ende des Dokumentes springen
//kann werden die Flys nicht ganz an das Ende gehaengt.
SwRootFrm *pRoot = (SwRootFrm*)pPage->GetUpper();
if( !SwLayHelper::CheckPageFlyCache( pPage, pNew ) )
{
SwPageFrm *pTmp = pRoot->GetLastPage();
if ( pTmp->GetPhyPageNum() > 30 )
{
for ( sal_uInt16 i = 0; i < 10; ++i )
{
pTmp = (SwPageFrm*)pTmp->GetPrev();
if( pTmp->GetPhyPageNum() <= pPage->GetPhyPageNum() )
break; // damit wir nicht vor unserem Anker landen
}
if ( pTmp->IsEmptyPage() )
pTmp = (SwPageFrm*)pTmp->GetPrev();
pPage = pTmp;
}
}
pPage->AppendFlyToPage( pNew );
}
else
pPage->AppendFlyToPage( pNew );
pPage->AppendFlyToPage( pNew );
}
}
......
......@@ -680,6 +680,7 @@ void SwTextShell::ExecInsert(SfxRequest &rReq)
}
break;
}
case FN_INSERT_HRULER:
{
String sPath;
......@@ -688,22 +689,22 @@ void SwTextShell::ExecInsert(SfxRequest &rReq)
Window* pParent = GetView().GetWindow();
if ( pItem )
{
sPath = ((SfxStringItem*)pItem)->GetValue();
SFX_REQUEST_ARG( rReq, pSimple, SfxBoolItem, FN_PARAM_1 , sal_False );
sPath = ( (SfxStringItem*) pItem )->GetValue();
SFX_REQUEST_ARG( rReq, pSimple, SfxBoolItem, FN_PARAM_1, sal_False );
if ( pSimple )
bSimpleLine = pSimple->GetValue();
}
else
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
DBG_ASSERT(pFact, "Dialogdiet fail!");
DBG_ASSERT( pFact, "Dialogdiet fail!" );
AbstractInsertGrfRulerDlg* pDlg = pFact->CreateInsertGrfRulerDlg( DLG_INSERT_RULER,
pParent );
DBG_ASSERT(pDlg, "Dialogdiet fail!");
pParent );
DBG_ASSERT( pDlg, "Dialogdiet fail!" );
// MessageBox fuer fehlende Grafiken
if(!pDlg->HasImages())
InfoBox( pParent, SW_RES(MSG_NO_RULER)).Execute();
if(RET_OK == pDlg->Execute())
if ( !pDlg->HasImages() )
InfoBox( pParent, SW_RES( MSG_NO_RULER ) ).Execute();
if ( RET_OK == pDlg->Execute() )
{
sPath = pDlg->GetGraphicName();
bSimpleLine = pDlg->IsSimpleLine();
......@@ -715,39 +716,43 @@ void SwTextShell::ExecInsert(SfxRequest &rReq)
}
rSh.StartAllAction();
rSh.StartUndo(UNDO_UI_INSERT_RULER);
if(bSimpleLine)
rSh.StartUndo( UNDO_UI_INSERT_RULER );
if ( bSimpleLine )
{
if(!(rSh.IsSttOfPara() && rSh.IsEndOfPara())) // kein leerer Absatz?
if ( !( rSh.IsSttOfPara() && rSh.IsEndOfPara() ) ) // kein leerer Absatz?
rSh.SplitNode( sal_False, sal_False ); // dann Platz schaffen
rSh.SplitNode( sal_False, sal_False );
rSh.Left(CRSR_SKIP_CHARS, sal_False, 1, sal_False );
rSh.SetTxtFmtColl( rSh.GetTxtCollFromPool( RES_POOLCOLL_HTML_HR ));
rSh.Right(CRSR_SKIP_CHARS, sal_False, 1, sal_False );
rSh.Left( CRSR_SKIP_CHARS, sal_False, 1, sal_False );
rSh.SetTxtFmtColl( rSh.GetTxtCollFromPool( RES_POOLCOLL_HTML_HR ) );
rSh.Right( CRSR_SKIP_CHARS, sal_False, 1, sal_False );
bRet = sal_True;
}
else if(sPath.Len())
else if ( sPath.Len() )
{
SwFlyFrmAttrMgr aFrmMgr( sal_True, &rSh, FRMMGR_TYPE_GRF );
// am FrmMgr muessen die richtigen Parameter eingestellt werden
aFrmMgr.SetAnchor(FLY_AS_CHAR);
aFrmMgr.SetAnchor( FLY_AS_CHAR );
rSh.SplitNode( sal_False, sal_False );
rSh.SplitNode( sal_False, sal_False );
rSh.Left(CRSR_SKIP_CHARS, sal_False, 1, sal_False );
rSh.SetAttrItem(SvxAdjustItem(SVX_ADJUST_CENTER,RES_PARATR_ADJUST ));
if(GRFILTER_OK == GetView().InsertGraphic(sPath, aEmptyStr, sal_True, 0, 0 ))
rSh.Left( CRSR_SKIP_CHARS, sal_False, 1, sal_False );
rSh.SetAttrItem( SvxAdjustItem( SVX_ADJUST_CENTER, RES_PARATR_ADJUST ) );
if ( GRFILTER_OK == GetView().InsertGraphic( sPath, aEmptyStr, sal_True, 0, 0 ) )
{
rSh.GetCurrFrm(); // just to trigger formatting in case the inserted graphic is not formatted.
bRet = sal_True;
}
rSh.EnterStdMode();
rSh.Right(CRSR_SKIP_CHARS, sal_False, 1, sal_False );
rSh.Right( CRSR_SKIP_CHARS, sal_False, 1, sal_False );
}
rSh.EndAllAction();
rSh.EndUndo(UNDO_UI_INSERT_RULER);
rReq.SetReturnValue(SfxBoolItem(nSlot, bRet));
rSh.EndUndo( UNDO_UI_INSERT_RULER );
rReq.SetReturnValue( SfxBoolItem( nSlot, bRet ) );
rReq.Done();
}
break;
case FN_FORMAT_COLUMN :
{
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment