blob: f32a1d12e16c38dc50b7bb44c914f0702b223b5d [file] [log] [blame]
/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sfx2.hxx"
#include <sfx2/new.hxx>
#include <vcl/gdimtf.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/morebtn.hxx>
#include <svtools/svmedit.hxx>
#include <svl/itemset.hxx>
#include <svl/eitem.hxx>
#include <svtools/sfxecode.hxx>
#include <svtools/ehdl.hxx>
#include <tools/urlobj.hxx>
#include <unotools/localfilehelper.hxx>
#include "new.hrc"
#include "doc.hrc"
#include <sfx2/sfx.hrc>
#include "helpid.hrc"
#include "sfxtypes.hxx"
#include <sfx2/app.hxx>
#include <sfx2/viewfrm.hxx>
#include <sfx2/docfac.hxx>
#include <sfx2/objsh.hxx>
#include "fltfnc.hxx"
#include <sfx2/viewsh.hxx>
#include "sfx2/viewfac.hxx"
#include "sfx2/sfxresid.hxx"
#include <sfx2/docfile.hxx>
#include "preview.hxx"
#include <sfx2/printer.hxx>
#include <vcl/waitobj.hxx>
#include <vcl/virdev.hxx>
#include <vcl/jobset.hxx>
#include <svtools/accessibilityoptions.hxx>
// Draw modes
#define OUTPUT_DRAWMODE_COLOR (DRAWMODE_DEFAULT)
#define OUTPUT_DRAWMODE_GRAYSCALE (DRAWMODE_GRAYLINE | DRAWMODE_GRAYFILL | DRAWMODE_BLACKTEXT | DRAWMODE_GRAYBITMAP | DRAWMODE_GRAYGRADIENT)
#define OUTPUT_DRAWMODE_BLACKWHITE (DRAWMODE_BLACKLINE | DRAWMODE_BLACKTEXT | DRAWMODE_WHITEFILL | DRAWMODE_GRAYBITMAP | DRAWMODE_WHITEGRADIENT)
#define OUTPUT_DRAWMODE_CONTRAST (DRAWMODE_SETTINGSLINE | DRAWMODE_SETTINGSFILL | DRAWMODE_SETTINGSTEXT | DRAWMODE_SETTINGSGRADIENT)
//========================================================================
#define MORE_BTN(x) pMoreBt->x
//========================================================================
void SfxPreviewBase_Impl::SetObjectShell( SfxObjectShell* pObj )
{
::boost::shared_ptr<GDIMetaFile> pFile = pObj
? pObj->GetPreviewMetaFile()
: ::boost::shared_ptr<GDIMetaFile>();
pMetaFile = pFile;
Invalidate();
}
SfxPreviewBase_Impl::SfxPreviewBase_Impl(
Window* pParent, const ResId& rResId )
: Window(pParent, rResId), pMetaFile()
{
}
SfxPreviewBase_Impl::SfxPreviewBase_Impl( Window* pParent )
: Window(pParent, 0 ), pMetaFile()
{
Resize();
Show();
}
SfxPreviewBase_Impl::~SfxPreviewBase_Impl()
{
}
void SfxPreviewBase_Impl::Resize()
{
Invalidate();
}
void SfxPreviewBase_Impl::SetGDIFile( ::boost::shared_ptr<GDIMetaFile> pFile )
{
pMetaFile = pFile;
Invalidate();
}
SfxFrameWindow* SfxPreviewWin_Impl::PreviewFactory(
SfxFrame* pFrame, const String& /*rName*/ )
{
return new SfxFrameWindow( new SfxPreviewWin_Impl(
&pFrame->GetCurrentViewFrame()->GetWindow() ) );
}
void SfxPreviewWin_Impl::ImpPaint(
const Rectangle&, GDIMetaFile* pFile, Window* pWindow )
{
Size aTmpSize = pFile ? pFile->GetPrefSize() : Size(1,1 );
DBG_ASSERT( aTmpSize.Height()*aTmpSize.Width(),
"size of first page is 0, overload GetFirstPageSize or set vis-area!" );
#define FRAME 4
long nWidth = pWindow->GetOutputSize().Width() - 2*FRAME;
long nHeight = pWindow->GetOutputSize().Height() - 2*FRAME;
if( nWidth < 0 ) nWidth = 0;
if( nHeight < 0 ) nHeight = 0;
double dRatio=((double)aTmpSize.Width())/aTmpSize.Height();
double dRatioPreV=((double) nWidth ) / nHeight;
Size aSize;
Point aPoint;
if (dRatio>dRatioPreV)
{
aSize=Size(nWidth, (sal_uInt16)(nWidth/dRatio));
aPoint=Point( 0, (sal_uInt16)((nHeight-aSize.Height())/2));
}
else
{
aSize=Size((sal_uInt16)(nHeight*dRatio), nHeight);
aPoint=Point((sal_uInt16)((nWidth-aSize.Width())/2),0);
}
Point bPoint=Point(nWidth,nHeight)-aPoint;
pWindow->SetLineColor();
Color aLightGrayCol( COL_LIGHTGRAY );
pWindow->SetFillColor( aLightGrayCol );
pWindow->DrawRect( Rectangle( Point( 0,0 ), pWindow->GetOutputSize() ) );
if ( pFile )
{
Color aBlackCol( COL_BLACK );
Color aWhiteCol( COL_WHITE );
pWindow->SetLineColor( aBlackCol );
pWindow->SetFillColor( aWhiteCol );
pWindow->DrawRect( Rectangle( aPoint + Point( FRAME, FRAME ), bPoint + Point( FRAME, FRAME ) ) );
//! pFile->Move( Point( FRAME, FRAME ) );
//! pFile->Scale( Fraction( aTmpSize.Width(), aSize.Width() ),
//! Fraction( aTmpSize.Height(), aSize.Height() ) );
pFile->WindStart();
pFile->Play( pWindow, aPoint + Point( FRAME, FRAME ), aSize );
}
}
void SfxPreviewWin_Impl::Paint( const Rectangle& rRect )
{
ImpPaint( rRect, pMetaFile.get(), this );
}
SfxPreviewWin::SfxPreviewWin(
Window* pParent, const ResId& rResId, SfxObjectShellLock &rDocSh )
: Window(pParent, rResId), rDocShell( rDocSh )
{
SetHelpId( HID_PREVIEW_FRAME );
// adjust contrast mode initially
bool bUseContrast = UseHighContrastSetting();
SetDrawMode( bUseContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
// #107818# This preview window is for document previews. Therefore
// right-to-left mode should be off
EnableRTL( sal_False );
}
void SfxPreviewWin::Paint( const Rectangle& rRect )
{
SfxViewFrame *pFrame = SfxViewFrame::GetFirst( &rDocShell );
if ( pFrame && pFrame->GetViewShell() &&
pFrame->GetViewShell()->GetPrinter() &&
pFrame->GetViewShell()->GetPrinter()->IsPrinting() )
{
return;
}
Size aTmpSize( rDocShell->GetFirstPageSize() );
GDIMetaFile aMtf;
VirtualDevice aDevice;
DBG_ASSERT( aTmpSize.Height() * aTmpSize.Width(), "size of first page is 0, overload GetFirstPageSize or set vis-area!" );
aMtf.SetPrefSize( aTmpSize );
aDevice.EnableOutput( sal_False );
aDevice.SetMapMode( rDocShell->GetMapUnit() );
aDevice.SetDrawMode( GetDrawMode() );
aMtf.Record( &aDevice );
rDocShell->DoDraw( &aDevice, Point(0,0), aTmpSize, JobSetup(), ASPECT_THUMBNAIL );
aMtf.Stop();
aMtf.WindStart();
SfxPreviewWin_Impl::ImpPaint( rRect, &aMtf, this );
}
void SfxPreviewWin::DataChanged( const DataChangedEvent& rDCEvt )
{
Window::DataChanged( rDCEvt );
if( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
(rDCEvt.GetFlags() & SETTINGS_STYLE) )
{
// adjust contrast mode
bool bUseContrast = UseHighContrastSetting();
SetDrawMode( bUseContrast ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
}
}
bool SfxPreviewWin::UseHighContrastSetting() const
{
return GetSettings().GetStyleSettings().GetHighContrastMode();
}
class SfxNewFileDialog_Impl
{
FixedText aRegionFt;
ListBox aRegionLb;
FixedText aTemplateFt;
ListBox aTemplateLb;
CheckBox aPreviewBtn;
SfxPreviewWin_Impl aPreviewWin;
FixedText aTitleFt;
Edit aTitleEd;
FixedText aThemaFt;
Edit aThemaEd;
FixedText aKeywordsFt;
Edit aKeywordsEd;
FixedText aDescFt;
MultiLineEdit aDescEd;
FixedLine aDocinfoGb;
CheckBox aTextStyleCB;
CheckBox aFrameStyleCB;
CheckBox aPageStyleCB;
CheckBox aNumStyleCB;
CheckBox aMergeStyleCB;
PushButton aLoadFilePB;
OKButton aOkBt;
CancelButton aCancelBt;
HelpButton aHelpBt;
MoreButton* pMoreBt;
Timer aPrevTimer;
String aNone;
String sLoadTemplate;
sal_uInt16 nFlags;
SfxDocumentTemplates aTemplates;
SfxObjectShellLock xDocShell;
SfxNewFileDialog* pAntiImpl;
void ClearInfo();
DECL_LINK( Update, void * );
DECL_LINK( RegionSelect, ListBox * );
DECL_LINK( TemplateSelect, ListBox * );
DECL_LINK( DoubleClick, ListBox * );
void TogglePreview(CheckBox *);
DECL_LINK( Expand, MoreButton * );
DECL_LINK( PreviewClick, CheckBox * );
DECL_LINK( LoadFile, PushButton* );
sal_uInt16 GetSelectedTemplatePos() const;
public:
SfxNewFileDialog_Impl( SfxNewFileDialog* pAntiImplP, sal_uInt16 nFlags );
~SfxNewFileDialog_Impl();
// Liefert sal_False, wenn '- Keine -' als Vorlage eingestellt ist
// Nur wenn IsTemplate() sal_True liefert, koennen Vorlagennamen
// erfragt werden
sal_Bool IsTemplate() const;
String GetTemplateRegion() const;
String GetTemplateName() const;
String GetTemplateFileName() const;
sal_uInt16 GetTemplateFlags()const;
void SetTemplateFlags(sal_uInt16 nSet);
};
//-------------------------------------------------------------------------
void SfxNewFileDialog_Impl::ClearInfo()
{
const String aNo;
aTitleEd.SetText(aNo);
aThemaEd.SetText(aNo);
aKeywordsEd.SetText(aNo);
aDescEd.SetText(aNo);
}
//-------------------------------------------------------------------------
IMPL_LINK( SfxNewFileDialog_Impl, Update, void *, EMPTYARG )
{
if ( xDocShell.Is() )
{
if ( xDocShell->GetProgress() )
return sal_False;
xDocShell.Clear();
}
const sal_uInt16 nEntry = GetSelectedTemplatePos();
if(!nEntry)
{
ClearInfo();
aPreviewWin.Invalidate();
aPreviewWin.SetObjectShell( 0);
return 0;
}
if ( aPreviewBtn.IsChecked() && (nFlags & SFXWB_PREVIEW) == SFXWB_PREVIEW)
{
String aFileName = aTemplates.GetPath( aRegionLb.GetSelectEntryPos(), nEntry-1);
INetURLObject aTestObj( aFileName );
if( aTestObj.GetProtocol() == INET_PROT_NOT_VALID )
{
// temp. fix until Templates are managed by UCB compatible service
// does NOT work with locally cached components !
String aTemp;
utl::LocalFileHelper::ConvertPhysicalNameToURL( aFileName, aTemp );
aFileName = aTemp;
}
INetURLObject aObj( aFileName );
for ( SfxObjectShell* pTmp = SfxObjectShell::GetFirst();
pTmp;
pTmp = SfxObjectShell::GetNext(*pTmp) )
{
//! fsys bug op==
if ( pTmp->GetMedium())
// ??? HasName() MM
if( INetURLObject( pTmp->GetMedium()->GetName() ) == aObj )
{
xDocShell = pTmp;
break;
}
}
if ( !xDocShell.Is() )
{
Window *pParent = Application::GetDefDialogParent();
Application::SetDefDialogParent( pAntiImpl );
SfxErrorContext eEC(ERRCTX_SFX_LOADTEMPLATE,pAntiImpl);
SfxApplication *pSfxApp = SFX_APP();
sal_uIntPtr lErr;
SfxItemSet* pSet = new SfxAllItemSet( pSfxApp->GetPool() );
pSet->Put( SfxBoolItem( SID_TEMPLATE, sal_True ) );
pSet->Put( SfxBoolItem( SID_PREVIEW, sal_True ) );
lErr = pSfxApp->LoadTemplate( xDocShell, aFileName, sal_True, pSet );
if( lErr )
ErrorHandler::HandleError(lErr);
Application::SetDefDialogParent( pParent );
if ( !xDocShell.Is() )
{
aPreviewWin.SetObjectShell( 0 );
return sal_False;
}
}
aPreviewWin.SetObjectShell( xDocShell );
}
return sal_True;
}
//-------------------------------------------------------------------------
IMPL_LINK( SfxNewFileDialog_Impl, RegionSelect, ListBox *, pBox )
{
if ( xDocShell.Is() && xDocShell->GetProgress() )
return 0;
const sal_uInt16 nRegion = pBox->GetSelectEntryPos();
const sal_uInt16 nCount = aTemplates.GetRegionCount()? aTemplates.GetCount(nRegion): 0;
aTemplateLb.SetUpdateMode(sal_False);
aTemplateLb.Clear();
String aSel=aRegionLb.GetSelectEntry();
sal_uInt16 nc=aSel.Search('(');
if (nc-1&&nc!=STRING_NOTFOUND)
aSel.Erase(nc-1);
if (aSel.CompareIgnoreCaseToAscii( String(SfxResId(STR_STANDARD)) )==COMPARE_EQUAL)
aTemplateLb.InsertEntry(aNone);
for (sal_uInt16 i = 0; i < nCount; ++i)
aTemplateLb.InsertEntry(aTemplates.GetName(nRegion, i));
aTemplateLb.SelectEntryPos(0);
aTemplateLb.SetUpdateMode(sal_True);
aTemplateLb.Invalidate();
aTemplateLb.Update();
return 0;
}
//-------------------------------------------------------------------------
IMPL_LINK_INLINE_START( SfxNewFileDialog_Impl, Expand, MoreButton *, EMPTYARG )
{
TemplateSelect(&aTemplateLb);
return 0;
}
IMPL_LINK_INLINE_END( SfxNewFileDialog_Impl, Expand, MoreButton *, pMoreButton )
//-------------------------------------------------------------------------
IMPL_LINK( SfxNewFileDialog_Impl, PreviewClick, CheckBox *, pBox )
{
if ( xDocShell.Is() && xDocShell->GetProgress() )
return 0;
sal_uInt16 nEntry = GetSelectedTemplatePos();
if ( nEntry && pBox->IsChecked() )
{
if(!Update(0))
aPreviewWin.Invalidate();
}
else
{
if (xDocShell.Is())
xDocShell.Clear();
aPreviewWin.SetObjectShell( 0 );
}
return 0;
}
//-------------------------------------------------------------------------
IMPL_LINK( SfxNewFileDialog_Impl, TemplateSelect, ListBox *, EMPTYARG )
{
// noch am Laden
if ( xDocShell && xDocShell->GetProgress() )
return 0;
if ( !MORE_BTN(GetState()) )
// Dialog nicht aufgeklappt
return 0;
if ( aPreviewBtn.IsChecked() )
aPrevTimer.Start();
return 0;
}
//-------------------------------------------------------------------------
IMPL_LINK_INLINE_START( SfxNewFileDialog_Impl, DoubleClick, ListBox *, pListBox )
{
(void)pListBox;
// noch am Laden
if ( !xDocShell.Is() || !xDocShell->GetProgress() )
pAntiImpl->EndDialog(RET_OK);
return 0;
}
IMPL_LINK_INLINE_END( SfxNewFileDialog_Impl, DoubleClick, ListBox *, pListBox )
//-------------------------------------------------------------------------
IMPL_LINK_INLINE_START( SfxNewFileDialog_Impl, LoadFile, PushButton *, EMPTYARG )
{
pAntiImpl->EndDialog(RET_TEMPLATE_LOAD);
return 0;
}
IMPL_LINK_INLINE_END( SfxNewFileDialog_Impl, LoadFile, PushButton *, EMPTYARG )
//-------------------------------------------------------------------------
sal_uInt16 SfxNewFileDialog_Impl::GetSelectedTemplatePos() const
{
sal_uInt16 nEntry=aTemplateLb.GetSelectEntryPos();
String aSel=aRegionLb.GetSelectEntry().Copy();
sal_uInt16 nc=aSel.Search('(');
if (nc-1&&nc!=STRING_NOTFOUND)
aSel.Erase(nc-1);
if (aSel.CompareIgnoreCaseToAscii(String(SfxResId(STR_STANDARD)))!=COMPARE_EQUAL)
nEntry++;
if (!aTemplateLb.GetSelectEntryCount())
nEntry=0;
return nEntry;
}
//-------------------------------------------------------------------------
sal_Bool SfxNewFileDialog_Impl::IsTemplate() const
{
return GetSelectedTemplatePos()!=0;
}
//-------------------------------------------------------------------------
String SfxNewFileDialog_Impl::GetTemplateFileName() const
{
if(!IsTemplate() || !aTemplates.GetRegionCount())
return String();
return aTemplates.GetPath(aRegionLb.GetSelectEntryPos(),
GetSelectedTemplatePos()-1);
}
//-------------------------------------------------------------------------
String SfxNewFileDialog_Impl::GetTemplateRegion() const
{
if(!IsTemplate() || !aTemplates.GetRegionCount())
return String();
return aRegionLb.GetSelectEntry();
}
//-------------------------------------------------------------------------
String SfxNewFileDialog_Impl::GetTemplateName() const
{
if(!IsTemplate() || !aTemplates.GetRegionCount())
return String();
return aTemplateLb.GetSelectEntry();
}
//-------------------------------------------------------------------------
void AdjustPosSize_Impl(Window *pWin, short nMoveOffset, short nSizeOffset)
{
Point aPos(pWin->GetPosPixel());
Size aSize(pWin->GetSizePixel());
aPos.X() -= nMoveOffset;
aSize.Width() += nSizeOffset;
pWin->SetPosSizePixel(aPos, aSize);
}
//-------------------------------------------------------------------------
sal_uInt16 SfxNewFileDialog_Impl::GetTemplateFlags()const
{
sal_uInt16 nRet = aTextStyleCB.IsChecked() ? SFX_LOAD_TEXT_STYLES : 0;
if(aFrameStyleCB.IsChecked())
nRet |= SFX_LOAD_FRAME_STYLES;
if(aPageStyleCB.IsChecked())
nRet |= SFX_LOAD_PAGE_STYLES;
if(aNumStyleCB.IsChecked())
nRet |= SFX_LOAD_NUM_STYLES;
if(aMergeStyleCB.IsChecked())
nRet |= SFX_MERGE_STYLES;
return nRet;
}
//-------------------------------------------------------------------------
void SfxNewFileDialog_Impl::SetTemplateFlags(sal_uInt16 nSet)
{
aTextStyleCB.Check( 0 != (nSet&SFX_LOAD_TEXT_STYLES ));
aFrameStyleCB.Check( 0 != (nSet&SFX_LOAD_FRAME_STYLES));
aPageStyleCB.Check( 0 != (nSet&SFX_LOAD_PAGE_STYLES ));
aNumStyleCB.Check( 0 != (nSet&SFX_LOAD_NUM_STYLES ));
aMergeStyleCB.Check( 0 != (nSet&SFX_MERGE_STYLES ));
}
//-------------------------------------------------------------------------
SfxNewFileDialog_Impl::SfxNewFileDialog_Impl(
SfxNewFileDialog* pAntiImplP, sal_uInt16 nFl)
: aRegionFt( pAntiImplP, SfxResId( FT_REGION ) ),
aRegionLb( pAntiImplP, SfxResId( LB_REGION ) ),
aTemplateFt( pAntiImplP, SfxResId( FT_TEMPLATE ) ),
aTemplateLb( pAntiImplP, SfxResId( LB_TEMPLATE ) ),
aPreviewBtn( pAntiImplP, SfxResId( BTN_PREVIEW ) ),
aPreviewWin( pAntiImplP, SfxResId( WIN_PREVIEW ) ),
aTitleFt( pAntiImplP, SfxResId( FT_TITLE ) ),
aTitleEd( pAntiImplP, SfxResId( ED_TITLE ) ),
aThemaFt( pAntiImplP, SfxResId( FT_THEMA ) ),
aThemaEd( pAntiImplP, SfxResId( ED_THEMA ) ),
aKeywordsFt( pAntiImplP, SfxResId( FT_KEYWORDS ) ),
aKeywordsEd( pAntiImplP, SfxResId( ED_KEYWORDS ) ),
aDescFt( pAntiImplP, SfxResId( FT_DESC ) ),
aDescEd( pAntiImplP, SfxResId( ED_DESC ) ),
aDocinfoGb( pAntiImplP, SfxResId( GB_DOCINFO ) ),
aTextStyleCB( pAntiImplP, SfxResId( CB_TEXT_STYLE )),
aFrameStyleCB( pAntiImplP, SfxResId( CB_FRAME_STYLE )),
aPageStyleCB( pAntiImplP, SfxResId( CB_PAGE_STYLE )),
aNumStyleCB( pAntiImplP, SfxResId( CB_NUM_STYLE )),
aMergeStyleCB( pAntiImplP, SfxResId( CB_MERGE_STYLE )),
aLoadFilePB( pAntiImplP, SfxResId( PB_LOAD_FILE )),
aOkBt( pAntiImplP, SfxResId( BT_OK ) ),
aCancelBt( pAntiImplP, SfxResId( BT_CANCEL ) ),
aHelpBt( pAntiImplP, SfxResId( BT_HELP ) ),
pMoreBt( new MoreButton( pAntiImplP, SfxResId( BT_MORE ) ) ),
aNone( SfxResId(STR_NONE) ),
sLoadTemplate( SfxResId(STR_LOAD_TEMPLATE)),
nFlags(nFl),
pAntiImpl( pAntiImplP )
{
short nMoveOffset = *(short *)pAntiImplP->GetClassRes();
pAntiImplP->IncrementRes(sizeof(short));
short nExpandSize= *(short *)pAntiImplP->GetClassRes();
pAntiImplP->IncrementRes(sizeof(short));
pAntiImplP->FreeResource();
if (!nFlags)
MORE_BTN(Hide());
else if(SFXWB_LOAD_TEMPLATE == nFlags)
{
aLoadFilePB.SetClickHdl(LINK(this, SfxNewFileDialog_Impl, LoadFile));
aLoadFilePB.Show();
aTextStyleCB.Show();
aFrameStyleCB.Show();
aPageStyleCB.Show();
aNumStyleCB.Show();
aMergeStyleCB.Show();
Size aSize(pAntiImplP->GetOutputSizePixel());
Size aTmp(pAntiImplP->LogicToPixel(Size(16, 16), MAP_APPFONT));
aSize.Height() += aTmp.Height();
pAntiImplP->SetOutputSizePixel(aSize);
pMoreBt->Hide();
aTextStyleCB.Check();
pAntiImplP->SetText(sLoadTemplate);
}
else
{
MORE_BTN(SetClickHdl(LINK(this, SfxNewFileDialog_Impl, Expand)));
if((nFlags & SFXWB_PREVIEW) == SFXWB_PREVIEW)
{
MORE_BTN(AddWindow(&aPreviewBtn));
MORE_BTN(AddWindow(&aPreviewWin));
aPreviewBtn.SetClickHdl(LINK(this, SfxNewFileDialog_Impl, PreviewClick));
aTemplateLb.SetSelectHdl(LINK(this, SfxNewFileDialog_Impl, TemplateSelect));
}
else
{
aPreviewBtn.Hide();
aPreviewWin.Hide();
nMoveOffset = (short)pAntiImplP->LogicToPixel(
Size(nMoveOffset, nMoveOffset), MAP_APPFONT).Width();
nExpandSize = (short)pAntiImplP->LogicToPixel(
Size(nExpandSize, nExpandSize), MAP_APPFONT).Width();
AdjustPosSize_Impl(&aTitleFt, nMoveOffset, 0);
AdjustPosSize_Impl(&aTitleEd, nMoveOffset, nExpandSize);
AdjustPosSize_Impl(&aThemaFt, nMoveOffset, 0);
AdjustPosSize_Impl(&aThemaEd, nMoveOffset, nExpandSize);
AdjustPosSize_Impl(&aKeywordsFt, nMoveOffset, 0);
AdjustPosSize_Impl(&aKeywordsEd, nMoveOffset, nExpandSize);
AdjustPosSize_Impl(&aDescFt , nMoveOffset, 0);
AdjustPosSize_Impl(&aDescEd , nMoveOffset, nExpandSize);
AdjustPosSize_Impl(&aDocinfoGb, nMoveOffset, nExpandSize);
}
}
String &rExtra = pAntiImplP->GetExtraData();
sal_uInt16 nTokCount = rExtra.GetTokenCount( '|' );
if( nTokCount > 0 && nFlags )
MORE_BTN(SetState( rExtra.GetToken( 0, '|' ) == 'Y' ));
if( nTokCount > 1 && nFlags )
aPreviewBtn.Check( rExtra.GetToken( 1 ,'|' ) == 'Y' );
aTemplateLb.SetDoubleClickHdl(LINK(this, SfxNewFileDialog_Impl, DoubleClick));
// update the template configuration if necessary
{
WaitObject aWaitCursor( pAntiImplP->GetParent() );
aTemplates.Update( sal_True /* be smart */ );
}
// fill the list boxes
const sal_uInt16 nCount = aTemplates.GetRegionCount();
if (nCount)
{
for(sal_uInt16 i = 0; i < nCount; ++i)
aRegionLb.InsertEntry(aTemplates.GetFullRegionName(i));
aRegionLb.SetSelectHdl(LINK(this, SfxNewFileDialog_Impl, RegionSelect));
}
aPrevTimer.SetTimeout( 500 );
aPrevTimer.SetTimeoutHdl( LINK( this, SfxNewFileDialog_Impl, Update));
// else
// aRegionLb.InsertEntry(String(SfxResId(STR_STANDARD)));
aRegionLb.SelectEntryPos(0);
RegionSelect(&aRegionLb);
}
//-------------------------------------------------------------------------
SfxNewFileDialog_Impl::~SfxNewFileDialog_Impl()
{
String &rExtra = pAntiImpl->GetExtraData();
rExtra = MORE_BTN(GetState()) ? 'Y' : 'N';
rExtra += '|';
rExtra += aPreviewBtn.IsChecked() ? 'Y' : 'N';
delete pMoreBt;
}
//-------------------------------------------------------------------------
SfxNewFileDialog::SfxNewFileDialog(Window *pParent, sal_uInt16 nFlags)
: SfxModalDialog( pParent, SfxResId( DLG_NEW_FILE ) )
{
pImpl = new SfxNewFileDialog_Impl( this, nFlags );
}
//-------------------------------------------------------------------------
SfxNewFileDialog::~SfxNewFileDialog()
{
delete pImpl;
}
//-------------------------------------------------------------------------
sal_Bool SfxNewFileDialog::IsTemplate() const
{
return pImpl->IsTemplate();
}
//-------------------------------------------------------------------------
String SfxNewFileDialog::GetTemplateRegion() const
{
return pImpl->GetTemplateRegion();
}
//-------------------------------------------------------------------------
String SfxNewFileDialog::GetTemplateName() const
{
return pImpl->GetTemplateName();
}
//-------------------------------------------------------------------------
String SfxNewFileDialog::GetTemplateFileName() const
{
return pImpl->GetTemplateFileName();
}
//-------------------------------------------------------------------------
sal_uInt16 SfxNewFileDialog::GetTemplateFlags()const
{
return pImpl->GetTemplateFlags();
}
//-------------------------------------------------------------------------
void SfxNewFileDialog::SetTemplateFlags(sal_uInt16 nSet)
{
pImpl->SetTemplateFlags(nSet);
}