diff options
Diffstat (limited to 'sd/source/ui/app/sdmod.cxx')
-rwxr-xr-x | sd/source/ui/app/sdmod.cxx | 338 |
1 files changed, 338 insertions, 0 deletions
diff --git a/sd/source/ui/app/sdmod.cxx b/sd/source/ui/app/sdmod.cxx new file mode 100755 index 000000000000..ccbc7c8f5665 --- /dev/null +++ b/sd/source/ui/app/sdmod.cxx @@ -0,0 +1,338 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ + +// MARKER(update_precomp.py): autogen include statement, do not remove +#include "precompiled_sd.hxx" +#include <unotools/pathoptions.hxx> +#include <svl/languageoptions.hxx> +#ifndef _UNOTOOLS_UCBSTREAMHELPER_HXX +#include <unotools/ucbstreamhelper.hxx> +#endif +#include <tools/urlobj.hxx> +#include <vcl/virdev.hxx> +#include <sfx2/app.hxx> +#include <vcl/status.hxx> +#include <svl/intitem.hxx> +#include <sfx2/msg.hxx> +#include <sfx2/objface.hxx> +#include <sfx2/printer.hxx> +#include <svx/pszctrl.hxx> +#include <svx/zoomctrl.hxx> +#include <svx/modctrl.hxx> +#include <svl/zforlist.hxx> +#include <comphelper/processfactory.hxx> +#include <svtools/ehdl.hxx> + +#include <svx/svxids.hrc> +#include <svl/srchitem.hxx> +#include <svx/svxerr.hxx> + +#include <svx/xmlsecctrl.hxx> + + +#define _SD_DLL // fuer SD_MOD() +#include "sderror.hxx" +#include "sdmod.hxx" +#include "sddll.hxx" +#include "sdresid.hxx" +#include "optsitem.hxx" +#include "DrawDocShell.hxx" +#include "drawdoc.hxx" +#include "app.hrc" +#include "glob.hrc" +#include "strings.hrc" +#include "res_bmp.hrc" +#include "cfgids.hxx" +#include "tools/SdGlobalResourceContainer.hxx" + +TYPEINIT1( SdModule, SfxModule ); + +#define SdModule +#include "sdslots.hxx" + + +SFX_IMPL_INTERFACE(SdModule, SfxModule, SdResId(STR_APPLICATIONOBJECTBAR)) +{ + SFX_STATUSBAR_REGISTRATION(SdResId(RID_DRAW_STATUSBAR)); +} + +/************************************************************************* +|* +|* Ctor +|* +\************************************************************************/ + +SdModule::SdModule(SfxObjectFactory* pFact1, SfxObjectFactory* pFact2 ) +: SfxModule( SfxApplication::CreateResManager("sd"), FALSE, + pFact1, pFact2, NULL ), + pTransferClip(NULL), + pTransferDrag(NULL), + pTransferSelection(NULL), + pImpressOptions(NULL), + pDrawOptions(NULL), + pSearchItem(NULL), + pNumberFormatter( NULL ), + bWaterCan(FALSE), + mpResourceContainer(new ::sd::SdGlobalResourceContainer()) +{ + SetName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarDraw" ) ) ); // Nicht uebersetzen! + pSearchItem = new SvxSearchItem(SID_SEARCH_ITEM); + pSearchItem->SetAppFlag(SVX_SEARCHAPP_DRAW); + StartListening( *SFX_APP() ); + SvxErrorHandler::Get(); + mpErrorHdl = new SfxErrorHandler( RID_SD_ERRHDL, + ERRCODE_AREA_SD, + ERRCODE_AREA_SD_END, + GetResMgr() ); + + // Create a new ref device and (by calling SetReferenceDevice()) + // set its resolution to 600 DPI. This leads to a visually better + // formatting of text in small sizes (6 point and below.) + VirtualDevice* pDevice = new VirtualDevice; + mpVirtualRefDevice = pDevice; + pDevice->SetMapMode( MAP_100TH_MM ); + pDevice->SetReferenceDevice ( VirtualDevice::REFDEV_MODE06 ); +} + + + +/************************************************************************* +|* +|* Dtor +|* +\************************************************************************/ + +SdModule::~SdModule() +{ + delete pSearchItem; + + if( pNumberFormatter ) + delete pNumberFormatter; + + ::sd::DrawDocShell* pDocShell = PTR_CAST(::sd::DrawDocShell, SfxObjectShell::Current()); + if( pDocShell ) + { + ::sd::ViewShell* pViewShell = pDocShell->GetViewShell(); + if (pViewShell) + { + // Removing our event listener + Application::RemoveEventListener( LINK( this, SdModule, EventListenerHdl ) ); + } + } + + mpResourceContainer.reset(); + + // Mark the module in the global AppData structure as deleted. + SdModule** ppShellPointer = (SdModule**)GetAppData(SHL_DRAW); + if (ppShellPointer != NULL) + (*ppShellPointer) = NULL; + + delete mpErrorHdl; + delete static_cast< VirtualDevice* >( mpVirtualRefDevice ); +} + + +/************************************************************************* +|* +|* Statusbar erzeugen +|* +\************************************************************************/ + +#define AUTOSIZE_WIDTH 180 +#define TEXT_WIDTH(s) rStatusBar.GetTextWidth((s)) + +void SdModule::FillStatusBar(StatusBar& rStatusBar) +{ + // Hinweis + rStatusBar.InsertItem( SID_CONTEXT, TEXT_WIDTH( String().Fill( 30, 'x' ) ), // vorher 52 + SIB_IN | SIB_LEFT | SIB_AUTOSIZE ); + + // Groesse und Position + rStatusBar.InsertItem( SID_ATTR_SIZE, SvxPosSizeStatusBarControl::GetDefItemWidth(rStatusBar), // vorher 42 + SIB_IN | SIB_USERDRAW ); + // SIB_AUTOSIZE | SIB_LEFT | SIB_OWNERDRAW ); + + // Massstab + rStatusBar.InsertItem( SID_ATTR_ZOOM, SvxZoomStatusBarControl::GetDefItemWidth(rStatusBar), SIB_IN | SIB_CENTER ); +/* + // Einfuege- / Uberschreibmodus + rStatusBar.InsertItem( SID_ATTR_INSERT, TEXT_WIDTH( "EINFG" ), + SIB_IN | SIB_CENTER ); + + // Selektionsmodus + rStatusBar.InsertItem( SID_STATUS_SELMODE, TEXT_WIDTH( "ERG" ), + SIB_IN | SIB_CENTER ); +*/ + // Dokument geaendert + rStatusBar.InsertItem( SID_DOC_MODIFIED, SvxModifyControl::GetDefItemWidth(rStatusBar) ); + + // signatures + rStatusBar.InsertItem( SID_SIGNATURE, XmlSecStatusBarControl::GetDefItemWidth( rStatusBar ), SIB_USERDRAW ); + rStatusBar.SetHelpId(SID_SIGNATURE, SID_SIGNATURE); + + + + // Seite + rStatusBar.InsertItem( SID_STATUS_PAGE, TEXT_WIDTH( String().Fill( 24, 'X' ) ), + SIB_IN | SIB_LEFT ); + + // Praesentationslayout + rStatusBar.InsertItem( SID_STATUS_LAYOUT, TEXT_WIDTH( String().Fill( 10, 'X' ) ), + SIB_IN | SIB_LEFT | SIB_AUTOSIZE ); +} + + + +/************************************************************************* +|* +|* get notifications +|* +\************************************************************************/ + +void SdModule::Notify( SfxBroadcaster&, const SfxHint& rHint ) +{ + if( rHint.ISA( SfxSimpleHint ) && + ( (SfxSimpleHint&) rHint ).GetId() == SFX_HINT_DEINITIALIZING ) + { + delete pImpressOptions, pImpressOptions = NULL; + delete pDrawOptions, pDrawOptions = NULL; + } +} + +/************************************************************************* +|* +|* Optionen zurueckgeben +|* +\************************************************************************/ + +SdOptions* SdModule::GetSdOptions(DocumentType eDocType) +{ + SdOptions* pOptions = NULL; + + if (eDocType == DOCUMENT_TYPE_DRAW) + { + if (!pDrawOptions) + pDrawOptions = new SdOptions( SDCFG_DRAW ); + + pOptions = pDrawOptions; + } + else if (eDocType == DOCUMENT_TYPE_IMPRESS) + { + if (!pImpressOptions) + pImpressOptions = new SdOptions( SDCFG_IMPRESS ); + + pOptions = pImpressOptions; + } + if( pOptions ) + { + UINT16 nMetric = pOptions->GetMetric(); + + ::sd::DrawDocShell* pDocSh = PTR_CAST(::sd::DrawDocShell, SfxObjectShell::Current() ); + SdDrawDocument* pDoc = NULL; + if (pDocSh) + pDoc = pDocSh->GetDoc(); + + if( nMetric != 0xffff && pDoc && eDocType == pDoc->GetDocumentType() ) + PutItem( SfxUInt16Item( SID_ATTR_METRIC, nMetric ) ); + } + + return(pOptions); +} + +/************************************************************************* +|* +|* Optionen-Stream fuer interne Options oeffnen und zurueckgeben; +|* falls der Stream zum Lesen geoeffnet wird, aber noch nicht +|* angelegt wurde, wird ein 'leeres' RefObject zurueckgegeben +|* +\************************************************************************/ + +SvStorageStreamRef SdModule::GetOptionStream( const String& rOptionName, + SdOptionStreamMode eMode ) +{ + ::sd::DrawDocShell* pDocSh = PTR_CAST(::sd::DrawDocShell, SfxObjectShell::Current() ); + SvStorageStreamRef xStm; + + if( pDocSh ) + { + DocumentType eType = pDocSh->GetDoc()->GetDocumentType(); + String aStmName; + + if( !xOptionStorage.Is() ) + { + INetURLObject aURL( SvtPathOptions().GetUserConfigPath() ); + + aURL.Append( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "drawing.cfg" ) ) ); + + SvStream* pStm = ::utl::UcbStreamHelper::CreateStream( aURL.GetMainURL( INetURLObject::NO_DECODE ), STREAM_READWRITE ); + + if( pStm ) + xOptionStorage = new SvStorage( pStm, TRUE ); + } + + if( DOCUMENT_TYPE_DRAW == eType ) + aStmName.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "Draw_" ) ); + else + aStmName.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "Impress_" ) ); + + aStmName += rOptionName; + + if( SD_OPTION_STORE == eMode || xOptionStorage->IsContained( aStmName ) ) + xStm = xOptionStorage->OpenSotStream( aStmName ); + } + + return xStm; +} + +/************************************************************************* +|* +\************************************************************************/ + +SvNumberFormatter* SdModule::GetNumberFormatter() +{ + if( !pNumberFormatter ) + pNumberFormatter = new SvNumberFormatter( ::comphelper::getProcessServiceFactory(), LANGUAGE_SYSTEM ); + + return pNumberFormatter; +} + +/************************************************************************* +|* +\************************************************************************/ + +OutputDevice* SdModule::GetVirtualRefDevice (void) +{ + return mpVirtualRefDevice; +} + +/** This method is deprecated and only an alias to + <member>GetVirtualRefDevice()</member>. The given argument is ignored. +*/ +OutputDevice* SdModule::GetRefDevice (::sd::DrawDocShell& ) +{ + return GetVirtualRefDevice(); +} |