renames the most annoying abbreviations in Writer (and partially in the shared code too). Change-Id: I9a62759138126c1537cc5c985ba05cf54d6132d9
177 lines
5.8 KiB
C++
177 lines
5.8 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed
|
|
* with this work for additional information regarding copyright
|
|
* ownership. The ASF licenses this file to you under the Apache
|
|
* License, Version 2.0 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
|
*/
|
|
|
|
#include "viewsh.hxx"
|
|
#include "rootfrm.hxx"
|
|
#include "txtfrm.hxx"
|
|
#include "blink.hxx"
|
|
#include "porlin.hxx"
|
|
#include "porlay.hxx"
|
|
|
|
// Visible time
|
|
#define BLINK_ON_TIME 2400L
|
|
// Invisible time
|
|
#define BLINK_OFF_TIME 800L
|
|
|
|
/**
|
|
* pBlink points to the instance where blinking portions need to register.
|
|
* If necessary, it needs to be created by SwBlink.
|
|
* They are then triggered rhythimcally for a repaint. They can query
|
|
* for being visible or invisible with IsVisible().
|
|
*/
|
|
SwBlink *pBlink = NULL;
|
|
|
|
SwBlink::SwBlink()
|
|
{
|
|
bVisible = true;
|
|
// Prepare the timer
|
|
aTimer.SetTimeout( BLINK_ON_TIME );
|
|
aTimer.SetTimeoutHdl( LINK(this, SwBlink, Blinker) );
|
|
}
|
|
|
|
SwBlink::~SwBlink( )
|
|
{
|
|
aTimer.Stop();
|
|
}
|
|
|
|
/**
|
|
* SwBlink::Blinker (timer):
|
|
* Toggle visibility flag
|
|
* Determine the repaint rectangle and invalidate them in their OleShells.
|
|
*/
|
|
IMPL_LINK_NOARG_TYPED(SwBlink, Blinker, Timer *, void)
|
|
{
|
|
bVisible = !bVisible;
|
|
if( bVisible )
|
|
aTimer.SetTimeout( BLINK_ON_TIME );
|
|
else
|
|
aTimer.SetTimeout( BLINK_OFF_TIME );
|
|
if( !aList.empty() )
|
|
{
|
|
|
|
for( SwBlinkList::iterator it = aList.begin(); it != aList.end(); )
|
|
{
|
|
const SwBlinkPortion* pTmp = &*it;
|
|
if( pTmp->GetRootFrm() &&
|
|
pTmp->GetRootFrm()->GetCurrShell() )
|
|
{
|
|
++it;
|
|
|
|
Point aPos = pTmp->GetPos();
|
|
long nWidth, nHeight;
|
|
switch ( pTmp->GetDirection() )
|
|
{
|
|
case 900:
|
|
aPos.X() -= pTmp->GetPortion()->GetAscent();
|
|
aPos.Y() -= pTmp->GetPortion()->Width();
|
|
nWidth = pTmp->GetPortion()->SvLSize().Height();
|
|
nHeight = pTmp->GetPortion()->SvLSize().Width();
|
|
break;
|
|
case 1800:
|
|
aPos.Y() -= pTmp->GetPortion()->Height() -
|
|
pTmp->GetPortion()->GetAscent();
|
|
aPos.X() -= pTmp->GetPortion()->Width();
|
|
nWidth = pTmp->GetPortion()->SvLSize().Width();
|
|
nHeight = pTmp->GetPortion()->SvLSize().Height();
|
|
break;
|
|
case 2700:
|
|
aPos.X() -= pTmp->GetPortion()->Height() -
|
|
pTmp->GetPortion()->GetAscent();
|
|
nWidth = pTmp->GetPortion()->SvLSize().Height();
|
|
nHeight = pTmp->GetPortion()->SvLSize().Width();
|
|
break;
|
|
default:
|
|
aPos.Y() -= pTmp->GetPortion()->GetAscent();
|
|
nWidth = pTmp->GetPortion()->SvLSize().Width();
|
|
nHeight = pTmp->GetPortion()->SvLSize().Height();
|
|
}
|
|
|
|
Rectangle aRefresh( aPos, Size( nWidth, nHeight ) );
|
|
aRefresh.Right() += ( aRefresh.Bottom()- aRefresh.Top() ) / 8;
|
|
pTmp->GetRootFrm()
|
|
->GetCurrShell()->InvalidateWindows( aRefresh );
|
|
}
|
|
else // Portions without a shell can be removed from the list
|
|
it = aList.erase(it);
|
|
}
|
|
}
|
|
else // If the list is empty, the timer can be stopped
|
|
aTimer.Stop();
|
|
}
|
|
|
|
void SwBlink::Insert( const Point& rPoint, const SwLinePortion* pPor,
|
|
const SwTextFrm *pTextFrm, sal_uInt16 nDir )
|
|
{
|
|
SwBlinkPortion *pBlinkPor = new SwBlinkPortion( pPor, nDir );
|
|
|
|
SwBlinkList::iterator it = aList.find( *pBlinkPor );
|
|
if( it != aList.end() )
|
|
{
|
|
(*it).SetPos( rPoint );
|
|
delete pBlinkPor;
|
|
}
|
|
else
|
|
{
|
|
pBlinkPor->SetPos( rPoint );
|
|
pBlinkPor->SetRootFrm( pTextFrm->getRootFrm() );
|
|
aList.insert( pBlinkPor );
|
|
pTextFrm->SetBlinkPor();
|
|
if( pPor->IsLayPortion() || pPor->IsParaPortion() )
|
|
const_cast<SwLineLayout*>(static_cast<const SwLineLayout*>(pPor))->SetBlinking();
|
|
|
|
if( !aTimer.IsActive() )
|
|
aTimer.Start();
|
|
}
|
|
}
|
|
|
|
void SwBlink::Replace( const SwLinePortion* pOld, const SwLinePortion* pNew )
|
|
{
|
|
// setting direction to 0 because direction does not matter
|
|
// for this operation
|
|
SwBlinkPortion aBlink( pOld, 0 );
|
|
SwBlinkList::iterator it = aList.find( aBlink );
|
|
if( it != aList.end() )
|
|
{
|
|
SwBlinkPortion* aTmp = new SwBlinkPortion( &*it, pNew );
|
|
aList.erase( it );
|
|
aList.insert( aTmp );
|
|
}
|
|
}
|
|
|
|
void SwBlink::Delete( const SwLinePortion* pPor )
|
|
{
|
|
// setting direction to 0 because direction does not matter
|
|
// for this operation
|
|
SwBlinkPortion aBlink( pPor, 0 );
|
|
aList.erase( aBlink );
|
|
}
|
|
|
|
void SwBlink::FrmDelete( const SwRootFrm* pRoot )
|
|
{
|
|
for( SwBlinkList::iterator it = aList.begin(); it != aList.end(); )
|
|
{
|
|
if( pRoot == (*it).GetRootFrm() )
|
|
aList.erase( it++ );
|
|
else
|
|
++it;
|
|
}
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|