office-gobmx/cui/source/options/optchart.cxx
Noel Grandin ecf6f6f256 loplugin:ostr in cui
Change-Id: I593eb3c02768423fc8cea8d93c112655860228d9
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167258
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-05-07 12:20:06 +02:00

300 lines
9.9 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership. The ASF licenses this file to you under the Apache
* License, Version 2.0 (the "License"); you may not use this file
* except in compliance with the License. You may obtain a copy of
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
#include "optchart.hxx"
#include <svx/SvxColorValueSet.hxx>
#include <vcl/virdev.hxx>
#include <vcl/weld.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <svx/svxids.hrc>
#include <osl/diagnose.h>
#include <officecfg/Office/Common.hxx>
#include <officecfg/Office/Chart.hxx>
void SvxDefaultColorOptPage::InsertColorEntry(const XColorEntry& rEntry, sal_Int32 nPos)
{
const Color& rColor = rEntry.GetColor();
const OUString& rStr = rEntry.GetName();
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
Size aImageSize = rStyleSettings.GetListBoxPreviewDefaultPixelSize();
ScopedVclPtrInstance<VirtualDevice> xDevice;
xDevice->SetOutputSize(aImageSize);
const ::tools::Rectangle aRect(Point(0, 0), aImageSize);
xDevice->SetFillColor(rColor);
xDevice->SetLineColor(rStyleSettings.GetDisableColor());
xDevice->DrawRect(aRect);
m_xLbChartColors->insert(nullptr, nPos, &rStr, nullptr,
nullptr, xDevice.get(), false, nullptr);
if (nPos == -1)
aColorList.push_back( rColor );
else
{
ImpColorList::iterator it = aColorList.begin();
std::advance( it, nPos );
aColorList.insert( it, rColor );
}
}
void SvxDefaultColorOptPage::RemoveColorEntry(sal_Int32 nPos)
{
m_xLbChartColors->remove(nPos);
ImpColorList::iterator it = aColorList.begin();
std::advance(it, nPos);
aColorList.erase(it);
}
void SvxDefaultColorOptPage::ClearColorEntries()
{
aColorList.clear();
m_xLbChartColors->clear();
}
void SvxDefaultColorOptPage::ModifyColorEntry(const XColorEntry& rEntry, sal_Int32 nPos)
{
RemoveColorEntry(nPos);
InsertColorEntry(rEntry, nPos);
}
void SvxDefaultColorOptPage::FillBoxChartColorLB()
{
if (!m_SvxChartColorTableUniquePtr)
return;
m_xLbChartColors->freeze();
ClearColorEntries();
const tools::Long nCount(m_SvxChartColorTableUniquePtr->size());
for (tools::Long i = 0; i < nCount; ++i)
InsertColorEntry((*m_SvxChartColorTableUniquePtr)[i]);
m_xLbChartColors->thaw();
}
SvxDefaultColorOptPage::SvxDefaultColorOptPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rInAttrs)
: SfxTabPage(pPage, pController, u"cui/ui/optchartcolorspage.ui"_ustr, u"OptChartColorsPage"_ustr, &rInAttrs)
, m_xLbChartColors(m_xBuilder->weld_tree_view(u"colors"_ustr))
, m_xLbPaletteSelector(m_xBuilder->weld_combo_box(u"paletteselector"_ustr))
, m_xPBDefault(m_xBuilder->weld_button(u"default"_ustr))
, m_xPBAdd(m_xBuilder->weld_button(u"add"_ustr))
, m_xPBRemove(m_xBuilder->weld_button(u"delete"_ustr))
, m_xValSetColorBox(new SvxColorValueSet(m_xBuilder->weld_scrolled_window(u"tablewin"_ustr, true)))
, m_xValSetColorBoxWin(new weld::CustomWeld(*m_xBuilder, u"table"_ustr, *m_xValSetColorBox))
{
m_xLbChartColors->set_size_request(-1, m_xLbChartColors->get_height_rows(16));
if (officecfg::Office::Chart::DefaultColor::Series::isReadOnly())
{
m_xPBDefault->set_sensitive(false);
m_xPBAdd->set_sensitive(false);
m_xPBRemove->set_sensitive(false);
m_xValSetColorBoxWin->set_sensitive(false);
}
m_xPBDefault->connect_clicked( LINK( this, SvxDefaultColorOptPage, ResetToDefaults ) );
m_xPBAdd->connect_clicked( LINK( this, SvxDefaultColorOptPage, AddChartColor ) );
m_xPBRemove->connect_clicked( LINK( this, SvxDefaultColorOptPage, RemoveChartColor ) );
m_xValSetColorBox->SetSelectHdl( LINK( this, SvxDefaultColorOptPage, BoxClickedHdl ) );
m_xLbPaletteSelector->connect_changed( LINK( this, SvxDefaultColorOptPage, SelectPaletteLbHdl ) );
m_xValSetColorBox->SetStyle( m_xValSetColorBox->GetStyle()
| WB_ITEMBORDER | WB_NAMEFIELD | WB_VSCROLL );
if ( const SvxChartColorTableItem* pEditOptionsItem = rInAttrs.GetItemIfSet( SID_SCH_EDITOPTIONS, false ) )
{
m_SvxChartColorTableUniquePtr = std::make_unique<SvxChartColorTable>(
pEditOptionsItem->GetColorList());
}
else
{
m_SvxChartColorTableUniquePtr = std::make_unique<SvxChartColorTable>();
m_SvxChartColorTableUniquePtr->useDefault();
SvxChartOptions::SetDefaultColors(*m_SvxChartColorTableUniquePtr);
}
Construct();
}
SvxDefaultColorOptPage::~SvxDefaultColorOptPage()
{
m_xValSetColorBoxWin.reset();
m_xValSetColorBox.reset();
}
void SvxDefaultColorOptPage::Construct()
{
FillBoxChartColorLB();
FillPaletteLB();
m_xLbChartColors->select( 0 );
}
std::unique_ptr<SfxTabPage> SvxDefaultColorOptPage::Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrs )
{
return std::make_unique<SvxDefaultColorOptPage>( pPage, pController, *rAttrs );
}
OUString SvxDefaultColorOptPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"label20"_ustr, u"label1"_ustr };
for (const auto& label : labels)
{
if (const auto& pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString buttons[] = { u"add"_ustr, u"delete"_ustr, u"default"_ustr };
for (const auto& btn : buttons)
{
if (const auto& pString = m_xBuilder->weld_button(btn))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SvxDefaultColorOptPage::FillItemSet( SfxItemSet* rOutAttrs )
{
if( m_SvxChartColorTableUniquePtr )
{
rOutAttrs->Put(SvxChartColorTableItem(SID_SCH_EDITOPTIONS, *m_SvxChartColorTableUniquePtr));
}
return true;
}
void SvxDefaultColorOptPage::Reset( const SfxItemSet* )
{
m_xLbChartColors->select( 0 );
}
void SvxDefaultColorOptPage::FillPaletteLB()
{
m_xLbPaletteSelector->clear();
std::vector<OUString> aPaletteList = aPaletteManager.GetPaletteList();
for (auto const& palette : aPaletteList)
m_xLbPaletteSelector->append_text(palette);
OUString aPaletteName(officecfg::Office::Common::UserColors::PaletteName::get());
m_xLbPaletteSelector->set_active_text(aPaletteName);
if (m_xLbPaletteSelector->get_active() != -1)
SelectPaletteLbHdl( *m_xLbPaletteSelector );
}
void SvxDefaultColorOptPage::SaveChartOptions()
{
if (m_SvxChartColorTableUniquePtr)
SvxChartOptions::SetDefaultColors(*m_SvxChartColorTableUniquePtr);
}
// event handlers
// ResetToDefaults
IMPL_LINK_NOARG(SvxDefaultColorOptPage, ResetToDefaults, weld::Button&, void)
{
if( m_SvxChartColorTableUniquePtr )
{
m_SvxChartColorTableUniquePtr->useDefault();
FillBoxChartColorLB();
m_xLbChartColors->grab_focus();
m_xLbChartColors->select( 0 );
m_xPBRemove->set_sensitive(true);
}
}
// AddChartColor
IMPL_LINK_NOARG(SvxDefaultColorOptPage, AddChartColor, weld::Button&, void)
{
if( m_SvxChartColorTableUniquePtr )
{
Color const black( 0x00, 0x00, 0x00 );
m_SvxChartColorTableUniquePtr->append(
XColorEntry(black, SvxChartColorTable::getDefaultName(m_SvxChartColorTableUniquePtr->size())));
FillBoxChartColorLB();
m_xLbChartColors->grab_focus();
m_xLbChartColors->select(m_SvxChartColorTableUniquePtr->size() - 1);
m_xPBRemove->set_sensitive(true);
}
}
// RemoveChartColor
IMPL_LINK_NOARG( SvxDefaultColorOptPage, RemoveChartColor, weld::Button&, void )
{
sal_Int32 nIndex = m_xLbChartColors->get_selected_index();
if (nIndex == -1)
return;
if( !m_SvxChartColorTableUniquePtr )
return;
OSL_ENSURE(m_SvxChartColorTableUniquePtr->size() > 1, "don't delete the last chart color");
std::unique_ptr<weld::Builder> xBuilder(Application::CreateBuilder(GetFrameWeld(), u"cui/ui/querydeletechartcolordialog.ui"_ustr));
std::unique_ptr<weld::MessageDialog> xQuery(xBuilder->weld_message_dialog(u"QueryDeleteChartColorDialog"_ustr));
if (RET_YES != xQuery->run())
return;
m_SvxChartColorTableUniquePtr->remove(nIndex);
FillBoxChartColorLB();
m_xLbChartColors->grab_focus();
if (nIndex == m_xLbChartColors->n_children() && m_xLbChartColors->n_children() > 0)
m_xLbChartColors->select(m_SvxChartColorTableUniquePtr->size() - 1);
else if (m_xLbChartColors->n_children() > 0)
m_xLbChartColors->select( nIndex );
else
m_xPBRemove->set_sensitive(true);
}
IMPL_LINK_NOARG( SvxDefaultColorOptPage, SelectPaletteLbHdl, weld::ComboBox&, void)
{
sal_Int32 nPos = m_xLbPaletteSelector->get_active();
aPaletteManager.SetPalette( nPos );
aPaletteManager.ReloadColorSet( *m_xValSetColorBox );
m_xValSetColorBox->Resize();
}
IMPL_LINK_NOARG(SvxDefaultColorOptPage, BoxClickedHdl, ValueSet*, void)
{
sal_Int32 nIdx = m_xLbChartColors->get_selected_index();
if (nIdx != -1)
{
const XColorEntry aEntry(m_xValSetColorBox->GetItemColor(m_xValSetColorBox->GetSelectedItemId()), m_xLbChartColors->get_selected_text());
ModifyColorEntry(aEntry, nIdx);
m_SvxChartColorTableUniquePtr->replace(nIdx, aEntry);
m_xLbChartColors->select(nIdx); // reselect entry
}
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */