diff options
Diffstat (limited to 'chart2/source/controller/dialogs/DataBrowser.cxx')
-rw-r--r-- | chart2/source/controller/dialogs/DataBrowser.cxx | 155 |
1 files changed, 72 insertions, 83 deletions
diff --git a/chart2/source/controller/dialogs/DataBrowser.cxx b/chart2/source/controller/dialogs/DataBrowser.cxx index a5df0dcc03e4..7cab156b530c 100644 --- a/chart2/source/controller/dialogs/DataBrowser.cxx +++ b/chart2/source/controller/dialogs/DataBrowser.cxx @@ -20,8 +20,9 @@ #include <svl/zforlist.hxx> #include "DataBrowser.hxx" -#include "DataBrowserModel.hxx" +#include <DataBrowserModel.hxx> #include <strings.hrc> +#include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <DiagramHelper.hxx> #include <CommonConverters.hxx> @@ -30,21 +31,22 @@ #include <ResId.hxx> #include <bitmaps.hlst> #include <helpids.h> +#include <ChartModel.hxx> +#include <ChartType.hxx> #include <vcl/weld.hxx> #include <vcl/settings.hxx> #include <vcl/svapp.hxx> #include <vcl/virdev.hxx> -#include <rtl/math.hxx> #include <o3tl/safeint.hxx> #include <osl/diagnose.h> +#include <svl/numformat.hxx> #include <toolkit/helper/vclunohelper.hxx> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/chart2/XChartType.hpp> #include <com/sun/star/container/XIndexReplace.hpp> #include <algorithm> +#include <limits> using namespace ::com::sun::star; @@ -86,7 +88,7 @@ namespace impl class SeriesHeaderEdit { public: - explicit SeriesHeaderEdit(std::unique_ptr<weld::Entry> xControl); + explicit SeriesHeaderEdit(std::unique_ptr<weld::Entry> xControl, sal_Int32 nHeader); void setStartColumn( sal_Int32 nStartColumn ); sal_Int32 getStartColumn() const { return m_nStartColumn;} @@ -115,7 +117,7 @@ private: bool m_bShowWarningBox; }; -SeriesHeaderEdit::SeriesHeaderEdit(std::unique_ptr<weld::Entry> xControl) +SeriesHeaderEdit::SeriesHeaderEdit(std::unique_ptr<weld::Entry> xControl, sal_Int32 nHeader) : m_xControl(std::move(xControl)) , m_nStartColumn(0) , m_bShowWarningBox(false) @@ -124,6 +126,8 @@ SeriesHeaderEdit::SeriesHeaderEdit(std::unique_ptr<weld::Entry> xControl) m_xControl->connect_changed(LINK(this, SeriesHeaderEdit, NameEdited)); m_xControl->connect_focus_in(LINK(this, SeriesHeaderEdit, NameFocusIn)); m_xControl->connect_mouse_press(LINK(this, SeriesHeaderEdit, MousePressHdl)); + + m_xControl->set_buildable_name(m_xControl->get_buildable_name() + OUString::number(nHeader)); } IMPL_LINK_NOARG(SeriesHeaderEdit, NameEdited, weld::Entry&, void) @@ -162,13 +166,13 @@ IMPL_LINK_NOARG(SeriesHeaderEdit, MousePressHdl, const MouseEvent&, bool) class SeriesHeader { public: - explicit SeriesHeader(weld::Container* pParent, weld::Container* pColorParent); + explicit SeriesHeader(weld::Container* pParent, weld::Container* pColorParent, sal_Int32 nHeader); ~SeriesHeader(); void SetColor( const Color & rCol ); void SetPos(); void SetWidth( sal_Int32 nWidth ); - void SetChartType( const Reference< chart2::XChartType > & xChartType, + void SetChartType( const rtl::Reference< ::chart::ChartType > & xChartType, bool bSwapXAndYAxis ); void SetSeriesName( const OUString & rName ); void SetRange( sal_Int32 nStartCol, sal_Int32 nEndCol ); @@ -220,7 +224,7 @@ private: DECL_LINK( SeriesNameEdited, SeriesHeaderEdit&, void ); static OUString GetChartTypeImage( - const Reference< chart2::XChartType > & xChartType, + const rtl::Reference< ::chart::ChartType > & xChartType, bool bSwapXAndYAxis ); @@ -229,17 +233,17 @@ private: bool m_bSeriesNameChangePending; }; -SeriesHeader::SeriesHeader(weld::Container* pParent, weld::Container* pColorParent) - : m_aUpdateDataTimer("UpdateDataTimer") - , m_xBuilder1(Application::CreateBuilder(pParent, "modules/schart/ui/columnfragment.ui")) - , m_xBuilder2(Application::CreateBuilder(pColorParent, "modules/schart/ui/imagefragment.ui")) +SeriesHeader::SeriesHeader(weld::Container* pParent, weld::Container* pColorParent, sal_Int32 nHeader) + : m_aUpdateDataTimer( "SeriesHeader UpdateDataTimer" ) + , m_xBuilder1(Application::CreateBuilder(pParent, u"modules/schart/ui/columnfragment.ui"_ustr)) + , m_xBuilder2(Application::CreateBuilder(pColorParent, u"modules/schart/ui/imagefragment.ui"_ustr)) , m_pParent(pParent) , m_pColorParent(pColorParent) - , m_xContainer1(m_xBuilder1->weld_container("container")) - , m_xContainer2(m_xBuilder2->weld_container("container")) - , m_spSymbol(m_xBuilder1->weld_image("image")) - , m_spSeriesName(new SeriesHeaderEdit(m_xBuilder1->weld_entry("entry"))) - , m_spColorBar(m_xBuilder2->weld_image("image")) + , m_xContainer1(m_xBuilder1->weld_container(u"container"_ustr)) + , m_xContainer2(m_xBuilder2->weld_container(u"container"_ustr)) + , m_spSymbol(m_xBuilder1->weld_image(u"image"_ustr)) + , m_spSeriesName(new SeriesHeaderEdit(m_xBuilder1->weld_entry(u"entry"_ustr), nHeader)) + , m_spColorBar(m_xBuilder2->weld_image(u"image"_ustr)) , m_xDevice(Application::GetDefaultDevice()) , m_nStartCol( 0 ) , m_nEndCol( 0 ) @@ -247,7 +251,6 @@ SeriesHeader::SeriesHeader(weld::Container* pParent, weld::Container* pColorPare , m_bSeriesNameChangePending( false ) { m_aUpdateDataTimer.SetInvokeHandler(LINK(this, SeriesHeader, ImplUpdateDataHdl)); - m_aUpdateDataTimer.SetDebugName( "SeriesHeader UpdateDataTimer" ); m_aUpdateDataTimer.SetTimeout(4 * EDIT_UPDATEDATA_TIMEOUT); m_spSeriesName->SetModifyHdl(LINK(this, SeriesHeader, SeriesNameEdited)); @@ -290,20 +293,15 @@ void SeriesHeader::SetPos() // series name edit field m_spSeriesName->set_margin_start(2); - aSize.setWidth(nSymbolHeight); - aSize.setHeight(12); - aSize = m_xDevice->LogicToPixel(aSize, MapMode(MapUnit::MapAppFont)); - aSize.setWidth(m_nWidth - aSize.Width() - 2); - m_spSeriesName->set_size_request(aSize.Width(), aSize.Height()); + sal_Int32 nHeightPx = m_xDevice->LogicToPixel(Size(0, 12), MapMode(MapUnit::MapAppFont)).Height(); + m_spSeriesName->set_size_request(m_nWidth - aSize.Width() - 2, nHeightPx); // color bar - aSize.setHeight(3); - aSize = m_xDevice->LogicToPixel(aSize, MapMode(MapUnit::MapAppFont)); - aSize.setWidth(m_nWidth); - m_spColorBar->set_size_request(aSize.Width(), aSize.Height()); + nHeightPx = m_xDevice->LogicToPixel(Size(0, 3), MapMode(MapUnit::MapAppFont)).Height(); + m_spColorBar->set_size_request(m_nWidth, nHeightPx); - auto xVirDev(m_spColorBar->create_virtual_device()); - xVirDev->SetOutputSizePixel(aSize); + ScopedVclPtr<VirtualDevice> xVirDev(m_spColorBar->create_virtual_device()); + xVirDev->SetOutputSizePixel(Size(m_nWidth, nHeightPx)); xVirDev->SetFillColor(m_aColor); xVirDev->SetLineColor(m_aColor); xVirDev->DrawRect(tools::Rectangle(Point(0, 0), aSize)); @@ -322,7 +320,7 @@ void SeriesHeader::SetPixelWidth( sal_Int32 nWidth ) } void SeriesHeader::SetChartType( - const Reference< chart2::XChartType > & xChartType, + const rtl::Reference< ChartType > & xChartType, bool bSwapXAndYAxis ) { @@ -380,7 +378,7 @@ bool SeriesHeader::HasFocus() const } OUString SeriesHeader::GetChartTypeImage( - const Reference< chart2::XChartType > & xChartType, + const rtl::Reference< ChartType > & xChartType, bool bSwapXAndYAxis ) { @@ -489,10 +487,8 @@ DataBrowser::DataBrowser(const css::uno::Reference<css::awt::XWindow> &rParent, m_rNumberEditController( new ::svt::FormattedFieldCellController( m_aNumberEditField.get() )), m_rTextEditController( new ::svt::EditCellController( m_aTextEditField.get() )) { - double fNan; - ::rtl::math::setNan( & fNan ); Formatter& rFormatter = m_aNumberEditField->get_formatter(); - rFormatter.SetDefaultValue( fNan ); + rFormatter.SetDefaultValue( std::numeric_limits<double>::quiet_NaN() ); rFormatter.TreatAsNumber( true ); RenewTable(); } @@ -621,7 +617,7 @@ void DataBrowser::RenewTable() GetDataWindow().LogicToPixel( Size( 42, 0 )).getWidth() )); OUString aDefaultSeriesName(SchResId(STR_COLUMN_LABEL)); - replaceParamterInString( aDefaultSeriesName, "%COLUMNNUMBER", OUString::number( 24 ) ); + replaceParamterInString( aDefaultSeriesName, u"%COLUMNNUMBER", OUString::number( 24 ) ); sal_Int32 nColumnWidth = GetDataWindow().GetTextWidth( aDefaultSeriesName ) + GetDataWindow().LogicToPixel(Point(8 + impl::SeriesHeader::GetRelativeAppFontXPosForNameField(), 0), MapMode(MapUnit::MapAppFont)).X(); sal_Int32 nColumnCount = m_apDataBrowserModel->getColumnCount(); @@ -642,22 +638,21 @@ void DataBrowser::RenewTable() Link<impl::SeriesHeaderEdit&,void> aFocusLink( LINK( this, DataBrowser, SeriesHeaderGotFocus )); Link<impl::SeriesHeaderEdit&,void> aSeriesHeaderChangedLink( LINK( this, DataBrowser, SeriesHeaderChanged )); - for (auto const& elemHeader : aHeaders) + for (size_t i = 0; i < aHeaders.size(); ++i) { - auto spHeader = std::make_shared<impl::SeriesHeader>( m_pColumnsWin, m_pColorsWin ); - Reference< beans::XPropertySet > xSeriesProp( elemHeader.m_xDataSeries, uno::UNO_QUERY ); + auto const& elemHeader = aHeaders[i]; + auto spHeader = std::make_shared<impl::SeriesHeader>( m_pColumnsWin, m_pColorsWin, i); Color nColor; // @todo: Set "DraftColor", i.e. interpolated colors for gradients, bitmaps, etc. - if( xSeriesProp.is() && - ( xSeriesProp->getPropertyValue( "Color" ) >>= nColor )) + if( elemHeader.m_xDataSeries.is() && + ( elemHeader.m_xDataSeries->getPropertyValue( u"Color"_ustr ) >>= nColor )) spHeader->SetColor( nColor ); spHeader->SetChartType( elemHeader.m_xChartType, elemHeader.m_bSwapXAndYAxis ); spHeader->SetSeriesName( - DataSeriesHelper::getDataSeriesLabel( - elemHeader.m_xDataSeries, - (elemHeader.m_xChartType.is() ? + elemHeader.m_xDataSeries->getLabelForRole( + elemHeader.m_xChartType.is() ? elemHeader.m_xChartType->getRoleOfSequenceForSeriesLabel() : - OUString("values-y")))); + u"values-y"_ustr)); // index is 1-based, as 0 is for the column that contains the row-numbers spHeader->SetRange( elemHeader.m_nStartColumn + 1, elemHeader.m_nEndColumn + 1 ); spHeader->SetGetFocusHdl( aFocusLink ); @@ -671,12 +666,12 @@ void DataBrowser::RenewTable() Invalidate(); } -OUString DataBrowser::GetColString( sal_Int32 nColumnId ) const +const OUString & DataBrowser::GetColString( sal_Int32 nColumnId ) const { OSL_ASSERT(m_apDataBrowserModel); if( nColumnId > 0 ) return m_apDataBrowserModel->getRoleOfColumn( nColumnId - 1 ); - return OUString(); + return EMPTY_OUSTRING; } OUString DataBrowser::GetCellText( sal_Int32 nRow, sal_uInt16 nColumnId ) const @@ -721,7 +716,7 @@ OUString DataBrowser::GetCellText( sal_Int32 nRow, sal_uInt16 nColumnId ) const // getDateTimeInputNumberFormat() instead of doing the // guess work. sal_Int32 nNumberFormat = DiagramHelper::getDateTimeInputNumberFormat( - Reference< util::XNumberFormatsSupplier >( m_xChartDoc, uno::UNO_QUERY), fDouble ); + m_xChartDoc, fDouble ); Color nLabelColor; bool bColorChanged = false; aResult = m_spNumberFormatterWrapper->getFormattedString( @@ -741,16 +736,13 @@ OUString DataBrowser::GetCellText( sal_Int32 nRow, sal_uInt16 nColumnId ) const double DataBrowser::GetCellNumber( sal_Int32 nRow, sal_uInt16 nColumnId ) const { - double fResult; - ::rtl::math::setNan( & fResult ); - if(( nColumnId >= 1 ) && ( nRow >= 0 ) && m_apDataBrowserModel) { - fResult = m_apDataBrowserModel->getCellNumber( + return m_apDataBrowserModel->getCellNumber( static_cast< sal_Int32 >( nColumnId ) - 1, nRow ); } - return fResult; + return std::numeric_limits<double>::quiet_NaN(); } void DataBrowser::Resize() @@ -836,15 +828,13 @@ void DataBrowser::CellModified() } void DataBrowser::SetDataFromModel( - const Reference< chart2::XChartDocument > & xChartDoc, - const Reference< uno::XComponentContext > & xContext ) + const rtl::Reference<::chart::ChartModel> & xChartDoc ) { - m_xChartDoc.set( xChartDoc ); + m_xChartDoc = xChartDoc; - m_apDataBrowserModel.reset( new DataBrowserModel( m_xChartDoc, xContext )); + m_apDataBrowserModel.reset( new DataBrowserModel( m_xChartDoc )); m_spNumberFormatterWrapper = - std::make_shared<NumberFormatterWrapper>( - Reference< util::XNumberFormatsSupplier >( m_xChartDoc, uno::UNO_QUERY )); + std::make_shared<NumberFormatterWrapper>(m_xChartDoc); Formatter& rFormatter = m_aNumberEditField->get_formatter(); rFormatter.SetFormatter( m_spNumberFormatterWrapper->getSvNumberFormatter() ); @@ -908,9 +898,9 @@ void DataBrowser::RemoveColumn() void DataBrowser::InsertRow() { - sal_Int32 nRowIdx = GetCurRow(); + sal_Int32 nRowIdx = GetCurRow(); - if( nRowIdx >= 0 && m_apDataBrowserModel) + if( nRowIdx >= 0 && m_apDataBrowserModel) { // save changes made to edit-field if( IsModified() ) @@ -923,9 +913,9 @@ void DataBrowser::InsertRow() void DataBrowser::RemoveRow() { - sal_Int32 nRowIdx = GetCurRow(); + sal_Int32 nRowIdx = GetCurRow(); - if( nRowIdx >= 0 && m_apDataBrowserModel) + if( nRowIdx >= 0 && m_apDataBrowserModel) { // save changes made to edit-field if( IsModified() ) @@ -953,7 +943,7 @@ void DataBrowser::MoveLeftColumn() // keep cursor in swapped column if(( 0 < GetCurColumnId() ) && ( GetCurColumnId() <= ColCount() - 1 )) { - Dispatch( BROWSER_CURSORLEFT ); + Dispatch(BrowserDispatchId::CURSORLEFT); } RenewTable(); } @@ -974,7 +964,7 @@ void DataBrowser::MoveRightColumn() // keep cursor in swapped column if( GetCurColumnId() < ColCount() - 1 ) { - Dispatch( BROWSER_CURSORRIGHT ); + Dispatch(BrowserDispatchId::CURSORRIGHT); } RenewTable(); } @@ -995,7 +985,7 @@ void DataBrowser::MoveUpRow() // keep cursor in swapped row if(( 0 < GetCurRow() ) && ( GetCurRow() <= GetRowCount() - 1 )) { - Dispatch( BROWSER_CURSORUP ); + Dispatch(BrowserDispatchId::CURSORUP); } RenewTable(); } @@ -1016,7 +1006,7 @@ void DataBrowser::MoveDownRow() // keep cursor in swapped row if( GetCurRow() < GetRowCount() - 1 ) { - Dispatch( BROWSER_CURSORDOWN ); + Dispatch(BrowserDispatchId::CURSORDOWN); } RenewTable(); } @@ -1274,21 +1264,21 @@ void DataBrowser::RenewSeriesHeaders() Link<impl::SeriesHeaderEdit&,void> aFocusLink( LINK( this, DataBrowser, SeriesHeaderGotFocus )); Link<impl::SeriesHeaderEdit&,void> aSeriesHeaderChangedLink( LINK( this, DataBrowser, SeriesHeaderChanged )); - for (auto const& elemHeader : aHeaders) + + for (size_t i = 0; i < aHeaders.size(); ++i) { - auto spHeader = std::make_shared<impl::SeriesHeader>( m_pColumnsWin, m_pColorsWin ); - Reference< beans::XPropertySet > xSeriesProp(elemHeader.m_xDataSeries, uno::UNO_QUERY); + auto const& elemHeader = aHeaders[i]; + auto spHeader = std::make_shared<impl::SeriesHeader>( m_pColumnsWin, m_pColorsWin, i ); Color nColor; - if( xSeriesProp.is() && - ( xSeriesProp->getPropertyValue( "Color" ) >>= nColor )) + if( elemHeader.m_xDataSeries.is() && + ( elemHeader.m_xDataSeries->getPropertyValue( u"Color"_ustr ) >>= nColor )) spHeader->SetColor( nColor ); spHeader->SetChartType( elemHeader.m_xChartType, elemHeader.m_bSwapXAndYAxis ); spHeader->SetSeriesName( - DataSeriesHelper::getDataSeriesLabel( - elemHeader.m_xDataSeries, - (elemHeader.m_xChartType.is() ? + elemHeader.m_xDataSeries->getLabelForRole( + elemHeader.m_xChartType.is() ? elemHeader.m_xChartType->getRoleOfSequenceForSeriesLabel() : - OUString( "values-y")))); + u"values-y"_ustr)); spHeader->SetRange( elemHeader.m_nStartColumn + 1, elemHeader.m_nEndColumn + 1 ); spHeader->SetGetFocusHdl( aFocusLink ); spHeader->SetEditChangedHdl( aSeriesHeaderChangedLink ); @@ -1365,18 +1355,17 @@ IMPL_LINK( DataBrowser, SeriesHeaderGotFocus, impl::SeriesHeaderEdit&, rEdit, vo IMPL_LINK( DataBrowser, SeriesHeaderChanged, impl::SeriesHeaderEdit&, rEdit, void ) { - Reference< chart2::XDataSeries > xSeries( - m_apDataBrowserModel->getDataSeriesByColumn( rEdit.getStartColumn() - 1 )); - Reference< chart2::data::XDataSource > xSource( xSeries, uno::UNO_QUERY ); - if( !xSource.is()) + rtl::Reference< DataSeries > xSeries = + m_apDataBrowserModel->getDataSeriesByColumn( rEdit.getStartColumn() - 1 ); + if( !xSeries.is()) return; - Reference< chart2::XChartType > xChartType( + rtl::Reference< ChartType > xChartType( m_apDataBrowserModel->getHeaderForSeries( xSeries ).m_xChartType ); if( xChartType.is()) { - Reference< chart2::data::XLabeledDataSequence > xLabeledSeq( - DataSeriesHelper::getDataSequenceByRole( xSource, xChartType->getRoleOfSequenceForSeriesLabel())); + uno::Reference< chart2::data::XLabeledDataSequence > xLabeledSeq = + DataSeriesHelper::getDataSequenceByRole( xSeries, xChartType->getRoleOfSequenceForSeriesLabel()); if( xLabeledSeq.is()) { Reference< container::XIndexReplace > xIndexReplace( xLabeledSeq->getLabel(), uno::UNO_QUERY ); |