blob: 5eb6eb19adb215b77c9ff1bd14ff83ef14fb0984 [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_basctl.hxx"
//svdraw.hxx
//#define _SVDRAW_HXX ***
#define _SDR_NOITEMS
#define _SDR_NOTOUCH
#define _SDR_NOTRANSFORM
#define _SDR_NOOBJECTS
//#define _SDR_NOVIEWS ***
#define _SDR_NOVIEWMARKER
#define _SDR_NODRAGMETHODS
//#define _SDR_NOUNDO ***
#define _SDR_NOXOUTDEV
#include <ide_pch.hxx>
#include <vector>
#include <basidesh.hrc>
#include <baside3.hxx>
#include <localizationmgr.hxx>
#include <accessibledialogwindow.hxx>
#include <dlged.hxx>
#include <dlgedmod.hxx>
#include <dlgedview.hxx>
#include <dlgeddef.hxx>
#include <propbrw.hxx>
#include <basobj.hxx>
#include <iderdll.hxx>
#include <basidesh.hxx>
#include <idetemp.hxx>
#include <helpid.hrc>
#include <bastype2.hxx>
#include <svx/svdview.hxx>
#include <editeng/unolingu.hxx>
#include <tools/diagnose_ex.h>
#include <tools/urlobj.hxx>
#include <comphelper/processfactory.hxx>
#include <com/sun/star/container/XNameContainer.hpp>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <xmlscript/xmldlg_imexp.hxx>
#ifndef _COM_SUN_STAR_SCRIPT_XLIBRYARYCONTAINER2_HPP_
#include <com/sun/star/script/XLibraryContainer2.hpp>
#endif
#include <svtools/ehdl.hxx>
#include <svtools/langtab.hxx>
#include <com/sun/star/ui/dialogs/XFilePicker.hpp>
#include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
#include <com/sun/star/ui/dialogs/XFilterManager.hpp>
#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
#include <com/sun/star/ucb/XSimpleFileAccess.hpp>
#include <com/sun/star/resource/XStringResourceResolver.hpp>
#include <com/sun/star/resource/StringResourceWithLocation.hpp>
#include <com/sun/star/task/XInteractionHandler.hpp>
using namespace comphelper;
using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::ucb;
using namespace ::com::sun::star::io;
using namespace ::com::sun::star::resource;
using namespace ::com::sun::star::ui::dialogs;
#if defined(UNX)
#define FILTERMASK_ALL "*"
#elif defined(PM2)
#define FILTERMASK_ALL ""
#else
#define FILTERMASK_ALL "*.*"
#endif
DBG_NAME( DialogWindow )
TYPEINIT1( DialogWindow, IDEBaseWindow );
DialogWindow::DialogWindow( Window* pParent, const ScriptDocument& rDocument, String aLibName, String aName,
const com::sun::star::uno::Reference< com::sun::star::container::XNameContainer >& xDialogModel )
:IDEBaseWindow( pParent, rDocument, aLibName, aName )
,pUndoMgr(NULL)
{
InitSettings( sal_True, sal_True, sal_True );
pEditor = new DlgEditor();
pEditor->SetWindow( this );
pEditor->SetDialog( xDialogModel );
// Undo einrichten
pUndoMgr = new SfxUndoManager;
Link aDummyLink;
aOldNotifyUndoActionHdl = pEditor->GetModel()->GetNotifyUndoActionHdl();
pEditor->GetModel()->SetNotifyUndoActionHdl(
LINK(this, DialogWindow, NotifyUndoActionHdl));
SetHelpId( HID_BASICIDE_DIALOGWINDOW );
// set readonly mode for readonly libraries
::rtl::OUString aOULibName( aLibName );
Reference< script::XLibraryContainer2 > xDlgLibContainer( GetDocument().getLibraryContainer( E_DIALOGS ), UNO_QUERY );
if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aOULibName ) && xDlgLibContainer->isLibraryReadOnly( aOULibName ) )
SetReadOnly( sal_True );
if ( rDocument.isDocument() && rDocument.isReadOnly() )
SetReadOnly( sal_True );
}
DialogWindow::~DialogWindow()
{
delete pEditor;
delete pUndoMgr;
}
void DialogWindow::LoseFocus()
{
if ( IsModified() )
StoreData();
Window::LoseFocus();
}
void DialogWindow::Paint( const Rectangle& rRect )
{
pEditor->Paint( rRect );
}
void DialogWindow::Resize()
{
if ( GetHScrollBar() && GetVScrollBar() ) {
pEditor->SetScrollBars( GetHScrollBar(), GetVScrollBar() );
}
}
void DialogWindow::MouseButtonDown( const MouseEvent& rMEvt )
{
pEditor->MouseButtonDown( rMEvt );
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_SHOW_PROPERTYBROWSER );
}
void DialogWindow::MouseButtonUp( const MouseEvent& rMEvt )
{
pEditor->MouseButtonUp( rMEvt );
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if( (pEditor->GetMode() == DLGED_INSERT) && !pEditor->IsCreateOK() )
{
pEditor->SetMode( DLGED_SELECT );
if ( pBindings )
pBindings->Invalidate( SID_CHOOSE_CONTROLS );
}
if ( pBindings )
{
pBindings->Invalidate( SID_SHOW_PROPERTYBROWSER );
pBindings->Invalidate( SID_DOC_MODIFIED );
pBindings->Invalidate( SID_SAVEDOC );
pBindings->Invalidate( SID_COPY );
pBindings->Invalidate( SID_CUT );
}
}
void DialogWindow::MouseMove( const MouseEvent& rMEvt )
{
pEditor->MouseMove( rMEvt );
}
void DialogWindow::KeyInput( const KeyEvent& rKEvt )
{
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if( rKEvt.GetKeyCode() == KEY_BACKSPACE )
{
BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL;
if( pDispatcher )
{
pDispatcher->Execute( SID_BACKSPACE );
}
}
else
{
if( pBindings && rKEvt.GetKeyCode() == KEY_TAB )
pBindings->Invalidate( SID_SHOW_PROPERTYBROWSER );
if( !pEditor->KeyInput( rKEvt ) )
{
if( !SfxViewShell::Current()->KeyInput( rKEvt ) )
Window::KeyInput( rKEvt );
}
}
// may be KEY_TAB, KEY_BACKSPACE, KEY_ESCAPE
if( pBindings )
{
pBindings->Invalidate( SID_COPY );
pBindings->Invalidate( SID_CUT );
}
}
void DialogWindow::Command( const CommandEvent& rCEvt )
{
if ( ( rCEvt.GetCommand() == COMMAND_WHEEL ) ||
( rCEvt.GetCommand() == COMMAND_STARTAUTOSCROLL ) ||
( rCEvt.GetCommand() == COMMAND_AUTOSCROLL ) )
{
HandleScrollCommand( rCEvt, GetHScrollBar(), GetVScrollBar() );
}
else if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
{
BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL;
if ( pDispatcher )
{
SdrView* pView = GetView();
if( !rCEvt.IsMouseEvent() && pView->AreObjectsMarked() )
{
Rectangle aMarkedRect( pView->GetMarkedRect() );
Point MarkedCenter( aMarkedRect.Center() );
Point PosPixel( LogicToPixel( MarkedCenter ) );
pDispatcher->ExecutePopup( IDEResId(RID_POPUP_DLGED), this, &PosPixel );
}
else
{
pDispatcher->ExecutePopup( IDEResId(RID_POPUP_DLGED) );
}
}
}
else
IDEBaseWindow::Command( rCEvt );
}
IMPL_LINK( DialogWindow, NotifyUndoActionHdl, SfxUndoAction *, pUndoAction )
{
// #120515# pUndoAction needs to be deleted, this hand over is an ownership
// change. As long as it does not get added to the undo manager, it needs at
// least to be deleted.
delete pUndoAction;
// not working yet for unocontrols
/*
if (pUndoAction)
{
pUndoMgr->AddUndoAction( pUndoAction );
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_UNDO );
}
*/
return 0;
}
void __EXPORT DialogWindow::DoInit()
{
GetHScrollBar()->Show();
GetVScrollBar()->Show();
pEditor->SetScrollBars( GetHScrollBar(), GetVScrollBar() );
}
void __EXPORT DialogWindow::DoScroll( ScrollBar* pCurScrollBar )
{
pEditor->DoScroll( pCurScrollBar );
}
void __EXPORT DialogWindow::GetState( SfxItemSet& rSet )
{
SfxWhichIter aIter(rSet);
for ( sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich() )
{
switch ( nWh )
{
case SID_PASTE:
{
if ( !IsPasteAllowed() )
rSet.DisableItem( nWh );
if ( IsReadOnly() )
rSet.DisableItem( nWh );
}
break;
case SID_COPY:
{
// any object selected?
if ( !pEditor->GetView()->AreObjectsMarked() )
rSet.DisableItem( nWh );
}
break;
case SID_CUT:
case SID_DELETE:
case SID_BACKSPACE:
{
// any object selected?
if ( !pEditor->GetView()->AreObjectsMarked() )
rSet.DisableItem( nWh );
if ( IsReadOnly() )
rSet.DisableItem( nWh );
}
break;
case SID_REDO:
{
if ( !pUndoMgr->GetUndoActionCount() )
rSet.DisableItem( nWh );
}
break;
// Nur Dialogfenster:
case SID_DIALOG_TESTMODE:
{
// ist die IDE noch aktiv?
if( IDE_DLL()->GetShell()->GetFrame() )
{
rSet.Put( SfxBoolItem( SID_DIALOG_TESTMODE,
(pEditor->GetMode() == DLGED_TEST) ? sal_True : sal_False) );
}
else
rSet.Put( SfxBoolItem( SID_DIALOG_TESTMODE,sal_False ));
}
break;
case SID_CHOOSE_CONTROLS:
{
if ( IsReadOnly() )
{
rSet.DisableItem( nWh );
}
else
{
SfxAllEnumItem aItem( SID_CHOOSE_CONTROLS );
if ( GetEditor()->GetMode() == DLGED_SELECT )
aItem.SetValue( SVX_SNAP_SELECT );
else
{
sal_uInt16 nObj;
switch( pEditor->GetInsertObj() )
{
case OBJ_DLG_PUSHBUTTON: nObj = SVX_SNAP_PUSHBUTTON; break;
case OBJ_DLG_RADIOBUTTON: nObj = SVX_SNAP_RADIOBUTTON; break;
case OBJ_DLG_CHECKBOX: nObj = SVX_SNAP_CHECKBOX; break;
case OBJ_DLG_LISTBOX: nObj = SVX_SNAP_LISTBOX; break;
case OBJ_DLG_COMBOBOX: nObj = SVX_SNAP_COMBOBOX; break;
case OBJ_DLG_GROUPBOX: nObj = SVX_SNAP_GROUPBOX; break;
case OBJ_DLG_EDIT: nObj = SVX_SNAP_EDIT; break;
case OBJ_DLG_FIXEDTEXT: nObj = SVX_SNAP_FIXEDTEXT; break;
case OBJ_DLG_IMAGECONTROL: nObj = SVX_SNAP_IMAGECONTROL; break;
case OBJ_DLG_PROGRESSBAR: nObj = SVX_SNAP_PROGRESSBAR; break;
case OBJ_DLG_HSCROLLBAR: nObj = SVX_SNAP_HSCROLLBAR; break;
case OBJ_DLG_VSCROLLBAR: nObj = SVX_SNAP_VSCROLLBAR; break;
case OBJ_DLG_HFIXEDLINE: nObj = SVX_SNAP_HFIXEDLINE; break;
case OBJ_DLG_VFIXEDLINE: nObj = SVX_SNAP_VFIXEDLINE; break;
case OBJ_DLG_DATEFIELD: nObj = SVX_SNAP_DATEFIELD; break;
case OBJ_DLG_TIMEFIELD: nObj = SVX_SNAP_TIMEFIELD; break;
case OBJ_DLG_NUMERICFIELD: nObj = SVX_SNAP_NUMERICFIELD; break;
case OBJ_DLG_CURRENCYFIELD: nObj = SVX_SNAP_CURRENCYFIELD; break;
case OBJ_DLG_FORMATTEDFIELD: nObj = SVX_SNAP_FORMATTEDFIELD; break;
case OBJ_DLG_PATTERNFIELD: nObj = SVX_SNAP_PATTERNFIELD; break;
case OBJ_DLG_FILECONTROL: nObj = SVX_SNAP_FILECONTROL; break;
case OBJ_DLG_TREECONTROL: nObj = SVX_SNAP_TREECONTROL; break;
default: nObj = 0;
}
#ifdef DBG_UTIL
if( !nObj )
{
DBG_WARNING( "SID_CHOOSE_CONTROLS: Unbekannt!" );
}
#endif
aItem.SetValue( nObj );
}
rSet.Put( aItem );
}
}
break;
case SID_SHOW_PROPERTYBROWSER:
{
BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
if ( pViewFrame && !pViewFrame->HasChildWindow( SID_SHOW_PROPERTYBROWSER ) && !pEditor->GetView()->AreObjectsMarked() )
rSet.DisableItem( nWh );
if ( IsReadOnly() )
rSet.DisableItem( nWh );
}
break;
case SID_SELECTALL:
{
rSet.DisableItem( nWh );
}
break;
}
}
}
void __EXPORT DialogWindow::ExecuteCommand( SfxRequest& rReq )
{
switch ( rReq.GetSlot() )
{
case SID_CUT:
if ( !IsReadOnly() )
{
GetEditor()->Cut();
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_DOC_MODIFIED );
}
break;
case SID_DELETE:
if ( !IsReadOnly() )
{
GetEditor()->Delete();
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_DOC_MODIFIED );
}
break;
case SID_COPY:
GetEditor()->Copy();
break;
case SID_PASTE:
if ( !IsReadOnly() )
{
GetEditor()->Paste();
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_DOC_MODIFIED );
}
break;
case SID_CHOOSE_CONTROLS:
{
const SfxItemSet* pArgs = rReq.GetArgs();
DBG_ASSERT( pArgs, "Nix Args" );
const SfxAllEnumItem& rItem = (SfxAllEnumItem&)pArgs->Get( SID_CHOOSE_CONTROLS );
switch( rItem.GetValue() )
{
case SVX_SNAP_PUSHBUTTON:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_PUSHBUTTON );
}
break;
case SVX_SNAP_RADIOBUTTON:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_RADIOBUTTON );
}
break;
case SVX_SNAP_CHECKBOX:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_CHECKBOX);
}
break;
case SVX_SNAP_LISTBOX:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_LISTBOX );
}
break;
case SVX_SNAP_COMBOBOX:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_COMBOBOX );
}
break;
case SVX_SNAP_GROUPBOX:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_GROUPBOX );
}
break;
case SVX_SNAP_EDIT:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_EDIT );
}
break;
case SVX_SNAP_FIXEDTEXT:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_FIXEDTEXT );
}
break;
case SVX_SNAP_IMAGECONTROL:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_IMAGECONTROL );
}
break;
case SVX_SNAP_PROGRESSBAR:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_PROGRESSBAR );
}
break;
case SVX_SNAP_HSCROLLBAR:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_HSCROLLBAR );
}
break;
case SVX_SNAP_VSCROLLBAR:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_VSCROLLBAR );
}
break;
case SVX_SNAP_HFIXEDLINE:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_HFIXEDLINE );
}
break;
case SVX_SNAP_VFIXEDLINE:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_VFIXEDLINE );
}
break;
case SVX_SNAP_DATEFIELD:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_DATEFIELD );
}
break;
case SVX_SNAP_TIMEFIELD:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_TIMEFIELD );
}
break;
case SVX_SNAP_NUMERICFIELD:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_NUMERICFIELD );
}
break;
case SVX_SNAP_CURRENCYFIELD:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_CURRENCYFIELD );
}
break;
case SVX_SNAP_FORMATTEDFIELD:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_FORMATTEDFIELD );
}
break;
case SVX_SNAP_PATTERNFIELD:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_PATTERNFIELD );
}
break;
case SVX_SNAP_FILECONTROL:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_FILECONTROL );
}
break;
case SVX_SNAP_TREECONTROL:
{
GetEditor()->SetMode( DLGED_INSERT );
GetEditor()->SetInsertObj( OBJ_DLG_TREECONTROL );
}
break;
case SVX_SNAP_SELECT:
{
GetEditor()->SetMode( DLGED_SELECT );
}
break;
}
if ( rReq.GetModifier() & KEY_MOD1 )
{
if ( GetEditor()->GetMode() == DLGED_INSERT )
GetEditor()->CreateDefaultObject();
}
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_DOC_MODIFIED );
}
break;
case SID_DIALOG_TESTMODE:
{
DlgEdMode eOldMode = GetEditor()->GetMode();
GetEditor()->SetMode( DLGED_TEST );
GetEditor()->SetMode( eOldMode );
rReq.Done();
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_DIALOG_TESTMODE );
return;
}
case SID_EXPORT_DIALOG:
SaveDialog();
break;
case SID_IMPORT_DIALOG:
ImportDialog();
break;
}
rReq.Done();
}
Reference< container::XNameContainer > DialogWindow::GetDialog() const
{
return pEditor->GetDialog();
}
sal_Bool DialogWindow::RenameDialog( const String& rNewName )
{
if ( !BasicIDE::RenameDialog( this, GetDocument(), GetLibName(), GetName(), rNewName ) )
return sal_False;
SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
if ( pBindings )
pBindings->Invalidate( SID_DOC_MODIFIED );
return sal_True;
}
void DialogWindow::DisableBrowser()
{
BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow(SID_SHOW_PROPERTYBROWSER) : NULL;
if( pChildWin )
((PropBrw*)(pChildWin->GetWindow()))->Update( NULL );
}
void DialogWindow::UpdateBrowser()
{
BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
SfxViewFrame* pViewFrame = pIDEShell ? pIDEShell->GetViewFrame() : NULL;
SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow(SID_SHOW_PROPERTYBROWSER) : NULL;
if( pChildWin )
((PropBrw*)(pChildWin->GetWindow()))->Update( pIDEShell );
}
static ::rtl::OUString aResourceResolverPropName =
::rtl::OUString::createFromAscii( "ResourceResolver" );
sal_Bool DialogWindow::SaveDialog()
{
DBG_CHKTHIS( DialogWindow, 0 );
sal_Bool bDone = sal_False;
Reference< lang::XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
Reference < XFilePicker > xFP;
if( xMSF.is() )
{
Sequence <Any> aServiceType(1);
aServiceType[0] <<= TemplateDescription::FILESAVE_AUTOEXTENSION_PASSWORD;
xFP = Reference< XFilePicker >( xMSF->createInstanceWithArguments(
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ), aServiceType ), UNO_QUERY );
}
Reference< XFilePickerControlAccess > xFPControl(xFP, UNO_QUERY);
xFPControl->enableControl(ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, sal_False);
Any aValue;
aValue <<= (sal_Bool) sal_True;
xFPControl->setValue(ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, 0, aValue);
if ( aCurPath.Len() )
xFP->setDisplayDirectory ( aCurPath );
xFP->setDefaultName( ::rtl::OUString( GetName() ) );
String aDialogStr( IDEResId( RID_STR_STDDIALOGNAME ) );
Reference< XFilterManager > xFltMgr(xFP, UNO_QUERY);
xFltMgr->appendFilter( aDialogStr, String( RTL_CONSTASCII_USTRINGPARAM( "*.xdl" ) ) );
xFltMgr->appendFilter( String( IDEResId( RID_STR_FILTER_ALLFILES ) ), String( RTL_CONSTASCII_USTRINGPARAM( FILTERMASK_ALL ) ) );
xFltMgr->setCurrentFilter( aDialogStr );
if( xFP->execute() == RET_OK )
{
Sequence< ::rtl::OUString > aPaths = xFP->getFiles();
aCurPath = aPaths[0];
// export dialog model to xml
Reference< container::XNameContainer > xDialogModel = GetDialog();
Reference< XComponentContext > xContext;
Reference< beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY );
OSL_ASSERT( xProps.is() );
OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext );
Reference< XInputStream > xInput( xISP->createInputStream() );
Reference< XSimpleFileAccess > xSFI( xMSF->createInstance
( ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY );
Reference< XOutputStream > xOutput;
try
{
if( xSFI->exists( aCurPath ) )
xSFI->kill( aCurPath );
xOutput = xSFI->openFileWrite( aCurPath );
}
catch( Exception& )
{}
if( xOutput.is() )
{
Sequence< sal_Int8 > bytes;
sal_Int32 nRead = xInput->readBytes( bytes, xInput->available() );
for (;;)
{
if( nRead )
xOutput->writeBytes( bytes );
nRead = xInput->readBytes( bytes, 1024 );
if (! nRead)
break;
}
bDone = true;
// With resource?
Reference< beans::XPropertySet > xDialogModelPropSet( xDialogModel, UNO_QUERY );
Reference< resource::XStringResourceResolver > xStringResourceResolver;
if( xDialogModelPropSet.is() )
{
try
{
Any aResourceResolver = xDialogModelPropSet->getPropertyValue( aResourceResolverPropName );
aResourceResolver >>= xStringResourceResolver;
}
catch( beans::UnknownPropertyException& )
{}
}
bool bResource = false;
if( xStringResourceResolver.is() )
{
Sequence< lang::Locale > aLocaleSeq = xStringResourceResolver->getLocales();
sal_Int32 nLocaleCount = aLocaleSeq.getLength();
if( nLocaleCount > 0 )
bResource = true;
}
if( bResource )
{
INetURLObject aURLObj( aCurPath );
aURLObj.removeExtension();
::rtl::OUString aDialogName( aURLObj.getName() );
aURLObj.removeSegment();
::rtl::OUString aURL( aURLObj.GetMainURL( INetURLObject::NO_DECODE ) );
sal_Bool bReadOnly = sal_False;
::rtl::OUString aComment( ::rtl::OUString::createFromAscii( "# " ) );
aComment += aDialogName;
aComment += ::rtl::OUString::createFromAscii( " strings" );
Reference< task::XInteractionHandler > xDummyHandler;
// Remove old properties files in case of overwriting Dialog files
if( xSFI->isFolder( aURL ) )
{
Sequence< ::rtl::OUString > aContentSeq = xSFI->getFolderContents( aURL, false );
::rtl::OUString aDialogName_( aDialogName );
aDialogName_ += ::rtl::OUString::createFromAscii( "_" );
sal_Int32 nCount = aContentSeq.getLength();
const ::rtl::OUString* pFiles = aContentSeq.getConstArray();
for( int i = 0 ; i < nCount ; i++ )
{
::rtl::OUString aCompleteName = pFiles[i];
rtl::OUString aPureName;
rtl::OUString aExtension;
sal_Int32 iDot = aCompleteName.lastIndexOf( '.' );
sal_Int32 iSlash = aCompleteName.lastIndexOf( '/' );
if( iDot != -1 )
{
sal_Int32 iCopyFrom = (iSlash != -1) ? iSlash + 1 : 0;
aPureName = aCompleteName.copy( iCopyFrom, iDot-iCopyFrom );
aExtension = aCompleteName.copy( iDot + 1 );
}
if( aExtension.equalsAscii( "properties" ) ||
aExtension.equalsAscii( "default" ) )
{
if( aPureName.indexOf( aDialogName_ ) == 0 )
{
try
{
xSFI->kill( aCompleteName );
}
catch( uno::Exception& )
{}
}
}
}
}
Reference< XStringResourceWithLocation > xStringResourceWithLocation =
StringResourceWithLocation::create( xContext, aURL, bReadOnly,
xStringResourceResolver->getDefaultLocale(), aDialogName, aComment, xDummyHandler );
// Add locales
Sequence< lang::Locale > aLocaleSeq = xStringResourceResolver->getLocales();
const lang::Locale* pLocales = aLocaleSeq.getConstArray();
sal_Int32 nLocaleCount = aLocaleSeq.getLength();
for( sal_Int32 iLocale = 0 ; iLocale < nLocaleCount ; iLocale++ )
{
const lang::Locale& rLocale = pLocales[ iLocale ];
xStringResourceWithLocation->newLocale( rLocale );
}
Reference< XStringResourceManager > xTargetStringResourceManager( xStringResourceWithLocation, uno::UNO_QUERY );
LocalizationMgr::copyResourceForDialog( xDialogModel,
xStringResourceResolver, xTargetStringResourceManager );
xStringResourceWithLocation->store();
}
}
else
ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_COULDNTWRITE) ) ).Execute();
}
return bDone;
}
extern bool localesAreEqual( const ::com::sun::star::lang::Locale& rLocaleLeft,
const ::com::sun::star::lang::Locale& rLocaleRight );
std::vector< lang::Locale > implGetLanguagesOnlyContainedInFirstSeq
( Sequence< lang::Locale > aFirstSeq, Sequence< lang::Locale > aSecondSeq )
{
std::vector< lang::Locale > avRet;
const lang::Locale* pFirst = aFirstSeq.getConstArray();
const lang::Locale* pSecond = aSecondSeq.getConstArray();
sal_Int32 nFirstCount = aFirstSeq.getLength();
sal_Int32 nSecondCount = aSecondSeq.getLength();
for( sal_Int32 iFirst = 0 ; iFirst < nFirstCount ; iFirst++ )
{
const lang::Locale& rFirstLocale = pFirst[ iFirst ];
bool bAlsoContainedInSecondSeq = false;
for( sal_Int32 iSecond = 0 ; iSecond < nSecondCount ; iSecond++ )
{
const lang::Locale& rSecondLocale = pSecond[ iSecond ];
bool bMatch = localesAreEqual( rFirstLocale, rSecondLocale );
if( bMatch )
{
bAlsoContainedInSecondSeq = true;
break;
}
}
if( !bAlsoContainedInSecondSeq )
avRet.push_back( rFirstLocale );
}
return avRet;
}
class NameClashQueryBox : public MessBox
{
public:
NameClashQueryBox( Window* pParent,
const XubString& rTitle, const XubString& rMessage );
};
NameClashQueryBox::NameClashQueryBox( Window* pParent,
const XubString& rTitle, const XubString& rMessage )
: MessBox( pParent, 0, rTitle, rMessage )
{
if ( rTitle.Len() )
SetText( rTitle );
maMessText = rMessage;
AddButton( String( IDEResId( RID_STR_DLGIMP_CLASH_RENAME ) ), RET_YES,
BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_OKBUTTON | BUTTONDIALOG_FOCUSBUTTON );
AddButton( String( IDEResId( RID_STR_DLGIMP_CLASH_REPLACE ) ), RET_NO, 0 );
AddButton( BUTTON_CANCEL, RET_CANCEL, BUTTONDIALOG_CANCELBUTTON );
SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
QueryBox::GetStandardImageHC() : QueryBox::GetStandardImage() );
}
class LanguageMismatchQueryBox : public MessBox
{
public:
LanguageMismatchQueryBox( Window* pParent,
const XubString& rTitle, const XubString& rMessage );
};
LanguageMismatchQueryBox::LanguageMismatchQueryBox( Window* pParent,
const XubString& rTitle, const XubString& rMessage )
: MessBox( pParent, 0, rTitle, rMessage )
{
if ( rTitle.Len() )
SetText( rTitle );
maMessText = rMessage;
AddButton( String( IDEResId( RID_STR_DLGIMP_MISMATCH_ADD ) ), RET_YES,
BUTTONDIALOG_DEFBUTTON | BUTTONDIALOG_OKBUTTON | BUTTONDIALOG_FOCUSBUTTON );
AddButton( String( IDEResId( RID_STR_DLGIMP_MISMATCH_OMIT ) ), RET_NO, 0 );
AddButton( BUTTON_CANCEL, RET_CANCEL, BUTTONDIALOG_CANCELBUTTON );
AddButton( BUTTON_HELP, BUTTONID_HELP, BUTTONDIALOG_HELPBUTTON, 4 );
SetImage( GetSettings().GetStyleSettings().GetHighContrastMode() ?
QueryBox::GetStandardImageHC() : QueryBox::GetStandardImage() );
}
sal_Bool implImportDialog( Window* pWin, const String& rCurPath, const ScriptDocument& rDocument, const String& aLibName )
{
sal_Bool bDone = sal_False;
Reference< lang::XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
Reference < XFilePicker > xFP;
if( xMSF.is() )
{
Sequence <Any> aServiceType(1);
aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE;
xFP = Reference< XFilePicker >( xMSF->createInstanceWithArguments(
::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ), aServiceType ), UNO_QUERY );
}
Reference< XFilePickerControlAccess > xFPControl(xFP, UNO_QUERY);
xFPControl->enableControl(ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, sal_False);
Any aValue;
aValue <<= (sal_Bool) sal_True;
xFPControl->setValue(ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, 0, aValue);
String aCurPath( rCurPath );
if ( aCurPath.Len() )
xFP->setDisplayDirectory ( aCurPath );
String aDialogStr( IDEResId( RID_STR_STDDIALOGNAME ) );
Reference< XFilterManager > xFltMgr(xFP, UNO_QUERY);
xFltMgr->appendFilter( aDialogStr, String( RTL_CONSTASCII_USTRINGPARAM( "*.xdl" ) ) );
xFltMgr->appendFilter( String( IDEResId( RID_STR_FILTER_ALLFILES ) ), String( RTL_CONSTASCII_USTRINGPARAM( FILTERMASK_ALL ) ) );
xFltMgr->setCurrentFilter( aDialogStr );
if( xFP->execute() == RET_OK )
{
Sequence< ::rtl::OUString > aPaths = xFP->getFiles();
aCurPath = aPaths[0];
::rtl::OUString aBasePath;
::rtl::OUString aOUCurPath( aCurPath );
sal_Int32 iSlash = aOUCurPath.lastIndexOf( '/' );
if( iSlash != -1 )
aBasePath = aOUCurPath.copy( 0, iSlash + 1 );
try
{
// create dialog model
Reference< container::XNameContainer > xDialogModel( xMSF->createInstance
( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlDialogModel" ) ) ), UNO_QUERY_THROW );
Reference< XSimpleFileAccess > xSFI( xMSF->createInstance
( ::rtl::OUString::createFromAscii( "com.sun.star.ucb.SimpleFileAccess" ) ), UNO_QUERY_THROW );
Reference< XInputStream > xInput;
if( xSFI->exists( aCurPath ) )
xInput = xSFI->openFileRead( aCurPath );
Reference< XComponentContext > xContext;
Reference< beans::XPropertySet > xProps( xMSF, UNO_QUERY );
OSL_ASSERT( xProps.is() );
OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
::xmlscript::importDialogModel( xInput, xDialogModel, xContext );
String aXmlDlgName;
Reference< beans::XPropertySet > xDialogModelPropSet( xDialogModel, UNO_QUERY );
if( xDialogModelPropSet.is() )
{
try
{
Any aXmlDialogNameAny = xDialogModelPropSet->getPropertyValue( DLGED_PROP_NAME );
::rtl::OUString aOUXmlDialogName;
aXmlDialogNameAny >>= aOUXmlDialogName;
aXmlDlgName = aOUXmlDialogName;
}
catch( beans::UnknownPropertyException& )
{}
}
bool bValidName = (aXmlDlgName.Len() != 0);
OSL_ASSERT( bValidName );
if( !bValidName )
return bDone;
bool bDialogAlreadyExists = rDocument.hasDialog( aLibName, aXmlDlgName );
String aNewDlgName = aXmlDlgName;
enum NameClashMode
{
NO_CLASH,
CLASH_OVERWRITE_DIALOG,
CLASH_RENAME_DIALOG,
};
NameClashMode eNameClashMode = NO_CLASH;
if( bDialogAlreadyExists )
{
String aQueryBoxTitle( IDEResId( RID_STR_DLGIMP_CLASH_TITLE ) );
String aQueryBoxText( IDEResId( RID_STR_DLGIMP_CLASH_TEXT ) );
aQueryBoxText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "$(ARG1)" ) ), aXmlDlgName );
NameClashQueryBox aQueryBox( pWin, aQueryBoxTitle, aQueryBoxText );
sal_uInt16 nRet = aQueryBox.Execute();
if( RET_YES == nRet )
{
// RET_YES == Rename, see NameClashQueryBox::NameClashQueryBox
eNameClashMode = CLASH_RENAME_DIALOG;
aNewDlgName = rDocument.createObjectName( E_DIALOGS, aLibName );
}
else if( RET_NO == nRet )
{
// RET_NO == Replace, see NameClashQueryBox::NameClashQueryBox
eNameClashMode = CLASH_OVERWRITE_DIALOG;
}
else if( RET_CANCEL == nRet )
{
return bDone;
}
}
BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
if( pIDEShell == NULL )
{
OSL_ASSERT( pIDEShell != NULL );
return bDone;
}
// Resource?
::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale();
Reference< task::XInteractionHandler > xDummyHandler;
bool bReadOnly = true;
Reference< XStringResourceWithLocation > xImportStringResource =
StringResourceWithLocation::create( xContext, aBasePath, bReadOnly,
aLocale, aXmlDlgName, ::rtl::OUString(), xDummyHandler );
Sequence< lang::Locale > aImportLocaleSeq = xImportStringResource->getLocales();
sal_Int32 nImportLocaleCount = aImportLocaleSeq.getLength();
Reference< container::XNameContainer > xDialogLib( rDocument.getLibrary( E_DIALOGS, aLibName, sal_True ) );
Reference< resource::XStringResourceManager > xLibStringResourceManager = LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib );
sal_Int32 nLibLocaleCount = 0;
Sequence< lang::Locale > aLibLocaleSeq;
if( xLibStringResourceManager.is() )
{
aLibLocaleSeq = xLibStringResourceManager->getLocales();
nLibLocaleCount = aLibLocaleSeq.getLength();
}
// Check language matches
std::vector< lang::Locale > aOnlyInImportLanguages =
implGetLanguagesOnlyContainedInFirstSeq( aImportLocaleSeq, aLibLocaleSeq );
int nOnlyInImportLanguageCount = aOnlyInImportLanguages.size();
// For now: Keep languages from lib
bool bLibLocalized = (nLibLocaleCount > 0);
bool bImportLocalized = (nImportLocaleCount > 0);
bool bAddDialogLanguagesToLib = false;
if( nOnlyInImportLanguageCount > 0 )
{
String aQueryBoxTitle( IDEResId( RID_STR_DLGIMP_MISMATCH_TITLE ) );
String aQueryBoxText( IDEResId( RID_STR_DLGIMP_MISMATCH_TEXT ) );
LanguageMismatchQueryBox aQueryBox( pWin, aQueryBoxTitle, aQueryBoxText );
sal_uInt16 nRet = aQueryBox.Execute();
if( RET_YES == nRet )
{
// RET_YES == Add, see LanguageMismatchQueryBox::LanguageMismatchQueryBox
bAddDialogLanguagesToLib = true;
}
// RET_NO == Omit, see LanguageMismatchQueryBox::LanguageMismatchQueryBox
// -> nothing to do here
//else if( RET_NO == nRet )
//{
//}
else if( RET_CANCEL == nRet )
{
return bDone;
}
}
if( bImportLocalized )
{
bool bCopyResourcesForDialog = true;
if( bAddDialogLanguagesToLib )
{
LocalizationMgr* pCurMgr = pIDEShell->GetCurLocalizationMgr();
lang::Locale aFirstLocale;
aFirstLocale = aOnlyInImportLanguages[0];
if( nOnlyInImportLanguageCount > 1 )
{
// Check if import default belongs to only import languages and use it then
lang::Locale aImportDefaultLocale = xImportStringResource->getDefaultLocale();
lang::Locale aTmpLocale;
for( int i = 0 ; i < nOnlyInImportLanguageCount ; ++i )
{
aTmpLocale = aOnlyInImportLanguages[i];
if( localesAreEqual( aImportDefaultLocale, aTmpLocale ) )
{
aFirstLocale = aImportDefaultLocale;
break;
}
}
}
Sequence< lang::Locale > aFirstLocaleSeq( 1 );
aFirstLocaleSeq[0] = aFirstLocale;
pCurMgr->handleAddLocales( aFirstLocaleSeq );
if( nOnlyInImportLanguageCount > 1 )
{
Sequence< lang::Locale > aRemainingLocaleSeq( nOnlyInImportLanguageCount - 1 );
lang::Locale aTmpLocale;
int iSeq = 0;
for( int i = 0 ; i < nOnlyInImportLanguageCount ; ++i )
{
aTmpLocale = aOnlyInImportLanguages[i];
if( !localesAreEqual( aFirstLocale, aTmpLocale ) )
aRemainingLocaleSeq[iSeq++] = aTmpLocale;
}
pCurMgr->handleAddLocales( aRemainingLocaleSeq );
}
}
else if( !bLibLocalized )
{
Reference< resource::XStringResourceManager > xImportStringResourceManager( xImportStringResource, UNO_QUERY );
LocalizationMgr::resetResourceForDialog( xDialogModel, xImportStringResourceManager );
bCopyResourcesForDialog = false;
}
if( bCopyResourcesForDialog )
{
Reference< resource::XStringResourceResolver > xImportStringResourceResolver( xImportStringResource, UNO_QUERY );
LocalizationMgr::copyResourceForDroppedDialog( xDialogModel, aXmlDlgName,
xLibStringResourceManager, xImportStringResourceResolver );
}
}
else if( bLibLocalized )
{
LocalizationMgr::setResourceIDsForDialog( xDialogModel, xLibStringResourceManager );
}
LocalizationMgr::setStringResourceAtDialog( rDocument, aLibName, aNewDlgName, xDialogModel );
if( eNameClashMode == CLASH_OVERWRITE_DIALOG )
{
if ( BasicIDE::RemoveDialog( rDocument, aLibName, aNewDlgName ) )
{
IDEBaseWindow* pDlgWin = pIDEShell->FindDlgWin( rDocument, aLibName, aNewDlgName, sal_False, sal_True );
if( pDlgWin != NULL )
pIDEShell->RemoveWindow( pDlgWin, sal_True );
BasicIDE::MarkDocumentModified( rDocument );
}
else
{
// TODO: Assertion?
return bDone;
}
}
if( eNameClashMode == CLASH_RENAME_DIALOG )
{
bool bRenamed = false;
if( xDialogModelPropSet.is() )
{
try
{
Any aXmlDialogNameAny;
aXmlDialogNameAny <<= ::rtl::OUString( aNewDlgName );
xDialogModelPropSet->setPropertyValue( DLGED_PROP_NAME, aXmlDialogNameAny );
bRenamed = true;
}
catch( beans::UnknownPropertyException& )
{}
}
if( bRenamed )
{
LocalizationMgr::renameStringResourceIDs( rDocument, aLibName, aNewDlgName, xDialogModel );
}
else
{
// TODO: Assertion?
return bDone;
}
}
Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext );
bool bSuccess = rDocument.insertDialog( aLibName, aNewDlgName, xISP );
if( bSuccess )
{
DialogWindow* pNewDlgWin = pIDEShell->CreateDlgWin( rDocument, aLibName, aNewDlgName );
pIDEShell->SetCurWindow( pNewDlgWin, sal_True );
}
bDone = sal_True;
}
catch( Exception& )
{}
}
return bDone;
}
sal_Bool DialogWindow::ImportDialog()
{
DBG_CHKTHIS( DialogWindow, 0 );
const ScriptDocument& rDocument = GetDocument();
String aLibName = GetLibName();
sal_Bool bRet = implImportDialog( this, aCurPath, rDocument, aLibName );
return bRet;
}
DlgEdModel* DialogWindow::GetModel() const
{
return pEditor ? pEditor->GetModel() : NULL;
}
DlgEdPage* DialogWindow::GetPage() const
{
return pEditor ? pEditor->GetPage() : NULL;
}
DlgEdView* DialogWindow::GetView() const
{
return pEditor ? pEditor->GetView() : NULL;
}
sal_Bool __EXPORT DialogWindow::IsModified()
{
return pEditor->IsModified();
}
::svl::IUndoManager* __EXPORT DialogWindow::GetUndoManager()
{
return pUndoMgr;
}
String DialogWindow::GetTitle()
{
return GetName();
}
BasicEntryDescriptor DialogWindow::CreateEntryDescriptor()
{
ScriptDocument aDocument( GetDocument() );
String aLibName( GetLibName() );
String aLibSubName;
LibraryLocation eLocation = aDocument.getLibraryLocation( aLibName );
return BasicEntryDescriptor( aDocument, eLocation, aLibName, aLibSubName, GetName(), OBJ_TYPE_DIALOG );
}
void DialogWindow::SetReadOnly( sal_Bool b )
{
if ( pEditor )
{
if ( b )
pEditor->SetMode( DLGED_READONLY );
else
pEditor->SetMode( DLGED_SELECT );
}
}
sal_Bool DialogWindow::IsReadOnly()
{
sal_Bool bReadOnly = sal_False;
if ( pEditor && pEditor->GetMode() == DLGED_READONLY )
bReadOnly = sal_True;
return bReadOnly;
}
sal_Bool DialogWindow::IsPasteAllowed()
{
return pEditor ? pEditor->IsPasteAllowed() : sal_False;
}
void DialogWindow::StoreData()
{
if ( IsModified() )
{
try
{
Reference< container::XNameContainer > xLib = GetDocument().getLibrary( E_DIALOGS, GetLibName(), true );
if( xLib.is() )
{
Reference< container::XNameContainer > xDialogModel = pEditor->GetDialog();
if( xDialogModel.is() )
{
Reference< XComponentContext > xContext;
Reference< beans::XPropertySet > xProps( ::comphelper::getProcessServiceFactory(), UNO_QUERY );
OSL_ASSERT( xProps.is() );
OSL_VERIFY( xProps->getPropertyValue( ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("DefaultContext")) ) >>= xContext );
Reference< XInputStreamProvider > xISP = ::xmlscript::exportDialogModel( xDialogModel, xContext );
xLib->replaceByName( ::rtl::OUString( GetName() ), makeAny( xISP ) );
}
}
}
catch ( uno::Exception& )
{
DBG_UNHANDLED_EXCEPTION();
}
BasicIDE::MarkDocumentModified( GetDocument() );
pEditor->ClearModifyFlag();
}
}
void DialogWindow::Deactivating()
{
if ( IsModified() )
BasicIDE::MarkDocumentModified( GetDocument() );
}
sal_Int32 DialogWindow::countPages( Printer* pPrinter )
{
return pEditor->countPages( pPrinter );
}
void DialogWindow::printPage( sal_Int32 nPage, Printer* pPrinter )
{
pEditor->printPage( nPage, pPrinter, CreateQualifiedName() );
}
void DialogWindow::DataChanged( const DataChangedEvent& rDCEvt )
{
if( (rDCEvt.GetType()==DATACHANGED_SETTINGS) && (rDCEvt.GetFlags() & SETTINGS_STYLE) )
{
InitSettings( sal_True, sal_True, sal_True );
Invalidate();
}
else
IDEBaseWindow::DataChanged( rDCEvt );
}
void DialogWindow::InitSettings(sal_Bool bFont,sal_Bool bForeground,sal_Bool bBackground)
{
const StyleSettings& rStyleSettings = GetSettings().GetStyleSettings();
if( bFont )
{
Font aFont;
aFont = rStyleSettings.GetFieldFont();
SetPointFont( aFont );
}
if( bForeground || bFont )
{
SetTextColor( rStyleSettings.GetFieldTextColor() );
SetTextFillColor();
}
if( bBackground )
SetBackground( rStyleSettings.GetFieldColor() );
}
::com::sun::star::uno::Reference< ::com::sun::star::accessibility::XAccessible > DialogWindow::CreateAccessible()
{
return (::com::sun::star::accessibility::XAccessible*) new AccessibleDialogWindow( this );
}