1*cde9e8dcSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*cde9e8dcSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*cde9e8dcSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*cde9e8dcSAndrew Rist * distributed with this work for additional information 6*cde9e8dcSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*cde9e8dcSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*cde9e8dcSAndrew Rist * "License"); you may not use this file except in compliance 9*cde9e8dcSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*cde9e8dcSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*cde9e8dcSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*cde9e8dcSAndrew Rist * software distributed under the License is distributed on an 15*cde9e8dcSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*cde9e8dcSAndrew Rist * KIND, either express or implied. See the License for the 17*cde9e8dcSAndrew Rist * specific language governing permissions and limitations 18*cde9e8dcSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*cde9e8dcSAndrew Rist *************************************************************/ 21*cde9e8dcSAndrew Rist 22*cde9e8dcSAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_chart2.hxx" 26cdf0e10cSrcweir 27cdf0e10cSrcweir #include "dlg_DataSource.hxx" 28cdf0e10cSrcweir #include "dlg_DataSource.hrc" 29cdf0e10cSrcweir #include "Strings.hrc" 30cdf0e10cSrcweir #include "ResId.hxx" 31cdf0e10cSrcweir #include "ChartTypeTemplateProvider.hxx" 32cdf0e10cSrcweir #include "DiagramHelper.hxx" 33cdf0e10cSrcweir #include "DialogModel.hxx" 34cdf0e10cSrcweir #include "HelpIds.hrc" 35cdf0e10cSrcweir 36cdf0e10cSrcweir #include "tp_RangeChooser.hxx" 37cdf0e10cSrcweir #include "tp_DataSource.hxx" 38cdf0e10cSrcweir 39cdf0e10cSrcweir // for RET_OK 40cdf0e10cSrcweir #include <vcl/msgbox.hxx> 41cdf0e10cSrcweir 42cdf0e10cSrcweir using namespace ::com::sun::star; 43cdf0e10cSrcweir using namespace ::com::sun::star::chart2; 44cdf0e10cSrcweir using namespace ::chart; 45cdf0e10cSrcweir 46cdf0e10cSrcweir using ::com::sun::star::uno::Reference; 47cdf0e10cSrcweir using ::com::sun::star::uno::Sequence; 48cdf0e10cSrcweir using ::rtl::OUString; 49cdf0e10cSrcweir 50cdf0e10cSrcweir // -------------------------------------------------------------------------------- 51cdf0e10cSrcweir 52cdf0e10cSrcweir 53cdf0e10cSrcweir namespace chart 54cdf0e10cSrcweir { 55cdf0e10cSrcweir 56cdf0e10cSrcweir // ---------------------------------------- 57cdf0e10cSrcweir 58cdf0e10cSrcweir class DocumentChartTypeTemplateProvider : public ChartTypeTemplateProvider 59cdf0e10cSrcweir { 60cdf0e10cSrcweir public: 61cdf0e10cSrcweir DocumentChartTypeTemplateProvider( 62cdf0e10cSrcweir const Reference< chart2::XChartDocument > & xDoc ); 63cdf0e10cSrcweir virtual ~DocumentChartTypeTemplateProvider(); 64cdf0e10cSrcweir 65cdf0e10cSrcweir // ____ ChartTypeTemplateProvider ____ 66cdf0e10cSrcweir virtual Reference< chart2::XChartTypeTemplate > getCurrentTemplate() const; 67cdf0e10cSrcweir 68cdf0e10cSrcweir private: 69cdf0e10cSrcweir Reference< chart2::XChartTypeTemplate > m_xTemplate; 70cdf0e10cSrcweir }; 71cdf0e10cSrcweir 72cdf0e10cSrcweir DocumentChartTypeTemplateProvider::DocumentChartTypeTemplateProvider( 73cdf0e10cSrcweir const Reference< chart2::XChartDocument > & xDoc ) 74cdf0e10cSrcweir { 75cdf0e10cSrcweir if( xDoc.is()) 76cdf0e10cSrcweir { 77cdf0e10cSrcweir Reference< chart2::XDiagram > xDia( xDoc->getFirstDiagram()); 78cdf0e10cSrcweir if( xDia.is()) 79cdf0e10cSrcweir { 80cdf0e10cSrcweir DiagramHelper::tTemplateWithServiceName aResult( 81cdf0e10cSrcweir DiagramHelper::getTemplateForDiagram( 82cdf0e10cSrcweir xDia, 83cdf0e10cSrcweir Reference< lang::XMultiServiceFactory >( 84cdf0e10cSrcweir xDoc->getChartTypeManager(), uno::UNO_QUERY ) )); 85cdf0e10cSrcweir m_xTemplate.set( aResult.first ); 86cdf0e10cSrcweir } 87cdf0e10cSrcweir } 88cdf0e10cSrcweir } 89cdf0e10cSrcweir 90cdf0e10cSrcweir DocumentChartTypeTemplateProvider::~DocumentChartTypeTemplateProvider() 91cdf0e10cSrcweir {} 92cdf0e10cSrcweir 93cdf0e10cSrcweir Reference< chart2::XChartTypeTemplate > DocumentChartTypeTemplateProvider::getCurrentTemplate() const 94cdf0e10cSrcweir { 95cdf0e10cSrcweir return m_xTemplate; 96cdf0e10cSrcweir } 97cdf0e10cSrcweir 98cdf0e10cSrcweir // ---------------------------------------- 99cdf0e10cSrcweir 100cdf0e10cSrcweir class DataSourceTabControl : public TabControl 101cdf0e10cSrcweir { 102cdf0e10cSrcweir public: 103cdf0e10cSrcweir DataSourceTabControl( Window* pParent, const ResId& rResId ); 104cdf0e10cSrcweir ~DataSourceTabControl(); 105cdf0e10cSrcweir 106cdf0e10cSrcweir virtual long DeactivatePage(); 107cdf0e10cSrcweir 108cdf0e10cSrcweir void DisableTabToggling(); 109cdf0e10cSrcweir void EnableTabToggling(); 110cdf0e10cSrcweir 111cdf0e10cSrcweir private: 112cdf0e10cSrcweir bool m_bTogglingEnabled; 113cdf0e10cSrcweir }; 114cdf0e10cSrcweir 115cdf0e10cSrcweir DataSourceTabControl::DataSourceTabControl( Window* pParent, const ResId& rResId ) : 116cdf0e10cSrcweir TabControl( pParent, rResId ), 117cdf0e10cSrcweir m_bTogglingEnabled( true ) 118cdf0e10cSrcweir {} 119cdf0e10cSrcweir 120cdf0e10cSrcweir DataSourceTabControl::~DataSourceTabControl() 121cdf0e10cSrcweir {} 122cdf0e10cSrcweir 123cdf0e10cSrcweir // Note that the result is long, but is intended to be a bool 124cdf0e10cSrcweir long DataSourceTabControl::DeactivatePage() 125cdf0e10cSrcweir { 126cdf0e10cSrcweir bool bCanDeactivate( TabControl::DeactivatePage() != 0 ); 127cdf0e10cSrcweir 128cdf0e10cSrcweir bCanDeactivate = (bCanDeactivate && m_bTogglingEnabled); 129cdf0e10cSrcweir 130cdf0e10cSrcweir return (bCanDeactivate ? 1 : 0 ); 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir void DataSourceTabControl::DisableTabToggling() 134cdf0e10cSrcweir { 135cdf0e10cSrcweir m_bTogglingEnabled = false; 136cdf0e10cSrcweir } 137cdf0e10cSrcweir 138cdf0e10cSrcweir void DataSourceTabControl::EnableTabToggling() 139cdf0e10cSrcweir { 140cdf0e10cSrcweir m_bTogglingEnabled = true; 141cdf0e10cSrcweir } 142cdf0e10cSrcweir 143cdf0e10cSrcweir // ---------------------------------------- 144cdf0e10cSrcweir 145cdf0e10cSrcweir sal_uInt16 DataSourceDialog::m_nLastPageId = 0; 146cdf0e10cSrcweir 147cdf0e10cSrcweir DataSourceDialog::DataSourceDialog( 148cdf0e10cSrcweir Window * pParent, 149cdf0e10cSrcweir const Reference< XChartDocument > & xChartDocument, 150cdf0e10cSrcweir const Reference< uno::XComponentContext > & xContext ) : 151cdf0e10cSrcweir 152cdf0e10cSrcweir TabDialog( pParent, SchResId( DLG_DATA_SOURCE )), 153cdf0e10cSrcweir 154cdf0e10cSrcweir m_xChartDocument( xChartDocument ), 155cdf0e10cSrcweir m_xContext( xContext ), 156cdf0e10cSrcweir m_apDocTemplateProvider( new DocumentChartTypeTemplateProvider( xChartDocument )), 157cdf0e10cSrcweir m_apDialogModel( new DialogModel( xChartDocument, xContext )), 158cdf0e10cSrcweir 159cdf0e10cSrcweir m_pTabControl( new DataSourceTabControl( this, SchResId( TABCTRL ) )), 160cdf0e10cSrcweir m_aBtnOK( this, SchResId( BTN_OK ) ), 161cdf0e10cSrcweir m_aBtnCancel( this, SchResId( BTN_CANCEL ) ), 162cdf0e10cSrcweir m_aBtnHelp( this, SchResId( BTN_HELP ) ), 163cdf0e10cSrcweir 164cdf0e10cSrcweir m_pRangeChooserTabePage(0), 165cdf0e10cSrcweir m_pDataSourceTabPage(0), 166cdf0e10cSrcweir m_bRangeChooserTabIsValid( true ), 167cdf0e10cSrcweir m_bDataSourceTabIsValid( true ) 168cdf0e10cSrcweir { 169cdf0e10cSrcweir FreeResource(); 170cdf0e10cSrcweir 171cdf0e10cSrcweir //don't create the tabpages before FreeResource, otherwise the help ids are not matched correctly 172cdf0e10cSrcweir m_pRangeChooserTabePage = new RangeChooserTabPage( m_pTabControl, *(m_apDialogModel.get()), 173cdf0e10cSrcweir m_apDocTemplateProvider.get(), this, true /* bHideDescription */ ); 174cdf0e10cSrcweir m_pDataSourceTabPage = new DataSourceTabPage( m_pTabControl, *(m_apDialogModel.get()), 175cdf0e10cSrcweir m_apDocTemplateProvider.get(), this, true /* bHideDescription */ ); 176cdf0e10cSrcweir 177cdf0e10cSrcweir m_pTabControl->InsertPage( TP_RANGECHOOSER, String( SchResId( STR_PAGE_DATA_RANGE ))); 178cdf0e10cSrcweir m_pTabControl->InsertPage( TP_DATA_SOURCE, String( SchResId( STR_OBJECT_DATASERIES_PLURAL ))); 179cdf0e10cSrcweir 180cdf0e10cSrcweir m_pTabControl->SetTabPage( TP_RANGECHOOSER, m_pRangeChooserTabePage ); 181cdf0e10cSrcweir m_pTabControl->SetTabPage( TP_DATA_SOURCE, m_pDataSourceTabPage ); 182cdf0e10cSrcweir 183cdf0e10cSrcweir m_pTabControl->SelectTabPage( m_nLastPageId ); 184cdf0e10cSrcweir 185cdf0e10cSrcweir SetHelpId( HID_SCH_DLG_RANGES ); 186cdf0e10cSrcweir } 187cdf0e10cSrcweir 188cdf0e10cSrcweir DataSourceDialog::~DataSourceDialog() 189cdf0e10cSrcweir { 190cdf0e10cSrcweir delete m_pRangeChooserTabePage; 191cdf0e10cSrcweir delete m_pDataSourceTabPage; 192cdf0e10cSrcweir 193cdf0e10cSrcweir m_nLastPageId = m_pTabControl->GetCurPageId(); 194cdf0e10cSrcweir delete m_pTabControl; 195cdf0e10cSrcweir } 196cdf0e10cSrcweir 197cdf0e10cSrcweir short DataSourceDialog::Execute() 198cdf0e10cSrcweir { 199cdf0e10cSrcweir short nResult = TabDialog::Execute(); 200cdf0e10cSrcweir if( nResult == RET_OK ) 201cdf0e10cSrcweir { 202cdf0e10cSrcweir if( m_pRangeChooserTabePage ) 203cdf0e10cSrcweir m_pRangeChooserTabePage->commitPage(); 204cdf0e10cSrcweir if( m_pDataSourceTabPage ) 205cdf0e10cSrcweir m_pDataSourceTabPage->commitPage(); 206cdf0e10cSrcweir } 207cdf0e10cSrcweir return nResult; 208cdf0e10cSrcweir } 209cdf0e10cSrcweir 210cdf0e10cSrcweir void DataSourceDialog::setInvalidPage( TabPage * pTabPage ) 211cdf0e10cSrcweir { 212cdf0e10cSrcweir if( pTabPage == m_pRangeChooserTabePage ) 213cdf0e10cSrcweir m_bRangeChooserTabIsValid = false; 214cdf0e10cSrcweir else if( pTabPage == m_pDataSourceTabPage ) 215cdf0e10cSrcweir m_bDataSourceTabIsValid = false; 216cdf0e10cSrcweir 217cdf0e10cSrcweir if( ! (m_bRangeChooserTabIsValid && m_bDataSourceTabIsValid )) 218cdf0e10cSrcweir { 219cdf0e10cSrcweir m_aBtnOK.Enable( sal_False ); 220cdf0e10cSrcweir OSL_ASSERT( m_pTabControl ); 221cdf0e10cSrcweir // note: there seems to be no suitable mechanism to address pages by 222cdf0e10cSrcweir // identifier, at least it is unclear what the page identifiers are. 223cdf0e10cSrcweir // @todo: change the fixed numbers to identifiers 224cdf0e10cSrcweir if( m_bRangeChooserTabIsValid ) 225cdf0e10cSrcweir m_pTabControl->SetCurPageId( m_pTabControl->GetPageId( 1 )); 226cdf0e10cSrcweir else if( m_bDataSourceTabIsValid ) 227cdf0e10cSrcweir m_pTabControl->SetCurPageId( m_pTabControl->GetPageId( 0 )); 228cdf0e10cSrcweir m_pTabControl->DisableTabToggling(); 229cdf0e10cSrcweir } 230cdf0e10cSrcweir } 231cdf0e10cSrcweir 232cdf0e10cSrcweir void DataSourceDialog::setValidPage( TabPage * pTabPage ) 233cdf0e10cSrcweir { 234cdf0e10cSrcweir if( pTabPage == m_pRangeChooserTabePage ) 235cdf0e10cSrcweir m_bRangeChooserTabIsValid = true; 236cdf0e10cSrcweir else if( pTabPage == m_pDataSourceTabPage ) 237cdf0e10cSrcweir m_bDataSourceTabIsValid = true; 238cdf0e10cSrcweir 239cdf0e10cSrcweir if( m_bRangeChooserTabIsValid && m_bDataSourceTabIsValid ) 240cdf0e10cSrcweir { 241cdf0e10cSrcweir m_aBtnOK.Enable( sal_True ); 242cdf0e10cSrcweir OSL_ASSERT( m_pTabControl ); 243cdf0e10cSrcweir m_pTabControl->EnableTabToggling(); 244cdf0e10cSrcweir } 245cdf0e10cSrcweir } 246cdf0e10cSrcweir 247cdf0e10cSrcweir 248cdf0e10cSrcweir } // namespace chart 249