basic inplace Font preview for calc
Change-Id: Ic1e6c953852a6106ee94f0b577ed398d62aa2285
This commit is contained in:
@@ -113,6 +113,9 @@
|
||||
#define SID_ATTR_CHAR_LATIN_POSTURE ( SID_SVX_START + 997 )
|
||||
#define SID_ATTR_CHAR_LATIN_WEIGHT ( SID_SVX_START + 998 )
|
||||
#define SID_ATTR_PARA_OUTLINE_LEVEL ( SID_SVX_START +1092 )
|
||||
#define SID_ATTR_CHAR_PREVIEW_FONT ( SID_SVX_START + 1093 )
|
||||
#define SID_ATTR_CHAR_ENDPREVIEW_FONT ( SID_SVX_START + 1094 )
|
||||
|
||||
|
||||
// this ID didn't exist prior to the svx split
|
||||
#define SID_ATTR_CHAR_OVERLINE ( SID_EDIT_START + 68 )
|
||||
|
@@ -46,6 +46,7 @@
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
|
||||
namespace editeng { class SvxBorderLine; }
|
||||
class SvxFontItem;
|
||||
|
||||
class KeyEvent;
|
||||
class OutputDevice;
|
||||
@@ -294,6 +295,8 @@ private:
|
||||
|
||||
ScLookupCacheMapImpl* pLookupCacheMapImpl; // cache for lookups like VLOOKUP and MATCH
|
||||
|
||||
SfxItemSet* pPreviewFont; // convert to std::auto_ptr or whatever
|
||||
ScMarkData* pPreviewSelection;
|
||||
sal_Int64 nUnoObjectId; // counted up for UNO objects
|
||||
|
||||
sal_uInt32 nRangeOverflowType; // used in (xml) loading for overflow warnings
|
||||
@@ -943,6 +946,11 @@ public:
|
||||
bool CompileErrorCells(sal_uInt16 nErrCode);
|
||||
|
||||
ScAutoNameCache* GetAutoNameCache() { return pAutoNameCache; }
|
||||
void SetPreviewFont( SfxItemSet* pFontSet );
|
||||
SfxItemSet* GetPreviewFont() { return pPreviewFont; }
|
||||
SfxItemSet* GetPreviewFont( SCCOL nCol, SCROW nRow, SCTAB nTab );
|
||||
const ScMarkData& GetPreviewSelection();
|
||||
void SetPreviewSelection( ScMarkData& rSel );
|
||||
SC_DLLPUBLIC void SetAutoNameCache( ScAutoNameCache* pCache );
|
||||
|
||||
/** Creates a ScLookupCache cache for the range if it
|
||||
|
@@ -23,6 +23,8 @@ interface TableFont
|
||||
]
|
||||
{
|
||||
SID_ATTR_CHAR_FONT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ]
|
||||
SID_ATTR_CHAR_PREVIEW_FONT [ ExecMethod = ExecuteAttr; ]
|
||||
SID_ATTR_CHAR_ENDPREVIEW_FONT [ ExecMethod = ExecuteAttr; ]
|
||||
SID_ATTR_CHAR_FONTHEIGHT [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ]
|
||||
SID_ATTR_CHAR_COLOR [ ExecMethod = ExecuteAttr; StateMethod = GetAttrState; ]
|
||||
SID_ATTR_CHAR_WEIGHT [ ExecMethod = ExecuteTextAttr; StateMethod = GetTextAttrState; ]
|
||||
|
@@ -154,6 +154,8 @@ ScDocument::ScDocument( ScDocumentMode eMode,
|
||||
pRecursionHelper( NULL ),
|
||||
pAutoNameCache( NULL ),
|
||||
pLookupCacheMapImpl( NULL ),
|
||||
pPreviewFont( NULL ),
|
||||
pPreviewSelection( NULL ),
|
||||
nUnoObjectId( 0 ),
|
||||
nRangeOverflowType( 0 ),
|
||||
aCurTextWidthCalcPos(MAXCOL,0,0),
|
||||
@@ -1192,4 +1194,38 @@ void ScDocument::ClearLookupCaches()
|
||||
pLookupCacheMapImpl->clear();
|
||||
}
|
||||
|
||||
void ScDocument::SetPreviewFont( SfxItemSet* pFont )
|
||||
{
|
||||
delete pPreviewFont;
|
||||
pPreviewFont = pFont;
|
||||
}
|
||||
|
||||
const ScMarkData& ScDocument::GetPreviewSelection()
|
||||
{
|
||||
if ( !pPreviewSelection )
|
||||
pPreviewSelection = new ScMarkData();
|
||||
|
||||
return *pPreviewSelection;
|
||||
}
|
||||
|
||||
void ScDocument::SetPreviewSelection( ScMarkData& rSel )
|
||||
{
|
||||
// yeuch, why do I have a pointer here ???? ( other problems
|
||||
// to fix right now though )
|
||||
if ( !pPreviewSelection )
|
||||
pPreviewSelection = new ScMarkData();
|
||||
*pPreviewSelection = rSel;
|
||||
}
|
||||
|
||||
SfxItemSet* ScDocument::GetPreviewFont( SCCOL nCol, SCROW nRow, SCTAB nTab )
|
||||
{
|
||||
SfxItemSet* pRet = NULL;
|
||||
if ( pPreviewFont )
|
||||
{
|
||||
if ( GetPreviewSelection().IsCellMarked( nCol, nRow ) && GetPreviewSelection().GetFirstSelected() == nTab )
|
||||
pRet = pPreviewFont;
|
||||
}
|
||||
return pRet;
|
||||
}
|
||||
|
||||
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|
||||
|
@@ -94,6 +94,7 @@ private:
|
||||
ScRefCellValue maCell;
|
||||
const ScPatternAttr* mpPattern;
|
||||
const SfxItemSet* mpCondSet;
|
||||
const SfxItemSet* mpPreviewFontSet;
|
||||
const ScPatternAttr* mpOldPattern;
|
||||
const SfxItemSet* mpOldCondSet;
|
||||
const RowInfo* mpThisRowInfo;
|
||||
|
@@ -331,7 +331,7 @@ public:
|
||||
SCROW nEndRow , SCCOL nEndCol ,
|
||||
boost::ptr_vector<boost::nullable<Edit> >& aEdits,
|
||||
sal_uInt16 aColLength );
|
||||
|
||||
void UpdateSelectionArea( const ScMarkData& rSel, ScPatternAttr* pAttr = NULL );
|
||||
// Internal helper functions
|
||||
protected:
|
||||
void UpdateLineAttrs( ::editeng::SvxBorderLine& rLine,
|
||||
|
@@ -68,6 +68,8 @@
|
||||
#include "preview.hxx"
|
||||
#include <svx/sdrhittesthelper.hxx>
|
||||
#include <boost/foreach.hpp>
|
||||
#include "formatsh.hxx"
|
||||
#include "sfx2/app.hxx"
|
||||
|
||||
using namespace com::sun::star;
|
||||
|
||||
|
@@ -78,7 +78,7 @@
|
||||
#include "scslots.hxx"
|
||||
|
||||
#include "scabstdlg.hxx"
|
||||
|
||||
#include <editeng/fontitem.hxx>
|
||||
|
||||
using namespace ::com::sun::star;
|
||||
|
||||
@@ -1412,10 +1412,17 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
|
||||
sal_uInt16 nSlot = rReq.GetSlot();
|
||||
|
||||
pTabViewShell->HideListBox(); // Autofilter-DropDown-Listbox
|
||||
ScDocument* pDoc = GetViewData()->GetDocument();
|
||||
if ( !pNewAttrs )
|
||||
{
|
||||
switch ( nSlot )
|
||||
{
|
||||
case SID_ATTR_CHAR_ENDPREVIEW_FONT:
|
||||
{
|
||||
pDoc->SetPreviewFont(NULL);
|
||||
pTabViewShell->UpdateSelectionArea( pDoc->GetPreviewSelection() );
|
||||
break;
|
||||
}
|
||||
case SID_ATTR_CHAR_COLOR:
|
||||
case SID_ATTR_CHAR_FONT:
|
||||
case SID_ATTR_CHAR_FONTHEIGHT:
|
||||
@@ -1451,6 +1458,32 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
|
||||
{
|
||||
switch ( nSlot )
|
||||
{
|
||||
case SID_ATTR_CHAR_PREVIEW_FONT:
|
||||
{
|
||||
SfxItemPool& rPool = GetPool();
|
||||
sal_uInt16 nWhich = rPool.GetWhich( nSlot );
|
||||
const SvxFontItem& rFont = ( const SvxFontItem&)pNewAttrs->Get( nWhich );
|
||||
SvxScriptSetItem aSetItem( SID_ATTR_CHAR_FONT, rPool );
|
||||
sal_uInt8 nScript = pTabViewShell->GetSelectionScriptType();
|
||||
aSetItem.PutItemForScriptType( nScript, rFont );
|
||||
|
||||
ScMarkData aFuncMark( pViewData->GetMarkData() );
|
||||
ScViewUtil::UnmarkFiltered( aFuncMark, pDoc );
|
||||
pDoc->SetPreviewFont( aSetItem.GetItemSet().Clone() );
|
||||
aFuncMark.MarkToMulti();
|
||||
|
||||
if ( !aFuncMark.IsMarked() && !aFuncMark.IsMultiMarked() )
|
||||
{
|
||||
SCCOL nCol = pViewData->GetCurX();
|
||||
SCROW nRow = pViewData->GetCurY();
|
||||
SCTAB nTab = pViewData->GetTabNo();
|
||||
ScRange aRange( nCol, nRow, nTab );
|
||||
aFuncMark.SetMarkArea( aRange );
|
||||
}
|
||||
pDoc->SetPreviewSelection( aFuncMark );
|
||||
pTabViewShell->UpdateSelectionArea( aFuncMark );
|
||||
break;
|
||||
}
|
||||
case SID_ATTR_CHAR_OVERLINE:
|
||||
case SID_ATTR_CHAR_STRIKEOUT:
|
||||
case SID_ATTR_ALIGN_LINEBREAK:
|
||||
@@ -1549,7 +1582,6 @@ void ScFormatShell::ExecuteAttr( SfxRequest& rReq )
|
||||
{
|
||||
::editeng::SvxBorderLine* pDefLine = pTabViewShell->GetDefaultFrameLine();
|
||||
const ScPatternAttr* pOldAttrs = pTabViewShell->GetSelectionPattern();
|
||||
ScDocument* pDoc = GetViewData()->GetDocument();
|
||||
SfxItemSet* pOldSet =
|
||||
new SfxItemSet(
|
||||
*(pDoc->GetPool()),
|
||||
|
@@ -36,6 +36,7 @@
|
||||
#include <editeng/scripttypeitem.hxx>
|
||||
#include <editeng/udlnitem.hxx>
|
||||
#include <editeng/unolingu.hxx>
|
||||
#include <editeng/fontitem.hxx>
|
||||
#include <svl/zforlist.hxx>
|
||||
#include <svl/zformat.hxx>
|
||||
#include <vcl/svapp.hxx>
|
||||
@@ -53,6 +54,11 @@
|
||||
#include "progress.hxx"
|
||||
#include "scmod.hxx"
|
||||
#include "fillinfo.hxx"
|
||||
#include "viewdata.hxx"
|
||||
#include "tabvwsh.hxx"
|
||||
#include "docsh.hxx"
|
||||
#include "markdata.hxx"
|
||||
#include "stlsheet.hxx"
|
||||
|
||||
#include <com/sun/star/i18n/DirectionProperty.hpp>
|
||||
#include <comphelper/string.hxx>
|
||||
@@ -1578,6 +1584,22 @@ void ScOutputData::DrawStrings( sal_Bool bPixelToLogic )
|
||||
pPattern = mpDoc->GetPattern( nCellX, nCellY, nTab );
|
||||
pCondSet = mpDoc->GetCondResult( nCellX, nCellY, nTab );
|
||||
}
|
||||
if ( mpDoc->GetPreviewFont() )
|
||||
{
|
||||
aAltPatterns.push_back(new ScPatternAttr(*pPattern));
|
||||
ScPatternAttr* pAltPattern = &aAltPatterns.back();
|
||||
if ( SfxItemSet* pFontSet = mpDoc->GetPreviewFont( nCellX, nCellY, nTab ) )
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
if ( pFontSet->GetItemState( ATTR_FONT, true, &pItem ) == SFX_ITEM_SET )
|
||||
pAltPattern->GetItemSet().Put( (const SvxFontItem&)*pItem );
|
||||
if ( pFontSet->GetItemState( ATTR_CJK_FONT, true, &pItem ) == SFX_ITEM_SET )
|
||||
pAltPattern->GetItemSet().Put( (const SvxFontItem&)*pItem );
|
||||
if ( pFontSet->GetItemState( ATTR_CTL_FONT, true, &pItem ) == SFX_ITEM_SET )
|
||||
pAltPattern->GetItemSet().Put( (const SvxFontItem&)*pItem );
|
||||
}
|
||||
pPattern = pAltPattern;
|
||||
}
|
||||
|
||||
if (aCell.hasNumeric() &&
|
||||
static_cast<const SfxBoolItem&>(
|
||||
@@ -2230,6 +2252,7 @@ ScOutputData::DrawEditParam::DrawEditParam(const ScPatternAttr* pPattern, const
|
||||
mpEngine(NULL),
|
||||
mpPattern(pPattern),
|
||||
mpCondSet(pCondSet),
|
||||
mpPreviewFontSet(NULL),
|
||||
mpOldPattern(NULL),
|
||||
mpOldCondSet(NULL),
|
||||
mpThisRowInfo(NULL)
|
||||
@@ -2284,7 +2307,7 @@ void ScOutputData::DrawEditParam::setPatternToEngine(bool bUseStyleColor)
|
||||
// syntax highlighting mode is ignored here
|
||||
// StringDiffer doesn't look at hyphenate, language items
|
||||
|
||||
if (mpPattern == mpOldPattern && mpCondSet == mpOldCondSet)
|
||||
if (mpPattern == mpOldPattern && mpCondSet == mpOldCondSet && !mpPreviewFontSet)
|
||||
return;
|
||||
|
||||
sal_Int32 nConfBackColor = SC_MOD()->GetColorConfig().GetColorValue(svtools::DOCCOLOR).nColor;
|
||||
@@ -2293,7 +2316,28 @@ void ScOutputData::DrawEditParam::setPatternToEngine(bool bUseStyleColor)
|
||||
|
||||
SfxItemSet* pSet = new SfxItemSet( mpEngine->GetEmptyItemSet() );
|
||||
mpPattern->FillEditItemSet( pSet, mpCondSet );
|
||||
|
||||
if ( mpPreviewFontSet )
|
||||
{
|
||||
const SfxPoolItem* pItem;
|
||||
if ( mpPreviewFontSet->GetItemState( ATTR_FONT, true, &pItem ) == SFX_ITEM_SET )
|
||||
{
|
||||
SvxFontItem aFontItem(EE_CHAR_FONTINFO);
|
||||
aFontItem = (const SvxFontItem&)*pItem;
|
||||
pSet->Put( aFontItem );
|
||||
}
|
||||
if ( mpPreviewFontSet->GetItemState( ATTR_CJK_FONT, true, &pItem ) == SFX_ITEM_SET )
|
||||
{
|
||||
SvxFontItem aCjkFontItem(EE_CHAR_FONTINFO_CJK);
|
||||
aCjkFontItem = (const SvxFontItem&)*pItem;
|
||||
pSet->Put( aCjkFontItem );
|
||||
}
|
||||
if ( mpPreviewFontSet->GetItemState( ATTR_CTL_FONT, true, &pItem ) == SFX_ITEM_SET )
|
||||
{
|
||||
SvxFontItem aCtlFontItem(EE_CHAR_FONTINFO_CTL);
|
||||
aCtlFontItem = (const SvxFontItem&)*pItem;
|
||||
pSet->Put( aCtlFontItem );
|
||||
}
|
||||
}
|
||||
mpEngine->SetDefaults( pSet );
|
||||
mpOldPattern = mpPattern;
|
||||
mpOldCondSet = mpCondSet;
|
||||
@@ -4563,6 +4607,7 @@ void ScOutputData::DrawEdit(sal_Bool bPixelToLogic)
|
||||
long nPosX = 0;
|
||||
for (SCCOL nX=0; nX<=nX2; nX++) // wegen Ueberhaengen
|
||||
{
|
||||
std::auto_ptr< ScPatternAttr > pPreviewPattr;
|
||||
if (nX==nX1) nPosX = nInitPosX; // positions before nX1 are calculated individually
|
||||
|
||||
CellInfo* pInfo = &pThisRowInfo->pCellInfo[nX+1];
|
||||
@@ -4635,6 +4680,7 @@ void ScOutputData::DrawEdit(sal_Bool bPixelToLogic)
|
||||
}
|
||||
if (bDoCell)
|
||||
{
|
||||
SfxItemSet* pPreviewFontSet = mpDoc->GetPreviewFont( nCellX, nCellY, nTab );
|
||||
if (!pEngine)
|
||||
pEngine = CreateOutputEditEngine();
|
||||
else
|
||||
@@ -4657,6 +4703,7 @@ void ScOutputData::DrawEdit(sal_Bool bPixelToLogic)
|
||||
aParam.mnPosX = nPosX;
|
||||
aParam.mnPosY = nPosY;
|
||||
aParam.mnInitPosX = nInitPosX;
|
||||
aParam.mpPreviewFontSet = pPreviewFontSet;
|
||||
aParam.mpOldPattern = pOldPattern;
|
||||
aParam.mpOldCondSet = pOldCondSet;
|
||||
aParam.mpThisRowInfo = pThisRowInfo;
|
||||
|
@@ -76,6 +76,7 @@
|
||||
#include "cellsuno.hxx"
|
||||
#include "tokenarray.hxx"
|
||||
|
||||
|
||||
//==================================================================
|
||||
|
||||
static void lcl_PostRepaintCondFormat( const ScConditionalFormat *pCondFmt, ScDocShell *pDocSh )
|
||||
@@ -2896,6 +2897,44 @@ void ScViewFunc::InsertNameList()
|
||||
pDocSh->UpdateOle(GetViewData());
|
||||
}
|
||||
|
||||
void ScViewFunc::UpdateSelectionArea( const ScMarkData& rSel, ScPatternAttr* pAttr )
|
||||
{
|
||||
ScDocShell* pDocShell = GetViewData()->GetDocShell();
|
||||
ScRange aMarkRange;
|
||||
if (rSel.IsMultiMarked() )
|
||||
rSel.GetMultiMarkArea( aMarkRange );
|
||||
else
|
||||
rSel.GetMarkArea( aMarkRange );
|
||||
|
||||
sal_Bool bSetLines = false;
|
||||
sal_Bool bSetAlign = false;
|
||||
if ( pAttr )
|
||||
{
|
||||
const SfxItemSet& rNewSet = pAttr->GetItemSet();
|
||||
bSetLines = rNewSet.GetItemState( ATTR_BORDER, sal_True ) == SFX_ITEM_SET ||
|
||||
rNewSet.GetItemState( ATTR_SHADOW, sal_True ) == SFX_ITEM_SET;
|
||||
bSetAlign = rNewSet.GetItemState( ATTR_HOR_JUSTIFY, sal_True ) == SFX_ITEM_SET;
|
||||
}
|
||||
|
||||
sal_uInt16 nExtFlags = 0;
|
||||
if ( bSetLines )
|
||||
nExtFlags |= SC_PF_LINES;
|
||||
if ( bSetAlign )
|
||||
nExtFlags |= SC_PF_WHOLEROWS;
|
||||
|
||||
SCCOL nStartCol = aMarkRange.aStart.Col();
|
||||
SCROW nStartRow = aMarkRange.aStart.Row();
|
||||
SCTAB nStartTab = aMarkRange.aStart.Tab();
|
||||
SCCOL nEndCol = aMarkRange.aEnd.Col();
|
||||
SCROW nEndRow = aMarkRange.aEnd.Row();
|
||||
SCTAB nEndTab = aMarkRange.aEnd.Tab();
|
||||
pDocShell->PostPaint( nStartCol, nStartRow, nStartTab,
|
||||
nEndCol, nEndRow, nEndTab,
|
||||
PAINT_GRID, nExtFlags | SC_PF_TESTMERGE );
|
||||
ScTabViewShell* pTabViewShell = GetViewData()->GetViewShell();
|
||||
pTabViewShell->CellContentChanged();
|
||||
pTabViewShell->AdjustBlockHeight(true, const_cast<ScMarkData*>(&rSel));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@@ -1649,6 +1649,58 @@ SvxFontItem CharFontName SID_ATTR_CHAR_FONT
|
||||
GroupId = GID_FORMAT;
|
||||
]
|
||||
|
||||
SvxFontItem CharPreviewFontName SID_ATTR_CHAR_PREVIEW_FONT
|
||||
|
||||
[
|
||||
/* flags: */
|
||||
AutoUpdate = TRUE,
|
||||
Cachable = Cachable,
|
||||
FastCall = FALSE,
|
||||
HasCoreId = FALSE,
|
||||
HasDialog = FALSE,
|
||||
ReadOnlyDoc = FALSE,
|
||||
Toggle = FALSE,
|
||||
Container = FALSE,
|
||||
RecordAbsolute = FALSE,
|
||||
RecordPerSet;
|
||||
Synchron;
|
||||
|
||||
Readonly = FALSE,
|
||||
|
||||
/* config: */
|
||||
AccelConfig = TRUE,
|
||||
MenuConfig = TRUE,
|
||||
StatusBarConfig = FALSE,
|
||||
ToolBoxConfig = TRUE,
|
||||
GroupId = GID_FORMAT;
|
||||
]
|
||||
|
||||
SvxFontItem CharEndPreviewFontName SID_ATTR_CHAR_ENDPREVIEW_FONT
|
||||
|
||||
[
|
||||
/* flags: */
|
||||
AutoUpdate = TRUE,
|
||||
Cachable = Cachable,
|
||||
FastCall = FALSE,
|
||||
HasCoreId = FALSE,
|
||||
HasDialog = FALSE,
|
||||
ReadOnlyDoc = FALSE,
|
||||
Toggle = FALSE,
|
||||
Container = FALSE,
|
||||
RecordAbsolute = FALSE,
|
||||
RecordPerSet;
|
||||
Synchron;
|
||||
|
||||
Readonly = FALSE,
|
||||
|
||||
/* config: */
|
||||
AccelConfig = TRUE,
|
||||
MenuConfig = TRUE,
|
||||
StatusBarConfig = FALSE,
|
||||
ToolBoxConfig = TRUE,
|
||||
GroupId = GID_FORMAT;
|
||||
]
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
SvxFontItem CharFontNameLatin SID_ATTR_CHAR_LATIN_FONT
|
||||
|
||||
|
@@ -187,9 +187,18 @@ private:
|
||||
bool bRelease;
|
||||
Reference< XDispatchProvider > m_xDispatchProvider;
|
||||
Reference< XFrame > m_xFrame;
|
||||
bool mbEndPreview;
|
||||
|
||||
void ReleaseFocus_Impl();
|
||||
void EnableControls_Impl();
|
||||
|
||||
void EndPreview()
|
||||
{
|
||||
Sequence< PropertyValue > aArgs;
|
||||
SfxToolBoxControl::Dispatch( m_xDispatchProvider,
|
||||
OUString( ".uno:CharEndPreviewFontName" ),
|
||||
aArgs );
|
||||
}
|
||||
DECL_DLLPRIVATE_LINK( CheckAndMarkUnknownFont, VclWindowEvent* );
|
||||
|
||||
protected:
|
||||
@@ -209,6 +218,7 @@ public:
|
||||
void Fill( const FontList* pList )
|
||||
{ FontNameBox::Fill( pList );
|
||||
nFtCount = pList->GetFontNameCount(); }
|
||||
virtual void UserDraw( const UserDrawEvent& rUDEvt );
|
||||
virtual long PreNotify( NotifyEvent& rNEvt );
|
||||
virtual long Notify( NotifyEvent& rNEvt );
|
||||
virtual Reference< ::com::sun::star::accessibility::XAccessible > CreateAccessible();
|
||||
@@ -785,7 +795,8 @@ SvxFontNameBox_Impl::SvxFontNameBox_Impl( Window* pParent, const Reference< XDis
|
||||
nFtCount ( 0 ),
|
||||
bRelease ( true ),
|
||||
m_xDispatchProvider( rDispatchProvider ),
|
||||
m_xFrame (_xFrame)
|
||||
m_xFrame (_xFrame),
|
||||
mbEndPreview(false)
|
||||
{
|
||||
SetSizePixel(LogicToPixel( aLogicalSize, MAP_APPFONT ));
|
||||
EnableControls_Impl();
|
||||
@@ -874,6 +885,9 @@ long SvxFontNameBox_Impl::PreNotify( NotifyEvent& rNEvt )
|
||||
long SvxFontNameBox_Impl::Notify( NotifyEvent& rNEvt )
|
||||
{
|
||||
long nHandled = 0;
|
||||
mbEndPreview = false;
|
||||
if ( rNEvt.GetType() == EVENT_KEYUP )
|
||||
mbEndPreview = true;
|
||||
|
||||
if ( rNEvt.GetType() == EVENT_KEYINPUT )
|
||||
{
|
||||
@@ -895,6 +909,7 @@ long SvxFontNameBox_Impl::Notify( NotifyEvent& rNEvt )
|
||||
case KEY_ESCAPE:
|
||||
SetText( aCurText );
|
||||
ReleaseFocus_Impl();
|
||||
EndPreview();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -903,6 +918,8 @@ long SvxFontNameBox_Impl::Notify( NotifyEvent& rNEvt )
|
||||
Window* pFocusWin = Application::GetFocusWindow();
|
||||
if ( !HasFocus() && GetSubEdit() != pFocusWin )
|
||||
SetText( GetSavedValue() );
|
||||
// send EndPreview
|
||||
EndPreview();
|
||||
}
|
||||
|
||||
return nHandled ? nHandled : FontNameBox::Notify( rNEvt );
|
||||
@@ -956,43 +973,88 @@ void SvxFontNameBox_Impl::EnableControls_Impl()
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
void SvxFontNameBox_Impl::UserDraw( const UserDrawEvent& rUDEvt )
|
||||
{
|
||||
FontNameBox::UserDraw( rUDEvt );
|
||||
|
||||
// Hack - GetStyle now contains the currently
|
||||
// selected item in the list box
|
||||
// ItemId contains the id of the current item to draw
|
||||
// or select
|
||||
if ( rUDEvt.GetItemId() == rUDEvt.GetStyle() )
|
||||
{
|
||||
Sequence< PropertyValue > aArgs( 1 );
|
||||
FontInfo aInfo( pFontList->Get( GetEntry( rUDEvt.GetItemId() ),
|
||||
aCurFont.GetWeight(),
|
||||
aCurFont.GetItalic() ) );
|
||||
|
||||
SvxFontItem aFontItem( aInfo.GetFamily(),
|
||||
aInfo.GetName(),
|
||||
aInfo.GetStyleName(),
|
||||
aInfo.GetPitch(),
|
||||
aInfo.GetCharSet(),
|
||||
SID_ATTR_CHAR_FONT );
|
||||
aFontItem.QueryValue( aArgs[0].Value );
|
||||
aArgs[0].Name = OUString( "CharPreviewFontName" );
|
||||
SfxToolBoxControl::Dispatch( m_xDispatchProvider,
|
||||
OUString( ".uno:CharPreviewFontName" ),
|
||||
aArgs );
|
||||
}
|
||||
}
|
||||
|
||||
void SvxFontNameBox_Impl::Select()
|
||||
{
|
||||
FontNameBox::Select();
|
||||
|
||||
Sequence< PropertyValue > aArgs( 1 );
|
||||
std::auto_ptr<SvxFontItem> pFontItem;
|
||||
if ( pFontList )
|
||||
{
|
||||
FontInfo aInfo( pFontList->Get( GetText(),
|
||||
aCurFont.GetWeight(),
|
||||
aCurFont.GetItalic() ) );
|
||||
aCurFont = aInfo;
|
||||
|
||||
pFontItem.reset( new SvxFontItem( aInfo.GetFamily(),
|
||||
aInfo.GetName(),
|
||||
aInfo.GetStyleName(),
|
||||
aInfo.GetPitch(),
|
||||
aInfo.GetCharSet(),
|
||||
SID_ATTR_CHAR_FONT ) );
|
||||
|
||||
Any a;
|
||||
pFontItem->QueryValue( a );
|
||||
aArgs[0].Value = a;
|
||||
}
|
||||
if ( !IsTravelSelect() )
|
||||
{
|
||||
if ( pFontList )
|
||||
// #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
|
||||
// This instance may be deleted in the meantime (i.e. when a dialog is opened
|
||||
// while in Dispatch()), accessing members will crash in this case.
|
||||
ReleaseFocus_Impl();
|
||||
EndPreview();
|
||||
if ( pFontItem.get() )
|
||||
{
|
||||
FontInfo aInfo( pFontList->Get( GetText(),
|
||||
aCurFont.GetWeight(),
|
||||
aCurFont.GetItalic() ) );
|
||||
aCurFont = aInfo;
|
||||
|
||||
SvxFontItem aFontItem( aInfo.GetFamily(),
|
||||
aInfo.GetName(),
|
||||
aInfo.GetStyleName(),
|
||||
aInfo.GetPitch(),
|
||||
aInfo.GetCharSet(),
|
||||
SID_ATTR_CHAR_FONT );
|
||||
|
||||
Any a;
|
||||
Sequence< PropertyValue > aArgs( 1 );
|
||||
aArgs[0].Name = OUString( "CharFontName" );
|
||||
aFontItem.QueryValue( a );
|
||||
aArgs[0].Value = a;
|
||||
|
||||
// #i33380# DR 2004-09-03 Moved the following line above the Dispatch() call.
|
||||
// This instance may be deleted in the meantime (i.e. when a dialog is opened
|
||||
// while in Dispatch()), accessing members will crash in this case.
|
||||
ReleaseFocus_Impl();
|
||||
|
||||
SfxToolBoxControl::Dispatch( m_xDispatchProvider,
|
||||
OUString( ".uno:CharFontName" ),
|
||||
aArgs );
|
||||
}
|
||||
else
|
||||
ReleaseFocus_Impl();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( mbEndPreview )
|
||||
{
|
||||
EndPreview();
|
||||
return;
|
||||
}
|
||||
if ( pFontItem.get() )
|
||||
{
|
||||
aArgs[0].Name = OUString( "CharPreviewFontName" );
|
||||
SfxToolBoxControl::Dispatch( m_xDispatchProvider,
|
||||
OUString( ".uno:CharPreviewFontName" ),
|
||||
aArgs );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -1811,7 +1811,12 @@ void ImplListBoxWindow::ImplPaint( sal_uInt16 nPos, sal_Bool bErase, bool bLayou
|
||||
if ( nPos < GetEntryList()->GetMRUCount() )
|
||||
nPos = GetEntryList()->FindEntry( GetEntryList()->GetEntryText( nPos ) );
|
||||
nPos = sal::static_int_cast<sal_uInt16>(nPos - GetEntryList()->GetMRUCount());
|
||||
UserDrawEvent aUDEvt( this, aRect, nPos, 0 );
|
||||
sal_uInt16 nCurr = mnCurrentPos;
|
||||
if ( mnCurrentPos < GetEntryList()->GetMRUCount() )
|
||||
nCurr = GetEntryList()->FindEntry( GetEntryList()->GetEntryText( nCurr ) );
|
||||
nCurr = sal::static_int_cast<sal_uInt16>( nCurr - GetEntryList()->GetMRUCount());
|
||||
|
||||
UserDrawEvent aUDEvt( this, aRect, nPos, nCurr );
|
||||
maUserDrawHdl.Call( &aUDEvt );
|
||||
mbInUserDraw = sal_False;
|
||||
}
|
||||
|
Reference in New Issue
Block a user