office-gobmx/cui/source/tabpages/tphatch.cxx
Noel Grandin 0c5f72b06f com::sun::star->css in cui
Change-Id: I70ee15db7c8de507fa21a9dfc705f518f223a70b
Reviewed-on: https://gerrit.libreoffice.org/17385
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
2015-07-29 06:45:22 +00:00

868 lines
28 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 <tools/urlobj.hxx>
#include <vcl/msgbox.hxx>
#include <vcl/settings.hxx>
#include <unotools/pathoptions.hxx>
#include <sfx2/app.hxx>
#include <sfx2/dialoghelper.hxx>
#include <sfx2/filedlghelper.hxx>
#include <sfx2/module.hxx>
#include "com/sun/star/ui/dialogs/TemplateDescription.hpp"
#include <cuires.hrc>
#include "helpid.hrc"
#include "svx/xattr.hxx"
#include <svx/xpool.hxx>
#include <svx/xtable.hxx>
#include "svx/drawitem.hxx"
#include "cuitabarea.hxx"
#include "defdlgname.hxx"
#include "dlgname.hxx"
#include <svx/svxdlg.hxx>
#include <dialmgr.hxx>
#include "svx/dlgutil.hxx"
#include <svx/dialmgr.hxx>
#include "paragrph.hrc"
#include <svx/dialogs.hrc>
#include <boost/scoped_ptr.hpp>
using namespace com::sun::star;
SvxHatchTabPage::SvxHatchTabPage
(
vcl::Window* pParent,
const SfxItemSet& rInAttrs
) :
SvxTabPage ( pParent, "HatchPage", "cui/ui/hatchpage.ui", rInAttrs ),
rOutAttrs ( rInAttrs ),
pnHatchingListState ( 0 ),
pnColorListState ( 0 ),
pPageType ( 0 ),
nDlgType ( 0 ),
pPos ( 0 ),
pbAreaTP ( 0 ),
aXFStyleItem ( drawing::FillStyle_HATCH ),
aXHatchItem ( OUString(), XHatch() ),
aXFillAttr ( rInAttrs.GetPool() ),
rXFSet ( aXFillAttr.GetItemSet() )
{
get(m_pMtrDistance, "distancemtr");
get(m_pMtrAngle, "anglemtr");
get(m_pCtlAngle, "anglectl");
m_pCtlAngle->SetCS(CS_ANGLE);
get(m_pLbLineType, "linetypelb");
get(m_pLbLineColor, "linecolorlb");
get(m_pLbHatchings, "hatchingslb");
Size aSize = getDrawListBoxOptimalSize(this);
m_pLbHatchings->set_width_request(aSize.Width());
m_pLbHatchings->set_height_request(aSize.Height());
get(m_pCtlPreview, "previewctl");
aSize = getDrawPreviewOptimalSize(this);
m_pCtlPreview->set_width_request(aSize.Width());
m_pCtlPreview->set_height_request(aSize.Height());
get(m_pBtnAdd, "add");
get(m_pBtnModify, "modify");
get(m_pBtnDelete, "delete");
get(m_pBtnLoad, "load");
get(m_pBtnSave, "save");
// this page needs ExchangeSupport
SetExchangeSupport();
// adjust metric
FieldUnit eFUnit = GetModuleFieldUnit( rInAttrs );
switch ( eFUnit )
{
case FUNIT_M:
case FUNIT_KM:
eFUnit = FUNIT_MM;
break;
default: ;//prevent warning
}
SetFieldUnit( *m_pMtrDistance, eFUnit );
// determine PoolUnit
SfxItemPool* pPool = rOutAttrs.GetPool();
DBG_ASSERT( pPool, "Wo ist der Pool?" );
ePoolUnit = pPool->GetMetric( SID_ATTR_FILL_HATCH );
// setting the output device
rXFSet.Put( aXFStyleItem );
rXFSet.Put( aXHatchItem );
m_pCtlPreview->SetAttributes( aXFillAttr.GetItemSet() );
m_pLbHatchings->SetSelectHdl( LINK( this, SvxHatchTabPage, ChangeHatchHdl_Impl ) );
Link<> aLink = LINK( this, SvxHatchTabPage, ModifiedHdl_Impl );
m_pMtrDistance->SetModifyHdl( aLink );
m_pMtrAngle->SetModifyHdl( aLink );
m_pLbLineType->SetSelectHdl( aLink );
m_pLbLineColor->SetSelectHdl( aLink );
m_pBtnAdd->SetClickHdl( LINK( this, SvxHatchTabPage, ClickAddHdl_Impl ) );
m_pBtnModify->SetClickHdl(
LINK( this, SvxHatchTabPage, ClickModifyHdl_Impl ) );
m_pBtnDelete->SetClickHdl(
LINK( this, SvxHatchTabPage, ClickDeleteHdl_Impl ) );
m_pBtnLoad->SetClickHdl( LINK( this, SvxHatchTabPage, ClickLoadHdl_Impl ) );
m_pBtnSave->SetClickHdl( LINK( this, SvxHatchTabPage, ClickSaveHdl_Impl ) );
m_pCtlPreview->SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
setPreviewsToSamePlace(pParent, this);
}
SvxHatchTabPage::~SvxHatchTabPage()
{
disposeOnce();
}
void SvxHatchTabPage::dispose()
{
m_pMtrDistance.clear();
m_pMtrAngle.clear();
m_pCtlAngle.clear();
m_pLbLineType.clear();
m_pLbLineColor.clear();
m_pLbHatchings.clear();
m_pCtlPreview.clear();
m_pBtnAdd.clear();
m_pBtnModify.clear();
m_pBtnDelete.clear();
m_pBtnLoad.clear();
m_pBtnSave.clear();
SvxTabPage::dispose();
}
void SvxHatchTabPage::Construct()
{
m_pLbLineColor->Fill( pColorList );
m_pLbHatchings->Fill( pHatchingList );
}
void SvxHatchTabPage::ActivatePage( const SfxItemSet& rSet )
{
sal_Int32 nPos;
sal_Int32 nCount;
if( nDlgType == 0 ) // area dialog
{
*pbAreaTP = false;
if( pColorList.is() )
{
// ColorList
if( *pnColorListState & ChangeType::CHANGED ||
*pnColorListState & ChangeType::MODIFIED )
{
if( *pnColorListState & ChangeType::CHANGED )
pColorList = static_cast<SvxAreaTabDialog*>( GetParentDialog() )->GetNewColorList();
// LbLineColor
nPos = m_pLbLineColor->GetSelectEntryPos();
m_pLbLineColor->Clear();
m_pLbLineColor->Fill( pColorList );
nCount = m_pLbLineColor->GetEntryCount();
if( nCount == 0 )
; // this case should not occur
else if( nCount <= nPos )
m_pLbLineColor->SelectEntryPos( 0 );
else
m_pLbLineColor->SelectEntryPos( nPos );
ModifiedHdl_Impl( this );
}
// determining (possibly cutting) the name
// and displaying it in the GroupBox
OUString aString( CUI_RES( RID_SVXSTR_TABLE ) );
aString += ": ";
INetURLObject aURL( pHatchingList->GetPath() );
aURL.Append( pHatchingList->GetName() );
DBG_ASSERT( aURL.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
if ( aURL.getBase().getLength() > 18 )
{
aString += aURL.getBase().copy( 0, 15 );
aString += "...";
}
else
aString += aURL.getBase();
if( *pPageType == PT_HATCH && *pPos != LISTBOX_ENTRY_NOTFOUND )
{
m_pLbHatchings->SelectEntryPos( *pPos );
}
// colors could have been deleted
ChangeHatchHdl_Impl( this );
*pPageType = PT_HATCH;
*pPos = LISTBOX_ENTRY_NOTFOUND;
}
}
rXFSet.Put( static_cast<const XFillColorItem&>( rSet.Get(XATTR_FILLCOLOR)) );
rXFSet.Put( static_cast<const XFillBackgroundItem&>(rSet.Get(XATTR_FILLBACKGROUND)) );
m_pCtlPreview->SetAttributes( aXFillAttr.GetItemSet() );
m_pCtlPreview->Invalidate();
}
SfxTabPage::sfxpg SvxHatchTabPage::DeactivatePage( SfxItemSet* _pSet )
{
if ( CheckChanges_Impl() == -1L )
return KEEP_PAGE;
if( _pSet )
FillItemSet( _pSet );
return LEAVE_PAGE;
}
long SvxHatchTabPage::CheckChanges_Impl()
{
if( m_pMtrDistance->IsValueChangedFromSaved() ||
m_pMtrAngle->IsValueChangedFromSaved() ||
m_pLbLineType->IsValueChangedFromSaved() ||
m_pLbLineColor->IsValueChangedFromSaved() ||
m_pLbHatchings->IsValueChangedFromSaved() )
{
ResMgr& rMgr = CUI_MGR();
Image aWarningBoxImage = WarningBox::GetStandardImage();
ScopedVclPtrInstance<SvxMessDialog> aMessDlg( GetParentDialog(),
SVX_RESSTR( RID_SVXSTR_HATCH ),
CUI_RESSTR( RID_SVXSTR_ASK_CHANGE_HATCH ),
&aWarningBoxImage );
DBG_ASSERT(aMessDlg, "Dialog creation failed!");
aMessDlg->SetButtonText( MESS_BTN_1,
OUString( ResId( RID_SVXSTR_CHANGE, rMgr ) ) );
aMessDlg->SetButtonText( MESS_BTN_2,
OUString( ResId( RID_SVXSTR_ADD, rMgr ) ) );
short nRet = aMessDlg->Execute();
switch( nRet )
{
case RET_BTN_1:
{
ClickModifyHdl_Impl( this );
}
break;
case RET_BTN_2:
{
ClickAddHdl_Impl( this );
}
break;
case RET_CANCEL:
break;
}
}
sal_Int32 nPos = m_pLbHatchings->GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
*pPos = nPos;
return 0L;
}
bool SvxHatchTabPage::FillItemSet( SfxItemSet* rSet )
{
if( nDlgType == 0 && !*pbAreaTP ) // area dialog
{
if( *pPageType == PT_HATCH )
{
// CheckChanges(); <-- duplicate inquiry ?
boost::scoped_ptr<XHatch> pXHatch;
OUString aString;
sal_Int32 nPos = m_pLbHatchings->GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
{
pXHatch.reset(new XHatch( pHatchingList->GetHatch( nPos )->GetHatch() ));
aString = m_pLbHatchings->GetSelectEntry();
}
// gradient has been (unidentifiedly) passed
else
{
pXHatch.reset(new XHatch( m_pLbLineColor->GetSelectEntryColor(),
(css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
GetCoreValue( *m_pMtrDistance, ePoolUnit ),
static_cast<long>(m_pMtrAngle->GetValue() * 10) ));
}
DBG_ASSERT( pXHatch, "XHatch konnte nicht erzeugt werden" );
rSet->Put( XFillStyleItem( drawing::FillStyle_HATCH ) );
rSet->Put( XFillHatchItem( aString, *pXHatch ) );
}
}
return true;
}
void SvxHatchTabPage::Reset( const SfxItemSet* rSet )
{
ChangeHatchHdl_Impl( this );
// determine button state
if( pHatchingList->Count() )
{
m_pBtnModify->Enable();
m_pBtnDelete->Enable();
m_pBtnSave->Enable();
}
else
{
m_pBtnModify->Disable();
m_pBtnDelete->Disable();
m_pBtnSave->Disable();
}
rXFSet.Put( static_cast<const XFillColorItem&>( rSet->Get(XATTR_FILLCOLOR)) );
rXFSet.Put( static_cast<const XFillBackgroundItem&>(rSet->Get(XATTR_FILLBACKGROUND)) );
m_pCtlPreview->SetAttributes( aXFillAttr.GetItemSet() );
m_pCtlPreview->Invalidate();
}
VclPtr<SfxTabPage> SvxHatchTabPage::Create( vcl::Window* pWindow,
const SfxItemSet* rSet )
{
return VclPtr<SvxHatchTabPage>::Create( pWindow, *rSet );
}
IMPL_LINK( SvxHatchTabPage, ModifiedHdl_Impl, void *, p )
{
if( p == m_pMtrAngle )
{
switch( m_pMtrAngle->GetValue() )
{
case 135: m_pCtlAngle->SetActualRP( RP_LT ); break;
case 90: m_pCtlAngle->SetActualRP( RP_MT ); break;
case 45: m_pCtlAngle->SetActualRP( RP_RT ); break;
case 180: m_pCtlAngle->SetActualRP( RP_LM ); break;
case 0: m_pCtlAngle->SetActualRP( RP_RM ); break;
case 225: m_pCtlAngle->SetActualRP( RP_LB ); break;
case 270: m_pCtlAngle->SetActualRP( RP_MB ); break;
case 315: m_pCtlAngle->SetActualRP( RP_RB ); break;
default: m_pCtlAngle->SetActualRP( RP_MM ); break;
}
}
XHatch aXHatch( m_pLbLineColor->GetSelectEntryColor(),
(css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
GetCoreValue( *m_pMtrDistance, ePoolUnit ),
static_cast<long>(m_pMtrAngle->GetValue() * 10) );
rXFSet.Put( XFillHatchItem( OUString(), aXHatch ) );
m_pCtlPreview->SetAttributes( aXFillAttr.GetItemSet() );
m_pCtlPreview->Invalidate();
return 0L;
}
IMPL_LINK_NOARG(SvxHatchTabPage, ChangeHatchHdl_Impl)
{
boost::scoped_ptr<XHatch> pHatch;
int nPos = m_pLbHatchings->GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
pHatch.reset(new XHatch( pHatchingList->GetHatch( nPos )->GetHatch() ));
else
{
const SfxPoolItem* pPoolItem = NULL;
if( SfxItemState::SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLSTYLE ), true, &pPoolItem ) )
{
if( ( drawing::FillStyle_HATCH == (drawing::FillStyle) static_cast<const XFillStyleItem*>( pPoolItem )->GetValue() ) &&
( SfxItemState::SET == rOutAttrs.GetItemState( GetWhich( XATTR_FILLHATCH ), true, &pPoolItem ) ) )
{
pHatch.reset(new XHatch( static_cast<const XFillHatchItem*>( pPoolItem )->GetHatchValue() ));
}
}
if( !pHatch )
{
m_pLbHatchings->SelectEntryPos( 0 );
nPos = m_pLbHatchings->GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
pHatch.reset(new XHatch( pHatchingList->GetHatch( nPos )->GetHatch() ));
}
}
if( pHatch )
{
m_pLbLineType->SelectEntryPos(
sal::static_int_cast< sal_Int32 >( pHatch->GetHatchStyle() ) );
// if the entry is not in the listbox
// the color is added temporarily
m_pLbLineColor->SetNoSelection();
m_pLbLineColor->SelectEntry( pHatch->GetColor() );
if( m_pLbLineColor->GetSelectEntryCount() == 0 )
{
m_pLbLineColor->InsertEntry( pHatch->GetColor(), OUString() );
m_pLbLineColor->SelectEntry( pHatch->GetColor() );
}
SetMetricValue( *m_pMtrDistance, pHatch->GetDistance(), ePoolUnit );
m_pMtrAngle->SetValue( pHatch->GetAngle() / 10 );
switch( m_pMtrAngle->GetValue() )
{
case 135: m_pCtlAngle->SetActualRP( RP_LT ); break;
case 90: m_pCtlAngle->SetActualRP( RP_MT ); break;
case 45: m_pCtlAngle->SetActualRP( RP_RT ); break;
case 180: m_pCtlAngle->SetActualRP( RP_LM ); break;
case 0: m_pCtlAngle->SetActualRP( RP_RM ); break;
case 225: m_pCtlAngle->SetActualRP( RP_LB ); break;
case 270: m_pCtlAngle->SetActualRP( RP_MB ); break;
case 315: m_pCtlAngle->SetActualRP( RP_RB ); break;
default: m_pCtlAngle->SetActualRP( RP_MM ); break;
}
// fill ItemSet and pass it on to m_pCtlPreview
rXFSet.Put( XFillHatchItem( OUString(), *pHatch ) );
m_pCtlPreview->SetAttributes( aXFillAttr.GetItemSet() );
m_pCtlPreview->Invalidate();
pHatch.reset();
}
m_pMtrDistance->SaveValue();
m_pMtrAngle->SaveValue();
m_pLbLineType->SaveValue();
m_pLbLineColor->SaveValue();
m_pLbHatchings->SaveValue();
return 0L;
}
IMPL_LINK_NOARG(SvxHatchTabPage, ClickAddHdl_Impl)
{
OUString aNewName( SVX_RES( RID_SVXSTR_HATCH ) );
OUString aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) );
OUString aName;
long nCount = pHatchingList->Count();
long j = 1;
bool bDifferent = false;
while( !bDifferent )
{
aName = aNewName;
aName += " ";
aName += OUString::number( j++ );
bDifferent = true;
for( long i = 0; i < nCount && bDifferent; i++ )
if( aName == pHatchingList->GetHatch( i )->GetName() )
bDifferent = false;
}
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
DBG_ASSERT(pFact, "Dialog creation failed!");
boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
DBG_ASSERT(pDlg, "Dialog creation failed!");
ScopedVclPtr<MessageDialog> pWarnBox;
sal_uInt16 nError = 1;
while( pDlg->Execute() == RET_OK )
{
pDlg->GetName( aName );
bDifferent = true;
for( long i = 0; i < nCount && bDifferent; i++ )
if( aName == pHatchingList->GetHatch( i )->GetName() )
bDifferent = false;
if( bDifferent ) {
nError = 0;
break;
}
if( !pWarnBox )
{
pWarnBox.reset(VclPtr<MessageDialog>::Create( GetParentDialog()
,"DuplicateNameDialog"
,"cui/ui/queryduplicatedialog.ui"));
}
if( pWarnBox->Execute() != RET_OK )
break;
}
pDlg.reset();
pWarnBox.reset();
if( !nError )
{
XHatch aXHatch( m_pLbLineColor->GetSelectEntryColor(),
(css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
GetCoreValue( *m_pMtrDistance, ePoolUnit ),
static_cast<long>(m_pMtrAngle->GetValue() * 10) );
XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName );
pHatchingList->Insert( pEntry, nCount );
m_pLbHatchings->Append( *pEntry, pHatchingList->GetUiBitmap( nCount ) );
m_pLbHatchings->SelectEntryPos( m_pLbHatchings->GetEntryCount() - 1 );
#ifdef WNT
// hack: #31355# W.P.
Rectangle aRect( m_pLbHatchings->GetPosPixel(), m_pLbHatchings->GetSizePixel() );
if( sal_True ) { // ??? overlapped with pDlg
// and srolling
Invalidate( aRect );
}
#endif
*pnHatchingListState |= ChangeType::MODIFIED;
ChangeHatchHdl_Impl( this );
}
// determine button state
if( pHatchingList->Count() )
{
m_pBtnModify->Enable();
m_pBtnDelete->Enable();
m_pBtnSave->Enable();
}
return 0L;
}
IMPL_LINK_NOARG(SvxHatchTabPage, ClickModifyHdl_Impl)
{
sal_Int32 nPos = m_pLbHatchings->GetSelectEntryPos();
if ( nPos != LISTBOX_ENTRY_NOTFOUND )
{
OUString aDesc( CUI_RES( RID_SVXSTR_DESC_HATCH ) );
OUString aName( pHatchingList->GetHatch( nPos )->GetName() );
OUString aOldName = aName;
SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
DBG_ASSERT(pFact, "Dialog creation failed!");
boost::scoped_ptr<AbstractSvxNameDialog> pDlg(pFact->CreateSvxNameDialog( GetParentDialog(), aName, aDesc ));
DBG_ASSERT(pDlg, "Dialog creation failed!");
long nCount = pHatchingList->Count();
bool bLoop = true;
while( bLoop && pDlg->Execute() == RET_OK )
{
pDlg->GetName( aName );
bool bDifferent = true;
for( long i = 0; i < nCount && bDifferent; i++ )
{
if( aName == pHatchingList->GetHatch( i )->GetName() &&
aName != aOldName )
bDifferent = false;
}
if( bDifferent )
{
bLoop = false;
XHatch aXHatch( m_pLbLineColor->GetSelectEntryColor(),
(css::drawing::HatchStyle) m_pLbLineType->GetSelectEntryPos(),
GetCoreValue( *m_pMtrDistance, ePoolUnit ),
static_cast<long>(m_pMtrAngle->GetValue() * 10) );
XHatchEntry* pEntry = new XHatchEntry( aXHatch, aName );
delete pHatchingList->Replace( pEntry, nPos );
m_pLbHatchings->Modify( *pEntry, nPos, pHatchingList->GetUiBitmap( nPos ) );
m_pLbHatchings->SelectEntryPos( nPos );
// save values for changes recognition (-> method)
m_pMtrDistance->SaveValue();
m_pMtrAngle->SaveValue();
m_pLbLineType->SaveValue();
m_pLbLineColor->SaveValue();
m_pLbHatchings->SaveValue();
*pnHatchingListState |= ChangeType::MODIFIED;
}
else
{
ScopedVclPtrInstance<MessageDialog> aBox( GetParentDialog()
,"DuplicateNameDialog"
,"cui/ui/queryduplicatedialog.ui" );
aBox->Execute();
}
}
}
return 0L;
}
IMPL_LINK_NOARG(SvxHatchTabPage, ClickDeleteHdl_Impl)
{
sal_Int32 nPos = m_pLbHatchings->GetSelectEntryPos();
if( nPos != LISTBOX_ENTRY_NOTFOUND )
{
ScopedVclPtrInstance< MessageDialog > aQueryBox( GetParentDialog(),"AskDelHatchDialog","cui/ui/querydeletehatchdialog.ui");
if( aQueryBox->Execute() == RET_YES )
{
delete pHatchingList->Remove( nPos );
m_pLbHatchings->RemoveEntry( nPos );
m_pLbHatchings->SelectEntryPos( 0 );
m_pCtlPreview->Invalidate();
ChangeHatchHdl_Impl( this );
*pnHatchingListState |= ChangeType::MODIFIED;
}
}
// determine button state
if( !pHatchingList->Count() )
{
m_pBtnModify->Disable();
m_pBtnDelete->Disable();
m_pBtnSave->Disable();
}
return 0L;
}
IMPL_LINK_NOARG(SvxHatchTabPage, ClickLoadHdl_Impl)
{
ResMgr& rMgr = CUI_MGR();
sal_uInt16 nReturn = RET_YES;
if ( *pnHatchingListState & ChangeType::MODIFIED )
{
nReturn = ScopedVclPtrInstance<MessageDialog>::Create( GetParentDialog()
,"AskSaveList"
,"cui/ui/querysavelistdialog.ui")->Execute();
if ( nReturn == RET_YES )
pHatchingList->Save();
}
if ( nReturn != RET_CANCEL )
{
::sfx2::FileDialogHelper aDlg( css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE, 0 );
OUString aStrFilterType( "*.soh" );
aDlg.AddFilter( aStrFilterType, aStrFilterType );
OUString aPalettePath(SvtPathOptions().GetPalettePath());
OUString aLastDir;
sal_Int32 nIndex = 0;
do
{
aLastDir = aPalettePath.getToken(0, ';', nIndex);
}
while (nIndex >= 0);
INetURLObject aFile(aLastDir);
aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
if( aDlg.Execute() == ERRCODE_NONE )
{
INetURLObject aURL( aDlg.GetPath() );
INetURLObject aPathURL( aURL );
aPathURL.removeSegment();
aPathURL.removeFinalSlash();
XHatchListRef pHatchList = XPropertyList::AsHatchList(
XPropertyList::CreatePropertyList(
XHATCH_LIST, aPathURL.GetMainURL( INetURLObject::NO_DECODE ), "" ));
pHatchList->SetName( aURL.getName() );
if( pHatchList->Load() )
{
pHatchingList = pHatchList;
static_cast<SvxAreaTabDialog*>( GetParentDialog() )->SetNewHatchingList( pHatchingList );
m_pLbHatchings->Clear();
m_pLbHatchings->Fill( pHatchingList );
Reset( &rOutAttrs );
pHatchingList->SetName( aURL.getName() );
// determining (and possibly cutting) the name
// and displaying it in the GroupBox
OUString aString( ResId( RID_SVXSTR_TABLE, rMgr ) );
aString += ": ";
if ( aURL.getBase().getLength() > 18 )
{
aString += aURL.getBase().copy( 0, 15 );
aString += "...";
}
else
aString += aURL.getBase();
*pnHatchingListState |= ChangeType::CHANGED;
*pnHatchingListState &= ~ChangeType::MODIFIED;
}
else
ScopedVclPtrInstance<MessageDialog>::Create( GetParentDialog()
,"NoLoadedFileDialog"
,"cui/ui/querynoloadedfiledialog.ui")->Execute();
}
}
// determine button state
if ( pHatchingList->Count() )
{
m_pBtnModify->Enable();
m_pBtnDelete->Enable();
m_pBtnSave->Enable();
}
else
{
m_pBtnModify->Disable();
m_pBtnDelete->Disable();
m_pBtnSave->Disable();
}
return 0L;
}
IMPL_LINK_NOARG(SvxHatchTabPage, ClickSaveHdl_Impl)
{
::sfx2::FileDialogHelper aDlg( css::ui::dialogs::TemplateDescription::FILESAVE_SIMPLE, 0 );
OUString aStrFilterType( "*.soh" );
aDlg.AddFilter( aStrFilterType, aStrFilterType );
OUString aPalettePath(SvtPathOptions().GetPalettePath());
OUString aLastDir;
sal_Int32 nIndex = 0;
do
{
aLastDir = aPalettePath.getToken(0, ';', nIndex);
}
while (nIndex >= 0);
INetURLObject aFile(aLastDir);
DBG_ASSERT( aFile.GetProtocol() != INetProtocol::NotValid, "invalid URL" );
if( !pHatchingList->GetName().isEmpty() )
{
aFile.Append( pHatchingList->GetName() );
if( aFile.getExtension().isEmpty() )
aFile.SetExtension( OUString("soh") );
}
aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
if ( aDlg.Execute() == ERRCODE_NONE )
{
INetURLObject aURL( aDlg.GetPath() );
INetURLObject aPathURL( aURL );
aPathURL.removeSegment();
aPathURL.removeFinalSlash();
pHatchingList->SetName( aURL.getName() );
pHatchingList->SetPath( aPathURL.GetMainURL( INetURLObject::NO_DECODE ) );
if( pHatchingList->Save() )
{
// determining (and possibly cutting) the name
// and displaying it in the GroupBox
OUString aString( CUI_RES( RID_SVXSTR_TABLE ) );
aString += ": ";
if ( aURL.getBase().getLength() > 18 )
{
aString += aURL.getBase().copy( 0, 15 );
aString += "...";
}
else
aString += aURL.getBase();
*pnHatchingListState |= ChangeType::SAVED;
*pnHatchingListState &= ~ChangeType::MODIFIED;
}
else
{
ScopedVclPtrInstance<MessageDialog>::Create( GetParentDialog()
,"NoSaveFileDialog"
,"cui/ui/querynosavefiledialog.ui")->Execute();
}
}
return 0L;
}
void SvxHatchTabPage::PointChanged( vcl::Window* pWindow, RECT_POINT eRcPt )
{
if( pWindow == m_pCtlAngle )
{
switch( eRcPt )
{
case RP_LT: m_pMtrAngle->SetValue( 135 ); break;
case RP_MT: m_pMtrAngle->SetValue( 90 ); break;
case RP_RT: m_pMtrAngle->SetValue( 45 ); break;
case RP_LM: m_pMtrAngle->SetValue( 180 ); break;
case RP_RM: m_pMtrAngle->SetValue( 0 ); break;
case RP_LB: m_pMtrAngle->SetValue( 225 ); break;
case RP_MB: m_pMtrAngle->SetValue( 270 ); break;
case RP_RB: m_pMtrAngle->SetValue( 315 ); break;
case RP_MM: break;
}
ModifiedHdl_Impl( this );
}
}
void SvxHatchTabPage::DataChanged( const DataChangedEvent& rDCEvt )
{
if ( ( rDCEvt.GetType() == DataChangedEventType::SETTINGS ) && ( rDCEvt.GetFlags() & AllSettingsFlags::STYLE ) )
m_pCtlPreview->SetDrawMode( GetSettings().GetStyleSettings().GetHighContrastMode() ? OUTPUT_DRAWMODE_CONTRAST : OUTPUT_DRAWMODE_COLOR );
SvxTabPage::DataChanged( rDCEvt );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */