1
0
Fork 0
libreoffice/sw/source/ui/config/optpage.cxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

2957 lines
125 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 <sal/config.h>
#include <utility>
#include <optpage.hxx>
#include <doc.hxx>
#include <hintids.hxx>
#include <cmdid.h>
#include <fmtcol.hxx>
#include <charatr.hxx>
#include <swtypes.hxx>
#include <view.hxx>
#include <docsh.hxx>
#include <IDocumentDeviceAccess.hxx>
#include <IDocumentSettingAccess.hxx>
#include <swmodule.hxx>
#include <wrtsh.hxx>
#include <cfgitems.hxx>
#include <poolfmt.hxx>
#include <uiitems.hxx>
#include <printdata.hxx>
#include <modcfg.hxx>
#include <crstate.hxx>
#include <viewopt.hxx>
#include <globals.hrc>
#include <strings.hrc>
#include <swwrtshitem.hxx>
#include <editeng/fhgtitem.hxx>
#include <editeng/fontitem.hxx>
#include <editeng/langitem.hxx>
#include <editeng/svxenum.hxx>
#include <officecfg/Office/Common.hxx>
#include <officecfg/Office/Writer.hxx>
#include <officecfg/Office/WriterWeb.hxx>
#include <sal/macros.h>
#include <sfx2/dialoghelper.hxx>
#include <sfx2/printer.hxx>
#include <sfx2/bindings.hxx>
#include <sfx2/viewfrm.hxx>
#include <svl/ctloptions.hxx>
#include <svl/eitem.hxx>
#include <svl/cjkoptions.hxx>
#include <svtools/ctrltool.hxx>
#include <svtools/unitconv.hxx>
#include <sfx2/htmlmode.hxx>
#include <vcl/settings.hxx>
#include <vcl/svapp.hxx>
#include <optload.hxx>
using namespace ::com::sun::star;
namespace {
void drawRect(vcl::RenderContext& rRenderContext, const tools::Rectangle &rRect, const Color &rFillColor, const Color &rLineColor)
{
rRenderContext.SetFillColor(rFillColor);
rRenderContext.SetLineColor(rLineColor);
rRenderContext.DrawRect(rRect);
}
}
// Tools->Options->Writer->View
// Tools->Options->Writer/Web->View
SwContentOptPage::SwContentOptPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rCoreSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/viewoptionspage.ui"_ustr, u"ViewOptionsPage"_ustr, &rCoreSet)
, m_xCrossCB(m_xBuilder->weld_check_button(u"helplines"_ustr))
, m_xCrossImg(m_xBuilder->weld_widget(u"lockhelplines"_ustr))
, m_xHMetric(m_xBuilder->weld_combo_box(u"hrulercombobox"_ustr))
, m_xHMetricImg(m_xBuilder->weld_widget(u"lockhruler"_ustr))
, m_xVRulerCBox(m_xBuilder->weld_check_button(u"vruler"_ustr))
, m_xVRulerImg(m_xBuilder->weld_widget(u"lockvruler"_ustr))
, m_xVRulerRightCBox(m_xBuilder->weld_check_button(u"vrulerright"_ustr))
, m_xVRulerRightImg(m_xBuilder->weld_widget(u"lockvrulerright"_ustr))
, m_xVMetric(m_xBuilder->weld_combo_box(u"vrulercombobox"_ustr))
, m_xSmoothCBox(m_xBuilder->weld_check_button(u"smoothscroll"_ustr))
, m_xSmoothImg(m_xBuilder->weld_widget(u"locksmoothscroll"_ustr))
, m_xGrfCB(m_xBuilder->weld_check_button(u"graphics"_ustr))
, m_xGrfImg(m_xBuilder->weld_widget(u"lockgraphics"_ustr))
, m_xTableCB(m_xBuilder->weld_check_button(u"tables"_ustr))
, m_xTableImg(m_xBuilder->weld_widget(u"locktables"_ustr))
, m_xDrwCB(m_xBuilder->weld_check_button(u"drawings"_ustr))
, m_xDrwImg(m_xBuilder->weld_widget(u"lockdrawings"_ustr))
, m_xPostItCB(m_xBuilder->weld_check_button(u"comments"_ustr))
, m_xSettingsFrame(m_xBuilder->weld_frame(u"settingsframe"_ustr))
, m_xSettingsLabel(m_xBuilder->weld_label(u"settingslabel"_ustr))
, m_xMetricLabel(m_xBuilder->weld_label(u"measureunitlabel"_ustr))
, m_xMetricLB(m_xBuilder->weld_combo_box(u"measureunit"_ustr))
, m_xMetricImg(m_xBuilder->weld_widget(u"lockmeasureunit"_ustr))
, m_xShowInlineTooltips(m_xBuilder->weld_check_button(u"changestooltip"_ustr))
, m_xShowInlineTooltipsImg(m_xBuilder->weld_widget(u"lockchangestooltip"_ustr))
, m_xShowOutlineContentVisibilityButton(m_xBuilder->weld_check_button(u"outlinecontentvisibilitybutton"_ustr))
, m_xShowOutlineContentVImg(m_xBuilder->weld_widget(u"lockoutlinecontentvisibility"_ustr))
, m_xTreatSubOutlineLevelsAsContent(m_xBuilder->weld_check_button(u"suboutlinelevelsascontent"_ustr))
, m_xTreatSubOutlineLevelsImg(m_xBuilder->weld_widget(u"locksuboutlinelevels"_ustr))
, m_xShowChangesInMargin(m_xBuilder->weld_check_button(u"changesinmargin"_ustr))
, m_xShowChangesInMarginImg(m_xBuilder->weld_widget(u"lockchangesinmargin"_ustr))
, m_xFieldHiddenCB(m_xBuilder->weld_check_button(u"hiddentextfield"_ustr))
, m_xFieldHiddenImg(m_xBuilder->weld_widget(u"lockhiddentextfield"_ustr))
, m_xFieldHiddenParaCB(m_xBuilder->weld_check_button(u"hiddenparafield"_ustr))
, m_xFieldHiddenParaImg(m_xBuilder->weld_widget(u"lockhiddenparafield"_ustr))
, m_xZoomFrame(m_xBuilder->weld_frame(u"zoomframe"_ustr))
, m_xZoomLatestRB(m_xBuilder->weld_radio_button(u"zoomlatest"_ustr))
, m_xZoomPreferredRB(m_xBuilder->weld_radio_button(u"zoompreferred"_ustr))
, m_xZoomOptimalRB(m_xBuilder->weld_radio_button(u"zoomoptimal"_ustr))
, m_xZoomWidthAndHeightRB(m_xBuilder->weld_radio_button(u"zoomfitwandh"_ustr))
, m_xZoomWidthRB(m_xBuilder->weld_radio_button(u"zoomfitw"_ustr))
, m_xZoom100RB(m_xBuilder->weld_radio_button(u"zoom100pc"_ustr))
, m_xZoomCustomRB(m_xBuilder->weld_radio_button(u"zoomcustom"_ustr))
, m_xZoomValue(m_xBuilder->weld_metric_spin_button(u"zoomvalue"_ustr, FieldUnit::PERCENT))
{
m_xShowOutlineContentVisibilityButton->connect_toggled(LINK(this, SwContentOptPage, ShowOutlineContentVisibilityButtonHdl));
/* This part is visible only with Writer/Web->View dialogue. */
const SfxUInt16Item* pItem = rCoreSet.GetItemIfSet(SID_HTML_MODE, false );
if (!pItem || !(pItem->GetValue() & HTMLMODE_ON))
{
m_xSettingsFrame->hide();
m_xSettingsLabel->hide();
m_xMetricLabel->hide();
m_xMetricLB->hide();
Link<weld::Toggleable&, void> aZoomLatestLink = LINK(this, SwContentOptPage, ZoomLatestHdl);
m_xZoomLatestRB->connect_toggled(aZoomLatestLink);
m_xZoomPreferredRB->connect_toggled(aZoomLatestLink);
Link<weld::Toggleable&, void> aZoomLink = LINK(this, SwContentOptPage, ZoomHdl);
m_xZoomOptimalRB->connect_toggled(aZoomLink);
m_xZoomWidthAndHeightRB->connect_toggled(aZoomLink);
m_xZoomWidthRB->connect_toggled(aZoomLink);
m_xZoom100RB->connect_toggled(aZoomLink);
m_xZoomCustomRB->connect_toggled(aZoomLink);
m_xZoomValue->set_range(MINZOOM, MAXZOOM, FieldUnit::PERCENT);
}
else
{
m_xZoomFrame->hide();
m_xZoomLatestRB->hide();
m_xZoomPreferredRB->hide();
m_xZoomOptimalRB->hide();
m_xZoomWidthAndHeightRB->hide();
m_xZoomWidthRB->hide();
m_xZoom100RB->hide();
m_xZoomCustomRB->hide();
m_xZoomValue->hide();
}
if(!SvtCJKOptions::IsVerticalTextEnabled() )
m_xVRulerRightCBox->hide();
m_xVRulerCBox->connect_toggled(LINK(this, SwContentOptPage, VertRulerHdl ));
for (size_t i = 0; i < SwFieldUnitTable::Count(); ++i)
{
const OUString sMetric = SwFieldUnitTable::GetString(i);
FieldUnit eFUnit = SwFieldUnitTable::GetValue(i);
switch ( eFUnit )
{
case FieldUnit::MM:
case FieldUnit::CM:
case FieldUnit::POINT:
case FieldUnit::PICA:
case FieldUnit::INCH:
case FieldUnit::CHAR: // add two units , 'character' and 'line' , their ticks are not fixed
case FieldUnit::LINE:
{
// only use these metrics
// a horizontal ruler has not the 'line' unit
// there isn't 'line' unit in HTML format
if (eFUnit != FieldUnit::LINE)
{
m_xMetricLB->append(OUString::number(static_cast<sal_uInt32>(eFUnit)), sMetric);
m_xHMetric->append(OUString::number(static_cast<sal_uInt32>(eFUnit)), sMetric);
}
// a vertical ruler has not the 'character' unit
if (eFUnit != FieldUnit::CHAR)
{
m_xVMetric->append(OUString::number(static_cast<sal_uInt32>(eFUnit)), sMetric);
}
break;
}
default:;//prevent warning
}
}
}
SwContentOptPage::~SwContentOptPage()
{
}
std::unique_ptr<SfxTabPage> SwContentOptPage::Create( weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet* rAttrSet)
{
return std::make_unique<SwContentOptPage>(pPage, pController, *rAttrSet);
}
static void lcl_SelectMetricLB(weld::ComboBox& rMetric, TypedWhichId<SfxUInt16Item> nSID, const SfxItemSet& rSet)
{
const SfxPoolItem* pItem;
if( rSet.GetItemState( nSID, false, &pItem ) >= SfxItemState::DEFAULT )
{
FieldUnit eFieldUnit = static_cast<FieldUnit>(static_cast<const SfxUInt16Item*>(pItem)->GetValue());
for (sal_Int32 i = 0, nEntryCount = rMetric.get_count(); i < nEntryCount; ++i)
{
if (rMetric.get_id(i).toUInt32() == static_cast<sal_uInt32>(eFieldUnit))
{
rMetric.set_active(i);
break;
}
}
}
rMetric.save_value();
}
void SwContentOptPage::Reset(const SfxItemSet* rSet)
{
bool bReadOnly = false;
bool bWebOptionsPage = m_xSettingsFrame->is_visible();
const SwElemItem* pElemAttr = rSet->GetItemIfSet( FN_PARAM_ELEM , false );
if(pElemAttr)
{
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Content::Display::Table::isReadOnly() :
officecfg::Office::WriterWeb::Content::Display::Table::isReadOnly();
m_xTableCB->set_active(pElemAttr->m_bTable);
m_xTableCB->set_sensitive(!bReadOnly);
m_xTableImg->set_visible(bReadOnly);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Content::Display::GraphicObject::isReadOnly() :
officecfg::Office::WriterWeb::Content::Display::GraphicObject::isReadOnly();
m_xGrfCB->set_active(pElemAttr->m_bGraphic);
m_xGrfCB->set_sensitive(!bReadOnly);
m_xGrfImg->set_visible(bReadOnly);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Content::Display::DrawingControl::isReadOnly() :
officecfg::Office::WriterWeb::Content::Display::DrawingControl::isReadOnly();
m_xDrwCB->set_active(pElemAttr->m_bDrawing);
m_xDrwCB->set_sensitive(!bReadOnly);
m_xDrwImg->set_visible(bReadOnly);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Content::Display::Note::isReadOnly() :
officecfg::Office::WriterWeb::Content::Display::Note::isReadOnly();
m_xPostItCB->set_active(pElemAttr->m_bNotes);
m_xPostItCB->set_sensitive(!bReadOnly);
m_xPostItCB->set_visible(pElemAttr->m_bNotes);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Layout::Line::Guide::isReadOnly() :
officecfg::Office::WriterWeb::Layout::Line::Guide::isReadOnly();
m_xCrossCB->set_active(pElemAttr->m_bCrosshair);
m_xCrossCB->set_sensitive(!bReadOnly);
m_xCrossImg->set_visible(bReadOnly);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Layout::Window::VerticalRuler::isReadOnly() :
officecfg::Office::WriterWeb::Layout::Window::VerticalRuler::isReadOnly();
m_xVRulerCBox->set_active(pElemAttr->m_bVertRuler);
m_xVRulerCBox->set_sensitive(!bReadOnly);
m_xVRulerImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Layout::Window::IsVerticalRulerRight::isReadOnly();
m_xVRulerRightCBox->set_active(pElemAttr->m_bVertRulerRight);
m_xVRulerRightCBox->set_sensitive(pElemAttr->m_bVertRuler && !bReadOnly);
m_xVRulerRightImg->set_visible(bReadOnly);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Layout::Window::SmoothScroll::isReadOnly() :
officecfg::Office::WriterWeb::Layout::Window::SmoothScroll::isReadOnly();
m_xSmoothCBox->set_active(pElemAttr->m_bSmoothScroll);
m_xSmoothCBox->set_sensitive(!bReadOnly);
m_xSmoothImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::ShowInlineTooltips::isReadOnly();
m_xShowInlineTooltips->set_active(pElemAttr->m_bShowInlineTooltips);
m_xShowInlineTooltips->set_sensitive(!bReadOnly);
m_xShowInlineTooltipsImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::ShowOutlineContentVisibilityButton::isReadOnly();
m_xShowOutlineContentVisibilityButton->set_active(pElemAttr->m_bShowOutlineContentVisibilityButton);
m_xShowOutlineContentVisibilityButton->set_sensitive(!bReadOnly);
m_xShowOutlineContentVImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::TreatSubOutlineLevelsAsContent::isReadOnly();
m_xTreatSubOutlineLevelsAsContent->set_active(pElemAttr->m_bTreatSubOutlineLevelsAsContent);
m_xTreatSubOutlineLevelsAsContent->set_sensitive(pElemAttr->m_bShowOutlineContentVisibilityButton && !bReadOnly);
m_xTreatSubOutlineLevelsImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::ShowChangesInMargin::isReadOnly();
m_xShowChangesInMargin->set_active(pElemAttr->m_bShowChangesInMargin);
m_xShowChangesInMargin->set_sensitive(!bReadOnly);
m_xShowChangesInMarginImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::NonprintingCharacter::HiddenText::isReadOnly();
m_xFieldHiddenCB->set_active( pElemAttr->m_bFieldHiddenText );
m_xFieldHiddenCB->set_sensitive(!bReadOnly);
m_xFieldHiddenImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::NonprintingCharacter::HiddenParagraph::isReadOnly();
m_xFieldHiddenParaCB->set_active( pElemAttr->m_bShowHiddenPara );
m_xFieldHiddenParaCB->set_sensitive(!bReadOnly);
m_xFieldHiddenParaImg->set_visible(bReadOnly);
if (!bWebOptionsPage)
{
m_xZoomLatestRB->set_active(pElemAttr->IsDefaultZoom());
m_xZoomPreferredRB->set_active(!pElemAttr->IsDefaultZoom());
switch (pElemAttr->GetDefaultZoomType())
{
case SvxZoomType::OPTIMAL: m_xZoomOptimalRB->set_active(true); break;
case SvxZoomType::WHOLEPAGE: m_xZoomWidthAndHeightRB->set_active(true); break;
case SvxZoomType::PAGEWIDTH: m_xZoomWidthRB->set_active(true); break;
case SvxZoomType::PERCENT:
m_xZoom100RB->set_active(pElemAttr->GetDefaultZoomValue() == 100);
m_xZoomCustomRB->set_active(pElemAttr->GetDefaultZoomValue() != 100);
break;
default:
break;
}
m_xZoomValue->set_value(pElemAttr->GetDefaultZoomValue(), FieldUnit::PERCENT);
ZoomLatestHdl(*m_xZoomLatestRB);
}
}
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Layout::Window::HorizontalRulerUnit::isReadOnly() :
officecfg::Office::WriterWeb::Layout::Window::HorizontalRulerUnit::isReadOnly();
m_xHMetric->set_sensitive(!bReadOnly);
m_xHMetricImg->set_visible(bReadOnly);
bReadOnly = !bWebOptionsPage ? officecfg::Office::Writer::Layout::Window::VerticalRulerUnit::isReadOnly() :
officecfg::Office::WriterWeb::Layout::Window::VerticalRulerUnit::isReadOnly();
m_xVMetric->set_sensitive(!bReadOnly);
m_xMetricLB->set_active(-1);
if (bWebOptionsPage)
{
bReadOnly = officecfg::Office::WriterWeb::Layout::Other::MeasureUnit::isReadOnly();
m_xMetricLB->set_sensitive(!bReadOnly);
m_xMetricImg->set_visible(bReadOnly);
}
lcl_SelectMetricLB(*m_xMetricLB, SID_ATTR_METRIC, *rSet);
lcl_SelectMetricLB(*m_xHMetric, FN_HSCROLL_METRIC, *rSet);
lcl_SelectMetricLB(*m_xVMetric, FN_VSCROLL_METRIC, *rSet);
}
OUString SwContentOptPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[]
= { u"guideslabel"_ustr, u"displaylabel"_ustr, u"displayfl1"_ustr, u"changeslabel"_ustr, u"label3"_ustr,
u"hruler"_ustr, u"settingslabel"_ustr, u"measureunitlabel"_ustr, u"outlinelabel"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString checkButton[] = { u"helplines"_ustr,
u"graphics"_ustr,
u"tables"_ustr,
u"drawings"_ustr,
u"comments"_ustr,
u"resolvedcomments"_ustr,
u"hiddentextfield"_ustr,
u"hiddenparafield"_ustr,
u"changesinmargin"_ustr,
u"changestooltip"_ustr,
u"vruler"_ustr,
u"vrulerright"_ustr,
u"smoothscroll"_ustr,
u"outlinecontentvisibilitybutton"_ustr,
u"suboutlinelevelsascontent"_ustr };
for (const auto& check : checkButton)
{
if (const auto pString = m_xBuilder->weld_check_button(check))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SwContentOptPage::FillItemSet(SfxItemSet* rSet)
{
const SwElemItem* pOldAttr = GetOldItem(GetItemSet(), FN_PARAM_ELEM);
SwElemItem aElem;
aElem.m_bTable = m_xTableCB->get_active();
aElem.m_bGraphic = m_xGrfCB->get_active();
aElem.m_bDrawing = m_xDrwCB->get_active();
aElem.m_bNotes = m_xPostItCB->get_active();
aElem.m_bCrosshair = m_xCrossCB->get_active();
aElem.m_bVertRuler = m_xVRulerCBox->get_active();
aElem.m_bVertRulerRight = m_xVRulerRightCBox->get_active();
aElem.m_bSmoothScroll = m_xSmoothCBox->get_active();
aElem.m_bShowInlineTooltips = m_xShowInlineTooltips->get_active();
aElem.m_bShowOutlineContentVisibilityButton = m_xShowOutlineContentVisibilityButton->get_active();
aElem.m_bTreatSubOutlineLevelsAsContent = m_xTreatSubOutlineLevelsAsContent->get_active();
aElem.m_bShowChangesInMargin = m_xShowChangesInMargin->get_active();
aElem.m_bFieldHiddenText = m_xFieldHiddenCB->get_active();
aElem.m_bShowHiddenPara = m_xFieldHiddenParaCB->get_active();
if (m_xZoomLatestRB->is_visible())
{
aElem.SetDefaultZoom(m_xZoomLatestRB->get_active());
if (m_xZoomOptimalRB->get_active())
aElem.SetDefaultZoomType(SvxZoomType::OPTIMAL);
else if (m_xZoomWidthAndHeightRB->get_active())
aElem.SetDefaultZoomType(SvxZoomType::WHOLEPAGE);
else if (m_xZoomWidthRB->get_active())
aElem.SetDefaultZoomType(SvxZoomType::PAGEWIDTH);
else if (m_xZoom100RB->get_active())
{
aElem.SetDefaultZoomType(SvxZoomType::PERCENT);
aElem.SetDefaultZoomValue(100);
}
else
{
aElem.SetDefaultZoomType(SvxZoomType::PERCENT);
aElem.SetDefaultZoomValue(m_xZoomValue->get_value(FieldUnit::PERCENT));
}
}
bool bRet = !pOldAttr || aElem != *pOldAttr;
if(bRet)
bRet = nullptr != rSet->Put(aElem);
sal_Int32 nMPos = m_xMetricLB->get_active();
sal_Int32 nGlobalMetricPos = nMPos;
if ( m_xMetricLB->get_value_changed_from_saved() )
{
const sal_uInt16 nFieldUnit = m_xMetricLB->get_id(nMPos).toUInt32();
rSet->Put( SfxUInt16Item( SID_ATTR_METRIC, nFieldUnit ) );
bRet = true;
}
nMPos = m_xHMetric->get_active();
if ( m_xHMetric->get_value_changed_from_saved() || nMPos != nGlobalMetricPos )
{
const sal_uInt16 nFieldUnit = m_xHMetric->get_id(nMPos).toUInt32();
rSet->Put( SfxUInt16Item( FN_HSCROLL_METRIC, nFieldUnit ) );
bRet = true;
}
nMPos = m_xVMetric->get_active();
if ( m_xVMetric->get_value_changed_from_saved() || nMPos != nGlobalMetricPos )
{
const sal_uInt16 nFieldUnit = m_xVMetric->get_id(nMPos).toUInt32();
rSet->Put( SfxUInt16Item( FN_VSCROLL_METRIC, nFieldUnit ) );
bRet = true;
}
return bRet;
}
IMPL_LINK(SwContentOptPage, VertRulerHdl, weld::Toggleable&, rBox, void)
{
m_xVRulerRightCBox->set_sensitive(rBox.get_sensitive() && rBox.get_active() &&
!officecfg::Office::Writer::Layout::Window::IsVerticalRulerRight::isReadOnly());
}
IMPL_LINK(SwContentOptPage, ShowOutlineContentVisibilityButtonHdl, weld::Toggleable&, rBox, void)
{
m_xTreatSubOutlineLevelsAsContent->set_sensitive(rBox.get_active());
}
IMPL_LINK_NOARG(SwContentOptPage, ZoomLatestHdl, weld::Toggleable&, void)
{
bool bZoomPreferred = m_xZoomPreferredRB->get_active();
m_xZoomOptimalRB->set_sensitive(bZoomPreferred);
m_xZoomWidthAndHeightRB->set_sensitive(bZoomPreferred);
m_xZoomWidthRB->set_sensitive(bZoomPreferred);
m_xZoom100RB->set_sensitive(bZoomPreferred);
m_xZoomCustomRB->set_sensitive(bZoomPreferred);
m_xZoomValue->set_sensitive(bZoomPreferred);
ZoomHdl(*m_xZoomOptimalRB);
}
IMPL_LINK_NOARG(SwContentOptPage, ZoomHdl, weld::Toggleable&, void)
{
if (m_xZoomCustomRB->get_active() && m_xZoomCustomRB->get_sensitive())
{
m_xZoomValue->set_sensitive(true);
m_xZoomValue->grab_focus();
}
else
{
m_xZoomValue->set_sensitive(false);
}
}
// TabPage Printer additional settings
SwAddPrinterTabPage::SwAddPrinterTabPage(weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet& rCoreSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/printoptionspage.ui"_ustr, u"PrintOptionsPage"_ustr, &rCoreSet)
, m_sNone(SwResId(SW_STR_NONE))
, m_bAttrModified(false)
, m_bPreview(false)
, m_bHTMLMode(false)
, m_xGrfCB(m_xBuilder->weld_check_button(u"graphics"_ustr))
, m_xGrfImg(m_xBuilder->weld_widget(u"lockgraphics"_ustr))
, m_xCtrlFieldCB(m_xBuilder->weld_check_button(u"formcontrols"_ustr))
, m_xCtrlFieldImg(m_xBuilder->weld_widget(u"lockformcontrols"_ustr))
, m_xBackgroundCB(m_xBuilder->weld_check_button(u"background"_ustr))
, m_xBackgroundImg(m_xBuilder->weld_widget(u"lockbackground"_ustr))
, m_xBlackFontCB(m_xBuilder->weld_check_button(u"inblack"_ustr))
, m_xBlackFontImg(m_xBuilder->weld_widget(u"lockinblack"_ustr))
, m_xPrintHiddenTextCB(m_xBuilder->weld_check_button(u"hiddentext"_ustr))
, m_xPrintHiddenTextImg(m_xBuilder->weld_widget(u"lockhiddentext"_ustr))
, m_xPrintTextPlaceholderCB(m_xBuilder->weld_check_button(u"textplaceholder"_ustr))
, m_xPrintTextPlaceholderImg(m_xBuilder->weld_widget(u"locktextplaceholder"_ustr))
, m_xPagesFrame(m_xBuilder->weld_widget(u"pagesframe"_ustr))
, m_xLeftPageCB(m_xBuilder->weld_check_button(u"leftpages"_ustr))
, m_xLeftPageImg(m_xBuilder->weld_widget(u"lockleftpages"_ustr))
, m_xRightPageCB(m_xBuilder->weld_check_button(u"rightpages"_ustr))
, m_xRightPageImg(m_xBuilder->weld_widget(u"lockrightpages"_ustr))
, m_xProspectCB(m_xBuilder->weld_check_button(u"brochure"_ustr))
, m_xProspectImg(m_xBuilder->weld_widget(u"lockbrochure"_ustr))
, m_xProspectCB_RTL(m_xBuilder->weld_check_button(u"rtl"_ustr))
, m_xProspectImg_RTL(m_xBuilder->weld_widget(u"lockrtl"_ustr))
, m_xCommentsFrame(m_xBuilder->weld_widget(u"commentsframe"_ustr))
, m_xNoRB(m_xBuilder->weld_radio_button(u"none"_ustr))
, m_xOnlyRB(m_xBuilder->weld_radio_button(u"only"_ustr))
, m_xEndRB(m_xBuilder->weld_radio_button(u"end"_ustr))
, m_xEndPageRB(m_xBuilder->weld_radio_button(u"endpage"_ustr))
, m_xInMarginsRB(m_xBuilder->weld_radio_button(u"inmargins"_ustr))
, m_xMarginsImg(m_xBuilder->weld_widget(u"lockcomments"_ustr))
, m_xPrintEmptyPagesCB(m_xBuilder->weld_check_button(u"blankpages"_ustr))
, m_xPrintEmptyPagesImg(m_xBuilder->weld_widget(u"lockblankpages"_ustr))
, m_xPaperFromSetupCB(m_xBuilder->weld_check_button(u"papertray"_ustr))
, m_xPaperFromSetupImg(m_xBuilder->weld_widget(u"lockpapertray"_ustr))
, m_xFaxLB(m_xBuilder->weld_combo_box(u"fax"_ustr))
, m_xFaxImg(m_xBuilder->weld_widget(u"lockfax"_ustr))
{
Link<weld::Toggleable&,void> aLk = LINK( this, SwAddPrinterTabPage, AutoClickHdl);
m_xGrfCB->connect_toggled( aLk );
m_xRightPageCB->connect_toggled( aLk );
m_xLeftPageCB->connect_toggled( aLk );
m_xCtrlFieldCB->connect_toggled( aLk );
m_xBackgroundCB->connect_toggled( aLk );
m_xBlackFontCB->connect_toggled( aLk );
m_xPrintHiddenTextCB->connect_toggled( aLk );
m_xPrintTextPlaceholderCB->connect_toggled( aLk );
m_xProspectCB->connect_toggled( aLk );
m_xProspectCB_RTL->connect_toggled( aLk );
m_xPaperFromSetupCB->connect_toggled( aLk );
m_xPrintEmptyPagesCB->connect_toggled( aLk );
m_xEndPageRB->connect_toggled( aLk );
m_xInMarginsRB->connect_toggled( aLk );
m_xEndRB->connect_toggled( aLk );
m_xOnlyRB->connect_toggled( aLk );
m_xNoRB->connect_toggled( aLk );
m_xFaxLB->connect_changed( LINK( this, SwAddPrinterTabPage, SelectHdl ) );
const SfxUInt16Item* pItem = rCoreSet.GetItemIfSet(SID_HTML_MODE, false );
if(pItem && pItem->GetValue() & HTMLMODE_ON)
{
m_bHTMLMode = true;
m_xLeftPageCB->hide();
m_xRightPageCB->hide();
m_xPrintHiddenTextCB->hide();
m_xPrintTextPlaceholderCB->hide();
m_xPrintEmptyPagesCB->hide();
}
m_xProspectCB_RTL->set_sensitive(false);
SvtCTLOptions aCTLOptions;
m_xProspectCB_RTL->set_visible(SvtCTLOptions::IsCTLFontEnabled());
}
SwAddPrinterTabPage::~SwAddPrinterTabPage()
{
}
void SwAddPrinterTabPage::SetPreview(bool bPrev)
{
m_bPreview = bPrev;
m_xCommentsFrame->set_sensitive(!m_bPreview);
m_xPagesFrame->set_sensitive(!m_bPreview);
}
std::unique_ptr<SfxTabPage> SwAddPrinterTabPage::Create( weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet* rAttrSet )
{
return std::make_unique<SwAddPrinterTabPage>(pPage, pController, *rAttrSet);
}
OUString SwAddPrinterTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"label2"_ustr, u"label10"_ustr, u"label1"_ustr, u"label5"_ustr, u"4"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString checkButton[]
= { u"graphics"_ustr, u"formcontrols"_ustr, u"background"_ustr, u"inblack"_ustr, u"hiddentext"_ustr, u"textplaceholder"_ustr,
u"leftpages"_ustr, u"rightpages"_ustr, u"brochure"_ustr, u"rtl"_ustr, u"blankpages"_ustr, u"papertray"_ustr };
for (const auto& check : checkButton)
{
if (const auto pString = m_xBuilder->weld_check_button(check))
sAllStrings += pString->get_label() + " ";
}
OUString radioButton[] = { u"none"_ustr, u"only"_ustr, u"end"_ustr, u"endpage"_ustr, u"inmargins"_ustr };
for (const auto& radio : radioButton)
{
if (const auto pString = m_xBuilder->weld_radio_button(radio))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SwAddPrinterTabPage::FillItemSet( SfxItemSet* rCoreSet )
{
if ( m_bAttrModified )
{
SwAddPrinterItem aAddPrinterAttr;
aAddPrinterAttr.m_bPrintGraphic = m_xGrfCB->get_active();
aAddPrinterAttr.m_bPrintControl = m_xCtrlFieldCB->get_active();
aAddPrinterAttr.m_bPrintPageBackground = m_xBackgroundCB->get_active();
aAddPrinterAttr.m_bPrintBlackFont = m_xBlackFontCB->get_active();
aAddPrinterAttr.m_bPrintHiddenText = m_xPrintHiddenTextCB->get_active();
aAddPrinterAttr.m_bPrintTextPlaceholder = m_xPrintTextPlaceholderCB->get_active();
aAddPrinterAttr.m_bPrintLeftPages = m_xLeftPageCB->get_active();
aAddPrinterAttr.m_bPrintRightPages = m_xRightPageCB->get_active();
aAddPrinterAttr.m_bPrintProspect = m_xProspectCB->get_active();
aAddPrinterAttr.m_bPrintProspectRTL = m_xProspectCB_RTL->get_active();
aAddPrinterAttr.m_bPaperFromSetup = m_xPaperFromSetupCB->get_active();
aAddPrinterAttr.m_bPrintEmptyPages = m_xPrintEmptyPagesCB->get_active();
if (m_xNoRB->get_active()) aAddPrinterAttr.m_nPrintPostIts =
SwPostItMode::NONE;
if (m_xOnlyRB->get_active()) aAddPrinterAttr.m_nPrintPostIts =
SwPostItMode::Only;
if (m_xEndRB->get_active()) aAddPrinterAttr.m_nPrintPostIts =
SwPostItMode::EndDoc;
if (m_xEndPageRB->get_active()) aAddPrinterAttr.m_nPrintPostIts =
SwPostItMode::EndPage;
if (m_xInMarginsRB->get_active()) aAddPrinterAttr.m_nPrintPostIts =
SwPostItMode::InMargins;
const OUString sFax = m_xFaxLB->get_active_text();
aAddPrinterAttr.m_sFaxName = m_sNone == sFax ? OUString() : sFax;
rCoreSet->Put(aAddPrinterAttr);
}
return m_bAttrModified;
}
void SwAddPrinterTabPage::Reset( const SfxItemSet* )
{
const SfxItemSet& rSet = GetItemSet();
bool bReadOnly = false;
if( const SwAddPrinterItem* pAddPrinterAttr = rSet.GetItemIfSet( FN_PARAM_ADDPRINTER , false ) )
{
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Content::Graphic::isReadOnly() :
officecfg::Office::WriterWeb::Print::Content::Graphic::isReadOnly();
m_xGrfCB->set_active(pAddPrinterAttr->m_bPrintGraphic);
m_xGrfCB->set_sensitive(!bReadOnly);
m_xGrfImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Content::Control::isReadOnly() :
officecfg::Office::WriterWeb::Print::Content::Control::isReadOnly();
m_xCtrlFieldCB->set_active( pAddPrinterAttr->m_bPrintControl);
m_xCtrlFieldCB->set_sensitive(!bReadOnly);
m_xCtrlFieldImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Content::Background::isReadOnly() :
officecfg::Office::WriterWeb::Print::Content::Background::isReadOnly();
m_xBackgroundCB->set_active( pAddPrinterAttr->m_bPrintPageBackground);
m_xBackgroundCB->set_sensitive(!bReadOnly);
m_xBackgroundImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Content::PrintBlack::isReadOnly() :
officecfg::Office::WriterWeb::Print::Content::PrintBlack::isReadOnly();
m_xBlackFontCB->set_active( pAddPrinterAttr->m_bPrintBlackFont);
m_xBlackFontCB->set_sensitive(!bReadOnly);
m_xBlackFontImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Print::Content::PrintHiddenText::isReadOnly();
m_xPrintHiddenTextCB->set_active( pAddPrinterAttr->m_bPrintHiddenText);
m_xPrintHiddenTextCB->set_sensitive(!bReadOnly);
m_xPrintHiddenTextImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Print::Content::PrintPlaceholders::isReadOnly();
m_xPrintTextPlaceholderCB->set_active(pAddPrinterAttr->m_bPrintTextPlaceholder);
m_xPrintTextPlaceholderCB->set_sensitive(!bReadOnly);
m_xPrintTextPlaceholderImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Print::Page::LeftPage::isReadOnly();
m_xLeftPageCB->set_active( pAddPrinterAttr->m_bPrintLeftPages);
m_xLeftPageCB->set_sensitive(!bReadOnly);
m_xLeftPageImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Print::Page::RightPage::isReadOnly();
m_xRightPageCB->set_active( pAddPrinterAttr->m_bPrintRightPages);
m_xRightPageCB->set_sensitive(!bReadOnly);
m_xRightPageImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Papertray::FromPrinterSetup::isReadOnly() :
officecfg::Office::WriterWeb::Print::Papertray::FromPrinterSetup::isReadOnly();
m_xPaperFromSetupCB->set_active(pAddPrinterAttr->m_bPaperFromSetup);
m_xPaperFromSetupCB->set_sensitive(!bReadOnly);
m_xPaperFromSetupImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Print::EmptyPages::isReadOnly();
m_xPrintEmptyPagesCB->set_active(pAddPrinterAttr->m_bPrintEmptyPages);
m_xPrintEmptyPagesCB->set_sensitive(!bReadOnly);
m_xPrintEmptyPagesImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Page::Brochure::isReadOnly() :
officecfg::Office::WriterWeb::Print::Page::Brochure::isReadOnly();
m_xProspectCB->set_active( pAddPrinterAttr->m_bPrintProspect);
m_xProspectCB->set_sensitive(!bReadOnly);
m_xProspectImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Page::BrochureRightToLeft::isReadOnly() :
officecfg::Office::WriterWeb::Print::Page::BrochureRightToLeft::isReadOnly();
m_xProspectCB_RTL->set_active( pAddPrinterAttr->m_bPrintProspectRTL);
m_xProspectCB_RTL->set_sensitive(!bReadOnly);
m_xProspectImg_RTL->set_visible(bReadOnly);
m_xNoRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::NONE ) ;
m_xOnlyRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::Only ) ;
m_xEndRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::EndDoc ) ;
m_xEndPageRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::EndPage ) ;
m_xInMarginsRB->set_active(pAddPrinterAttr->m_nPrintPostIts== SwPostItMode::InMargins ) ;
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Content::Note::isReadOnly() :
officecfg::Office::WriterWeb::Print::Content::Note::isReadOnly();
m_xNoRB->set_sensitive(!bReadOnly);
m_xOnlyRB->set_sensitive(!bReadOnly);
m_xEndRB->set_sensitive(!bReadOnly);
m_xEndPageRB->set_sensitive(!bReadOnly);
m_xInMarginsRB->set_sensitive(!bReadOnly);
m_xMarginsImg->set_visible(bReadOnly);
auto nFound = m_xFaxLB->find_text(pAddPrinterAttr->m_sFaxName);
if (nFound != -1)
m_xFaxLB->set_active(nFound);
else if (m_xFaxLB->get_count())
m_xFaxLB->set_active(0);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Output::Fax::isReadOnly() :
officecfg::Office::WriterWeb::Print::Output::Fax::isReadOnly();
m_xFaxLB->set_sensitive(!bReadOnly);
m_xFaxImg->set_visible(bReadOnly);
}
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Print::Page::BrochureRightToLeft::isReadOnly() :
officecfg::Office::WriterWeb::Print::Page::BrochureRightToLeft::isReadOnly();
if (m_xProspectCB->get_active())
{
m_xProspectCB_RTL->set_sensitive(!bReadOnly);
m_xNoRB->set_sensitive( false );
m_xOnlyRB->set_sensitive( false );
m_xEndRB->set_sensitive( false );
m_xEndPageRB->set_sensitive( false );
}
else
m_xProspectCB_RTL->set_sensitive( false );
m_xProspectImg_RTL->set_visible(bReadOnly);
}
IMPL_LINK_NOARG(SwAddPrinterTabPage, AutoClickHdl, weld::Toggleable&, void)
{
m_bAttrModified = true;
bool bIsProspect = m_xProspectCB->get_active();
if (!bIsProspect)
m_xProspectCB_RTL->set_active( false );
m_xProspectCB_RTL->set_sensitive( bIsProspect );
m_xNoRB->set_sensitive( !bIsProspect );
m_xOnlyRB->set_sensitive( !bIsProspect );
m_xEndRB->set_sensitive( !bIsProspect );
m_xEndPageRB->set_sensitive( !bIsProspect );
m_xInMarginsRB->set_sensitive( !bIsProspect );
}
void SwAddPrinterTabPage::SetFax( const std::vector<OUString>& rFaxLst )
{
m_xFaxLB->append_text(m_sNone);
for(const auto & i : rFaxLst)
{
m_xFaxLB->append_text(i);
}
m_xFaxLB->set_active(0);
}
IMPL_LINK_NOARG(SwAddPrinterTabPage, SelectHdl, weld::ComboBox&, void)
{
m_bAttrModified=true;
}
void SwAddPrinterTabPage::PageCreated( const SfxAllItemSet& aSet)
{
const SfxBoolItem* pListItem = aSet.GetItem<SfxBoolItem>(SID_FAX_LIST, false);
const SfxBoolItem* pPreviewItem = aSet.GetItem<SfxBoolItem>(SID_PREVIEWFLAG_TYPE, false);
if (pPreviewItem)
{
SetPreview(pPreviewItem->GetValue());
Reset(&aSet);
}
if (pListItem && pListItem->GetValue())
{
std::vector<OUString> aFaxList;
const std::vector<OUString>& rPrinters = Printer::GetPrinterQueues();
for (const auto & rPrinter : rPrinters)
aFaxList.insert(aFaxList.begin(), rPrinter);
SetFax( aFaxList );
}
}
// Tabpage Standardfonts
SwStdFontTabPage::SwStdFontTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/optfonttabpage.ui"_ustr, u"OptFontTabPage"_ustr, &rSet)
, m_pPrt(nullptr)
, m_pFontConfig(nullptr)
, m_pWrtShell(nullptr)
, m_eLanguage( GetAppLanguage() )
, m_bListDefault(false)
, m_bSetListDefault(true)
, m_bLabelDefault(false)
, m_bSetLabelDefault(true)
, m_bIdxDefault(false)
, m_bSetIdxDefault(true)
, m_bDisposePrinter(false)
, m_nFontGroup(FONT_GROUP_DEFAULT)
, m_sScriptWestern(SwResId(ST_SCRIPT_WESTERN))
, m_sScriptAsian(SwResId(ST_SCRIPT_ASIAN))
, m_sScriptComplex(SwResId(ST_SCRIPT_CTL))
, m_xLabelFT(m_xBuilder->weld_label(u"label1"_ustr))
, m_xStandardBox(m_xBuilder->weld_combo_box(u"standardbox"_ustr))
, m_xStandardBoxImg(m_xBuilder->weld_widget(u"lockstandardbox"_ustr))
, m_xStandardHeightLB(new FontSizeBox(m_xBuilder->weld_combo_box(u"standardheight"_ustr)))
, m_xStandardHeightImg(m_xBuilder->weld_widget(u"lockstandardheight"_ustr))
, m_xTitleBox(m_xBuilder->weld_combo_box(u"titlebox"_ustr))
, m_xTitleBoxImg(m_xBuilder->weld_widget(u"locktitlebox"_ustr))
, m_xTitleHeightLB(new FontSizeBox(m_xBuilder->weld_combo_box(u"titleheight"_ustr)))
, m_xTitleHeightImg(m_xBuilder->weld_widget(u"locktitleheight"_ustr))
, m_xListBox(m_xBuilder->weld_combo_box(u"listbox"_ustr))
, m_xListBoxImg(m_xBuilder->weld_widget(u"locklistbox"_ustr))
, m_xListHeightLB(new FontSizeBox(m_xBuilder->weld_combo_box(u"listheight"_ustr)))
, m_xListHeightImg(m_xBuilder->weld_widget(u"locklistheight"_ustr))
, m_xLabelBox(m_xBuilder->weld_combo_box(u"labelbox"_ustr))
, m_xLabelBoxImg(m_xBuilder->weld_widget(u"locklabelbox"_ustr))
, m_xLabelHeightLB(new FontSizeBox(m_xBuilder->weld_combo_box(u"labelheight"_ustr)))
, m_xLabelHeightImg(m_xBuilder->weld_widget(u"locklabelheight"_ustr))
, m_xIdxBox(m_xBuilder->weld_combo_box(u"idxbox"_ustr))
, m_xIdxBoxImg(m_xBuilder->weld_widget(u"lockidxbox"_ustr))
, m_xIndexHeightLB(new FontSizeBox(m_xBuilder->weld_combo_box(u"indexheight"_ustr)))
, m_xIndexHeightImg(m_xBuilder->weld_widget(u"lockindexheight"_ustr))
, m_xStandardPB(m_xBuilder->weld_button(u"standard"_ustr))
{
m_xStandardBox->make_sorted();
m_xTitleBox->make_sorted();
m_xListBox->make_sorted();
m_xLabelBox->make_sorted();
m_xIdxBox->make_sorted();
m_xStandardPB->connect_clicked(LINK(this, SwStdFontTabPage, StandardHdl));
m_xStandardBox->connect_changed( LINK(this, SwStdFontTabPage, ModifyHdl));
m_xListBox->connect_changed( LINK(this, SwStdFontTabPage, ModifyHdl));
m_xLabelBox->connect_changed( LINK(this, SwStdFontTabPage, ModifyHdl));
m_xIdxBox->connect_changed( LINK(this, SwStdFontTabPage, ModifyHdl));
Link<weld::Widget&,void> aFocusLink = LINK( this, SwStdFontTabPage, LoseFocusHdl);
m_xStandardBox->connect_focus_out( aFocusLink );
m_xTitleBox->connect_focus_out( aFocusLink );
m_xListBox->connect_focus_out( aFocusLink );
m_xLabelBox->connect_focus_out( aFocusLink );
m_xIdxBox->connect_focus_out( aFocusLink );
}
SwStdFontTabPage::~SwStdFontTabPage()
{
m_xIndexHeightLB.reset();
m_xLabelHeightLB.reset();
m_xListHeightLB.reset();
m_xTitleHeightLB.reset();
m_xStandardHeightLB.reset();
m_pFontList.reset();
if (m_bDisposePrinter)
m_pPrt.disposeAndClear();
else
m_pPrt.clear();
}
std::unique_ptr<SfxTabPage> SwStdFontTabPage::Create( weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet* rAttrSet )
{
return std::make_unique<SwStdFontTabPage>(pPage, pController, *rAttrSet);
}
static void lcl_SetColl(SwWrtShell* pWrtShell, sal_uInt16 nType,
SfxPrinter const * pPrt, const OUString& rStyle,
sal_uInt16 nFontWhich)
{
vcl::Font aFont( rStyle, Size( 0, 10 ) );
if( pPrt )
aFont = pPrt->GetFontMetric( aFont );
SwTextFormatColl *pColl = pWrtShell->GetTextCollFromPool(nType);
pColl->SetFormatAttr(SvxFontItem(aFont.GetFamilyType(), aFont.GetFamilyName(),
OUString(), aFont.GetPitch(), aFont.GetCharSet(), nFontWhich));
}
static void lcl_SetColl(SwWrtShell* pWrtShell, sal_uInt16 nType,
sal_Int32 nHeight, sal_uInt16 nFontHeightWhich)
{
float fSize = static_cast<float>(nHeight) / 10;
nHeight = CalcToUnit( fSize, MapUnit::MapTwip );
SwTextFormatColl *pColl = pWrtShell->GetTextCollFromPool(nType);
pColl->SetFormatAttr(SvxFontHeightItem(nHeight, 100, nFontHeightWhich));
}
OUString SwStdFontTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"label1"_ustr, u"font_label"_ustr, u"size_label"_ustr, u"default_label"_ustr,
u"heading_label"_ustr, u"list_label"_ustr, u"caption_label"_ustr, u"index_label"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
sAllStrings += m_xStandardPB->get_label() + " ";
return sAllStrings.replaceAll("_", "");
}
bool SwStdFontTabPage::FillItemSet( SfxItemSet* )
{
SwModule::get()->GetModuleConfig()->SetDefaultFontInCurrDocOnly(false);
const OUString sStandard = m_xStandardBox->get_active_text();
const OUString sTitle = m_xTitleBox->get_active_text();
const OUString sList = m_xListBox->get_active_text();
const OUString sLabel = m_xLabelBox->get_active_text();
const OUString sIdx = m_xIdxBox->get_active_text();
bool bStandardHeightChanged = m_xStandardHeightLB->get_value_changed_from_saved();
bool bTitleHeightChanged = m_xTitleHeightLB->get_value_changed_from_saved();
bool bListHeightChanged = m_xListHeightLB->get_value_changed_from_saved();
bool bLabelHeightChanged = m_xLabelHeightLB->get_value_changed_from_saved();
bool bIndexHeightChanged = m_xIndexHeightLB->get_value_changed_from_saved();
m_pFontConfig->SetFontStandard(sStandard, m_nFontGroup);
m_pFontConfig->SetFontOutline(sTitle, m_nFontGroup);
m_pFontConfig->SetFontList(sList, m_nFontGroup);
m_pFontConfig->SetFontCaption(sLabel, m_nFontGroup);
m_pFontConfig->SetFontIndex(sIdx, m_nFontGroup);
if(bStandardHeightChanged)
{
float fSize = static_cast<float>(m_xStandardHeightLB->get_value()) / 10;
m_pFontConfig->SetFontHeight( CalcToUnit( fSize, MapUnit::MapTwip ), FONT_STANDARD, m_nFontGroup );
}
if(bTitleHeightChanged)
{
float fSize = static_cast<float>(m_xTitleHeightLB->get_value()) / 10;
m_pFontConfig->SetFontHeight( CalcToUnit( fSize, MapUnit::MapTwip ), FONT_OUTLINE, m_nFontGroup );
}
if(bListHeightChanged)
{
float fSize = static_cast<float>(m_xListHeightLB->get_value()) / 10;
m_pFontConfig->SetFontHeight( CalcToUnit( fSize, MapUnit::MapTwip ), FONT_LIST, m_nFontGroup );
}
if(bLabelHeightChanged)
{
float fSize = static_cast<float>(m_xLabelHeightLB->get_value()) / 10;
m_pFontConfig->SetFontHeight( CalcToUnit( fSize, MapUnit::MapTwip ), FONT_CAPTION, m_nFontGroup );
}
if(bIndexHeightChanged)
{
float fSize = static_cast<float>(m_xIndexHeightLB->get_value()) / 10;
m_pFontConfig->SetFontHeight( CalcToUnit( fSize, MapUnit::MapTwip ), FONT_INDEX, m_nFontGroup );
}
if(m_pWrtShell)
{
m_pWrtShell->StartAllAction();
SfxPrinter* pPrinter = m_pWrtShell->getIDocumentDeviceAccess().getPrinter( false );
bool bMod = false;
const sal_uInt16 nFontWhich =
m_nFontGroup == FONT_GROUP_DEFAULT ? RES_CHRATR_FONT :
FONT_GROUP_CJK == m_nFontGroup ? RES_CHRATR_CJK_FONT : RES_CHRATR_CTL_FONT;
const sal_uInt16 nFontHeightWhich =
m_nFontGroup == FONT_GROUP_DEFAULT ? RES_CHRATR_FONTSIZE :
FONT_GROUP_CJK == m_nFontGroup ? RES_CHRATR_CJK_FONTSIZE : RES_CHRATR_CTL_FONTSIZE;
if(sStandard != m_sShellStd)
{
vcl::Font aFont( sStandard, Size( 0, 10 ) );
if( pPrinter )
aFont = pPrinter->GetFontMetric( aFont );
m_pWrtShell->SetDefault(SvxFontItem(aFont.GetFamilyType(), aFont.GetFamilyName(),
OUString(), aFont.GetPitch(), aFont.GetCharSet(), nFontWhich));
SwTextFormatColl *pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_STANDARD);
pColl->ResetFormatAttr(nFontWhich);
bMod = true;
}
if(bStandardHeightChanged)
{
float fSize = static_cast<float>(m_xStandardHeightLB->get_value()) / 10;
m_pWrtShell->SetDefault(SvxFontHeightItem( CalcToUnit( fSize, MapUnit::MapTwip ), 100, nFontHeightWhich ) );
SwTextFormatColl *pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_STANDARD);
pColl->ResetFormatAttr(nFontHeightWhich);
bMod = true;
}
if(sTitle != m_sShellTitle )
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_HEADLINE_BASE, pPrinter, sTitle, nFontWhich);
bMod = true;
}
if(bTitleHeightChanged)
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_HEADLINE_BASE,
sal::static_int_cast< sal_uInt16, sal_Int64 >(m_xTitleHeightLB->get_value()), nFontHeightWhich);
bMod = true;
}
if(sList != m_sShellList && (!m_bListDefault || !m_bSetListDefault ))
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_NUMBER_BULLET_BASE, pPrinter, sList, nFontWhich);
bMod = true;
}
if(bListHeightChanged)
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_NUMBER_BULLET_BASE,
sal::static_int_cast< sal_uInt16, sal_Int64 >(m_xListHeightLB->get_value()), nFontHeightWhich);
bMod = true;
}
if(sLabel != m_sShellLabel && (!m_bLabelDefault || !m_bSetLabelDefault))
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_LABEL, pPrinter, sLabel, nFontWhich);
bMod = true;
}
if(bLabelHeightChanged)
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_LABEL,
sal::static_int_cast< sal_uInt16, sal_Int64 >(m_xLabelHeightLB->get_value()), nFontHeightWhich);
bMod = true;
}
if(sIdx != m_sShellIndex && (!m_bIdxDefault || !m_bSetIdxDefault))
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_REGISTER_BASE, pPrinter, sIdx, nFontWhich);
bMod = true;
}
if(bIndexHeightChanged)
{
lcl_SetColl(m_pWrtShell, RES_POOLCOLL_REGISTER_BASE,
sal::static_int_cast< sal_uInt16, sal_Int64 >(m_xIndexHeightLB->get_value()), nFontHeightWhich);
bMod = true;
}
if ( bMod )
m_pWrtShell->SetModified();
m_pWrtShell->EndAllAction();
}
return false;
}
void SwStdFontTabPage::Reset( const SfxItemSet* rSet)
{
const TypedWhichId<SvxLanguageItem> nLangSlot = m_nFontGroup == FONT_GROUP_DEFAULT ? SID_ATTR_LANGUAGE :
FONT_GROUP_CJK == m_nFontGroup ? SID_ATTR_CHAR_CJK_LANGUAGE : SID_ATTR_CHAR_CTL_LANGUAGE;
if( const SvxLanguageItem* pLang = rSet->GetItemIfSet(nLangSlot, false) )
m_eLanguage = pLang->GetValue();
OUString sToReplace = m_sScriptWestern;
if(FONT_GROUP_CJK == m_nFontGroup )
sToReplace = m_sScriptAsian;
else if(FONT_GROUP_CTL == m_nFontGroup )
sToReplace = m_sScriptComplex;
m_xLabelFT->set_label(m_xLabelFT->get_label().replaceFirst("%1", sToReplace));
if (m_bDisposePrinter)
{
m_pPrt.disposeAndClear();
m_bDisposePrinter = false;
}
if(const SwPtrItem* pItem = rSet->GetItemIfSet(FN_PARAM_PRINTER, false))
{
m_pPrt = static_cast<SfxPrinter*>(pItem->GetValue());
}
else
{
auto pPrinterSet = std::make_unique<SfxItemSetFixed
<SID_PRINTER_NOTFOUND_WARN, SID_PRINTER_NOTFOUND_WARN,
SID_PRINTER_CHANGESTODOC, SID_PRINTER_CHANGESTODOC>>( *rSet->GetPool() );
m_pPrt = VclPtr<SfxPrinter>::Create(std::move(pPrinterSet));
m_bDisposePrinter = true;
}
m_pFontList.reset(new FontList( m_pPrt ));
// #i94536# prevent duplication of font entries when 'reset' button is pressed
if( !m_xStandardBox->get_count() )
{
// get the set of distinct available family names
std::set< OUString > aFontNames;
int nFontNames = m_pPrt->GetFontFaceCollectionCount();
for( int i = 0; i < nFontNames; i++ )
{
FontMetric aFontMetric( m_pPrt->GetFontMetricFromCollection( i ) );
aFontNames.insert( aFontMetric.GetFamilyName() );
}
// insert to listboxes
for( const auto& rFontName : aFontNames )
{
m_xStandardBox->append_text( rFontName );
m_xTitleBox->append_text( rFontName );
m_xListBox->append_text( rFontName );
m_xLabelBox->append_text( rFontName );
m_xIdxBox->append_text( rFontName );
}
}
if(const SwPtrItem* pItem = rSet->GetItemIfSet(FN_PARAM_STDFONTS, false))
{
m_pFontConfig = static_cast<SwStdFontConfig*>(pItem->GetValue());
}
if(const SwPtrItem* pItem = rSet->GetItemIfSet(FN_PARAM_WRTSHELL, false))
{
m_pWrtShell = static_cast<SwWrtShell*>(pItem->GetValue());
}
OUString sStdBackup;
OUString sOutBackup;
OUString sListBackup;
OUString sCapBackup;
OUString sIdxBackup;
sal_Int32 nStandardHeight = -1;
sal_Int32 nTitleHeight = -1;
sal_Int32 nListHeight = -1;
sal_Int32 nLabelHeight = -1;
sal_Int32 nIndexHeight = -1;
if(!m_pWrtShell)
{
sStdBackup = m_pFontConfig->GetFontStandard(m_nFontGroup);
sOutBackup = m_pFontConfig->GetFontOutline(m_nFontGroup);
sListBackup= m_pFontConfig->GetFontList(m_nFontGroup);
sCapBackup = m_pFontConfig->GetFontCaption(m_nFontGroup);
sIdxBackup = m_pFontConfig->GetFontIndex(m_nFontGroup);
nStandardHeight = m_pFontConfig->GetFontHeight( FONT_STANDARD, m_nFontGroup, m_eLanguage );
nTitleHeight = m_pFontConfig->GetFontHeight( FONT_OUTLINE , m_nFontGroup, m_eLanguage );
nListHeight = m_pFontConfig->GetFontHeight( FONT_LIST , m_nFontGroup, m_eLanguage );
nLabelHeight = m_pFontConfig->GetFontHeight( FONT_CAPTION , m_nFontGroup, m_eLanguage );
nIndexHeight = m_pFontConfig->GetFontHeight( FONT_INDEX , m_nFontGroup, m_eLanguage );
if( nStandardHeight <= 0)
nStandardHeight = SwStdFontConfig::GetDefaultHeightFor( FONT_STANDARD + m_nFontGroup * FONT_PER_GROUP, m_eLanguage);
if( nTitleHeight <= 0)
nTitleHeight = SwStdFontConfig::GetDefaultHeightFor( FONT_OUTLINE + m_nFontGroup * FONT_PER_GROUP, m_eLanguage);
if( nListHeight <= 0)
nListHeight = SwStdFontConfig::GetDefaultHeightFor( FONT_LIST + m_nFontGroup * FONT_PER_GROUP, m_eLanguage);
if( nLabelHeight <= 0)
nLabelHeight = SwStdFontConfig::GetDefaultHeightFor( FONT_CAPTION + m_nFontGroup * FONT_PER_GROUP, m_eLanguage);
if( nIndexHeight <= 0)
nIndexHeight = SwStdFontConfig::GetDefaultHeightFor( FONT_INDEX + m_nFontGroup * FONT_PER_GROUP, m_eLanguage);
}
else
{
SwTextFormatColl *pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_STANDARD);
const SvxFontItem& rFont = !m_nFontGroup ? pColl->GetFont() :
FONT_GROUP_CJK == m_nFontGroup ? pColl->GetCJKFont() : pColl->GetCTLFont();
m_sShellStd = sStdBackup = rFont.GetFamilyName();
const TypedWhichId<SvxFontHeightItem> nFontHeightWhich =
m_nFontGroup == FONT_GROUP_DEFAULT ? RES_CHRATR_FONTSIZE :
FONT_GROUP_CJK == m_nFontGroup ? RES_CHRATR_CJK_FONTSIZE : RES_CHRATR_CTL_FONTSIZE;
const SvxFontHeightItem& rFontHeightStandard = pColl->GetFormatAttr(nFontHeightWhich);
nStandardHeight = static_cast<sal_Int32>(rFontHeightStandard.GetHeight());
pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_HEADLINE_BASE);
const SvxFontItem& rFontHL = !m_nFontGroup ? pColl->GetFont() :
FONT_GROUP_CJK == m_nFontGroup ? pColl->GetCJKFont() : pColl->GetCTLFont();
m_sShellTitle = sOutBackup = rFontHL.GetFamilyName();
const SvxFontHeightItem& rFontHeightTitle = pColl->GetFormatAttr( nFontHeightWhich );
nTitleHeight = static_cast<sal_Int32>(rFontHeightTitle.GetHeight());
const sal_uInt16 nFontWhich =
m_nFontGroup == FONT_GROUP_DEFAULT ? RES_CHRATR_FONT :
FONT_GROUP_CJK == m_nFontGroup ? RES_CHRATR_CJK_FONT : RES_CHRATR_CTL_FONT;
pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_NUMBER_BULLET_BASE);
const SvxFontItem& rFontLS = !m_nFontGroup ? pColl->GetFont() :
FONT_GROUP_CJK == m_nFontGroup ? pColl->GetCJKFont() : pColl->GetCTLFont();
m_bListDefault = SfxItemState::DEFAULT == pColl->GetAttrSet().GetItemState(nFontWhich, false);
m_sShellList = sListBackup = rFontLS.GetFamilyName();
const SvxFontHeightItem& rFontHeightList = pColl->GetFormatAttr(nFontHeightWhich);
nListHeight = static_cast<sal_Int32>(rFontHeightList.GetHeight());
pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_LABEL);
m_bLabelDefault = SfxItemState::DEFAULT == pColl->GetAttrSet().GetItemState(nFontWhich, false);
const SvxFontItem& rFontCP = !m_nFontGroup ? pColl->GetFont() :
FONT_GROUP_CJK == m_nFontGroup ? pColl->GetCJKFont() : pColl->GetCTLFont();
m_sShellLabel = sCapBackup = rFontCP.GetFamilyName();
const SvxFontHeightItem& rFontHeightLabel = pColl->GetFormatAttr(nFontHeightWhich);
nLabelHeight = static_cast<sal_Int32>(rFontHeightLabel.GetHeight());
pColl = m_pWrtShell->GetTextCollFromPool(RES_POOLCOLL_REGISTER_BASE);
m_bIdxDefault = SfxItemState::DEFAULT == pColl->GetAttrSet().GetItemState(nFontWhich, false);
const SvxFontItem& rFontIDX = !m_nFontGroup ? pColl->GetFont() :
FONT_GROUP_CJK == m_nFontGroup ? pColl->GetCJKFont() : pColl->GetCTLFont();
m_sShellIndex = sIdxBackup = rFontIDX.GetFamilyName();
const SvxFontHeightItem& rFontHeightIndex = pColl->GetFormatAttr(nFontHeightWhich);
nIndexHeight = static_cast<sal_Int32>(rFontHeightIndex.GetHeight());
}
m_xStandardBox->set_entry_text(sStdBackup );
m_xTitleBox->set_entry_text(sOutBackup );
m_xListBox->set_entry_text(sListBackup);
m_xLabelBox->set_entry_text(sCapBackup );
m_xIdxBox->set_entry_text(sIdxBackup );
m_xStandardHeightLB->Fill( m_pFontList.get() );
m_xTitleHeightLB->Fill( m_pFontList.get() );
m_xListHeightLB->Fill( m_pFontList.get() );
m_xLabelHeightLB->Fill( m_pFontList.get() );
m_xIndexHeightLB->Fill( m_pFontList.get() );
m_xStandardHeightLB->set_value( CalcToPoint( nStandardHeight, MapUnit::MapTwip, 10 ) );
m_xTitleHeightLB->set_value( CalcToPoint( nTitleHeight , MapUnit::MapTwip, 10 ) );
m_xListHeightLB->set_value( CalcToPoint( nListHeight , MapUnit::MapTwip, 10 ) );
m_xLabelHeightLB->set_value( CalcToPoint( nLabelHeight , MapUnit::MapTwip, 10 ));
m_xIndexHeightLB->set_value( CalcToPoint( nIndexHeight , MapUnit::MapTwip, 10 ));
if (m_nFontGroup == FONT_GROUP_DEFAULT)
{
bool bReadonly = officecfg::Office::Writer::DefaultFont::Standard::isReadOnly();
m_xStandardBox->set_sensitive(!bReadonly);
m_xStandardBoxImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::StandardHeight::isReadOnly();
m_xStandardHeightLB->set_sensitive(!bReadonly);
m_xStandardHeightImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::Heading::isReadOnly();
m_xTitleBox->set_sensitive(!bReadonly);
m_xTitleBoxImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::HeadingHeight::isReadOnly();
m_xTitleHeightLB->set_sensitive(!bReadonly);
m_xTitleHeightImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::List::isReadOnly();
m_xListBox->set_sensitive(!bReadonly);
m_xListBoxImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::ListHeight::isReadOnly();
m_xListHeightLB->set_sensitive(!bReadonly);
m_xListHeightImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::Caption::isReadOnly();
m_xLabelBox->set_sensitive(!bReadonly);
m_xLabelBoxImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::CaptionHeight::isReadOnly();
m_xLabelHeightLB->set_sensitive(!bReadonly);
m_xLabelHeightImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::Index::isReadOnly();
m_xIdxBox->set_sensitive(!bReadonly);
m_xIdxBoxImg->set_visible(bReadonly);
bReadonly = officecfg::Office::Writer::DefaultFont::IndexHeight::isReadOnly();
m_xIndexHeightLB->set_sensitive(!bReadonly);
m_xIndexHeightImg->set_visible(bReadonly);
}
m_xStandardBox->save_value();
m_xTitleBox->save_value();
m_xListBox->save_value();
m_xLabelBox->save_value();
m_xIdxBox->save_value();
m_xStandardHeightLB->save_value();
m_xTitleHeightLB->save_value();
m_xListHeightLB->save_value();
m_xLabelHeightLB->save_value();
m_xIndexHeightLB->save_value();
}
IMPL_LINK_NOARG(SwStdFontTabPage, StandardHdl, weld::Button&, void)
{
sal_uInt8 nFontOffset = m_nFontGroup * FONT_PER_GROUP;
m_xStandardBox->set_entry_text(SwStdFontConfig::GetDefaultFor(FONT_STANDARD + nFontOffset, m_eLanguage));
m_xTitleBox->set_entry_text(SwStdFontConfig::GetDefaultFor(FONT_OUTLINE + nFontOffset, m_eLanguage));
m_xListBox->set_entry_text(SwStdFontConfig::GetDefaultFor(FONT_LIST + nFontOffset, m_eLanguage));
m_xLabelBox->set_entry_text(SwStdFontConfig::GetDefaultFor(FONT_CAPTION + nFontOffset, m_eLanguage));
m_xIdxBox->set_entry_text(SwStdFontConfig::GetDefaultFor(FONT_INDEX + nFontOffset, m_eLanguage));
m_xStandardBox->save_value();
m_xTitleBox->save_value();
m_xListBox->save_value();
m_xLabelBox->save_value();
m_xIdxBox->save_value();
m_xStandardHeightLB->set_value( CalcToPoint(
SwStdFontConfig::GetDefaultHeightFor(FONT_STANDARD + nFontOffset, m_eLanguage),
MapUnit::MapTwip, 10 ));
m_xTitleHeightLB->set_value(CalcToPoint(
SwStdFontConfig::GetDefaultHeightFor(FONT_OUTLINE +
nFontOffset, m_eLanguage), MapUnit::MapTwip, 10 ));
m_xListHeightLB->set_value(CalcToPoint(
SwStdFontConfig::GetDefaultHeightFor(FONT_LIST + nFontOffset, m_eLanguage),
MapUnit::MapTwip, 10 ));
m_xLabelHeightLB->set_value(CalcToPoint(
SwStdFontConfig::GetDefaultHeightFor(FONT_CAPTION + nFontOffset, m_eLanguage),
MapUnit::MapTwip, 10 ));
m_xIndexHeightLB->set_value(CalcToPoint(
SwStdFontConfig::GetDefaultHeightFor(FONT_INDEX + nFontOffset, m_eLanguage),
MapUnit::MapTwip, 10 ));
}
IMPL_LINK( SwStdFontTabPage, ModifyHdl, weld::ComboBox&, rBox, void )
{
if (&rBox == m_xStandardBox.get())
{
const OUString sEntry = rBox.get_active_text();
if(m_bSetListDefault && m_bListDefault)
m_xListBox->set_entry_text(sEntry);
if(m_bSetLabelDefault && m_bLabelDefault)
m_xLabelBox->set_entry_text(sEntry);
if(m_bSetIdxDefault && m_bIdxDefault)
m_xIdxBox->set_entry_text(sEntry);
}
else if (&rBox == m_xListBox.get())
{
m_bSetListDefault = false;
}
else if (&rBox == m_xLabelBox.get())
{
m_bSetLabelDefault = false;
}
else if (&rBox == m_xIdxBox.get())
{
m_bSetIdxDefault = false;
}
}
IMPL_LINK( SwStdFontTabPage, LoseFocusHdl, weld::Widget&, rControl, void )
{
weld::ComboBox& rBox = dynamic_cast<weld::ComboBox&>(rControl);
FontSizeBox* pHeightLB = nullptr;
if (&rBox == m_xStandardBox.get())
{
pHeightLB = m_xStandardHeightLB.get();
}
else if (&rBox == m_xTitleBox.get())
{
pHeightLB = m_xTitleHeightLB.get();
}
else if (&rBox == m_xListBox.get())
{
pHeightLB = m_xListHeightLB.get();
}
else if (&rBox == m_xLabelBox.get())
{
pHeightLB = m_xLabelHeightLB.get();
}
else /*if (&rBox == m_xIndexHeightLB.get())*/
{
pHeightLB = m_xIndexHeightLB.get();
}
pHeightLB->Fill( m_pFontList.get() );
}
void SwStdFontTabPage::PageCreated( const SfxAllItemSet& aSet)
{
const SfxUInt16Item* pFlagItem = aSet.GetItem<SfxUInt16Item>(SID_FONTMODE_TYPE, false);
if (pFlagItem)
m_nFontGroup = sal::static_int_cast< sal_uInt8, sal_uInt16>( pFlagItem->GetValue() );
}
SwTableOptionsTabPage::SwTableOptionsTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/opttablepage.ui"_ustr, u"OptTablePage"_ustr, &rSet)
, m_pWrtShell(nullptr)
, m_bHTMLMode(false)
, m_xHeaderCB(m_xBuilder->weld_check_button(u"header"_ustr))
, m_xHeaderImg(m_xBuilder->weld_widget(u"lockheader"_ustr))
, m_xRepeatHeaderCB(m_xBuilder->weld_check_button(u"repeatheader"_ustr))
, m_xRepeatHeaderImg(m_xBuilder->weld_widget(u"lockrepeatheader"_ustr))
, m_xDontSplitCB(m_xBuilder->weld_check_button(u"dontsplit"_ustr))
, m_xDontSplitImg(m_xBuilder->weld_widget(u"lockdontsplit"_ustr))
, m_xBorderCB(m_xBuilder->weld_check_button(u"border"_ustr))
, m_xBorderImg(m_xBuilder->weld_widget(u"lockborder"_ustr))
, m_xNumFormattingCB(m_xBuilder->weld_check_button(u"numformatting"_ustr))
, m_xNumFormattingImg(m_xBuilder->weld_widget(u"locknumformatting"_ustr))
, m_xNumFormatFormattingCB(m_xBuilder->weld_check_button(u"numfmtformatting"_ustr))
, m_xNumFormatFormattingImg(m_xBuilder->weld_widget(u"locknumfmtformatting"_ustr))
, m_xNumAlignmentCB(m_xBuilder->weld_check_button(u"numalignment"_ustr))
, m_xNumAlignmentImg(m_xBuilder->weld_widget(u"locknumalignment"_ustr))
, m_xRowMoveMF(m_xBuilder->weld_metric_spin_button(u"rowmove"_ustr, FieldUnit::CM))
, m_xRowMoveImg(m_xBuilder->weld_widget(u"lockrowmove"_ustr))
, m_xColMoveMF(m_xBuilder->weld_metric_spin_button(u"colmove"_ustr, FieldUnit::CM))
, m_xColMoveImg(m_xBuilder->weld_widget(u"lockcolmove"_ustr))
, m_xRowInsertMF(m_xBuilder->weld_metric_spin_button(u"rowinsert"_ustr, FieldUnit::CM))
, m_xRowInsertImg(m_xBuilder->weld_widget(u"lockrowinsert"_ustr))
, m_xColInsertMF(m_xBuilder->weld_metric_spin_button(u"colinsert"_ustr, FieldUnit::CM))
, m_xColInsertImg(m_xBuilder->weld_widget(u"lockcolinsert"_ustr))
, m_xFixRB(m_xBuilder->weld_radio_button(u"fix"_ustr))
, m_xFixPropRB(m_xBuilder->weld_radio_button(u"fixprop"_ustr))
, m_xVarRB(m_xBuilder->weld_radio_button(u"var"_ustr))
, m_xBehaviorOfImg(m_xBuilder->weld_widget(u"lockbehaviorof"_ustr))
{
Link<weld::Toggleable&,void> aLnk(LINK(this, SwTableOptionsTabPage, CheckBoxHdl));
m_xNumFormattingCB->connect_toggled(aLnk);
m_xNumFormatFormattingCB->connect_toggled(aLnk);
m_xHeaderCB->connect_toggled(aLnk);
}
SwTableOptionsTabPage::~SwTableOptionsTabPage()
{
}
std::unique_ptr<SfxTabPage> SwTableOptionsTabPage::Create( weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet* rAttrSet )
{
return std::make_unique<SwTableOptionsTabPage>(pPage, pController, *rAttrSet);
}
OUString SwTableOptionsTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[]
= { u"label1"_ustr, u"label3"_ustr, u"label4"_ustr, u"label5"_ustr, u"label6"_ustr, u"label10"_ustr, u"label2"_ustr,
u"label14"_ustr, u"label15"_ustr, u"label16"_ustr, u"label11"_ustr, u"label12"_ustr, u"label13"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString checkButton[] = { u"header"_ustr, u"repeatheader"_ustr, u"dontsplit"_ustr, u"border"_ustr,
u"numformatting"_ustr, u"numfmtformatting"_ustr, u"numalignment"_ustr };
for (const auto& check : checkButton)
{
if (const auto pString = m_xBuilder->weld_check_button(check))
sAllStrings += pString->get_label() + " ";
}
OUString radioButton[] = { u"fix"_ustr, u"fixprop"_ustr, u"var"_ustr };
for (const auto& radio : radioButton)
{
if (const auto pString = m_xBuilder->weld_radio_button(radio))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SwTableOptionsTabPage::FillItemSet( SfxItemSet* )
{
bool bRet = false;
SwModuleOptions* pModOpt = SwModule::get()->GetModuleConfig();
if (m_xRowMoveMF->get_value_changed_from_saved())
pModOpt->SetTableHMove( o3tl::narrowing<sal_uInt16>(m_xRowMoveMF->denormalize( m_xRowMoveMF->get_value(FieldUnit::TWIP))));
if (m_xColMoveMF->get_value_changed_from_saved())
pModOpt->SetTableVMove( o3tl::narrowing<sal_uInt16>(m_xColMoveMF->denormalize( m_xColMoveMF->get_value(FieldUnit::TWIP))));
if (m_xRowInsertMF->get_value_changed_from_saved())
pModOpt->SetTableHInsert(o3tl::narrowing<sal_uInt16>(m_xRowInsertMF->denormalize( m_xRowInsertMF->get_value(FieldUnit::TWIP))));
if (m_xColInsertMF->get_value_changed_from_saved())
pModOpt->SetTableVInsert(o3tl::narrowing<sal_uInt16>(m_xColInsertMF->denormalize( m_xColInsertMF->get_value(FieldUnit::TWIP))));
TableChgMode eMode;
if (m_xFixRB->get_active())
eMode = TableChgMode::FixedWidthChangeAbs;
else if(m_xFixPropRB->get_active())
eMode = TableChgMode::FixedWidthChangeProp;
else
eMode = TableChgMode::VarWidthChangeAbs;
if(eMode != pModOpt->GetTableMode())
{
pModOpt->SetTableMode(eMode);
// the table-keyboard-mode has changed, now the current
// table should know about that too.
if(m_pWrtShell && SelectionType::Table & m_pWrtShell->GetSelectionType())
{
m_pWrtShell->SetTableChgMode(eMode);
static sal_uInt16 aInva[] =
{ FN_TABLE_MODE_FIX,
FN_TABLE_MODE_FIX_PROP,
FN_TABLE_MODE_VARIABLE,
0
};
m_pWrtShell->GetView().GetViewFrame().GetBindings().Invalidate( aInva );
}
bRet = true;
}
SwInsertTableOptions aInsOpts( SwInsertTableFlags::NONE, 0 );
if (m_xHeaderCB->get_active())
aInsOpts.mnInsMode |= SwInsertTableFlags::Headline;
if (m_xRepeatHeaderCB->get_sensitive())
aInsOpts.mnRowsToRepeat = m_xRepeatHeaderCB->get_active() ? 1 : 0;
if (!m_xDontSplitCB->get_active())
aInsOpts.mnInsMode |= SwInsertTableFlags::SplitLayout;
if (m_xBorderCB->get_active())
aInsOpts.mnInsMode |= SwInsertTableFlags::DefaultBorder;
if (m_xHeaderCB->get_state_changed_from_saved() ||
m_xRepeatHeaderCB->get_state_changed_from_saved() ||
m_xDontSplitCB->get_state_changed_from_saved() ||
m_xBorderCB->get_state_changed_from_saved())
{
pModOpt->SetInsTableFlags(m_bHTMLMode, aInsOpts);
}
if (m_xNumFormattingCB->get_state_changed_from_saved())
{
pModOpt->SetInsTableFormatNum(m_bHTMLMode, m_xNumFormattingCB->get_active());
bRet = true;
}
if (m_xNumFormatFormattingCB->get_state_changed_from_saved())
{
pModOpt->SetInsTableChangeNumFormat(m_bHTMLMode, m_xNumFormatFormattingCB->get_active());
bRet = true;
}
if (m_xNumAlignmentCB->get_state_changed_from_saved())
{
pModOpt->SetInsTableAlignNum(m_bHTMLMode, m_xNumAlignmentCB->get_active());
bRet = true;
}
return bRet;
}
void SwTableOptionsTabPage::Reset( const SfxItemSet* rSet)
{
if (const SfxUInt16Item* pItem = rSet->GetItemIfSet(SID_HTML_MODE, false))
{
m_bHTMLMode = 0 != (pItem->GetValue() & HTMLMODE_ON);
}
const SwModuleOptions* pModOpt = SwModule::get()->GetModuleConfig();
if ( rSet->GetItemState( SID_ATTR_METRIC ) >= SfxItemState::DEFAULT )
{
const SfxUInt16Item& rItem = rSet->Get( SID_ATTR_METRIC );
FieldUnit eFieldUnit = static_cast<FieldUnit>(rItem.GetValue());
::SetFieldUnit( *m_xRowMoveMF, eFieldUnit );
::SetFieldUnit( *m_xColMoveMF, eFieldUnit );
::SetFieldUnit( *m_xRowInsertMF, eFieldUnit );
::SetFieldUnit( *m_xColInsertMF, eFieldUnit );
}
bool bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Shift::Row::isReadOnly() :
officecfg::Office::WriterWeb::Table::Shift::Row::isReadOnly();
m_xRowMoveMF->set_value(m_xRowMoveMF->normalize(pModOpt->GetTableHMove()), FieldUnit::TWIP);
m_xRowMoveMF->set_sensitive(!bReadOnly);
m_xRowMoveImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Shift::Column::isReadOnly() :
officecfg::Office::WriterWeb::Table::Shift::Column::isReadOnly();
m_xColMoveMF->set_value(m_xColMoveMF->normalize(pModOpt->GetTableVMove()), FieldUnit::TWIP);
m_xColMoveMF->set_sensitive(!bReadOnly);
m_xColMoveImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Insert::Row::isReadOnly() :
officecfg::Office::WriterWeb::Table::Insert::Row::isReadOnly();
m_xRowInsertMF->set_value(m_xRowInsertMF->normalize(pModOpt->GetTableHInsert()), FieldUnit::TWIP);
m_xRowInsertMF->set_sensitive(!bReadOnly);
m_xRowInsertImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Insert::Column::isReadOnly() :
officecfg::Office::WriterWeb::Table::Insert::Column::isReadOnly();
m_xColInsertMF->set_value(m_xColInsertMF->normalize(pModOpt->GetTableVInsert()), FieldUnit::TWIP);
m_xColInsertMF->set_sensitive(!bReadOnly);
m_xColInsertImg->set_visible(bReadOnly);
switch(pModOpt->GetTableMode())
{
case TableChgMode::FixedWidthChangeAbs: m_xFixRB->set_active(true); break;
case TableChgMode::FixedWidthChangeProp: m_xFixPropRB->set_active(true); break;
case TableChgMode::VarWidthChangeAbs: m_xVarRB->set_active(true); break;
}
// hide certain controls for html
if (m_bHTMLMode)
{
m_xRepeatHeaderCB->hide();
m_xDontSplitCB->hide();
}
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Change::Effect::isReadOnly() :
officecfg::Office::WriterWeb::Table::Change::Effect::isReadOnly();
if (bReadOnly)
{
m_xFixRB->set_sensitive(false);
m_xFixPropRB->set_sensitive(false);
m_xVarRB->set_sensitive(false);
m_xBehaviorOfImg->set_visible(true);
}
SwInsertTableOptions aInsOpts = pModOpt->GetInsTableFlags(m_bHTMLMode);
const SwInsertTableFlags nInsTableFlags = aInsOpts.mnInsMode;
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Insert::Table::Header::isReadOnly() :
officecfg::Office::WriterWeb::Insert::Table::Header::isReadOnly();
m_xHeaderCB->set_active(bool(nInsTableFlags & SwInsertTableFlags::Headline));
m_xHeaderCB->set_sensitive(!bReadOnly);
m_xHeaderImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Insert::Table::RepeatHeader::isReadOnly();
m_xRepeatHeaderCB->set_active((!m_bHTMLMode) && (aInsOpts.mnRowsToRepeat > 0));
m_xRepeatHeaderCB->set_sensitive(!bReadOnly);
m_xRepeatHeaderImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Insert::Table::Split::isReadOnly();
m_xDontSplitCB->set_active(!(nInsTableFlags & SwInsertTableFlags::SplitLayout));
m_xDontSplitCB->set_sensitive(!bReadOnly);
m_xDontSplitImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Insert::Table::Border::isReadOnly() :
officecfg::Office::WriterWeb::Insert::Table::Border::isReadOnly();
m_xBorderCB->set_active(bool(nInsTableFlags & SwInsertTableFlags::DefaultBorder));
m_xBorderCB->set_sensitive(!bReadOnly);
m_xBorderImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Input::NumberRecognition::isReadOnly() :
officecfg::Office::WriterWeb::Table::Input::NumberRecognition::isReadOnly();
m_xNumFormattingCB->set_active(pModOpt->IsInsTableFormatNum(m_bHTMLMode));
m_xNumFormattingCB->set_sensitive(!bReadOnly);
m_xNumFormattingImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Input::NumberFormatRecognition::isReadOnly() :
officecfg::Office::WriterWeb::Table::Input::NumberFormatRecognition::isReadOnly();
m_xNumFormatFormattingCB->set_active(pModOpt->IsInsTableChangeNumFormat(m_bHTMLMode));
m_xNumFormatFormattingCB->set_sensitive(!bReadOnly);
m_xNumFormatFormattingImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Input::Alignment::isReadOnly() :
officecfg::Office::WriterWeb::Table::Input::Alignment::isReadOnly();
m_xNumAlignmentCB->set_active(pModOpt->IsInsTableAlignNum(m_bHTMLMode));
m_xNumAlignmentCB->set_sensitive(!bReadOnly);
m_xNumAlignmentImg->set_visible(bReadOnly);
m_xHeaderCB->save_state();
m_xRepeatHeaderCB->save_state();
m_xDontSplitCB->save_state();
m_xBorderCB->save_state();
m_xNumFormattingCB->save_state();
m_xNumFormatFormattingCB->save_state();
m_xNumAlignmentCB->save_state();
m_xRowMoveMF->save_value();
m_xColMoveMF->save_value();
m_xRowInsertMF->save_value();
m_xColInsertMF->save_value();
CheckBoxHdl(*m_xHeaderCB);
}
IMPL_LINK_NOARG(SwTableOptionsTabPage, CheckBoxHdl, weld::Toggleable&, void)
{
bool bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Input::NumberFormatRecognition::isReadOnly() :
officecfg::Office::WriterWeb::Table::Input::NumberFormatRecognition::isReadOnly();
m_xNumFormatFormattingCB->set_sensitive(m_xNumFormattingCB->get_active() && !bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Table::Input::Alignment::isReadOnly() :
officecfg::Office::WriterWeb::Table::Input::Alignment::isReadOnly();
m_xNumAlignmentCB->set_sensitive(m_xNumFormattingCB->get_active() && !bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Insert::Table::RepeatHeader::isReadOnly() : false;
m_xRepeatHeaderCB->set_sensitive(m_xHeaderCB->get_active() && !bReadOnly);
}
void SwTableOptionsTabPage::PageCreated( const SfxAllItemSet& aSet)
{
const SwWrtShellItem* pWrtSh = aSet.GetItem<SwWrtShellItem>(SID_WRT_SHELL, false);
if (pWrtSh)
m_pWrtShell = pWrtSh->GetValue();
}
SwShdwCursorOptionsTabPage::SwShdwCursorOptionsTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/optformataidspage.ui"_ustr, u"OptFormatAidsPage"_ustr, &rSet)
, m_pWrtShell(nullptr)
, m_bHTMLMode(false)
, m_xParaCB(m_xBuilder->weld_check_button(u"paragraph"_ustr))
, m_xParaImg(m_xBuilder->weld_widget(u"lockparagraph"_ustr))
, m_xSHyphCB(m_xBuilder->weld_check_button(u"hyphens"_ustr))
, m_xSHyphImg(m_xBuilder->weld_widget(u"lockhyphens"_ustr))
, m_xSpacesCB(m_xBuilder->weld_check_button(u"spaces"_ustr))
, m_xSpacesImg(m_xBuilder->weld_widget(u"lockspaces"_ustr))
, m_xHSpacesCB(m_xBuilder->weld_check_button(u"nonbreak"_ustr))
, m_xHSpacesImg(m_xBuilder->weld_widget(u"locknonbreak"_ustr))
, m_xTabCB(m_xBuilder->weld_check_button(u"tabs"_ustr))
, m_xTabImg(m_xBuilder->weld_widget(u"locktabs"_ustr))
, m_xTabLabel(m_xBuilder->weld_label(u"tabs_label"_ustr))
, m_xBreakCB(m_xBuilder->weld_check_button(u"break"_ustr))
, m_xBreakImg(m_xBuilder->weld_widget(u"lockbreak"_ustr))
, m_xCharHiddenCB(m_xBuilder->weld_check_button(u"hiddentext"_ustr))
, m_xCharHiddenImg(m_xBuilder->weld_widget(u"lockhiddentext"_ustr))
, m_xBookmarkCB(m_xBuilder->weld_check_button(u"bookmarks"_ustr))
, m_xBookmarkImg(m_xBuilder->weld_widget(u"lockbookmarks"_ustr))
, m_xBookmarkLabel(m_xBuilder->weld_label(u"bookmarks_label"_ustr))
, m_xTextBoundariesFull(m_xBuilder->weld_radio_button(u"rbTextBoundariesFull"_ustr))
, m_xTextBoundariesCrop(m_xBuilder->weld_radio_button(u"rbTextBoundariesCrop"_ustr))
, m_xDirectCursorFrame(m_xBuilder->weld_frame(u"directcrsrframe"_ustr))
, m_xOnOffCB(m_xBuilder->weld_check_button(u"cursoronoff"_ustr))
, m_xOnOffImg(m_xBuilder->weld_widget(u"lockcursoronoff"_ustr))
, m_xDirectCursorFillMode(m_xBuilder->weld_combo_box(u"cxDirectCursorFillMode"_ustr))
, m_xDirectCursorFillModeImg(m_xBuilder->weld_widget(u"lockfillmode"_ustr))
, m_xCursorProtFrame(m_xBuilder->weld_frame(u"crsrprotframe"_ustr))
, m_xImageFrame(m_xBuilder->weld_frame(u"frmImage"_ustr))
, m_xCursorInProtCB(m_xBuilder->weld_check_button(u"cursorinprot"_ustr))
, m_xCursorInProtImg(m_xBuilder->weld_widget(u"lockcursorinprot"_ustr))
, m_xDefaultAnchorType(m_xBuilder->weld_combo_box(u"cxDefaultAnchor"_ustr))
, m_xDefaultAnchorTypeImg(m_xBuilder->weld_widget(u"lockAnchor"_ustr))
, m_xMathBaselineAlignmentCB(m_xBuilder->weld_check_button(u"mathbaseline"_ustr))
, m_xMathBaselineAlignmentImg(m_xBuilder->weld_widget(u"lockmathbaseline"_ustr))
, m_xFmtAidsAutoComplFrame(m_xBuilder->weld_frame(u"fmtaidsautocompleteframe"_ustr))
, m_xEncloseWithCharactersCB(m_xBuilder->weld_check_button(u"enclosewithcharacters"_ustr))
, m_xEncloseWithCharactersImg(m_xBuilder->weld_widget(u"lockenclosewithcharacters"_ustr))
, m_xTextBoundariesCB(m_xBuilder->weld_check_button(u"cbTextBoundaries"_ustr))
, m_xSectionBoundariesCB(m_xBuilder->weld_check_button(u"cbSectionBoundaries"_ustr))
, m_xTableBoundariesCB(m_xBuilder->weld_check_button(u"cbTableBoundaries"_ustr))
{
SwFillMode eMode = SwFillMode::Tab;
bool bIsOn = false;
if( const SwShadowCursorItem* pItem = rSet.GetItemIfSet( FN_PARAM_SHADOWCURSOR, false ))
{
eMode = pItem->GetMode();
bIsOn = pItem->IsOn();
}
m_xOnOffCB->set_active( bIsOn );
bool bIsEncloseWithCharactersOn = false;
if (const SwFmtAidsAutoComplItem* pItem = rSet.GetItemIfSet(FN_PARAM_FMT_AIDS_AUTOCOMPL, false))
{
bIsEncloseWithCharactersOn = pItem->IsEncloseWithCharactersOn();
}
m_xEncloseWithCharactersCB->set_active(bIsEncloseWithCharactersOn);
m_xTextBoundariesCB->connect_toggled(LINK(this, SwShdwCursorOptionsTabPage, TextBoundariesHdl));
m_xDirectCursorFillMode->set_active( static_cast<int>(eMode) );
const SfxUInt16Item* pHtmlModeItem = rSet.GetItemIfSet(SID_HTML_MODE, false);
if(!pHtmlModeItem || !(pHtmlModeItem->GetValue() & HTMLMODE_ON))
return;
m_bHTMLMode = true;
m_xTabCB->hide();
m_xTabLabel->hide();
m_xCharHiddenCB->hide();
m_xBookmarkCB->hide();
m_xBookmarkLabel->hide();
m_xDirectCursorFrame->hide();
m_xOnOffCB->hide();
m_xDirectCursorFillMode->hide();
m_xCursorProtFrame->hide();
m_xCursorInProtCB->hide();
m_xImageFrame->hide();
m_xFmtAidsAutoComplFrame->hide();
m_xEncloseWithCharactersCB->hide();
}
SwShdwCursorOptionsTabPage::~SwShdwCursorOptionsTabPage()
{
}
IMPL_LINK_NOARG( SwShdwCursorOptionsTabPage, TextBoundariesHdl, weld::Toggleable&, void )
{
const bool bIsTextBoundaries(m_xTextBoundariesCB->get_active());
m_xTextBoundariesFull->set_sensitive(bIsTextBoundaries);
m_xTextBoundariesCrop->set_sensitive(bIsTextBoundaries);
}
std::unique_ptr<SfxTabPage> SwShdwCursorOptionsTabPage::Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rSet )
{
return std::make_unique<SwShdwCursorOptionsTabPage>(pPage, pController, *rSet);
}
void SwShdwCursorOptionsTabPage::PageCreated( const SfxAllItemSet& aSet )
{
const SwWrtShellItem* pWrtSh = aSet.GetItem<SwWrtShellItem>(SID_WRT_SHELL, false);
if (pWrtSh)
m_pWrtShell = pWrtSh->GetValue();
}
OUString SwShdwCursorOptionsTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"layoutopt"_ustr, u"displayfl"_ustr, u"cursoropt"_ustr, u"cursorlabel"_ustr,
u"fillmode"_ustr, u"lbImage"_ustr, u"lbDefaultAnchor"_ustr, u"autocomplete"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString checkButton[]
= { u"mathbaseline"_ustr, u"paragraph"_ustr, u"hyphens"_ustr, u"spaces"_ustr,
u"nonbreak"_ustr, u"tabs"_ustr, u"break"_ustr, u"hiddentext"_ustr,
u"bookmarks"_ustr, u"cursorinprot"_ustr, u"cursoronoff"_ustr, u"enclosewithcharacters"_ustr };
for (const auto& check : checkButton)
{
if (const auto pString = m_xBuilder->weld_check_button(check))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SwShdwCursorOptionsTabPage::FillItemSet( SfxItemSet* rSet )
{
SwShadowCursorItem aOpt;
aOpt.SetOn( m_xOnOffCB->get_active() );
SwFillMode eMode = static_cast<SwFillMode>(m_xDirectCursorFillMode->get_active());
aOpt.SetMode( eMode );
bool bRet = false;
const SwShadowCursorItem* pShadowCursorItem = rSet->GetItemIfSet( FN_PARAM_SHADOWCURSOR, false );
if( !pShadowCursorItem || *pShadowCursorItem != aOpt )
{
rSet->Put( aOpt );
bRet = true;
}
if (m_pWrtShell) {
m_pWrtShell->GetDoc()->getIDocumentSettingAccess().set( DocumentSettingId::MATH_BASELINE_ALIGNMENT,
m_xMathBaselineAlignmentCB->get_active() );
bRet |= m_xMathBaselineAlignmentCB->get_state_changed_from_saved();
}
if( m_xCursorInProtCB->get_state_changed_from_saved())
{
rSet->Put(SfxBoolItem(FN_PARAM_CRSR_IN_PROTECTED, m_xCursorInProtCB->get_active()));
bRet = true;
}
SwFmtAidsAutoComplItem aFmtAidsAutoComplOpt;
aFmtAidsAutoComplOpt.SetEncloseWithCharactersOn(m_xEncloseWithCharactersCB->get_active());
if (const SwFmtAidsAutoComplItem* pFmtAidsAutoComplItem
= rSet->GetItemIfSet(FN_PARAM_FMT_AIDS_AUTOCOMPL, false);
!pFmtAidsAutoComplItem || *pFmtAidsAutoComplItem != aFmtAidsAutoComplOpt)
{
rSet->Put(aFmtAidsAutoComplOpt);
bRet = true;
}
const SwDocDisplayItem* pOldAttr = GetOldItem(GetItemSet(), FN_PARAM_DOCDISP);
SwDocDisplayItem aDisp;
aDisp.m_bParagraphEnd = m_xParaCB->get_active();
aDisp.m_bTab = m_xTabCB->get_active();
aDisp.m_bSpace = m_xSpacesCB->get_active();
aDisp.m_bNonbreakingSpace = m_xHSpacesCB->get_active();
aDisp.m_bSoftHyphen = m_xSHyphCB->get_active();
aDisp.m_bCharHiddenText = m_xCharHiddenCB->get_active();
aDisp.m_bBookmarks = m_xBookmarkCB->get_active();
aDisp.m_bManualBreak = m_xBreakCB->get_active();
aDisp.m_xDefaultAnchor = m_xDefaultAnchorType->get_active();
aDisp.m_bTextBoundariesFull = m_xTextBoundariesFull->get_active();
aDisp.m_bTextBoundaries = m_xTextBoundariesCB->get_active();
aDisp.m_bSectionBoundaries = m_xSectionBoundariesCB->get_active();
aDisp.m_bTableBoundaries = m_xTableBoundariesCB->get_active();
bRet |= (!pOldAttr || aDisp != *pOldAttr);
if(bRet)
bRet = nullptr != rSet->Put(aDisp);
return bRet;
}
void SwShdwCursorOptionsTabPage::Reset( const SfxItemSet* rSet )
{
SwFillMode eMode = SwFillMode::Tab;
bool bIsOn = false;
if( const SwShadowCursorItem* pItem = rSet->GetItemIfSet( FN_PARAM_SHADOWCURSOR, false ))
{
eMode = pItem->GetMode();
bIsOn = pItem->IsOn();
}
bool bReadOnly = officecfg::Office::Writer::Cursor::DirectCursor::UseDirectCursor::isReadOnly();
m_xOnOffCB->set_active( bIsOn );
m_xOnOffCB->set_sensitive(!bReadOnly);
m_xOnOffImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Cursor::DirectCursor::Insert::isReadOnly();
m_xDirectCursorFillMode->set_active( static_cast<int>(eMode) );
m_xDirectCursorFillMode->set_sensitive(!bReadOnly);
m_xDirectCursorFillModeImg->set_visible(bReadOnly);
if (m_pWrtShell) {
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Layout::Other::IsAlignMathObjectsToBaseline::isReadOnly() :
officecfg::Office::WriterWeb::Layout::Other::IsAlignMathObjectsToBaseline::isReadOnly();
m_xMathBaselineAlignmentCB->set_active( m_pWrtShell->GetDoc()->getIDocumentSettingAccess().get( DocumentSettingId::MATH_BASELINE_ALIGNMENT ) );
m_xMathBaselineAlignmentCB->set_sensitive(!bReadOnly);
m_xMathBaselineAlignmentImg->set_visible(bReadOnly);
m_xMathBaselineAlignmentCB->save_state();
} else {
m_xMathBaselineAlignmentCB->hide();
}
bool bIsEncloseWithCharactersOn = false;
if (const SwFmtAidsAutoComplItem* pItem
= rSet->GetItemIfSet(FN_PARAM_FMT_AIDS_AUTOCOMPL, false))
{
bIsEncloseWithCharactersOn = pItem->IsEncloseWithCharactersOn();
}
bReadOnly = officecfg::Office::Writer::FmtAidsAutocomplete::EncloseWithCharacters::isReadOnly();
m_xEncloseWithCharactersCB->set_active(bIsEncloseWithCharactersOn);
m_xEncloseWithCharactersCB->set_sensitive(!bReadOnly);
m_xEncloseWithCharactersImg->set_visible(bReadOnly);
if( const SfxBoolItem* pItem = rSet->GetItemIfSet( FN_PARAM_CRSR_IN_PROTECTED, false ) )
m_xCursorInProtCB->set_active(pItem->GetValue());
bReadOnly = officecfg::Office::Writer::Cursor::Option::ProtectedArea::isReadOnly();
m_xCursorInProtCB->set_sensitive(!bReadOnly);
m_xCursorInProtImg->set_visible(bReadOnly);
m_xCursorInProtCB->save_state();
const SwDocDisplayItem* pDocDisplayAttr = rSet->GetItemIfSet( FN_PARAM_DOCDISP, false );
if(pDocDisplayAttr)
{
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Content::NonprintingCharacter::ParagraphEnd::isReadOnly() :
officecfg::Office::WriterWeb::Content::NonprintingCharacter::ParagraphEnd::isReadOnly();
m_xParaCB->set_active( pDocDisplayAttr->m_bParagraphEnd );
m_xParaCB->set_sensitive(!bReadOnly);
m_xParaImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::NonprintingCharacter::Tab::isReadOnly();
m_xTabCB->set_active( pDocDisplayAttr->m_bTab );
m_xTabCB->set_sensitive(!bReadOnly);
m_xTabImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Content::NonprintingCharacter::Space::isReadOnly() :
officecfg::Office::WriterWeb::Content::NonprintingCharacter::Space::isReadOnly();
m_xSpacesCB->set_active( pDocDisplayAttr->m_bSpace );
m_xSpacesCB->set_sensitive(!bReadOnly);
m_xSpacesImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Content::NonprintingCharacter::ProtectedSpace::isReadOnly() :
officecfg::Office::WriterWeb::Content::NonprintingCharacter::ProtectedSpace::isReadOnly();
m_xHSpacesCB->set_active( pDocDisplayAttr->m_bNonbreakingSpace );
m_xHSpacesCB->set_sensitive(!bReadOnly);
m_xHSpacesImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Content::NonprintingCharacter::OptionalHyphen::isReadOnly() :
officecfg::Office::WriterWeb::Content::NonprintingCharacter::OptionalHyphen::isReadOnly();
m_xSHyphCB->set_active( pDocDisplayAttr->m_bSoftHyphen );
m_xSHyphCB->set_sensitive(!bReadOnly);
m_xSHyphImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::NonprintingCharacter::HiddenCharacter::isReadOnly();
m_xCharHiddenCB->set_active( pDocDisplayAttr->m_bCharHiddenText );
m_xCharHiddenCB->set_sensitive(!bReadOnly);
m_xCharHiddenImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::NonprintingCharacter::Bookmarks::isReadOnly();
m_xBookmarkCB->set_active(pDocDisplayAttr->m_bBookmarks);
m_xBookmarkCB->set_sensitive(!bReadOnly);
m_xBookmarkImg->set_visible(bReadOnly);
bReadOnly = !m_bHTMLMode ? officecfg::Office::Writer::Content::NonprintingCharacter::Break::isReadOnly() :
officecfg::Office::WriterWeb::Content::NonprintingCharacter::Break::isReadOnly();
m_xBreakCB->set_active( pDocDisplayAttr->m_bManualBreak );
m_xBreakCB->set_sensitive(!bReadOnly);
m_xBreakImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::DefaultAnchor::isReadOnly();
m_xDefaultAnchorType->set_active( pDocDisplayAttr->m_xDefaultAnchor );
m_xDefaultAnchorType->set_sensitive(!bReadOnly);
m_xDefaultAnchorTypeImg->set_visible(bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::TextBoundaries::isReadOnly();
m_xTextBoundariesCB->set_active( pDocDisplayAttr->m_bTextBoundaries );
m_xTextBoundariesCB->set_sensitive(!bReadOnly);
const bool bIsTextBoundaries(m_xTextBoundariesCB->get_active());
m_xTextBoundariesFull->set_sensitive(bIsTextBoundaries);
m_xTextBoundariesCrop->set_sensitive(bIsTextBoundaries);
if (pDocDisplayAttr->m_bTextBoundariesFull)
m_xTextBoundariesFull->set_active(true);
else
m_xTextBoundariesCrop->set_active(true);
bReadOnly = officecfg::Office::Writer::Content::Display::SectionBoundaries::isReadOnly();
m_xSectionBoundariesCB->set_active( pDocDisplayAttr->m_bSectionBoundaries );
m_xSectionBoundariesCB->set_sensitive(!bReadOnly);
bReadOnly = officecfg::Office::Writer::Content::Display::TableBoundaries::isReadOnly();
m_xTableBoundariesCB->set_active( pDocDisplayAttr->m_bTableBoundaries );
m_xTableBoundariesCB->set_sensitive(!bReadOnly);
}
}
namespace {
// TabPage for Redlining
struct CharAttr
{
sal_uInt16 nItemId;
sal_uInt16 nAttr;
};
}
// Edit corresponds to Paste-attributes
CharAttr const aRedlineAttr[] =
{
{ SID_ATTR_CHAR_CASEMAP, sal_uInt16(SvxCaseMap::NotMapped) },
{ SID_ATTR_CHAR_WEIGHT, WEIGHT_BOLD },
{ SID_ATTR_CHAR_POSTURE, ITALIC_NORMAL },
{ SID_ATTR_CHAR_UNDERLINE, LINESTYLE_SINGLE },
{ SID_ATTR_CHAR_UNDERLINE, LINESTYLE_DOUBLE },
{ SID_ATTR_CHAR_STRIKEOUT, STRIKEOUT_SINGLE },
{ SID_ATTR_CHAR_CASEMAP, sal_uInt16(SvxCaseMap::Uppercase) },
{ SID_ATTR_CHAR_CASEMAP, sal_uInt16(SvxCaseMap::Lowercase) },
{ SID_ATTR_CHAR_CASEMAP, sal_uInt16(SvxCaseMap::SmallCaps) },
{ SID_ATTR_CHAR_CASEMAP, sal_uInt16(SvxCaseMap::Capitalize) },
{ SID_ATTR_BRUSH, 0 }
};
// Items from aRedlineAttr relevant for InsertAttr: strikethrough is
// not used
static sal_uInt16 aInsertAttrMap[] = { 0, 1, 2, 3, 4, 6, 7, 8, 9, 10 };
// Items from aRedlineAttr relevant for DeleteAttr: underline and
// double underline is not used
static sal_uInt16 aDeletedAttrMap[] = { 0, 1, 2, 5, 6, 7, 8, 9, 10 };
// Items from aRedlineAttr relevant for ChangeAttr: strikethrough is
// not used
static sal_uInt16 aChangedAttrMap[] = { 0, 1, 2, 3, 4, 6, 7, 8, 9, 10 };
// Preview of selection
SwMarkPreview::SwMarkPreview()
: m_aTransCol(COL_TRANSPARENT)
, m_aMarkCol(COL_LIGHTRED)
, m_nMarkPos(0)
{
InitColors();
}
SwMarkPreview::~SwMarkPreview()
{
}
void SwMarkPreview::InitColors()
{
// m_aTransCol and m_aMarkCol are _not_ changed because they are set from outside!
const StyleSettings& rSettings = Application::GetSettings().GetStyleSettings();
m_aBgCol = rSettings.GetWindowColor();
bool bHC = rSettings.GetHighContrastMode();
const Color& rFontColor = SwViewOption::GetCurrentViewOptions().GetFontColor();
m_aLineCol = bHC? rFontColor : COL_BLACK;
m_aShadowCol = bHC? m_aBgCol : rSettings.GetShadowColor();
m_aTextCol = bHC? rFontColor : COL_GRAY;
m_aPrintAreaCol = m_aTextCol;
}
void SwMarkPreview::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle &/*rRect*/)
{
const Size aSz(GetOutputSizePixel());
// Page
m_aPage.SetSize(Size(aSz.Width() - 3, aSz.Height() - 3));
const tools::Long nOutWPix = m_aPage.GetWidth();
const tools::Long nOutHPix = m_aPage.GetHeight();
// PrintArea
const tools::Long nLBorder = 8;
const tools::Long nRBorder = 8;
const tools::Long nTBorder = 4;
const tools::Long nBBorder = 4;
m_aLeftPagePrtArea = tools::Rectangle(Point(nLBorder, nTBorder), Point((nOutWPix - 1) - nRBorder, (nOutHPix - 1) - nBBorder));
const tools::Long nWidth = m_aLeftPagePrtArea.GetWidth();
const tools::Long nCorr = (nWidth & 1) != 0 ? 0 : 1;
m_aLeftPagePrtArea.SetSize(Size(nWidth / 2 - (nLBorder + nRBorder) / 2 + nCorr, m_aLeftPagePrtArea.GetHeight()));
m_aRightPagePrtArea = m_aLeftPagePrtArea;
m_aRightPagePrtArea.Move(m_aLeftPagePrtArea.GetWidth() + nLBorder + nRBorder + 1, 0);
// draw shadow
tools::Rectangle aShadow(m_aPage);
aShadow += Point(3, 3);
drawRect(rRenderContext, aShadow, m_aShadowCol, m_aTransCol);
// draw page
drawRect(rRenderContext, m_aPage, m_aBgCol, m_aLineCol);
// draw separator
tools::Rectangle aPageSeparator(m_aPage);
aPageSeparator.SetSize(Size(2, aPageSeparator.GetHeight()));
aPageSeparator.Move(m_aPage.GetWidth() / 2 - 1, 0);
drawRect(rRenderContext, aPageSeparator, m_aLineCol, m_aTransCol);
PaintPage(rRenderContext, m_aLeftPagePrtArea);
PaintPage(rRenderContext, m_aRightPagePrtArea);
tools::Rectangle aLeftMark(Point(m_aPage.Left() + 2, m_aLeftPagePrtArea.Top() + 4), Size(m_aLeftPagePrtArea.Left() - 4, 2));
tools::Rectangle aRightMark(Point(m_aRightPagePrtArea.Right() + 2, m_aRightPagePrtArea.Bottom() - 6), Size(m_aLeftPagePrtArea.Left() - 4, 2));
switch (m_nMarkPos)
{
case 1: // left
aRightMark.SetPos(Point(m_aRightPagePrtArea.Left() - 2 - aRightMark.GetWidth(), aRightMark.Top()));
break;
case 2: // right
aLeftMark.SetPos(Point(m_aLeftPagePrtArea.Right() + 2, aLeftMark.Top()));
break;
case 3: // outside
break;
case 4: // inside
aLeftMark.SetPos(Point(m_aLeftPagePrtArea.Right() + 2, aLeftMark.Top()));
aRightMark.SetPos(Point(m_aRightPagePrtArea.Left() - 2 - aRightMark.GetWidth(), aRightMark.Top()));
break;
case 0: // none
default:
return;
}
drawRect(rRenderContext, aLeftMark, m_aMarkCol, m_aTransCol);
drawRect(rRenderContext, aRightMark, m_aMarkCol, m_aTransCol);
}
void SwMarkPreview::PaintPage(vcl::RenderContext& rRenderContext, const tools::Rectangle &rRect)
{
// draw PrintArea
drawRect(rRenderContext, rRect, m_aTransCol, m_aPrintAreaCol);
// draw Testparagraph
tools::Rectangle aTextLine = rRect;
aTextLine.SetSize(Size(aTextLine.GetWidth(), 2));
aTextLine.AdjustLeft(4 );
aTextLine.AdjustRight( -4 );
aTextLine.Move(0, 4);
const tools::Long nStep = aTextLine.GetHeight() + 2;
const tools::Long nLines = rRect.GetHeight() / (aTextLine.GetHeight() + 2) - 1;
// simulate text
for (tools::Long i = 0; i < nLines; ++i)
{
if (i == (nLines - 1))
aTextLine.SetSize(Size(aTextLine.GetWidth() / 2, aTextLine.GetHeight()));
if (m_aPage.Contains(aTextLine))
drawRect(rRenderContext, aTextLine, m_aTextCol, m_aTransCol);
aTextLine.Move(0, nStep);
}
aTextLine.Move(0, -nStep);
}
void SwMarkPreview::SetDrawingArea(weld::DrawingArea* pDrawingArea)
{
Size aInitialSize = getPreviewOptionsSize(pDrawingArea->get_ref_device());
pDrawingArea->set_size_request(aInitialSize.Width(), aInitialSize.Height());
weld::CustomWidgetController::SetDrawingArea(pDrawingArea);
SetOutputSizePixel(aInitialSize);
}
namespace
{
void lcl_FillRedlineAttrListBox(
weld::ComboBox& rLB, const AuthorCharAttr& rAttrToSelect,
const sal_uInt16* pAttrMap, const size_t nAttrMapSize)
{
for (size_t i = 0; i != nAttrMapSize; ++i)
{
CharAttr const & rAttr(aRedlineAttr[pAttrMap[i]]);
rLB.set_id(i, weld::toId(&rAttr));
if (rAttr.nItemId == rAttrToSelect.m_nItemId &&
rAttr.nAttr == rAttrToSelect.m_nAttr)
rLB.set_active(i);
}
}
}
SwRedlineOptionsTabPage::SwRedlineOptionsTabPage(weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/optredlinepage.ui"_ustr, u"OptRedLinePage"_ustr, &rSet)
, m_xInsertLB(m_xBuilder->weld_combo_box(u"insert"_ustr))
, m_xInsertImg(m_xBuilder->weld_widget(u"lockinsert"_ustr))
, m_xInsertColorLB(new ColorListBox(m_xBuilder->weld_menu_button(u"insertcolor"_ustr),
[this]{ return GetDialogController()->getDialog(); }))
, m_xInsertColorImg(m_xBuilder->weld_widget(u"lockinsertcolor"_ustr))
, m_xInsertedPreviewWN(new SvxFontPrevWindow)
, m_xInsertedPreview(new weld::CustomWeld(*m_xBuilder, u"insertedpreview"_ustr, *m_xInsertedPreviewWN))
, m_xDeletedLB(m_xBuilder->weld_combo_box(u"deleted"_ustr))
, m_xDeletedImg(m_xBuilder->weld_widget(u"lockdeleted"_ustr))
, m_xDeletedColorLB(new ColorListBox(m_xBuilder->weld_menu_button(u"deletedcolor"_ustr),
[this]{ return GetDialogController()->getDialog(); }))
, m_xDeletedColorImg(m_xBuilder->weld_widget(u"lockdeletedcolor"_ustr))
, m_xDeletedPreviewWN(new SvxFontPrevWindow)
, m_xDeletedPreview(new weld::CustomWeld(*m_xBuilder, u"deletedpreview"_ustr, *m_xDeletedPreviewWN))
, m_xChangedLB(m_xBuilder->weld_combo_box(u"changed"_ustr))
, m_xChangedImg(m_xBuilder->weld_widget(u"lockchanged"_ustr))
, m_xChangedColorLB(new ColorListBox(m_xBuilder->weld_menu_button(u"changedcolor"_ustr),
[this]{ return GetDialogController()->getDialog(); }))
, m_xChangedColorImg(m_xBuilder->weld_widget(u"lockchangedcolor"_ustr))
, m_xChangedPreviewWN(new SvxFontPrevWindow)
, m_xChangedPreview(new weld::CustomWeld(*m_xBuilder, u"changedpreview"_ustr, *m_xChangedPreviewWN))
, m_xMarkPosLB(m_xBuilder->weld_combo_box(u"markpos"_ustr))
, m_xMarkPosImg(m_xBuilder->weld_widget(u"lockmarkpos"_ustr))
, m_xMarkColorLB(new ColorListBox(m_xBuilder->weld_menu_button(u"markcolor"_ustr),
[this]{ return GetDialogController()->getDialog(); }))
, m_xMarkColorImg(m_xBuilder->weld_widget(u"lockmarkcolor"_ustr))
, m_xMarkPreviewWN(new SwMarkPreview)
, m_xMarkPreview(new weld::CustomWeld(*m_xBuilder, u"markpreview"_ustr, *m_xMarkPreviewWN))
{
Size aPreviewSize(getPreviewOptionsSize(m_xMarkPreviewWN->GetDrawingArea()->get_ref_device()));
m_xInsertColorLB->SetSlotId(SID_AUTHOR_COLOR, true);
m_xDeletedColorLB->SetSlotId(SID_AUTHOR_COLOR, true);
m_xChangedColorLB->SetSlotId(SID_AUTHOR_COLOR, true);
m_xInsertedPreviewWN->set_size_request(aPreviewSize.Width(), aPreviewSize.Height());
m_xDeletedPreviewWN->set_size_request(aPreviewSize.Width(), aPreviewSize.Height());
m_xChangedPreviewWN->set_size_request(aPreviewSize.Width(), aPreviewSize.Height());
m_xMarkPreviewWN->set_size_request(aPreviewSize.Width(), aPreviewSize.Height());
for (sal_Int32 i = 0, nEntryCount = m_xInsertLB->get_count(); i < nEntryCount; ++i)
{
const OUString sEntry(m_xInsertLB->get_text(i));
m_xDeletedLB->append_text(sEntry);
m_xChangedLB->append_text(sEntry);
};
// remove strikethrough from insert and change and underline + double
// underline from delete
m_xInsertLB->remove(5);
m_xChangedLB->remove(5);
m_xDeletedLB->remove(4);
m_xDeletedLB->remove(3);
Link<weld::ComboBox&,void> aLk = LINK(this, SwRedlineOptionsTabPage, AttribHdl);
m_xInsertLB->connect_changed( aLk );
m_xDeletedLB->connect_changed( aLk );
m_xChangedLB->connect_changed( aLk );
Link<ColorListBox&,void> aLk2 = LINK(this, SwRedlineOptionsTabPage, ColorHdl);
m_xInsertColorLB->SetSelectHdl( aLk2 );
m_xDeletedColorLB->SetSelectHdl( aLk2 );
m_xChangedColorLB->SetSelectHdl( aLk2 );
m_xMarkPosLB->connect_changed(LINK(this, SwRedlineOptionsTabPage, ChangedMaskPrevHdl));
m_xMarkColorLB->SetSelectHdl(LINK(this, SwRedlineOptionsTabPage, ChangedMaskColorPrevHdl));
}
SwRedlineOptionsTabPage::~SwRedlineOptionsTabPage()
{
m_xInsertColorLB.reset();
m_xInsertedPreview.reset();
m_xInsertedPreviewWN.reset();
m_xDeletedColorLB.reset();
m_xDeletedPreview.reset();
m_xDeletedPreviewWN.reset();
m_xChangedColorLB.reset();
m_xChangedPreview.reset();
m_xChangedPreviewWN.reset();
m_xMarkColorLB.reset();
m_xMarkPreview.reset();
m_xMarkPreviewWN.reset();
}
std::unique_ptr<SfxTabPage> SwRedlineOptionsTabPage::Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rSet)
{
return std::make_unique<SwRedlineOptionsTabPage>(pPage, pController, *rSet);
}
OUString SwRedlineOptionsTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"label2"_ustr, u"insert_label"_ustr, u"insertcolor_label"_ustr,
u"label3"_ustr, u"deleted_label"_ustr, u"deletedcolor_label"_ustr,
u"label4"_ustr, u"changed_label"_ustr, u"changedcolor_label"_ustr,
u"label5"_ustr, u"markpos_label"_ustr, u"markcolor_label"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SwRedlineOptionsTabPage::FillItemSet( SfxItemSet* )
{
CharAttr *pAttr;
SwModuleOptions* pOpt = SwModule::get()->GetModuleConfig();
AuthorCharAttr aInsertedAttr;
AuthorCharAttr aDeletedAttr;
AuthorCharAttr aChangedAttr;
AuthorCharAttr aOldInsertAttr(pOpt->GetInsertAuthorAttr());
AuthorCharAttr aOldDeletedAttr(pOpt->GetDeletedAuthorAttr());
AuthorCharAttr aOldChangedAttr(pOpt->GetFormatAuthorAttr());
Color nOldMarkColor = pOpt->GetMarkAlignColor();
sal_uInt16 nOldMarkMode = pOpt->GetMarkAlignMode();
sal_Int32 nPos = m_xInsertLB->get_active();
if (nPos != -1)
{
pAttr = weld::fromId<CharAttr*>(m_xInsertLB->get_id(nPos));
aInsertedAttr.m_nItemId = pAttr->nItemId;
aInsertedAttr.m_nAttr = pAttr->nAttr;
aInsertedAttr.m_nColor = m_xInsertColorLB->GetSelectEntryColor();
pOpt->SetInsertAuthorAttr(aInsertedAttr);
}
nPos = m_xDeletedLB->get_active();
if (nPos != -1)
{
pAttr = weld::fromId<CharAttr*>(m_xDeletedLB->get_id(nPos));
aDeletedAttr.m_nItemId = pAttr->nItemId;
aDeletedAttr.m_nAttr = pAttr->nAttr;
aDeletedAttr.m_nColor = m_xDeletedColorLB->GetSelectEntryColor();
pOpt->SetDeletedAuthorAttr(aDeletedAttr);
}
nPos = m_xChangedLB->get_active();
if (nPos != -1)
{
pAttr = weld::fromId<CharAttr*>(m_xChangedLB->get_id(nPos));
aChangedAttr.m_nItemId = pAttr->nItemId;
aChangedAttr.m_nAttr = pAttr->nAttr;
aChangedAttr.m_nColor = m_xChangedColorLB->GetSelectEntryColor();
pOpt->SetFormatAuthorAttr(aChangedAttr);
}
nPos = 0;
switch (m_xMarkPosLB->get_active())
{
case 0: nPos = text::HoriOrientation::NONE; break;
case 1: nPos = text::HoriOrientation::LEFT; break;
case 2: nPos = text::HoriOrientation::RIGHT; break;
case 3: nPos = text::HoriOrientation::OUTSIDE; break;
case 4: nPos = text::HoriOrientation::INSIDE; break;
}
pOpt->SetMarkAlignMode(nPos);
pOpt->SetMarkAlignColor(m_xMarkColorLB->GetSelectEntryColor());
if (!(aInsertedAttr == aOldInsertAttr) ||
!(aDeletedAttr == aOldDeletedAttr) ||
!(aChangedAttr == aOldChangedAttr) ||
nOldMarkColor != pOpt->GetMarkAlignColor() ||
nOldMarkMode != pOpt->GetMarkAlignMode() )
{
// update all documents
SwDocShell* pDocShell = static_cast<SwDocShell*>(SfxObjectShell::GetFirst(checkSfxObjectShell<SwDocShell>));
while( pDocShell )
{
pDocShell->GetWrtShell()->UpdateRedlineAttr();
pDocShell = static_cast<SwDocShell*>(SfxObjectShell::GetNext(*pDocShell, checkSfxObjectShell<SwDocShell>));
}
}
return false;
}
void SwRedlineOptionsTabPage::Reset( const SfxItemSet* )
{
const SwModuleOptions* pOpt = SwModule::get()->GetModuleConfig();
const AuthorCharAttr &rInsertAttr = pOpt->GetInsertAuthorAttr();
const AuthorCharAttr &rDeletedAttr = pOpt->GetDeletedAuthorAttr();
const AuthorCharAttr &rChangedAttr = pOpt->GetFormatAuthorAttr();
// initialise preview
InitFontStyle(*m_xInsertedPreviewWN, SwResId(STR_OPT_PREVIEW_INSERTED));
InitFontStyle(*m_xDeletedPreviewWN, SwResId(STR_OPT_PREVIEW_DELETED));
InitFontStyle(*m_xChangedPreviewWN, SwResId(STR_OPT_PREVIEW_CHANGED));
Color nColor = rInsertAttr.m_nColor;
m_xInsertColorLB->SelectEntry(nColor);
m_xInsertColorLB->set_sensitive(!officecfg::Office::Writer::Revision::TextDisplay::Insert::Attribute::isReadOnly());
m_xInsertColorImg->set_visible(officecfg::Office::Writer::Revision::TextDisplay::Insert::Attribute::isReadOnly());
nColor = rDeletedAttr.m_nColor;
m_xDeletedColorLB->SelectEntry(nColor);
m_xDeletedColorLB->set_sensitive(!officecfg::Office::Writer::Revision::TextDisplay::Delete::Attribute::isReadOnly());
m_xDeletedColorImg->set_visible(officecfg::Office::Writer::Revision::TextDisplay::Delete::Attribute::isReadOnly());
nColor = rChangedAttr.m_nColor;
m_xChangedColorLB->SelectEntry(nColor);
m_xChangedColorLB->set_sensitive(!officecfg::Office::Writer::Revision::TextDisplay::ChangedAttribute::Attribute::isReadOnly());
m_xChangedColorImg->set_visible(officecfg::Office::Writer::Revision::TextDisplay::ChangedAttribute::Attribute::isReadOnly());
m_xMarkColorLB->SelectEntry(pOpt->GetMarkAlignColor());
m_xMarkColorLB->set_sensitive(!officecfg::Office::Writer::Revision::LinesChanged::Color::isReadOnly());
m_xMarkColorImg->set_visible(officecfg::Office::Writer::Revision::LinesChanged::Color::isReadOnly());
m_xInsertLB->set_active(0);
m_xInsertLB->set_sensitive(!officecfg::Office::Writer::Revision::TextDisplay::Insert::Color::isReadOnly());
m_xInsertImg->set_visible(officecfg::Office::Writer::Revision::TextDisplay::Insert::Color::isReadOnly());
m_xDeletedLB->set_active(0);
m_xDeletedLB->set_sensitive(!officecfg::Office::Writer::Revision::TextDisplay::Delete::Color::isReadOnly());
m_xDeletedImg->set_visible(officecfg::Office::Writer::Revision::TextDisplay::Delete::Color::isReadOnly());
m_xChangedLB->set_active(0);
m_xChangedLB->set_sensitive(!officecfg::Office::Writer::Revision::TextDisplay::ChangedAttribute::Color::isReadOnly());
m_xChangedImg->set_visible(officecfg::Office::Writer::Revision::TextDisplay::ChangedAttribute::Color::isReadOnly());
lcl_FillRedlineAttrListBox(*m_xInsertLB, rInsertAttr, aInsertAttrMap, SAL_N_ELEMENTS(aInsertAttrMap));
lcl_FillRedlineAttrListBox(*m_xDeletedLB, rDeletedAttr, aDeletedAttrMap, SAL_N_ELEMENTS(aDeletedAttrMap));
lcl_FillRedlineAttrListBox(*m_xChangedLB, rChangedAttr, aChangedAttrMap, SAL_N_ELEMENTS(aChangedAttrMap));
sal_Int32 nPos = 0;
switch (pOpt->GetMarkAlignMode())
{
case text::HoriOrientation::NONE: nPos = 0; break;
case text::HoriOrientation::LEFT: nPos = 1; break;
case text::HoriOrientation::RIGHT: nPos = 2; break;
case text::HoriOrientation::OUTSIDE: nPos = 3; break;
case text::HoriOrientation::INSIDE: nPos = 4; break;
}
m_xMarkPosLB->set_active(nPos);
m_xMarkPosLB->set_sensitive(!officecfg::Office::Writer::Revision::LinesChanged::Mark::isReadOnly());
m_xMarkPosImg->set_visible(officecfg::Office::Writer::Revision::LinesChanged::Mark::isReadOnly());
// show settings in preview
AttribHdl(*m_xInsertLB);
ColorHdl(*m_xInsertColorLB);
AttribHdl(*m_xDeletedLB);
ColorHdl(*m_xInsertColorLB);
AttribHdl(*m_xChangedLB);
ColorHdl(*m_xChangedColorLB);
ChangedMaskPrev();
}
IMPL_LINK( SwRedlineOptionsTabPage, AttribHdl, weld::ComboBox&, rLB, void )
{
SvxFontPrevWindow *pPrev = nullptr;
ColorListBox *pColorLB;
if (&rLB == m_xInsertLB.get())
{
pColorLB = m_xInsertColorLB.get();
pPrev = m_xInsertedPreviewWN.get();
}
else if (&rLB == m_xDeletedLB.get())
{
pColorLB = m_xDeletedColorLB.get();
pPrev = m_xDeletedPreviewWN.get();
}
else
{
pColorLB = m_xChangedColorLB.get();
pPrev = m_xChangedPreviewWN.get();
}
SvxFont& rFont = pPrev->GetFont();
SvxFont& rCJKFont = pPrev->GetCJKFont();
rFont.SetWeight(WEIGHT_NORMAL);
rCJKFont.SetWeight(WEIGHT_NORMAL);
rFont.SetItalic(ITALIC_NONE);
rCJKFont.SetItalic(ITALIC_NONE);
rFont.SetUnderline(LINESTYLE_NONE);
rCJKFont.SetUnderline(LINESTYLE_NONE);
rFont.SetStrikeout(STRIKEOUT_NONE);
rCJKFont.SetStrikeout(STRIKEOUT_NONE);
rFont.SetCaseMap(SvxCaseMap::NotMapped);
rCJKFont.SetCaseMap(SvxCaseMap::NotMapped);
Color aColor = pColorLB->GetSelectEntryColor();
if (aColor == COL_NONE_COLOR)
{
rFont.SetColor( COL_BLACK );
rCJKFont.SetColor( COL_BLACK );
}
else if (aColor == COL_TRANSPARENT)
{
rFont.SetColor( COL_RED );
rCJKFont.SetColor( COL_RED );
}
else
{
rFont.SetColor(aColor);
rCJKFont.SetColor(aColor);
}
sal_Int32 nPos = rLB.get_active();
if( nPos == -1)
nPos = 0;
CharAttr* pAttr = weld::fromId<CharAttr*>(rLB.get_id(nPos));
//switch off preview background color
pPrev->ResetColor();
switch (pAttr->nItemId)
{
case SID_ATTR_CHAR_WEIGHT:
rFont.SetWeight( static_cast<FontWeight>(pAttr->nAttr) );
rCJKFont.SetWeight( static_cast<FontWeight>(pAttr->nAttr) );
break;
case SID_ATTR_CHAR_POSTURE:
rFont.SetItalic( static_cast<FontItalic>(pAttr->nAttr) );
rCJKFont.SetItalic( static_cast<FontItalic>(pAttr->nAttr) );
break;
case SID_ATTR_CHAR_UNDERLINE:
rFont.SetUnderline( static_cast<FontLineStyle>(pAttr->nAttr) );
rCJKFont.SetUnderline( static_cast<FontLineStyle>(pAttr->nAttr) );
break;
case SID_ATTR_CHAR_STRIKEOUT:
rFont.SetStrikeout( static_cast<FontStrikeout>(pAttr->nAttr) );
rCJKFont.SetStrikeout( static_cast<FontStrikeout>(pAttr->nAttr) );
break;
case SID_ATTR_CHAR_CASEMAP:
rFont.SetCaseMap( static_cast<SvxCaseMap>(pAttr->nAttr) );
rCJKFont.SetCaseMap( static_cast<SvxCaseMap>(pAttr->nAttr) );
break;
case SID_ATTR_BRUSH:
{
Color aBgColor = pColorLB->GetSelectEntryColor();
if (aBgColor != COL_NONE_COLOR)
pPrev->SetColor(aBgColor);
else
pPrev->SetColor(COL_LIGHTGRAY);
rFont.SetColor( COL_BLACK );
rCJKFont.SetColor( COL_BLACK );
}
break;
}
pPrev->Invalidate();
}
IMPL_LINK(SwRedlineOptionsTabPage, ColorHdl, ColorListBox&, rListBox, void)
{
ColorListBox* pColorLB = &rListBox;
SvxFontPrevWindow *pPrev = nullptr;
weld::ComboBox* pLB;
if (pColorLB == m_xInsertColorLB.get())
{
pLB = m_xInsertLB.get();
pPrev = m_xInsertedPreviewWN.get();
}
else if (pColorLB == m_xDeletedColorLB.get())
{
pLB = m_xDeletedLB.get();
pPrev = m_xDeletedPreviewWN.get();
}
else
{
pLB = m_xChangedLB.get();
pPrev = m_xChangedPreviewWN.get();
}
SvxFont& rFont = pPrev->GetFont();
SvxFont& rCJKFont = pPrev->GetCJKFont();
sal_Int32 nPos = pLB->get_active();
if( nPos == -1)
nPos = 0;
CharAttr* pAttr = weld::fromId<CharAttr*>(pLB->get_id(nPos));
if( pAttr->nItemId == SID_ATTR_BRUSH )
{
rFont.SetColor( COL_BLACK );
rCJKFont.SetColor( COL_BLACK );
Color aBgColor = pColorLB->GetSelectEntryColor();
if (aBgColor != COL_NONE_COLOR)
pPrev->SetColor(aBgColor);
else
pPrev->SetColor(COL_LIGHTGRAY);
}
else
{
Color aColor = pColorLB->GetSelectEntryColor();
if (aColor == COL_NONE_COLOR)
{
rFont.SetColor( COL_BLACK );
rCJKFont.SetColor( COL_BLACK );
}
else if (aColor == COL_TRANSPARENT)
{
rFont.SetColor( COL_RED );
rCJKFont.SetColor( COL_RED );
}
else
{
rFont.SetColor(aColor);
rCJKFont.SetColor(aColor);
}
}
pPrev->Invalidate();
}
void SwRedlineOptionsTabPage::ChangedMaskPrev()
{
m_xMarkPreviewWN->SetMarkPos(m_xMarkPosLB->get_active());
m_xMarkPreviewWN->SetColor(m_xMarkColorLB->GetSelectEntryColor());
m_xMarkPreviewWN->Invalidate();
}
IMPL_LINK_NOARG(SwRedlineOptionsTabPage, ChangedMaskPrevHdl, weld::ComboBox&, void)
{
ChangedMaskPrev();
}
IMPL_LINK_NOARG(SwRedlineOptionsTabPage, ChangedMaskColorPrevHdl, ColorListBox&, void)
{
ChangedMaskPrev();
}
void SwRedlineOptionsTabPage::InitFontStyle(SvxFontPrevWindow& rExampleWin, const OUString& rText)
{
const AllSettings& rAllSettings = Application::GetSettings();
LanguageType eLangType = rAllSettings.GetUILanguageTag().getLanguageType();
Color aBackCol( rAllSettings.GetStyleSettings().GetWindowColor() );
SvxFont& rFont = rExampleWin.GetFont();
SvxFont& rCJKFont = rExampleWin.GetCJKFont();
SvxFont& rCTLFont = rExampleWin.GetCTLFont();
OutputDevice& rDevice = rExampleWin.GetDrawingArea()->get_ref_device();
vcl::Font aFont( OutputDevice::GetDefaultFont( DefaultFontType::SERIF, eLangType,
GetDefaultFontFlags::OnlyOne, &rDevice ) );
vcl::Font aCJKFont( OutputDevice::GetDefaultFont( DefaultFontType::CJK_TEXT, eLangType,
GetDefaultFontFlags::OnlyOne, &rDevice ) );
vcl::Font aCTLFont( OutputDevice::GetDefaultFont( DefaultFontType::CTL_TEXT, eLangType,
GetDefaultFontFlags::OnlyOne, &rDevice ) );
const Size aDefSize( 0, 12 );
aFont.SetFontSize( aDefSize );
aCJKFont.SetFontSize( aDefSize );
aCTLFont.SetFontSize( aDefSize );
aFont.SetFillColor( aBackCol );
aCJKFont.SetFillColor( aBackCol );
aCTLFont.SetFillColor( aBackCol );
aFont.SetWeight( WEIGHT_NORMAL );
aCJKFont.SetWeight( WEIGHT_NORMAL );
aCTLFont.SetWeight( WEIGHT_NORMAL );
rFont = aFont;
rCJKFont = aCJKFont;
rCTLFont = aCTLFont;
const Size aNewSize( 0, rExampleWin.GetOutputSizePixel().Height() * 2 / 3 );
rFont.SetFontSize( aNewSize );
rCJKFont.SetFontSize( aNewSize );
rExampleWin.SetFont( rFont, rCJKFont,rCTLFont );
rExampleWin.SetPreviewText(rText);
}
SwCompareOptionsTabPage::SwCompareOptionsTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/optcomparison.ui"_ustr, u"OptComparison"_ustr, &rSet)
, m_xAutoRB(m_xBuilder->weld_radio_button(u"auto"_ustr))
, m_xWordRB(m_xBuilder->weld_radio_button(u"byword"_ustr))
, m_xCharRB(m_xBuilder->weld_radio_button(u"bycharacter"_ustr))
, m_xCompareModeImg(m_xBuilder->weld_widget(u"lockcomparemode"_ustr))
, m_xRsidCB(m_xBuilder->weld_check_button(u"useRSID"_ustr))
, m_xRsidImg(m_xBuilder->weld_widget(u"lockuseRSID"_ustr))
, m_xStoreRsidCB(m_xBuilder->weld_check_button(u"storeRSID"_ustr))
, m_xStoreRsidImg(m_xBuilder->weld_widget(u"lockstoreRSID"_ustr))
{
Link<weld::Toggleable&,void> aLnk( LINK( this, SwCompareOptionsTabPage, ComparisonHdl ) );
m_xAutoRB->connect_toggled( aLnk );
m_xWordRB->connect_toggled( aLnk );
m_xCharRB->connect_toggled( aLnk );
}
SwCompareOptionsTabPage::~SwCompareOptionsTabPage()
{
}
std::unique_ptr<SfxTabPage> SwCompareOptionsTabPage::Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* rAttrSet )
{
return std::make_unique<SwCompareOptionsTabPage>(pPage, pController, *rAttrSet);
}
OUString SwCompareOptionsTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString labels[] = { u"label1"_ustr, u"setting"_ustr };
for (const auto& label : labels)
{
if (const auto pString = m_xBuilder->weld_label(label))
sAllStrings += pString->get_label() + " ";
}
OUString radioButton[] = { u"auto"_ustr, u"byword"_ustr, u"bycharacter"_ustr };
for (const auto& radio : radioButton)
{
if (const auto pString = m_xBuilder->weld_radio_button(radio))
sAllStrings += pString->get_label() + " ";
}
return sAllStrings.replaceAll("_", "");
}
bool SwCompareOptionsTabPage::FillItemSet( SfxItemSet* )
{
bool bRet = false;
SwModuleOptions* pOpt = SwModule::get()->GetModuleConfig();
if( m_xAutoRB->get_state_changed_from_saved() ||
m_xWordRB->get_state_changed_from_saved() ||
m_xCharRB->get_state_changed_from_saved() )
{
SwCompareMode eCmpMode = SwCompareMode::Auto;
if ( m_xAutoRB->get_active() ) eCmpMode = SwCompareMode::Auto;
if ( m_xWordRB->get_active() ) eCmpMode = SwCompareMode::ByWord;
if ( m_xCharRB->get_active() ) eCmpMode = SwCompareMode::ByChar;
pOpt->SetCompareMode( eCmpMode );
bRet = true;
}
if( m_xRsidCB->get_state_changed_from_saved() )
{
pOpt->SetUseRsid( m_xRsidCB->get_active() );
bRet = true;
}
if (m_xStoreRsidCB->get_state_changed_from_saved())
{
pOpt->SetStoreRsid(m_xStoreRsidCB->get_active());
bRet = true;
}
return bRet;
}
void SwCompareOptionsTabPage::Reset( const SfxItemSet* )
{
SwModuleOptions* pOpt = SwModule::get()->GetModuleConfig();
SwCompareMode eCmpMode = pOpt->GetCompareMode();
if( eCmpMode == SwCompareMode::Auto )
{
m_xAutoRB->set_active(true);
m_xRsidCB->set_sensitive(false);
}
else if( eCmpMode == SwCompareMode::ByWord )
{
m_xWordRB->set_active(true);
m_xRsidCB->set_sensitive(true);
}
else if( eCmpMode == SwCompareMode::ByChar)
{
m_xCharRB->set_active(true);
m_xRsidCB->set_sensitive(true);
}
if (officecfg::Office::Writer::Comparison::Mode::isReadOnly())
{
m_xAutoRB->set_sensitive(false);
m_xWordRB->set_sensitive(false);
m_xCharRB->set_sensitive(false);
m_xCompareModeImg->set_visible(true);
}
m_xAutoRB->save_state();
m_xWordRB->save_state();
m_xCharRB->save_state();
m_xRsidCB->set_active( pOpt->IsUseRsid() );
if (officecfg::Office::Writer::Comparison::UseRSID::isReadOnly())
{
m_xRsidCB->set_sensitive(false);
m_xRsidImg->set_visible(true);
}
m_xRsidCB->save_state();
m_xStoreRsidCB->set_active(pOpt->IsStoreRsid());
m_xStoreRsidCB->set_sensitive(!officecfg::Office::Writer::Comparison::StoreRSID::isReadOnly());
m_xStoreRsidImg->set_visible(officecfg::Office::Writer::Comparison::StoreRSID::isReadOnly());
m_xStoreRsidCB->save_state();
}
IMPL_LINK(SwCompareOptionsTabPage, ComparisonHdl, weld::Toggleable&, rButton, void)
{
if (!rButton.get_active())
return;
bool bChecked = !m_xAutoRB->get_active();
m_xRsidCB->set_sensitive( bChecked );
}
#ifdef DBG_UTIL
SwTestTabPage::SwTestTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rCoreSet)
: SfxTabPage(pPage, pController, u"modules/swriter/ui/opttestpage.ui"_ustr, u"OptTestPage"_ustr, &rCoreSet)
, m_bAttrModified( false )
, m_xTest1CBox(m_xBuilder->weld_check_button(u"unused"_ustr))
, m_xTest2CBox(m_xBuilder->weld_check_button(u"dynamic"_ustr))
, m_xTest3CBox(m_xBuilder->weld_check_button(u"nocalm"_ustr))
, m_xTest4CBox(m_xBuilder->weld_check_button(u"wysiwygdbg"_ustr))
, m_xTest5CBox(m_xBuilder->weld_check_button(u"noidle"_ustr))
, m_xTest6CBox(m_xBuilder->weld_check_button(u"noscreenadj"_ustr))
, m_xTest7CBox(m_xBuilder->weld_check_button(u"winformat"_ustr))
, m_xTest8CBox(m_xBuilder->weld_check_button(u"noscroll"_ustr))
, m_xTest9CBox(m_xBuilder->weld_check_button(u"DrawingLayerNotLoading"_ustr))
, m_xTest10CBox(m_xBuilder->weld_check_button(u"AutoFormatByInput"_ustr))
{
Init();
}
SwTestTabPage::~SwTestTabPage()
{
}
std::unique_ptr<SfxTabPage> SwTestTabPage::Create( weld::Container* pPage, weld::DialogController* pController,
const SfxItemSet* rAttrSet )
{
return std::make_unique<SwTestTabPage>(pPage, pController, *rAttrSet);
}
OUString SwTestTabPage::GetAllStrings()
{
OUString sAllStrings;
OUString checkButton[] = { u"unused"_ustr, u"dynamic"_ustr, u"nocalm"_ustr,
u"wysiwygdbg"_ustr, u"noidle"_ustr, u"noscreenadj"_ustr,
u"winformat"_ustr, u"noscroll"_ustr, u"DrawingLayerNotLoading"_ustr,
u"AutoFormatByInput"_ustr };
for (const auto& check : checkButton)
{
if (const auto pString = m_xBuilder->weld_check_button(check))
sAllStrings += pString->get_label() + " ";
}
if (const auto pString = m_xBuilder->weld_label(u"label1"_ustr))
sAllStrings += pString->get_label() + " ";
return sAllStrings.replaceAll("_", "");
}
bool SwTestTabPage::FillItemSet( SfxItemSet* rCoreSet )
{
if ( m_bAttrModified )
{
SwTestItem aTestItem;
aTestItem.m_bTest1=m_xTest1CBox->get_active();
aTestItem.m_bTest2=m_xTest2CBox->get_active();
aTestItem.m_bTest3=m_xTest3CBox->get_active();
aTestItem.m_bTest4=m_xTest4CBox->get_active();
aTestItem.m_bTest5=m_xTest5CBox->get_active();
aTestItem.m_bTest6=m_xTest6CBox->get_active();
aTestItem.m_bTest7=m_xTest7CBox->get_active();
aTestItem.m_bTest8=m_xTest8CBox->get_active();
aTestItem.m_bTest9=m_xTest9CBox->get_active();
aTestItem.m_bTest10=m_xTest10CBox->get_active();
rCoreSet->Put(aTestItem);
}
return m_bAttrModified;
}
void SwTestTabPage::Reset( const SfxItemSet* )
{
const SfxItemSet& rSet = GetItemSet();
const SwTestItem* pTestAttr = rSet.GetItemIfSet( FN_PARAM_SWTEST, false );
if(!pTestAttr)
return;
m_xTest1CBox->set_active(pTestAttr->m_bTest1);
m_xTest2CBox->set_active(pTestAttr->m_bTest2);
m_xTest3CBox->set_active(pTestAttr->m_bTest3);
m_xTest4CBox->set_active(pTestAttr->m_bTest4);
m_xTest5CBox->set_active(pTestAttr->m_bTest5);
m_xTest6CBox->set_active(pTestAttr->m_bTest6);
m_xTest7CBox->set_active(pTestAttr->m_bTest7);
m_xTest8CBox->set_active(pTestAttr->m_bTest8);
m_xTest9CBox->set_active(pTestAttr->m_bTest9);
m_xTest10CBox->set_active(pTestAttr->m_bTest10);
}
void SwTestTabPage::Init()
{
// handler
Link<weld::Toggleable&,void> aLk = LINK( this, SwTestTabPage, AutoClickHdl );
m_xTest1CBox->connect_toggled( aLk );
m_xTest2CBox->connect_toggled( aLk );
m_xTest3CBox->connect_toggled( aLk );
m_xTest4CBox->connect_toggled( aLk );
m_xTest5CBox->connect_toggled( aLk );
m_xTest6CBox->connect_toggled( aLk );
m_xTest7CBox->connect_toggled( aLk );
m_xTest8CBox->connect_toggled( aLk );
m_xTest9CBox->connect_toggled( aLk );
m_xTest10CBox->connect_toggled( aLk );
}
IMPL_LINK_NOARG(SwTestTabPage, AutoClickHdl, weld::Toggleable&, void)
{
m_bAttrModified = true;
}
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */