diff options
Diffstat (limited to 'cui/source/options/optgenrl.cxx')
-rw-r--r-- | cui/source/options/optgenrl.cxx | 93 |
1 files changed, 71 insertions, 22 deletions
diff --git a/cui/source/options/optgenrl.cxx b/cui/source/options/optgenrl.cxx index 91e8cf911e99..d2cf40244d85 100644 --- a/cui/source/options/optgenrl.cxx +++ b/cui/source/options/optgenrl.cxx @@ -79,26 +79,28 @@ namespace Lang struct { + // id of the lockimage + OUString pLockId; // id of the text - const char *pTextId; + OUString pTextId; // language flags (see Lang above): // which language is this row for? unsigned nLangFlags; } const vRowInfo[] = { - { "companyft", Lang::All }, - { "nameft", Lang::All & ~Lang::Russian & ~Lang::Eastern }, - { "rusnameft", Lang::Russian }, - { "eastnameft", Lang::Eastern }, - { "streetft", Lang::All & ~Lang::Russian }, - { "russtreetft", Lang::Russian }, - { "icityft", Lang::All & ~Lang::US }, - { "cityft", Lang::US }, - { "countryft", Lang::All }, - { "titleft", Lang::All }, - { "phoneft", Lang::All }, - { "faxft", Lang::All }, + { "lockcompanyft", "companyft", Lang::All }, + { "locknameft", "nameft", Lang::All & ~Lang::Russian & ~Lang::Eastern }, + { "lockrusnameft", "rusnameft", Lang::Russian }, + { "lockeastnameft", "eastnameft", Lang::Eastern }, + { "lockstreetft", "streetft", Lang::All & ~Lang::Russian }, + { "lockrusstreetft","russtreetft", Lang::Russian }, + { "lockicityft", "icityft", Lang::All & ~Lang::US }, + { "lockcityft", "cityft", Lang::US }, + { "lockcountryft", "countryft", Lang::All }, + { "locktitleft", "titleft", Lang::All }, + { "lockphoneft", "phoneft", Lang::All }, + { "lockfaxft", "faxft", Lang::All }, }; @@ -110,7 +112,7 @@ struct // in which row? RowType eRow; // id of the edit box - const char *pEditId; + OUString pEditId; // id for SvtUserOptions in unotools/useroptions.hxx UserOptToken nUserOptionsId; // id for settings the focus (defined in svx/optgenrl.hxx) @@ -166,14 +168,17 @@ const vFieldInfo[] = struct SvxGeneralTabPage::Row { + // row lockdown icon + std::unique_ptr<weld::Widget> xLockImg; // row label std::unique_ptr<weld::Label> xLabel; // first and last field in the row (last is exclusive) unsigned nFirstField, nLastField; public: - explicit Row (std::unique_ptr<weld::Label> xLabel_) - : xLabel(std::move(xLabel_)) + explicit Row (std::unique_ptr<weld::Widget> xLockImg_, std::unique_ptr<weld::Label> xLabel_) + : xLockImg(std::move(xLockImg_)) + , xLabel(std::move(xLabel_)) , nFirstField(0) , nLastField(0) { @@ -210,10 +215,16 @@ public: SvxGeneralTabPage::SvxGeneralTabPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet& rCoreSet) : SfxTabPage(pPage, pController, "cui/ui/optuserpage.ui", "OptUserPage", &rCoreSet) , m_xUseDataCB(m_xBuilder->weld_check_button("usefordocprop")) + , m_xUseDataImg(m_xBuilder->weld_widget("lockusefordocprop")) , m_xCryptoFrame(m_xBuilder->weld_widget( "cryptography")) , m_xSigningKeyLB(m_xBuilder->weld_combo_box("signingkey")) + , m_xSigningKeyFT(m_xBuilder->weld_label("signingkeylabel")) + , m_xSigningKeyImg(m_xBuilder->weld_widget("locksigningkey")) , m_xEncryptionKeyLB(m_xBuilder->weld_combo_box("encryptionkey")) + , m_xEncryptionKeyFT(m_xBuilder->weld_label("encryptionkeylabel")) + , m_xEncryptionKeyImg(m_xBuilder->weld_widget("lockencryptionkey")) , m_xEncryptToSelfCB(m_xBuilder->weld_check_button("encrypttoself")) + , m_xEncryptToSelfImg(m_xBuilder->weld_widget("lockencrypttoself")) { InitControls(); #if HAVE_FEATURE_GPGME @@ -258,11 +269,11 @@ void SvxGeneralTabPage::InitControls () if (!(vRowInfo[iRow].nLangFlags & LangBit)) continue; // creating row - vRows.push_back(std::make_shared<Row>( + vRows.push_back(std::make_shared<Row>(m_xBuilder->weld_widget(vRowInfo[iRow].pLockId), m_xBuilder->weld_label(vRowInfo[iRow].pTextId))); Row& rRow = *vRows.back(); // fields in the row - static unsigned const nFieldCount = SAL_N_ELEMENTS(vFieldInfo); + static unsigned const nFieldCount = std::size(vFieldInfo); // skipping other (invisible) rows while (iField != nFieldCount && vFieldInfo[iField].eRow != eRow) ++iField; @@ -341,6 +352,26 @@ std::unique_ptr<SfxTabPage> SvxGeneralTabPage::Create( weld::Container* pPage, w return std::make_unique<SvxGeneralTabPage>( pPage, pController, *rAttrSet ); } +OUString SvxGeneralTabPage::GetAllStrings() +{ + OUString sAllStrings; + OUString labels[] + = { "label1", "companyft", "nameft", "rusnameft", + "eastnameft", "streetft", "russtreetft", "icityft", + "cityft", "countryft", "titleft", "phoneft", + "faxft", "cryptographylabel", "signingkeylabel", "encryptionkeylabel" }; + + for (const auto& label : labels) + { + if (const auto& pString = m_xBuilder->weld_label(label)) + sAllStrings += pString->get_label() + " "; + } + + sAllStrings += m_xUseDataCB->get_label() + " " + m_xEncryptToSelfCB->get_label() + " "; + + return sAllStrings.replaceAll("_", ""); +} + bool SvxGeneralTabPage::FillItemSet( SfxItemSet* ) { // remove leading and trailing whitespaces @@ -363,11 +394,9 @@ void SvxGeneralTabPage::Reset( const SfxItemSet* rSet ) { SetData_Impl(); - sal_uInt16 const nWhich = GetWhich(SID_FIELD_GRABFOCUS); - - if (rSet->GetItemState(nWhich) == SfxItemState::SET) + if (rSet->GetItemState(SID_FIELD_GRABFOCUS) == SfxItemState::SET) { - EditPosition nField = static_cast<EditPosition>(static_cast<const SfxUInt16Item&>(rSet->Get(nWhich)).GetValue()); + EditPosition nField = static_cast<EditPosition>(rSet->Get(SID_FIELD_GRABFOCUS).GetValue()); if (nField != EditPosition::UNKNOWN) { for (auto const & i: vFields) @@ -479,13 +508,33 @@ void SvxGeneralTabPage::SetData_Impl() bEnableLabel = bEnableLabel || bEnableEdit; } rRow.xLabel->set_sensitive(bEnableLabel); + rRow.xLockImg->set_visible(!bEnableLabel); } // saving for (auto const & i: vFields) i->xEdit->save_value(); + //enabling and disabling remaining fields + bool bEnable = !officecfg::Office::Common::Save::Document::UseUserData::isReadOnly(); + m_xUseDataCB->set_sensitive(bEnable); + m_xUseDataImg->set_visible(!bEnable); + #if HAVE_FEATURE_GPGME + bEnable = !aUserOpt.IsTokenReadonly(UserOptToken::SigningKey); + m_xSigningKeyLB->set_sensitive(bEnable); + m_xSigningKeyFT->set_sensitive(bEnable); + m_xSigningKeyImg->set_visible(!bEnable); + + bEnable = !aUserOpt.IsTokenReadonly(UserOptToken::EncryptionKey); + m_xEncryptionKeyLB->set_sensitive(bEnable); + m_xEncryptionKeyFT->set_sensitive(bEnable); + m_xEncryptionKeyImg->set_visible(!bEnable); + + bEnable = !aUserOpt.IsTokenReadonly(UserOptToken::EncryptToSelf); + m_xEncryptToSelfCB->set_sensitive(bEnable); + m_xEncryptToSelfImg->set_visible(!bEnable); + OUString aSK = aUserOpt.GetToken(UserOptToken::SigningKey); aSK.isEmpty() ? m_xSigningKeyLB->set_active( 0 ) //i.e. 'No Key' : m_xSigningKeyLB->set_active_text( aSK ); |