2001-01-09 14:43:04 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* Copyright 2008 by Sun Microsystems, Inc.
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* $RCSfile: dataview.cxx,v $
|
2008-06-25 11:40:17 +00:00
|
|
|
* $Revision: 1.23 $
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* This file is part of OpenOffice.org.
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* 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.
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* 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).
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
2008-04-10 13:04:54 +00:00
|
|
|
* 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.
|
2001-01-09 14:43:04 +00:00
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
|
2006-09-17 05:56:39 +00:00
|
|
|
// MARKER(update_precomp.py): autogen include statement, do not remove
|
|
|
|
#include "precompiled_dbaccess.hxx"
|
|
|
|
|
2001-01-09 14:43:04 +00:00
|
|
|
#ifndef DBAUI_DATAVIEW_HXX
|
|
|
|
#include "dataview.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _TOOLKIT_HELPER_VCLUNOHELPER_HXX_
|
|
|
|
#include <toolkit/unohlp.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _COMPHELPER_TYPES_HXX_
|
|
|
|
#include <comphelper/types.hxx>
|
|
|
|
#endif
|
autorecovery: define a new css.document.XDocumentRecovery interface, implement it in both SFX and DBACCESS, and use it in the autorecovery
In this course, the auto recovery learned to restore multiple views of a document. Also, in the course of the change,
the LoadDispatchListener became superfluous, and was removed.
Also, the loader code in dbaccess was slightly adjusted, since now the connectController call is in the responsibility
of the loader, and must not happen inside the XController::attachModel call anymore. This change made the
ModelControllerConnector class superfluous, so it has been removed, too.
2010-01-05 22:32:38 +01:00
|
|
|
#include <comphelper/namedvaluecollection.hxx>
|
2001-01-09 14:43:04 +00:00
|
|
|
#ifndef _SFXAPP_HXX //autogen wg. SFX_APP
|
|
|
|
#include <sfx2/app.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _SFXIMGMGR_HXX
|
|
|
|
#include <sfx2/imgmgr.hxx>
|
|
|
|
#endif
|
2001-08-15 12:39:35 +00:00
|
|
|
#ifndef _SV_FIXED_HXX
|
|
|
|
#include <vcl/fixed.hxx>
|
|
|
|
#endif
|
2002-02-19 12:48:54 +00:00
|
|
|
#ifndef DBAUI_ICONTROLLER_HXX
|
|
|
|
#include "IController.hxx"
|
|
|
|
#endif
|
2002-04-29 07:39:01 +00:00
|
|
|
#ifndef DBAUI_TOOLS_HXX
|
|
|
|
#include "UITools.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _SFX_HRC
|
|
|
|
#include <sfx2/sfx.hrc>
|
|
|
|
#endif
|
|
|
|
#ifndef _SVTOOLS_IMGDEF_HXX
|
|
|
|
#include <svtools/imgdef.hxx>
|
|
|
|
#endif
|
autorecovery: define a new css.document.XDocumentRecovery interface, implement it in both SFX and DBACCESS, and use it in the autorecovery
In this course, the auto recovery learned to restore multiple views of a document. Also, in the course of the change,
the LoadDispatchListener became superfluous, and was removed.
Also, the loader code in dbaccess was slightly adjusted, since now the connectController call is in the responsibility
of the loader, and must not happen inside the XController::attachModel call anymore. This change made the
ModelControllerConnector class superfluous, so it has been removed, too.
2010-01-05 22:32:38 +01:00
|
|
|
#include <tools/diagnose_ex.h>
|
2001-08-15 12:39:35 +00:00
|
|
|
|
|
|
|
//.........................................................................
|
|
|
|
namespace dbaui
|
2001-01-09 14:43:04 +00:00
|
|
|
{
|
2001-08-15 12:39:35 +00:00
|
|
|
//.........................................................................
|
2002-04-29 07:39:01 +00:00
|
|
|
using namespace ::com::sun::star::uno;
|
2004-09-09 08:41:25 +00:00
|
|
|
using namespace ::com::sun::star::beans;
|
2002-04-29 07:39:01 +00:00
|
|
|
using namespace ::com::sun::star::util;
|
|
|
|
using namespace ::com::sun::star::lang;
|
2004-11-17 13:47:39 +00:00
|
|
|
using namespace ::com::sun::star::frame;
|
2002-04-29 07:39:01 +00:00
|
|
|
|
2001-08-15 12:39:35 +00:00
|
|
|
//=====================================================================
|
|
|
|
//= ColorChanger
|
|
|
|
//=====================================================================
|
|
|
|
class ColorChanger
|
|
|
|
{
|
|
|
|
protected:
|
|
|
|
OutputDevice* m_pDev;
|
|
|
|
|
|
|
|
public:
|
|
|
|
ColorChanger( OutputDevice* _pDev, const Color& _rNewLineColor, const Color& _rNewFillColor )
|
|
|
|
:m_pDev( _pDev )
|
|
|
|
{
|
|
|
|
m_pDev->Push( PUSH_LINECOLOR | PUSH_FILLCOLOR );
|
|
|
|
m_pDev->SetLineColor( _rNewLineColor );
|
|
|
|
m_pDev->SetFillColor( _rNewFillColor );
|
|
|
|
}
|
|
|
|
|
|
|
|
~ColorChanger()
|
|
|
|
{
|
|
|
|
m_pDev->Pop();
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2001-08-16 13:22:02 +00:00
|
|
|
DBG_NAME(ODataView)
|
2001-08-15 12:39:35 +00:00
|
|
|
// -------------------------------------------------------------------------
|
2002-02-19 12:48:54 +00:00
|
|
|
ODataView::ODataView( Window* pParent,
|
2008-06-25 11:40:17 +00:00
|
|
|
IController& _rController,
|
2002-02-19 12:48:54 +00:00
|
|
|
const Reference< XMultiServiceFactory >& _rFactory,
|
|
|
|
WinBits nStyle)
|
2001-08-15 12:39:35 +00:00
|
|
|
:Window(pParent,nStyle)
|
|
|
|
,m_xServiceFactory(_rFactory)
|
2008-06-25 11:40:17 +00:00
|
|
|
,m_rController( _rController )
|
2006-06-20 01:56:16 +00:00
|
|
|
,m_pSeparator( NULL )
|
2001-08-15 12:39:35 +00:00
|
|
|
{
|
|
|
|
DBG_CTOR(ODataView,NULL);
|
2008-06-25 11:40:17 +00:00
|
|
|
m_rController.acquire();
|
2004-11-17 13:47:39 +00:00
|
|
|
m_pAccel.reset(::svt::AcceleratorExecute::createAcceleratorHelper());
|
2001-08-15 12:39:35 +00:00
|
|
|
}
|
2001-08-23 13:46:27 +00:00
|
|
|
|
2001-08-15 12:39:35 +00:00
|
|
|
// -------------------------------------------------------------------------
|
2001-08-23 13:46:27 +00:00
|
|
|
void ODataView::Construct()
|
2001-01-09 14:43:04 +00:00
|
|
|
{
|
|
|
|
}
|
2001-08-23 13:46:27 +00:00
|
|
|
|
2001-08-15 12:39:35 +00:00
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
ODataView::~ODataView()
|
2001-01-09 14:43:04 +00:00
|
|
|
{
|
2004-08-02 14:32:17 +00:00
|
|
|
DBG_DTOR(ODataView,NULL);
|
2001-08-15 12:39:35 +00:00
|
|
|
|
|
|
|
enableSeparator( sal_False );
|
2008-06-25 11:40:17 +00:00
|
|
|
m_rController.release();
|
2001-01-09 14:43:04 +00:00
|
|
|
}
|
|
|
|
|
2001-08-15 12:39:35 +00:00
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void ODataView::enableSeparator( const sal_Bool _bEnable )
|
|
|
|
{
|
|
|
|
if ( _bEnable == isSeparatorEnabled() )
|
|
|
|
// nothing to do
|
|
|
|
return;
|
2001-01-09 14:43:04 +00:00
|
|
|
|
2001-08-15 12:39:35 +00:00
|
|
|
if ( _bEnable )
|
|
|
|
{
|
|
|
|
m_pSeparator = new FixedLine( this );
|
|
|
|
m_pSeparator->Show( );
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2004-08-02 14:32:17 +00:00
|
|
|
::std::auto_ptr<FixedLine> aTemp(m_pSeparator);
|
2001-08-15 12:39:35 +00:00
|
|
|
m_pSeparator = NULL;
|
|
|
|
}
|
|
|
|
Resize();
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
2006-06-20 01:56:16 +00:00
|
|
|
void ODataView::resizeDocumentView( Rectangle& /*_rPlayground*/ )
|
2001-01-09 14:43:04 +00:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2001-08-15 12:39:35 +00:00
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void ODataView::Paint( const Rectangle& _rRect )
|
|
|
|
{
|
|
|
|
//.................................................................
|
|
|
|
// draw the background
|
|
|
|
{
|
|
|
|
ColorChanger aColors( this, COL_TRANSPARENT, GetSettings().GetStyleSettings().GetFaceColor() );
|
|
|
|
DrawRect( _rRect );
|
|
|
|
}
|
|
|
|
|
|
|
|
// let the base class do anything it needs
|
|
|
|
Window::Paint( _rRect );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
2001-08-23 13:46:27 +00:00
|
|
|
void ODataView::resizeAll( const Rectangle& _rPlayground )
|
2001-08-15 12:39:35 +00:00
|
|
|
{
|
2001-08-23 13:46:27 +00:00
|
|
|
Rectangle aPlayground( _rPlayground );
|
2001-08-15 12:39:35 +00:00
|
|
|
|
2001-08-23 13:46:27 +00:00
|
|
|
// position thew separator
|
2001-08-15 12:39:35 +00:00
|
|
|
if ( m_pSeparator )
|
|
|
|
{
|
|
|
|
Size aSeparatorSize = Size( aPlayground.GetWidth(), 2 );
|
|
|
|
|
|
|
|
m_pSeparator->SetPosSizePixel( aPlayground.TopLeft(), aSeparatorSize );
|
|
|
|
|
|
|
|
aPlayground.Top() += aSeparatorSize.Height() + 1;
|
|
|
|
}
|
2001-01-09 14:43:04 +00:00
|
|
|
|
2001-08-23 13:46:27 +00:00
|
|
|
// position the controls of the document's view
|
|
|
|
resizeDocumentView( aPlayground );
|
|
|
|
}
|
|
|
|
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void ODataView::Resize()
|
|
|
|
{
|
|
|
|
Window::Resize();
|
2002-07-25 06:08:55 +00:00
|
|
|
resizeAll( Rectangle( Point( 0, 0), GetSizePixel() ) );
|
2001-08-15 12:39:35 +00:00
|
|
|
}
|
2002-02-19 12:48:54 +00:00
|
|
|
// -----------------------------------------------------------------------------
|
2008-06-25 11:40:17 +00:00
|
|
|
long ODataView::PreNotify( NotifyEvent& _rNEvt )
|
2002-02-19 12:48:54 +00:00
|
|
|
{
|
2008-06-25 11:40:17 +00:00
|
|
|
bool bHandled = false;
|
|
|
|
switch ( _rNEvt.GetType() )
|
2002-02-19 12:48:54 +00:00
|
|
|
{
|
|
|
|
case EVENT_KEYINPUT:
|
|
|
|
{
|
2008-06-25 11:40:17 +00:00
|
|
|
const KeyEvent* pKeyEvent = _rNEvt.GetKeyEvent();
|
2002-02-19 12:48:54 +00:00
|
|
|
const KeyCode& aKeyCode = pKeyEvent->GetKeyCode();
|
2008-06-25 11:40:17 +00:00
|
|
|
if ( m_pAccel.get() && m_pAccel->execute( aKeyCode ) )
|
|
|
|
// the accelerator consumed the event
|
|
|
|
return 1L;
|
2002-02-19 12:48:54 +00:00
|
|
|
}
|
2008-06-25 11:40:17 +00:00
|
|
|
// NO break
|
|
|
|
case EVENT_KEYUP:
|
|
|
|
case EVENT_MOUSEBUTTONDOWN:
|
|
|
|
case EVENT_MOUSEBUTTONUP:
|
|
|
|
bHandled = m_rController.interceptUserInput( _rNEvt );
|
|
|
|
break;
|
2002-02-19 12:48:54 +00:00
|
|
|
}
|
2008-06-25 11:40:17 +00:00
|
|
|
return bHandled ? 1L : Window::PreNotify( _rNEvt );
|
2002-02-19 12:48:54 +00:00
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
2002-04-29 07:39:01 +00:00
|
|
|
void ODataView::StateChanged( StateChangedType nType )
|
|
|
|
{
|
|
|
|
Window::StateChanged( nType );
|
|
|
|
|
|
|
|
if ( nType == STATE_CHANGE_CONTROLBACKGROUND )
|
|
|
|
{
|
|
|
|
// Check if we need to get new images for normal/high contrast mode
|
2008-06-25 11:40:17 +00:00
|
|
|
m_rController.notifyHiContrastChanged();
|
2002-04-29 07:39:01 +00:00
|
|
|
}
|
autorecovery: define a new css.document.XDocumentRecovery interface, implement it in both SFX and DBACCESS, and use it in the autorecovery
In this course, the auto recovery learned to restore multiple views of a document. Also, in the course of the change,
the LoadDispatchListener became superfluous, and was removed.
Also, the loader code in dbaccess was slightly adjusted, since now the connectController call is in the responsibility
of the loader, and must not happen inside the XController::attachModel call anymore. This change made the
ModelControllerConnector class superfluous, so it has been removed, too.
2010-01-05 22:32:38 +01:00
|
|
|
|
|
|
|
if ( nType == STATE_CHANGE_INITSHOW )
|
|
|
|
{
|
|
|
|
// now that there's a view which is finally visible, remove the "Hidden" value from the
|
|
|
|
// model's arguments.
|
|
|
|
try
|
|
|
|
{
|
|
|
|
Reference< XController > xController( m_rController.getXController(), UNO_SET_THROW );
|
|
|
|
Reference< XModel > xModel( xController->getModel(), UNO_QUERY );
|
|
|
|
if ( xModel.is() )
|
|
|
|
{
|
|
|
|
::comphelper::NamedValueCollection aArgs( xModel->getArgs() );
|
|
|
|
aArgs.remove( "Hidden" );
|
2010-01-27 11:50:04 +01:00
|
|
|
xModel->attachResource( ::rtl::OUString(), aArgs.getPropertyValues() );
|
autorecovery: define a new css.document.XDocumentRecovery interface, implement it in both SFX and DBACCESS, and use it in the autorecovery
In this course, the auto recovery learned to restore multiple views of a document. Also, in the course of the change,
the LoadDispatchListener became superfluous, and was removed.
Also, the loader code in dbaccess was slightly adjusted, since now the connectController call is in the responsibility
of the loader, and must not happen inside the XController::attachModel call anymore. This change made the
ModelControllerConnector class superfluous, so it has been removed, too.
2010-01-05 22:32:38 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
catch( const Exception& )
|
|
|
|
{
|
|
|
|
DBG_UNHANDLED_EXCEPTION();
|
|
|
|
}
|
|
|
|
}
|
2002-04-29 07:39:01 +00:00
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODataView::DataChanged( const DataChangedEvent& rDCEvt )
|
|
|
|
{
|
|
|
|
Window::DataChanged( rDCEvt );
|
2001-02-05 08:20:23 +00:00
|
|
|
|
2007-07-06 07:03:13 +00:00
|
|
|
if ( (rDCEvt.GetType() == DATACHANGED_FONTS) ||
|
|
|
|
(rDCEvt.GetType() == DATACHANGED_DISPLAY) ||
|
|
|
|
(rDCEvt.GetType() == DATACHANGED_FONTSUBSTITUTION) ||
|
|
|
|
((rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
|
|
|
|
(rDCEvt.GetFlags() & SETTINGS_STYLE)) )
|
2002-04-29 07:39:01 +00:00
|
|
|
{
|
|
|
|
// Check if we need to get new images for normal/high contrast mode
|
2008-06-25 11:40:17 +00:00
|
|
|
m_rController.notifyHiContrastChanged();
|
2002-04-29 07:39:01 +00:00
|
|
|
}
|
|
|
|
}
|
2004-11-17 13:47:39 +00:00
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODataView::attachFrame(const Reference< XFrame >& _xFrame)
|
|
|
|
{
|
|
|
|
m_pAccel->init(m_xServiceFactory,_xFrame);
|
|
|
|
}
|
2001-08-15 12:39:35 +00:00
|
|
|
//.........................................................................
|
2002-04-29 07:39:01 +00:00
|
|
|
}
|
|
|
|
// namespace dbaui
|
2001-08-15 12:39:35 +00:00
|
|
|
//.........................................................................
|