2007-07-09 10:56:41 +00:00
|
|
|
/*************************************************************************
|
|
|
|
*
|
|
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
|
|
*
|
|
|
|
* $RCSfile: DesignView.cxx,v $
|
|
|
|
*
|
2007-08-02 13:40:37 +00:00
|
|
|
* $Revision: 1.3 $
|
2007-07-09 10:56:41 +00:00
|
|
|
*
|
2007-08-02 13:40:37 +00:00
|
|
|
* last change: $Author: hr $ $Date: 2007-08-02 14:39:56 $
|
2007-07-09 10:56:41 +00:00
|
|
|
*
|
|
|
|
* The Contents of this file are made available subject to
|
|
|
|
* the terms of GNU Lesser General Public License Version 2.1.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* GNU Lesser General Public License Version 2.1
|
|
|
|
* =============================================
|
|
|
|
* Copyright 2005 by Sun Microsystems, Inc.
|
|
|
|
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License version 2.1, as published by the Free Software Foundation.
|
|
|
|
*
|
|
|
|
* This library 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 for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
|
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
|
|
|
* MA 02111-1307 USA
|
|
|
|
*
|
|
|
|
************************************************************************/
|
|
|
|
#include "precompiled_reportdesign.hxx"
|
|
|
|
|
|
|
|
#ifndef RPT_DESIGNVIEW_HXX
|
|
|
|
#include "DesignView.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _TOOLS_DEBUG_HXX
|
|
|
|
#include <tools/debug.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef DBUI_TABLECONTROLLER_HXX
|
|
|
|
#include "ReportController.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _COMPHELPER_TYPES_HXX_
|
|
|
|
#include <comphelper/types.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef INCLUDED_SVTOOLS_SYSLOCALE_HXX
|
|
|
|
#include <svtools/syslocale.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef _REPORT_RPTUIDEF_HXX
|
|
|
|
#include "RptDef.hxx"
|
|
|
|
#endif
|
|
|
|
#include "UITools.hxx"
|
|
|
|
#include "RptObject.hxx"
|
|
|
|
#ifndef _REPORT_PROPBRW_HXX
|
|
|
|
#include "propbrw.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _TOOLKIT_HELPER_CONVERT_HXX_
|
|
|
|
#include <toolkit/helper/convert.hxx>
|
|
|
|
#endif
|
|
|
|
#ifndef RTPUI_REPORTDESIGN_HELPID_HRC
|
|
|
|
#include "helpids.hrc"
|
|
|
|
#endif
|
|
|
|
#ifndef _REPORT_SECTIONVIEW_HXX
|
|
|
|
#include "SectionView.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef REPORT_REPORTSECTION_HXX
|
|
|
|
#include "ReportSection.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef _RPTUI_SLOTID_HRC_
|
|
|
|
#include "rptui_slotid.hrc"
|
|
|
|
#endif
|
|
|
|
#ifndef _SBASLTID_HRC
|
|
|
|
#include <svx/svxids.hrc>
|
|
|
|
#endif
|
|
|
|
#ifndef RPTUI_ADDFIELDWINDOW_HXX
|
|
|
|
#include "AddField.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef RPTUI_SCROLLHELPER_HXX
|
|
|
|
#include "ScrollHelper.hxx"
|
|
|
|
#endif
|
|
|
|
#ifndef INCLUDED_RPTUI_NAVIGATOR_HXX
|
|
|
|
#include "Navigator.hxx"
|
|
|
|
#endif
|
|
|
|
#include <vcl/svapp.hxx>
|
|
|
|
|
|
|
|
namespace rptui
|
|
|
|
{
|
|
|
|
using namespace ::dbaui;
|
|
|
|
using namespace ::utl;
|
|
|
|
using namespace ::com::sun::star;
|
|
|
|
using namespace uno;
|
|
|
|
using namespace lang;
|
|
|
|
using namespace beans;
|
|
|
|
using namespace container;
|
|
|
|
|
|
|
|
#define LINE_SIZE 50
|
|
|
|
//==================================================================
|
|
|
|
// class ODesignView
|
|
|
|
//==================================================================
|
|
|
|
DBG_NAME( rpt_ODesignView )
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
ODesignView::ODesignView( Window* pParent,
|
|
|
|
const Reference< XMultiServiceFactory >& _rxOrb,
|
|
|
|
OReportController* _pController) :
|
|
|
|
ODataView( pParent,_pController,_rxOrb,WB_DIALOGCONTROL )
|
|
|
|
,m_aSplitter(this,WB_HSCROLL)
|
|
|
|
,m_pReportController( _pController )
|
|
|
|
,m_pPropWin(NULL)
|
|
|
|
,m_pAddField(NULL)
|
|
|
|
,m_pCurrentView(NULL)
|
|
|
|
,m_pReportExplorer(NULL)
|
|
|
|
,m_eMode( RPTUI_SELECT )
|
|
|
|
,m_nCurrentPosition(USHRT_MAX)
|
|
|
|
,m_eActObj( OBJ_NONE )
|
|
|
|
,m_bFirstDraw(FALSE)
|
|
|
|
,m_aGridSize( 250, 250 ) // 100TH_MM
|
|
|
|
,m_bGridVisible(TRUE)
|
|
|
|
,m_bGridSnap(TRUE)
|
|
|
|
,m_bInSplitHandler( FALSE )
|
|
|
|
{
|
|
|
|
DBG_CTOR( rpt_ODesignView,NULL);
|
2007-08-02 13:40:37 +00:00
|
|
|
SetHelpId(UID_RPT_APP_VIEW);
|
2007-07-09 10:56:41 +00:00
|
|
|
ImplInitSettings();
|
|
|
|
|
|
|
|
SetMapMode( MapMode( MAP_100TH_MM ) );
|
|
|
|
|
|
|
|
m_pScrollWindow = new OScrollWindowHelper(this);
|
|
|
|
m_pScrollWindow->Show();
|
|
|
|
|
|
|
|
// now create the task pane on the right side :-)
|
|
|
|
m_pTaskPane = new Window(this);
|
|
|
|
m_pTaskPane->Show();
|
|
|
|
|
|
|
|
// Splitter einrichten
|
|
|
|
m_aSplitter.SetSplitHdl(LINK(this, ODesignView,SplitHdl));
|
|
|
|
//m_aSplitter.Show();
|
|
|
|
|
|
|
|
m_aMarkTimer.SetTimeout( 100 );
|
|
|
|
m_aMarkTimer.SetTimeoutHdl( LINK( this, ODesignView, MarkTimeout ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
ODesignView::~ODesignView()
|
|
|
|
{
|
|
|
|
DBG_DTOR( rpt_ODesignView,NULL);
|
|
|
|
m_aMarkTimer.Stop();
|
|
|
|
if ( m_pPropWin )
|
|
|
|
{
|
|
|
|
notifySystemWindow(this,m_pPropWin,::comphelper::mem_fun(&TaskPaneList::RemoveWindow));
|
|
|
|
::std::auto_ptr<Window> aTemp2(m_pPropWin);
|
|
|
|
m_pPropWin = NULL;
|
|
|
|
}
|
|
|
|
if ( m_pAddField )
|
|
|
|
{
|
|
|
|
notifySystemWindow(this,m_pAddField,::comphelper::mem_fun(&TaskPaneList::RemoveWindow));
|
|
|
|
::std::auto_ptr<Window> aTemp2(m_pAddField);
|
|
|
|
m_pAddField = NULL;
|
|
|
|
}
|
|
|
|
if ( m_pReportExplorer )
|
|
|
|
{
|
|
|
|
notifySystemWindow(this,m_pReportExplorer,::comphelper::mem_fun(&TaskPaneList::RemoveWindow));
|
|
|
|
::std::auto_ptr<Window> aTemp2(m_pReportExplorer);
|
|
|
|
m_pReportExplorer = NULL;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
::std::auto_ptr<Window> aT3(m_pScrollWindow);
|
|
|
|
m_pScrollWindow = NULL;
|
|
|
|
}
|
|
|
|
{
|
|
|
|
::std::auto_ptr<Window> aTemp2(m_pTaskPane);
|
|
|
|
m_pTaskPane = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::initialize()
|
|
|
|
{
|
|
|
|
SetMapMode( MapMode( MAP_100TH_MM ) );
|
|
|
|
m_pScrollWindow->initialize();
|
|
|
|
m_pScrollWindow->Show();
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::DataChanged( const DataChangedEvent& rDCEvt )
|
|
|
|
{
|
|
|
|
ODataView::DataChanged( rDCEvt );
|
|
|
|
|
|
|
|
if ( (rDCEvt.GetType() == DATACHANGED_SETTINGS) &&
|
|
|
|
(rDCEvt.GetFlags() & SETTINGS_STYLE) )
|
|
|
|
{
|
|
|
|
ImplInitSettings();
|
|
|
|
Invalidate();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
long ODesignView::PreNotify( NotifyEvent& rNEvt )
|
|
|
|
{
|
|
|
|
long nRet = ODataView::PreNotify(rNEvt); // 1 := has to be handled here
|
|
|
|
switch(rNEvt.GetType())
|
|
|
|
{
|
|
|
|
case EVENT_KEYINPUT:
|
|
|
|
//if ( nRet != 1L )
|
|
|
|
{
|
|
|
|
const KeyEvent* pKeyEvent = rNEvt.GetKeyEvent();
|
|
|
|
if ( handleKeyEvent(*pKeyEvent) )
|
|
|
|
nRet = 1L;
|
|
|
|
else if ( nRet == 1L && m_pAccel.get() && m_pController )
|
|
|
|
{
|
|
|
|
const KeyCode& rCode = pKeyEvent->GetKeyCode();
|
|
|
|
util::URL aUrl;
|
|
|
|
aUrl.Complete = m_pAccel->findCommand(svt::AcceleratorExecute::st_VCLKey2AWTKey(rCode));
|
|
|
|
if ( !aUrl.Complete.getLength() || !m_pController->isCommandEnabled( aUrl.Complete ) )
|
|
|
|
nRet = 0L;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return nRet;
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
void ODesignView::resizeDocumentView(Rectangle& _rPlayground)
|
|
|
|
{
|
|
|
|
if ( !_rPlayground.IsEmpty() )
|
|
|
|
{
|
|
|
|
const Size aPlaygroundSize( _rPlayground.GetSize() );
|
|
|
|
|
|
|
|
// calc the split pos, and forward it to the controller
|
|
|
|
sal_Int32 nSplitPos = getController()->getSplitPos();
|
|
|
|
if ( 0 != aPlaygroundSize.Width() )
|
|
|
|
{
|
|
|
|
if ( ( -1 == nSplitPos )
|
|
|
|
|| ( nSplitPos >= aPlaygroundSize.Width() )
|
|
|
|
)
|
|
|
|
{
|
|
|
|
long nMinWidth = static_cast<long>(0.1*aPlaygroundSize.Width());
|
|
|
|
if ( m_pPropWin && m_pPropWin->IsVisible() )
|
|
|
|
nMinWidth = m_pPropWin->GetMinOutputSizePixel().Width();
|
|
|
|
nSplitPos = static_cast<sal_Int32>(_rPlayground.Right() - nMinWidth);
|
|
|
|
getController()->setSplitPos(nSplitPos);
|
|
|
|
}
|
|
|
|
} // if ( 0 != _rPlaygroundSize.Width() )
|
|
|
|
|
|
|
|
Size aReportWindowSize(aPlaygroundSize);
|
|
|
|
if ( m_aSplitter.IsVisible() )
|
|
|
|
{
|
|
|
|
// normalize the split pos
|
|
|
|
Size aSplitSize( m_aSplitter.GetSizePixel().Width(),_rPlayground.GetHeight());
|
|
|
|
|
|
|
|
Point aTaskPanePos(nSplitPos + aSplitSize.Width(), _rPlayground.Top());
|
|
|
|
//long nTest = m_pPropWin->GetMinOutputSizePixel().Width();
|
|
|
|
if ( m_pTaskPane && m_pTaskPane->IsVisible() )
|
|
|
|
{
|
|
|
|
aTaskPanePos.X() = aPlaygroundSize.Width() - m_pTaskPane->GetSizePixel().Width();
|
|
|
|
sal_Int32 nMinWidth = m_pPropWin->GetMinOutputSizePixel().Width();
|
|
|
|
if ( nMinWidth > (aPlaygroundSize.Width() - aTaskPanePos.X()) )
|
|
|
|
{
|
|
|
|
aTaskPanePos.X() = aPlaygroundSize.Width() - nMinWidth;
|
|
|
|
}
|
|
|
|
nSplitPos = aTaskPanePos.X() - aSplitSize.Width();
|
|
|
|
getController()->setSplitPos(nSplitPos);
|
|
|
|
}
|
|
|
|
Point aSplitPos( nSplitPos,_rPlayground.Top() );
|
|
|
|
// set the size of the splitter
|
|
|
|
m_aSplitter.SetPosSizePixel( aSplitPos, aSplitSize );
|
|
|
|
m_aSplitter.SetDragRectPixel( _rPlayground );
|
|
|
|
|
|
|
|
aReportWindowSize = Size(aSplitPos.X() - _rPlayground.Left() - aSplitSize.Width(),_rPlayground.GetHeight());
|
|
|
|
Size aTaskPaneSize(aPlaygroundSize.Width() - aTaskPanePos.X(),aPlaygroundSize.Height() );
|
|
|
|
|
|
|
|
// set the size of the task pane
|
|
|
|
|
|
|
|
m_pTaskPane->SetPosSizePixel(aTaskPanePos,aTaskPaneSize);
|
|
|
|
if ( m_pPropWin )
|
|
|
|
m_pPropWin->SetSizePixel(aTaskPaneSize);
|
|
|
|
}
|
|
|
|
|
|
|
|
// set the size of the report window
|
|
|
|
m_pScrollWindow->SetPosSizePixel(
|
|
|
|
_rPlayground.TopLeft()
|
|
|
|
,aReportWindowSize
|
|
|
|
);
|
|
|
|
}
|
|
|
|
// just for completeness: there is no space left, we occupied it all ...
|
|
|
|
_rPlayground.SetPos( _rPlayground.BottomRight() );
|
|
|
|
_rPlayground.SetSize( Size( 0, 0 ) );
|
|
|
|
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// set the view readonly or not
|
|
|
|
void ODesignView::setReadOnly(sal_Bool /*_bReadOnly*/)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
IMPL_LINK( ODesignView, MarkTimeout, Timer *, EMPTYARG )
|
|
|
|
{
|
|
|
|
if ( m_pPropWin && m_pPropWin->IsVisible() )
|
|
|
|
{
|
|
|
|
m_pPropWin->Update(m_pCurrentView);
|
|
|
|
uno::Reference<beans::XPropertySet> xProp(m_xReportComponent,uno::UNO_QUERY);
|
|
|
|
if ( xProp.is() )
|
|
|
|
m_pPropWin->Update(xProp);
|
|
|
|
Resize();
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::SetMode( DlgEdMode _eNewMode )
|
|
|
|
{
|
|
|
|
m_eMode = _eNewMode;
|
|
|
|
if ( m_eMode == RPTUI_SELECT )
|
|
|
|
m_eActObj = OBJ_NONE;
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->SetMode(_eNewMode);
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::SetInsertObj( USHORT eObj,const ::rtl::OUString& _sShapeType )
|
|
|
|
{
|
|
|
|
m_eActObj = eObj;
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->SetInsertObj( eObj,_sShapeType );
|
|
|
|
}
|
2007-08-02 13:40:37 +00:00
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
rtl::OUString ODesignView::GetInsertObjString() const
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
return m_pScrollWindow->GetInsertObjString();
|
|
|
|
return rtl::OUString();
|
|
|
|
}
|
2007-07-09 10:56:41 +00:00
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
USHORT ODesignView::GetInsertObj() const
|
|
|
|
{
|
|
|
|
return m_eActObj;
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::Cut()
|
|
|
|
{
|
|
|
|
Copy();
|
|
|
|
Delete();
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ODesignView::Copy()
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->Copy();
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
void ODesignView::Paste()
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->Paste();
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::Delete()
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->Delete();
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
BOOL ODesignView::HasSelection()
|
|
|
|
{
|
|
|
|
return m_pScrollWindow && m_pScrollWindow->HasSelection();
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
|
|
|
|
BOOL ODesignView::IsPasteAllowed()
|
|
|
|
{
|
|
|
|
return m_pScrollWindow && m_pScrollWindow->IsPasteAllowed();
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::UpdatePropertyBrowserDelayed(OSectionView* _pView)
|
|
|
|
{
|
|
|
|
if ( m_pCurrentView != _pView )
|
|
|
|
{
|
|
|
|
if ( m_pCurrentView && m_pScrollWindow )
|
|
|
|
m_pScrollWindow->setMarked(m_pCurrentView,sal_False);
|
|
|
|
m_pCurrentView = _pView;
|
|
|
|
if ( m_pCurrentView && m_pScrollWindow )
|
|
|
|
m_pScrollWindow->setMarked(m_pCurrentView,sal_True);
|
|
|
|
m_xReportComponent.clear();
|
|
|
|
DlgEdHint aHint( RPTUI_HINT_SELECTIONCHANGED );
|
|
|
|
Broadcast( aHint );
|
|
|
|
}
|
|
|
|
m_aMarkTimer.Start();
|
|
|
|
}
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::toggleGrid(sal_Bool _bGridVisible)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->toggleGrid(_bGridVisible);
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
USHORT ODesignView::getSectionCount() const
|
|
|
|
{
|
|
|
|
USHORT nRet = 0;
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
nRet = m_pScrollWindow->getSectionCount();
|
|
|
|
return nRet;
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::showRuler(sal_Bool _bShow)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->showRuler(_bShow);
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::removeSection(USHORT _nPosition)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->removeSection(_nPosition);
|
|
|
|
}
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
|
void ODesignView::addSection(const uno::Reference< report::XSection >& _xSection,const ::rtl::OUString& _sColorEntry,USHORT _nPosition)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->addSection(_xSection,_sColorEntry,_nPosition);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::GetFocus()
|
|
|
|
{
|
|
|
|
Window::GetFocus();
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
{
|
|
|
|
::boost::shared_ptr<OReportSection> pSection = m_pScrollWindow->getMarkedSection();
|
|
|
|
if ( pSection )
|
|
|
|
pSection->GrabFocus();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::ImplInitSettings()
|
|
|
|
{
|
|
|
|
SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() ));
|
|
|
|
SetFillColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
|
|
|
|
SetTextFillColor( Application::GetSettings().GetStyleSettings().GetFaceColor() );
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
IMPL_LINK( ODesignView, SplitHdl, void*, )
|
|
|
|
{
|
|
|
|
m_bInSplitHandler = sal_True;
|
|
|
|
const long nTest = m_aSplitter.GetSplitPosPixel();
|
|
|
|
const Size aOutputSize = GetOutputSizePixel();
|
|
|
|
long nMinWidth = static_cast<long>(0.1*aOutputSize.Width());
|
|
|
|
if ( m_pPropWin && m_pPropWin->IsVisible() )
|
|
|
|
nMinWidth = m_pPropWin->GetMinOutputSizePixel().Width();
|
|
|
|
|
|
|
|
if ( (aOutputSize.Width() - nTest) >= nMinWidth && nTest > m_pScrollWindow->getMaxMarkerWidth(sal_False) )
|
|
|
|
{
|
|
|
|
m_aSplitter.SetPosPixel( Point( nTest,m_aSplitter.GetPosPixel().Y() ) );
|
|
|
|
getController()->setSplitPos(nTest);
|
|
|
|
if ( m_pTaskPane && m_pTaskPane->IsVisible() )
|
|
|
|
{
|
|
|
|
Point aTaskPanePos(nTest + m_aSplitter.GetSizePixel().Width(), 0);
|
|
|
|
Size aTaskPaneSize(aOutputSize.Width() - aTaskPanePos.X(),aOutputSize.Height() );
|
|
|
|
m_pTaskPane->SetPosSizePixel(aTaskPanePos,aTaskPaneSize);
|
|
|
|
if ( m_pPropWin )
|
|
|
|
m_pPropWin->SetSizePixel(aTaskPaneSize);
|
|
|
|
// set the size of the report window
|
|
|
|
m_pScrollWindow->SetSizePixel(Size(nTest,aOutputSize.Height()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
m_bInSplitHandler = sal_False;
|
|
|
|
|
|
|
|
return 0L;
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::SelectAll()
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->SelectAll();
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::unmarkAllObjects(OSectionView* _pSectionView)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->unmarkAllObjects(_pSectionView);
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::togglePropertyBrowser(sal_Bool _bToogleOn)
|
|
|
|
{
|
|
|
|
if ( !m_pPropWin && _bToogleOn )
|
|
|
|
{
|
|
|
|
m_pPropWin = new PropBrw(getController()->getORB(),m_pTaskPane,this);
|
|
|
|
notifySystemWindow(this,m_pPropWin,::comphelper::mem_fun(&TaskPaneList::AddWindow));
|
|
|
|
}
|
|
|
|
if ( m_pPropWin && _bToogleOn != m_pPropWin->IsVisible() )
|
|
|
|
{
|
|
|
|
if ( !m_pCurrentView && !m_xReportComponent.is() )
|
|
|
|
m_xReportComponent = getController()->getReportDefinition();
|
|
|
|
|
|
|
|
const sal_Bool bWillBeVisible = _bToogleOn;
|
|
|
|
m_pPropWin->Show(bWillBeVisible);
|
|
|
|
m_aSplitter.Show(bWillBeVisible);
|
|
|
|
m_pTaskPane->Show(bWillBeVisible);
|
|
|
|
Resize();
|
|
|
|
Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_NOERASE);
|
|
|
|
if ( bWillBeVisible )
|
|
|
|
m_aMarkTimer.Start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::showProperties(const uno::Reference< uno::XInterface>& _xReportComponent)
|
|
|
|
{
|
|
|
|
if ( m_xReportComponent != _xReportComponent )
|
|
|
|
{
|
|
|
|
m_xReportComponent = _xReportComponent;
|
|
|
|
if ( m_pCurrentView )
|
|
|
|
m_pScrollWindow->setMarked(m_pCurrentView,sal_False);
|
|
|
|
m_pCurrentView = NULL;
|
|
|
|
m_aMarkTimer.Start();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
BOOL ODesignView::isReportExplorerVisible() const
|
|
|
|
{
|
|
|
|
return m_pReportExplorer && m_pReportExplorer->IsVisible();
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::toggleReportExplorer()
|
|
|
|
{
|
|
|
|
if ( !m_pReportExplorer )
|
|
|
|
{
|
|
|
|
OReportController* pReportController = getController();
|
|
|
|
m_pReportExplorer = new ONavigator(this,pReportController);
|
|
|
|
m_pReportExplorer->AddEventListener(LINK(pReportController,OReportController,EventLstHdl));
|
|
|
|
notifySystemWindow(this,m_pReportExplorer,::comphelper::mem_fun(&TaskPaneList::AddWindow));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
m_pReportExplorer->Show(!m_pReportExplorer->IsVisible());
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
BOOL ODesignView::isAddFieldVisible() const
|
|
|
|
{
|
|
|
|
return m_pAddField && m_pAddField->IsVisible();
|
|
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
void ODesignView::toggleAddField()
|
|
|
|
{
|
|
|
|
if ( !m_pAddField )
|
|
|
|
{
|
|
|
|
uno::Reference< report::XReportDefinition > xReport(m_xReportComponent,uno::UNO_QUERY);
|
|
|
|
uno::Reference< report::XReportComponent > xReportComponent(m_xReportComponent,uno::UNO_QUERY);
|
|
|
|
OReportController* pReportController = getController();
|
|
|
|
if ( !m_pCurrentView && !xReport.is() )
|
|
|
|
{
|
|
|
|
if ( xReportComponent.is() )
|
|
|
|
xReport = xReportComponent->getSection()->getReportDefinition();
|
|
|
|
else
|
|
|
|
xReport = pReportController->getReportDefinition().get();
|
|
|
|
}
|
|
|
|
else if ( m_pCurrentView )
|
|
|
|
{
|
|
|
|
uno::Reference< report::XSection > xSection = m_pCurrentView->getSectionWindow()->getSection();
|
|
|
|
xReport = xSection->getReportDefinition();
|
|
|
|
}
|
|
|
|
m_pAddField = new OAddFieldWindow(*pReportController,this);
|
|
|
|
m_pAddField->Update();
|
|
|
|
m_pAddField->AddEventListener(LINK(pReportController,OReportController,EventLstHdl));
|
|
|
|
notifySystemWindow(this,m_pAddField,::comphelper::mem_fun(&TaskPaneList::AddWindow));
|
|
|
|
}
|
|
|
|
else
|
|
|
|
m_pAddField->Show(!m_pAddField->IsVisible());
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
uno::Reference< report::XSection > ODesignView::getCurrentSection() const
|
|
|
|
{
|
|
|
|
uno::Reference< report::XSection > xSection;
|
|
|
|
if ( m_pCurrentView )
|
|
|
|
xSection = m_pCurrentView->getSectionWindow()->getSection();
|
|
|
|
|
|
|
|
// why do we need the code below?
|
|
|
|
//else
|
|
|
|
// {
|
|
|
|
// OReportController* pReportController = getController();
|
|
|
|
// if ( pReportController )
|
|
|
|
// xSection = pReportController->getReportDefinition()->getDetail();
|
|
|
|
// }
|
|
|
|
return xSection;
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
uno::Reference< report::XReportComponent > ODesignView::getCurrentControlModel() const
|
|
|
|
{
|
|
|
|
uno::Reference< report::XReportComponent > xModel;
|
|
|
|
if ( m_pCurrentView )
|
|
|
|
{
|
|
|
|
xModel = m_pCurrentView->getSectionWindow()->getCurrentControlModel();
|
|
|
|
}
|
|
|
|
return xModel;
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
::boost::shared_ptr<OReportSection> ODesignView::getMarkedSection(NearSectionAccess nsa) const
|
|
|
|
{
|
|
|
|
return m_pScrollWindow ? m_pScrollWindow->getMarkedSection(nsa) : ::boost::shared_ptr<OReportSection>();
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
void ODesignView::markSection(const sal_uInt16 _nPos)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->markSection(_nPos);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::fillCollapsedSections(::std::vector<sal_uInt16>& _rCollapsedPositions) const
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->fillCollapsedSections(_rCollapsedPositions);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::collapseSections(const uno::Sequence< beans::PropertyValue>& _aCollpasedSections)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->collapseSections(_aCollpasedSections);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
::rtl::OUString ODesignView::getCurrentPage() const
|
|
|
|
{
|
|
|
|
return m_pPropWin ? m_pPropWin->getCurrentPage() : ::rtl::OUString();
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::setCurrentPage(const ::rtl::OUString& _sLastActivePage)
|
|
|
|
{
|
|
|
|
if ( m_pPropWin )
|
|
|
|
m_pPropWin->setCurrentPage(_sLastActivePage);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::alignMarkedObjects(sal_Int32 _nControlModification,bool _bAlignAtSection, bool bBoundRects)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->alignMarkedObjects(_nControlModification, _bAlignAtSection,bBoundRects);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
sal_Bool ODesignView::isAlignPossible() const
|
|
|
|
{
|
|
|
|
::boost::shared_ptr<OReportSection> pMarkedSection = getMarkedSection();
|
|
|
|
return pMarkedSection.get() && pMarkedSection->getView()->IsAlignPossible();
|
|
|
|
}
|
|
|
|
// -------------------------------------------------------------------------
|
|
|
|
sal_Int32 ODesignView::getMaxMarkerWidth(sal_Bool _bWithEnd) const
|
|
|
|
{
|
|
|
|
return m_pScrollWindow->getMaxMarkerWidth(_bWithEnd);
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
sal_Bool ODesignView::handleKeyEvent(const KeyEvent& _rEvent)
|
|
|
|
{
|
|
|
|
if ( (m_pPropWin && m_pPropWin->HasChildPathFocus()) )
|
|
|
|
return sal_False;
|
|
|
|
return m_pScrollWindow && m_pScrollWindow->handleKeyEvent(_rEvent);
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
void ODesignView::setMarked(OSectionView* _pSectionView,sal_Bool _bMark)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->setMarked(_pSectionView,_bMark);
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
void ODesignView::setMarked(const uno::Reference< report::XSection>& _xSection,sal_Bool _bMark)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
{
|
|
|
|
m_pScrollWindow->setMarked(_xSection,_bMark);
|
|
|
|
if ( _bMark )
|
|
|
|
UpdatePropertyBrowserDelayed(getMarkedSection()->getView());
|
|
|
|
else
|
|
|
|
m_pCurrentView = NULL;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
void ODesignView::setMarked(const uno::Sequence< uno::Reference< report::XReportComponent> >& _aShapes,sal_Bool _bMark)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
{
|
|
|
|
m_pScrollWindow->setMarked(_aShapes,_bMark);
|
|
|
|
if ( _aShapes.hasElements() && _bMark )
|
|
|
|
showProperties(_aShapes[0]);
|
|
|
|
else
|
|
|
|
m_xReportComponent.clear();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
void ODesignView::MouseButtonDown( const MouseEvent& rMEvt )
|
|
|
|
{
|
|
|
|
if ( rMEvt.IsLeft() )
|
|
|
|
{
|
|
|
|
const uno::Sequence< beans::PropertyValue> aArgs;
|
|
|
|
getController()->executeChecked(SID_SELECT_REPORT,aArgs);
|
|
|
|
}
|
|
|
|
ODataView::MouseButtonDown(rMEvt);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
uno::Any ODesignView::getCurrentlyShownProperty() const
|
|
|
|
{
|
|
|
|
uno::Any aRet;
|
|
|
|
::boost::shared_ptr<OReportSection> pSection = getMarkedSection();
|
|
|
|
if ( pSection )
|
|
|
|
{
|
|
|
|
::std::vector< uno::Reference< report::XReportComponent > > aSelection;
|
|
|
|
pSection->fillControlModelSelection(aSelection);
|
|
|
|
if ( !aSelection.empty() )
|
|
|
|
aRet <<= uno::Sequence< uno::Reference< report::XReportComponent > >(&(*aSelection.begin()),aSelection.size());
|
|
|
|
|
|
|
|
}
|
|
|
|
return aRet;
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::setGridSnap(BOOL bOn)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->setGridSnap(bOn);
|
|
|
|
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void ODesignView::setDragStripes(BOOL bOn)
|
|
|
|
{
|
|
|
|
if ( m_pScrollWindow )
|
|
|
|
m_pScrollWindow->setDragStripes(bOn);
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
BOOL ODesignView::isDragStripes() const
|
|
|
|
{
|
|
|
|
return m_pScrollWindow ? m_pScrollWindow->isDragStripes() : FALSE;
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
sal_Bool ODesignView::isHandleEvent(sal_uInt16 /*_nId*/) const
|
|
|
|
{
|
|
|
|
return m_pPropWin && m_pPropWin->HasChildPathFocus();
|
|
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
|
|
sal_uInt32 ODesignView::getMarkedObjectCount() const
|
|
|
|
{
|
|
|
|
return m_pScrollWindow ? m_pScrollWindow->getMarkedObjectCount() : 0;
|
|
|
|
}
|
|
|
|
//============================================================================
|
|
|
|
} // rptui
|
|
|
|
//============================================================================
|