diff options
author | RĂ¼diger Timm <rt@openoffice.org> | 2008-01-29 12:50:32 +0000 |
---|---|---|
committer | RĂ¼diger Timm <rt@openoffice.org> | 2008-01-29 12:50:32 +0000 |
commit | e0888856057aec0fb554f3f0a022bd2bd6971d6c (patch) | |
tree | 463d9ea23fc1b16a9bd24c44d84548eb100c78da /reportdesign/source/ui/report/DesignView.cxx | |
parent | 0919af9fb636efda0a7767ca82937f706e95c3ea (diff) |
INTEGRATION: CWS reportdesign02 (1.3.36); FILE MERGED
2008/01/15 11:50:21 oj 1.3.36.2: change helpid names
2007/10/26 12:31:37 oj 1.3.36.1: #i77919# use of SplitWindow
Diffstat (limited to 'reportdesign/source/ui/report/DesignView.cxx')
-rw-r--r-- | reportdesign/source/ui/report/DesignView.cxx | 182 |
1 files changed, 135 insertions, 47 deletions
diff --git a/reportdesign/source/ui/report/DesignView.cxx b/reportdesign/source/ui/report/DesignView.cxx index 5f159dd6e837..e542aa58e6ff 100644 --- a/reportdesign/source/ui/report/DesignView.cxx +++ b/reportdesign/source/ui/report/DesignView.cxx @@ -4,9 +4,9 @@ * * $RCSfile: DesignView.cxx,v $ * - * $Revision: 1.3 $ + * $Revision: 1.4 $ * - * last change: $Author: hr $ $Date: 2007-08-02 14:39:56 $ + * last change: $Author: rt $ $Date: 2008-01-29 13:50:32 $ * * The Contents of this file are made available subject to * the terms of GNU Lesser General Public License Version 2.1. @@ -97,6 +97,82 @@ using namespace beans; using namespace container; #define LINE_SIZE 50 +#define START_SIZE_TASKPANE 30 +#define COLSET_ID 1 +#define REPORT_ID 2 +#define TASKPANE_ID 3 + +class OTaskWindow : public Window +{ + PropBrw* m_pPropWin; +public: + OTaskWindow(Window* _pParent) : Window(_pParent),m_pPropWin(NULL){} + + inline void setPropertyBrowser(PropBrw* _pPropWin) + { + m_pPropWin = _pPropWin; + } + + virtual void Resize() + { + const Size aSize = GetOutputSizePixel(); + if ( m_pPropWin && aSize.Height() && aSize.Width() ) + m_pPropWin->SetSizePixel(aSize); + } + long getMinimumWidth() const + { + long nRet = 0; + if ( m_pPropWin ) + nRet = m_pPropWin->getMinimumSize().Width(); + return nRet; + } +}; +class OwnSplitWindow : public SplitWindow +{ +public: + OwnSplitWindow(Window* pParent) : SplitWindow(pParent,WB_DIALOGCONTROL){SetBackground( );} + + virtual void Split() + { + SplitWindow::Split(); + setItemSizes(); + } + void setItemSizes() + { + const long nOutWidth = GetOutputSizePixel().Width(); + long nTaskPaneMinSplitSize = static_cast<OTaskWindow*>(GetItemWindow(TASKPANE_ID))->getMinimumWidth(); + nTaskPaneMinSplitSize = static_cast<long>(nTaskPaneMinSplitSize*100/nOutWidth); + if ( !nTaskPaneMinSplitSize ) + nTaskPaneMinSplitSize = START_SIZE_TASKPANE; + + const long nReportMinSplitSize = static_cast<long>(12000/nOutWidth); + + long nReportSize = GetItemSize( REPORT_ID ); + long nTaskPaneSize = GetItemSize( TASKPANE_ID ); + + BOOL bMod = FALSE; + if( nReportSize < nReportMinSplitSize ) + { + nReportSize = nReportMinSplitSize; + nTaskPaneSize = 99 - nReportMinSplitSize; + + bMod = TRUE; + } + else if( nTaskPaneSize < nTaskPaneMinSplitSize ) + { + nTaskPaneSize = nTaskPaneMinSplitSize; + nReportSize = 99 - nTaskPaneMinSplitSize; + + bMod = TRUE; + } + + if( bMod ) + { + SetItemSize( REPORT_ID, nReportSize ); + SetItemSize( TASKPANE_ID, nTaskPaneSize ); + } + } +}; //================================================================== // class ODesignView //================================================================== @@ -106,7 +182,7 @@ ODesignView::ODesignView( Window* pParent, const Reference< XMultiServiceFactory >& _rxOrb, OReportController* _pController) : ODataView( pParent,_pController,_rxOrb,WB_DIALOGCONTROL ) - ,m_aSplitter(this,WB_HSCROLL) + //,m_aSplitter(this,WB_HSCROLL) ,m_pReportController( _pController ) ,m_pPropWin(NULL) ,m_pAddField(NULL) @@ -122,21 +198,30 @@ ODesignView::ODesignView( Window* pParent, ,m_bInSplitHandler( FALSE ) { DBG_CTOR( rpt_ODesignView,NULL); - SetHelpId(UID_RPT_APP_VIEW); + SetHelpId(UID_RPT_RPT_APP_VIEW); ImplInitSettings(); + m_pSplitWin = new OwnSplitWindow( this ); + SetMapMode( MapMode( MAP_100TH_MM ) ); m_pScrollWindow = new OScrollWindowHelper(this); - m_pScrollWindow->Show(); + //m_pScrollWindow->Show(); // now create the task pane on the right side :-) - m_pTaskPane = new Window(this); - m_pTaskPane->Show(); + m_pTaskPane = new OTaskWindow(this); + //m_pTaskPane->Show(); + + m_pSplitWin->InsertItem( COLSET_ID,100,SPLITWINDOW_APPEND, 0, SWIB_PERCENTSIZE | SWIB_COLSET ); + m_pSplitWin->InsertItem( REPORT_ID, m_pScrollWindow, 100/*m_pScrollWindow->getMaxMarkerWidth(sal_False)*/, SPLITWINDOW_APPEND, COLSET_ID, SWIB_PERCENTSIZE /*SWIB_COLSET*/); + //m_pSplitWin->InsertItem( TASKPANE_ID, m_pTaskPane, 50, SPLITWINDOW_APPEND, 0, SWIB_PERCENTSIZE ); // Splitter einrichten - m_aSplitter.SetSplitHdl(LINK(this, ODesignView,SplitHdl)); - //m_aSplitter.Show(); + //m_aSplitter.SetSplitHdl(LINK(this, ODesignView,SplitHdl)); + m_pSplitWin->SetSplitHdl(LINK(this, ODesignView,SplitHdl)); + m_pSplitWin->ShowAutoHideButton(); + m_pSplitWin->SetAlign(WINDOWALIGN_LEFT); + m_pSplitWin->Show(); m_aMarkTimer.SetTimeout( 100 ); m_aMarkTimer.SetTimeoutHdl( LINK( this, ODesignView, MarkTimeout ) ); @@ -173,6 +258,11 @@ ODesignView::~ODesignView() ::std::auto_ptr<Window> aTemp2(m_pTaskPane); m_pTaskPane = NULL; } + { + ::std::auto_ptr<Window> aTemp2(m_pSplitWin); + m_pSplitWin = NULL; + } + } // ----------------------------------------------------------------------------- void ODesignView::initialize() @@ -245,44 +335,32 @@ void ODesignView::resizeDocumentView(Rectangle& _rPlayground) } // if ( 0 != _rPlaygroundSize.Width() ) Size aReportWindowSize(aPlaygroundSize); - if ( m_aSplitter.IsVisible() ) + if ( m_pSplitWin->IsItemValid(TASKPANE_ID) ) { // 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(); + const long nSplitterWidth = GetSettings().GetStyleSettings().GetSplitSize(); + Point aTaskPanePos(nSplitPos + nSplitterWidth, _rPlayground.Top()); if ( m_pTaskPane && m_pTaskPane->IsVisible() ) { aTaskPanePos.X() = aPlaygroundSize.Width() - m_pTaskPane->GetSizePixel().Width(); - sal_Int32 nMinWidth = m_pPropWin->GetMinOutputSizePixel().Width(); + sal_Int32 nMinWidth = m_pPropWin->getMinimumSize().Width(); if ( nMinWidth > (aPlaygroundSize.Width() - aTaskPanePos.X()) ) { aTaskPanePos.X() = aPlaygroundSize.Width() - nMinWidth; } - nSplitPos = aTaskPanePos.X() - aSplitSize.Width(); + nSplitPos = aTaskPanePos.X() - nSplitterWidth; 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); + const long nTaskPaneSize = static_cast<long>((aPlaygroundSize.Width() - aTaskPanePos.X())*100/aPlaygroundSize.Width()); + if ( m_pSplitWin->GetItemSize( TASKPANE_ID ) != nTaskPaneSize ) + { + m_pSplitWin->SetItemSize( REPORT_ID, 99 - nTaskPaneSize ); + m_pSplitWin->SetItemSize( TASKPANE_ID, nTaskPaneSize ); + } + } } - // set the size of the report window - m_pScrollWindow->SetPosSizePixel( - _rPlayground.TopLeft() - ,aReportWindowSize - ); + m_pSplitWin->SetPosSizePixel( _rPlayground.TopLeft(),aPlaygroundSize ); } // just for completeness: there is no space left, we occupied it all ... _rPlayground.SetPos( _rPlayground.BottomRight() ); @@ -302,7 +380,10 @@ IMPL_LINK( ODesignView, MarkTimeout, Timer *, EMPTYARG ) m_pPropWin->Update(m_pCurrentView); uno::Reference<beans::XPropertySet> xProp(m_xReportComponent,uno::UNO_QUERY); if ( xProp.is() ) + { m_pPropWin->Update(xProp); + static_cast<OTaskWindow*>(m_pTaskPane)->Resize(); + } Resize(); } @@ -442,7 +523,11 @@ void ODesignView::GetFocus() // ----------------------------------------------------------------------------- void ODesignView::ImplInitSettings() { +//#if OSL_DEBUG_LEVEL > 0 +// SetBackground( Wallpaper( COL_RED )); +//#else SetBackground( Wallpaper( Application::GetSettings().GetStyleSettings().GetFaceColor() )); +//#endif SetFillColor( Application::GetSettings().GetStyleSettings().GetFaceColor() ); SetTextFillColor( Application::GetSettings().GetStyleSettings().GetFaceColor() ); } @@ -450,25 +535,21 @@ void ODesignView::ImplInitSettings() IMPL_LINK( ODesignView, SplitHdl, void*, ) { m_bInSplitHandler = sal_True; - const long nTest = m_aSplitter.GetSplitPosPixel(); + //const long nTest = m_aSplitter.GetSplitPosPixel(); + const Size aOutputSize = GetOutputSizePixel(); + const long nTest = aOutputSize.Width() * m_pSplitWin->GetItemSize(TASKPANE_ID) / 100; 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() ) ); + long nOldSplitPos = getController()->getSplitPos(); getController()->setSplitPos(nTest); - if ( m_pTaskPane && m_pTaskPane->IsVisible() ) + if ( nOldSplitPos != -1 && nOldSplitPos <= nTest ) { - 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())); + Invalidate(INVALIDATE_NOCHILDREN); } } @@ -494,6 +575,8 @@ void ODesignView::togglePropertyBrowser(sal_Bool _bToogleOn) if ( !m_pPropWin && _bToogleOn ) { m_pPropWin = new PropBrw(getController()->getORB(),m_pTaskPane,this); + m_pPropWin->Invalidate(); + static_cast<OTaskWindow*>(m_pTaskPane)->setPropertyBrowser(m_pPropWin); notifySystemWindow(this,m_pPropWin,::comphelper::mem_fun(&TaskPaneList::AddWindow)); } if ( m_pPropWin && _bToogleOn != m_pPropWin->IsVisible() ) @@ -503,10 +586,15 @@ void ODesignView::togglePropertyBrowser(sal_Bool _bToogleOn) const sal_Bool bWillBeVisible = _bToogleOn; m_pPropWin->Show(bWillBeVisible); - m_aSplitter.Show(bWillBeVisible); m_pTaskPane->Show(bWillBeVisible); - Resize(); - Invalidate(INVALIDATE_NOCHILDREN|INVALIDATE_NOERASE); + m_pTaskPane->Invalidate(); + + if ( bWillBeVisible ) + m_pSplitWin->InsertItem( TASKPANE_ID, m_pTaskPane,START_SIZE_TASKPANE, SPLITWINDOW_APPEND, COLSET_ID, SWIB_PERCENTSIZE/*|SWIB_COLSET */); + else + m_pSplitWin->RemoveItem(TASKPANE_ID); + + Invalidate(/*INVALIDATE_NOCHILDREN|INVALIDATE_NOERASE*/); if ( bWillBeVisible ) m_aMarkTimer.Start(); } |