diff options
Diffstat (limited to 'extensions/source/bibliography')
40 files changed, 10658 insertions, 0 deletions
diff --git a/extensions/source/bibliography/bib.component b/extensions/source/bibliography/bib.component new file mode 100644 index 000000000000..98627854dffa --- /dev/null +++ b/extensions/source/bibliography/bib.component @@ -0,0 +1,35 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!--********************************************************************** +* +* 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. +* +**********************************************************************--> + +<component loader="com.sun.star.loader.SharedLibrary" + xmlns="http://openoffice.org/2010/uno-components"> + <implementation name="com.sun.star.extensions.Bibliography"> + <service name="com.sun.star.frame.Bibliography"/> + <service name="com.sun.star.frame.FrameLoader"/> + </implementation> +</component> diff --git a/extensions/source/bibliography/bib.hrc b/extensions/source/bibliography/bib.hrc new file mode 100644 index 000000000000..14c5259489fd --- /dev/null +++ b/extensions/source/bibliography/bib.hrc @@ -0,0 +1,111 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#ifndef BIB_HRC +#define BIB_HRC + +#include "bibliography.hrc" +#include <svl/solar.hrc> +#ifndef RID_BIB_START +#define RID_BIB_START RID_EXTENSIONS_START +#endif + +// ResIDs + +//Dialogs (100) +#define RID_BIB_DIALOG (RID_BIB_START) +#define RID_TP_GENERAL (RID_BIB_DIALOG) +#define RID_DLG_MAPPING (RID_BIB_DIALOG + 1) +#define RID_DLG_DBCHANGE (RID_BIB_DIALOG + 2) + +//Controls(100) +#define RID_BIB_CONTROLS (RID_BIB_START + 100) +#define RID_BIB_TOOLBAR (RID_BIB_CONTROLS+ 1) +#define RID_TOOLBAR_IMGLIST (RID_BIB_CONTROLS+ 2) +#define RID_TOOLBAR_IMGLIST_HC (RID_BIB_CONTROLS+ 3) +#define RID_TOOLBAR_BIGIMGLIST (RID_BIB_CONTROLS+ 4) +#define RID_TOOLBAR_BIGIMGLIST_HC (RID_BIB_CONTROLS+ 5) + +//Menu(100) +#define RID_BIB_MENU (RID_BIB_CONTROLS + 100) +#define RID_MAIN_MENU (RID_BIB_MENU +1) +//#define RID_MAIN_ME_HIERARCHICAL (RID_BIB_MENU +2) +#define RID_MAIN_ME_NEWENTRY (RID_BIB_MENU +3) +#define RID_MAIN_ME_CHANGEENTRY (RID_BIB_MENU +4) +#define RID_MAIN_ME_REMOVEENTRY (RID_BIB_MENU +5) +#define RID_MAIN_ME_SEARCH (RID_BIB_MENU +6) +#define RID_MAIN_ME_FIELDDLG (RID_BIB_MENU +7) +//#define RID_MAIN_ME_LAYOUT (RID_BIB_MENU +8) +#define RID_MAIN_ME_MAPPING (RID_BIB_MENU +9) +#define RID_MAIN_ME_DBSOURCE (RID_BIB_MENU +10) +#define RID_MAIN_DELETE_RECORD (RID_BIB_MENU +11) +#define RID_MAIN_INSERT_RECORD (RID_BIB_MENU +12) +#define MN_TEMPLATES (RID_BIB_MENU +13) // to make makro ITEM_FILE_DOCTEMPLATE happy... + +#define RID_POPUP_ME_VIEW (RID_BIB_MENU +50) + +// Strings (500) +#define RID_BIB_STRING (RID_BIB_START + 200) + // FREE (RID_BIB_STRING + 1) +#define RID_BIB_STR_FIELDSELECTION (RID_BIB_STRING + 2) +#define RID_BIB_STR_TABWIN_PREFIX (RID_BIB_STRING + 3) +#define RID_BIB_STR_FRAME_TITLE (RID_BIB_STRING + 4) +#define RID_MAP_QUESTION (RID_BIB_STRING + 5) + +#define ST_IDENTIFIER (RID_BIB_STRING + 6) +#define ST_AUTHTYPE (RID_BIB_STRING + 7) +#define ST_AUTHOR (RID_BIB_STRING + 8) +#define ST_YEAR (RID_BIB_STRING + 9) +#define ST_ISBN (RID_BIB_STRING + 10) +#define ST_MONTH (RID_BIB_STRING + 11) +#define ST_PUBLISHER (RID_BIB_STRING + 12) +#define ST_ADDRESS (RID_BIB_STRING + 13) +#define ST_ANNOTE (RID_BIB_STRING + 14) +#define ST_BOOKTITLE (RID_BIB_STRING + 15) +#define ST_CHAPTER (RID_BIB_STRING + 16) +#define ST_EDITION (RID_BIB_STRING + 17) +#define ST_EDITOR (RID_BIB_STRING + 18) +#define ST_HOWPUBLISHED (RID_BIB_STRING + 19) +#define ST_INSTITUTION (RID_BIB_STRING + 20) +#define ST_JOURNAL (RID_BIB_STRING + 21) +#define ST_NOTE (RID_BIB_STRING + 22) +#define ST_NUMBER (RID_BIB_STRING + 23) +#define ST_ORGANIZATION (RID_BIB_STRING + 24) +#define ST_PAGE (RID_BIB_STRING + 25) +#define ST_SCHOOL (RID_BIB_STRING + 26) +#define ST_SERIES (RID_BIB_STRING + 27) +#define ST_TITLE (RID_BIB_STRING + 28) +#define ST_REPORT (RID_BIB_STRING + 29) +#define ST_VOLUME (RID_BIB_STRING + 30) +#define ST_URL (RID_BIB_STRING + 31) +#define ST_CUSTOM1 (RID_BIB_STRING + 32) +#define ST_CUSTOM2 (RID_BIB_STRING + 33) +#define ST_CUSTOM3 (RID_BIB_STRING + 34) +#define ST_CUSTOM4 (RID_BIB_STRING + 35) +#define ST_CUSTOM5 (RID_BIB_STRING + 36) + + +#endif diff --git a/extensions/source/bibliography/bib.src b/extensions/source/bibliography/bib.src new file mode 100644 index 000000000000..1ad6a7c83d17 --- /dev/null +++ b/extensions/source/bibliography/bib.src @@ -0,0 +1,74 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#include "bib.hrc" + +String RID_BIB_STR_FIELDSELECTION +{ + Text [ en-US ] = "Field selection:"; +}; + +String RID_BIB_STR_TABWIN_PREFIX +{ + Text [ en-US ] = "Table;Query;Sql;Sql [Native]"; +}; +String RID_BIB_STR_FRAME_TITLE +{ + Text [ en-US ] = "Bibliography Database"; +}; +String RID_MAP_QUESTION +{ + Text [ en-US ] = "Do you want to edit the column arrangement?"; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/source/bibliography/bibbeam.cxx b/extensions/source/bibliography/bibbeam.cxx new file mode 100644 index 000000000000..f0203607c219 --- /dev/null +++ b/extensions/source/bibliography/bibbeam.cxx @@ -0,0 +1,321 @@ +/************************************************************************* + * + * 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_extensions.hxx" +#include <osl/mutex.hxx> +#include <tools/urlobj.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/awt/PosSize.hpp> +#include <com/sun/star/frame/XDispatch.hpp> +#include <com/sun/star/util/XURLTransformer.hpp> + +#include "bibliography.hrc" +#include <vcl/lstbox.hxx> +#include <vcl/edit.hxx> +#include <tools/debug.hxx> +#include "bibbeam.hxx" +#include "toolbar.hrc" +#include "bibresid.hxx" +#include "datman.hxx" +#ifndef BIBTOOLS_HXX +#include "bibtools.hxx" +#endif + +using namespace rtl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::uno; + +#define C2U(cChar) OUString::createFromAscii(cChar) + +#define PROPERTY_FRAME 1 +#define ID_TOOLBAR 1 +#define ID_GRIDWIN 2 + +//......................................................................... +namespace bib +{ +//......................................................................... + + using namespace ::com::sun::star::uno; + + void HandleTaskPaneList( Window* pWindow, sal_Bool bAddToList ) + { + Window* pParent = pWindow->GetParent(); + + DBG_ASSERT( pParent, "-GetTaskPaneList(): everybody here should have a parent!" ); + + SystemWindow* pSysWin = pParent->GetSystemWindow(); + if( pSysWin ) + { + TaskPaneList* pTaskPaneList = pSysWin->GetTaskPaneList(); + if( pTaskPaneList ) + { + if( bAddToList ) + pTaskPaneList->AddWindow( pWindow ); + else + pTaskPaneList->RemoveWindow( pWindow ); + } + } + } + + //===================================================================== + //= BibGridwin + //===================================================================== + class BibGridwin + :public Window //DockingWindow + { + private: + Reference< awt::XWindow > m_xGridWin; + Reference< awt::XControlModel > m_xGridModel; + Reference< awt::XControl > m_xControl; + Reference< awt::XControlContainer > m_xControlContainer; + // #100312# --------- + Reference< frame::XDispatchProviderInterception> m_xDispatchProviderInterception; + + protected: + + virtual void Resize(); + + public: + + BibGridwin(Window* pParent, WinBits nStyle = WB_3DLOOK ); + ~BibGridwin(); + + void createGridWin(const Reference< awt::XControlModel > & xDbForm); + void disposeGridWin(); + + const Reference< awt::XControlContainer >& getControlContainer() const { return m_xControlContainer; } + // #100312# --------- + const Reference< frame::XDispatchProviderInterception>& getDispatchProviderInterception() const { return m_xDispatchProviderInterception; } + + virtual void GetFocus(); + }; + + //--------------------------------------------------------------------- + BibGridwin::BibGridwin( Window* _pParent, WinBits _nStyle ) : Window( _pParent, _nStyle ) + { + m_xControlContainer = VCLUnoHelper::CreateControlContainer(this); + + AddToTaskPaneList( this ); + } + + //--------------------------------------------------------------------- + BibGridwin::~BibGridwin() + { + RemoveFromTaskPaneList( this ); + + disposeGridWin(); + } + + //--------------------------------------------------------------------- + void BibGridwin::Resize() + { + if(m_xGridWin.is()) + { + ::Size aSize = GetOutputSizePixel(); + m_xGridWin->setPosSize(0, 0, aSize.Width(),aSize.Height(), awt::PosSize::SIZE); + } + } + + //--------------------------------------------------------------------- + void BibGridwin::createGridWin(const uno::Reference< awt::XControlModel > & xGModel) + { + m_xGridModel = xGModel; + + if( m_xControlContainer.is()) + { + uno::Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + + if ( m_xGridModel.is() && xMgr.is()) + { + uno::Reference< XPropertySet > xPropSet( m_xGridModel, UNO_QUERY ); + + if ( xPropSet.is() && m_xGridModel.is() ) + { + uno::Any aAny = xPropSet->getPropertyValue( C2U("DefaultControl") ); + rtl::OUString aControlName; + aAny >>= aControlName; + + m_xControl = Reference< awt::XControl > (xMgr->createInstance( aControlName ), UNO_QUERY ); + DBG_ASSERT( m_xControl.is(), "no GridControl created" ); + if ( m_xControl.is() ) + m_xControl->setModel( m_xGridModel ); + } + + if ( m_xControl.is() ) + { + // Peer als Child zu dem FrameWindow + m_xControlContainer->addControl(C2U("GridControl"), m_xControl); + m_xGridWin=uno::Reference< awt::XWindow > (m_xControl, UNO_QUERY ); + // #100312# ----- + m_xDispatchProviderInterception=uno::Reference< frame::XDispatchProviderInterception > (m_xControl, UNO_QUERY ); + m_xGridWin->setVisible( sal_True ); + m_xControl->setDesignMode( sal_True ); + // initially switch on the desing mode - switch it off _after_ loading the form + // 17.10.2001 - 93107 - frank.schoenheit@sun.com + + ::Size aSize = GetOutputSizePixel(); + m_xGridWin->setPosSize(0, 0, aSize.Width(),aSize.Height(), awt::PosSize::POSSIZE); + } + } + } + } + + //--------------------------------------------------------------------- + void BibGridwin::disposeGridWin() + { + if ( m_xControl.is() ) + { + Reference< awt::XControl > xDel( m_xControl ); + m_xControl = NULL; + m_xGridWin = NULL; + + m_xControlContainer->removeControl( xDel ); + xDel->dispose(); + } + } + + //--------------------------------------------------------------------- + void BibGridwin::GetFocus() + { + if(m_xGridWin.is()) + m_xGridWin->setFocus(); + } + + //--------------------------------------------------------------------- + BibBeamer::BibBeamer( Window* _pParent, BibDataManager* _pDM, WinBits _nStyle ) + :BibSplitWindow( _pParent, _nStyle | WB_NOSPLITDRAW ) + ,pDatMan( _pDM ) + ,pToolBar( NULL ) + ,pGridWin( NULL ) + { + createToolBar(); + createGridWin(); + if ( pDatMan ) + pDatMan->SetToolbar(pToolBar); + pGridWin->Show(); + + if ( pDatMan ) + connectForm( pDatMan ); + } + + //--------------------------------------------------------------------- + BibBeamer::~BibBeamer() + { + if ( isFormConnected() ) + disconnectForm(); + + if ( m_xToolBarRef.is() ) + m_xToolBarRef->dispose(); + + if ( pToolBar ) + { + if ( pDatMan ) + pDatMan->SetToolbar(0); + + DELETEZ( pToolBar ); + } + + if( pGridWin ) + { + BibGridwin* pDel = pGridWin; + pGridWin = NULL; + pDel->disposeGridWin(); + delete pDel; + } + + } + + //--------------------------------------------------------------------- + void BibBeamer::createToolBar() + { + pToolBar= new BibToolBar(this, LINK( this, BibBeamer, RecalcLayout_Impl )); + ::Size aSize=pToolBar->GetSizePixel(); + InsertItem(ID_TOOLBAR, pToolBar, aSize.Height(), 0, 0, SWIB_FIXED ); + if ( m_xController.is() ) + pToolBar->SetXController( m_xController ); + } + + //--------------------------------------------------------------------- + void BibBeamer::createGridWin() + { + pGridWin = new BibGridwin(this,0); + + InsertItem(ID_GRIDWIN, pGridWin, 40, 1, 0, SWIB_RELATIVESIZE ); + + pGridWin->createGridWin( pDatMan->updateGridModel() ); + } + + //--------------------------------------------------------------------- + Reference< awt::XControlContainer > BibBeamer::getControlContainer() + { + Reference< awt::XControlContainer > xReturn; + if ( pGridWin ) + xReturn = pGridWin->getControlContainer(); + return xReturn; + } + + // #100312# ----------------------------------------------------------- + Reference< frame::XDispatchProviderInterception > BibBeamer::getDispatchProviderInterception() + { + Reference< frame::XDispatchProviderInterception > xReturn; + if ( pGridWin ) + xReturn = pGridWin->getDispatchProviderInterception(); + return xReturn; + } + + //--------------------------------------------------------------------- + void BibBeamer::SetXController(const uno::Reference< frame::XController > & xCtr) + { + m_xController = xCtr; + + if ( pToolBar ) + pToolBar->SetXController( m_xController ); + + } + + //--------------------------------------------------------------------- + void BibBeamer::GetFocus() + { + if( pGridWin ) + pGridWin->GrabFocus(); + } + + //--------------------------------------------------------------------- + IMPL_LINK( BibBeamer, RecalcLayout_Impl, void*, /*pVoid*/ ) + { + long nHeight = pToolBar->GetSizePixel().Height(); + SetItemSize( ID_TOOLBAR, nHeight ); + return 0L; + } + +//......................................................................... +} // namespace bib +//......................................................................... diff --git a/extensions/source/bibliography/bibbeam.hxx b/extensions/source/bibliography/bibbeam.hxx new file mode 100644 index 000000000000..9e5ff677ee6f --- /dev/null +++ b/extensions/source/bibliography/bibbeam.hxx @@ -0,0 +1,93 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef ADRBEAM_HXX +#define ADRBEAM_HXX + +#include <com/sun/star/awt/XControlContainer.hpp> +#include <com/sun/star/awt/XControl.hpp> +#include <com/sun/star/awt/XControlModel.hpp> +#include <com/sun/star/form/XForm.hpp> +// #100312# ----------------- +#include <com/sun/star/frame/XDispatchProviderInterception.hpp> +#include <cppuhelper/implbase1.hxx> // helper for implementations +#include <vcl/splitwin.hxx> +#include "toolbar.hxx" +#include "formcontrolcontainer.hxx" +#include "bibshortcuthandler.hxx" + +class BibDataManager; + +//......................................................................... +namespace bib +{ +//......................................................................... + + class BibGridwin; + class BibBeamer + :public BibSplitWindow + ,public FormControlContainer + { + private: + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > m_xController; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > m_xToolBarRef; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > m_xGridRef; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > m_xGridWin; + + BibDataManager* pDatMan; + BibToolBar* pToolBar; + BibGridwin* pGridWin; + + DECL_LINK( RecalcLayout_Impl, void* ); + + protected: + + void createToolBar(); + void createGridWin(); + + // FormControlContainer ---------- + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > + getControlContainer(); + public: + // #100312# ------------------- + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception > + getDispatchProviderInterception(); + + BibBeamer(Window* pParent,BibDataManager* pDatMan, WinBits nStyle = WB_3DLOOK ); + ~BibBeamer(); + + void SetXController(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > &); + + virtual void GetFocus(); + }; + +//......................................................................... +} // namespace bib +//......................................................................... + +#endif diff --git a/extensions/source/bibliography/bibconfig.cxx b/extensions/source/bibliography/bibconfig.cxx new file mode 100644 index 000000000000..16ece4dc7411 --- /dev/null +++ b/extensions/source/bibliography/bibconfig.cxx @@ -0,0 +1,389 @@ +/************************************************************************* + * + * 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_extensions.hxx" + +#include <bibconfig.hxx> +#include <svl/svarray.hxx> +#include <tools/debug.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <comphelper/processfactory.hxx> + +using namespace rtl; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::lang; +/* -----------------11.11.99 14:34------------------- + + --------------------------------------------------*/ +typedef Mapping* MappingPtr; +SV_DECL_PTRARR_DEL(MappingArray, MappingPtr, 2, 2) +SV_IMPL_PTRARR(MappingArray, MappingPtr); + +#define C2U(cChar) OUString::createFromAscii(cChar) + +const char* cDataSourceHistory = "DataSourceHistory"; +/* -----------------------------13.11.00 12:21-------------------------------- + + ---------------------------------------------------------------------------*/ +Sequence<OUString> BibConfig::GetPropertyNames() +{ + static Sequence<OUString> aNames; + if(!aNames.getLength()) + { + aNames.realloc(8); + OUString* pNames = aNames.getArray(); + pNames[0] = C2U("CurrentDataSource/DataSourceName"); + pNames[1] = C2U("CurrentDataSource/Command"); + pNames[2] = C2U("CurrentDataSource/CommandType"); + pNames[3] = C2U("BeamerHeight"); + pNames[4] = C2U("ViewHeight"); + pNames[5] = C2U("QueryText"); + pNames[6] = C2U("QueryField"); + pNames[7] = C2U("ShowColumnAssignmentWarning"); + } + return aNames; +} +/* -----------------------------13.11.00 11:00-------------------------------- + + ---------------------------------------------------------------------------*/ +BibConfig::BibConfig() : + ConfigItem(C2U("Office.DataAccess/Bibliography"), CONFIG_MODE_DELAYED_UPDATE), + pMappingsArr(new MappingArray), + nBeamerSize(0), + nViewSize(0), + bShowColumnAssignmentWarning(sal_False) +{ + //Names of the default columns + aColumnDefaults[0] = C2U("Identifier"); + aColumnDefaults[1] = C2U("BibliographyType"); + aColumnDefaults[2] = C2U("Author"); + aColumnDefaults[3] = C2U("Title"); + aColumnDefaults[4] = C2U("Year"); + aColumnDefaults[5] = C2U("ISBN"); + aColumnDefaults[6] = C2U("Booktitle"); + aColumnDefaults[7] = C2U("Chapter"); + aColumnDefaults[8] = C2U("Edition"); + aColumnDefaults[9] = C2U("Editor"); + aColumnDefaults[10] = C2U("Howpublished"); + aColumnDefaults[11] = C2U("Institution"); + aColumnDefaults[12] = C2U("Journal"); + aColumnDefaults[13] = C2U("Month"); + aColumnDefaults[14] = C2U("Note"); + aColumnDefaults[15] = C2U("Annote"); + aColumnDefaults[16] = C2U("Number"); + aColumnDefaults[17] = C2U("Organizations"); + aColumnDefaults[18] = C2U("Pages"); + aColumnDefaults[19] = C2U("Publisher"); + aColumnDefaults[20] = C2U("Address"); + aColumnDefaults[21] = C2U("School"); + aColumnDefaults[22] = C2U("Series"); + aColumnDefaults[23] = C2U("ReportType"); + aColumnDefaults[24] = C2U("Volume"); + aColumnDefaults[25] = C2U("URL"); + aColumnDefaults[26] = C2U("Custom1"); + aColumnDefaults[27] = C2U("Custom2"); + aColumnDefaults[28] = C2U("Custom3"); + aColumnDefaults[29] = C2U("Custom4"); + aColumnDefaults[30] = C2U("Custom5"); + + + const Sequence< OUString > aPropertyNames = GetPropertyNames(); + const Sequence<Any> aPropertyValues = GetProperties( aPropertyNames ); + const Any* pValues = aPropertyValues.getConstArray(); + if(aPropertyValues.getLength() == aPropertyNames.getLength()) + { + for(int nProp = 0; nProp < aPropertyNames.getLength(); nProp++) + { + if(pValues[nProp].hasValue()) + { + switch(nProp) + { + case 0: pValues[nProp] >>= sDataSource; break; + case 1: pValues[nProp] >>= sTableOrQuery; break; + case 2: pValues[nProp] >>= nTblOrQuery; break; + case 3: pValues[nProp] >>= nBeamerSize; break; + case 4: pValues[nProp] >>= nViewSize ; break; + case 5: pValues[nProp] >>= sQueryText ; break; + case 6: pValues[nProp] >>= sQueryField; break; + case 7: + bShowColumnAssignmentWarning = *(sal_Bool*)pValues[nProp].getValue(); + break; + } + } + } + } + OUString sName(C2U("DataSourceName")); + OUString sTable(C2U("Command")); + OUString sCommandType(C2U("CommandType")); + Sequence< OUString > aNodeNames = GetNodeNames(C2U(cDataSourceHistory)); + const OUString* pNodeNames = aNodeNames.getConstArray(); + for(sal_Int32 nNode = 0; nNode < aNodeNames.getLength(); nNode++) + { + Sequence<OUString> aHistoryNames(3); + OUString* pHistoryNames = aHistoryNames.getArray(); + + OUString sPrefix(C2U(cDataSourceHistory)); + sPrefix += C2U("/"); + sPrefix += pNodeNames[nNode]; + sPrefix += C2U("/"); + pHistoryNames[0] = sPrefix; + pHistoryNames[0] += sName; + pHistoryNames[1] = sPrefix; + pHistoryNames[1] += sTable; + pHistoryNames[2] = sPrefix; + pHistoryNames[2] += sCommandType; + + Sequence<Any> aHistoryValues = GetProperties( aHistoryNames ); + const Any* pHistoryValues = aHistoryValues.getConstArray(); + + if(aHistoryValues.getLength() == aHistoryNames.getLength()) + { + Mapping* pMapping = new Mapping; + pHistoryValues[0] >>= pMapping->sURL; + pHistoryValues[1] >>= pMapping->sTableName; + pHistoryValues[2] >>= pMapping->nCommandType; + //field assignment is contained in another set + sPrefix += C2U("Fields"); + Sequence< OUString > aAssignmentNodeNames = GetNodeNames(sPrefix); + const OUString* pAssignmentNodeNames = aAssignmentNodeNames.getConstArray(); + Sequence<OUString> aAssignmentPropertyNames(aAssignmentNodeNames.getLength() * 2); + OUString* pAssignmentPropertyNames = aAssignmentPropertyNames.getArray(); + sal_Int16 nFieldIdx = 0; + for(sal_Int16 nField = 0; nField < aAssignmentNodeNames.getLength(); nField++) + { + OUString sSubPrefix(sPrefix); + sSubPrefix += C2U("/"); + sSubPrefix += pAssignmentNodeNames[nField]; + pAssignmentPropertyNames[nFieldIdx] = sSubPrefix; + pAssignmentPropertyNames[nFieldIdx++] += C2U("/ProgrammaticFieldName"); + pAssignmentPropertyNames[nFieldIdx] = sSubPrefix; + pAssignmentPropertyNames[nFieldIdx++] += C2U("/AssignedFieldName"); + } + Sequence<Any> aAssignmentValues = GetProperties(aAssignmentPropertyNames); + const Any* pAssignmentValues = aAssignmentValues.getConstArray(); + OUString sTempLogical; + OUString sTempReal; + sal_Int16 nSetMapping = 0; + nFieldIdx = 0; + for(sal_Int16 nFieldVal = 0; nFieldVal < aAssignmentValues.getLength() / 2; nFieldVal++) + { + pAssignmentValues[nFieldIdx++] >>= sTempLogical; + pAssignmentValues[nFieldIdx++] >>= sTempReal; + if(sTempLogical.getLength() && sTempReal.getLength()) + { + pMapping->aColumnPairs[nSetMapping].sLogicalColumnName = sTempLogical; + pMapping->aColumnPairs[nSetMapping++].sRealColumnName = sTempReal; + } + } + pMappingsArr->Insert(pMapping, pMappingsArr->Count()); + } + } +} +/* -----------------------------13.11.00 11:00-------------------------------- + + ---------------------------------------------------------------------------*/ +BibConfig::~BibConfig() +{ + if(IsModified()) + Commit(); + delete pMappingsArr; +} +/* -----------------------------13.11.00 12:08-------------------------------- + + ---------------------------------------------------------------------------*/ +BibDBDescriptor BibConfig::GetBibliographyURL() +{ + BibDBDescriptor aRet; + aRet.sDataSource = sDataSource; + aRet.sTableOrQuery = sTableOrQuery; + aRet.nCommandType = nTblOrQuery; + return aRet; +}; +/* -----------------------------13.11.00 12:20-------------------------------- + + ---------------------------------------------------------------------------*/ +void BibConfig::SetBibliographyURL(const BibDBDescriptor& rDesc) +{ + sDataSource = rDesc.sDataSource; + sTableOrQuery = rDesc.sTableOrQuery; + nTblOrQuery = rDesc.nCommandType; + SetModified(); +}; +//--------------------------------------------------------------------------- +void BibConfig::Notify( const com::sun::star::uno::Sequence<rtl::OUString>& ) +{ +} + +void BibConfig::Commit() +{ + const Sequence<OUString> aPropertyNames = GetPropertyNames(); + Sequence<Any> aValues(aPropertyNames.getLength()); + Any* pValues = aValues.getArray(); + + for(int nProp = 0; nProp < aPropertyNames.getLength(); nProp++) + { + switch(nProp) + { + case 0: pValues[nProp] <<= sDataSource; break; + case 1: pValues[nProp] <<= sTableOrQuery; break; + case 2: pValues[nProp] <<= nTblOrQuery; break; + case 3: pValues[nProp] <<= nBeamerSize; break; + case 4: pValues[nProp] <<= nViewSize; break; + case 5: pValues[nProp] <<= sQueryText; break; + case 6: pValues[nProp] <<= sQueryField; break; + case 7: + pValues[nProp].setValue(&bShowColumnAssignmentWarning, ::getBooleanCppuType()); + break; + } + } + PutProperties(aPropertyNames, aValues); + ClearNodeSet( C2U(cDataSourceHistory)); + OUString sEmpty; + Sequence< PropertyValue > aNodeValues(pMappingsArr->Count() * 3); + PropertyValue* pNodeValues = aNodeValues.getArray(); + + sal_Int32 nIndex = 0; + OUString sName(C2U("DataSourceName")); + OUString sTable(C2U("Command")); + OUString sCommandType(C2U("CommandType")); + for(sal_Int32 i = 0; i < pMappingsArr->Count(); i++) + { + const Mapping* pMapping = pMappingsArr->GetObject((sal_uInt16)i); + OUString sPrefix(C2U(cDataSourceHistory)); + sPrefix += C2U("/_"); + sPrefix += OUString::valueOf(i); + sPrefix += C2U("/"); + pNodeValues[nIndex].Name = sPrefix; + pNodeValues[nIndex].Name += sName; + pNodeValues[nIndex++].Value <<= pMapping->sURL; + pNodeValues[nIndex].Name = sPrefix; + pNodeValues[nIndex].Name += sTable; + pNodeValues[nIndex++].Value <<= pMapping->sTableName; + pNodeValues[nIndex].Name = sPrefix; + pNodeValues[nIndex].Name += sCommandType; + pNodeValues[nIndex++].Value <<= pMapping->nCommandType; + SetSetProperties( C2U(cDataSourceHistory), aNodeValues); + + sPrefix += C2U("Fields"); + sal_Int32 nFieldAssignment = 0; + OUString sFieldName = C2U("/ProgrammaticFieldName"); + OUString sDatabaseFieldName = C2U("/AssignedFieldName"); + ClearNodeSet( sPrefix ); + + while(nFieldAssignment < COLUMN_COUNT && + pMapping->aColumnPairs[nFieldAssignment].sLogicalColumnName.getLength()) + { + OUString sSubPrefix(sPrefix); + sSubPrefix += C2U("/_"); + sSubPrefix += OUString::valueOf(nFieldAssignment); + Sequence< PropertyValue > aAssignmentValues(2); + PropertyValue* pAssignmentValues = aAssignmentValues.getArray(); + pAssignmentValues[0].Name = sSubPrefix; + pAssignmentValues[0].Name += sFieldName; + pAssignmentValues[0].Value <<= pMapping->aColumnPairs[nFieldAssignment].sLogicalColumnName; + pAssignmentValues[1].Name = sSubPrefix; + pAssignmentValues[1].Name += sDatabaseFieldName; + pAssignmentValues[1].Value <<= pMapping->aColumnPairs[nFieldAssignment].sRealColumnName; + SetSetProperties( sPrefix, aAssignmentValues ); + nFieldAssignment++; + } + } +} +/* -----------------------------13.11.00 12:23-------------------------------- + + ---------------------------------------------------------------------------*/ +const Mapping* BibConfig::GetMapping(const BibDBDescriptor& rDesc) const +{ + for(sal_uInt16 i = 0; i < pMappingsArr->Count(); i++) + { + const Mapping* pMapping = pMappingsArr->GetObject(i); + sal_Bool bURLEqual = rDesc.sDataSource.equals(pMapping->sURL); + if(rDesc.sTableOrQuery == pMapping->sTableName && bURLEqual) + return pMapping; + } + return 0; +} +/* -----------------------------13.11.00 12:23-------------------------------- + + ---------------------------------------------------------------------------*/ +void BibConfig::SetMapping(const BibDBDescriptor& rDesc, const Mapping* pSetMapping) +{ + for(sal_uInt16 i = 0; i < pMappingsArr->Count(); i++) + { + const Mapping* pMapping = pMappingsArr->GetObject(i); + sal_Bool bURLEqual = rDesc.sDataSource.equals(pMapping->sURL); + if(rDesc.sTableOrQuery == pMapping->sTableName && bURLEqual) + { + pMappingsArr->DeleteAndDestroy(i, 1); + break; + } + } + Mapping* pNew = new Mapping(*pSetMapping); + pMappingsArr->Insert(pNew, pMappingsArr->Count()); + SetModified(); +} +/* -----------------------------20.11.00 11:56-------------------------------- + + ---------------------------------------------------------------------------*/ +DBChangeDialogConfig_Impl::DBChangeDialogConfig_Impl() +{ +} +/* -----------------------------20.11.00 11:57-------------------------------- + + ---------------------------------------------------------------------------*/ +DBChangeDialogConfig_Impl::~DBChangeDialogConfig_Impl() +{ +} +/* -----------------------------14.03.01 12:53-------------------------------- + + ---------------------------------------------------------------------------*/ +const Sequence<OUString>& DBChangeDialogConfig_Impl::GetDataSourceNames() +{ + if(!aSourceNames.getLength()) + { + Reference<XNameAccess> xDBContext; + Reference< XMultiServiceFactory > xMgr( ::comphelper::getProcessServiceFactory() ); + if( xMgr.is() ) + { + Reference<XInterface> xInstance = xMgr->createInstance( C2U( "com.sun.star.sdb.DatabaseContext" )); + xDBContext = Reference<XNameAccess>(xInstance, UNO_QUERY) ; + } + if(xDBContext.is()) + { + aSourceNames = xDBContext->getElementNames(); + } + } + return aSourceNames; +} + diff --git a/extensions/source/bibliography/bibconfig.hxx b/extensions/source/bibliography/bibconfig.hxx new file mode 100644 index 000000000000..f5e18734ae0a --- /dev/null +++ b/extensions/source/bibliography/bibconfig.hxx @@ -0,0 +1,155 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BIBCONFIG_HXX +#define _BIBCONFIG_HXX + +#include <unotools/configitem.hxx> +class MappingArray; + +//----------------------------------------------------------------------------- +#define COLUMN_COUNT 31 +#define IDENTIFIER_POS 0 +#define AUTHORITYTYPE_POS 1 +#define AUTHOR_POS 2 +#define TITLE_POS 3 +#define YEAR_POS 4 +#define ISBN_POS 5 +#define BOOKTITLE_POS 6 +#define CHAPTER_POS 7 +#define EDITION_POS 8 +#define EDITOR_POS 9 +#define HOWPUBLISHED_POS 10 +#define INSTITUTION_POS 11 +#define JOURNAL_POS 12 +#define MONTH_POS 13 +#define NOTE_POS 14 +#define ANNOTE_POS 15 +#define NUMBER_POS 16 +#define ORGANIZATIONS_POS 17 +#define PAGES_POS 18 +#define PUBLISHER_POS 19 +#define ADDRESS_POS 20 +#define SCHOOL_POS 21 +#define SERIES_POS 22 +#define REPORTTYPE_POS 23 +#define VOLUME_POS 24 +#define URL_POS 25 +#define CUSTOM1_POS 26 +#define CUSTOM2_POS 27 +#define CUSTOM3_POS 28 +#define CUSTOM4_POS 29 +#define CUSTOM5_POS 30 +//----------------------------------------------------------------------------- +struct StringPair +{ + rtl::OUString sRealColumnName; + rtl::OUString sLogicalColumnName; +}; +//----------------------------------------------------------------------------- +struct Mapping +{ + rtl::OUString sTableName; + rtl::OUString sURL; + sal_Int16 nCommandType; + StringPair aColumnPairs[COLUMN_COUNT]; + + Mapping() : + nCommandType(0){} +}; +//----------------------------------------------------------------------------- +struct BibDBDescriptor +{ + rtl::OUString sDataSource; + rtl::OUString sTableOrQuery; + sal_Int32 nCommandType; +}; +//----------------------------------------------------------------------------- + +class BibConfig : public utl::ConfigItem +{ + rtl::OUString sDataSource; + rtl::OUString sTableOrQuery; + sal_Int32 nTblOrQuery; + + rtl::OUString sQueryField; + rtl::OUString sQueryText; + MappingArray* pMappingsArr; + long nBeamerSize; + long nViewSize; + sal_Bool bShowColumnAssignmentWarning; + + rtl::OUString aColumnDefaults[COLUMN_COUNT]; + + com::sun::star::uno::Sequence<rtl::OUString> GetPropertyNames(); +public: + BibConfig(); + ~BibConfig(); + + virtual void Commit(); + virtual void Notify( const com::sun::star::uno::Sequence<rtl::OUString>& aPropertyNames); + + BibDBDescriptor GetBibliographyURL(); + void SetBibliographyURL(const BibDBDescriptor& rDesc); + + const Mapping* GetMapping(const BibDBDescriptor& rDesc) const; + void SetMapping(const BibDBDescriptor& rDesc, const Mapping* pMapping); + + const rtl::OUString& GetDefColumnName(sal_uInt16 nIndex) const + {return aColumnDefaults[nIndex];} + + + void setBeamerSize(long nSize) {SetModified(); nBeamerSize = nSize;} + long getBeamerSize()const {return nBeamerSize;} + void setViewSize(long nSize) {SetModified(); nViewSize = nSize;} + long getViewSize() {return nViewSize;} + + const rtl::OUString& getQueryField() const {return sQueryField;} + void setQueryField(const rtl::OUString& rSet) {SetModified(); sQueryField = rSet;} + + const rtl::OUString& getQueryText() const {return sQueryText;} + void setQueryText(const rtl::OUString& rSet) {SetModified(); sQueryText = rSet;} + + sal_Bool IsShowColumnAssignmentWarning() const + { return bShowColumnAssignmentWarning;} + void SetShowColumnAssignmentWarning(sal_Bool bSet) + { bShowColumnAssignmentWarning = bSet;} +}; +/* -----------------------------20.11.00 11:47-------------------------------- + + ---------------------------------------------------------------------------*/ +class DBChangeDialogConfig_Impl +{ + com::sun::star::uno::Sequence<rtl::OUString> aSourceNames; +public: + DBChangeDialogConfig_Impl(); + ~DBChangeDialogConfig_Impl(); + + const com::sun::star::uno::Sequence<rtl::OUString>& GetDataSourceNames(); + +}; +#endif diff --git a/extensions/source/bibliography/bibcont.cxx b/extensions/source/bibliography/bibcont.cxx new file mode 100644 index 000000000000..6309b635f386 --- /dev/null +++ b/extensions/source/bibliography/bibcont.cxx @@ -0,0 +1,275 @@ +/************************************************************************* + * + * 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_extensions.hxx" + +#include <osl/mutex.hxx> +#include <tools/urlobj.hxx> +#include <cppuhelper/weak.hxx> +#include <unotools/processfactory.hxx> +#include <toolkit/helper/vclunohelper.hxx> +#include <com/sun/star/awt/XWindow.hpp> +#include <com/sun/star/awt/XWindowPeer.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/frame/FrameSearchFlag.hpp> +#include <com/sun/star/util/XURLTransformer.hpp> +#include "bibconfig.hxx" + + +#include "datman.hxx" +#include "bibcont.hxx" + + +BibShortCutHandler::~BibShortCutHandler() +{ +} + +sal_Bool BibShortCutHandler::HandleShortCutKey( const KeyEvent& ) +{ + return sal_False; +} + + +BibWindow::BibWindow( Window* pParent, WinBits nStyle ) : Window( pParent, nStyle ), BibShortCutHandler( this ) +{ +} + +BibWindow::~BibWindow() +{ +} + + +BibSplitWindow::BibSplitWindow( Window* pParent, WinBits nStyle ) : SplitWindow( pParent, nStyle ), BibShortCutHandler( this ) +{ +} + +BibSplitWindow::~BibSplitWindow() +{ +} + + +BibTabPage::BibTabPage( Window* pParent, const ResId& rResId ) : TabPage( pParent, rResId ), BibShortCutHandler( this ) +{ +} + +BibTabPage::~BibTabPage() +{ +} + + +using namespace osl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::frame; +using namespace ::rtl; + +#define C2U(cChar) OUString::createFromAscii(cChar) +#define PROPERTY_FRAME 1 +//split window size is a percent value +#define WIN_MIN_HEIGHT 10 +#define WIN_STEP_SIZE 5 + +BibWindowContainer::BibWindowContainer( Window* pParent, BibShortCutHandler* pChildWin, WinBits nStyle ) : + BibWindow( pParent, nStyle ), + pChild( pChildWin ) +{ + if(pChild!=NULL) + { + Window* pChildWindow = GetChild(); + pChildWindow->SetParent(this); + pChildWindow->Show(); + pChildWindow->SetPosPixel(Point(0,0)); + } +} + +BibWindowContainer::~BibWindowContainer() +{ + if( pChild ) + { + Window* pDel = GetChild(); + pChild = NULL; // prevents GetFocus for child while deleting! + delete pDel; + } +} + +void BibWindowContainer::Resize() +{ + if( pChild ) + GetChild()->SetSizePixel( GetOutputSizePixel() ); +} + +void BibWindowContainer::GetFocus() +{ + if( pChild ) + GetChild()->GrabFocus(); +} + +sal_Bool BibWindowContainer::HandleShortCutKey( const KeyEvent& rKeyEvent ) +{ + return pChild? pChild->HandleShortCutKey( rKeyEvent ) : sal_False; +} + + +BibBookContainer::BibBookContainer(Window* pParent,BibDataManager* pDtMn, WinBits nStyle): + BibSplitWindow(pParent,nStyle), + pDatMan(pDtMn), + pTopWin(NULL), + pBottomWin(NULL), + bFirstTime(sal_True) +{ + pBibMod = OpenBibModul(); + aTimer.SetTimeoutHdl(LINK( this, BibBookContainer, SplitHdl)); + aTimer.SetTimeout(400); +} + +BibBookContainer::~BibBookContainer() +{ + if( xTopFrameRef.is() ) + xTopFrameRef->dispose(); + if( xBottomFrameRef.is() ) + xBottomFrameRef->dispose(); + + if( pTopWin ) + { + Window* pDel = pTopWin; + pTopWin = NULL; // prevents GetFocus for child while deleting! + delete pDel; + } + + if( pBottomWin ) + { + Window* pDel = pBottomWin; + pBottomWin = NULL; // prevents GetFocus for child while deleting! + delete pDel; + } + + CloseBibModul( pBibMod ); +} + +void BibBookContainer::Split() +{ + aTimer.Start(); +} +IMPL_LINK( BibBookContainer, SplitHdl, Timer*,/*pT*/) +{ + long nSize= GetItemSize( TOP_WINDOW); + BibConfig* pConfig = BibModul::GetConfig(); + pConfig->setBeamerSize(nSize); + nSize = GetItemSize( BOTTOM_WINDOW); + pConfig->setViewSize(nSize); + return 0; +} + +void BibBookContainer::createTopFrame( BibShortCutHandler* pWin ) +{ + if ( xTopFrameRef.is() ) xTopFrameRef->dispose(); + + if(pTopWin) + { + RemoveItem(TOP_WINDOW); + delete pTopWin; + } + pTopWin=new BibWindowContainer(this,pWin); + pTopWin->Show(); + BibConfig* pConfig = BibModul::GetConfig(); + long nSize = pConfig->getBeamerSize(); + InsertItem(TOP_WINDOW, pTopWin, nSize, 1, 0, SWIB_PERCENTSIZE ); + +} + +void BibBookContainer::createBottomFrame( BibShortCutHandler* pWin ) +{ + if ( xBottomFrameRef.is() ) xBottomFrameRef->dispose(); + + if(pBottomWin) + { + RemoveItem(BOTTOM_WINDOW); + delete pBottomWin; + } + + pBottomWin=new BibWindowContainer(this,pWin); + + BibConfig* pConfig = BibModul::GetConfig(); + long nSize = pConfig->getViewSize(); + InsertItem(BOTTOM_WINDOW, pBottomWin, nSize, 1, 0, SWIB_PERCENTSIZE ); + +} + +void BibBookContainer::GetFocus() +{ + if( pBottomWin ) + pBottomWin->GrabFocus(); +} + +long BibBookContainer::PreNotify( NotifyEvent& rNEvt ) +{ + long nHandled = 0; + if( EVENT_KEYINPUT == rNEvt.GetType() ) + { + const KeyEvent* pKEvt = rNEvt.GetKeyEvent(); + const KeyCode aKeyCode = pKEvt->GetKeyCode(); + sal_uInt16 nKey = aKeyCode.GetCode(); + const sal_uInt16 nModifier = aKeyCode.GetModifier(); + + if( KEY_MOD2 == nModifier ) + { + if( KEY_UP == nKey || KEY_DOWN == nKey ) + { + if(pTopWin && pBottomWin) + { + sal_uInt16 nFirstWinId = KEY_UP == nKey ? TOP_WINDOW : BOTTOM_WINDOW; + sal_uInt16 nSecondWinId = KEY_UP == nKey ? BOTTOM_WINDOW : TOP_WINDOW; + long nHeight = GetItemSize( nFirstWinId ); + nHeight -= WIN_STEP_SIZE; + if(nHeight < WIN_MIN_HEIGHT) + nHeight = WIN_MIN_HEIGHT; + SetItemSize( nFirstWinId, nHeight ); + SetItemSize( nSecondWinId, 100 - nHeight ); + } + nHandled = 1; + } + else if( pKEvt->GetCharCode() && HandleShortCutKey( *pKEvt ) ) + nHandled = 1; + } + } + + return nHandled; +} + +sal_Bool BibBookContainer::HandleShortCutKey( const KeyEvent& rKeyEvent ) +{ + sal_Bool bRet = sal_False; + + if( pTopWin ) + bRet = pTopWin->HandleShortCutKey( rKeyEvent ); + + if( !bRet && pBottomWin ) + bRet = pBottomWin->HandleShortCutKey( rKeyEvent ); + + return bRet; +} diff --git a/extensions/source/bibliography/bibcont.hxx b/extensions/source/bibliography/bibcont.hxx new file mode 100644 index 000000000000..931c4d3fb09b --- /dev/null +++ b/extensions/source/bibliography/bibcont.hxx @@ -0,0 +1,114 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef ADDRCONT_HXX +#define ADDRCONT_HXX + +#include <com/sun/star/frame/XFrame.hpp> +#include <vcl/splitwin.hxx> +#include <vcl/timer.hxx> +#include "bibshortcuthandler.hxx" + +#include "bibmod.hxx" + +#define TOP_WINDOW 1 +#define BOTTOM_WINDOW 2 + +class BibDataManager; + +class BibWindowContainer : public BibWindow //Window +{ + private: + // !BibShortCutHandler is also always a Window! + BibShortCutHandler* pChild; + + protected: + virtual void Resize(); + + public: + BibWindowContainer( Window* pParent, BibShortCutHandler* pChild, WinBits nStyle = WB_3DLOOK); + ~BibWindowContainer(); + + inline Window* GetChild(); + + virtual void GetFocus(); + + virtual sal_Bool HandleShortCutKey( const KeyEvent& rKeyEvent ); // returns true, if key was handled + + using Window::GetChild; +}; + +inline Window* BibWindowContainer::GetChild() +{ + return pChild? pChild->GetWindow() : NULL; +} + + +class BibBookContainer: public BibSplitWindow +{ + private: + + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xTopFrameRef; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xBottomFrameRef; + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xTopPeerRef; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xBottomPeerRef; + + BibDataManager* pDatMan; + BibWindowContainer* pTopWin; + BibWindowContainer* pBottomWin; + sal_Bool bFirstTime; + HdlBibModul pBibMod; + Timer aTimer; + + DECL_LINK( SplitHdl, Timer*); + + protected: + + virtual void Split(); + + virtual long PreNotify( NotifyEvent& rNEvt ); + + public: + + BibBookContainer(Window* pParent,BibDataManager*, WinBits nStyle = WB_3DLOOK ); + ~BibBookContainer(); + + inline BibWindow* GetTopWin() {return pTopWin;} + inline BibWindow* GetBottomWin() {return pBottomWin;} + + // !BibShortCutHandler is also always a Window! + void createTopFrame( BibShortCutHandler* pWin ); + + void createBottomFrame( BibShortCutHandler* pWin ); + + virtual void GetFocus(); + + virtual sal_Bool HandleShortCutKey( const KeyEvent& rKeyEvent ); // returns true, if key was handled +}; + +#endif diff --git a/extensions/source/bibliography/bibload.cxx b/extensions/source/bibliography/bibload.cxx new file mode 100644 index 000000000000..64262d2356a9 --- /dev/null +++ b/extensions/source/bibliography/bibload.cxx @@ -0,0 +1,777 @@ +/************************************************************************* + * + * 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_extensions.hxx" + + +#include <osl/mutex.hxx> +#include <tools/urlobj.hxx> +#include <tools/diagnose_ex.h> +#include <cppuhelper/weak.hxx> +#include <svl/itemprop.hxx> +#include <uno/environment.h> +#include <svl/urihelper.hxx> +#ifndef _TOOLKIT_UNOHLP_HXX +#include <toolkit/helper/vclunohelper.hxx> +#endif +#include <comphelper/processfactory.hxx> +#include <cppuhelper/factory.hxx> // helper for factories +#include <com/sun/star/sdbc/ResultSetType.hpp> +#include <com/sun/star/sdbc/ResultSetConcurrency.hpp> +#include <com/sun/star/sdb/XColumn.hpp> +#include <com/sun/star/util/XURLTransformer.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdb/CommandType.hpp> +#include <com/sun/star/frame/XFrameLoader.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <com/sun/star/beans/PropertyAttribute.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/text/BibliographyDataField.hpp> +#include <com/sun/star/form/XLoadListener.hpp> +#include <com/sun/star/frame/XLayoutManager.hpp> +#include <toolkit/awt/vclxwindow.hxx> +#include <vcl/window.hxx> +#include <vcl/edit.hxx> +#include <vcl/svapp.hxx> +#include <vcl/group.hxx> +#include <svtools/svmedit.hxx> + +#include "bibresid.hxx" +#ifndef BIB_HRC +#include "bib.hrc" +#endif +#include "bibcont.hxx" +#include "bibbeam.hxx" +#include "bibmod.hxx" +#include "bibview.hxx" +#include "framectr.hxx" +#include "datman.hxx" +#include <bibconfig.hxx> +#include <cppuhelper/implbase4.hxx> // helper for implementations + +using namespace ::rtl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::sdb; +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star::form; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::frame; + +#define C2U(cChar) OUString::createFromAscii(cChar) + + +//----------------------------------------------------------------------------- + +#define PROPERTY_FRAME 1 + +class BibliographyLoader : public cppu::WeakImplHelper4 + < XServiceInfo, XNameAccess, XPropertySet, XFrameLoader > +{ + HdlBibModul m_pBibMod; + Reference< XLoadable > m_xDatMan; + BibDataManager* m_pDatMan; + Reference< XNameAccess > m_xColumns; + Reference< XResultSet > m_xCursor; + +private: + + void loadView(const Reference< XFrame > & aFrame, const rtl::OUString& aURL, + const Sequence< PropertyValue >& aArgs, + const Reference< XLoadEventListener > & aListener); + + BibDataManager* GetDataManager()const; + Reference< XNameAccess > GetDataColumns() const; + Reference< XResultSet > GetDataCursor() const; + Reference< sdb::XColumn > GetIdentifierColumn() const; + +public: + BibliographyLoader(); + ~BibliographyLoader(); + + // XServiceInfo + rtl::OUString SAL_CALL getImplementationName() throw( ); + sal_Bool SAL_CALL supportsService(const rtl::OUString& ServiceName) throw( ); + Sequence< rtl::OUString > SAL_CALL getSupportedServiceNames(void) throw( ); + static rtl::OUString getImplementationName_Static() throw( ) + + { + //! + return C2U("com.sun.star.extensions.Bibliography"); + //! + } + + //XNameAccess + virtual Any SAL_CALL getByName(const rtl::OUString& aName) throw ( NoSuchElementException, WrappedTargetException, RuntimeException ); + virtual Sequence< rtl::OUString > SAL_CALL getElementNames(void) throw ( RuntimeException ); + virtual sal_Bool SAL_CALL hasByName(const rtl::OUString& aName) throw ( RuntimeException ); + + //XElementAccess + virtual Type SAL_CALL getElementType(void) throw ( RuntimeException ); + virtual sal_Bool SAL_CALL hasElements(void) throw ( RuntimeException ); + + //XPropertySet + virtual Reference< XPropertySetInfo > SAL_CALL getPropertySetInfo(void) throw ( RuntimeException ); + virtual void SAL_CALL setPropertyValue(const rtl::OUString& PropertyName, const Any& aValue) throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException, RuntimeException ); + virtual Any SAL_CALL getPropertyValue(const rtl::OUString& PropertyName) throw ( UnknownPropertyException, WrappedTargetException, RuntimeException ); + virtual void SAL_CALL addPropertyChangeListener(const rtl::OUString& PropertyName, const Reference< XPropertyChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException ); + virtual void SAL_CALL removePropertyChangeListener(const rtl::OUString& PropertyName, const Reference< XPropertyChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException ); + virtual void SAL_CALL addVetoableChangeListener(const rtl::OUString& PropertyName, const Reference< XVetoableChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException ); + virtual void SAL_CALL removeVetoableChangeListener(const rtl::OUString& PropertyName, const Reference< XVetoableChangeListener > & aListener) throw( UnknownPropertyException, WrappedTargetException, RuntimeException ); + + static Sequence<rtl::OUString> SAL_CALL getSupportedServiceNames_Static(void) throw( ); + + friend Reference< XInterface > SAL_CALL BibliographyLoader_CreateInstance( const Reference< XMultiServiceFactory > & rSMgr ) throw( Exception ); + + // XLoader + virtual void SAL_CALL load(const Reference< XFrame > & aFrame, const rtl::OUString& aURL, + const Sequence< PropertyValue >& aArgs, + const Reference< XLoadEventListener > & aListener) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL cancel(void) throw (::com::sun::star::uno::RuntimeException); +}; + +BibliographyLoader::BibliographyLoader() : + m_pBibMod(0), + m_pDatMan(0) +{ +} + +BibliographyLoader::~BibliographyLoader() +{ + Reference< lang::XComponent > xComp(m_xCursor, UNO_QUERY); + if (xComp.is()) + xComp->dispose(); + if(m_pBibMod) + CloseBibModul(m_pBibMod); +} + + +Reference< XInterface > SAL_CALL BibliographyLoader_CreateInstance( const Reference< XMultiServiceFactory > & /*rSMgr*/ ) throw( Exception ) +{ + return *(new BibliographyLoader); +} + + +// XServiceInfo +rtl::OUString BibliographyLoader::getImplementationName() throw( ) + +{ + return getImplementationName_Static(); +} + +// XServiceInfo +sal_Bool BibliographyLoader::supportsService(const rtl::OUString& ServiceName) throw( ) +{ + Sequence< rtl::OUString > aSNL = getSupportedServiceNames(); + const rtl::OUString * pArray = aSNL.getConstArray(); + for( sal_Int32 i = 0; i < aSNL.getLength(); i++ ) + if( pArray[i] == ServiceName ) + return sal_True; + return sal_False; +} + +// XServiceInfo +Sequence< rtl::OUString > BibliographyLoader::getSupportedServiceNames(void) throw( ) +{ + return getSupportedServiceNames_Static(); +} + +// ORegistryServiceManager_Static +Sequence< rtl::OUString > BibliographyLoader::getSupportedServiceNames_Static(void) throw( ) +{ + Sequence< rtl::OUString > aSNS( 2 ); + aSNS.getArray()[0] = C2U("com.sun.star.frame.FrameLoader"); + //! + aSNS.getArray()[1] = C2U("com.sun.star.frame.Bibliography"); + //! + return aSNS; +} + +extern "C" +{ + void SAL_CALL component_getImplementationEnvironment( + const sal_Char ** ppEnvTypeName, uno_Environment ** /*ppEnv*/ ) + { + *ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME; + } + + void * SAL_CALL component_getFactory( + const sal_Char * pImplName, XMultiServiceFactory * pServiceManager, void * /*pRegistryKey*/ ) + { + void * pRet = 0; + if (!BibliographyLoader::getImplementationName_Static().compareToAscii( pImplName ) ) + { + // create the factory + Reference< XSingleServiceFactory > xFactory = + cppu::createSingleFactory( + pServiceManager, + BibliographyLoader::getImplementationName_Static(), + BibliographyLoader_CreateInstance, + BibliographyLoader::getSupportedServiceNames_Static() ); + // acquire, because we return an interface pointer instead of a reference + xFactory->acquire(); + pRet = xFactory.get(); + } + return pRet; + } + +} +// ----------------------------------------------------------------------- +void BibliographyLoader::cancel(void) throw (::com::sun::star::uno::RuntimeException) +{ + //! + //! +} + +// ----------------------------------------------------------------------- +void BibliographyLoader::load(const Reference< XFrame > & rFrame, const rtl::OUString& rURL, + const Sequence< PropertyValue >& rArgs, + const Reference< XLoadEventListener > & rListener) throw (::com::sun::star::uno::RuntimeException) +{ + //! + + vos::OGuard aGuard(Application::GetSolarMutex()); + m_pBibMod = OpenBibModul(); + + String aURLStr( rURL ); + String aPartName = aURLStr.GetToken( 1, '/' ); + Reference<XPropertySet> xPrSet(rFrame, UNO_QUERY); + if(xPrSet.is()) + { + Any aTitle; + aTitle <<= OUString(String(BibResId(RID_BIB_STR_FRAME_TITLE))); + xPrSet->setPropertyValue(C2U("Title"), aTitle); + } + if(aPartName.EqualsAscii("View") || aPartName.EqualsAscii("View1")) + { + loadView(rFrame, rURL, rArgs, rListener); + } +} + +// ----------------------------------------------------------------------- +void BibliographyLoader::loadView(const Reference< XFrame > & rFrame, const rtl::OUString& /*rURL*/, + const Sequence< PropertyValue >& /*rArgs*/, + const Reference< XLoadEventListener > & rListener) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + //! + if(!m_pBibMod) + m_pBibMod = OpenBibModul(); + +/* + //create the menu + ResMgr* pResMgr = (*m_pBibMod)->GetResMgr(); + INetURLObject aEntry( URIHelper::SmartRelToAbs(pResMgr->GetFileName()) ); + String aMenuRes( RTL_CONSTASCII_USTRINGPARAM( "private:resource/" )); + aMenuRes += ( aEntry.GetName() += '/' ); + aMenuRes+=String::CreateFromInt32(RID_MAIN_MENU); + + util::URL aURL; + aURL.Complete = aMenuRes; + + Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + Reference< util::XURLTransformer > xTrans ( xMgr->createInstance( C2U("com.sun.star.util.URLTransformer") ), UNO_QUERY ); + if( xTrans.is() ) + { + // Datei laden + xTrans->parseStrict( aURL ); + + Reference< XDispatchProvider > xProv( rFrame, UNO_QUERY ); + if ( xProv.is() ) + { + Reference< XDispatch > aDisp = xProv->queryDispatch( aURL, C2U("_menubar"), 12 ); + if ( aDisp.is() ) + aDisp->dispatch( aURL, Sequence<PropertyValue>() ); + } + } +*/ + m_pDatMan = (*m_pBibMod)->createDataManager(); + m_xDatMan = m_pDatMan; + BibDBDescriptor aBibDesc = BibModul::GetConfig()->GetBibliographyURL(); + + if(!aBibDesc.sDataSource.getLength()) + { + DBChangeDialogConfig_Impl aConfig; + const Sequence<OUString> aSources = aConfig.GetDataSourceNames(); + if(aSources.getLength()) + aBibDesc.sDataSource = aSources.getConstArray()[0]; + } + + Reference< XForm > xForm = m_pDatMan->createDatabaseForm( aBibDesc ); + + Reference< awt::XWindow > aWindow = rFrame->getContainerWindow(); + VCLXWindow* pParentComponent = VCLXWindow::GetImplementation(aWindow); + + Window* pParent = VCLUnoHelper::GetWindow( aWindow ); + + BibBookContainer *pMyWindow = new BibBookContainer( pParent, m_pDatMan ); + pMyWindow->Show(); + + ::bib::BibView* pView = new ::bib::BibView( pMyWindow, m_pDatMan, WB_VSCROLL | WB_HSCROLL | WB_3DLOOK ); + pView->Show(); + m_pDatMan->SetView( pView ); + + ::bib::BibBeamer* pBeamer = new ::bib::BibBeamer( pMyWindow, m_pDatMan ); + pBeamer->Show(); + pMyWindow->createTopFrame(pBeamer); + + pMyWindow->createBottomFrame(pView); + + Reference< awt::XWindow > xWin ( pMyWindow->GetComponentInterface(), UNO_QUERY ); + + Reference< XController > xCtrRef( new BibFrameController_Impl( xWin, m_pDatMan ) ); + + xCtrRef->attachFrame(rFrame); + rFrame->setComponent( xWin, xCtrRef); + pBeamer->SetXController(xCtrRef); + //! + + // not earlier because SetFocus() is triggered in setVisible() + pParentComponent->setVisible(sal_True); + + m_xDatMan->load(); + // #100312# ---------- + m_pDatMan->RegisterInterceptor(pBeamer); + + if ( rListener.is() ) + rListener->loadFinished( this ); + + // attach menu bar + Reference< XPropertySet > xPropSet( rFrame, UNO_QUERY ); + Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager; + if ( xPropSet.is() ) + { + try + { + Any a = xPropSet->getPropertyValue( OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" ))); + a >>= xLayoutManager; + } + catch ( uno::Exception& ) + { + } + } + + if ( xLayoutManager.is() ) + xLayoutManager->createElement( OUString( RTL_CONSTASCII_USTRINGPARAM( "private:resource/menubar/menubar" ))); +} +/* -----------------06.12.99 14:37------------------- + + --------------------------------------------------*/ +BibDataManager* BibliographyLoader::GetDataManager()const +{ + if(!m_pDatMan) + { + if(!m_pBibMod) + const_cast< BibliographyLoader* >( this )->m_pBibMod = OpenBibModul(); + const_cast< BibliographyLoader* >( this )->m_pDatMan = (*m_pBibMod)->createDataManager(); + const_cast< BibliographyLoader* >( this )->m_xDatMan = m_pDatMan; + } + return m_pDatMan; +} +/* -----------------06.12.99 14:39------------------- + + --------------------------------------------------*/ +Reference< XNameAccess > BibliographyLoader::GetDataColumns() const +{ + if (!m_xColumns.is()) + { + Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + Reference< XRowSet > xRowSet(xMgr->createInstance(C2U("com.sun.star.sdb.RowSet")), UNO_QUERY); + Reference< XPropertySet > xResultSetProps(xRowSet, UNO_QUERY); + DBG_ASSERT(xResultSetProps.is() , "BibliographyLoader::GetDataCursor : invalid row set (no XResultSet or no XPropertySet) !"); + + BibDBDescriptor aBibDesc = BibModul::GetConfig()->GetBibliographyURL(); + + Any aBibUrlAny; aBibUrlAny <<= aBibDesc.sDataSource; + xResultSetProps->setPropertyValue(C2U("DataSourceName"), aBibUrlAny); + Any aCommandType; aCommandType <<= aBibDesc.nCommandType; + xResultSetProps->setPropertyValue(C2U("CommandType"), aCommandType); + Any aTableName; aTableName <<= aBibDesc.sTableOrQuery; + xResultSetProps->setPropertyValue(C2U("Command"), aTableName); + Any aResultSetType; aResultSetType <<= (sal_Int32)(ResultSetType::SCROLL_INSENSITIVE); + xResultSetProps->setPropertyValue(C2U("ResultSetType"), aResultSetType); + Any aResultSetCurrency; aResultSetCurrency <<= (sal_Int32)(ResultSetConcurrency::UPDATABLE); + xResultSetProps->setPropertyValue(C2U("ResultSetConcurrency"), aResultSetCurrency); + + sal_Bool bSuccess = sal_False; + try + { + xRowSet->execute(); + bSuccess = sal_True; + } + catch(const SQLException&) + { + DBG_UNHANDLED_EXCEPTION(); + } + catch(const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + bSuccess = sal_False; + } + + if (!bSuccess) + { + Reference< XComponent > xSetComp(xRowSet, UNO_QUERY); + if (xSetComp.is()) + xSetComp->dispose(); + xRowSet = NULL; + } + else + ((BibliographyLoader*)this)->m_xCursor = xRowSet.get(); + + Reference< sdbcx::XColumnsSupplier > xSupplyCols(m_xCursor, UNO_QUERY); + if (xSupplyCols.is()) + ((BibliographyLoader*)this)->m_xColumns = xSupplyCols->getColumns(); + } + + return m_xColumns; +} +/* -----------------17.12.99 12:29------------------- + + --------------------------------------------------*/ +Reference< sdb::XColumn > BibliographyLoader::GetIdentifierColumn() const +{ + BibDataManager* pDatMan = GetDataManager(); + Reference< XNameAccess > xColumns = GetDataColumns(); + rtl::OUString sIdentifierColumnName = pDatMan->GetIdentifierMapping(); + + Reference< sdb::XColumn > xReturn; + if (xColumns.is() && xColumns->hasByName(sIdentifierColumnName)) + { + xReturn = Reference< XColumn > (*(Reference< XInterface > *) + xColumns->getByName(sIdentifierColumnName).getValue(), UNO_QUERY); + } + return xReturn; +} + +/* -----------------06.12.99 15:05------------------- + + --------------------------------------------------*/ +Reference< XResultSet > BibliographyLoader::GetDataCursor() const +{ + if (!m_xCursor.is()) + GetDataColumns(); + if (m_xCursor.is()) + m_xCursor->first(); + return m_xCursor; +} + +/*-- 17.11.99 12:51:38--------------------------------------------------- + + -----------------------------------------------------------------------*/ +rtl::OUString lcl_AddProperty(Reference< XNameAccess > xColumns, + const Mapping* pMapping, const String& rColumnName) +{ + String sColumnName(rColumnName); + if(pMapping) + { + for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) + { + if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == OUString(rColumnName)) + { + sColumnName = pMapping->aColumnPairs[nEntry].sRealColumnName; + break; + } + } + } + rtl::OUString uColumnName(sColumnName); + rtl::OUString uRet; + Reference< sdb::XColumn > xCol; + if (xColumns->hasByName(uColumnName)) + xCol = Reference< sdb::XColumn > (*(Reference< XInterface > *)xColumns->getByName(uColumnName).getValue(), UNO_QUERY); + if (xCol.is()) + uRet = xCol->getString(); + return uRet; +} +//----------------------------------------------------------------------------- +Any BibliographyLoader::getByName(const rtl::OUString& rName) throw + ( NoSuchElementException, WrappedTargetException, RuntimeException ) +{ + Any aRet; + try + { + BibDataManager* pDatMan = ((BibliographyLoader*)this)->GetDataManager(); + Reference< XResultSet > xCursor = GetDataCursor(); + Reference< sdbcx::XColumnsSupplier > xSupplyCols(xCursor, UNO_QUERY); + Reference< XNameAccess > xColumns; + if (!xSupplyCols.is()) + return aRet; + xColumns = xSupplyCols->getColumns(); + DBG_ASSERT(xSupplyCols.is(), "BibliographyLoader::getByName : invalid columns returned by the data cursor (may be the result set is not alive ?) !"); + if (!xColumns.is()) + return aRet; + + String sIdentifierMapping = pDatMan->GetIdentifierMapping(); + rtl::OUString sId = sIdentifierMapping; + Reference< sdb::XColumn > xColumn; + if (xColumns->hasByName(sId)) + xColumn = Reference< sdb::XColumn > (*(Reference< XInterface > *)xColumns->getByName(sId).getValue(), UNO_QUERY); + if (xColumn.is()) + { + do + { + if ((rName == xColumn->getString()) && !xColumn->wasNull()) + { + Sequence<PropertyValue> aPropSequ(COLUMN_COUNT); + PropertyValue* pValues = aPropSequ.getArray(); + BibConfig* pConfig = BibModul::GetConfig(); + BibDBDescriptor aBibDesc = BibModul::GetConfig()->GetBibliographyURL(); + const Mapping* pMapping = pConfig->GetMapping(aBibDesc); + for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) + { + const String sColName = pConfig->GetDefColumnName( + nEntry); + pValues[nEntry].Name = sColName; + pValues[nEntry].Value <<= lcl_AddProperty(xColumns, pMapping, sColName); + } + aRet.setValue(&aPropSequ, ::getCppuType((Sequence<PropertyValue>*)0)); + + break; + } + } + while(xCursor->next()); + } + } + catch(const Exception&) + { + DBG_UNHANDLED_EXCEPTION(); + } + return aRet; +} +/*-- 17.11.99 12:51:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ +Sequence< rtl::OUString > BibliographyLoader::getElementNames(void) throw ( RuntimeException ) +{ + Sequence< rtl::OUString > aRet(10); + int nRealNameCount = 0; + try + { + Reference< XResultSet > xCursor(GetDataCursor()); + Reference< sdb::XColumn > xIdColumn(GetIdentifierColumn()); + if (xIdColumn.is()) // implies xCursor.is() + { + do + { + rtl::OUString sTemp = xIdColumn->getString(); + if (sTemp.getLength() && !xIdColumn->wasNull()) + { + int nLen = aRet.getLength(); + if(nLen == nRealNameCount) + aRet.realloc(nLen + 10); + rtl::OUString* pArray = aRet.getArray(); + pArray[nRealNameCount] = sTemp; + nRealNameCount++; + } + } + while (xCursor->next()); + } + } + catch(const Exception&) + { + DBG_UNHANDLED_EXCEPTION(); + } + + aRet.realloc(nRealNameCount); + return aRet; +} +/*-- 17.11.99 12:51:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool BibliographyLoader::hasByName(const rtl::OUString& rName) throw ( RuntimeException ) +{ + sal_Bool bRet = sal_False; + try + { + Reference< XResultSet > xCursor = GetDataCursor(); + Reference< sdb::XColumn > xIdColumn = GetIdentifierColumn(); + + if (xIdColumn.is()) // implies xCursor.is() + { + do + { + rtl::OUString sCurrentId = xIdColumn->getString(); + if (!xIdColumn->wasNull() && (rName.compareTo(sCurrentId) == COMPARE_EQUAL)) + { + bRet = sal_True; + break; + } + } + while(xCursor->next()); + } + } + catch(const Exception&) + { + DBG_UNHANDLED_EXCEPTION(); + } + return bRet; +} +/*-- 17.11.99 12:51:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ +Type BibliographyLoader::getElementType(void) throw ( RuntimeException ) +{ + return ::getCppuType((Sequence<PropertyValue>*)0); +} +/*-- 17.11.99 12:51:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool BibliographyLoader::hasElements(void) throw ( RuntimeException ) +{ + Reference< XResultSet > xCursor = GetDataCursor(); + Reference< XNameAccess > xColumns = GetDataColumns(); + return xColumns.is() && (xColumns->getElementNames().getLength() != 0); +} + +/*-- 07.12.99 14:28:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ +Reference< XPropertySetInfo > BibliographyLoader::getPropertySetInfo(void) throw + ( RuntimeException ) +{ + static SfxItemPropertyMapEntry aBibProps_Impl[] = + { + { MAP_CHAR_LEN("BibliographyDataFieldNames"), 0, &::getCppuType((Sequence<PropertyValue>*)0), PropertyAttribute::READONLY, 0}, + {0,0,0,0,0,0} + }; + static Reference< XPropertySetInfo > xRet = + SfxItemPropertySet(aBibProps_Impl).getPropertySetInfo(); + return xRet; +} +/*-- 07.12.99 14:28:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void BibliographyLoader::setPropertyValue(const rtl::OUString& /*PropertyName*/, + const Any& /*aValue*/) + throw( UnknownPropertyException, PropertyVetoException, + IllegalArgumentException, WrappedTargetException, RuntimeException) +{ + throw UnknownPropertyException(); + //no changeable properties +} +/*-- 07.12.99 14:28:39--------------------------------------------------- + + -----------------------------------------------------------------------*/ +Any BibliographyLoader::getPropertyValue(const rtl::OUString& rPropertyName) + throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) +{ + Any aRet; + static const sal_uInt16 aInternalMapping[] = + { + IDENTIFIER_POS , // BibliographyDataField_IDENTIFIER + AUTHORITYTYPE_POS , // BibliographyDataField_BIBILIOGRAPHIC_TYPE + ADDRESS_POS , // BibliographyDataField_ADDRESS + ANNOTE_POS , // BibliographyDataField_ANNOTE + AUTHOR_POS , // BibliographyDataField_AUTHOR + BOOKTITLE_POS , // BibliographyDataField_BOOKTITLE + CHAPTER_POS , // BibliographyDataField_CHAPTER + EDITION_POS , // BibliographyDataField_EDITION + EDITOR_POS , // BibliographyDataField_EDITOR + HOWPUBLISHED_POS , // BibliographyDataField_HOWPUBLISHED + INSTITUTION_POS , // BibliographyDataField_INSTITUTION + JOURNAL_POS , // BibliographyDataField_JOURNAL + MONTH_POS , // BibliographyDataField_MONTH + NOTE_POS , // BibliographyDataField_NOTE + NUMBER_POS , // BibliographyDataField_NUMBER + ORGANIZATIONS_POS , // BibliographyDataField_ORGANIZATIONS + PAGES_POS , // BibliographyDataField_PAGES + PUBLISHER_POS , // BibliographyDataField_PUBLISHER + SCHOOL_POS , // BibliographyDataField_SCHOOL + SERIES_POS , // BibliographyDataField_SERIES + TITLE_POS , // BibliographyDataField_TITLE + REPORTTYPE_POS , // BibliographyDataField_REPORT_TYPE + VOLUME_POS , // BibliographyDataField_VOLUME + YEAR_POS , // BibliographyDataField_YEAR + URL_POS , // BibliographyDataField_URL + CUSTOM1_POS , // BibliographyDataField_CUSTOM1 + CUSTOM2_POS , // BibliographyDataField_CUSTOM2 + CUSTOM3_POS , // BibliographyDataField_CUSTOM3 + CUSTOM4_POS , // BibliographyDataField_CUSTOM4 + CUSTOM5_POS , // BibliographyDataField_CUSTOM5 + ISBN_POS //BibliographyDataField_ISBN + }; + if(C2U("BibliographyDataFieldNames") == rPropertyName) + { + Sequence<PropertyValue> aSeq(COLUMN_COUNT); + PropertyValue* pArray = aSeq.getArray(); + BibConfig* pConfig = BibModul::GetConfig(); + for(sal_uInt16 i = 0; i <= text::BibliographyDataField::ISBN ; i++) + { + pArray[i].Name = pConfig->GetDefColumnName(aInternalMapping[i]); + pArray[i].Value <<= (sal_Int16) i; + } + aRet.setValue(&aSeq, ::getCppuType((Sequence<PropertyValue>*)0)); + } + else + throw UnknownPropertyException(); + return aRet; +} +/*-- 07.12.99 14:28:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void BibliographyLoader::addPropertyChangeListener( + const rtl::OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/) + throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) +{ + //no bound properties +} +/*-- 07.12.99 14:28:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void BibliographyLoader::removePropertyChangeListener( + const rtl::OUString& /*PropertyName*/, const Reference< XPropertyChangeListener > & /*aListener*/) + throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) +{ + //no bound properties +} +/*-- 07.12.99 14:28:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void BibliographyLoader::addVetoableChangeListener( + const rtl::OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/) + throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) +{ + //no vetoable properties +} +/*-- 07.12.99 14:28:40--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void BibliographyLoader::removeVetoableChangeListener( + const rtl::OUString& /*PropertyName*/, const Reference< XVetoableChangeListener > & /*aListener*/) + throw( UnknownPropertyException, WrappedTargetException, RuntimeException ) +{ + //no vetoable properties +} + + + diff --git a/extensions/source/bibliography/bibmod.cxx b/extensions/source/bibliography/bibmod.cxx new file mode 100644 index 000000000000..97ff0ce9cc86 --- /dev/null +++ b/extensions/source/bibliography/bibmod.cxx @@ -0,0 +1,122 @@ +/************************************************************************* + * + * 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_extensions.hxx" + + +#include <tools/resmgr.hxx> +#include <tools/urlobj.hxx> +#include <svl/urihelper.hxx> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/util/XLocalizedAliases.hpp> +#include <com/sun/star/lang/XLocalizable.hpp> +#include <tools/debug.hxx> + +#include "bibmod.hxx" +#include "bibresid.hxx" +#include "datman.hxx" +#include "bibconfig.hxx" +static PtrBibModul pBibModul=NULL; +static sal_uInt32 nBibModulCount=0; +#include <ucbhelper/content.hxx> + +using namespace ::rtl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::util; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::ucb; + +#define C2U(cChar) OUString::createFromAscii(cChar) +#define C2S(cChar) String::CreateFromAscii(cChar) + +HdlBibModul OpenBibModul() +{ + if(pBibModul==NULL) + { + pBibModul=new BibModul(); + } + nBibModulCount++; + return &pBibModul; +} + +void CloseBibModul(HdlBibModul ppBibModul) +{ + nBibModulCount--; + if(nBibModulCount==0 && ppBibModul!=NULL) + { + delete pBibModul; + pBibModul=NULL; + } +} + +BibResId::BibResId( sal_uInt16 nId ) : + ResId( nId, *pBibModul->GetResMgr() ) +{ +} +BibConfig* BibModul::pBibConfig = 0; +BibModul::BibModul() +{ + pResMgr = ResMgr::CreateResMgr( "bib" ); +} + +BibModul::~BibModul() +{ + delete pResMgr; + delete pBibConfig; + pBibConfig = 0; +} + +BibDataManager* BibModul::createDataManager() +{ + return new BibDataManager(); +} +//----------------------------------------------------------------------------- +BibConfig* BibModul::GetConfig() +{ + if(! pBibConfig) + pBibConfig = new BibConfig; + return pBibConfig; +} + + +// PropertyNames +#define STATIC_USTRING(a,b) rtl::OUString a(b) +STATIC_USTRING(FM_PROP_LABEL,C2U("Label")); +STATIC_USTRING(FM_PROP_CONTROLSOURCE,C2U("DataField")); +STATIC_USTRING(FM_PROP_NAME,C2U("Name")); +STATIC_USTRING(FM_PROP_FORMATKEY,C2U("FormatKey")); +#ifdef TF_SDBAPI +#else // !TF_SDBAPI +STATIC_USTRING(FM_PROP_EDITMODE,C2U("RecordMode")); +STATIC_USTRING(FM_PROP_CURSORSOURCETYPE,C2U("DataSelectionType")); +STATIC_USTRING(FM_PROP_CURSORSOURCE,C2U("DataSelection")); +STATIC_USTRING(FM_PROP_DATASOURCE, C2U("DataSource")); +#endif // !TF_SDBAPI +STATIC_USTRING(FM_PROP_VALUE,C2U("Value")); +STATIC_USTRING(FM_PROP_TEXT,C2U("Text")); diff --git a/extensions/source/bibliography/bibmod.hxx b/extensions/source/bibliography/bibmod.hxx new file mode 100644 index 000000000000..3e244f995607 --- /dev/null +++ b/extensions/source/bibliography/bibmod.hxx @@ -0,0 +1,65 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef BIBMOD_HXX +#define BIBMOD_HXX + + +class ResMgr; +class BibDataManager; +class BibConfig; + +#define BIBLIOGRAPHY_INI_GROUP "Bibliography" +#define BIBLIOGRAPHY_INI_CUR_NAME "BibliographyCurrent" +#define BIBLIOGRAPHY_INI_DB_ENTRY "Bibliography" +#define BIBLIOGRAPHY_INI_MAPPING "BibliographyFields" +#define BIBLIOGRAPHY_TYPE_NAMES "BibliographyTypeNames" + +class BibModul +{ + private: + ResMgr* pResMgr; + static BibConfig* pBibConfig; + + public: + BibModul(); + ~BibModul(); + + ResMgr* GetResMgr(){return pResMgr;} + static BibConfig* GetConfig(); + + BibDataManager* createDataManager(); + +}; + +typedef BibModul* PtrBibModul; +typedef PtrBibModul* HdlBibModul; + +HdlBibModul OpenBibModul(); +void CloseBibModul(HdlBibModul ppBibModul); + +#endif diff --git a/extensions/source/bibliography/bibprop.hrc b/extensions/source/bibliography/bibprop.hrc new file mode 100644 index 000000000000..42767a2c01b1 --- /dev/null +++ b/extensions/source/bibliography/bibprop.hrc @@ -0,0 +1,45 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#ifndef _BIB_FMPROP_HRC +#define _BIB_FMPROP_HRC + +extern rtl::OUString FM_PROP_LABEL; +extern rtl::OUString FM_PROP_NAME; +extern rtl::OUString FM_PROP_CONTROLSOURCE; +extern rtl::OUString FM_PROP_FORMATKEY; +extern rtl::OUString FM_PROP_VALUE; +#ifdef TF_SDBAPI +#else // !TF_SDBAPI +extern rtl::OUString FM_PROP_EDITMODE; +extern rtl::OUString FM_PROP_DATASOURCE; +extern rtl::OUString FM_PROP_CURSORSOURCE; +extern rtl::OUString FM_PROP_CURSORSOURCETYPE; +#endif // !TF_SDBAPI +extern rtl::OUString FM_PROP_TEXT; + +#endif // _SVX_FMPROP_HRC + diff --git a/extensions/source/bibliography/bibresid.hxx b/extensions/source/bibliography/bibresid.hxx new file mode 100644 index 000000000000..75b61129b96e --- /dev/null +++ b/extensions/source/bibliography/bibresid.hxx @@ -0,0 +1,44 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef ADRRESID_HXX +#define ADRRESID_HXX + +#include <tools/resid.hxx> + +//=================================================================== + +class BibResId : public ResId +{ + public: + BibResId( sal_uInt16 nId ); +}; + + + +#endif // ADRRESID_HXX + diff --git a/extensions/source/bibliography/bibshortcuthandler.hxx b/extensions/source/bibliography/bibshortcuthandler.hxx new file mode 100644 index 000000000000..0ef8c6fcf9a2 --- /dev/null +++ b/extensions/source/bibliography/bibshortcuthandler.hxx @@ -0,0 +1,87 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BIBSHORTCUTHANDLER_HXX +#define _BIBSHORTCUTHANDLER_HXX + +#include <vcl/window.hxx> +#include <vcl/splitwin.hxx> +#include <vcl/tabpage.hxx> + +// additional classes to handle shortcuts +// code in bibcont.cxx + + +class BibShortCutHandler +{ +private: + Window* pBaseClass; // in cases, where BibShortCutHandler also has to be a window + +protected: + inline BibShortCutHandler( Window* pBaseClass ); + +public: + virtual ~BibShortCutHandler(); + virtual sal_Bool HandleShortCutKey( const KeyEvent& rKeyEvent ); // returns true, if key was handled + + inline Window* GetWindow( void ); +}; + +inline BibShortCutHandler::BibShortCutHandler( Window* _pBaseClass ) : pBaseClass( _pBaseClass ) +{ +} + +inline Window* BibShortCutHandler::GetWindow( void ) +{ + return pBaseClass; +} + + +class BibWindow : public Window, public BibShortCutHandler +{ +public: + BibWindow( Window* pParent,WinBits nStyle = WB_3DLOOK); + virtual ~BibWindow(); +}; + + +class BibSplitWindow : public SplitWindow, public BibShortCutHandler +{ +public: + BibSplitWindow( Window* pParent,WinBits nStyle = WB_3DLOOK); + virtual ~BibSplitWindow(); +}; + + +class BibTabPage : public TabPage, public BibShortCutHandler +{ +public: + BibTabPage( Window* pParent, const ResId& rResId ); + virtual ~BibTabPage(); +}; + +#endif diff --git a/extensions/source/bibliography/bibtools.hxx b/extensions/source/bibliography/bibtools.hxx new file mode 100644 index 000000000000..22b9e07faac2 --- /dev/null +++ b/extensions/source/bibliography/bibtools.hxx @@ -0,0 +1,50 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef BIBTOOLS_HXX + +#include <vcl/taskpanelist.hxx> // includes also vcl/window.hxx + +namespace bib +{ + // source in bibbeam.cxx + + void HandleTaskPaneList( Window* pWindow, sal_Bool bAddToList ); + // pWindow: just an system window or something wich is child of a system window + + inline void AddToTaskPaneList( Window* pWindowToBeHandled ) + { + HandleTaskPaneList( pWindowToBeHandled, sal_True ); + } + + inline void RemoveFromTaskPaneList( Window* pWindowToBeHandled ) + { + HandleTaskPaneList( pWindowToBeHandled, sal_False ); + } +} + +#endif diff --git a/extensions/source/bibliography/bibview.cxx b/extensions/source/bibliography/bibview.cxx new file mode 100644 index 000000000000..76f489f17bf5 --- /dev/null +++ b/extensions/source/bibliography/bibview.cxx @@ -0,0 +1,232 @@ +/************************************************************************* + * + * 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_extensions.hxx" + +#ifndef BIB_HRC +#include "bib.hrc" +#endif +#include "bibcont.hxx" +#include "bibbeam.hxx" +#include "bibmod.hxx" +#include "general.hxx" +#include "bibview.hxx" +#include "datman.hxx" +#include "bibresid.hxx" +#include "bibmod.hxx" +#include "sections.hrc" +#include "bibconfig.hxx" + + +#include <vcl/svapp.hxx> +#include <com/sun/star/sdbc/XResultSetUpdate.hpp> +#include <com/sun/star/form/XLoadable.hpp> +#include <vcl/msgbox.hxx> +#include <tools/debug.hxx> + +using namespace ::com::sun::star; +using namespace ::com::sun::star::form; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::lang; +using namespace ::com::sun::star::uno; + +#define C2U( cChar ) ::rtl::OUString::createFromAscii( cChar ) + +//......................................................................... +namespace bib +{ +//......................................................................... + + // ----------------------------------------------------------------------- + BibView::BibView( Window* _pParent, BibDataManager* _pManager, WinBits _nStyle ) + :BibWindow( _pParent, _nStyle ) + ,m_pDatMan( _pManager ) + ,m_xDatMan( _pManager ) + ,m_pGeneralPage( NULL ) + { + if ( m_xDatMan.is() ) + connectForm( m_xDatMan ); + } + + // ----------------------------------------------------------------------- + BibView::~BibView() + { + BibGeneralPage* pGeneralPage = m_pGeneralPage; + m_pGeneralPage = NULL; + + pGeneralPage->CommitActiveControl(); + Reference< XForm > xForm = m_pDatMan->getForm(); + Reference< XPropertySet > xProps( xForm, UNO_QUERY ); + Reference< sdbc::XResultSetUpdate > xResUpd( xProps, UNO_QUERY ); + DBG_ASSERT( xResUpd.is(), "BibView::~BibView: invalid form!" ); + + if ( xResUpd.is() ) + { + Any aModified = xProps->getPropertyValue( C2U( "IsModified" ) ); + sal_Bool bFlag = sal_False; + if ( ( aModified >>= bFlag ) && bFlag ) + { + + try + { + Any aNew = xProps->getPropertyValue( C2U( "IsNew" ) ); + aNew >>= bFlag; + if ( bFlag ) + xResUpd->insertRow(); + else + xResUpd->updateRow(); + } + catch( const uno::Exception& rEx) + { + (void) rEx; + } + } + } + + if ( isFormConnected() ) + disconnectForm(); + + pGeneralPage->RemoveListeners(); + m_xGeneralPage = NULL; + } + + /* -----------------16.11.99 13:13------------------- + + --------------------------------------------------*/ + void BibView::UpdatePages() + { + // TODO: + // this is _strange_: Why not updating the existent general page? + // I consider the current behaviour a HACK. + // frank.schoenheit@sun.com + if ( m_pGeneralPage ) + { + m_pGeneralPage->Hide(); + m_pGeneralPage->RemoveListeners(); + m_xGeneralPage = 0; + } + + m_xGeneralPage = m_pGeneralPage = new BibGeneralPage( this, m_pDatMan ); + + Resize(); + + if( HasFocus() ) + // "delayed" GetFocus() because GetFocus() is initially called before GeneralPage is created + m_pGeneralPage->GrabFocus(); + + String sErrorString( m_pGeneralPage->GetErrorString() ); + if ( sErrorString.Len() ) + { + sal_Bool bExecute = BibModul::GetConfig()->IsShowColumnAssignmentWarning(); + if(!m_pDatMan->HasActiveConnection()) + { + //no connection is available -> the data base has to be assigned + m_pDatMan->DispatchDBChangeDialog(); + bExecute = sal_False; + } + else if(bExecute) + { + sErrorString += '\n'; + sErrorString += String( BibResId( RID_MAP_QUESTION ) ); + QueryBox aQuery( this, WB_YES_NO, sErrorString ); + aQuery.SetDefaultCheckBoxText(); + short nResult = aQuery.Execute(); + BibModul::GetConfig()->SetShowColumnAssignmentWarning( + !aQuery.GetCheckBoxState()); + if( RET_YES != nResult ) + { + bExecute = sal_False; + } + } + if(bExecute) + { + Application::PostUserEvent( STATIC_LINK( this, BibView, CallMappingHdl ) ); + } + } + } + //--------------------------------------------------------------------- + //--- 19.10.01 16:55:49 ----------------------------------------------- + + void BibView::_loaded( const EventObject& _rEvent ) + { + UpdatePages(); + FormControlContainer::_loaded( _rEvent ); + } + + void BibView::_reloaded( const EventObject& _rEvent ) + { + UpdatePages(); + FormControlContainer::_loaded( _rEvent ); + } + + /* -----------------------------02.02.00 16:49-------------------------------- + + ---------------------------------------------------------------------------*/ + IMPL_STATIC_LINK( BibView, CallMappingHdl, BibView*, EMPTYARG ) + { + pThis->m_pDatMan->CreateMappingDialog( pThis ); + return 0; + } + /* -----------------------------13.04.00 16:12-------------------------------- + + ---------------------------------------------------------------------------*/ + void BibView::Resize() + { + if ( m_pGeneralPage ) + { + ::Size aSz( GetOutputSizePixel() ); + m_pGeneralPage->SetSizePixel( aSz ); + } + Window::Resize(); + } + + //--------------------------------------------------------------------- + //--- 18.10.01 18:52:45 ----------------------------------------------- + + Reference< awt::XControlContainer > BibView::getControlContainer() + { + Reference< awt::XControlContainer > xReturn; + if ( m_pGeneralPage ) + xReturn = m_pGeneralPage->GetControlContainer(); + return xReturn; + } + + void BibView::GetFocus() + { + if( m_pGeneralPage ) + m_pGeneralPage->GrabFocus(); + } + + sal_Bool BibView::HandleShortCutKey( const KeyEvent& rKeyEvent ) + { + return m_pGeneralPage? m_pGeneralPage->HandleShortCutKey( rKeyEvent ) : sal_False; + } + +//......................................................................... +} // namespace bib +//......................................................................... diff --git a/extensions/source/bibliography/bibview.hxx b/extensions/source/bibliography/bibview.hxx new file mode 100644 index 000000000000..59c516874568 --- /dev/null +++ b/extensions/source/bibliography/bibview.hxx @@ -0,0 +1,86 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#ifndef _BIB_VIEW_HXX +#define _BIB_VIEW_HXX + +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/awt/XControlContainer.hpp> +#include "formcontrolcontainer.hxx" +#include "bibshortcuthandler.hxx" + +class BibGeneralPage; +class BibDataManager; + +namespace com{ namespace sun{ namespace star{ namespace awt{ class XFocusListener;}}}} + +//......................................................................... +namespace bib +{ +//......................................................................... + + // ----------------------------------------------------------------------- + class BibView : public BibWindow, public FormControlContainer + { + private: + BibDataManager* m_pDatMan; + ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable> m_xDatMan; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XFocusListener> m_xGeneralPage; + BibGeneralPage* m_pGeneralPage; + + private: + DECL_STATIC_LINK(BibView, CallMappingHdl, BibView*); + + protected: + // Window overridables + virtual void Resize(); + + // FormControlContainer + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > + getControlContainer(); + + // XLoadListener equivalents + virtual void _loaded( const ::com::sun::star::lang::EventObject& _rEvent ); + virtual void _reloaded( const ::com::sun::star::lang::EventObject& _rEvent ); + + public: + BibView( Window* _pParent, BibDataManager* _pDatMan, WinBits nStyle = WB_3DLOOK ); + ~BibView(); + + void UpdatePages(); + + virtual void GetFocus(); + + virtual sal_Bool HandleShortCutKey( const KeyEvent& rKeyEvent ); // returns true, if key was handled + }; + +//......................................................................... +} // namespace bib +//......................................................................... + +#endif + + diff --git a/extensions/source/bibliography/datman.cxx b/extensions/source/bibliography/datman.cxx new file mode 100644 index 000000000000..4d4092804879 --- /dev/null +++ b/extensions/source/bibliography/datman.cxx @@ -0,0 +1,1834 @@ +/************************************************************************* + * + * 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_extensions.hxx" +#include <osl/mutex.hxx> +#include <tools/diagnose_ex.h> +#include <tools/urlobj.hxx> +#include <comphelper/processfactory.hxx> +#include <com/sun/star/io/XPersistObject.hpp> +#include <com/sun/star/sdbc/ResultSetType.hpp> +#include <com/sun/star/sdbc/ResultSetConcurrency.hpp> +#include <com/sun/star/sdbc/XResultSetUpdate.hpp> +#include <com/sun/star/sdbcx/XRowLocate.hpp> +#include <com/sun/star/sdbc/DataType.hpp> +#include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp> +#include <com/sun/star/sdbc/XDatabaseMetaData.hpp> +#include <com/sun/star/sdb/XDatabaseEnvironment.hpp> +#include <com/sun/star/uno/XNamingService.hpp> +#include <com/sun/star/sdbc/XDataSource.hpp> +#include <com/sun/star/sdb/CommandType.hpp> +#include <com/sun/star/sdbcx/XTablesSupplier.hpp> +#include <com/sun/star/sdbc/XConnection.hpp> +#include <com/sun/star/sdb/XCompletedConnection.hpp> +#include <com/sun/star/task/XInteractionHandler.hpp> +#include <com/sun/star/form/XLoadable.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/form/XGridColumnFactory.hpp> +#include <com/sun/star/io/XDataInputStream.hpp> +#include <com/sun/star/container/XNameContainer.hpp> +#include <com/sun/star/ucb/XContentProvider.hpp> +#include <com/sun/star/ucb/XContentAccess.hpp> +#include <ucbhelper/contentbroker.hxx> +#include <ucbhelper/content.hxx> +#include <ucbhelper/contentidentifier.hxx> +#include <comphelper/container.hxx> +#include <svl/urihelper.hxx> +#include <svtools/svtabbx.hxx> +#include <svtools/headbar.hxx> +#include <vcl/dialog.hxx> +#ifndef _SV_BUTTON_HXX +#include <vcl/button.hxx> +#endif +#include <vcl/lstbox.hxx> +#include <vcl/fixed.hxx> +#include <vcl/group.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/edit.hxx> +#include <vcl/msgbox.hxx> +#include <tools/debug.hxx> +#include "datman.hxx" +#include "bibresid.hxx" +#include "bibmod.hxx" +#include "bibview.hxx" +// #100312# --------- +#include "bibbeam.hxx" +#include "bibprop.hrc" +#include "toolbar.hxx" +#include "toolbar.hrc" +#include "bibconfig.hxx" +#include "bibbeam.hxx" +#include "bib.hrc" +#include "datman.hrc" +#include "bibliography.hrc" +#include <connectivity/dbtools.hxx> + +using namespace ::com::sun::star; +using namespace ::com::sun::star::beans; +using namespace ::com::sun::star::container; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::sdb; +using namespace ::com::sun::star::sdbc; +using namespace ::com::sun::star::sdbcx; +using namespace ::com::sun::star::form; +using namespace ::com::sun::star::frame; +using namespace ::com::sun::star::ucb; +using namespace ::com::sun::star::lang; +using namespace ::ucb; + +#define C2U(cChar) ::rtl::OUString::createFromAscii(cChar) +#define C2S(cChar) String::CreateFromAscii(cChar) +#define MAP_TOKEN ';' +#define PAIR_TOKEN ':' + + +/* -----------------17.01.00 14:38------------------- + + --------------------------------------------------*/ +Reference< XConnection > getConnection(const ::rtl::OUString& _rURL) +{ + // first get the sdb::DataSource corresponding to the url + Reference< XDataSource > xDataSource; + // is it a favorite title ? + Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + Reference<XInterface> xNamingContextIfc = xMgr->createInstance(C2U("com.sun.star.sdb.DatabaseContext")); + Reference< XNameAccess > xNamingContext(xNamingContextIfc, UNO_QUERY); + if (xNamingContext.is() && xNamingContext->hasByName(_rURL)) + { + DBG_ASSERT(Reference< XNamingService > (xNamingContext, UNO_QUERY).is(), "::getDataSource : no NamingService interface on the sdb::DatabaseAccessContext !"); + try + { + xDataSource = Reference< XDataSource > (Reference< XNamingService > (xNamingContext, UNO_QUERY)->getRegisteredObject(_rURL), UNO_QUERY); + } + catch(Exception eEx) + { + (void) eEx; // make compiler happy + DBG_ERROR("Exception caught in ODatabaseContext::getRegisteredObject()"); + } + } + // build the connection from the data source + Reference< XConnection > xConn; + if (xDataSource.is()) + { + // need user/pwd for this + ::rtl::OUString sUser, sPwd; + Reference< XPropertySet > xDataSourceProps(xDataSource, UNO_QUERY); + Reference< XCompletedConnection > xComplConn(xDataSource, UNO_QUERY); +/* Reference< XPropertySetInfo > xInfo = xDataSourceProps.is() ? xDataSourceProps->getPropertySetInfo() : Reference< XPropertySetInfo > (); + if (xInfo.is() && xInfo->hasPropertyByName(C2U("User"))) + xDataSourceProps->getPropertyValue(C2U("User")) >>= sUser; + if (xInfo.is() && xInfo->hasPropertyByName(C2U("Password"))) + xDataSourceProps->getPropertyValue(C2U("Password"))>>= sPwd; +*/ + try + { + + Reference<XInterface> xHdl = xMgr->createInstance(C2U("com.sun.star.task.InteractionHandler")); + Reference<task::XInteractionHandler> xIHdl(xHdl, UNO_QUERY); + xConn = xComplConn->connectWithCompletion(xIHdl); +// xConn = xDataSource->getConnection(sUser, sPwd); + } + catch(SQLException&) + { + // TODO : a real error handling + } + catch(Exception& e ) + { + (void) e; // make compiler happy + } + + } + return xConn; +} + +/* -----------------17.01.00 14:46------------------- + + --------------------------------------------------*/ +Reference< XConnection > getConnection(const Reference< XInterface > & xRowSet) +{ + Reference< XConnection > xConn; + try + { + Reference< XPropertySet > xFormProps(xRowSet, UNO_QUERY); + if (!xFormProps.is()) + return xConn; + + xConn = Reference< XConnection > (*(Reference< XInterface > *)xFormProps->getPropertyValue(C2U("ActiveConnection")).getValue(), UNO_QUERY); + if (!xConn.is()) + { + DBG_WARNING("no active connection"); + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("exception in getConnection"); + } + + return xConn; +} +/* -----------------17.01.00 16:07------------------- + + --------------------------------------------------*/ +Reference< XNameAccess > getColumns(const Reference< XForm > & _rxForm) +{ + Reference< XNameAccess > xReturn; + // check if the form is alive + Reference< XColumnsSupplier > xSupplyCols( _rxForm, UNO_QUERY ); + if (xSupplyCols.is()) + xReturn = xSupplyCols->getColumns(); + + if (!xReturn.is() || (xReturn->getElementNames().getLength() == 0)) + { // no .... + xReturn = NULL; + // -> get the table the form is bound to and ask it for their columns + Reference< XTablesSupplier > xSupplyTables( getConnection( _rxForm ), UNO_QUERY ); + Reference< XPropertySet > xFormProps( _rxForm, UNO_QUERY ); + if (xFormProps.is() && xSupplyTables.is()) + { + try + { + DBG_ASSERT((*(sal_Int32*)xFormProps->getPropertyValue(C2U("CommandType")).getValue()) == CommandType::TABLE, + "::getColumns : invalid form (has no table as data source) !"); + ::rtl::OUString sTable; + xFormProps->getPropertyValue(C2U("Command")) >>= sTable; + Reference< XNameAccess > xTables = xSupplyTables->getTables(); + if (xTables.is() && xTables->hasByName(sTable)) + xSupplyCols = Reference< XColumnsSupplier > ( + *(Reference< XInterface > *)xTables->getByName(sTable).getValue(), UNO_QUERY); + if (xSupplyCols.is()) + xReturn = xSupplyCols->getColumns(); + } +#ifdef DBG_UTIL + catch(Exception& e ) +#else + catch(Exception&) +#endif + { +#ifdef DBG_UTIL + String sMsg(String::CreateFromAscii("::getColumns : catched an exception (")); + sMsg += String(e.Message); + sMsg.AppendAscii(") ..."); + DBG_ERROR( ByteString(sMsg, RTL_TEXTENCODING_ASCII_US ).GetBuffer()); +#endif + } + + } + } + return xReturn; +} + +/* -----------------11.11.99 15:54------------------- + + --------------------------------------------------*/ +class MappingDialog_Impl : public ModalDialog +{ + BibDataManager* pDatMan; + OKButton aOKBT; + CancelButton aCancelBT; + HelpButton aHelpBT; + FixedLine aMapGB; + FixedText aIdentifierFT; + ListBox aIdentifierLB; + FixedText aAuthorityTypeFT; + ListBox aAuthorityTypeLB; + FixedText aAuthorFT; + ListBox aAuthorLB; + FixedText aTitleFT; + ListBox aTitleLB; + FixedText aMonthFT; + ListBox aMonthLB; + FixedText aYearFT; + ListBox aYearLB; + FixedText aISBNFT; + ListBox aISBNLB; + FixedText aBooktitleFT; + ListBox aBooktitleLB; + FixedText aChapterFT; + ListBox aChapterLB; + FixedText aEditionFT; + ListBox aEditionLB; + FixedText aEditorFT; + ListBox aEditorLB; + FixedText aHowpublishedFT; + ListBox aHowpublishedLB; + FixedText aInstitutionFT; + ListBox aInstitutionLB; + FixedText aJournalFT; + ListBox aJournalLB; + FixedText aNoteFT; + ListBox aNoteLB; + FixedText aAnnoteFT; + ListBox aAnnoteLB; + FixedText aNumberFT; + ListBox aNumberLB; + FixedText aOrganizationsFT; + ListBox aOrganizationsLB; + FixedText aPagesFT; + ListBox aPagesLB; + FixedText aPublisherFT; + ListBox aPublisherLB; + FixedText aAddressFT; + ListBox aAddressLB; + FixedText aSchoolFT; + ListBox aSchoolLB; + FixedText aSeriesFT; + ListBox aSeriesLB; + FixedText aReportTypeFT; + ListBox aReportTypeLB; + FixedText aVolumeFT; + ListBox aVolumeLB; + FixedText aURLFT; + ListBox aURLLB; + FixedText aCustom1FT; + ListBox aCustom1LB; + FixedText aCustom2FT; + ListBox aCustom2LB; + FixedText aCustom3FT; + ListBox aCustom3LB; + FixedText aCustom4FT; + ListBox aCustom4LB; + FixedText aCustom5FT; + ListBox aCustom5LB; + ListBox* aListBoxes[COLUMN_COUNT]; + String sNone; + + sal_Bool bModified; + + + + DECL_LINK(OkHdl, OKButton*); + DECL_LINK(ListBoxSelectHdl, ListBox*); + +public: + MappingDialog_Impl(Window* pParent, BibDataManager* pDatMan); + ~MappingDialog_Impl(); + + void SetModified() {bModified = sal_True;} + +}; +/* -----------------11.11.99 16:42------------------- + + --------------------------------------------------*/ +sal_uInt16 lcl_FindLogicalName(BibConfig* pConfig , + const ::rtl::OUString& rLogicalColumnName) +{ + for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++) + { + if(rLogicalColumnName == pConfig->GetDefColumnName(i)) + return i; + } + return USHRT_MAX; +} +//----------------------------------------------------------------------------- +MappingDialog_Impl::MappingDialog_Impl(Window* pParent, BibDataManager* pMan) : + ModalDialog(pParent, BibResId(RID_DLG_MAPPING) ), + pDatMan(pMan), + aOKBT(this, BibResId( BT_OK )), + aCancelBT(this, BibResId( BT_CANCEL )), + aHelpBT(this, BibResId( BT_HELP )), + + aMapGB(this, BibResId( GB_MAPPING )), + + aIdentifierFT(this, BibResId( FT_IDENTIFIER )), + aIdentifierLB(this, BibResId( LB_IDENTIFIER )), + aAuthorityTypeFT(this, BibResId( FT_AUTHORITYTYPE )), + aAuthorityTypeLB(this, BibResId( LB_AUTHORITYTYPE )), + aAuthorFT(this, BibResId( FT_AUTHOR )), + aAuthorLB(this, BibResId( LB_AUTHOR )), + aTitleFT(this, BibResId( FT_TITLE )), + aTitleLB(this, BibResId( LB_TITLE )), + aMonthFT(this, BibResId( FT_MONTH )), + aMonthLB(this, BibResId( LB_MONTH )), + aYearFT(this, BibResId( FT_YEAR )), + aYearLB(this, BibResId( LB_YEAR )), + aISBNFT(this, BibResId( FT_ISBN )), + aISBNLB(this, BibResId( LB_ISBN )), + aBooktitleFT(this, BibResId( FT_BOOKTITLE )), + aBooktitleLB(this, BibResId( LB_BOOKTITLE )), + aChapterFT(this, BibResId( FT_CHAPTER )), + aChapterLB(this, BibResId( LB_CHAPTER )), + aEditionFT(this, BibResId( FT_EDITION )), + aEditionLB(this, BibResId( LB_EDITION )), + aEditorFT(this, BibResId( FT_EDITOR )), + aEditorLB(this, BibResId( LB_EDITOR )), + aHowpublishedFT(this, BibResId( FT_HOWPUBLISHED )), + aHowpublishedLB(this, BibResId( LB_HOWPUBLISHED )), + aInstitutionFT(this, BibResId( FT_INSTITUTION )), + aInstitutionLB(this, BibResId( LB_INSTITUTION )), + aJournalFT(this, BibResId( FT_JOURNAL )), + aJournalLB(this, BibResId( LB_JOURNAL )), + aNoteFT(this, BibResId( FT_NOTE )), + aNoteLB(this, BibResId( LB_NOTE )), + aAnnoteFT(this, BibResId( FT_ANNOTE )), + aAnnoteLB(this, BibResId( LB_ANNOTE )), + aNumberFT(this, BibResId( FT_NUMBER )), + aNumberLB(this, BibResId( LB_NUMBER )), + aOrganizationsFT(this, BibResId( FT_ORGANIZATIONS )), + aOrganizationsLB(this, BibResId( LB_ORGANIZATIONS )), + aPagesFT(this, BibResId( FT_PAGES )), + aPagesLB(this, BibResId( LB_PAGES )), + aPublisherFT(this, BibResId( FT_PUBLISHER )), + aPublisherLB(this, BibResId( LB_PUBLISHER )), + aAddressFT(this, BibResId( FT_ADDRESS )), + aAddressLB(this, BibResId( LB_ADDRESS )), + aSchoolFT(this, BibResId( FT_SCHOOL )), + aSchoolLB(this, BibResId( LB_SCHOOL )), + aSeriesFT(this, BibResId( FT_SERIES )), + aSeriesLB(this, BibResId( LB_SERIES )), + aReportTypeFT(this, BibResId( FT_REPORTTYPE )), + aReportTypeLB(this, BibResId( LB_REPORTTYPE )), + aVolumeFT(this, BibResId( FT_VOLUME )), + aVolumeLB(this, BibResId( LB_VOLUME )), + aURLFT(this, BibResId( FT_URL )), + aURLLB(this, BibResId( LB_URL )), + aCustom1FT(this, BibResId( FT_CUSTOM1 )), + aCustom1LB(this, BibResId( LB_CUSTOM1 )), + aCustom2FT(this, BibResId( FT_CUSTOM2 )), + aCustom2LB(this, BibResId( LB_CUSTOM2 )), + aCustom3FT(this, BibResId( FT_CUSTOM3 )), + aCustom3LB(this, BibResId( LB_CUSTOM3 )), + aCustom4FT(this, BibResId( FT_CUSTOM4 )), + aCustom4LB(this, BibResId( LB_CUSTOM4 )), + aCustom5FT(this, BibResId( FT_CUSTOM5 )), + aCustom5LB(this, BibResId( LB_CUSTOM5 )), + sNone(BibResId(ST_NONE)), + bModified(sal_False) +{ + FreeResource(); + + aIdentifierFT.SetText(String( BibResId( ST_IDENTIFIER ))); + aAuthorityTypeFT.SetText(String( BibResId( ST_AUTHTYPE ))); + aAuthorFT.SetText(String( BibResId( ST_AUTHOR ))); + aTitleFT.SetText(String( BibResId( ST_TITLE ))); + aMonthFT.SetText(String( BibResId( ST_MONTH ))); + aYearFT.SetText(String( BibResId( ST_YEAR ))); + aISBNFT.SetText(String( BibResId( ST_ISBN ))); + aBooktitleFT.SetText(String( BibResId( ST_BOOKTITLE ))); + aChapterFT.SetText(String( BibResId( ST_CHAPTER ))); + aEditionFT.SetText(String( BibResId( ST_EDITION ))); + aEditorFT.SetText(String( BibResId( ST_EDITOR ))); + aHowpublishedFT.SetText(String( BibResId( ST_HOWPUBLISHED ))); + aInstitutionFT.SetText(String( BibResId( ST_INSTITUTION ))); + aJournalFT.SetText(String( BibResId( ST_JOURNAL ))); + aNoteFT.SetText(String( BibResId( ST_NOTE ))); + aAnnoteFT.SetText(String( BibResId( ST_ANNOTE ))); + aNumberFT.SetText(String( BibResId( ST_NUMBER ))); + aOrganizationsFT.SetText(String( BibResId( ST_ORGANIZATION ))); + aPagesFT.SetText(String( BibResId( ST_PAGE ))); + aPublisherFT.SetText(String( BibResId( ST_PUBLISHER ))); + aAddressFT.SetText(String( BibResId( ST_ADDRESS ))); + aSchoolFT.SetText(String( BibResId( ST_SCHOOL ))); + aSeriesFT.SetText(String( BibResId( ST_SERIES ))); + aReportTypeFT.SetText(String( BibResId( ST_REPORT ))); + aVolumeFT.SetText(String( BibResId( ST_VOLUME ))); + aURLFT.SetText(String( BibResId( ST_URL ))); + aCustom1FT.SetText(String( BibResId( ST_CUSTOM1 ))); + aCustom2FT.SetText(String( BibResId( ST_CUSTOM2 ))); + aCustom3FT.SetText(String( BibResId( ST_CUSTOM3 ))); + aCustom4FT.SetText(String( BibResId( ST_CUSTOM4 ))); + aCustom5FT.SetText(String( BibResId( ST_CUSTOM5 ))); + + aOKBT.SetClickHdl(LINK(this, MappingDialog_Impl, OkHdl)); + String sTitle = GetText(); + sTitle.SearchAndReplace(C2S("%1"), pDatMan->getActiveDataTable(), 0); + SetText(sTitle); + + aListBoxes[0] = &aIdentifierLB; + aListBoxes[1] = &aAuthorityTypeLB; + aListBoxes[2] = &aAuthorLB; + aListBoxes[3] = &aTitleLB; + aListBoxes[4] = &aYearLB; + aListBoxes[5] = &aISBNLB; + aListBoxes[6] = &aBooktitleLB; + aListBoxes[7] = &aChapterLB; + aListBoxes[8] = &aEditionLB; + aListBoxes[9] = &aEditorLB; + aListBoxes[10] = &aHowpublishedLB; + aListBoxes[11] = &aInstitutionLB; + aListBoxes[12] = &aJournalLB; + aListBoxes[13] = &aMonthLB; + aListBoxes[14] = &aNoteLB; + aListBoxes[15] = &aAnnoteLB; + aListBoxes[16] = &aNumberLB; + aListBoxes[17] = &aOrganizationsLB; + aListBoxes[18] = &aPagesLB; + aListBoxes[19] = &aPublisherLB; + aListBoxes[20] = &aAddressLB; + aListBoxes[21] = &aSchoolLB; + aListBoxes[22] = &aSeriesLB; + aListBoxes[23] = &aReportTypeLB; + aListBoxes[24] = &aVolumeLB; + aListBoxes[25] = &aURLLB; + aListBoxes[26] = &aCustom1LB; + aListBoxes[27] = &aCustom2LB; + aListBoxes[28] = &aCustom3LB; + aListBoxes[29] = &aCustom4LB; + aListBoxes[30] = &aCustom5LB; + + aListBoxes[0]->InsertEntry(sNone); + Reference< XNameAccess > xFields = getColumns( pDatMan->getForm() ); + DBG_ASSERT(xFields.is(), "MappingDialog_Impl::MappingDialog_Impl : gave me an invalid form !"); + if(xFields.is()) + { + Sequence< ::rtl::OUString > aNames = xFields->getElementNames(); + sal_Int32 nFieldsCount = aNames.getLength(); + const ::rtl::OUString* pNames = aNames.getConstArray(); + + for(sal_Int32 nField = 0; nField < nFieldsCount; nField++) + aListBoxes[0]->InsertEntry(pNames[nField]); + } + + Link aLnk = LINK(this, MappingDialog_Impl, ListBoxSelectHdl); + + aListBoxes[0]->SelectEntryPos(0); + aListBoxes[0]->SetSelectHdl(aLnk); + for(sal_uInt16 i = 1; i < COLUMN_COUNT; i++) + { + for(sal_uInt16 j = 0; j < aListBoxes[0]->GetEntryCount();j++) + aListBoxes[i]->InsertEntry(aListBoxes[0]->GetEntry(j)); + aListBoxes[i]->SelectEntryPos(0); + aListBoxes[i]->SetSelectHdl(aLnk); + } + BibConfig* pConfig = BibModul::GetConfig(); + BibDBDescriptor aDesc; + aDesc.sDataSource = pDatMan->getActiveDataSource(); + aDesc.sTableOrQuery = pDatMan->getActiveDataTable(); + aDesc.nCommandType = CommandType::TABLE; + const Mapping* pMapping = pConfig->GetMapping(aDesc); + if(pMapping) + { + for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) + { + sal_uInt16 nListBoxIndex = lcl_FindLogicalName( pConfig, pMapping->aColumnPairs[nEntry].sLogicalColumnName); + if(nListBoxIndex < COLUMN_COUNT) + { + aListBoxes[nListBoxIndex]->SelectEntry(pMapping->aColumnPairs[nEntry].sRealColumnName); + } + } + } +} +/* -----------------11.11.99 16:44------------------- + + --------------------------------------------------*/ +MappingDialog_Impl::~MappingDialog_Impl() +{} +/* -----------------15.11.99 10:38------------------- + + --------------------------------------------------*/ +IMPL_LINK(MappingDialog_Impl, ListBoxSelectHdl, ListBox*, pListBox) +{ + sal_uInt16 nEntryPos = pListBox->GetSelectEntryPos(); + if(0 < nEntryPos) + { + for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++) + { + if(pListBox != aListBoxes[i] && aListBoxes[i]->GetSelectEntryPos() == nEntryPos) + aListBoxes[i]->SelectEntryPos(0); + } + } + SetModified(); + return 0; +} +/* -----------------12.11.99 14:50------------------- + + --------------------------------------------------*/ +IMPL_LINK(MappingDialog_Impl, OkHdl, OKButton*, EMPTYARG) +{ + if(bModified) + { + Mapping aNew; + aNew.sTableName = String(pDatMan->getActiveDataTable()); + aNew.sURL = String(pDatMan->getActiveDataSource()); + + sal_uInt16 nWriteIndex = 0; + BibConfig* pConfig = BibModul::GetConfig(); + for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) + { + String sSel = aListBoxes[nEntry]->GetSelectEntry(); + if(sSel != sNone) + { + aNew.aColumnPairs[nWriteIndex].sRealColumnName = sSel; + aNew.aColumnPairs[nWriteIndex].sLogicalColumnName = pConfig->GetDefColumnName(nEntry); + nWriteIndex++; + } + } + BibDBDescriptor aDesc; + aDesc.sDataSource = pDatMan->getActiveDataSource(); + aDesc.sTableOrQuery = pDatMan->getActiveDataTable(); + aDesc.nCommandType = CommandType::TABLE; + pDatMan->ResetIdentifierMapping(); + pConfig->SetMapping(aDesc, &aNew); + } + EndDialog(bModified ? RET_OK : RET_CANCEL); + return 0; +} +/* -----------------18.11.99 10:23------------------- + + --------------------------------------------------*/ +class DBChangeDialog_Impl : public ModalDialog +{ + OKButton aOKBT; + CancelButton aCancelBT; + HelpButton aHelpBT; + FixedLine aSelectionGB; + SvTabListBox aSelectionLB; + HeaderBar aSelectionHB; + DBChangeDialogConfig_Impl aConfig; + String aEntryST; + String aURLST; + + BibDataManager* pDatMan; + +// DECL_LINK(EndDragHdl, HeaderBar*); + DECL_LINK(DoubleClickHdl, SvTabListBox*); +public: + DBChangeDialog_Impl(Window* pParent, BibDataManager* pMan ); + ~DBChangeDialog_Impl(); + + String GetCurrentURL()const; +}; + +/*-- 18.11.99 10:35:20--------------------------------------------------- + + -----------------------------------------------------------------------*/ +DBChangeDialog_Impl::DBChangeDialog_Impl(Window* pParent, BibDataManager* pMan ) : + ModalDialog(pParent, BibResId(RID_DLG_DBCHANGE) ), + aOKBT(this, BibResId( BT_OK )), + aCancelBT(this, BibResId( BT_CANCEL )), + aHelpBT(this, BibResId( BT_HELP )), + aSelectionGB(this, BibResId( GB_SELECTION )), + aSelectionLB(this, BibResId( LB_SELECTION )), + aSelectionHB(this, BibResId( HB_SELECTION )), + aEntryST(BibResId(ST_ENTRY)), + aURLST( BibResId(ST_URL)), + pDatMan(pMan) +{ + FreeResource(); + aSelectionLB.SetDoubleClickHdl( LINK(this, DBChangeDialog_Impl, DoubleClickHdl)); + try + { + Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + + ::Size aSize = aSelectionHB.GetSizePixel(); + long nTabs[2]; + nTabs[0] = 1;// Number of Tabs + nTabs[1] = aSize.Width() / 4; + + aSelectionHB.SetStyle(aSelectionHB.GetStyle()|WB_STDHEADERBAR); + aSelectionHB.InsertItem( 1, aEntryST, aSize.Width()); + aSelectionHB.SetSizePixel(aSelectionHB.CalcWindowSizePixel()); + aSelectionHB.Show(); + + aSelectionLB.SetTabs( &nTabs[0], MAP_PIXEL ); + aSelectionLB.SetStyle(aSelectionLB.GetStyle()|WB_CLIPCHILDREN|WB_SORT); + aSelectionLB.GetModel()->SetSortMode(SortAscending); + + ::rtl::OUString sActiveSource = pDatMan->getActiveDataSource(); + const Sequence< ::rtl::OUString >& rSources = aConfig.GetDataSourceNames(); + const ::rtl::OUString* pSourceNames = rSources.getConstArray(); + for(int i = 0; i < rSources.getLength(); i++) + { + SvLBoxEntry* pEntry = aSelectionLB.InsertEntry(pSourceNames[i]); + if(pSourceNames[i] == sActiveSource) + { + aSelectionLB.Select(pEntry); + } + } + aSelectionLB.GetModel()->Resort(); + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("Exception in BibDataManager::DBChangeDialog_Impl::DBChangeDialog_Impl"); + } + + +} +/* -----------------06.12.99 12:09------------------- + + --------------------------------------------------*/ +IMPL_LINK(DBChangeDialog_Impl, DoubleClickHdl, SvTabListBox*, /*pLB*/) +{ + EndDialog(RET_OK); + return 0; +} +/* -----------------18.11.99 11:17------------------- + + --------------------------------------------------*/ +/*IMPL_LINK(DBChangeDialog_Impl, EndDragHdl, HeaderBar*, pHB) +{ + long nTabs[3]; + nTabs[0] = 2;// Number of Tabs + nTabs[1] = 0; + nTabs[2] = pHB->GetItemSize( 1 ); + aSelectionLB.SetTabs( &nTabs[0], MAP_PIXEL ); + return 0; +};*/ + +/*-- 18.11.99 10:35:20--------------------------------------------------- + + -----------------------------------------------------------------------*/ +DBChangeDialog_Impl::~DBChangeDialog_Impl() +{ +} +/* -----------------18.11.99 12:36------------------- + + --------------------------------------------------*/ +String DBChangeDialog_Impl::GetCurrentURL()const +{ + String sRet; + SvLBoxEntry* pEntry = aSelectionLB.FirstSelected(); + if(pEntry) + { + sRet = aSelectionLB.GetEntryText(pEntry, 0); + } + return sRet; +} + +// #100312# -------------------------------------------------------------------- +// XDispatchProvider +BibInterceptorHelper::BibInterceptorHelper( ::bib::BibBeamer* pBibBeamer, ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch) +{ + if( pBibBeamer ) + { + xInterception = pBibBeamer->getDispatchProviderInterception(); + if( xInterception.is() ) + xInterception->registerDispatchProviderInterceptor( this ); + } + if( xDispatch.is() ) + xFormDispatch = xDispatch; +} + +BibInterceptorHelper::~BibInterceptorHelper( ) +{ +} + +void BibInterceptorHelper::ReleaseInterceptor() +{ + if ( xInterception.is() ) + xInterception->releaseDispatchProviderInterceptor( this ); + xInterception.clear(); +} + +::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL + BibInterceptorHelper::queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw (::com::sun::star::uno::RuntimeException) +{ + Reference< XDispatch > xReturn; + + String aCommand( aURL.Path ); + if ( aCommand.EqualsAscii("FormSlots/ConfirmDeletion") ) + xReturn = xFormDispatch; + else + if ( xSlaveDispatchProvider.is() ) + xReturn = xSlaveDispatchProvider->queryDispatch( aURL, aTargetFrameName, nSearchFlags); + + return xReturn; +} + +::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL + BibInterceptorHelper::queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw (::com::sun::star::uno::RuntimeException) +{ + Sequence< Reference< XDispatch> > aReturn( aDescripts.getLength() ); + Reference< XDispatch >* pReturn = aReturn.getArray(); + const DispatchDescriptor* pDescripts = aDescripts.getConstArray(); + for ( sal_Int16 i=0; i<aDescripts.getLength(); ++i, ++pReturn, ++pDescripts ) + { + *pReturn = queryDispatch( pDescripts->FeatureURL, pDescripts->FrameName, pDescripts->SearchFlags ); + } + return aReturn; +} + +// XDispatchProviderInterceptor +::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL + BibInterceptorHelper::getSlaveDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException) +{ + return xSlaveDispatchProvider; +} + +void SAL_CALL BibInterceptorHelper::setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSlaveDispatchProvider ) throw (::com::sun::star::uno::RuntimeException) +{ + xSlaveDispatchProvider = xNewSlaveDispatchProvider; +} + +::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL + BibInterceptorHelper::getMasterDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException) +{ + return xMasterDispatchProvider; +} + +void SAL_CALL BibInterceptorHelper::setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewMasterDispatchProvider ) throw (::com::sun::star::uno::RuntimeException) +{ + xMasterDispatchProvider = xNewMasterDispatchProvider; +} + +//----------------------------------------------------------------------------- +#define STR_UID "uid" +::rtl::OUString gGridName(C2U("theGrid")); +::rtl::OUString gViewName(C2U("theView")); +::rtl::OUString gGlobalName(C2U("theGlobals")); +::rtl::OUString gBeamerSize(C2U("theBeamerSize")); +::rtl::OUString gViewSize(C2U("theViewSize")); + +BibDataManager::BibDataManager() + :BibDataManager_Base( GetMutex() ) + // #100312# -------------- + ,m_pInterceptorHelper( NULL ) + ,m_aLoadListeners(m_aMutex) + ,pBibView( NULL ) + ,pToolbar(0) +{ +} + +/* -------------------------------------------------- + + --------------------------------------------------*/ +BibDataManager::~BibDataManager() +{ + Reference< XLoadable > xLoad( m_xForm, UNO_QUERY ); + Reference< XPropertySet > xPrSet( m_xForm, UNO_QUERY ); + Reference< XComponent > xComp( m_xForm, UNO_QUERY ); + if ( m_xForm.is() ) + { + Reference< XComponent > xConnection; + xPrSet->getPropertyValue(C2U("ActiveConnection")) >>= xConnection; + RemoveMeAsUidListener(); + if (xLoad.is()) + xLoad->unload(); + if (xComp.is()) + xComp->dispose(); + if(xConnection.is()) + xConnection->dispose(); + m_xForm = NULL; + } + // #100312# ---------------- + if( m_pInterceptorHelper ) + { + m_pInterceptorHelper->ReleaseInterceptor(); + m_pInterceptorHelper->release(); + m_pInterceptorHelper = NULL; + } +} +//------------------------------------------------------------------------ +void BibDataManager::InsertFields(const Reference< XFormComponent > & _rxGrid) +{ + if ( !_rxGrid.is() ) + return; + + try + { + Reference< XNameContainer > xColContainer( _rxGrid, UNO_QUERY ); + // remove the old fields + if ( xColContainer->hasElements() ) + { + Sequence< ::rtl::OUString > aNames = xColContainer->getElementNames(); + const ::rtl::OUString* pNames = aNames.getConstArray(); + const ::rtl::OUString* pNamesEnd = pNames + aNames.getLength(); + for ( ; pNames != pNamesEnd; ++pNames ) + xColContainer->removeByName( *pNames ); + } + + Reference< XNameAccess > xFields = getColumns( m_xForm ); + if (!xFields.is()) + return; + + Reference< XGridColumnFactory > xColFactory( _rxGrid, UNO_QUERY ); + + Reference< XPropertySet > xField; + + Sequence< ::rtl::OUString > aFields( xFields->getElementNames() ); + const ::rtl::OUString* pFields = aFields.getConstArray(); + const ::rtl::OUString* pFieldsEnd = pFields + aFields.getLength(); + + for ( ; pFields != pFieldsEnd; ++pFields ) + { + xFields->getByName( *pFields ) >>= xField; + + ::rtl::OUString sCurrentModelType; + const ::rtl::OUString sType(C2U("Type")); + sal_Int32 nType = 0; + sal_Bool bIsFormatted = sal_False; + sal_Bool bFormattedIsNumeric = sal_True; + xField->getPropertyValue(sType) >>= nType; + switch(nType) + { + case DataType::BIT: + case DataType::BOOLEAN: + sCurrentModelType = C2U("CheckBox"); + break; + + case DataType::BINARY: + case DataType::VARBINARY: + case DataType::LONGVARBINARY: + case DataType::BLOB: + sCurrentModelType = C2U("TextField"); + break; + + case DataType::VARCHAR: + case DataType::LONGVARCHAR: + case DataType::CHAR: + case DataType::CLOB: + bFormattedIsNumeric = sal_False; + // _NO_ break ! + default: + sCurrentModelType = C2U("FormattedField"); + bIsFormatted = sal_True; + break; + } + + Reference< XPropertySet > xCurrentCol = xColFactory->createColumn(sCurrentModelType); + if (bIsFormatted) + { + ::rtl::OUString sFormatKey(C2U("FormatKey")); + xCurrentCol->setPropertyValue(sFormatKey, xField->getPropertyValue(sFormatKey)); + Any aFormatted(&bFormattedIsNumeric, ::getBooleanCppuType()); + xCurrentCol->setPropertyValue(C2U("TreatAsNumber"), aFormatted); + } + Any aColName = makeAny( *pFields ); + xCurrentCol->setPropertyValue(FM_PROP_CONTROLSOURCE, aColName); + xCurrentCol->setPropertyValue(FM_PROP_LABEL, aColName); + + xColContainer->insertByName( *pFields, makeAny( xCurrentCol ) ); + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("Exception in BibDataManager::InsertFields"); + } +} +/* -------------------------------------------------- + + --------------------------------------------------*/ +Reference< awt::XControlModel > BibDataManager::updateGridModel() +{ + return updateGridModel( m_xForm ); +} +/* -------------------------------------------------- + + --------------------------------------------------*/ +Reference< awt::XControlModel > BibDataManager::updateGridModel(const Reference< XForm > & xDbForm) +{ + try + { + Reference< XPropertySet > aFormPropSet( xDbForm, UNO_QUERY ); + ::rtl::OUString sName; + aFormPropSet->getPropertyValue(C2U("Command")) >>= sName; + + if ( !m_xGridModel.is() ) + { + m_xGridModel = createGridModel( gGridName ); + + Reference< XNameContainer > xNameCont(xDbForm, UNO_QUERY); +// if (xNameCont->hasByName(sName)) +// xNameCont->removeByName(sName); +// + xNameCont->insertByName( sName, makeAny( m_xGridModel ) ); + } + + // insert the fields + Reference< XFormComponent > xFormComp( m_xGridModel, UNO_QUERY ); + InsertFields( xFormComp ); + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::updateGridModel: something went wrong !"); + } + + + return m_xGridModel; +} +/* -------------------------------------------------- + + --------------------------------------------------*/ +Reference< XForm > BibDataManager::createDatabaseForm(BibDBDescriptor& rDesc) +{ + Reference< XForm > xResult; + try + { + Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + m_xForm = Reference< XForm > ( xMgr->createInstance( C2U("com.sun.star.form.component.Form") ), UNO_QUERY ); + + Reference< XPropertySet > aPropertySet( m_xForm, UNO_QUERY ); + + aDataSourceURL = rDesc.sDataSource; + if(aPropertySet.is()) + { + Any aVal; + aVal <<= (sal_Int32)ResultSetType::SCROLL_INSENSITIVE; + aPropertySet->setPropertyValue(C2U("ResultSetType"),aVal ); + aVal <<= (sal_Int32)ResultSetConcurrency::READ_ONLY; + aPropertySet->setPropertyValue(C2U("ResultSetConcurrency"), aVal); + + //Caching for Performance + aVal <<= (sal_Int32)50; + aPropertySet->setPropertyValue(C2U("FetchSize"), aVal); + + Reference< XConnection > xConnection = getConnection(rDesc.sDataSource); + aVal <<= xConnection; + aPropertySet->setPropertyValue(C2U("ActiveConnection"), aVal); + + Reference< XTablesSupplier > xSupplyTables(xConnection, UNO_QUERY); + Reference< XNameAccess > xTables = xSupplyTables.is() ? + xSupplyTables->getTables() : Reference< XNameAccess > (); + + Sequence< ::rtl::OUString > aTableNameSeq; + if (xTables.is()) + aTableNameSeq = xTables->getElementNames(); + + if(aTableNameSeq.getLength() > 0) + { + const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray(); + if(rDesc.sTableOrQuery.getLength()) + aActiveDataTable = rDesc.sTableOrQuery; + else + { + rDesc.sTableOrQuery = aActiveDataTable = pTableNames[0]; + rDesc.nCommandType = CommandType::TABLE; + } + + aVal <<= aActiveDataTable; + aPropertySet->setPropertyValue(C2U("Command"), aVal); + aVal <<= rDesc.nCommandType; + aPropertySet->setPropertyValue(C2U("CommandType"), aVal); + + + Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); + aQuoteChar = xMetaData->getIdentifierQuoteString(); + + Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY); + if ( xFactory.is() ) + m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY ); + + ::rtl::OUString aString(C2U("SELECT * FROM ")); + + ::rtl::OUString sCatalog, sSchema, sName; + ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation ); + aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName ); + + m_xParser->setElementaryQuery(aString); + BibConfig* pConfig = BibModul::GetConfig(); + pConfig->setQueryField(getQueryField()); + startQueryWith(pConfig->getQueryText()); + + xResult = m_xForm; + } + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::createDatabaseForm: something went wrong !"); + } + + + return xResult; +} +//------------------------------------------------------------------------ +Sequence< ::rtl::OUString > BibDataManager::getDataSources() +{ + Sequence< ::rtl::OUString > aTableNameSeq; + + try + { + Reference< XTablesSupplier > xSupplyTables( getConnection( m_xForm ), UNO_QUERY ); + Reference< XNameAccess > xTables; + if (xSupplyTables.is()) + xTables = xSupplyTables->getTables(); + if (xTables.is()) + aTableNameSeq = xTables->getElementNames(); + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::getDataSources: something went wrong !"); + } + + + return aTableNameSeq; +} +//------------------------------------------------------------------------ +::rtl::OUString BibDataManager::getActiveDataTable() +{ + return aActiveDataTable; +} +//------------------------------------------------------------------------ +void BibDataManager::setFilter(const ::rtl::OUString& rQuery) +{ + if(!m_xParser.is()) + return; + try + { + m_xParser->setFilter( rQuery ); + ::rtl::OUString aQuery = m_xParser->getFilter(); + Reference< XPropertySet > xFormProps( m_xForm, UNO_QUERY_THROW ); + xFormProps->setPropertyValue( C2U( "Filter" ), makeAny( aQuery ) ); + xFormProps->setPropertyValue( C2U( "ApplyFilter" ), makeAny( sal_True ) ); + reload(); + } + catch(Exception& e ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + +} +//------------------------------------------------------------------------ +::rtl::OUString BibDataManager::getFilter() +{ + + ::rtl::OUString aQueryString; + try + { + Reference< XPropertySet > xFormProps( m_xForm, UNO_QUERY_THROW ); + OSL_VERIFY( xFormProps->getPropertyValue( C2U( "Filter" ) ) >>= aQueryString ); + } + catch( const Exception& ) + { + DBG_UNHANDLED_EXCEPTION(); + } + + + return aQueryString; + +} +//------------------------------------------------------------------------ +Sequence< ::rtl::OUString > BibDataManager::getQueryFields() +{ + Sequence< ::rtl::OUString > aFieldSeq; + Reference< XNameAccess > xFields = getColumns( m_xForm ); + if (xFields.is()) + aFieldSeq = xFields->getElementNames(); + return aFieldSeq; +} +//------------------------------------------------------------------------ +::rtl::OUString BibDataManager::getQueryField() +{ + BibConfig* pConfig = BibModul::GetConfig(); + ::rtl::OUString aFieldString = pConfig->getQueryField(); + if(!aFieldString.getLength()) + { + Sequence< ::rtl::OUString > aSeq = getQueryFields(); + const ::rtl::OUString* pFields = aSeq.getConstArray(); + if(aSeq.getLength()>0) + { + aFieldString=pFields[0]; + } + } + return aFieldString; +} +//------------------------------------------------------------------------ +void BibDataManager::startQueryWith(const ::rtl::OUString& rQuery) +{ + BibConfig* pConfig = BibModul::GetConfig(); + pConfig->setQueryText( rQuery ); + + ::rtl::OUString aQueryString; + if(rQuery.getLength()>0) + { + aQueryString=aQuoteChar; + aQueryString+=getQueryField(); + aQueryString+=aQuoteChar; + aQueryString+=C2U(" like '"); + String sQuery(rQuery); + sQuery.SearchAndReplaceAll('?','_'); + sQuery.SearchAndReplaceAll('*','%'); + aQueryString += sQuery; + aQueryString+=C2U("%'"); + } + setFilter(aQueryString); +} +/* -----------------03.12.99 15:05------------------- + + --------------------------------------------------*/ +void BibDataManager::setActiveDataSource(const ::rtl::OUString& rURL) +{ + ::rtl::OUString uTable; + ::rtl::OUString sTmp(aDataSourceURL); + aDataSourceURL = rURL; + + Reference< XPropertySet > aPropertySet( m_xForm, UNO_QUERY ); + if(aPropertySet.is()) + { + unload(); + + Reference< XComponent > xOldConnection; + aPropertySet->getPropertyValue(C2U("ActiveConnection")) >>= xOldConnection; + + Reference< XConnection > xConnection = getConnection(rURL); + if(!xConnection.is()) + { + aDataSourceURL = sTmp; + return; + } + Any aVal; aVal <<= xConnection; + aPropertySet->setPropertyValue(C2U("ActiveConnection"), aVal); + Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY); + if ( xFactory.is() ) + m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY ); + + if(xOldConnection.is()) + xOldConnection->dispose(); + + Sequence< ::rtl::OUString > aTableNameSeq; + Reference< XTablesSupplier > xSupplyTables(xConnection, UNO_QUERY); + if(xSupplyTables.is()) + { + Reference< XNameAccess > xAccess = xSupplyTables->getTables(); + aTableNameSeq = xAccess->getElementNames(); + } + if(aTableNameSeq.getLength() > 0) + { + const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray(); + aActiveDataTable = pTableNames[0]; + aVal <<= aActiveDataTable; + aPropertySet->setPropertyValue(C2U("Command"), aVal); + aPropertySet->setPropertyValue(C2U("CommandType"), makeAny(CommandType::TABLE)); + //Caching for Performance + aVal <<= (sal_Int32)50; + aPropertySet->setPropertyValue(C2U("FetchSize"), aVal); + ::rtl::OUString aString(C2U("SELECT * FROM ")); + // quote the table name which may contain catalog.schema.table + Reference<XDatabaseMetaData> xMetaData(xConnection->getMetaData(),UNO_QUERY); + aQuoteChar = xMetaData->getIdentifierQuoteString(); + + ::rtl::OUString sCatalog, sSchema, sName; + ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation ); + aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName ); + + m_xParser->setElementaryQuery(aString); + BibConfig* pConfig = BibModul::GetConfig(); + pConfig->setQueryField(getQueryField()); + startQueryWith(pConfig->getQueryText()); + setActiveDataTable(aActiveDataTable); + } + FeatureStateEvent aEvent; + util::URL aURL; + aEvent.IsEnabled = sal_True; + aEvent.Requery = sal_False; + aEvent.FeatureDescriptor = getActiveDataTable(); + + aEvent.State = makeAny( getDataSources() ); + + if(pToolbar) + { + aURL.Complete =C2U(".uno:Bib/source"); + aEvent.FeatureURL = aURL; + pToolbar->statusChanged( aEvent ); + } + + updateGridModel(); + load(); + } +} + +/* -------------------------------------------------- + + --------------------------------------------------*/ +void BibDataManager::setActiveDataTable(const ::rtl::OUString& rTable) +{ + ResetIdentifierMapping(); + try + { + Reference< XPropertySet > aPropertySet( m_xForm, UNO_QUERY ); + + if(aPropertySet.is()) + { + Reference< XConnection > xConnection = getConnection( m_xForm ); + Reference< XTablesSupplier > xSupplyTables(xConnection, UNO_QUERY); + Reference< XNameAccess > xAccess = xSupplyTables->getTables(); + Sequence< ::rtl::OUString > aTableNameSeq = xAccess->getElementNames(); + sal_uInt32 nCount = aTableNameSeq.getLength(); + + const ::rtl::OUString* pTableNames = aTableNameSeq.getConstArray(); + const ::rtl::OUString* pTableNamesEnd = pTableNames + nCount; + + for ( ; pTableNames != pTableNamesEnd; ++pTableNames ) + { + if ( rTable == *pTableNames ) + { + aActiveDataTable = rTable; + Any aVal; aVal <<= rTable; + aPropertySet->setPropertyValue( C2U("Command"), aVal ); + break; + } + } + if (pTableNames != pTableNamesEnd) + { + Reference< XDatabaseMetaData > xMetaData = xConnection->getMetaData(); + aQuoteChar = xMetaData->getIdentifierQuoteString(); + + Reference< XMultiServiceFactory > xFactory(xConnection, UNO_QUERY); + if ( xFactory.is() ) + m_xParser.set( xFactory->createInstance( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.sdb.SingleSelectQueryComposer" ) ) ), UNO_QUERY ); + + ::rtl::OUString aString(C2U("SELECT * FROM ")); + + ::rtl::OUString sCatalog, sSchema, sName; + ::dbtools::qualifiedNameComponents( xMetaData, aActiveDataTable, sCatalog, sSchema, sName, ::dbtools::eInDataManipulation ); + aString += ::dbtools::composeTableNameForSelect( xConnection, sCatalog, sSchema, sName ); + + m_xParser->setElementaryQuery(aString); + + BibConfig* pConfig = BibModul::GetConfig(); + pConfig->setQueryField(getQueryField()); + startQueryWith(pConfig->getQueryText()); + + BibDBDescriptor aDesc; + aDesc.sDataSource = aDataSourceURL; + aDesc.sTableOrQuery = aActiveDataTable; + aDesc.nCommandType = CommandType::TABLE; + BibModul::GetConfig()->SetBibliographyURL(aDesc); + } + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::setActiveDataTable: something went wrong !"); + } + +} + +//------------------------------------------------------------------------ +void SAL_CALL BibDataManager::load( ) throw (RuntimeException) +{ + if ( isLoaded() ) + // nothing to do + return; + + Reference< XLoadable > xFormAsLoadable( m_xForm, UNO_QUERY ); + DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::load: invalid form!"); + if ( xFormAsLoadable.is() ) + { + xFormAsLoadable->load(); + SetMeAsUidListener(); + + EventObject aEvt( static_cast< XWeak* >( this ) ); + m_aLoadListeners.notifyEach( &XLoadListener::loaded, aEvt ); + } +} + +//------------------------------------------------------------------------ +void SAL_CALL BibDataManager::unload( ) throw (RuntimeException) +{ + if ( !isLoaded() ) + // nothing to do + return; + + Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY ); + DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::unload: invalid form!"); + if ( xFormAsLoadable.is() ) + { + EventObject aEvt( static_cast< XWeak* >( this ) ); + + { + m_aLoadListeners.notifyEach( &XLoadListener::unloading, aEvt ); + } + + RemoveMeAsUidListener(); + xFormAsLoadable->unload(); + + { + m_aLoadListeners.notifyEach( &XLoadListener::unloaded, aEvt ); + } + } +} + +//------------------------------------------------------------------------ +void SAL_CALL BibDataManager::reload( ) throw (RuntimeException) +{ + if ( !isLoaded() ) + // nothing to do + return; + + Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY ); + DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::unload: invalid form!"); + if ( xFormAsLoadable.is() ) + { + EventObject aEvt( static_cast< XWeak* >( this ) ); + + { + m_aLoadListeners.notifyEach( &XLoadListener::reloading, aEvt ); + } + + xFormAsLoadable->reload(); + + { + m_aLoadListeners.notifyEach( &XLoadListener::reloaded, aEvt ); + } + } +} + +//------------------------------------------------------------------------ +sal_Bool SAL_CALL BibDataManager::isLoaded( ) throw (RuntimeException) +{ + Reference< XLoadable >xFormAsLoadable( m_xForm, UNO_QUERY ); + DBG_ASSERT( xFormAsLoadable.is() || !m_xForm.is(), "BibDataManager::isLoaded: invalid form!"); + + sal_Bool bLoaded = sal_False; + if ( xFormAsLoadable.is() ) + bLoaded = xFormAsLoadable->isLoaded(); + return bLoaded; +} + +//------------------------------------------------------------------------ +void SAL_CALL BibDataManager::addLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException) +{ + m_aLoadListeners.addInterface( aListener ); +} + +//------------------------------------------------------------------------ +void SAL_CALL BibDataManager::removeLoadListener( const Reference< XLoadListener >& aListener ) throw (RuntimeException) +{ + m_aLoadListeners.removeInterface( aListener ); +} + +//------------------------------------------------------------------------ +Reference< awt::XControlModel > BibDataManager::createGridModel(const ::rtl::OUString& rName) +{ + Reference< awt::XControlModel > xModel; + + try + { + // create the control model + Reference< XMultiServiceFactory > xMgr = ::comphelper::getProcessServiceFactory(); + Reference< XInterface > xObject = xMgr->createInstance(C2U("com.sun.star.form.component.GridControl")); + xModel=Reference< awt::XControlModel > ( xObject, UNO_QUERY ); + + // set the + Reference< XPropertySet > xPropSet( xModel, UNO_QUERY ); + xPropSet->setPropertyValue( C2U("Name"), makeAny( rName ) ); + + // set the name of the to-be-created control + ::rtl::OUString aControlName(C2U("com.sun.star.form.control.InteractionGridControl")); + Any aAny; aAny <<= aControlName; + xPropSet->setPropertyValue( C2U("DefaultControl"),aAny ); + + // the the helpURL + ::rtl::OUString uProp(C2U("HelpURL")); + Reference< XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo(); + if (xPropInfo->hasPropertyByName(uProp)) + { + ::rtl::OUString sId = ::rtl::OUString::createFromAscii( INET_HID_SCHEME ); + sId += ::rtl::OUString::createFromAscii( HID_BIB_DB_GRIDCTRL ); + xPropSet->setPropertyValue( uProp, makeAny( sId ) ); + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::createGridModel: something went wrong !"); + } + + + return xModel; +} +//------------------------------------------------------------------------ +::rtl::OUString BibDataManager::getControlName(sal_Int32 nFormatKey ) +{ + ::rtl::OUString aResStr; + switch (nFormatKey) + { + case DataType::BIT: + case DataType::BOOLEAN: + aResStr=C2U("CheckBox"); + break; + case DataType::TINYINT: + case DataType::SMALLINT: + case DataType::INTEGER: + aResStr=C2U("NumericField"); ; + break; + case DataType::REAL: + case DataType::DOUBLE: + case DataType::NUMERIC: + case DataType::DECIMAL: + aResStr=C2U("FormattedField"); + break; + case DataType::TIMESTAMP: + aResStr=C2U("FormattedField"); + break; + case DataType::DATE: + aResStr=C2U("DateField"); + break; + case DataType::TIME: + aResStr=C2U("TimeField"); + break; + case DataType::CHAR: + case DataType::VARCHAR: + case DataType::LONGVARCHAR: + default: + aResStr=C2U("TextField"); + break; + } + return aResStr; +} +//------------------------------------------------------------------------ +Reference< awt::XControlModel > BibDataManager::loadControlModel( + const ::rtl::OUString& rName, sal_Bool bForceListBox) +{ + Reference< awt::XControlModel > xModel; + ::rtl::OUString aName(C2U("View_")); + aName += rName; + + try + { + Reference< XNameAccess > xFields = getColumns( m_xForm ); + if (!xFields.is()) + return xModel; + Reference< XPropertySet > xField; + + Any aElement; + + if(xFields->hasByName(rName)) + { + aElement = xFields->getByName(rName); + aElement >>= xField; + Reference< XPropertySetInfo > xInfo = xField.is() ? xField->getPropertySetInfo() : Reference< XPropertySetInfo > (); + + ::rtl::OUString sCurrentModelType; + const ::rtl::OUString sType(C2U("Type")); + sal_Int32 nFormatKey = 0; + xField->getPropertyValue(sType) >>= nFormatKey; + + ::rtl::OUString aInstanceName(C2U("com.sun.star.form.component.")); + + if (bForceListBox) + aInstanceName += C2U("ListBox"); + else + aInstanceName += getControlName(nFormatKey); + + Reference< XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + Reference< XInterface > xObject = xMgr->createInstance(aInstanceName); + xModel=Reference< awt::XControlModel > ( xObject, UNO_QUERY ); + Reference< XPropertySet > xPropSet( xModel, UNO_QUERY ); + Any aFieldName; aFieldName <<= aName; + + xPropSet->setPropertyValue( FM_PROP_NAME,aFieldName); + xPropSet->setPropertyValue( FM_PROP_CONTROLSOURCE, makeAny( rName ) ); + xPropSet->setPropertyValue( ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "NativeWidgetLook" ) ), makeAny( (sal_Bool)sal_True ) ); + + Reference< XFormComponent > aFormComp(xModel,UNO_QUERY ); + + Reference< XNameContainer > xNameCont( m_xForm, UNO_QUERY ); + xNameCont->insertByName(aName, makeAny( aFormComp ) ); + + // now if the form where we inserted the new model is already loaded, notify the model of this + // Note that this implementation below is a HACK as it relies on the fact that the model adds itself + // as load listener to it's parent, which is an implementation detail of the model. + // + // the better solution would be the following: + // in the current scenario, we insert a control model into a form. This results in the control model + // adding itself as load listener to the form. Now, the form should realize that it's already loaded + // and notify the model (which it knows as XLoadListener only) immediately. This seems to make sense. + // (as an anologon to the XStatusListener semantics). + // + // But this would be way too risky for this last-day fix here. + // 97140 - 30.01.2002 - fs@openoffice.org + Reference< XLoadable > xLoad( m_xForm, UNO_QUERY ); + if ( xLoad.is() && xLoad->isLoaded() ) + { + Reference< XLoadListener > xListener( aFormComp, UNO_QUERY ); + if ( xListener.is() ) + { + EventObject aLoadSource; + aLoadSource.Source = xLoad; + xListener->loaded( aLoadSource ); + } + } + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::loadControlModel: something went wrong !"); + } + return xModel; +} +//------------------------------------------------------------------------ +void SAL_CALL BibDataManager::disposing() +{ + BibDataManager_Base::WeakComponentImplHelperBase::disposing(); +} + +//------------------------------------------------------------------------ +void BibDataManager::disposing( const EventObject& /*Source*/ ) throw( ::com::sun::star::uno::RuntimeException ) +{ + // not interested in +} + +//------------------------------------------------------------------------ +void BibDataManager::propertyChange(const beans::PropertyChangeEvent& evt) throw( RuntimeException ) +{ + try + { + sal_Bool bFlag=sal_False; + if(evt.PropertyName == FM_PROP_VALUE) + { + if( evt.NewValue.getValueType() == ::getCppuType((Reference<io::XInputStream>*)0) ) + { + Reference< io::XDataInputStream > xStream( + *(const Reference< io::XInputStream > *)evt.NewValue.getValue(), UNO_QUERY ); + aUID <<= xStream->readUTF(); + } + else + aUID = evt.NewValue; + + Reference< XRowLocate > xLocate(xBibCursor, UNO_QUERY); + DBG_ASSERT(xLocate.is(), "BibDataManager::propertyChange : invalid cursor !"); + bFlag = xLocate->moveToBookmark(aUID); + } + } + catch(Exception& e ) + { + (void) e; // make compiler happy + DBG_ERROR("::propertyChange: something went wrong !"); + } + + +} +//------------------------------------------------------------------------ +void BibDataManager::SetMeAsUidListener() +{ +try +{ + Reference< XNameAccess > xFields = getColumns( m_xForm ); + if (!xFields.is()) + return; + + Sequence< ::rtl::OUString > aFields(xFields->getElementNames()); + const ::rtl::OUString* pFields = aFields.getConstArray(); + sal_Int32 nCount=aFields.getLength(); + String StrUID(C2S(STR_UID)); + ::rtl::OUString theFieldName; + for( sal_Int32 i=0; i<nCount; i++ ) + { + String aName= pFields[i]; + + if(aName.EqualsIgnoreCaseAscii(StrUID)) + { + theFieldName=pFields[i]; + break; + } + } + + if(theFieldName.getLength()>0) + { + Reference< XPropertySet > xPropSet; + Any aElement; + + aElement = xFields->getByName(theFieldName); + xPropSet = *(Reference< XPropertySet > *)aElement.getValue(); + + xPropSet->addPropertyChangeListener(FM_PROP_VALUE, this); + } + +} +catch(Exception& e ) +{ + (void) e; // make compiler happy + DBG_ERROR("Exception in BibDataManager::SetMeAsUidListener"); +} + + +} +//------------------------------------------------------------------------ +void BibDataManager::RemoveMeAsUidListener() +{ +try +{ + Reference< XNameAccess > xFields = getColumns( m_xForm ); + if (!xFields.is()) + return; + + + Sequence< ::rtl::OUString > aFields(xFields->getElementNames()); + const ::rtl::OUString* pFields = aFields.getConstArray(); + sal_Int32 nCount=aFields.getLength(); + String StrUID(C2S(STR_UID)); + ::rtl::OUString theFieldName; + for( sal_Int32 i=0; i<nCount; i++ ) + { + String aName= pFields[i]; + + if(aName.EqualsIgnoreCaseAscii(StrUID)) + { + theFieldName=pFields[i]; + break; + } + } + + if(theFieldName.getLength()>0) + { + Reference< XPropertySet > xPropSet; + Any aElement; + + aElement = xFields->getByName(theFieldName); + xPropSet = *(Reference< XPropertySet > *)aElement.getValue(); + + xPropSet->removePropertyChangeListener(FM_PROP_VALUE, this); + } + +} +catch(Exception& e ) +{ + (void) e; // make compiler happy + DBG_ERROR("Exception in BibDataManager::RemoveMeAsUidListener"); +} + + +} +/* -----------------11.11.99 15:51------------------- + + --------------------------------------------------*/ +void BibDataManager::CreateMappingDialog(Window* pParent) +{ + MappingDialog_Impl* pDlg = new MappingDialog_Impl(pParent, this); + if(RET_OK == pDlg->Execute() && pBibView) + { + reload(); +// unload(); +// pBibView->UpdatePages(); +// load(); + } + delete pDlg; +} +/* -------------------------------------------------- + + --------------------------------------------------*/ +::rtl::OUString BibDataManager::CreateDBChangeDialog(Window* pParent) +{ + ::rtl::OUString uRet; + DBChangeDialog_Impl * pDlg = new DBChangeDialog_Impl(pParent, this ); + if(RET_OK == pDlg->Execute()) + { + String sNewURL = pDlg->GetCurrentURL(); + if(sNewURL != String(getActiveDataSource())) + { + uRet = sNewURL; + } + } + delete pDlg; + return uRet; +} +/*-- 18.05.2004 15:20:15--------------------------------------------------- + + -----------------------------------------------------------------------*/ +void BibDataManager::DispatchDBChangeDialog() +{ + if(pToolbar) + pToolbar->SendDispatch(TBC_BT_CHANGESOURCE, Sequence< PropertyValue >()); +} +/* -----------------06.12.99 15:11------------------- + + --------------------------------------------------*/ +const ::rtl::OUString& BibDataManager::GetIdentifierMapping() +{ + if(!sIdentifierMapping.getLength()) + { + BibConfig* pConfig = BibModul::GetConfig(); + BibDBDescriptor aDesc; + aDesc.sDataSource = getActiveDataSource(); + aDesc.sTableOrQuery = getActiveDataTable(); + aDesc.nCommandType = CommandType::TABLE; + const Mapping* pMapping = pConfig->GetMapping(aDesc); + sIdentifierMapping = pConfig->GetDefColumnName(IDENTIFIER_POS); + if(pMapping) + { + for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) + { + if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == sIdentifierMapping) + { + sIdentifierMapping = pMapping->aColumnPairs[nEntry].sRealColumnName; + break; + } + } + } + } + return sIdentifierMapping; +} +/* -----------------------------20.11.00 10:31-------------------------------- + + ---------------------------------------------------------------------------*/ +void BibDataManager::SetToolbar(BibToolBar* pSet) +{ + pToolbar = pSet; + if(pToolbar) + pToolbar->SetDatMan(*this); +} +/* -----------------------------08.05.2002 09:26------------------------------ + + ---------------------------------------------------------------------------*/ +uno::Reference< form::runtime::XFormController > BibDataManager::GetFormController() +{ + if(!m_xFormCtrl.is()) + { + Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + m_xFormCtrl = uno::Reference< form::runtime::XFormController > ( + xMgr->createInstance(C2U("com.sun.star.form.runtime.FormController")), UNO_QUERY); + m_xFormCtrl->setModel(uno::Reference< awt::XTabControllerModel > (getForm(), UNO_QUERY)); + // #100312# ------------- + m_xFormDispatch = uno::Reference< frame::XDispatch > ( m_xFormCtrl, UNO_QUERY); + } + return m_xFormCtrl; +} + +// #100312# ---------- +void BibDataManager::RegisterInterceptor( ::bib::BibBeamer* pBibBeamer) +{ + DBG_ASSERT( !m_pInterceptorHelper, "BibDataManager::RegisterInterceptor: called twice!" ); + + if( pBibBeamer ) + m_pInterceptorHelper = new BibInterceptorHelper( pBibBeamer, m_xFormDispatch); + if( m_pInterceptorHelper ) + m_pInterceptorHelper->acquire(); +} + +/*-- 18.05.2004 17:04:20--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool BibDataManager::HasActiveConnection()const +{ + sal_Bool bRet = sal_False; + Reference< XPropertySet > xPrSet( m_xForm, UNO_QUERY ); + if( xPrSet.is() ) + { + Reference< XComponent > xConnection; + xPrSet->getPropertyValue(C2U("ActiveConnection")) >>= xConnection; + bRet = xConnection.is(); + } + return bRet; +} +/*-- 04.06.2004 14:37:29--------------------------------------------------- + + -----------------------------------------------------------------------*/ +sal_Bool BibDataManager::HasActiveConnection() +{ + return getConnection( m_xForm ).is(); +} diff --git a/extensions/source/bibliography/datman.hrc b/extensions/source/bibliography/datman.hrc new file mode 100644 index 000000000000..97f72cf98431 --- /dev/null +++ b/extensions/source/bibliography/datman.hrc @@ -0,0 +1,102 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + + +#define BT_OK 1 +#define BT_CANCEL 2 +#define BT_HELP 3 +#define GB_MAPPING 4 +#define FT_IDENTIFIER 5 +#define LB_IDENTIFIER 6 +#define ST_NONE 7 + +#define FT_AUTHORITYTYPE 8 +#define LB_AUTHORITYTYPE 9 +#define FT_ADDRESS 10 +#define LB_ADDRESS 11 +#define FT_ANNOTE 12 +#define LB_ANNOTE 13 +#define FT_AUTHOR 14 +#define LB_AUTHOR 15 +#define FT_TITLE 16 +#define LB_TITLE 17 +#define FT_MONTH 18 +#define LB_MONTH 19 +#define FT_YEAR 20 +#define LB_YEAR 21 +#define FT_ISBN 22 +#define LB_ISBN 23 +#define FT_BOOKTITLE 24 +#define LB_BOOKTITLE 25 +#define FT_CHAPTER 26 +#define LB_CHAPTER 27 +#define FT_EDITION 28 +#define LB_EDITION 29 +#define FT_EDITOR 30 +#define LB_EDITOR 31 +#define FT_HOWPUBLISHED 32 +#define LB_HOWPUBLISHED 33 +#define FT_INSTITUTION 34 +#define LB_INSTITUTION 35 +#define FT_JOURNAL 36 +#define LB_JOURNAL 37 +#define FT_NOTE 38 +#define LB_NOTE 39 +#define FT_NUMBER 40 +#define LB_NUMBER 41 +#define FT_ORGANIZATIONS 42 +#define LB_ORGANIZATIONS 43 +#define FT_PAGES 44 +#define LB_PAGES 45 +#define FT_PUBLISHER 46 +#define LB_PUBLISHER 47 +#define FT_SCHOOL 48 +#define LB_SCHOOL 49 +#define FT_SERIES 50 +#define LB_SERIES 51 +#define FT_REPORTTYPE 52 +#define LB_REPORTTYPE 53 +#define FT_VOLUME 54 +#define LB_VOLUME 55 +#define FT_URL 56 +#define LB_URL 57 +#define FT_CUSTOM1 58 +#define LB_CUSTOM1 59 +#define FT_CUSTOM2 60 +#define LB_CUSTOM2 61 +#define FT_CUSTOM3 62 +#define LB_CUSTOM3 63 +#define FT_CUSTOM4 64 +#define LB_CUSTOM4 65 +#define FT_CUSTOM5 66 +#define LB_CUSTOM5 67 + +#define GB_SELECTION 68 +#define ST_ENTRY 69 +#define LB_SELECTION 71 +#define HB_SELECTION 72 + diff --git a/extensions/source/bibliography/datman.hxx b/extensions/source/bibliography/datman.hxx new file mode 100644 index 000000000000..8360acfb62a7 --- /dev/null +++ b/extensions/source/bibliography/datman.hxx @@ -0,0 +1,199 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BIB_DATMAN_HXX +#define _BIB_DATMAN_HXX + +#include <com/sun/star/awt/XControlModel.hpp> +#include <com/sun/star/form/XForm.hpp> +#include <com/sun/star/sdbc/XResultSet.hpp> +#include <com/sun/star/sdb/XSingleSelectQueryComposer.hpp> +#include <com/sun/star/form/runtime/XFormController.hpp> +#include <cppuhelper/compbase2.hxx> +#include <cppuhelper/interfacecontainer.h> +#include <com/sun/star/form/XLoadable.hpp> +#include <comphelper/broadcasthelper.hxx> +// #100312# -------------------- +#include <com/sun/star/frame/XDispatchProviderInterceptor.hpp> +#include <com/sun/star/frame/XDispatchProviderInterception.hpp> +#include <cppuhelper/implbase1.hxx> + +class Window; + +//----------------------------------------------------------------------------- +namespace bib +{ + class BibView; + // #100312# ----------- + class BibBeamer; +} + +class BibToolBar; +struct BibDBDescriptor; + +// #100312# --------------------- +class BibInterceptorHelper + :public cppu::WeakImplHelper1< ::com::sun::star::frame::XDispatchProviderInterceptor > +{ +private: + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > xMasterDispatchProvider; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > xSlaveDispatchProvider; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xFormDispatch; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProviderInterception > xInterception; + +protected: + ~BibInterceptorHelper( ); + +public: + BibInterceptorHelper( ::bib::BibBeamer* pBibBeamer, ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > xDispatch); + + void ReleaseInterceptor(); + + // XDispatchProvider + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& aURL, const ::rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts ) throw (::com::sun::star::uno::RuntimeException); + // XDispatchProviderInterceptor + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL getSlaveDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setSlaveDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewSlaveDispatchProvider ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider > SAL_CALL getMasterDispatchProvider( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL setMasterDispatchProvider( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatchProvider >& xNewMasterDispatchProvider ) throw (::com::sun::star::uno::RuntimeException); +}; + +typedef cppu::WeakComponentImplHelper2 < ::com::sun::star::beans::XPropertyChangeListener + , ::com::sun::star::form::XLoadable + > BibDataManager_Base; +class BibDataManager + :public ::comphelper::OMutexAndBroadcastHelper + ,public BibDataManager_Base +{ +private: + ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > m_xForm; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > m_xGridModel; + ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > m_xSourceProps; + ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer > m_xParser; + ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > m_xFormCtrl; + // #100312# ------------------- + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > m_xFormDispatch; + BibInterceptorHelper* m_pInterceptorHelper; + + ::rtl::OUString aActiveDataTable; + ::rtl::OUString aDataSourceURL; + ::rtl::OUString aQuoteChar; + ::com::sun::star::uno::Any aUID; + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet > xBibCursor; + + ::cppu::OInterfaceContainerHelper m_aLoadListeners; + + ::bib::BibView* pBibView; + BibToolBar* pToolbar; + + rtl::OUString sIdentifierMapping; +protected: + + void InsertFields(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XFormComponent > & xGrid); + void SetMeAsUidListener(); + void RemoveMeAsUidListener(); + + void UpdateAddressbookCursor(::rtl::OUString aSourceName); + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > + updateGridModel(const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > & xDbForm); + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > + createGridModel( const ::rtl::OUString& rName ); + + // XLoadable + virtual void SAL_CALL load( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unload( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL reload( ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL isLoaded( ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addLoadListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeLoadListener( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadListener >& aListener ) throw (::com::sun::star::uno::RuntimeException); + + virtual void SAL_CALL disposing(); + +public: + + BibDataManager(); + ~BibDataManager(); + + virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) + throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) + throw( ::com::sun::star::uno::RuntimeException ); + + + + ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm > createDatabaseForm( BibDBDescriptor& aDesc); + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > updateGridModel(); + + ::com::sun::star::uno::Sequence< ::rtl::OUString> getDataSources(); + + ::rtl::OUString getActiveDataSource() {return aDataSourceURL;} + void setActiveDataSource(const ::rtl::OUString& rURL); + + ::rtl::OUString getActiveDataTable(); + void setActiveDataTable(const ::rtl::OUString& rTable); + + void setFilter(const ::rtl::OUString& rQuery); + ::rtl::OUString getFilter(); + + ::com::sun::star::uno::Sequence< ::rtl::OUString> getQueryFields(); + ::rtl::OUString getQueryField(); + void startQueryWith(const ::rtl::OUString& rQuery); + + const ::com::sun::star::uno::Reference< ::com::sun::star::sdb::XSingleSelectQueryComposer >& getParser() { return m_xParser; } + const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& getForm() { return m_xForm; } + + + ::rtl::OUString getControlName(sal_Int32 nFormatKey ); + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > loadControlModel(const ::rtl::OUString& rName, + sal_Bool bForceListBox = sal_False); + + void CreateMappingDialog(Window* pParent); + ::rtl::OUString CreateDBChangeDialog(Window* pParent); + + void DispatchDBChangeDialog(); + sal_Bool HasActiveConnection() const; + + void SetView( ::bib::BibView* pView ) { pBibView = pView; } + + void SetToolbar(BibToolBar* pSet); + + const rtl::OUString& GetIdentifierMapping(); + void ResetIdentifierMapping() {sIdentifierMapping = rtl::OUString();} + + ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > GetFormController(); + // #100312# ---------- + void RegisterInterceptor( ::bib::BibBeamer* pBibBeamer); + + sal_Bool HasActiveConnection(); +}; + + +#endif diff --git a/extensions/source/bibliography/datman.src b/extensions/source/bibliography/datman.src new file mode 100644 index 000000000000..461404b2483a --- /dev/null +++ b/extensions/source/bibliography/datman.src @@ -0,0 +1,500 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#include "bib.hrc" +#include "datman.hrc" +ModalDialog RID_DLG_MAPPING +{ + HelpID = HID_DLG_MAPPING; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 391 , 195 ) ; + Moveable = TRUE ; + + OKButton BT_OK + { + Pos = MAP_APPFONT ( 338 , 3 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + }; + CancelButton BT_CANCEL + { + Pos = MAP_APPFONT ( 338 , 18 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + }; + HelpButton BT_HELP + { + Pos = MAP_APPFONT ( 338 , 36 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + }; + FixedLine GB_MAPPING + { + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 329 , 8 ) ; + Text [ en-US ] = "Column names"; + }; + FixedText FT_IDENTIFIER + { + Pos = MAP_APPFONT ( 12 , 14 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_IDENTIFIER + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_IDENTIFIER"; + Pos = MAP_APPFONT ( 65 , 13 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_AUTHORITYTYPE + { + Pos = MAP_APPFONT ( 118 , 14 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_AUTHORITYTYPE + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_AUTHORITYTYPE"; + Pos = MAP_APPFONT ( 171 , 13 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_YEAR + { + Pos = MAP_APPFONT ( 229 , 14 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_YEAR + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_YEAR"; + Pos = MAP_APPFONT ( 282 , 13 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_AUTHOR + { + Pos = MAP_APPFONT ( 12 , 29 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_AUTHOR + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_AUTHOR"; + Pos = MAP_APPFONT ( 65 , 28 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_TITLE + { + Pos = MAP_APPFONT ( 118 , 29 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_TITLE + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_TITLE"; + Pos = MAP_APPFONT ( 171 , 28 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_PUBLISHER + { + Pos = MAP_APPFONT ( 12 , 44 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_PUBLISHER + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_PUBLISHER"; + Pos = MAP_APPFONT ( 65 , 43 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_ADDRESS + { + Pos = MAP_APPFONT ( 118 , 44 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_ADDRESS + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_ADDRESS"; + Pos = MAP_APPFONT ( 171, 43 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_ISBN + { + Pos = MAP_APPFONT ( 229 , 44 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_ISBN + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_ISBN"; + Pos = MAP_APPFONT ( 282 , 43 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_CHAPTER + { + Pos = MAP_APPFONT ( 12 , 59 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_CHAPTER + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_CHAPTER"; + Pos = MAP_APPFONT ( 65 , 58 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_PAGES + { + Pos = MAP_APPFONT ( 118 , 59 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_PAGES + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_PAGES"; + Pos = MAP_APPFONT ( 171, 58) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_EDITOR + { + Pos = MAP_APPFONT ( 12 , 74 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_EDITOR + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_EDITOR"; + Pos = MAP_APPFONT ( 65 , 73 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_EDITION + { + Pos = MAP_APPFONT ( 118 , 74 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_EDITION + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_EDITION"; + Pos = MAP_APPFONT ( 171 , 73 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_BOOKTITLE + { + Pos = MAP_APPFONT ( 12, 89 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_BOOKTITLE + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_BOOKTITLE"; + Pos = MAP_APPFONT ( 65, 88 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_VOLUME + { + Pos = MAP_APPFONT ( 118 , 89 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_VOLUME + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_VOLUME"; + Pos = MAP_APPFONT ( 171 , 88 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_HOWPUBLISHED + { + Pos = MAP_APPFONT ( 229 , 89 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_HOWPUBLISHED + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_HOWPUBLISHED"; + Pos = MAP_APPFONT ( 282, 88 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_ORGANIZATIONS + { + Pos = MAP_APPFONT ( 12 , 104 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_ORGANIZATIONS + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_ORGANIZATIONS"; + Pos = MAP_APPFONT ( 65 , 103 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_INSTITUTION + { + Pos = MAP_APPFONT ( 118 , 104 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_INSTITUTION + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_INSTITUTION"; + Pos = MAP_APPFONT ( 171 , 103) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_SCHOOL + { + Pos = MAP_APPFONT ( 229 , 104 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_SCHOOL + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_SCHOOL"; + Pos = MAP_APPFONT ( 282 , 103 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_REPORTTYPE + { + Pos = MAP_APPFONT ( 12 , 119 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_REPORTTYPE + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_REPORTTYPE"; + Pos = MAP_APPFONT ( 65 , 118 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_MONTH + { + Pos = MAP_APPFONT ( 118 , 119 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_MONTH + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_MONTH"; + Pos = MAP_APPFONT ( 171 , 118) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_JOURNAL + { + Pos = MAP_APPFONT ( 12 , 134 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_JOURNAL + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_JOURNAL"; + Pos = MAP_APPFONT ( 65 , 133) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_NUMBER + { + Pos = MAP_APPFONT ( 118 , 134 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_NUMBER + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_NUMBER"; + Pos = MAP_APPFONT ( 171 , 133 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_SERIES + { + Pos = MAP_APPFONT ( 229 , 134 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_SERIES + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_SERIES"; + Pos = MAP_APPFONT ( 282 , 133 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_ANNOTE + { + Pos = MAP_APPFONT ( 12 , 149 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_ANNOTE + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_ANNOTE"; + Pos = MAP_APPFONT ( 65 , 148 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_NOTE + { + Pos = MAP_APPFONT ( 118 , 149 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_NOTE + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_NOTE"; + Pos = MAP_APPFONT ( 171 , 148 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_URL + { + Pos = MAP_APPFONT ( 229 , 149 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_URL + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_URL"; + Pos = MAP_APPFONT ( 282, 148 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_CUSTOM1 + { + Pos = MAP_APPFONT ( 12 , 164 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_CUSTOM1 + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_CUSTOM1"; + Pos = MAP_APPFONT ( 65 , 163 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_CUSTOM2 + { + Pos = MAP_APPFONT ( 118 , 164 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_CUSTOM2 + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_CUSTOM2"; + Pos = MAP_APPFONT ( 171 , 163 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_CUSTOM3 + { + Pos = MAP_APPFONT ( 229, 164 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_CUSTOM3 + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_CUSTOM3"; + Pos = MAP_APPFONT ( 282 , 163 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_CUSTOM4 + { + Pos = MAP_APPFONT ( 12 , 178 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_CUSTOM4 + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_CUSTOM4"; + Pos = MAP_APPFONT ( 65 , 177 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + FixedText FT_CUSTOM5 + { + Pos = MAP_APPFONT ( 118 , 178 ) ; + Size = MAP_APPFONT ( 50 , 10 ) ; + }; + ListBox LB_CUSTOM5 + { + HelpID = "extensions:ListBox:RID_DLG_MAPPING:LB_CUSTOM5"; + Pos = MAP_APPFONT ( 171 , 177 ) ; + Size = MAP_APPFONT ( 50 , 60 ) ; + DropDown = TRUE; + }; + String ST_NONE + { + Text [ en-US ] = "<none>"; + }; + Text [ en-US ] = "Column Layout for Table %1"; +}; +ModalDialog RID_DLG_DBCHANGE +{ + HelpID = HID_DLG_DBCHANGE; + OutputSize = TRUE ; + SVLook = TRUE ; + Size = MAP_APPFONT ( 291 , 131 ) ; + Moveable = TRUE ; + Text [ en-US ] = "Choose Data Source"; + OKButton BT_OK + { + Pos = MAP_APPFONT ( 238 , 3 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + }; + CancelButton BT_CANCEL + { + Pos = MAP_APPFONT ( 238 , 18 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + }; + HelpButton BT_HELP + { + Pos = MAP_APPFONT ( 238 , 36 ) ; + Size = MAP_APPFONT ( 50 , 12 ) ; + }; + FixedLine GB_SELECTION + { + Pos = MAP_APPFONT ( 6 , 3 ) ; + Size = MAP_APPFONT ( 229 , 8 ) ; + }; + String ST_ENTRY + { + Text [ en-US ] = "Entry"; + }; + Control LB_SELECTION + { + Pos = MAP_APPFONT ( 9 , 24 ) ; + Size = MAP_APPFONT ( 223 , 100 ) ; + Border = TRUE; + TabStop = TRUE; + HelpId = HID_SELECTION_TLB; + }; + Window HB_SELECTION + { + Pos = MAP_APPFONT ( 9 , 12 ) ; + Size = MAP_APPFONT ( 223 , 12 ) ; + Border = TRUE; + }; +}; + + + + + + + + + + + + + + + + + + diff --git a/extensions/source/bibliography/formcontrolcontainer.cxx b/extensions/source/bibliography/formcontrolcontainer.cxx new file mode 100644 index 000000000000..80ee3d2a4b08 --- /dev/null +++ b/extensions/source/bibliography/formcontrolcontainer.cxx @@ -0,0 +1,180 @@ +/************************************************************************* + * + * 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_extensions.hxx" +#include "formcontrolcontainer.hxx" +#include <tools/debug.hxx> + +#include <algorithm> +#include <functional> + +//......................................................................... +namespace bib +{ +//......................................................................... + + using namespace ::com::sun::star::uno; + using namespace ::com::sun::star::form; + using namespace ::com::sun::star::lang; + using namespace ::com::sun::star::awt; + + //===================================================================== + //= FormControlContainer + //===================================================================== + //--------------------------------------------------------------------- + FormControlContainer::FormControlContainer( ) + :OLoadListener( m_aMutex ) + ,m_pFormAdapter( NULL ) + { + } + + //--------------------------------------------------------------------- + //--- 18.10.01 18:54:57 ----------------------------------------------- + FormControlContainer::~FormControlContainer( ) + { + DBG_ASSERT( !isFormConnected(), "FormControlContainer::~FormControlContainer: you should disconnect in your derived class!" ); + if ( isFormConnected() ) + disconnectForm(); + } + + //--------------------------------------------------------------------- + //--- 18.10.01 17:03:14 ----------------------------------------------- + void FormControlContainer::disconnectForm() + { + ::osl::MutexGuard aGuard( m_aMutex ); + DBG_ASSERT( isFormConnected(), "FormControlContainer::connectForm: not connected!" ); + if ( isFormConnected() ) + { + m_pFormAdapter->dispose(); + m_pFormAdapter->release(); + m_pFormAdapter = NULL; + } + } + + //--------------------------------------------------------------------- + //--- 18.10.01 16:56:01 ----------------------------------------------- + void FormControlContainer::connectForm( const Reference< XLoadable >& _rxForm ) + { + DBG_ASSERT( !isFormConnected(), "FormControlContainer::connectForm: already connected!" ); + + DBG_ASSERT( _rxForm.is(), "FormControlContainer::connectForm: invalid form!" ); + if ( !isFormConnected() && _rxForm.is() ) + { + m_pFormAdapter = new OLoadListenerAdapter( _rxForm ); + m_pFormAdapter->acquire(); + m_pFormAdapter->Init( this ); + + ensureDesignMode(); + } + + m_xForm = _rxForm; + } + + //--------------------------------------------------------------------- + //--- 18.10.01 18:50:14 ----------------------------------------------- + struct ControlModeSwitch : public ::std::unary_function< Reference< XControl >, void > + { + sal_Bool bDesign; + ControlModeSwitch( sal_Bool _bDesign ) : bDesign( _bDesign ) { } + + void operator() ( const Reference< XControl >& _rxControl ) const + { + if ( _rxControl.is() ) + _rxControl->setDesignMode( bDesign ); + } + }; + + //--------------------------------------------------------------------- + //--- 18.10.01 18:49:57 ----------------------------------------------- + void FormControlContainer::implSetDesignMode( sal_Bool _bDesign ) + { + try + { + Reference< XControlContainer > xControlCont = getControlContainer(); + Sequence< Reference< XControl > > aControls; + if ( xControlCont.is() ) + aControls = xControlCont->getControls(); + + ::std::for_each( + aControls.getConstArray(), + aControls.getConstArray() + aControls.getLength(), + ControlModeSwitch( _bDesign ) + ); + } + catch( const Exception& e) + { + (void) e; // make compiler happy + DBG_ERROR( "FormControlContainer::implSetDesignMode: caught an exception!" ); + } + } + + //--------------------------------------------------------------------- + //--- 18.10.01 18:16:54 ----------------------------------------------- + void FormControlContainer::ensureDesignMode() + { + implSetDesignMode( !m_xForm.is() || !m_xForm->isLoaded() ); + } + + //--------------------------------------------------------------------- + //--- 18.10.01 16:45:33 ----------------------------------------------- + void FormControlContainer::_loaded( const ::com::sun::star::lang::EventObject& /*_rEvent*/ ) + { + implSetDesignMode( sal_False ); + } + + //--------------------------------------------------------------------- + //--- 18.10.01 16:45:35 ----------------------------------------------- + void FormControlContainer::_unloading( const ::com::sun::star::lang::EventObject& /*_rEvent*/ ) + { + implSetDesignMode( sal_True ); + } + + //--------------------------------------------------------------------- + //--- 18.10.01 16:45:36 ----------------------------------------------- + void FormControlContainer::_unloaded( const ::com::sun::star::lang::EventObject& /*_rEvent*/ ) + { + } + + //--------------------------------------------------------------------- + //--- 18.10.01 16:45:36 ----------------------------------------------- + void FormControlContainer::_reloading( const ::com::sun::star::lang::EventObject& /*_rEvent*/ ) + { + implSetDesignMode( sal_True ); + } + + //--------------------------------------------------------------------- + //--- 18.10.01 16:45:37 ----------------------------------------------- + void FormControlContainer::_reloaded( const ::com::sun::star::lang::EventObject& /*_rEvent*/ ) + { + implSetDesignMode( sal_False ); + } + +//......................................................................... +} // namespace bib +//......................................................................... + diff --git a/extensions/source/bibliography/formcontrolcontainer.hxx b/extensions/source/bibliography/formcontrolcontainer.hxx new file mode 100644 index 000000000000..f62ac2978574 --- /dev/null +++ b/extensions/source/bibliography/formcontrolcontainer.hxx @@ -0,0 +1,84 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef EXTENSIONS_BIB_FORMCONTROLCONTAINER_HXX +#define EXTENSIONS_BIB_FORMCONTROLCONTAINER_HXX + +#include <comphelper/broadcasthelper.hxx> +#include "loadlisteneradapter.hxx" +#include <com/sun/star/awt/XControlContainer.hpp> + +class BibDataManager; + +//......................................................................... +namespace bib +{ +//......................................................................... + + //===================================================================== + //= FormControlContainer + //===================================================================== + class FormControlContainer + :public ::comphelper::OBaseMutex + ,public ::bib::OLoadListener + { + private: + OLoadListenerAdapter* m_pFormAdapter; + ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable > + m_xForm; + private: + void implSetDesignMode( sal_Bool _bDesign ); + + protected: + FormControlContainer( ); + ~FormControlContainer( ); + + sal_Bool isFormConnected() const { return NULL != m_pFormAdapter; } + void connectForm( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable >& _rxForm ); + void disconnectForm(); + + void ensureDesignMode(); + + virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > + getControlContainer() = 0; + + protected: + // XLoadListener equivalents + virtual void _loaded( const ::com::sun::star::lang::EventObject& _rEvent ); + virtual void _unloading( const ::com::sun::star::lang::EventObject& _rEvent ); + virtual void _unloaded( const ::com::sun::star::lang::EventObject& _rEvent ); + virtual void _reloading( const ::com::sun::star::lang::EventObject& _rEvent ); + virtual void _reloaded( const ::com::sun::star::lang::EventObject& _rEvent ); + + }; + +//......................................................................... +} // namespace bib +//......................................................................... + +#endif // EXTENSIONS_BIB_FORMCONTROLCONTAINER_HXX + diff --git a/extensions/source/bibliography/framectr.cxx b/extensions/source/bibliography/framectr.cxx new file mode 100644 index 000000000000..ca9996216f9b --- /dev/null +++ b/extensions/source/bibliography/framectr.cxx @@ -0,0 +1,977 @@ +/************************************************************************* + * + * 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_extensions.hxx" +#include <vcl/waitobj.hxx> +#include <cppuhelper/interfacecontainer.hxx> +#include <com/sun/star/util/URL.hpp> +#include <osl/mutex.hxx> +#include <vcl/msgbox.hxx> +#include <tools/debug.hxx> +#include <vcl/stdtext.hxx> +#include <comphelper/types.hxx> +#include <comphelper/sequence.hxx> +#include "framectr.hxx" +#include "datman.hxx" +#include "bibresid.hxx" +#include "bib.hrc" +#include <toolkit/helper/vclunohelper.hxx> +#include "bibconfig.hxx" +#include <cppuhelper/implbase1.hxx> // helper for implementations +#include <vcl/svapp.hxx> +#include "bibliography.hrc" +#include <comphelper/processfactory.hxx> +#include <com/sun/star/form/XConfirmDeleteListener.hpp> +#include <com/sun/star/form/runtime/XFormController.hpp> +#include <com/sun/star/beans/PropertyState.hpp> +#include <com/sun/star/beans/PropertyValue.hpp> +#include <com/sun/star/ui/dialogs/XExecutableDialog.hpp> +#include <com/sun/star/sdbcx/Privilege.hpp> +#include <com/sun/star/sdbc/XResultSetUpdate.hpp> +#include <com/sun/star/sdb/RowChangeAction.hpp> +#include <com/sun/star/frame/CommandGroup.hpp> +#include <com/sun/star/datatransfer/clipboard/XClipboard.hpp> +#include <sot/exchange.hxx> +#include <sot/formats.hxx> +#include <vcl/edit.hxx> +#include <vos/mutex.hxx> + +#include <hash_map> + +using namespace osl; +using namespace cppu; +using namespace rtl; +using namespace com::sun::star::sdbc; +using namespace com::sun::star::frame; +using namespace com::sun::star::uno; +using namespace com::sun::star; + +#define C2U(cChar) OUString::createFromAscii(cChar) + +struct DispatchInfo +{ + const char* pCommand; + sal_Int16 nGroupId; + sal_Bool bActiveConnection; +}; + +struct CacheDispatchInfo +{ + sal_Int16 nGroupId; + sal_Bool bActiveConnection; +}; + +// Attention: commands must be sorted by command groups. Implementation is dependent +// on this!! +static DispatchInfo SupportedCommandsArray[] = +{ + { ".uno:Undo" , frame::CommandGroup::EDIT , sal_False }, + { ".uno:Cut" , frame::CommandGroup::EDIT , sal_False }, + { ".uno:Copy" , frame::CommandGroup::EDIT , sal_False }, + { ".uno:Paste" , frame::CommandGroup::EDIT , sal_False }, + { ".uno:SelectAll" , frame::CommandGroup::EDIT , sal_False }, + { ".uno:CloseDoc" , frame::CommandGroup::DOCUMENT , sal_False }, + { ".uno:StatusBarVisible" , frame::CommandGroup::VIEW , sal_False }, + { ".uno:AvailableToolbars" , frame::CommandGroup::VIEW , sal_False }, + { ".uno:Bib/standardFilter" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/DeleteRecord" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/InsertRecord" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/query" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/autoFilter" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/source" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/removeFilter" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/sdbsource" , frame::CommandGroup::DATA , sal_True }, + { ".uno:Bib/Mapping" , frame::CommandGroup::DATA , sal_True }, + { 0 , 0 , sal_False } +}; + +typedef ::std::hash_map< ::rtl::OUString, CacheDispatchInfo, rtl::OUStringHash, ::std::equal_to< ::rtl::OUString > > CmdToInfoCache; + +SV_IMPL_PTRARR( BibStatusDispatchArr, BibStatusDispatchPtr ); + +const CmdToInfoCache& GetCommandToInfoCache() +{ + static sal_Bool bCacheInitialized = sal_False; + static CmdToInfoCache aCmdToInfoCache; + + if ( !bCacheInitialized ) + { + ::osl::MutexGuard aGuard( ::osl::Mutex::getGlobalMutex() ); + if ( !bCacheInitialized ) + { + sal_Int32 i( 0 ); + while ( SupportedCommandsArray[i].pCommand != 0 ) + { + rtl::OUString aCommand( rtl::OUString::createFromAscii( SupportedCommandsArray[i].pCommand )); + + CacheDispatchInfo aDispatchInfo; + aDispatchInfo.nGroupId = SupportedCommandsArray[i].nGroupId; + aDispatchInfo.bActiveConnection = SupportedCommandsArray[i].bActiveConnection; + aCmdToInfoCache.insert( CmdToInfoCache::value_type( aCommand, aDispatchInfo )); + ++i; + } + bCacheInitialized = sal_True; + } + } + + return aCmdToInfoCache; +} + + +class BibFrameCtrl_Impl : public cppu::WeakImplHelper1 < XFrameActionListener > +{ +public: + Mutex aMutex; + OMultiTypeInterfaceContainerHelper aLC; + + BibFrameController_Impl* pController; + + BibFrameCtrl_Impl() + : aLC( aMutex ) + , pController(0) + {} + + ~BibFrameCtrl_Impl(); + + virtual void SAL_CALL frameAction(const FrameActionEvent& aEvent) throw( RuntimeException ); + virtual void SAL_CALL disposing( const lang::EventObject& Source ) throw (::com::sun::star::uno::RuntimeException); +}; + + +BibFrameCtrl_Impl::~BibFrameCtrl_Impl() +{ +} + +void BibFrameCtrl_Impl::frameAction(const FrameActionEvent& aEvent) throw( uno::RuntimeException ) +{ + if ( pController && aEvent.Frame == pController->getFrame()) + { + if(aEvent.Action == FrameAction_FRAME_ACTIVATED) + { + pController->activate(); + } + else if(aEvent.Action == FrameAction_FRAME_DEACTIVATING) + { + pController->deactivate(); + } + } +} + +void BibFrameCtrl_Impl::disposing( const lang::EventObject& /*Source*/ ) + throw (::com::sun::star::uno::RuntimeException) +{ + vos::OGuard aGuard(Application::GetSolarMutex()); + if ( pController ) + pController->getFrame()->removeFrameActionListener( this ); +} + +BibFrameController_Impl::BibFrameController_Impl( const uno::Reference< awt::XWindow > & xComponent, + BibDataManager* pDataManager) + :xWindow( xComponent ) + ,m_xDatMan( pDataManager ) + ,pDatMan( pDataManager ) + ,pBibMod(NULL) +{ + Window* pParent = VCLUnoHelper::GetWindow( xWindow ); + pParent->SetUniqueId(UID_BIB_FRAME_WINDOW); + bDisposing=sal_False; + bHierarchical=sal_True; + pImp = new BibFrameCtrl_Impl; + pImp->pController = this; + pImp->acquire(); +} + +BibFrameController_Impl::~BibFrameController_Impl() +{ + pImp->pController = NULL; + pImp->release(); + delete pDatMan; + if(pBibMod) + CloseBibModul(pBibMod); +} + +::rtl::OUString SAL_CALL BibFrameController_Impl::getImplementationName() throw (::com::sun::star::uno::RuntimeException) +{ + return ::rtl::OUString::createFromAscii("com.sun.star.comp.extensions.Bibliography"); +} + +sal_Bool SAL_CALL BibFrameController_Impl::supportsService( const ::rtl::OUString& sServiceName ) throw (::com::sun::star::uno::RuntimeException) +{ + return ( + sServiceName.equalsAscii("com.sun.star.frame.Bibliography") || + sServiceName.equalsAscii("com.sun.star.frame.Controller") + ); +} + +::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL BibFrameController_Impl::getSupportedServiceNames() throw (::com::sun::star::uno::RuntimeException) +{ + // return only top level services ... + // base services are included there and should be asked by uno-rtti. + ::com::sun::star::uno::Sequence< ::rtl::OUString > lNames(1); + lNames[0] = ::rtl::OUString::createFromAscii("com.sun.star.frame.Bibliography"); + return lNames; +} + +void BibFrameController_Impl::attachFrame( const uno::Reference< XFrame > & xArg ) throw (::com::sun::star::uno::RuntimeException) +{ + xFrame = xArg; + xFrame->addFrameActionListener( pImp ); +} + +sal_Bool BibFrameController_Impl::attachModel( const uno::Reference< XModel > & /*xModel*/ ) throw (::com::sun::star::uno::RuntimeException) +{ + return sal_False; +} + +sal_Bool BibFrameController_Impl::suspend( sal_Bool bSuspend ) throw (::com::sun::star::uno::RuntimeException) +{ + if ( bSuspend ) + getFrame()->removeFrameActionListener( pImp ); + else + getFrame()->addFrameActionListener( pImp ); + return sal_True; +} + +uno::Any BibFrameController_Impl::getViewData() throw (::com::sun::star::uno::RuntimeException) +{ + return uno::Any(); +} + +void BibFrameController_Impl::restoreViewData( const uno::Any& /*Value*/ ) throw (::com::sun::star::uno::RuntimeException) +{ +} + +uno::Reference< XFrame > BibFrameController_Impl::getFrame() throw (::com::sun::star::uno::RuntimeException) +{ + return xFrame; +} + +uno::Reference< XModel > BibFrameController_Impl::getModel() throw (::com::sun::star::uno::RuntimeException) +{ + return uno::Reference< XModel > (); +} + +void BibFrameController_Impl::dispose() throw (::com::sun::star::uno::RuntimeException) +{ + bDisposing = sal_True; + lang::EventObject aObject; + aObject.Source = (XController*)this; + pImp->aLC.disposeAndClear(aObject); + m_xDatMan = 0; + pDatMan = 0; + aStatusListeners.DeleteAndDestroy( 0, aStatusListeners.Count() ); + } + +void BibFrameController_Impl::addEventListener( const uno::Reference< lang::XEventListener > & aListener ) throw (::com::sun::star::uno::RuntimeException) +{ + pImp->aLC.addInterface( ::getCppuType((const Reference< lang::XEventListener >*)0), aListener ); +} + +void BibFrameController_Impl::removeEventListener( const uno::Reference< lang::XEventListener > & aListener ) throw (::com::sun::star::uno::RuntimeException) +{ + pImp->aLC.removeInterface( ::getCppuType((const Reference< lang::XEventListener >*)0), aListener ); +} + +uno::Reference< frame::XDispatch > BibFrameController_Impl::queryDispatch( const util::URL& aURL, const rtl::OUString& /*aTarget*/, sal_Int32 /*nSearchFlags*/ ) throw (::com::sun::star::uno::RuntimeException) +{ + if ( !bDisposing ) + { + const CmdToInfoCache& rCmdCache = GetCommandToInfoCache(); + CmdToInfoCache::const_iterator pIter = rCmdCache.find( aURL.Complete ); + if ( pIter != rCmdCache.end() ) + { + if (( pDatMan->HasActiveConnection() ) || + ( !pIter->second.bActiveConnection )) + return (frame::XDispatch*) this; + } + } + + return uno::Reference< frame::XDispatch > (); +} + +uno::Sequence<uno::Reference< XDispatch > > BibFrameController_Impl::queryDispatches( const uno::Sequence<DispatchDescriptor>& aDescripts ) throw (::com::sun::star::uno::RuntimeException) +{ + uno::Sequence< uno::Reference< XDispatch > > aDispatches( aDescripts.getLength() ); + for ( sal_Int32 i=0; i<aDescripts.getLength(); ++i ) + aDispatches[i] = queryDispatch( aDescripts[i].FeatureURL, aDescripts[i].FrameName, aDescripts[i].SearchFlags ); + return aDispatches; +} + +uno::Sequence< ::sal_Int16 > SAL_CALL BibFrameController_Impl::getSupportedCommandGroups() +throw (::com::sun::star::uno::RuntimeException) +{ + uno::Sequence< ::sal_Int16 > aDispatchInfo( 4 ); + + aDispatchInfo[0] = frame::CommandGroup::EDIT; + aDispatchInfo[1] = frame::CommandGroup::DOCUMENT; + aDispatchInfo[2] = frame::CommandGroup::DATA; + aDispatchInfo[3] = frame::CommandGroup::VIEW; + + return aDispatchInfo; +} + +uno::Sequence< frame::DispatchInformation > SAL_CALL BibFrameController_Impl::getConfigurableDispatchInformation( ::sal_Int16 nCommandGroup ) +throw (::com::sun::star::uno::RuntimeException) +{ + const CmdToInfoCache& rCmdCache = GetCommandToInfoCache(); + + sal_Bool bGroupFound( sal_False ); + frame::DispatchInformation aDispatchInfo; + std::list< frame::DispatchInformation > aDispatchInfoList; + + if (( nCommandGroup == frame::CommandGroup::EDIT ) || + ( nCommandGroup == frame::CommandGroup::DOCUMENT ) || + ( nCommandGroup == frame::CommandGroup::DATA ) || + ( nCommandGroup == frame::CommandGroup::VIEW )) + { + CmdToInfoCache::const_iterator pIter = rCmdCache.begin(); + while ( pIter != rCmdCache.end() ) + { + if ( pIter->second.nGroupId == nCommandGroup ) + { + bGroupFound = sal_True; + aDispatchInfo.Command = pIter->first; + aDispatchInfo.GroupId = pIter->second.nGroupId; + aDispatchInfoList.push_back( aDispatchInfo ); + } + else if ( bGroupFound ) + break; + + ++pIter; + } + } + + ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchInformation > aSeq = + comphelper::containerToSequence< ::com::sun::star::frame::DispatchInformation, std::list< ::com::sun::star::frame::DispatchInformation > >( aDispatchInfoList ); + + return aSeq; +} + +sal_Bool canInsertRecords(const Reference< beans::XPropertySet>& _rxCursorSet) +{ + sal_Int32 nPriv = 0; + _rxCursorSet->getPropertyValue(C2U("Privileges")) >>= nPriv; + return ((_rxCursorSet.is() && (nPriv & sdbcx::Privilege::INSERT) != 0)); +} +/* -----------------------------08.05.2002 08:58------------------------------ + + ---------------------------------------------------------------------------*/ +sal_Bool BibFrameController_Impl::SaveModified(const Reference< form::runtime::XFormController>& xController) +{ + if (!xController.is()) + return sal_False; + sal_Bool bInserted = sal_False; + + Reference< XResultSetUpdate> _xCursor = Reference< XResultSetUpdate>(xController->getModel(), UNO_QUERY); + + if (!_xCursor.is()) + return sal_False; + + Reference< beans::XPropertySet> _xSet = Reference< beans::XPropertySet>(_xCursor, UNO_QUERY); + if (!_xSet.is()) + return sal_False; + + // muß gespeichert werden ? + sal_Bool bIsNew = ::comphelper::getBOOL(_xSet->getPropertyValue(C2U("IsNew"))); + sal_Bool bIsModified = ::comphelper::getBOOL(_xSet->getPropertyValue(C2U("IsModified"))); + sal_Bool bResult = !bIsModified; + if (bIsModified) + { + try + { + if (bIsNew) + _xCursor->insertRow(); + else + _xCursor->updateRow(); + bResult = sal_True; + } + catch(Exception&) + { + DBG_ERROR("SaveModified: Exception occured!"); + } + + bInserted = bIsNew && bResult; + } + return bResult; +} + +Window* lcl_GetFocusChild( Window* pParent ) +{ + sal_uInt16 nChildren = pParent->GetChildCount(); + for( sal_uInt16 nChild = 0; nChild < nChildren; ++nChild) + { + Window* pChild = pParent->GetChild( nChild ); + if(pChild->HasFocus()) + return pChild; + Window* pSubChild = lcl_GetFocusChild( pChild ); + if(pSubChild) + return pSubChild; + } + return 0; +} + +//class XDispatch +void BibFrameController_Impl::dispatch(const util::URL& _rURL, const uno::Sequence< beans::PropertyValue >& aArgs) throw (::com::sun::star::uno::RuntimeException) +{ + if ( !bDisposing ) + { + vos::OGuard aGuard(Application::GetSolarMutex()); + Window* pParent = VCLUnoHelper::GetWindow( xWindow ); + WaitObject aWaitObject( pParent ); + + String aCommand( _rURL.Path); + if(aCommand.EqualsAscii("Bib/Mapping")) + { + pDatMan->CreateMappingDialog(pParent); + } + else if(aCommand.EqualsAscii("Bib/source")) + { + ChangeDataSource(aArgs); + } + else if(aCommand.EqualsAscii("Bib/sdbsource")) + { + rtl::OUString aURL = pDatMan->CreateDBChangeDialog(pParent); + if(aURL.getLength()) + { + try + { + uno::Sequence< beans::PropertyValue > aNewDataSource(2); + beans::PropertyValue* pProps = aNewDataSource.getArray(); + pProps[0].Value <<= rtl::OUString(); + pProps[1].Value <<= aURL; + ChangeDataSource(aNewDataSource); + } + catch(const Exception&) + { + DBG_ERROR("Exception catched while changing the data source"); + } + } + } + else if(aCommand.EqualsAscii("Bib/autoFilter")) + { + sal_uInt16 nCount = aStatusListeners.Count(); + for ( sal_uInt16 n=0; n<nCount; n++ ) + { + BibStatusDispatch *pObj = aStatusListeners[n]; + if ( pObj->aURL.Path == C2U("Bib/removeFilter") ) + { + FeatureStateEvent aEvent; + aEvent.FeatureURL = pObj->aURL; + aEvent.IsEnabled = sal_True; + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + pObj->xListener->statusChanged( aEvent ); + //break; because there are more than one + } + } + + const beans::PropertyValue* pPropertyValue = aArgs.getConstArray(); + uno::Any aValue=pPropertyValue[0].Value; + rtl::OUString aQuery; + aValue >>= aQuery; + + aValue=pPropertyValue[1].Value; + rtl::OUString aQueryField; + aValue >>= aQueryField; + BibConfig* pConfig = BibModul::GetConfig(); + pConfig->setQueryField(aQueryField); + pDatMan->startQueryWith(aQuery); + } + else if(aCommand.EqualsAscii("Bib/standardFilter")) + { + try + { + uno::Reference< lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory(); + + // build the arguments for the filter dialog to be created + Sequence< Any > aDialogCreationArgs( 3 ); + Any* pDialogCreationArgs = aDialogCreationArgs.getArray(); + // the query composer + *pDialogCreationArgs++ <<= beans::PropertyValue( ::rtl::OUString::createFromAscii( "QueryComposer" ), + -1, + makeAny( pDatMan->getParser() ), + beans::PropertyState_DIRECT_VALUE + ); + + // the rowset + *pDialogCreationArgs++ <<= beans::PropertyValue( ::rtl::OUString::createFromAscii( "RowSet" ), + -1, + makeAny( pDatMan->getForm() ), + beans::PropertyState_DIRECT_VALUE + ); + // the parent window for the dialog + *pDialogCreationArgs++ <<= beans::PropertyValue( ::rtl::OUString::createFromAscii( "ParentWindow" ), + -1, + makeAny( xWindow ), + beans::PropertyState_DIRECT_VALUE + ); + + // create the dialog object + const ::rtl::OUString sDialogServiceName = ::rtl::OUString::createFromAscii( "com.sun.star.sdb.FilterDialog" ); + uno::Reference< uno::XInterface > xDialog = xORB->createInstanceWithArguments( + sDialogServiceName, + aDialogCreationArgs + ); + if ( !xDialog.is() ) + { + ShowServiceNotAvailableError( VCLUnoHelper::GetWindow( xWindow ), sDialogServiceName, sal_True ); + } + else + { + // execute it + uno::Reference< ui::dialogs::XExecutableDialog > xExec( xDialog, UNO_QUERY ); + DBG_ASSERT( xExec.is(), "BibFrameController_Impl::dispatch: missing an interface on the dialog!" ); + if ( xExec.is() ) + if ( xExec->execute( ) ) + { + // the dialog has been executed successfully, and the filter on the query composer + // has been changed + ::rtl::OUString sNewFilter = pDatMan->getParser()->getFilter(); + pDatMan->setFilter( sNewFilter ); + } + } + } + catch( const uno::Exception& ) + { + DBG_ERROR( "BibFrameController_Impl::dispatch: caught an exception!" ); + } + + sal_uInt16 nCount = aStatusListeners.Count(); + for ( sal_uInt16 n=0; n<nCount; n++ ) + { + BibStatusDispatch *pObj = aStatusListeners[n]; + if ( pObj->aURL.Path == C2U("Bib/removeFilter") && pDatMan->getParser().is()) + { + FeatureStateEvent aEvent; + aEvent.FeatureURL = pObj->aURL; + aEvent.IsEnabled = 0 != pDatMan->getParser()->getFilter().getLength(); + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + pObj->xListener->statusChanged( aEvent ); + } + } + } + else if(aCommand.EqualsAscii("Bib/removeFilter")) + { + RemoveFilter(); + } + else if(_rURL.Complete.equalsAsciiL(RTL_CONSTASCII_STRINGPARAM("slot:5503")) || + aCommand.EqualsAscii("CloseDoc")) + { + Application::PostUserEvent( STATIC_LINK( this, BibFrameController_Impl, + DisposeHdl ), 0 ); + + } + else if(aCommand.EqualsAscii("Bib/InsertRecord")) + { + Reference<form::runtime::XFormController > xFormCtrl = pDatMan->GetFormController(); + if(SaveModified(xFormCtrl)) + { + try + { + Reference< sdbc::XResultSet > xCursor( pDatMan->getForm(), UNO_QUERY ); + xCursor->last(); + + Reference< XResultSetUpdate > xUpdateCursor( pDatMan->getForm(), UNO_QUERY ); + xUpdateCursor->moveToInsertRow(); + } + catch(Exception&) + { + DBG_ERROR("Exception in last() or moveToInsertRow()"); + } + } + } + else if(aCommand.EqualsAscii("Bib/DeleteRecord")) + { + Reference< ::com::sun::star::sdbc::XResultSet > xCursor(pDatMan->getForm(), UNO_QUERY); + Reference< XResultSetUpdate > xUpdateCursor(xCursor, UNO_QUERY); + Reference< beans::XPropertySet > xSet(pDatMan->getForm(), UNO_QUERY); + sal_Bool bIsNew = ::comphelper::getBOOL(xSet->getPropertyValue(C2U("IsNew"))); + if(!bIsNew) + { + sal_uInt32 nCount = 0; + xSet->getPropertyValue(C2U("RowCount")) >>= nCount; + // naechste position festellen + sal_Bool bSuccess = sal_False; + sal_Bool bLeft = sal_False; + sal_Bool bRight = sal_False; + try + { + bLeft = xCursor->isLast() && nCount > 1; + bRight= !xCursor->isLast(); + // ask for confirmation + Reference< frame::XController > xCtrl = pImp->pController; + Reference< form::XConfirmDeleteListener > xConfirm(pDatMan->GetFormController(),UNO_QUERY); + if (xConfirm.is()) + { + sdb::RowChangeEvent aEvent; + aEvent.Source = Reference< XInterface > (xCursor, UNO_QUERY); + aEvent.Action = sdb::RowChangeAction::DELETE; + aEvent.Rows = 1; + bSuccess = xConfirm->confirmDelete(aEvent); + } + + // das Ding loeschen + if (bSuccess) + xUpdateCursor->deleteRow(); + } + catch(Exception&) + { + bSuccess = sal_False; + } + if (bSuccess) + { + if (bLeft || bRight) + xCursor->relative(bRight ? 1 : -1); + else + { + sal_Bool bCanInsert = canInsertRecords(xSet); + // kann noch ein Datensatz eingefuegt weden + try + { + if (bCanInsert) + xUpdateCursor->moveToInsertRow(); + else + // Datensatz bewegen um Stati neu zu setzen + xCursor->first(); + } + catch(Exception&) + { + DBG_ERROR("DeleteRecord : exception caught !"); + } + } + } + } + } + else if(aCommand.EqualsAscii("Cut")) + { + Window* pChild = lcl_GetFocusChild( VCLUnoHelper::GetWindow( xWindow ) ); + if(pChild) + { + KeyEvent aEvent( 0, KEYFUNC_CUT ); + pChild->KeyInput( aEvent ); + } + } + else if(aCommand.EqualsAscii("Copy")) + { + Window* pChild = lcl_GetFocusChild( VCLUnoHelper::GetWindow( xWindow ) ); + if(pChild) + { + KeyEvent aEvent( 0, KEYFUNC_COPY ); + pChild->KeyInput( aEvent ); + } + } + else if(aCommand.EqualsAscii("Paste")) + { + Window* pChild = lcl_GetFocusChild( VCLUnoHelper::GetWindow( xWindow ) ); + if(pChild) + { + KeyEvent aEvent( 0, KEYFUNC_PASTE ); + pChild->KeyInput( aEvent ); + } + } + } +} +IMPL_STATIC_LINK( BibFrameController_Impl, DisposeHdl, void*, EMPTYARG ) +{ + pThis->xFrame->dispose(); + return 0; +}; + +//----------------------------------------------------------------------------- +void BibFrameController_Impl::addStatusListener( + const uno::Reference< frame::XStatusListener > & aListener, + const util::URL& aURL) + throw (::com::sun::star::uno::RuntimeException) +{ + BibConfig* pConfig = BibModul::GetConfig(); + // create a new Reference and insert into listener array + aStatusListeners.Insert( new BibStatusDispatch( aURL, aListener ), aStatusListeners.Count() ); + + // den ersten Status synchron zusenden + FeatureStateEvent aEvent; + aEvent.FeatureURL = aURL; + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + if ( aURL.Path == C2U("StatusBarVisible") ) + { + aEvent.IsEnabled = sal_False; + aEvent.State <<= sal_Bool( sal_False ); + } + else if ( aURL.Path == C2U("Bib/hierarchical") ) + { + aEvent.IsEnabled = sal_True; + const char* pHier = bHierarchical? "" : "*" ; + aEvent.State <<= rtl::OUString::createFromAscii(pHier); + } + else if(aURL.Path == C2U("Bib/MenuFilter")) + { + aEvent.IsEnabled = sal_True; + aEvent.FeatureDescriptor=pDatMan->getQueryField(); + + uno::Sequence<rtl::OUString> aStringSeq=pDatMan->getQueryFields(); + aEvent.State.setValue(&aStringSeq,::getCppuType((uno::Sequence<rtl::OUString>*)0)); + + } + else if ( aURL.Path == C2U("Bib/source")) + { + aEvent.IsEnabled = sal_True; + aEvent.FeatureDescriptor=pDatMan->getActiveDataTable(); + + uno::Sequence<rtl::OUString> aStringSeq=pDatMan->getDataSources(); + aEvent.State.setValue(&aStringSeq,::getCppuType((uno::Sequence<rtl::OUString>*)0)); + } + else if(aURL.Path == C2U("Bib/sdbsource") || + aURL.Path == C2U("Bib/Mapping") || + aURL.Path == C2U("Bib/autoFilter") || + aURL.Path.equalsAscii("Bib/standardFilter")) + { + aEvent.IsEnabled = sal_True; + } + else if(aURL.Path == C2U("Bib/query")) + { + aEvent.IsEnabled = sal_True; + aEvent.State <<= pConfig->getQueryText(); + } + else if (aURL.Path == C2U("Bib/removeFilter") ) + { + rtl::OUString aFilterStr=pDatMan->getFilter(); + aEvent.IsEnabled = (aFilterStr.getLength() > 0); + } + else if(aURL.Path == C2U("Cut")) + { + Window* pChild = lcl_GetFocusChild( VCLUnoHelper::GetWindow( xWindow ) ); + Edit* pEdit = dynamic_cast<Edit*>( pChild ); + if( pEdit ) + aEvent.IsEnabled = !pEdit->IsReadOnly() && pEdit->GetSelection().Len(); + } + if(aURL.Path == C2U("Copy")) + { + Window* pChild = lcl_GetFocusChild( VCLUnoHelper::GetWindow( xWindow ) ); + Edit* pEdit = dynamic_cast<Edit*>( pChild ); + if( pEdit ) + aEvent.IsEnabled = pEdit->GetSelection().Len() > 0; + } + else if(aURL.Path == C2U("Paste") ) + { + aEvent.IsEnabled = sal_False; + Window* pChild = lcl_GetFocusChild( VCLUnoHelper::GetWindow( xWindow ) ); + if(pChild) + { + uno::Reference< datatransfer::clipboard::XClipboard > xClip = pChild->GetClipboard(); + if(xClip.is()) + { + uno::Reference< datatransfer::XTransferable > xDataObj; + const sal_uInt32 nRef = Application::ReleaseSolarMutex(); + try + { + xDataObj = xClip->getContents(); + } + catch( const uno::Exception& ) + { + } + Application::AcquireSolarMutex( nRef ); + + if ( xDataObj.is() ) + { + datatransfer::DataFlavor aFlavor; + SotExchange::GetFormatDataFlavor( SOT_FORMAT_STRING, aFlavor ); + try + { + uno::Any aData = xDataObj->getTransferData( aFlavor ); + ::rtl::OUString aText; + aData >>= aText; + aEvent.IsEnabled = aText.getLength() > 0; + } + catch( const uno::Exception& ) + { + } + } + } + uno::Reference< datatransfer::XTransferable > xContents = xClip->getContents( ); + } + } + else if(aURL.Path == C2U("Bib/DeleteRecord")) + { + Reference< ::com::sun::star::sdbc::XResultSet > xCursor(pDatMan->getForm(), UNO_QUERY); + Reference< XResultSetUpdate > xUpdateCursor(xCursor, UNO_QUERY); + Reference< beans::XPropertySet > xSet(pDatMan->getForm(), UNO_QUERY); + sal_Bool bIsNew = ::comphelper::getBOOL(xSet->getPropertyValue(C2U("IsNew"))); + if(!bIsNew) + { + sal_uInt32 nCount = 0; + xSet->getPropertyValue(C2U("RowCount")) >>= nCount; + aEvent.IsEnabled = nCount > 0; + } + } + else if (aURL.Path == C2U("Bib/InsertRecord")) + { + Reference< beans::XPropertySet > xSet(pDatMan->getForm(), UNO_QUERY); + aEvent.IsEnabled = canInsertRecords(xSet); + } + aListener->statusChanged( aEvent ); +} +//----------------------------------------------------------------------------- +void BibFrameController_Impl::removeStatusListener( + const uno::Reference< frame::XStatusListener > & aObject, const util::URL& aURL) + throw (::com::sun::star::uno::RuntimeException) +{ + // search listener array for given listener + // for checking equality always "cast" to XInterface + if ( !bDisposing ) + { + sal_uInt16 nCount = aStatusListeners.Count(); + for ( sal_uInt16 n=0; n<nCount; n++ ) + { + BibStatusDispatch *pObj = aStatusListeners[n]; + sal_Bool bFlag=pObj->xListener.is(); + if (!bFlag || (pObj->xListener == aObject && + ( !aURL.Complete.getLength() || pObj->aURL.Path == aURL.Path ))) + { + aStatusListeners.DeleteAndDestroy( n ); + break; + } + } + } +} +//----------------------------------------------------------------------------- +void BibFrameController_Impl::RemoveFilter() +{ + rtl::OUString aQuery; + pDatMan->startQueryWith(aQuery); + + sal_uInt16 nCount = aStatusListeners.Count(); + + sal_Bool bRemoveFilter=sal_False; + sal_Bool bQueryText=sal_False; + + for ( sal_uInt16 n=0; n<nCount; n++ ) + { + BibStatusDispatch *pObj = aStatusListeners[n]; + if ( pObj->aURL.Path == C2U("Bib/removeFilter") ) + { + FeatureStateEvent aEvent; + aEvent.FeatureURL = pObj->aURL; + aEvent.IsEnabled = sal_False; + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + pObj->xListener->statusChanged( aEvent ); + bRemoveFilter=sal_True; + } + else if(pObj->aURL.Path == C2U("Bib/query")) + { + FeatureStateEvent aEvent; + aEvent.FeatureURL = pObj->aURL; + aEvent.IsEnabled = sal_True; + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + aEvent.State <<= aQuery; + pObj->xListener->statusChanged( aEvent ); + bQueryText=sal_True; + } + + if(bRemoveFilter && bQueryText) + break; + + } +} +//----------------------------------------------------------------------------- +void BibFrameController_Impl::ChangeDataSource(const uno::Sequence< beans::PropertyValue >& aArgs) +{ + const beans::PropertyValue* pPropertyValue = aArgs.getConstArray(); + uno::Any aValue=pPropertyValue[0].Value; + rtl::OUString aDBTableName; + aValue >>= aDBTableName; + + + if(aArgs.getLength() > 1) + { + uno::Any aDB = pPropertyValue[1].Value; + rtl::OUString aURL; + aDB >>= aURL; + pDatMan->setActiveDataSource(aURL); + aDBTableName = pDatMan->getActiveDataTable(); + } + else + { + m_xDatMan->unload(); + pDatMan->setActiveDataTable(aDBTableName); + pDatMan->updateGridModel(); + m_xDatMan->load(); + } + + + sal_uInt16 nCount = aStatusListeners.Count(); + + sal_Bool bMenuFilter=sal_False; + sal_Bool bQueryText=sal_False; + for ( sal_uInt16 n=0; n<nCount; n++ ) + { + BibStatusDispatch *pObj = aStatusListeners[n]; + if(COMPARE_EQUAL == pObj->aURL.Path.compareToAscii("Bib/MenuFilter")) + { + FeatureStateEvent aEvent; + aEvent.FeatureURL = pObj->aURL; + aEvent.IsEnabled = sal_True; + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + aEvent.FeatureDescriptor=pDatMan->getQueryField(); + + uno::Sequence<rtl::OUString> aStringSeq=pDatMan->getQueryFields(); + aEvent.State = makeAny( aStringSeq ); + + pObj->xListener->statusChanged( aEvent ); + bMenuFilter=sal_True; + } + else if(COMPARE_EQUAL == pObj->aURL.Path.compareToAscii("Bib/query")) + { + FeatureStateEvent aEvent; + aEvent.FeatureURL = pObj->aURL; + aEvent.IsEnabled = sal_True; + aEvent.Requery = sal_False; + aEvent.Source = (XDispatch *) this; + BibConfig* pConfig = BibModul::GetConfig(); + aEvent.State <<= pConfig->getQueryText(); + pObj->xListener->statusChanged( aEvent ); + bQueryText=sal_True; + } + + if (bMenuFilter && bQueryText) + break; + + } +} + +void BibFrameController_Impl::activate() +{ +} +void BibFrameController_Impl::deactivate() +{ +} + + diff --git a/extensions/source/bibliography/framectr.hxx b/extensions/source/bibliography/framectr.hxx new file mode 100644 index 000000000000..feadb6751cb6 --- /dev/null +++ b/extensions/source/bibliography/framectr.hxx @@ -0,0 +1,130 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BIB_FRAMECTR_HXX +#define _BIB_FRAMECTR_HXX +#include <com/sun/star/beans/XPropertyChangeListener.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/frame/XDispatch.hpp> +#include <com/sun/star/form/XLoadable.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> +#include <com/sun/star/frame/XDispatchInformationProvider.hpp> +#include <cppuhelper/implbase5.hxx> +#include <svl/svarray.hxx> + +#include "bibmod.hxx" +class BibDataManager; +class BibFrameCtrl_Impl; +namespace com{namespace sun{namespace star{ + namespace form { namespace runtime { + class XFormController; + } } +}}} +class BibStatusDispatch +{ +public: + ::com::sun::star::util::URL aURL; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > xListener; + BibStatusDispatch( const ::com::sun::star::util::URL& rURL, const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > xRef ) + : aURL( rURL ) + , xListener( xRef ) + {} +}; + +typedef BibStatusDispatch* BibStatusDispatchPtr; +SV_DECL_PTRARR_DEL( BibStatusDispatchArr, BibStatusDispatchPtr, 4, 4 ) + +class BibFrameController_Impl : public cppu::WeakImplHelper5 < + ::com::sun::star::lang::XServiceInfo, + ::com::sun::star::frame::XController, + ::com::sun::star::frame::XDispatch, + ::com::sun::star::frame::XDispatchProvider, + ::com::sun::star::frame::XDispatchInformationProvider +> +{ +friend class BibFrameCtrl_Impl; + BibFrameCtrl_Impl* pImp; + BibStatusDispatchArr aStatusListeners; + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > xWindow; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > xFrame; + sal_Bool bDisposing; + sal_Bool bHierarchical; + ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable > m_xDatMan; + BibDataManager* pDatMan; + HdlBibModul pBibMod; + + DECL_STATIC_LINK( BibFrameController_Impl, DisposeHdl, void* ); + + sal_Bool SaveModified(const ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController>& xController); +public: + BibFrameController_Impl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > & xComponent, + BibDataManager* pDatMan); + ~BibFrameController_Impl(); + + + void activate(); + void deactivate(); + + void ChangeDataSource(const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArgs); + void RemoveFilter(); + + // ::com::sun::star::lang::XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName() throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& sServiceName ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::frame::XController + virtual void SAL_CALL attachFrame( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > & xFrame ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL attachModel( const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > & xModel ) throw (::com::sun::star::uno::RuntimeException); + virtual sal_Bool SAL_CALL suspend( sal_Bool bSuspend ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Any SAL_CALL getViewData() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL restoreViewData( const ::com::sun::star::uno::Any& Value ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > SAL_CALL getFrame() throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XModel > SAL_CALL getModel() throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::lang::XComponent + virtual void SAL_CALL dispose() throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & aListener ) throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::frame::XDispatchProvider + virtual ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > SAL_CALL queryDispatch( const ::com::sun::star::util::URL& aURL, const rtl::OUString& aTargetFrameName, sal_Int32 nSearchFlags) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::frame::XDispatch > > SAL_CALL queryDispatches( const ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchDescriptor >& aDescripts) throw (::com::sun::star::uno::RuntimeException); + + //class ::com::sun::star::frame::XDispatch + virtual void SAL_CALL dispatch(const ::com::sun::star::util::URL& aURL, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& aArgs) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL addStatusListener(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & xControl, const ::com::sun::star::util::URL& aURL) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL removeStatusListener(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener > & xControl, const ::com::sun::star::util::URL& aURL) throw (::com::sun::star::uno::RuntimeException); + + // ::com::sun::star::frame::XDispatchInformationProvider + virtual ::com::sun::star::uno::Sequence< ::sal_Int16 > SAL_CALL getSupportedCommandGroups( ) throw (::com::sun::star::uno::RuntimeException); + virtual ::com::sun::star::uno::Sequence< ::com::sun::star::frame::DispatchInformation > SAL_CALL getConfigurableDispatchInformation( ::sal_Int16 CommandGroup ) throw (::com::sun::star::uno::RuntimeException); + }; + +#endif + diff --git a/extensions/source/bibliography/general.cxx b/extensions/source/bibliography/general.cxx new file mode 100644 index 000000000000..36e7c825a8bf --- /dev/null +++ b/extensions/source/bibliography/general.cxx @@ -0,0 +1,892 @@ +/************************************************************************* + * + * 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_extensions.hxx" + + +#include <comphelper/processfactory.hxx> +#include <com/sun/star/awt/PosSize.hpp> +#include <com/sun/star/sdbc/XRowSet.hpp> +#include <com/sun/star/sdb/XColumn.hpp> +#include <com/sun/star/sdb/CommandType.hpp> +#include <com/sun/star/sdbcx/XColumnsSupplier.hpp> +#include <com/sun/star/form/ListSourceType.hpp> +#include <com/sun/star/awt/XWindow.hpp> +#include <toolkit/helper/vclunohelper.hxx> +#include <cppuhelper/implbase1.hxx> // helper for implementations +#include "general.hxx" +#include "sections.hrc" +#include "bibresid.hxx" +#include "datman.hxx" +#include "bibconfig.hxx" +#include "bibprop.hrc" +#include "bib.hrc" +#include "bibmod.hxx" +#include "bibtools.hxx" +#include "bibliography.hrc" +#include <tools/debug.hxx> +#include <vcl/mnemonic.hxx> +#include <vcl/svapp.hxx> +#include <vcl/i18nhelp.hxx> +#include <vcl/mnemonic.hxx> +#include <algorithm> +#include <functional> +#include <vector> +#include <tools/urlobj.hxx> + +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::form; +using namespace ::com::sun::star::sdb; +using namespace ::rtl; + +#define C2U(cChar) OUString::createFromAscii(cChar) +#define C2S(cChar) String::CreateFromAscii(cChar) +#define DISTANCE_CONTROL_TO_FIXEDTEXT 5 + +::Point lcl_MovePoint(const FixedText& rFixedText) +{ + ::Point aRet(rFixedText.GetPosPixel()); + aRet.X() += rFixedText.GetSizePixel().Width(); + aRet.X() += DISTANCE_CONTROL_TO_FIXEDTEXT; + return aRet; +} + +//----------------------------------------------------------------------------- +OUString lcl_GetColumnName( const Mapping* pMapping, sal_uInt16 nIndexPos ) +{ + BibConfig* pBibConfig = BibModul::GetConfig(); + OUString sRet = pBibConfig->GetDefColumnName(nIndexPos); + if(pMapping) + for(sal_uInt16 i = 0; i < COLUMN_COUNT; i++) + { + if(pMapping->aColumnPairs[i].sLogicalColumnName == sRet) + { + sRet = pMapping->aColumnPairs[i].sRealColumnName; + break; + } + } + return sRet; +} +/* -----------------------------04.01.00 10:54-------------------------------- + + ---------------------------------------------------------------------------*/ +class BibPosListener :public cppu::WeakImplHelper1 <sdbc::XRowSetListener> +{ + BibGeneralPage* pParentPage; +public: + BibPosListener(BibGeneralPage* pParent); + + //XPositioningListener + virtual void SAL_CALL cursorMoved(const lang::EventObject& event) throw( uno::RuntimeException ); + virtual void SAL_CALL rowChanged(const lang::EventObject& /*event*/) throw( uno::RuntimeException ){ /* not interested in */ } + virtual void SAL_CALL rowSetChanged(const lang::EventObject& /*event*/) throw( uno::RuntimeException ){ /* not interested in */ } + + //XEventListener + virtual void SAL_CALL disposing(const lang::EventObject& Source) throw( uno::RuntimeException ); + +}; +/* -----------------------------04.01.00 10:57-------------------------------- + + ---------------------------------------------------------------------------*/ +BibPosListener::BibPosListener(BibGeneralPage* pParent) : + pParentPage(pParent) +{ +} +/* -----------------------------04.01.00 10:57-------------------------------- + + ---------------------------------------------------------------------------*/ +void BibPosListener::cursorMoved(const lang::EventObject& /*aEvent*/) throw( uno::RuntimeException ) +{ + try + { + uno::Reference< form::XBoundComponent > xLstBox = pParentPage->GetTypeListBoxModel(); + uno::Reference< beans::XPropertySet > xPropSet(xLstBox, UNO_QUERY); + if(xPropSet.is()) + { + BibConfig* pBibConfig = BibModul::GetConfig(); + BibDataManager* pDatMan = pParentPage->GetDataManager(); + BibDBDescriptor aDesc; + aDesc.sDataSource = pDatMan->getActiveDataSource(); + aDesc.sTableOrQuery = pDatMan->getActiveDataTable(); + aDesc.nCommandType = CommandType::TABLE; + + const Mapping* pMapping = pBibConfig->GetMapping(aDesc); + OUString sTypeMapping = pBibConfig->GetDefColumnName(AUTHORITYTYPE_POS); + if(pMapping) + { + for(sal_uInt16 nEntry = 0; nEntry < COLUMN_COUNT; nEntry++) + { + if(pMapping->aColumnPairs[nEntry].sLogicalColumnName == sTypeMapping) + { + sTypeMapping = pMapping->aColumnPairs[nEntry].sRealColumnName; + break; + } + } + } + rtl::OUString uTypeMapping = sTypeMapping; + + uno::Reference< form::XForm > xForm = pDatMan->getForm(); + uno::Reference< sdbcx::XColumnsSupplier > xSupplyCols(xForm, UNO_QUERY); + uno::Reference< container::XNameAccess > xValueAcc; + if (xSupplyCols.is()) + xValueAcc = xSupplyCols->getColumns(); + + sal_Int16 nTempVal = -1; + if(xValueAcc.is() && xValueAcc->hasByName(uTypeMapping)) + { + uno::Any aVal = xValueAcc->getByName(uTypeMapping); + uno::Reference< uno::XInterface > xInt = *(uno::Reference< uno::XInterface > *)aVal.getValue(); + uno::Reference< sdb::XColumn > xCol(xInt, UNO_QUERY); + DBG_ASSERT(xCol.is(), "BibPosListener::positioned : invalid column (no sdb::XColumn) !"); + if (xCol.is()) + { + nTempVal = xCol->getShort(); + // getShort returns zero if the value is not a number + if (!nTempVal || xCol->wasNull()) + { + rtl::OUString sTempVal = xCol->getString(); + if(sTempVal != rtl::OUString('0')) + nTempVal = -1; + } + } + } + if(nTempVal < 0 || nTempVal >= TYPE_COUNT) + { + uno::Any aSel; + uno::Sequence<sal_Int16> aSelSeq(1); + sal_Int16* pArr = aSelSeq.getArray(); + pArr[0] = TYPE_COUNT; + aSel.setValue(&aSelSeq, ::getCppuType((Sequence<sal_Int16>*)0)); + xPropSet->setPropertyValue(C2U("SelectedItems"), aSel); + } + } + } + catch(Exception& rEx) + { + (void) rEx; // make compiler happy + DBG_ERROR("BibPosListener::positioned: something went wrong !"); + } +} +/* -----------------------------04.01.00 11:28-------------------------------- + + ---------------------------------------------------------------------------*/ +void BibPosListener::disposing(const lang::EventObject& /*Source*/) throw( uno::RuntimeException ) +{ +} + +/* -----------------16.11.99 13:06------------------- + + --------------------------------------------------*/ +BibGeneralPage::BibGeneralPage(Window* pParent, BibDataManager* pMan): + BibTabPage(pParent,BibResId(RID_TP_GENERAL)), + aControlParentWin(this, WB_DIALOGCONTROL), + aIdentifierFT(&aControlParentWin, BibResId(FT_IDENTIFIER )), + aAuthTypeFT(&aControlParentWin, BibResId(FT_AUTHTYPE )), + aYearFT(&aControlParentWin, BibResId(FT_YEAR )), + aAuthorFT(&aControlParentWin, BibResId(FT_AUTHOR )), + aTitleFT(&aControlParentWin, BibResId(FT_TITLE )), + aPublisherFT(&aControlParentWin, BibResId(FT_PUBLISHER )), + aAddressFT(&aControlParentWin, BibResId(FT_ADDRESS )), + aISBNFT(&aControlParentWin, BibResId(FT_ISBN )), + aChapterFT(&aControlParentWin, BibResId(FT_CHAPTER )), + aPagesFT(&aControlParentWin, BibResId(FT_PAGE )), + aFirstFL(&aControlParentWin, BibResId(FL_1 )), + aEditorFT(&aControlParentWin, BibResId(FT_EDITOR )), + aEditionFT(&aControlParentWin, BibResId(FT_EDITION )), + aBooktitleFT(&aControlParentWin, BibResId(FT_BOOKTITLE )), + aVolumeFT(&aControlParentWin, BibResId(FT_VOLUME )), + aHowpublishedFT(&aControlParentWin, BibResId(FT_HOWPUBLISHED )), + aOrganizationsFT(&aControlParentWin,BibResId(FT_ORGANIZATION )), + aInstitutionFT(&aControlParentWin, BibResId(FT_INSTITUTION )), + aSchoolFT(&aControlParentWin, BibResId(FT_SCHOOL )), + aReportTypeFT(&aControlParentWin, BibResId(FT_REPORT )), + aMonthFT(&aControlParentWin, BibResId(FT_MONTH )), + aSecondFL(&aControlParentWin, BibResId(FL_2 )), + aJournalFT(&aControlParentWin, BibResId(FT_JOURNAL )), + aNumberFT(&aControlParentWin, BibResId(FT_NUMBER )), + aSeriesFT(&aControlParentWin, BibResId(FT_SERIES )), + aAnnoteFT(&aControlParentWin, BibResId(FT_ANNOTE )), + aNoteFT(&aControlParentWin, BibResId(FT_NOTE )), + aURLFT(&aControlParentWin, BibResId(FT_URL )), + aThirdFL(&aControlParentWin, BibResId(FL_3 )), + aCustom1FT(&aControlParentWin, BibResId(FT_CUSTOM1 )), + aCustom2FT(&aControlParentWin, BibResId(FT_CUSTOM2 )), + aCustom3FT(&aControlParentWin, BibResId(FT_CUSTOM3 )), + aCustom4FT(&aControlParentWin, BibResId(FT_CUSTOM4 )), + aCustom5FT(&aControlParentWin, BibResId(FT_CUSTOM5 )), + aHoriScroll(this, WB_HORZ), + aVertScroll(this, WB_VERT), + sErrorPrefix(BibResId(ST_ERROR_PREFIX)), + pDatMan(pMan) +{ + aControlParentWin.Show(); + aControlParentWin.SetHelpId(HID_BIB_CONTROL_PARENT); + aStdSize = GetOutputSizePixel(); + + aBibTypeArr[0] = String(BibResId(ST_TYPE_ARTICLE)); + aBibTypeArr[1] = String(BibResId(ST_TYPE_BOOK)); + aBibTypeArr[2] = String(BibResId(ST_TYPE_BOOKLET)); + aBibTypeArr[3] = String(BibResId(ST_TYPE_CONFERENCE)); + aBibTypeArr[4] = String(BibResId(ST_TYPE_INBOOK )); + aBibTypeArr[5] = String(BibResId(ST_TYPE_INCOLLECTION)); + aBibTypeArr[6] = String(BibResId(ST_TYPE_INPROCEEDINGS)); + aBibTypeArr[7] = String(BibResId(ST_TYPE_JOURNAL )); + aBibTypeArr[8] = String(BibResId(ST_TYPE_MANUAL )); + aBibTypeArr[9] = String(BibResId(ST_TYPE_MASTERSTHESIS)); + aBibTypeArr[10] = String(BibResId(ST_TYPE_MISC )); + aBibTypeArr[11] = String(BibResId(ST_TYPE_PHDTHESIS )); + aBibTypeArr[12] = String(BibResId(ST_TYPE_PROCEEDINGS )); + aBibTypeArr[13] = String(BibResId(ST_TYPE_TECHREPORT )); + aBibTypeArr[14] = String(BibResId(ST_TYPE_UNPUBLISHED )); + aBibTypeArr[15] = String(BibResId(ST_TYPE_EMAIL )); + aBibTypeArr[16] = String(BibResId(ST_TYPE_WWW )); + aBibTypeArr[17] = String(BibResId(ST_TYPE_CUSTOM1 )); + aBibTypeArr[18] = String(BibResId(ST_TYPE_CUSTOM2 )); + aBibTypeArr[19] = String(BibResId(ST_TYPE_CUSTOM3 )); + aBibTypeArr[20] = String(BibResId(ST_TYPE_CUSTOM4 )); + aBibTypeArr[21] = String(BibResId(ST_TYPE_CUSTOM5 )); + + FreeResource(); + + InitFixedTexts(); + + aBasePos = aIdentifierFT.GetPosPixel(); + + sal_Int16* pMap = nFT2CtrlMap; + for( sal_uInt16 i = 0 ; i < FIELD_COUNT ; ++i, ++pMap ) + { + aControls[ i ] = 0; + *pMap = -1; + } + + AdjustScrollbars(); + Link aScrollLnk(LINK(this, BibGeneralPage, ScrollHdl)); + aHoriScroll.SetScrollHdl( aScrollLnk ); + aVertScroll.SetScrollHdl( aScrollLnk ); + aHoriScroll.SetLineSize(10); + aVertScroll.SetLineSize(10); + aHoriScroll.SetPageSize( aIdentifierFT.GetSizePixel().Width()); + aVertScroll.SetPageSize( + aPublisherFT.GetPosPixel().Y() - aIdentifierFT.GetPosPixel().Y()); + aHoriScroll.Show(); + aVertScroll.Show(); + + BibConfig* pBibConfig = BibModul::GetConfig(); + BibDBDescriptor aDesc; + aDesc.sDataSource = pDatMan->getActiveDataSource(); + aDesc.sTableOrQuery = pDatMan->getActiveDataTable(); + aDesc.nCommandType = CommandType::TABLE; + const Mapping* pMapping = pBibConfig->GetMapping(aDesc); + + xCtrlContnr = VCLUnoHelper::CreateControlContainer(&aControlParentWin); + + xMgr = comphelper::getProcessServiceFactory(); + // the control should be a bit smaller than the fixed text + Size aControlSize(aIdentifierFT.GetSizePixel()); + aControlSize.Width() = aControlSize.Width() * 8 / 10; + + AddControlWithError( lcl_GetColumnName( pMapping, IDENTIFIER_POS ), lcl_MovePoint( aIdentifierFT ), + aControlSize, sTableErrorString, aIdentifierFT.GetText(), + HID_BIB_IDENTIFIER_POS, 0 ); + + sTypeColumnName = lcl_GetColumnName(pMapping, AUTHORITYTYPE_POS); + + AddControlWithError( sTypeColumnName, lcl_MovePoint(aAuthTypeFT ), aControlSize, sTableErrorString, + aAuthTypeFT.GetText(), HID_BIB_AUTHORITYTYPE_POS, 1 ); + + ::Point aYearPos = lcl_MovePoint(aYearFT); + AddControlWithError( lcl_GetColumnName( pMapping, YEAR_POS ), aYearPos, + aControlSize, sTableErrorString, aYearFT.GetText(), HID_BIB_YEAR_POS, 4 ); + + AddControlWithError( lcl_GetColumnName(pMapping, AUTHOR_POS), lcl_MovePoint(aAuthorFT), + aControlSize, sTableErrorString, aAuthorFT.GetText(), HID_BIB_AUTHOR_POS, 2 ); + + ::Point aTitlePos( lcl_MovePoint( aTitleFT ) ); + ::Size aTitleSize = aTitleFT.GetSizePixel(); + aTitleSize.Width() = aYearPos.X() + aControlSize.Width() - aTitlePos.X(); + AddControlWithError( lcl_GetColumnName(pMapping, TITLE_POS), aTitlePos, aTitleSize, sTableErrorString, + aTitleFT.GetText(), HID_BIB_TITLE_POS, 22 ); + + AddControlWithError( lcl_GetColumnName( pMapping, PUBLISHER_POS ), lcl_MovePoint( aPublisherFT), + aControlSize, sTableErrorString, aPublisherFT.GetText(), HID_BIB_PUBLISHER_POS, 5 ); + + AddControlWithError( lcl_GetColumnName( pMapping, ADDRESS_POS ), lcl_MovePoint( aAddressFT ), + aControlSize, sTableErrorString, aAddressFT.GetText(), HID_BIB_ADDRESS_POS, 7 ); + + AddControlWithError( lcl_GetColumnName( pMapping, ISBN_POS ), lcl_MovePoint( aISBNFT ), + aControlSize, sTableErrorString, aISBNFT.GetText(), HID_BIB_ISBN_POS, 6 ); + + AddControlWithError( lcl_GetColumnName( pMapping, CHAPTER_POS ), lcl_MovePoint(aChapterFT), + aControlSize, sTableErrorString, aChapterFT.GetText(), HID_BIB_CHAPTER_POS, 10 ); + + AddControlWithError( lcl_GetColumnName( pMapping, PAGES_POS ), lcl_MovePoint( aPagesFT ), + aControlSize, sTableErrorString, aPagesFT.GetText(), HID_BIB_PAGES_POS, 19 ); + + AddControlWithError( lcl_GetColumnName( pMapping, EDITOR_POS ), lcl_MovePoint( aEditorFT ), + aControlSize, sTableErrorString, aEditorFT.GetText(), HID_BIB_EDITOR_POS, 12 ); + + AddControlWithError( lcl_GetColumnName( pMapping, EDITION_POS ), lcl_MovePoint(aEditionFT), + aControlSize, sTableErrorString, aEditionFT.GetText(), HID_BIB_EDITION_POS, 11 ); + + AddControlWithError( lcl_GetColumnName(pMapping, BOOKTITLE_POS), lcl_MovePoint(aBooktitleFT), + aControlSize, sTableErrorString, aBooktitleFT.GetText(), HID_BIB_BOOKTITLE_POS, 9 ); + + AddControlWithError( lcl_GetColumnName( pMapping, VOLUME_POS ), lcl_MovePoint( aVolumeFT ), + aControlSize, sTableErrorString, aVolumeFT.GetText(), HID_BIB_VOLUME_POS, 24 ); + + AddControlWithError( lcl_GetColumnName( pMapping, HOWPUBLISHED_POS ), lcl_MovePoint( aHowpublishedFT ), + aControlSize, sTableErrorString, aHowpublishedFT.GetText(), HID_BIB_HOWPUBLISHED_POS, 13 ); + + AddControlWithError( lcl_GetColumnName( pMapping, ORGANIZATIONS_POS ), lcl_MovePoint( aOrganizationsFT ), + aControlSize, sTableErrorString, aOrganizationsFT.GetText(), HID_BIB_ORGANIZATIONS_POS, 18 ); + + AddControlWithError( lcl_GetColumnName( pMapping, INSTITUTION_POS ), lcl_MovePoint( aInstitutionFT ), + aControlSize, sTableErrorString, aInstitutionFT.GetText(), HID_BIB_INSTITUTION_POS, 14 ); + + AddControlWithError( lcl_GetColumnName( pMapping, SCHOOL_POS ), lcl_MovePoint( aSchoolFT ), + aControlSize, sTableErrorString, aSchoolFT.GetText(), HID_BIB_SCHOOL_POS, 20 ); + + AddControlWithError( lcl_GetColumnName( pMapping, REPORTTYPE_POS ), lcl_MovePoint( aReportTypeFT ), + aControlSize, sTableErrorString, aReportTypeFT.GetText(), HID_BIB_REPORTTYPE_POS, 23 ); + + AddControlWithError( lcl_GetColumnName( pMapping, MONTH_POS ), lcl_MovePoint( aMonthFT ), + aControlSize, sTableErrorString, aMonthFT.GetText(), HID_BIB_MONTH_POS, 3 ); + + AddControlWithError( lcl_GetColumnName( pMapping, JOURNAL_POS ), lcl_MovePoint( aJournalFT ), + aControlSize, sTableErrorString, aJournalFT.GetText(), HID_BIB_JOURNAL_POS, 15 ); + + AddControlWithError( lcl_GetColumnName( pMapping, NUMBER_POS ), lcl_MovePoint( aNumberFT ), + aControlSize, sTableErrorString, aNumberFT.GetText(), HID_BIB_NUMBER_POS, 17 ); + + AddControlWithError( lcl_GetColumnName( pMapping, SERIES_POS ), lcl_MovePoint( aSeriesFT ), + aControlSize, sTableErrorString, aSeriesFT.GetText(), HID_BIB_SERIES_POS, 21 ); + + AddControlWithError( lcl_GetColumnName( pMapping, ANNOTE_POS ), lcl_MovePoint( aAnnoteFT ), + aControlSize, sTableErrorString, aAnnoteFT.GetText(), HID_BIB_ANNOTE_POS, 8 ); + + AddControlWithError( lcl_GetColumnName( pMapping, NOTE_POS ), lcl_MovePoint( aNoteFT ), + aControlSize, sTableErrorString, aNoteFT.GetText(), HID_BIB_NOTE_POS, 16 ); + + AddControlWithError( lcl_GetColumnName( pMapping, URL_POS ), lcl_MovePoint( aURLFT ), + aControlSize, sTableErrorString, aURLFT.GetText(), HID_BIB_URL_POS, 25 ); + + AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM1_POS ), lcl_MovePoint( aCustom1FT ), + aControlSize, sTableErrorString, aCustom1FT.GetText(), HID_BIB_CUSTOM1_POS, 26 ); + + AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM2_POS ), lcl_MovePoint( aCustom2FT ), + aControlSize, sTableErrorString, aCustom2FT.GetText(), HID_BIB_CUSTOM2_POS, 27 ); + + AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM3_POS ), lcl_MovePoint( aCustom3FT ), + aControlSize, sTableErrorString, aCustom3FT.GetText(), HID_BIB_CUSTOM3_POS, 28 ); + + AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM4_POS ), lcl_MovePoint( aCustom4FT ), + aControlSize, sTableErrorString, aCustom4FT.GetText(), HID_BIB_CUSTOM4_POS, 29 ); + + AddControlWithError( lcl_GetColumnName( pMapping, CUSTOM5_POS ), lcl_MovePoint( aCustom5FT ), + aControlSize, sTableErrorString, aCustom5FT.GetText(), HID_BIB_CUSTOM5_POS, 30 ); + + xPosListener = new BibPosListener(this); + uno::Reference< sdbc::XRowSet > xRowSet(pDatMan->getForm(), UNO_QUERY); + if(xRowSet.is()) + xRowSet->addRowSetListener(xPosListener); + uno::Reference< form::runtime::XFormController > xFormCtrl = pDatMan->GetFormController(); + xFormCtrl->setContainer(xCtrlContnr); + xFormCtrl->activateTabOrder(); + + if(sTableErrorString.Len()) + sTableErrorString.Insert(sErrorPrefix, 0); +} +//----------------------------------------------------------------------------- +BibGeneralPage::~BibGeneralPage() +{ + if (pDatMan && xPosListener.is()) + { + uno::Reference< sdbc::XRowSet > xRowSet(pDatMan->getForm(), UNO_QUERY); + if(xRowSet.is()) + xRowSet->removeRowSetListener(xPosListener); + } +} + /* -----------------------------14.04.00 13:11-------------------------------- + + ---------------------------------------------------------------------------*/ + void BibGeneralPage::RemoveListeners() + { + for(sal_uInt16 i = 0; i < FIELD_COUNT; i++) + { + if(aControls[i].is()) + { + uno::Reference< awt::XWindow > xCtrWin(aControls[i], uno::UNO_QUERY ); + xCtrWin->removeFocusListener( this ); + aControls[i] = 0; + } + } + } +/* -----------------------------21.01.00 17:05-------------------------------- + + ---------------------------------------------------------------------------*/ +void BibGeneralPage::CommitActiveControl() +{ + uno::Reference< form::runtime::XFormController > xFormCtrl = pDatMan->GetFormController(); + uno::Reference< awt::XControl > xCurr = xFormCtrl->getCurrentControl(); + if(xCurr.is()) + { + uno::Reference< awt::XControlModel > xModel = xCurr->getModel(); + uno::Reference< form::XBoundComponent > xBound(xModel, UNO_QUERY); + if(xBound.is()) + xBound->commit(); + } +} +//----------------------------------------------------------------------------- +void BibGeneralPage::AddControlWithError( const OUString& rColumnName, const ::Point& rPos, const ::Size& rSize, + String& rErrorString, String aColumnUIName, const rtl::OString& sHelpId, sal_uInt16 nIndexInFTArray ) +{ + // adds also the XControl and creates a map entry in nFT2CtrlMap[] for mapping between control and FT + + sal_Int16 nIndex = -1; + uno::Reference< awt::XControlModel > xTmp = AddXControl(rColumnName, rPos, rSize, sHelpId, nIndex ); + if( xTmp.is() ) + { + DBG_ASSERT( nIndexInFTArray < FIELD_COUNT, "*BibGeneralPage::AddControlWithError(): wrong array index!" ); + DBG_ASSERT( nFT2CtrlMap[ nIndexInFTArray ] < 0, "+BibGeneralPage::AddControlWithError(): index already in use!" ); + + nFT2CtrlMap[ nIndexInFTArray ] = nIndex; + } + else + { + if( rErrorString.Len() ) + rErrorString += '\n'; + + rErrorString += MnemonicGenerator::EraseAllMnemonicChars( aColumnUIName ); + } +} +//----------------------------------------------------------------------------- +uno::Reference< awt::XControlModel > BibGeneralPage::AddXControl( + const String& rName, + ::Point rPos, ::Size rSize, const rtl::OString& sHelpId, sal_Int16& rIndex ) +{ + uno::Reference< awt::XControlModel > xCtrModel; + try + { + sal_Bool bTypeListBox = sTypeColumnName == rName; + xCtrModel = pDatMan->loadControlModel(rName, bTypeListBox); + if ( xCtrModel.is() && xMgr.is()) + { + uno::Reference< beans::XPropertySet > xPropSet( xCtrModel, UNO_QUERY ); + + if( xPropSet.is()) + { + uno::Reference< beans::XPropertySetInfo > xPropInfo = xPropSet->getPropertySetInfo(); + + uno::Any aAny = xPropSet->getPropertyValue( C2U("DefaultControl") ); + rtl::OUString aControlName; + aAny >>= aControlName; + + rtl::OUString uProp(C2U("HelpURL")); + if(xPropInfo->hasPropertyByName(uProp)) + { + ::rtl::OUString sId = ::rtl::OUString::createFromAscii( INET_HID_SCHEME ); + DBG_ASSERT( INetURLObject( rtl::OStringToOUString( sHelpId, RTL_TEXTENCODING_UTF8 ) ).GetProtocol() == INET_PROT_NOT_VALID, "Wrong HelpId!" ); + sId += ::rtl::OUString( sHelpId, sHelpId.getLength(), RTL_TEXTENCODING_UTF8 ); + xPropSet->setPropertyValue( uProp, makeAny( sId ) ); + } + + if(bTypeListBox) + { + //uno::Reference< beans::XPropertySet > xPropSet(xControl, UNO_QUERY); + aAny <<= (sal_Int16)1; + xPropSet->setPropertyValue(C2U("BoundColumn"), aAny); + ListSourceType eSet = ListSourceType_VALUELIST; + aAny.setValue( &eSet, ::getCppuType((const ListSourceType*)0) ); + xPropSet->setPropertyValue(C2U("ListSourceType"), aAny); + + uno::Sequence<rtl::OUString> aListSource(TYPE_COUNT); + rtl::OUString* pListSourceArr = aListSource.getArray(); + //pListSourceArr[0] = C2U("select TypeName, TypeIndex from TypeNms"); + for(sal_uInt16 i = 0; i < TYPE_COUNT; i++) + pListSourceArr[i] = String::CreateFromInt32(i); + aAny.setValue(&aListSource, ::getCppuType((uno::Sequence<rtl::OUString>*)0)); + + xPropSet->setPropertyValue(C2U("ListSource"), aAny); + + uno::Sequence<rtl::OUString> aValues(TYPE_COUNT + 1); + rtl::OUString* pValuesArr = aValues.getArray(); + for(sal_uInt16 j = 0; j < TYPE_COUNT; j++) + pValuesArr[j] = aBibTypeArr[j]; + // empty string if an invalid value no values is set + pValuesArr[TYPE_COUNT] = rtl::OUString(); + + aAny.setValue(&aValues, ::getCppuType((uno::Sequence<rtl::OUString>*)0)); + + xPropSet->setPropertyValue(C2U("StringItemList"), aAny); + + sal_Bool bTrue = sal_True; + aAny.setValue( &bTrue, ::getBooleanCppuType() ); + xPropSet->setPropertyValue( C2U("Dropdown"), aAny ); + + aControlName = C2U("com.sun.star.form.control.ListBox"); + xLBModel = Reference< form::XBoundComponent >(xCtrModel, UNO_QUERY); + + } + + uno::Reference< awt::XControl > xControl(xMgr->createInstance( aControlName ), UNO_QUERY ); + if ( xControl.is() ) + { + xControl->setModel( xCtrModel); + + // Peer als Child zu dem FrameWindow + xCtrlContnr->addControl(rName, xControl); + uno::Reference< awt::XWindow > xCtrWin(xControl, UNO_QUERY ); + xCtrWin->addFocusListener( this ); + rIndex = -1; // -> implies, that not found + for(sal_uInt16 i = 0; i < FIELD_COUNT; i++) + if(!aControls[i].is()) + { + aControls[i] = xCtrWin; + rIndex = sal_Int16( i ); + break; + } + xCtrWin->setVisible( sal_True ); + xControl->setDesignMode( sal_True ); + // initially switch on the desing mode - switch it off _after_ loading the form + // 17.10.2001 - 93107 - frank.schoenheit@sun.com + + xCtrWin->setPosSize(rPos.X(), rPos.Y(), rSize.Width(), + rSize.Height(), awt::PosSize::POSSIZE); + } + } + } + } + catch(Exception& rEx) + { + (void) rEx; // make compiler happy + DBG_ERROR("BibGeneralPage::AddXControl: something went wrong !"); + } + return xCtrModel; +} + +void BibGeneralPage::AdjustScrollbars() +{ + long nVertScrollWidth = aVertScroll.GetSizePixel().Width(); + long nHoriScrollHeight = aHoriScroll.GetSizePixel().Height(); + ::Size aOutSize(GetOutputSizePixel()); + sal_Bool bHoriVisible = aOutSize.Width() <= aStdSize.Width(); + sal_Bool bVertVisible = (aOutSize.Height()-(bHoriVisible ? nHoriScrollHeight : 0)) <= (aStdSize.Height()); + aHoriScroll.Show(bHoriVisible); + aVertScroll.Show(bVertVisible); + + if(bHoriVisible) + { + ::Size aHoriSize(aOutSize.Width() - (bVertVisible ? nVertScrollWidth : 0), + nHoriScrollHeight); + aHoriScroll.SetSizePixel(aHoriSize); + aHoriScroll.SetRange( Range(0, aStdSize.Width())); + aHoriScroll.SetVisibleSize( aHoriSize.Width() - (bVertVisible ? nVertScrollWidth : 0)); + } + if(bVertVisible) + { + ::Size aVertSize(nHoriScrollHeight, aOutSize.Height() - + (bHoriVisible ? nHoriScrollHeight : 0)); + aVertScroll.SetSizePixel(aVertSize); + aVertScroll.SetRange( Range(0, aStdSize.Height())); + aVertScroll.SetVisibleSize( aVertSize.Height() ); + } + + ::Size aSize(8, 8); + aSize = LogicToPixel(aSize, MapMode(MAP_APPFONT)); + ::Size aScrollSize(aOutSize.Width() - aSize.Height(), aSize.Height()); + ::Point aScrollPos(0, aOutSize.Height() - aSize.Height()); + aHoriScroll.SetPosSizePixel(aScrollPos, aScrollSize); + + aScrollPos.X() = aOutSize.Width() - aSize.Width(); + aScrollPos.Y() = 0; + aScrollSize.Width() = aSize.Width(); + aScrollSize.Height() = aOutSize.Height() - aSize.Height(); + aVertScroll.SetPosSizePixel(aScrollPos, aScrollSize); + + ::Size aControlParentWinSz(aOutSize); + if(bHoriVisible) + aControlParentWinSz.Height() -= aSize.Height(); + if(bVertVisible) + aControlParentWinSz.Width() -= aSize.Width(); + aControlParentWin.SetSizePixel(aControlParentWinSz); +} + +void BibGeneralPage::Resize() +{ + AdjustScrollbars(); + ScrollHdl(&aVertScroll); + ScrollHdl(&aHoriScroll); + Window::Resize(); +} + +void BibGeneralPage::InitFixedTexts( void ) +{ + String aFixedStrings[ FIELD_COUNT ] = + { + String( BibResId( ST_IDENTIFIER ) ), + String( BibResId( ST_AUTHTYPE ) ), + String( BibResId( ST_AUTHOR ) ), + String( BibResId( ST_TITLE ) ), + String( BibResId( ST_MONTH ) ), + String( BibResId( ST_YEAR ) ), + String( BibResId( ST_ISBN ) ), + String( BibResId( ST_BOOKTITLE ) ), + String( BibResId( ST_CHAPTER ) ), + String( BibResId( ST_EDITION ) ), + String( BibResId( ST_EDITOR ) ), + String( BibResId( ST_HOWPUBLISHED ) ), + String( BibResId( ST_INSTITUTION ) ), + String( BibResId( ST_JOURNAL ) ), + String( BibResId( ST_NOTE ) ), + String( BibResId( ST_ANNOTE ) ), + String( BibResId( ST_NUMBER ) ), + String( BibResId( ST_ORGANIZATION ) ), + String( BibResId( ST_PAGE ) ), + String( BibResId( ST_PUBLISHER ) ), + String( BibResId( ST_ADDRESS ) ), + String( BibResId( ST_SCHOOL ) ), + String( BibResId( ST_SERIES ) ), + String( BibResId( ST_REPORT ) ), + String( BibResId( ST_VOLUME ) ), + String( BibResId( ST_URL ) ), + String( BibResId( ST_CUSTOM1 ) ), + String( BibResId( ST_CUSTOM2 ) ), + String( BibResId( ST_CUSTOM3 ) ), + String( BibResId( ST_CUSTOM4 ) ), + String( BibResId( ST_CUSTOM5 ) ) + }; + + aFixedTexts[0] = &aIdentifierFT; + aFixedTexts[1] = &aAuthTypeFT; + aFixedTexts[2] = &aAuthorFT; + aFixedTexts[3] = &aTitleFT; + aFixedTexts[4] = &aMonthFT; + aFixedTexts[5] = &aYearFT; + aFixedTexts[6] = &aISBNFT; + aFixedTexts[7] = &aBooktitleFT; + aFixedTexts[8] = &aChapterFT; + aFixedTexts[9] = &aEditionFT; + aFixedTexts[10] = &aEditorFT; + aFixedTexts[11] = &aHowpublishedFT; + aFixedTexts[12] = &aInstitutionFT; + aFixedTexts[13] = &aJournalFT; + aFixedTexts[14] = &aNoteFT; + aFixedTexts[15] = &aAnnoteFT; + aFixedTexts[16] = &aNumberFT; + aFixedTexts[17] = &aOrganizationsFT; + aFixedTexts[18] = &aPagesFT; + aFixedTexts[19] = &aPublisherFT; + aFixedTexts[20] = &aAddressFT; + aFixedTexts[21] = &aSchoolFT; + aFixedTexts[22] = &aSeriesFT; + aFixedTexts[23] = &aReportTypeFT; + aFixedTexts[24] = &aVolumeFT; + aFixedTexts[25] = &aURLFT; + aFixedTexts[26] = &aCustom1FT; + aFixedTexts[27] = &aCustom2FT; + aFixedTexts[28] = &aCustom3FT; + aFixedTexts[29] = &aCustom4FT; + aFixedTexts[30] = &aCustom5FT; + + int i; + + MnemonicGenerator aMnemonicGenerator; + // init mnemonics, first register all strings + for( i = 0 ; i < FIELD_COUNT ; ++i ) + aMnemonicGenerator.RegisterMnemonic( aFixedStrings[ i ] ); + + // ... then get all strings + for( i = 0 ; i < FIELD_COUNT ; ++i ) + aMnemonicGenerator.CreateMnemonic( aFixedStrings[ i ] ); + + // set texts + for( i = 0 ; i < FIELD_COUNT ; ++i ) + aFixedTexts[ i ]->SetText( aFixedStrings[ i ] ); +} + +IMPL_LINK(BibGeneralPage, ScrollHdl, ScrollBar*, pScroll) +{ + sal_Bool bVertical = &aVertScroll == pScroll; + long nOffset = 0; + long nCurrentOffset = 0; + if(bVertical) + nCurrentOffset = aFixedTexts[0]->GetPosPixel().Y() - aBasePos.Y(); + else + nCurrentOffset = aFixedTexts[0]->GetPosPixel().X() - aBasePos.X(); + nOffset = pScroll->IsVisible() ? pScroll->GetThumbPos() + nCurrentOffset : nCurrentOffset;; + + for(sal_uInt16 i = 0; i < FIELD_COUNT; i++) + { + ::Point aPos = aFixedTexts[i]->GetPosPixel(); + if(bVertical) + aPos.Y() -= nOffset; + else + aPos.X() -= nOffset; + aFixedTexts[i]->SetPosPixel(aPos); + if(aControls[i].is()) + { + awt::Rectangle aRect = aControls[i]->getPosSize(); + long nX = aRect.X; + long nY = aRect.Y; + if(bVertical) + nY -= nOffset; + else + nX -= nOffset; + aControls[i]->setPosSize(nX, nY, 0, 0, awt::PosSize::POS); + } + } + return 0; +} + +void BibGeneralPage::focusGained(const awt::FocusEvent& rEvent) throw( uno::RuntimeException ) +{ + Reference<awt::XWindow> xCtrWin(rEvent.Source, UNO_QUERY ); + if(xCtrWin.is()) + { + ::Size aOutSize = aControlParentWin.GetOutputSizePixel(); + awt::Rectangle aRect = xCtrWin->getPosSize(); + long nX = aRect.X; + if(nX < 0) + { + // left of the visible area + aHoriScroll.SetThumbPos(aHoriScroll.GetThumbPos() + nX); + ScrollHdl(&aHoriScroll); + } + else if(nX > aOutSize.Width()) + { + // right of the visible area + aHoriScroll.SetThumbPos(aHoriScroll.GetThumbPos() + nX - aOutSize.Width() + aFixedTexts[0]->GetSizePixel().Width()); + ScrollHdl(&aHoriScroll); + } + long nY = aRect.Y; + if(nY < 0) + { + // below the visible area + aVertScroll.SetThumbPos(aVertScroll.GetThumbPos() + nY); + ScrollHdl(&aVertScroll); + } + else if(nY > aOutSize.Height()) + { + // over the visible area + aVertScroll.SetThumbPos(aVertScroll.GetThumbPos() + nY - aOutSize.Height()+ aFixedTexts[0]->GetSizePixel().Height()); + ScrollHdl(&aVertScroll); + } + } +} + +void BibGeneralPage::focusLost(const awt::FocusEvent& ) throw( uno::RuntimeException ) +{ + CommitActiveControl(); +} + +void BibGeneralPage::disposing(const lang::EventObject& /*Source*/) throw( uno::RuntimeException ) +{ +} + +void BibGeneralPage::GetFocus() +{ + Reference< awt::XWindow >* pxControl = aControls; + + for( int i = FIELD_COUNT ; i ; --i, ++pxControl ) + { + if( pxControl->is() ) + { + ( *pxControl )->setFocus(); + return; + } + } + + // fallback + aControlParentWin.GrabFocus(); +} + +sal_Bool BibGeneralPage::HandleShortCutKey( const KeyEvent& rKeyEvent ) +{ + DBG_ASSERT( KEY_MOD2 == rKeyEvent.GetKeyCode().GetModifier(), "+BibGeneralPage::HandleShortCutKey(): this is not for me!" ); + + const vcl::I18nHelper& rI18nHelper = Application::GetSettings().GetUILocaleI18nHelper(); + const xub_Unicode c = rKeyEvent.GetCharCode(); + sal_Bool bHandled = sal_False; + + sal_Int16 i; + + typedef std::vector< sal_Int16 > sal_Int16_vector; + + sal_Int16_vector::size_type nFocused = 0xFFFF; // index of focused in vector, no one focused initial + DBG_ASSERT( nFocused > 0, "*BibGeneralPage::HandleShortCutKey(): size_type works not as expected!" ); + + sal_Int16_vector aMatchList; + + for( i = 0 ; i < FIELD_COUNT ; ++i ) + { + if( rI18nHelper.MatchMnemonic( aFixedTexts[ i ]->GetText(), c ) ) + { + bHandled = sal_True; + sal_Int16 nCtrlIndex = nFT2CtrlMap[ i ]; + + if( nCtrlIndex >= 0 ) + { // store index of control + DBG_ASSERT( aControls[ nCtrlIndex ].is(), "-BibGeneralPage::HandleShortCutKey(): valid index and no control?" ); + + uno::Reference< awt::XControl > xControl( aControls[ nCtrlIndex ], UNO_QUERY ); + DBG_ASSERT( xControl.is(), "-BibGeneralPage::HandleShortCutKey(): a control wich is not a control!" ); + + Window* pWindow = VCLUnoHelper::GetWindow( xControl->getPeer() ); + + if( pWindow ) + { + aMatchList.push_back( nCtrlIndex ); + if( pWindow->HasChildPathFocus() ) + { // save focused control + DBG_ASSERT( nFocused == 0xFFFF, "+BibGeneralPage::HandleShortCutKey(): more than one with focus?!" ); + DBG_ASSERT( aMatchList.size() > 0, "+BibGeneralPage::HandleShortCutKey(): push_back and no content?!" ); + nFocused = aMatchList.size() - 1; + } + } + } + } + } + + if( bHandled ) + { + DBG_ASSERT( aMatchList.size() > 0, "*BibGeneralPage::HandleShortCutKey(): be prepared to crash..." ); + + if( nFocused >= ( aMatchList.size() - 1 ) ) + // >=... includes 0xFFFF + // no one or last focused, take first + nFocused = 0; + else + // take next one + nFocused++; + + aControls[ aMatchList[ nFocused ] ]->setFocus(); + } + + return bHandled; +} diff --git a/extensions/source/bibliography/general.hxx b/extensions/source/bibliography/general.hxx new file mode 100644 index 000000000000..b5519301131d --- /dev/null +++ b/extensions/source/bibliography/general.hxx @@ -0,0 +1,210 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BIB_GENERAL_HXX +#define _BIB_GENERAL_HXX + +#include <com/sun/star/awt/XFocusListener.hpp> +#include <com/sun/star/awt/XControlContainer.hpp> +//#ifndef _COM_SUN_STAR_LANG_XMULTISERVICEFACTORY_HPP_ +//#include <com/sun/star/lang/XMultiServiceFactory.hpp> +//#endif +#include <com/sun/star/form/XBoundComponent.hpp> +#include <com/sun/star/sdbc/XRowSetListener.hpp> +#include <svtools/stdctrl.hxx> + +#ifndef _LSTBOX_HXX //autogen +#include <vcl/lstbox.hxx> +#endif +#include <vcl/group.hxx> +#include <svtools/svmedit.hxx> +#include <vcl/tabpage.hxx> +#include <vcl/combobox.hxx> +#include <vcl/scrbar.hxx> +#include <cppuhelper/implbase1.hxx> // helper for implementations +#include "bibshortcuthandler.hxx" + + +class BibDataManager; +#define TYPE_COUNT 22 +#define FIELD_COUNT 31 + +typedef cppu::WeakAggImplHelper1 < ::com::sun::star::awt::XFocusListener > BibGeneralPageBaseClass; + +class BibGeneralPage: public BibGeneralPageBaseClass, public BibTabPage +{ + Window aControlParentWin; + FixedText aIdentifierFT; + FixedText aAuthTypeFT; + FixedText aYearFT; + + FixedText aAuthorFT; + FixedText aTitleFT; + + FixedText aPublisherFT; + FixedText aAddressFT; + FixedText aISBNFT; + + FixedText aChapterFT; + FixedText aPagesFT; + FixedLine aFirstFL; + + FixedText aEditorFT; + FixedText aEditionFT; + + FixedText aBooktitleFT; + FixedText aVolumeFT; + FixedText aHowpublishedFT; + + FixedText aOrganizationsFT; + FixedText aInstitutionFT; + FixedText aSchoolFT; + + FixedText aReportTypeFT; + FixedText aMonthFT; + FixedLine aSecondFL; + + FixedText aJournalFT; + FixedText aNumberFT; + FixedText aSeriesFT; + + FixedText aAnnoteFT; + FixedText aNoteFT; + FixedText aURLFT; + FixedLine aThirdFL; + + FixedText aCustom1FT; + FixedText aCustom2FT; + FixedText aCustom3FT; + FixedText aCustom4FT; + FixedText aCustom5FT; + + ScrollBar aHoriScroll; + ScrollBar aVertScroll; + + FixedText* aFixedTexts[ FIELD_COUNT ]; + sal_Int16 nFT2CtrlMap[ FIELD_COUNT ]; + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindow > + aControls[ FIELD_COUNT ]; + + Size aStdSize; + Point aBasePos; + + String aBibTypeArr[ TYPE_COUNT ]; + String sErrorPrefix; + String sTableErrorString; + + String sTypeColumnName; + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer > + xCtrlContnr; + + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > + xMgr; + + ::com::sun::star::uno::Reference< ::com::sun::star::form::XBoundComponent > + xCurrentBoundComponent; + + ::com::sun::star::uno::Reference< ::com::sun::star::form::XBoundComponent > + xLBModel; + + ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XRowSetListener > + xPosListener; + + + BibDataManager* pDatMan; + + ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel > + AddXControl( const String& rName, Point aPos, Size aSize, const rtl::OString& sHelpId, + sal_Int16& rIndex ); + + void AddControlWithError( const rtl::OUString& rColumnName, const Point& rPos, + const Size& rSize, String& rErrorString, String aColumnUIName, + const rtl::OString& sHelpId, sal_uInt16 nIndexInFTArray ); + + void AdjustScrollbars(); + + DECL_LINK( ScrollHdl, ScrollBar* ); + +protected: + virtual void Resize(); + void InitFixedTexts( void ); // create mnemonics and set text an all fixed texts + +public: + BibGeneralPage(Window* pParent, BibDataManager* pDatMan); + virtual ~BibGeneralPage(); + + inline const String& GetErrorString() const; + + inline const ::com::sun::star::uno::Reference< ::com::sun::star::form::XBoundComponent >& + GetTypeListBoxModel() const; + inline const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& + GetControlContainer() const; + + inline BibDataManager* GetDataManager(); + + void CommitActiveControl(); + + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw( com::sun::star::uno::RuntimeException ); + + void SAL_CALL focusGained( const ::com::sun::star::awt::FocusEvent& e ) throw( com::sun::star::uno::RuntimeException ); + void SAL_CALL focusLost( const ::com::sun::star::awt::FocusEvent& e ) throw( com::sun::star::uno::RuntimeException ); + + void RemoveListeners(); + + virtual void GetFocus(); + + virtual sal_Bool HandleShortCutKey( const KeyEvent& rKeyEvent ); // returns true, if key was handled +}; + + +inline const String& BibGeneralPage::GetErrorString() const +{ + return sTableErrorString; +} + +inline const ::com::sun::star::uno::Reference< ::com::sun::star::form::XBoundComponent >& + BibGeneralPage::GetTypeListBoxModel() const +{ + return xLBModel; +} + +inline const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlContainer >& + BibGeneralPage::GetControlContainer() const +{ + return xCtrlContnr; +} + +inline BibDataManager* BibGeneralPage::GetDataManager() +{ + return pDatMan; +} + +#endif + + diff --git a/extensions/source/bibliography/hidother.src b/extensions/source/bibliography/hidother.src new file mode 100644 index 000000000000..7517961645e3 --- /dev/null +++ b/extensions/source/bibliography/hidother.src @@ -0,0 +1,61 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#include "bibliography.hrc" + +hidspecial HID_BIB_IDENTIFIER_POS { HelpID = HID_BIB_IDENTIFIER_POS ; }; +hidspecial HID_BIB_AUTHORITYTYPE_POS { HelpID = HID_BIB_AUTHORITYTYPE_POS ; }; +hidspecial HID_BIB_AUTHOR_POS { HelpID = HID_BIB_AUTHOR_POS ; }; +hidspecial HID_BIB_TITLE_POS { HelpID = HID_BIB_TITLE_POS ; }; +hidspecial HID_BIB_YEAR_POS { HelpID = HID_BIB_YEAR_POS ; }; +hidspecial HID_BIB_ISBN_POS { HelpID = HID_BIB_ISBN_POS ; }; +hidspecial HID_BIB_BOOKTITLE_POS { HelpID = HID_BIB_BOOKTITLE_POS ; }; +hidspecial HID_BIB_CHAPTER_POS { HelpID = HID_BIB_CHAPTER_POS ; }; +hidspecial HID_BIB_EDITION_POS { HelpID = HID_BIB_EDITION_POS ; }; +hidspecial HID_BIB_EDITOR_POS { HelpID = HID_BIB_EDITOR_POS ; }; +hidspecial HID_BIB_HOWPUBLISHED_POS { HelpID = HID_BIB_HOWPUBLISHED_POS ; }; +hidspecial HID_BIB_INSTITUTION_POS { HelpID = HID_BIB_INSTITUTION_POS ; }; +hidspecial HID_BIB_JOURNAL_POS { HelpID = HID_BIB_JOURNAL_POS ; }; +hidspecial HID_BIB_MONTH_POS { HelpID = HID_BIB_MONTH_POS ; }; +hidspecial HID_BIB_NOTE_POS { HelpID = HID_BIB_NOTE_POS ; }; +hidspecial HID_BIB_ANNOTE_POS { HelpID = HID_BIB_ANNOTE_POS ; }; +hidspecial HID_BIB_NUMBER_POS { HelpID = HID_BIB_NUMBER_POS ; }; +hidspecial HID_BIB_ORGANIZATIONS_POS { HelpID = HID_BIB_ORGANIZATIONS_POS ; }; +hidspecial HID_BIB_PAGES_POS { HelpID = HID_BIB_PAGES_POS ; }; +hidspecial HID_BIB_PUBLISHER_POS { HelpID = HID_BIB_PUBLISHER_POS ; }; +hidspecial HID_BIB_ADDRESS_POS { HelpID = HID_BIB_ADDRESS_POS ; }; +hidspecial HID_BIB_SCHOOL_POS { HelpID = HID_BIB_SCHOOL_POS ; }; +hidspecial HID_BIB_SERIES_POS { HelpID = HID_BIB_SERIES_POS ; }; +hidspecial HID_BIB_REPORTTYPE_POS { HelpID = HID_BIB_REPORTTYPE_POS ; }; +hidspecial HID_BIB_VOLUME_POS { HelpID = HID_BIB_VOLUME_POS ; }; +hidspecial HID_BIB_URL_POS { HelpID = HID_BIB_URL_POS ; }; +hidspecial HID_BIB_CUSTOM1_POS { HelpID = HID_BIB_CUSTOM1_POS ; }; +hidspecial HID_BIB_CUSTOM2_POS { HelpID = HID_BIB_CUSTOM2_POS ; }; +hidspecial HID_BIB_CUSTOM3_POS { HelpID = HID_BIB_CUSTOM3_POS ; }; +hidspecial HID_BIB_CUSTOM4_POS { HelpID = HID_BIB_CUSTOM4_POS ; }; +hidspecial HID_BIB_CUSTOM5_POS { HelpID = HID_BIB_CUSTOM5_POS ; }; +hidspecial HID_BIB_DB_GRIDCTRL { HelpID = HID_BIB_DB_GRIDCTRL ; }; diff --git a/extensions/source/bibliography/loadlisteneradapter.cxx b/extensions/source/bibliography/loadlisteneradapter.cxx new file mode 100644 index 000000000000..c11eb3bed9a4 --- /dev/null +++ b/extensions/source/bibliography/loadlisteneradapter.cxx @@ -0,0 +1,239 @@ +/************************************************************************* + * + * 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_extensions.hxx" +#include "loadlisteneradapter.hxx" +#include <osl/diagnose.h> +#include <vos/ref.hxx> + +//......................................................................... +namespace bib +{ +//......................................................................... + + using namespace ::com::sun::star::uno; + using namespace ::com::sun::star::lang; + using namespace ::com::sun::star::form; + + //===================================================================== + //= OComponentListener + //===================================================================== + //--------------------------------------------------------------------- + OComponentListener::~OComponentListener() + { + { + ::osl::MutexGuard aGuard( m_rMutex ); + if ( m_pAdapter ) + m_pAdapter->dispose(); + } + } + + //--------------------------------------------------------------------- + void OComponentListener::_disposing( const EventObject& /*_rSource*/ ) throw( RuntimeException) + { + // nothing to do here, overrride if you're interested in + } + + //--------------------------------------------------------------------- + void OComponentListener::setAdapter( OComponentAdapterBase* pAdapter ) + { + { + ::osl::MutexGuard aGuard( m_rMutex ); + if ( m_pAdapter ) + { + m_pAdapter->release(); + m_pAdapter = NULL; + } + } + + if ( pAdapter ) + { + ::osl::MutexGuard aGuard( m_rMutex ); + m_pAdapter = pAdapter; + m_pAdapter->acquire(); + } + } + + //===================================================================== + //= OComponentAdapterBase + //===================================================================== + //--------------------------------------------------------------------- + OComponentAdapterBase::OComponentAdapterBase( const Reference< XComponent >& _rxComp, sal_Bool _bAutoRelease ) + :m_xComponent( _rxComp ) + ,m_pListener( NULL ) + ,m_nLockCount( 0 ) + ,m_bListening( sal_False ) + ,m_bAutoRelease( _bAutoRelease ) + { + OSL_ENSURE( m_xComponent.is(), "OComponentAdapterBase::OComponentAdapterBase: invalid component!" ); + } + + //--------------------------------------------------------------------- + void OComponentAdapterBase::Init( OComponentListener* _pListener ) + { + OSL_ENSURE( !m_pListener, "OComponentAdapterBase::Init: already initialized!" ); + OSL_ENSURE( _pListener, "OComponentAdapterBase::Init: invalid listener!" ); + + m_pListener = _pListener; + if ( m_pListener ) + m_pListener->setAdapter( this ); + + startComponentListening( ); + m_bListening = sal_True; + } + + //--------------------------------------------------------------------- + OComponentAdapterBase::~OComponentAdapterBase() + { + } + + //--------------------------------------------------------------------- + void OComponentAdapterBase::dispose() + { + if ( m_bListening ) + { + ::vos::ORef< OComponentAdapterBase > xPreventDelete(this); + + disposing(); + + m_pListener->setAdapter(NULL); + + m_pListener = NULL; + m_bListening = sal_False; + + if (m_bAutoRelease) + m_xComponent = NULL; + } + } + + // XEventListener + + //--------------------------------------------------------------------- + void SAL_CALL OComponentAdapterBase::disposing( const EventObject& _rSource ) throw( RuntimeException ) + { + if ( m_pListener ) + { + // tell the listener + if ( !locked() ) + m_pListener->_disposing( _rSource ); + + // disconnect the listener + if ( m_pListener ) // may have been reset whilest calling into _disposing + m_pListener->setAdapter( NULL ); + } + + m_pListener = NULL; + m_bListening = sal_False; + + if ( m_bAutoRelease ) + m_xComponent = NULL; + } + + //===================================================================== + //= OLoadListenerAdapter + //===================================================================== + //--------------------------------------------------------------------- + OLoadListenerAdapter::OLoadListenerAdapter( const Reference< XLoadable >& _rxLoadable, sal_Bool _bAutoRelease ) + :OComponentAdapterBase( Reference< XComponent >( _rxLoadable, UNO_QUERY ), _bAutoRelease ) + { + } + + //--------------------------------------------------------------------- + void OLoadListenerAdapter::startComponentListening() + { + Reference< XLoadable > xLoadable( getComponent(), UNO_QUERY ); + OSL_ENSURE( xLoadable.is(), "OLoadListenerAdapter::OLoadListenerAdapter: invalid object!" ); + if ( xLoadable.is() ) + xLoadable->addLoadListener( this ); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::acquire( ) throw () + { + OLoadListenerAdapter_Base::acquire(); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::release( ) throw () + { + OLoadListenerAdapter_Base::release(); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::disposing( const EventObject& _rSource ) throw( RuntimeException) + { + OComponentAdapterBase::disposing( _rSource ); + } + + //--------------------------------------------------------------------- + void OLoadListenerAdapter::disposing() + { + Reference< XLoadable > xLoadable( getComponent(), UNO_QUERY ); + if ( xLoadable.is() ) + xLoadable->removeLoadListener( this ); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::loaded( const EventObject& _rEvent ) throw (RuntimeException) + { + if ( !locked() && getLoadListener( ) ) + getLoadListener( )->_loaded( _rEvent ); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::unloading( const EventObject& _rEvent ) throw (RuntimeException) + { + if ( !locked() && getLoadListener( ) ) + getLoadListener( )->_unloading( _rEvent ); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::unloaded( const EventObject& _rEvent ) throw (RuntimeException) + { + if ( !locked() && getLoadListener( ) ) + getLoadListener( )->_unloaded( _rEvent ); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::reloading( const EventObject& _rEvent ) throw (RuntimeException) + { + if ( !locked() && getLoadListener( ) ) + getLoadListener( )->_reloading( _rEvent ); + } + + //--------------------------------------------------------------------- + void SAL_CALL OLoadListenerAdapter::reloaded( const EventObject& _rEvent ) throw (RuntimeException) + { + if ( !locked() && getLoadListener( ) ) + getLoadListener( )->_reloaded( _rEvent ); + } + +//......................................................................... +} // namespace bib +//......................................................................... + diff --git a/extensions/source/bibliography/loadlisteneradapter.hxx b/extensions/source/bibliography/loadlisteneradapter.hxx new file mode 100644 index 000000000000..f0a0cf1e5a3e --- /dev/null +++ b/extensions/source/bibliography/loadlisteneradapter.hxx @@ -0,0 +1,185 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef EXTENSIONS_BIB_LOADLISTENERADAPTER_HXX +#define EXTENSIONS_BIB_LOADLISTENERADAPTER_HXX + +#include <osl/mutex.hxx> +#include <com/sun/star/lang/XComponent.hpp> +#include <cppuhelper/implbase1.hxx> +#include <com/sun/star/form/XLoadable.hpp> + +//......................................................................... +namespace bib +{ +//......................................................................... + + class OComponentAdapterBase; + + //===================================================================== + //= OComponentListener + //===================================================================== + class OComponentListener + { + friend class OComponentAdapterBase; + + private: + OComponentAdapterBase* m_pAdapter; + ::osl::Mutex& m_rMutex; + protected: + OComponentListener( ::osl::Mutex& _rMutex ) + :m_pAdapter( NULL ) + ,m_rMutex( _rMutex ) + { + } + + virtual ~OComponentListener(); + + // XEventListener equivalents + virtual void _disposing( const ::com::sun::star::lang::EventObject& _rSource ) throw( ::com::sun::star::uno::RuntimeException ); + + protected: + void setAdapter( OComponentAdapterBase* _pAdapter ); + }; + + //===================================================================== + //= OComponentAdapterBase + //===================================================================== + class OComponentAdapterBase + { + friend class OComponentListener; + + private: + ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent > + m_xComponent; + OComponentListener* m_pListener; + sal_Int32 m_nLockCount; + sal_Bool m_bListening : 1; + sal_Bool m_bAutoRelease : 1; + + // impl method for dispose - virtual, 'cause you at least need to remove the listener from the broadcaster + virtual void disposing() = 0; + + protected: + // attribute access for derivees + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& + getComponent() const { return m_xComponent; } + OComponentListener* getListener() { return m_pListener; } + + // to be called by derivees which started listening at the component + virtual void startComponentListening() = 0; + + virtual ~OComponentAdapterBase(); + + public: + OComponentAdapterBase( + const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& _rxComp, + sal_Bool _bAutoRelease = sal_True + ); + + // late construction + // can be called from within you ctor, to have you're object fully initialized at the moment of + // the call (which would not be the case when calling this ctor) + void Init( OComponentListener* _pListener ); + + // base for ref-counting, implemented by OComponentAdapter + virtual void SAL_CALL acquire( ) throw () = 0; + virtual void SAL_CALL release( ) throw () = 0; + + // helper + /// get the lock count + sal_Int32 locked() const { return m_nLockCount; } + + /// dispose the object - stop listening and such + void dispose(); + + protected: + // XEventListener + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw( ::com::sun::star::uno::RuntimeException); + }; + + //===================================================================== + //= OLoadListener + //===================================================================== + class OLoadListener : public OComponentListener + { + friend class OLoadListenerAdapter; + + protected: + OLoadListener( ::osl::Mutex& _rMutex ) : OComponentListener( _rMutex ) { } + + // XLoadListener equivalents + virtual void _loaded( const ::com::sun::star::lang::EventObject& aEvent ) = 0; + virtual void _unloading( const ::com::sun::star::lang::EventObject& aEvent ) = 0; + virtual void _unloaded( const ::com::sun::star::lang::EventObject& aEvent ) = 0; + virtual void _reloading( const ::com::sun::star::lang::EventObject& aEvent ) = 0; + virtual void _reloaded( const ::com::sun::star::lang::EventObject& aEvent ) = 0; + }; + + //===================================================================== + //= OLoadListenerAdapter + //===================================================================== + typedef ::cppu::WeakImplHelper1< ::com::sun::star::form::XLoadListener > OLoadListenerAdapter_Base; + class OLoadListenerAdapter + :public OLoadListenerAdapter_Base + ,public OComponentAdapterBase + { + protected: + OLoadListener* getLoadListener( ) { return static_cast< OLoadListener* >( getListener() ); } + + protected: + virtual void disposing(); + virtual void startComponentListening(); + + public: + OLoadListenerAdapter( + const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable >& _rxLoadable, + sal_Bool _bAutoRelease = sal_True + ); + + + virtual void SAL_CALL acquire( ) throw (); + virtual void SAL_CALL release( ) throw (); + + protected: + // XEventListener + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& _rSource ) throw( ::com::sun::star::uno::RuntimeException); + + // XLoadListener + virtual void SAL_CALL loaded( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unloading( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL unloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL reloading( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException); + virtual void SAL_CALL reloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException); + }; + +//......................................................................... +} // namespace bib +//......................................................................... + +#endif // EXTENSIONS_BIB_LOADLISTENERADAPTER_HXX + diff --git a/extensions/source/bibliography/makefile.mk b/extensions/source/bibliography/makefile.mk new file mode 100644 index 000000000000..b681c6c90b19 --- /dev/null +++ b/extensions/source/bibliography/makefile.mk @@ -0,0 +1,98 @@ +#************************************************************************* +# +# 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. +# +#************************************************************************* +PRJ=..$/.. + +PRJNAME=extensions +TARGET=bib +ENABLE_EXCEPTIONS=TRUE + +# --- Settings ----------------------------------------------------- + +.INCLUDE : $(PRJ)$/util$/makefile.pmk + +# --- Files -------------------------------------------------------- + +SLOFILES= $(SLO)$/formcontrolcontainer.obj \ + $(SLO)$/loadlisteneradapter.obj \ + $(SLO)$/bibconfig.obj \ + $(SLO)$/bibcont.obj \ + $(SLO)$/bibload.obj \ + $(SLO)$/bibmod.obj \ + $(SLO)$/general.obj \ + $(SLO)$/framectr.obj \ + $(SLO)$/bibview.obj \ + $(SLO)$/bibbeam.obj \ + $(SLO)$/toolbar.obj \ + $(SLO)$/datman.obj \ + + +SRS1NAME=$(TARGET) +SRC1FILES= bib.src \ + datman.src \ + sections.src \ + toolbar.src + +RESLIB1NAME=bib +RESLIB1SRSFILES= $(SRS)$/bib.srs +RESLIB1DEPN= bib.src bib.hrc + + +SHL1STDLIBS= \ + $(SOTLIB) \ + $(SVTOOLLIB) \ + $(TKLIB) \ + $(VCLLIB) \ + $(SVLLIB) \ + $(UNOTOOLSLIB) \ + $(TOOLSLIB) \ + $(DBTOOLSLIB) \ + $(COMPHELPERLIB) \ + $(CPPUHELPERLIB) \ + $(CPPULIB) \ + $(SALLIB) + + +SHL1TARGET= $(TARGET)$(DLLPOSTFIX) +SHL1LIBS= $(SLB)$/$(TARGET).lib +SHL1IMPLIB= i$(TARGET) +SHL1DEPN= $(SHL1LIBS) +SHL1DEF= $(MISC)$/$(SHL1TARGET).def +SHL1VERSIONMAP=$(SOLARENV)/src/component.map +DEF1NAME= $(SHL1TARGET) + +# --- Targets ------------------------------------------------------ + +.INCLUDE : target.mk + + +ALLTAR : $(MISC)/bib.component + +$(MISC)/bib.component .ERRREMOVE : $(SOLARENV)/bin/createcomponent.xslt \ + bib.component + $(XSLTPROC) --nonet --stringparam uri \ + '$(COMPONENTPREFIX_BASIS_NATIVE)$(SHL1TARGETN:f)' -o $@ \ + $(SOLARENV)/bin/createcomponent.xslt bib.component diff --git a/extensions/source/bibliography/menu.src b/extensions/source/bibliography/menu.src new file mode 100644 index 000000000000..a2a41ed06def --- /dev/null +++ b/extensions/source/bibliography/menu.src @@ -0,0 +1,39 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#include <svl/solar.hrc> +#include <svx/svxids.hrc> +#include <svx/globlmn.hrc> +#include "bibliography.hrc" +#include "bib.hrc" + +/* + +The menu bar resource has become obsolete. You find the menu bar definition +now at: <project>/uiconfig/sbibliography/menubar/menubar.xml + +*/ diff --git a/extensions/source/bibliography/sections.hrc b/extensions/source/bibliography/sections.hrc new file mode 100644 index 000000000000..5d146e04ce53 --- /dev/null +++ b/extensions/source/bibliography/sections.hrc @@ -0,0 +1,128 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#include "bib.hrc" + +//General +/*#define FT_FIRST_MIDDLE 1 +#define ED_FIRST 2 +#define ED_MIDDLE 3 +#define FT_NAME_SUFFIX 4 +#define ED_NAME 5 +#define CB_SUFFIX 6 +#define ED_INITIALS 8 +#define FT_COMPANY 9 +#define ED_COMPANY 10 +#define FT_DEPARTMENT 11 +#define ED_DEPARTMENT 12 +#define FT_SALUTATION 13 +#define CB_SALUTATION 14 +#define FT_SHOWNNAME 15 +#define ED_SHOWNNAME 16*/ +#define FT_IDENTIFIER 1 +#define FT_AUTHTYPE 2 +#define FT_AUTHOR 3 +#define FT_YEAR 4 +#define FT_ISBN 5 + +#define FT_MONTH 6 + +#define FT_PUBLISHER 8 + +#define FT_ADDRESS 9 +#define FT_ANNOTE 10 +#define FT_BOOKTITLE 11 +#define FT_CHAPTER 12 +#define FT_EDITION 13 +#define FT_EDITOR 14 +#define FT_HOWPUBLISHED 15 +#define FT_INSTITUTION 16 +#define FT_JOURNAL 17 +#define FT_NOTE 18 +#define FT_NUMBER 19 +#define FT_ORGANIZATION 20 +#define FT_PAGE 21 +#define FT_SCHOOL 22 +#define FT_SERIES 23 +#define FT_TITLE 24 +#define FT_REPORT 25 +#define FT_VOLUME 26 +#define FT_URL 27 +#define FT_CUSTOM1 28 +#define FT_CUSTOM2 29 +#define FT_CUSTOM3 30 +#define FT_CUSTOM4 31 +#define FT_CUSTOM5 32 +#define ST_ERROR_PREFIX 33 +#define FL_1 34 +#define FL_2 35 +#define FL_3 36 + +//Business Address +#define FT_OFFICE 1 +#define FT_STREET 2 +#define FT_CITY 3 +#define FT_STATE 4 +#define FT_COUNTRY 5 +#define FT_ZIP 6 +#define ED_OFFICE 7 +#define ED_STREET 8 +#define ED_CITY 9 +#define ED_STATE 10 +#define ED_COUNTRY 11 +#define ED_ZIP 12 +#define ED_POBOX 13 + + +//Popup SectionControl +#define PU_INSERT 1 +#define PU_REMOVE 2 +#define PU_CHG_NAME 3 + +#define ST_TYPE_ARTICLE 40 +#define ST_TYPE_BOOK 41 +#define ST_TYPE_BOOKLET 42 +#define ST_TYPE_CONFERENCE 43 +#define ST_TYPE_INBOOK 44 +#define ST_TYPE_INCOLLECTION 45 +#define ST_TYPE_INPROCEEDINGS 46 +#define ST_TYPE_JOURNAL 47 +#define ST_TYPE_MANUAL 48 +#define ST_TYPE_MASTERSTHESIS 49 +#define ST_TYPE_MISC 50 +#define ST_TYPE_PHDTHESIS 51 +#define ST_TYPE_PROCEEDINGS 52 +#define ST_TYPE_TECHREPORT 53 +#define ST_TYPE_UNPUBLISHED 54 +#define ST_TYPE_EMAIL 55 +#define ST_TYPE_WWW 56 +#define ST_TYPE_CUSTOM1 57 +#define ST_TYPE_CUSTOM2 58 +#define ST_TYPE_CUSTOM3 59 +#define ST_TYPE_CUSTOM4 60 +#define ST_TYPE_CUSTOM5 61 + diff --git a/extensions/source/bibliography/sections.src b/extensions/source/bibliography/sections.src new file mode 100644 index 000000000000..19501bd0e62a --- /dev/null +++ b/extensions/source/bibliography/sections.src @@ -0,0 +1,584 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +//#pragma CHARSET_ANSI + +#include "sections.hrc" +#include "bibliography.hrc" + +#define FT_POS 12 +#define FTSIZE_LEFT 88 +#define ED_POS_LEFT FT_POS+FTSIZE_LEFT+1 +#define ED_SIZE 70 +#define ED_POS_LEFT2 ED_POS_LEFT + ED_SIZE +1 +#define FT_POS_MIDDLE ED_POS_LEFT2 + 5 +#define FT_POS_RIGHT FT_POS_MIDDLE + FT_POS_MIDDLE - FT_POS + +#define FL_POS 6 +#define PAGE_WIDTH FT_POS_RIGHT + FTSIZE_LEFT + (FTSIZE_LEFT * 8 / 10) + FL_POS + 5 +#define FL_WIDTH PAGE_WIDTH - 2 * FL_POS + +TabPage RID_TP_GENERAL +{ + SVLook = TRUE ; + Size = MAP_APPFONT( PAGE_WIDTH, 209 ); + HelpId = HID_BIB_CONTROL_PAGE; + + FixedText FT_IDENTIFIER + { + Pos = MAP_APPFONT( FT_POS, 6 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_AUTHTYPE + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 6 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_YEAR + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 6 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_AUTHOR + { + Pos = MAP_APPFONT( FT_POS, 20 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_TITLE + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 20 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_PUBLISHER + { + Pos = MAP_APPFONT( FT_POS, 34 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_ADDRESS + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 34 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_ISBN + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 34 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_CHAPTER + { + Pos = MAP_APPFONT( FT_POS, 48 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_PAGE + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 48 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedLine FL_1 + { + Pos = MAP_APPFONT( FL_POS, 62 ); + Size = MAP_APPFONT( FL_WIDTH, 8 ); + }; + FixedText FT_EDITOR + { + Pos = MAP_APPFONT( FT_POS, 73 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_EDITION + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 73 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_BOOKTITLE + { + Pos = MAP_APPFONT( FT_POS, 87 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_VOLUME + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 87 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_HOWPUBLISHED + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 87 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_ORGANIZATION + { + Pos = MAP_APPFONT( FT_POS, 101 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_INSTITUTION + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 101 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_SCHOOL + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 101 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_REPORT + { + Pos = MAP_APPFONT( FT_POS, 115); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_MONTH + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 115 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedLine FL_2 + { + Pos = MAP_APPFONT( FL_POS, 129 ); + Size = MAP_APPFONT( FL_WIDTH, 8 ); + }; + FixedText FT_JOURNAL + { + Pos = MAP_APPFONT( FT_POS, 140 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + + FixedText FT_NUMBER + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 140 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_SERIES + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 140 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_ANNOTE + { + Pos = MAP_APPFONT( FT_POS, 154 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_NOTE + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 154 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_URL + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 154 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedLine FL_3 + { + Pos = MAP_APPFONT( FL_POS, 168 ); + Size = MAP_APPFONT( FL_WIDTH, 8 ); + }; + FixedText FT_CUSTOM1 + { + Pos = MAP_APPFONT( FT_POS, 179 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_CUSTOM2 + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 179 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_CUSTOM3 + { + Pos = MAP_APPFONT( FT_POS_RIGHT, 179 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_CUSTOM4 + { + Pos = MAP_APPFONT( FT_POS, 193 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + FixedText FT_CUSTOM5 + { + Pos = MAP_APPFONT( FT_POS_MIDDLE, 193 ); + Size = MAP_APPFONT( FTSIZE_LEFT, 10 ); + Right = TRUE; + }; + String ST_ERROR_PREFIX + { + Text [ en-US ] = "The following column names could not be assigned:\n"; + }; + String ST_TYPE_ARTICLE + { + Text [ en-US ] = "Article"; + }; + String ST_TYPE_BOOK + { + Text [ en-US ] = "Book"; + }; + String ST_TYPE_BOOKLET + { + Text [ en-US ] = "Brochures"; + }; + String ST_TYPE_CONFERENCE + { + Text [ en-US ] = "Conference proceedings"; + }; + String ST_TYPE_INBOOK + { + Text [ en-US ] = "Book excerpt"; + }; + String ST_TYPE_INCOLLECTION + { + Text [ en-US ] = "Book excerpt with title"; + }; + String ST_TYPE_INPROCEEDINGS + { + Text [ en-US ] = "Conference proceedings"; + }; + String ST_TYPE_JOURNAL + { + Text [ en-US ] = "Journal"; + }; + String ST_TYPE_MANUAL + { + Text [ en-US ] = "Techn. documentation"; + }; + String ST_TYPE_MASTERSTHESIS + { + Text [ en-US ] = "Thesis"; + }; + String ST_TYPE_MISC + { + Text [ en-US ] = "Miscellaneous"; + }; + String ST_TYPE_PHDTHESIS + { + Text [ en-US ] = "Dissertation"; + }; + String ST_TYPE_PROCEEDINGS + { + Text [ en-US ] = "Conference proceedings"; + }; + String ST_TYPE_TECHREPORT + { + Text [ en-US ] = "Research report"; + }; + String ST_TYPE_UNPUBLISHED + { + Text [ en-US ] = "Unpublished"; + }; + String ST_TYPE_EMAIL + { + Text [ en-US ] = "e-mail"; + }; + String ST_TYPE_WWW + { + Text [ en-US ] = "WWW document"; + }; + String ST_TYPE_CUSTOM1 + { + Text [ en-US ] = "User-defined1"; + }; + String ST_TYPE_CUSTOM2 + { + Text [ en-US ] = "User-defined2"; + }; + String ST_TYPE_CUSTOM3 + { + Text [ en-US ] = "User-defined3"; + }; + String ST_TYPE_CUSTOM4 + { + Text [ en-US ] = "User-defined4"; + }; + String ST_TYPE_CUSTOM5 + { + Text [ en-US ] = "User-defined5"; + }; + Text [ en-US ] = "General"; +}; +Menu RID_POPUP_ME_VIEW +{ + ItemList = + { + MenuItem + { + Identifier = PU_INSERT; + Text [ en-US ] = "Insert Section..."; + }; + MenuItem + { + Identifier = PU_REMOVE; + Text [ en-US ] = "Delete Section..."; + }; + MenuItem + { + Identifier = PU_CHG_NAME; + Text [ en-US ] = "Modify Name..."; + }; + }; +}; + +String ST_IDENTIFIER +{ + Text [ en-US ] = "~Short name"; +}; +String ST_AUTHTYPE +{ + Text [ en-US ] = "~Type"; +}; +String ST_YEAR +{ + Text [ en-US ] = "~Year"; +}; +String ST_AUTHOR +{ + Text [ en-US ] = "Author(s)"; +}; +String ST_TITLE +{ + Text [ en-US ] = "Tit~le"; +}; +String ST_PUBLISHER +{ + Text [ en-US ] = "~Publisher"; +}; +String ST_ADDRESS +{ + Text [ en-US ] = "A~ddress"; +}; +String ST_ISBN +{ + Text [ en-US ] = "~ISBN"; +}; +String ST_CHAPTER +{ + Text [ en-US ] = "~Chapter"; +}; +String ST_PAGE +{ + Text [ en-US ] = "Pa~ge(s)"; +}; +String ST_EDITOR +{ + Text [ en-US ] = "Editor"; +}; +String ST_EDITION +{ + Text [ en-US ] = "Ed~ition"; +}; +String ST_BOOKTITLE +{ + Text [ en-US ] = "~Book title"; +}; +String ST_VOLUME +{ + Text [ en-US ] = "Volume"; +}; +String ST_HOWPUBLISHED +{ + Text [ en-US ] = "Publication t~ype"; +}; +String ST_ORGANIZATION +{ + Text [ en-US ] = "Organi~zation"; +}; +String ST_INSTITUTION +{ + Text [ en-US ] = "Instit~ution"; +}; +String ST_SCHOOL +{ + Text [ en-US ] = "University"; +}; +String ST_REPORT +{ + Text [ en-US ] = "Type of re~port"; +}; +String ST_MONTH +{ + Text [ en-US ] = "~Month"; +}; +String ST_JOURNAL +{ + Text [ en-US ] = "~Journal"; +}; + +String ST_NUMBER +{ + Text [ en-US ] = "Numb~er"; +}; +String ST_SERIES +{ + Text [ en-US ] = "Se~ries"; +}; +String ST_ANNOTE +{ + Text [ en-US ] = "Ann~otation"; +}; +String ST_NOTE +{ + Text [ en-US ] = "~Note"; +}; +String ST_URL +{ + Text [ en-US ] = "URL"; +}; +String ST_CUSTOM1 +{ + Text [ en-US ] = "User-defined field ~1"; +}; +String ST_CUSTOM2 +{ + Text [ en-US ] = "User-defined field ~2"; +}; +String ST_CUSTOM3 +{ + Text [ en-US ] = "User-defined field ~3"; +}; +String ST_CUSTOM4 +{ + Text [ en-US ] = "User-defined field ~4"; +}; +String ST_CUSTOM5 +{ + Text [ en-US ] = "User-defined field ~5"; +}; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/extensions/source/bibliography/toolbar.cxx b/extensions/source/bibliography/toolbar.cxx new file mode 100644 index 000000000000..d320f175f0a3 --- /dev/null +++ b/extensions/source/bibliography/toolbar.cxx @@ -0,0 +1,647 @@ +/************************************************************************* + * + * 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_extensions.hxx" +#include <comphelper/processfactory.hxx> +#include <osl/mutex.hxx> +#include <tools/urlobj.hxx> +#include <com/sun/star/frame/XDispatch.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/util/XURLTransformer.hpp> +#include <com/sun/star/frame/FrameSearchFlag.hpp> +#include <datman.hxx> +#include <tools/debug.hxx> +#ifndef _SVX_SVXIDS_HRC +#include <svx/svxids.hrc> +#endif +#include <svtools/miscopt.hxx> +#include <svtools/imgdef.hxx> +#include <vcl/svapp.hxx> +#include <vcl/mnemonic.hxx> +#include "bibbeam.hxx" +#include "toolbar.hrc" +#include "bibresid.hxx" + +#ifndef BIBTOOLS_HXX +#include "bibtools.hxx" +#endif +#include <vos/mutex.hxx> + +using namespace ::rtl; +using namespace ::com::sun::star; +using namespace ::com::sun::star::uno; +using namespace ::com::sun::star::beans; +#define C2U(cChar) OUString::createFromAscii(cChar) + + +// Konstanten ------------------------------------------------------------- + + +BibToolBarListener::BibToolBarListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId): + nIndex(nId), + aCommand(aStr), + pToolBar(pTB) +{ +} + +BibToolBarListener::~BibToolBarListener() +{ +} + +void BibToolBarListener::statusChanged(const ::com::sun::star::frame::FeatureStateEvent& rEvt)throw( ::com::sun::star::uno::RuntimeException ) +{ + if(rEvt.FeatureURL.Complete == aCommand) + { + vos::OGuard aGuard(Application::GetSolarMutex()); + pToolBar->EnableItem(nIndex,rEvt.IsEnabled); + + ::com::sun::star::uno::Any aState=rEvt.State; + if(aState.getValueType()==::getBooleanCppuType()) + { + sal_Bool bChecked= *(sal_Bool*)aState.getValue(); + pToolBar->CheckItem(nIndex, bChecked); + } + + /* + rtl::OUString FeatureDescriptor; + sal_Bool Requery; + ::com::sun::star::uno::Any State;*/ + } +}; + +rtl::OUString BibToolBarListener::GetCommand() +{ + return aCommand; +} + +BibTBListBoxListener::BibTBListBoxListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId): + BibToolBarListener(pTB,aStr,nId) +{ +} + +BibTBListBoxListener::~BibTBListBoxListener() +{ +} + +void BibTBListBoxListener::statusChanged(const ::com::sun::star::frame::FeatureStateEvent& rEvt)throw( ::com::sun::star::uno::RuntimeException ) +{ + if(rEvt.FeatureURL.Complete == GetCommand()) + { + vos::OGuard aGuard(Application::GetSolarMutex()); + pToolBar->EnableSourceList(rEvt.IsEnabled); + + Any aState = rEvt.State; + if(aState.getValueType() == ::getCppuType((Sequence<rtl::OUString>*)0)) + { + pToolBar->UpdateSourceList(sal_False); + pToolBar->ClearSourceList(); + + Sequence<rtl::OUString>* pStringSeq = (Sequence<rtl::OUString>*)aState.getValue(); + const rtl::OUString* pStringArray = (const rtl::OUString*)pStringSeq->getConstArray(); + + sal_uInt32 nCount = pStringSeq->getLength(); + XubString aEntry; + for( sal_uInt32 i=0; i<nCount; i++ ) + { + aEntry = String(pStringArray[i]); + pToolBar->InsertSourceEntry(aEntry); + } + pToolBar->UpdateSourceList(sal_True); + } + + XubString aStr = String(rEvt.FeatureDescriptor); + pToolBar->SelectSourceEntry(aStr); + } +}; + +BibTBQueryMenuListener::BibTBQueryMenuListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId): + BibToolBarListener(pTB,aStr,nId) +{ +} + +BibTBQueryMenuListener::~BibTBQueryMenuListener() +{ +} + +void BibTBQueryMenuListener::statusChanged(const frame::FeatureStateEvent& rEvt)throw( uno::RuntimeException ) +{ + if(rEvt.FeatureURL.Complete == GetCommand()) + { + vos::OGuard aGuard(Application::GetSolarMutex()); + pToolBar->EnableSourceList(rEvt.IsEnabled); + + uno::Any aState=rEvt.State; + if(aState.getValueType()==::getCppuType((Sequence<rtl::OUString>*)0)) + { + pToolBar->ClearFilterMenu(); + + Sequence<rtl::OUString>* pStringSeq = (Sequence<rtl::OUString>*) aState.getValue(); + const rtl::OUString* pStringArray = (const rtl::OUString*)pStringSeq->getConstArray(); + + sal_uInt32 nCount = pStringSeq->getLength(); + for( sal_uInt32 i=0; i<nCount; i++ ) + { + sal_uInt16 nID=pToolBar->InsertFilterItem(String(pStringArray[i])); + if(pStringArray[i]==rEvt.FeatureDescriptor) + { +// XubString aStr = rEvt.FeatureDescriptor; + pToolBar->SelectFilterItem(nID); + } + } + } + } +}; + +BibTBEditListener::BibTBEditListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId): + BibToolBarListener(pTB,aStr,nId) +{ +} + +BibTBEditListener::~BibTBEditListener() +{ +} + +void BibTBEditListener::statusChanged(const frame::FeatureStateEvent& rEvt)throw( uno::RuntimeException ) +{ + if(rEvt.FeatureURL.Complete == GetCommand()) + { + vos::OGuard aGuard(Application::GetSolarMutex()); + pToolBar->EnableQuery(rEvt.IsEnabled); + + uno::Any aState=rEvt.State; + if(aState.getValueType()==::getCppuType((const OUString*)0)) + { + String aStr = String(*(OUString*) aState.getValue()); + pToolBar->SetQueryString(aStr); + } + } +} + +SV_IMPL_PTRARR( BibToolBarListenerArr, BibToolBarListenerPtr); + +BibToolBar::BibToolBar(Window* pParent, Link aLink, WinBits nStyle): + ToolBox(pParent,BibResId(RID_BIB_TOOLBAR)), + aImgLst(BibResId( RID_TOOLBAR_IMGLIST )), + aImgLstHC(BibResId(RID_TOOLBAR_IMGLIST_HC )), + aBigImgLst(BibResId( RID_TOOLBAR_BIGIMGLIST )), + aBigImgLstHC(BibResId( RID_TOOLBAR_BIGIMGLIST_HC )), + aFtSource(this,WB_VCENTER), + aLBSource(this,WB_DROPDOWN), + aFtQuery(this,WB_VCENTER), + aEdQuery(this), + nMenuId(0), + nSelMenuItem(0), + aLayoutManager( aLink ), + nSymbolsSize( SFX_SYMBOLS_SIZE_SMALL ), + nOutStyle( 0 ) +{ + SvtMiscOptions aSvtMiscOptions; + nSymbolsSize = aSvtMiscOptions.GetCurrentSymbolsSize(); + nOutStyle = aSvtMiscOptions.GetToolboxStyle(); + + ApplyImageList(); + SetStyle(GetStyle()|nStyle); + SetOutStyle(TOOLBOX_STYLE_FLAT); + Size aSize=GetSizePixel(); + Size a2Size(GetOutputSizePixel()); + a2Size.Width()=100; + aLBSource.SetSizePixel(a2Size); + aLBSource.SetDropDownLineCount(9); + aLBSource.Show(); + aLBSource.SetSelectHdl(LINK( this, BibToolBar, SelHdl)); + + SvtMiscOptions().AddListenerLink( LINK( this, BibToolBar, OptionsChanged_Impl ) ); + Application::AddEventListener( LINK( this, BibToolBar, SettingsChanged_Impl ) ); + + aTimer.SetTimeoutHdl(LINK( this, BibToolBar, SendSelHdl)); + aTimer.SetTimeout(400); + + SetDropdownClickHdl( LINK( this, BibToolBar, MenuHdl)); + + aEdQuery.SetSizePixel(aLBSource.GetSizePixel()); + aEdQuery.Show(); + + XubString aStr=GetItemText(TBC_FT_SOURCE); + Rectangle aRect=GetItemRect(TBC_FT_SOURCE); + aFtSource.SetText(aStr); + aFtSource.SetSizePixel(aRect.GetSize()); + aFtSource.SetBackground(Wallpaper( COL_TRANSPARENT )); + + aStr=GetItemText(TBC_FT_QUERY); + aRect=GetItemRect(TBC_FT_QUERY); + aFtQuery.SetText(aStr); + aFtQuery.SetSizePixel(aRect.GetSize()); + aFtQuery.SetBackground(Wallpaper( COL_TRANSPARENT )); + + SetItemWindow(TBC_FT_SOURCE,&aFtSource); + SetItemWindow(TBC_LB_SOURCE,&aLBSource); + SetItemWindow(TBC_FT_QUERY ,&aFtQuery); + SetItemWindow(TBC_ED_QUERY ,&aEdQuery); + + ::bib::AddToTaskPaneList( this ); +} + +BibToolBar::~BibToolBar() +{ + SvtMiscOptions().RemoveListenerLink( LINK( this, BibToolBar, OptionsChanged_Impl ) ); + Application::RemoveEventListener( LINK( this, BibToolBar, SettingsChanged_Impl ) ); + ::bib::RemoveFromTaskPaneList( this ); +} + +void BibToolBar::InitListener() +{ + sal_uInt16 nCount=GetItemCount(); + + uno::Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + uno::Reference< frame::XDispatch > xDisp(xController,UNO_QUERY); + + uno::Reference< util::XURLTransformer > xTrans ( xMgr->createInstance( C2U("com.sun.star.util.URLTransformer") ), UNO_QUERY ); + if( xTrans.is() ) + { + util::URL aQueryURL; + aQueryURL.Complete = C2U(".uno:Bib/MenuFilter"); + xTrans->parseStrict( aQueryURL); + BibToolBarListener* pQuery=new BibTBQueryMenuListener(this,aQueryURL.Complete,TBC_BT_AUTOFILTER); + xDisp->addStatusListener(uno::Reference< frame::XStatusListener > (pQuery),aQueryURL); + + for(sal_uInt16 nPos=0;nPos<nCount;nPos++) + { + sal_uInt16 nId=GetItemId(nPos); + if(!nId || nId==TBC_FT_SOURCE || nId==TBC_FT_QUERY) + continue; + + util::URL aURL; + aURL.Complete = GetItemCommand(nId); + if(!aURL.Complete.getLength()) + continue; + + xTrans->parseStrict( aURL ); + + BibToolBarListener* pListener=NULL; + if(nId==TBC_LB_SOURCE) + { + pListener=new BibTBListBoxListener(this,aURL.Complete,nId); + } + else if(nId==TBC_ED_QUERY) + { + pListener=new BibTBEditListener(this,aURL.Complete,nId); + } + else + { + pListener=new BibToolBarListener(this,aURL.Complete,nId); + } + + BibToolBarListenerPtr pxInsert = new Reference<frame::XStatusListener>; + (*pxInsert) = pListener; + aListenerArr.Insert( pxInsert, aListenerArr.Count() ); + xDisp->addStatusListener(uno::Reference< frame::XStatusListener > (pListener),aURL); + } + } +} + +void BibToolBar::SetXController(const uno::Reference< frame::XController > & xCtr) +{ + xController=xCtr; + InitListener(); + +} + +void BibToolBar::Select() +{ + sal_uInt16 nId=GetCurItemId(); + + if(nId!=TBC_BT_AUTOFILTER) + { + SendDispatch(nId,Sequence<PropertyValue>() ); + } + else + { + Sequence<PropertyValue> aPropVal(2); + PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray(); + pPropertyVal[0].Name=C2U("QueryText"); + rtl::OUString aSelection = aEdQuery.GetText(); + pPropertyVal[0].Value <<= aSelection; + + pPropertyVal[1].Name=C2U("QueryField"); + pPropertyVal[1].Value <<= aQueryField; + SendDispatch(nId,aPropVal); + } +} + +void BibToolBar::SendDispatch(sal_uInt16 nId, const Sequence< PropertyValue >& rArgs) +{ + rtl::OUString aCommand = GetItemCommand(nId); + + uno::Reference< frame::XDispatchProvider > xDSP( xController, UNO_QUERY ); + + if( xDSP.is() && aCommand.getLength()) + { + uno::Reference< lang::XMultiServiceFactory > xMgr = comphelper::getProcessServiceFactory(); + + uno::Reference< util::XURLTransformer > xTrans ( xMgr->createInstance( C2U("com.sun.star.util.URLTransformer") ), UNO_QUERY ); + if( xTrans.is() ) + { + // Datei laden + util::URL aURL; + aURL.Complete = aCommand; + + xTrans->parseStrict( aURL ); + + uno::Reference< frame::XDispatch > xDisp = xDSP->queryDispatch( aURL, rtl::OUString(), frame::FrameSearchFlag::SELF ); + + if ( xDisp.is() ) + xDisp->dispatch( aURL, rArgs); + } + } + +} + +void BibToolBar::Click() +{ + sal_uInt16 nId=GetCurItemId(); + + if(nId == TBC_BT_COL_ASSIGN ) + { + if(pDatMan) + pDatMan->CreateMappingDialog(GetParent()); + CheckItem( nId, sal_False ); + } + else if(nId == TBC_BT_CHANGESOURCE) + { + if(pDatMan) + { + OUString sNew = pDatMan->CreateDBChangeDialog(GetParent()); + if(sNew.getLength()) + pDatMan->setActiveDataSource(sNew); + } + CheckItem( nId, sal_False ); + } +} + +void BibToolBar::ClearFilterMenu() +{ + aPopupMenu.Clear(); + nMenuId=0; +} +sal_uInt16 BibToolBar::InsertFilterItem(const XubString& aMenuEntry) +{ + nMenuId++; + aPopupMenu.InsertItem(nMenuId,aMenuEntry); + + return nMenuId; +} +void BibToolBar::SelectFilterItem(sal_uInt16 nId) +{ + aPopupMenu.CheckItem(nId); + nSelMenuItem=nId; + aQueryField = MnemonicGenerator::EraseAllMnemonicChars( aPopupMenu.GetItemText(nId) ); +} + +void BibToolBar::EnableSourceList(sal_Bool bFlag) +{ + aFtSource.Enable(bFlag); + aLBSource.Enable(bFlag); +} + +void BibToolBar::ClearSourceList() +{ + aLBSource.Clear(); +} + +void BibToolBar::UpdateSourceList(sal_Bool bFlag) +{ + aLBSource.SetUpdateMode(bFlag); +} + +void BibToolBar::InsertSourceEntry(const XubString& aEntry, sal_uInt16 nPos) +{ + aLBSource.InsertEntry(aEntry, nPos); +} + +void BibToolBar::SelectSourceEntry(const XubString& aStr) +{ + aLBSource.SelectEntry(aStr); +} + +void BibToolBar::EnableQuery(sal_Bool bFlag) +{ + aFtQuery.Enable(bFlag); + aEdQuery.Enable(bFlag); +} + +void BibToolBar::SetQueryString(const XubString& aStr) +{ + aEdQuery.SetText(aStr); +} + + +long BibToolBar::PreNotify( NotifyEvent& rNEvt ) +{ + long nResult=sal_True; + + sal_uInt16 nSwitch=rNEvt.GetType(); + if(aEdQuery.HasFocus() && nSwitch==EVENT_KEYINPUT)// || nSwitch==EVENT_KEYUP) + { + const KeyCode& aKeyCode=rNEvt.GetKeyEvent()->GetKeyCode(); + sal_uInt16 nKey = aKeyCode.GetCode(); + if(nKey == KEY_RETURN) + { + Sequence<PropertyValue> aPropVal(2); + PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray(); + pPropertyVal[0].Name = C2U("QueryText"); + rtl::OUString aSelection = aEdQuery.GetText(); + pPropertyVal[0].Value <<= aSelection; + pPropertyVal[1].Name=C2U("QueryField"); + pPropertyVal[1].Value <<= aQueryField; + SendDispatch(TBC_BT_AUTOFILTER,aPropVal); + return nResult; + } + + } + + nResult=ToolBox::PreNotify(rNEvt); + + return nResult; +} + +IMPL_LINK( BibToolBar, SelHdl, ListBox*, /*pLb*/ ) +{ + aTimer.Start(); + return 0; +} + +IMPL_LINK( BibToolBar, SendSelHdl, Timer*,/*pT*/) +{ + Sequence<PropertyValue> aPropVal(1); + PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray(); + pPropertyVal[0].Name = C2U("DataSourceName"); + String aEntry( MnemonicGenerator::EraseAllMnemonicChars( aLBSource.GetSelectEntry() ) ); + rtl::OUString aSelection = aEntry; + pPropertyVal[0].Value <<= aSelection; + SendDispatch(TBC_LB_SOURCE,aPropVal); + + return 0; +} +//----------------------------------------------------------------------------- +IMPL_LINK( BibToolBar, MenuHdl, ToolBox*, /*pToolbox*/) +{ + sal_uInt16 nId=GetCurItemId(); + if(nId==TBC_BT_AUTOFILTER) + { + EndSelection(); // vor SetDropMode (SetDropMode ruft SetItemImage) + + SetItemDown(TBC_BT_AUTOFILTER,sal_True); + nId = aPopupMenu.Execute(this, GetItemRect(TBC_BT_AUTOFILTER)); + + + if(nId>0) + { + aPopupMenu.CheckItem(nSelMenuItem,sal_False); + aPopupMenu.CheckItem(nId); + nSelMenuItem=nId; + aQueryField = MnemonicGenerator::EraseAllMnemonicChars( aPopupMenu.GetItemText(nId) ); + Sequence<PropertyValue> aPropVal(2); + PropertyValue* pPropertyVal = (PropertyValue*)aPropVal.getConstArray(); + pPropertyVal[0].Name = C2U("QueryText"); + rtl::OUString aSelection = aEdQuery.GetText(); + pPropertyVal[0].Value <<= aSelection; + pPropertyVal[1].Name=C2U("QueryField"); + pPropertyVal[1].Value <<= aQueryField; + SendDispatch(TBC_BT_AUTOFILTER,aPropVal); + } + + Point aPoint; + MouseEvent aLeave( aPoint, 0, MOUSE_LEAVEWINDOW | MOUSE_SYNTHETIC ); + MouseMove( aLeave ); + SetItemDown(TBC_BT_AUTOFILTER,sal_False); + + + } + return 0; +} +//----------------------------------------------------------------------------- +void BibToolBar::statusChanged(const frame::FeatureStateEvent& rEvent) + throw( uno::RuntimeException ) +{ + for(sal_uInt16 i = 0; i < aListenerArr.Count(); i++) + { + BibToolBarListenerPtr pListener = aListenerArr.GetObject(i); + (*pListener)->statusChanged(rEvent); + } +} +/* -----------------------------07.05.2002 15:08------------------------------ + + ---------------------------------------------------------------------------*/ +void BibToolBar::DataChanged( const DataChangedEvent& rDCEvt ) +{ + if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) && + (rDCEvt.GetFlags() & SETTINGS_STYLE) ) + ApplyImageList(); + ToolBox::DataChanged( rDCEvt ); +} +/* -----------------------------07.05.2002 15:09------------------------------ + ---------------------------------------------------------------------------*/ + +IMPL_LINK( BibToolBar, OptionsChanged_Impl, void*, /*pVoid*/ ) +{ + sal_Bool bRebuildToolBar = sal_False; + sal_Int16 eSymbolsSize = SvtMiscOptions().GetCurrentSymbolsSize(); + if ( nSymbolsSize != eSymbolsSize ) + { + nSymbolsSize = eSymbolsSize; + bRebuildToolBar = sal_True; + } + else if ( nOutStyle != SvtMiscOptions().GetToolboxStyle() ) + { + nOutStyle = SvtMiscOptions().GetToolboxStyle(); + SetOutStyle( nOutStyle ); + bRebuildToolBar = sal_True; + } + + if ( bRebuildToolBar ) + RebuildToolbar(); + + return 0L; +} + +//----------------------------------------------------------------------------- + +IMPL_LINK( BibToolBar, SettingsChanged_Impl, void*, /*pVoid*/ ) +{ + // Check if toolbar button size have changed and we have to use system settings + sal_Int16 eSymbolsSize = SvtMiscOptions().GetCurrentSymbolsSize(); + if ( eSymbolsSize != nSymbolsSize ) + { + nSymbolsSize = eSymbolsSize; + RebuildToolbar(); + } + + return 0L; +} + +//----------------------------------------------------------------------------- +void BibToolBar::RebuildToolbar() +{ + ApplyImageList(); + // We have to call parent asynchronously as SetSize works also asynchronously! + Application::PostUserEvent( aLayoutManager, 0 ); +} + +//----------------------------------------------------------------------------- + +void BibToolBar::ApplyImageList() +{ + ImageList& rList = ( nSymbolsSize == SFX_SYMBOLS_SIZE_SMALL ) ? + ( GetSettings().GetStyleSettings().GetHighContrastMode() ? aImgLstHC : aImgLst ) : + ( GetSettings().GetStyleSettings().GetHighContrastMode() ? aBigImgLstHC : aBigImgLst ); + + SetItemImage(TBC_BT_AUTOFILTER , rList.GetImage(SID_FM_AUTOFILTER)); + SetItemImage(TBC_BT_FILTERCRIT , rList.GetImage(SID_FM_FILTERCRIT)); + SetItemImage(TBC_BT_REMOVEFILTER, rList.GetImage(SID_FM_REMOVE_FILTER_SORT )); + AdjustToolBox(); +} + +void BibToolBar::AdjustToolBox() +{ + Size aOldSize = GetSizePixel(); + Size aSize = CalcWindowSizePixel(); + if ( !aSize.Width() ) + aSize.Width() = aOldSize.Width(); + else if ( !aSize.Height() ) + aSize.Height() = aOldSize.Height(); + + Size aTbSize = GetSizePixel(); + if ( + (aSize.Width() && aSize.Width() != aTbSize.Width()) || + (aSize.Height() && aSize.Height() != aTbSize.Height()) + ) + { + SetPosSizePixel( GetPosPixel(), aSize ); + Invalidate(); + } +} diff --git a/extensions/source/bibliography/toolbar.hrc b/extensions/source/bibliography/toolbar.hrc new file mode 100644 index 000000000000..05c81921e44d --- /dev/null +++ b/extensions/source/bibliography/toolbar.hrc @@ -0,0 +1,46 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#include "bib.hrc" + +#define TBC_FT_SOURCE 1 +#define TBC_LB_SOURCE 2 +#define TBC_FT_QUERY 3 +#define TBC_ED_QUERY 4 +#define TBC_BT_AUTOFILTER 5 +#define TBC_BT_FILTERCRIT 6 +#define TBC_BT_REMOVEFILTER 7 +#define TBC_BT_NEWCARD 8 +#define TBC_BT_EDITCARD 9 +#define TBC_BT_REMOVECARD 10 +#define TBC_BT_INSERT 11 +#define TBC_BT_UPDATE 12 +#define TBC_BT_MAIL 13 +#define TBC_BT_URL 14 +#define TBC_BT_COL_ASSIGN 15 +#define TBC_BT_CHANGESOURCE 16 +#define IL_TOOLBOX 17 +#define ILH_TOOLBOX 18 diff --git a/extensions/source/bibliography/toolbar.hxx b/extensions/source/bibliography/toolbar.hxx new file mode 100644 index 000000000000..3bb71676c007 --- /dev/null +++ b/extensions/source/bibliography/toolbar.hxx @@ -0,0 +1,189 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ + +#ifndef _BIB_TOOLBAR_HXX +#define _BIB_TOOLBAR_HXX + +#include <com/sun/star/frame/XController.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> + + +#include <vcl/toolbox.hxx> +#include <vcl/lstbox.hxx> +#include <vcl/edit.hxx> +#include <vcl/fixed.hxx> +#include <svl/svarray.hxx> +#include <vcl/timer.hxx> +#include <cppuhelper/implbase1.hxx> // helper for implementations + +class BibDataManager; +class BibToolBar; + +class BibToolBarListener: public cppu::WeakImplHelper1 < ::com::sun::star::frame::XStatusListener> +{ +private: + + sal_uInt16 nIndex; + rtl::OUString aCommand; + +protected: + + BibToolBar *pToolBar; + +public: + + BibToolBarListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId); + ~BibToolBarListener(); + + rtl::OUString GetCommand(); + + // ::com::sun::star::lang::XEventListener + // we do not hold References to dispatches, so there is nothing to do on disposal + virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& /*Source*/) + throw( ::com::sun::star::uno::RuntimeException ){}; + + // ::com::sun::star::frame::XStatusListener + virtual void SAL_CALL statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) + throw( ::com::sun::star::uno::RuntimeException ); + +}; + +class BibTBListBoxListener: public BibToolBarListener +{ +public: + + BibTBListBoxListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId); + ~BibTBListBoxListener(); + + virtual void SAL_CALL statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) + throw( ::com::sun::star::uno::RuntimeException ); + +}; + +class BibTBEditListener: public BibToolBarListener +{ +public: + + BibTBEditListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId); + ~BibTBEditListener(); + + virtual void SAL_CALL statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) + throw( ::com::sun::star::uno::RuntimeException ); + +}; + +class BibTBQueryMenuListener: public BibToolBarListener +{ +public: + + BibTBQueryMenuListener(BibToolBar *pTB,rtl::OUString aStr,sal_uInt16 nId); + ~BibTBQueryMenuListener(); + + virtual void SAL_CALL statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) + throw( ::com::sun::star::uno::RuntimeException ); + +}; + + +typedef ::com::sun::star::uno::Reference< ::com::sun::star::frame::XStatusListener>* BibToolBarListenerPtr; +SV_DECL_PTRARR_DEL( BibToolBarListenerArr, BibToolBarListenerPtr, 4, 4 ) + +class BibToolBar: public ToolBox +{ + private: + + BibToolBarListenerArr aListenerArr; + ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > xController; + Timer aTimer; +// Timer aMenuTimer; + ImageList aImgLst; + ImageList aImgLstHC; + ImageList aBigImgLst; + ImageList aBigImgLstHC; + FixedText aFtSource; + ListBox aLBSource; + FixedText aFtQuery; + Edit aEdQuery; + PopupMenu aPopupMenu; + sal_uInt16 nMenuId; + sal_uInt16 nSelMenuItem; + rtl::OUString aQueryField; + Link aLayoutManager; + sal_Int16 nSymbolsSize; + sal_Int16 nOutStyle; + + BibDataManager* pDatMan; + DECL_LINK( SelHdl, ListBox* ); + DECL_LINK( SendSelHdl, Timer* ); + DECL_LINK( MenuHdl, ToolBox* ); + DECL_LINK( OptionsChanged_Impl, void* ); + DECL_LINK( SettingsChanged_Impl, void* ); + + void ApplyImageList(); + void RebuildToolbar(); + + protected: + + void DataChanged( const DataChangedEvent& rDCEvt ); + void InitListener(); + virtual void Select(); + virtual void Click(); + long PreNotify( NotifyEvent& rNEvt ); + + + public: + + BibToolBar(Window* pParent, Link aLink, WinBits nStyle = WB_3DLOOK ); + ~BibToolBar(); + + void SetXController(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XController > &); + + void ClearSourceList(); + void UpdateSourceList(sal_Bool bFlag=sal_True); + void EnableSourceList(sal_Bool bFlag=sal_True); + void InsertSourceEntry(const XubString&,sal_uInt16 nPos=LISTBOX_APPEND ); + void SelectSourceEntry(const XubString& ); + + void EnableQuery(sal_Bool bFlag=sal_True); + void SetQueryString(const XubString& ); + void AdjustToolBox(); + + void ClearFilterMenu(); + sal_uInt16 InsertFilterItem(const XubString& ); + void SelectFilterItem(sal_uInt16 nId); + + void statusChanged(const ::com::sun::star::frame::FeatureStateEvent& Event) + throw( ::com::sun::star::uno::RuntimeException ); + + void SetDatMan(BibDataManager& rDatMan) {pDatMan = &rDatMan;} + void SendDispatch(sal_uInt16 nId, const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >& rArgs); +}; + + + + +#endif diff --git a/extensions/source/bibliography/toolbar.src b/extensions/source/bibliography/toolbar.src new file mode 100644 index 000000000000..a08fe44d04bd --- /dev/null +++ b/extensions/source/bibliography/toolbar.src @@ -0,0 +1,166 @@ +/************************************************************************* + * + * 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. + * + ************************************************************************/ +#include <svx/svxids.hrc> +#include "bibliography.hrc" +#include "toolbar.hrc" +#include "svx/svxcommands.h" + +#define MASKCOLOR MaskColor = Color { Red = 0xFFFF; Green = 0x0000; Blue = 0xFFFF; }; + +ToolBox RID_BIB_TOOLBAR +{ + HelpId = HID_BIB_DB_TBX; + Sizeable = TRUE ; + HideWhenDeactivate = TRUE ; + LineSpacing = TRUE ; + Border = TRUE ; + SVLook = TRUE ; + Pos = MAP_APPFONT ( 0 , 0 ) ; + Size = MAP_APPFONT ( 200 , 16 ) ; + ButtonType = BUTTON_SYMBOL ; + ItemList = + { + ToolBoxItem + { + Identifier = TBC_FT_SOURCE; + Text [ en-US ] = "Table"; + }; + ToolBoxItem + { + Identifier = TBC_LB_SOURCE; + HelpID = HID_BIB_TBX_TABLE; + Command = ".uno:Bib/source" ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SEPARATOR ; + }; + + ToolBoxItem + { + Identifier = TBC_FT_QUERY; + Text [ en-US ] = "Search Key"; + }; + ToolBoxItem + { + Identifier = TBC_ED_QUERY; + HelpID = HID_BIB_TBX_SEARCH; + Command = ".uno:Bib/query" ; + }; + ToolBoxItem + { + Type = TOOLBOXITEM_SEPARATOR ; + }; + + ToolBoxItem + { + Identifier = TBC_BT_AUTOFILTER ; + HelpID = HID_BIB_TBX_AUTOFILTER; +// ItemBitmap = Bitmap { File = "sc10716.bmp" ; }; + DropDown = TRUE ; + Command = ".uno:Bib/autoFilter" ; + Text [ en-US ] = "AutoFilter"; + }; + + ToolBoxItem + { + Identifier = TBC_BT_FILTERCRIT ; +// ItemBitmap = Bitmap { File = "sc10715.bmp" ; }; +// Text [ de ] = "Standard Filter" ; + Command = ".uno:Bib/standardFilter" ; + Text [ en-US ] = "Standard Filter"; + }; + + ToolBoxItem + { + Identifier = TBC_BT_REMOVEFILTER ; +// ItemBitmap = Bitmap { File = "sc10711.bmp" ; }; + Command = ".uno:Bib/removeFilter" ; + Text [ en-US ] = "Remove Filter"; + }; + ToolBoxItem + { + Identifier = TBC_BT_COL_ASSIGN ; + HelpId = HID_BIB_MAPPINGDLG; +// Command = ".uno:Bib/Mapping" ; +// ItemBitmap = Bitmap { File = "sc10711.bmp" ; }; + Text [ en-US ] = "Column Arrangement"; + }; + ToolBoxItem + { + Identifier = TBC_BT_CHANGESOURCE ; + HelpId = HID_BIB_CHANGESOURCE; + Command = ".uno:Bib/sdbsource" ; +// ItemBitmap = Bitmap { File = "sc10711.bmp" ; }; + Checkable=TRUE; + Text [ en-US ] = "Data Source"; + }; + }; + Scroll = TRUE ; +}; +#define BIB_IMAGES \ + IdList = \ + { \ + SID_FM_AUTOFILTER; /*10716*/ \ + SID_FM_FILTERCRIT; /*10715*/ \ + SID_FM_REMOVE_FILTER_SORT ; /*10711*/ \ + }; \ + IdCount = { 3; }; + +ImageList RID_TOOLBAR_IMGLIST +{ + Prefix = "sc"; + MASKCOLOR + BIB_IMAGES +}; +ImageList RID_TOOLBAR_IMGLIST_HC +{ + Prefix = "sch"; + MASKCOLOR + BIB_IMAGES +}; + +ImageList RID_TOOLBAR_BIGIMGLIST +{ + Prefix = "lc"; + MASKCOLOR + BIB_IMAGES +}; +ImageList RID_TOOLBAR_BIGIMGLIST_HC +{ + Prefix = "lch"; + MASKCOLOR + BIB_IMAGES +}; + + + + + + + + diff --git a/extensions/source/bibliography/uiconfig/sbibliography/menubar/menubar.xml b/extensions/source/bibliography/uiconfig/sbibliography/menubar/menubar.xml new file mode 100644 index 000000000000..310e80f16c44 --- /dev/null +++ b/extensions/source/bibliography/uiconfig/sbibliography/menubar/menubar.xml @@ -0,0 +1,93 @@ +<?xml version="1.0" encoding="UTF-8"?> +<menu:menubar xmlns:menu="http://openoffice.org/2001/menu" menu:id="menubar"> + <menu:menu menu:id=".uno:PickList"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:AddDirect"/> + <menu:menuitem menu:id=".uno:Open"/> + <menu:menuitem menu:id=".uno:AutoPilotMenu"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:CloseWin"/> + <menu:menuitem menu:id=".uno:Save"/> + <menu:menuitem menu:id=".uno:SaveAs"/> + <menu:menuitem menu:id=".uno:SaveAll"/> + <menu:menuitem menu:id=".uno:Reload"/> + <menu:menuitem menu:id=".uno:VersionDialog"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:SendToMenu"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:SetDocumentProperties"/> + <menu:menu menu:id=".uno:TemplateMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:Organizer"/> + <menu:menuitem menu:id=".uno:AddressBookSource"/> + <menu:menuitem menu:id=".uno:SaveAsTemplate"/> + <menu:menuitem menu:id=".uno:OpenTemplate"/> + </menu:menupopup> + </menu:menu> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:PrintPreview"/> + <menu:menuitem menu:id=".uno:Print"/> + <menu:menuitem menu:id=".uno:PrinterSetup"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:Quit"/> + </menu:menupopup> + </menu:menu> + <menu:menu menu:id=".uno:EditMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:Cut"/> + <menu:menuitem menu:id=".uno:Copy"/> + <menu:menuitem menu:id=".uno:Paste"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:Bib/Mapping"/> + <menu:menuitem menu:id=".uno:Bib/sdbsource"/> + <menu:menuitem menu:id=".uno:Bib/DeleteRecord"/> + </menu:menupopup> + </menu:menu> + <menu:menu menu:id=".uno:ViewMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:AvailableToolbars"/> + <menu:menuitem menu:id=".uno:StatusBarVisible"/> + </menu:menupopup> + </menu:menu> + <menu:menu menu:id=".uno:InsertMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:Bib/InsertRecord"/> + </menu:menupopup> + </menu:menu> + <menu:menu menu:id=".uno:ToolsMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:Bib/standardFilter"/> + <menu:menuseparator/> + <menu:menu menu:id=".uno:MacrosMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:MacroRecorder"/> + <menu:menuitem menu:id=".uno:RunMacro"/> + <menu:menu menu:id=".uno:ScriptOrganizer"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:MacroOrganizer?TabId:short=1"/> + </menu:menupopup> + </menu:menu> + <menu:menuitem menu:id="service:com.sun.star.deployment.ui.PackageManagerDialog"/> + <menu:menuitem menu:id=".uno:ConfigureDialog"/> + <menu:menuitem menu:id=".uno:OptionsTreeDialog"/> + </menu:menupopup> + </menu:menu> + <menu:menu menu:id=".uno:WindowList"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:NewWindow"/> + <menu:menuitem menu:id=".uno:CloseWin"/> + <menu:menuseparator/> + </menu:menupopup> + </menu:menu> + <menu:menu menu:id=".uno:HelpMenu"> + <menu:menupopup> + <menu:menuitem menu:id=".uno:HelpIndex"/> + <menu:menuitem menu:id=".uno:ExtendedHelp"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:HelpSupport"/> + <menu:menuitem menu:id=".uno:OnlineRegistrationDlg"/> + <menu:menuseparator/> + <menu:menuitem menu:id=".uno:About"/> + </menu:menupopup> + </menu:menu> +</menu:menubar> |