[Libreoffice-commits] core.git: include/sfx2 sfx2/source
Vert D (via logerrit)
logerrit at kemper.freedesktop.org
Tue Apr 27 11:57:46 UTC 2021
include/sfx2/inputdlg.hxx | 6 ++++
include/sfx2/strings.hrc | 1
sfx2/source/control/templatedlglocalview.cxx | 20 ++++++++++++++-
sfx2/source/control/templatelocalview.cxx | 18 +++++++++++++
sfx2/source/dialog/inputdlg.cxx | 36 +++++++++++++++++++++++++++
5 files changed, 80 insertions(+), 1 deletion(-)
New commits:
commit 99482297c7dd497e41fad2e7193759043e305101
Author: Vert D <devoptmsoi at gmx.com>
AuthorDate: Tue Apr 6 19:26:21 2021 -0500
Commit: Heiko Tietze <heiko.tietze at documentfoundation.org>
CommitDate: Tue Apr 27 13:57:00 2021 +0200
tdf#138883 Prevent renaming Templates
*Disable ok button added a tooltip when renaming to an existing template
*Check while typing.
Change-Id: Iec7266940a1cde1a086ba612c0f2f42dd3e6fc73
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113719
Tested-by: Jenkins
Reviewed-by: Heiko Tietze <heiko.tietze at documentfoundation.org>
diff --git a/include/sfx2/inputdlg.hxx b/include/sfx2/inputdlg.hxx
index 1ca2b9b39461..adf9c2a2e850 100644
--- a/include/sfx2/inputdlg.hxx
+++ b/include/sfx2/inputdlg.hxx
@@ -19,12 +19,18 @@ private:
std::unique_ptr<weld::Entry> m_xEntry;
std::unique_ptr<weld::Label> m_xLabel;
std::unique_ptr<weld::Button> m_xHelp;
+ std::unique_ptr<weld::Button> m_xOk;
+ std::function<bool(OUString)> mCheckEntry;
+ DECL_LINK(EntryChangedHdl, weld::Entry&, void);
public:
InputDialog(weld::Widget* pParent, const OUString& rLabelText);
OUString GetEntryText() const;
void SetEntryText(const OUString& rStr);
void HideHelpBtn();
+ void SetEntryMessageType(weld::EntryMessageType aType);
+ void SetTooltip(const OUString& rStr);
+ void setCheckEntry(std::function<bool(OUString)> aFunc);
};
#endif // INCLUDED_SFX2_SOURCE_INC_INPUTDLG_HXX
diff --git a/include/sfx2/strings.hrc b/include/sfx2/strings.hrc
index c5d3c003e313..0967a31c1109 100644
--- a/include/sfx2/strings.hrc
+++ b/include/sfx2/strings.hrc
@@ -70,6 +70,7 @@
#define STR_MSG_ERROR_IMPORT NC_("STR_MSG_ERROR_IMPORT", "Error importing the following templates to $1:\n$2")
#define STR_MSG_ERROR_DELETE_TEMPLATE NC_("STR_MSG_ERROR_DELETE_TEMPLATE", "The following templates cannot be deleted:\n$1")
#define STR_MSG_ERROR_DELETE_FOLDER NC_("STR_MSG_ERROR_DELETE_FOLDER", "The following folders cannot be deleted:\n$1")
+#define STR_TOOLTIP_ERROR_RENAME_TEMPLATE NC_("STR_TOOLTIP_ERROR_RENAME_TEMPLATE", "There is another template with the name $1 in $2.")
#define STR_QMSG_SEL_FOLDER_DELETE NC_("STR_QMSG_SEL_FOLDER_DELETE", "Do you want to delete the selected category?")
#define STR_QMSG_TEMPLATE_OVERWRITE NC_("STR_QMSG_TEMPLATE_OVERWRITE", "A template named $1 already exists in $2. Do you want to overwrite it?")
#define STR_QMSG_SEL_TEMPLATE_DELETE NC_("STR_QMSG_SEL_TEMPLATE_DELETE", "Do you want to delete the selected templates?")
diff --git a/sfx2/source/control/templatedlglocalview.cxx b/sfx2/source/control/templatedlglocalview.cxx
index 0adc30d8b97e..d4a8f949ed4d 100644
--- a/sfx2/source/control/templatedlglocalview.cxx
+++ b/sfx2/source/control/templatedlglocalview.cxx
@@ -142,6 +142,24 @@ void TemplateDlgLocalView::ContextMenuSelectHdl(std::string_view rIdent)
aTitleEditDlg.SetEntryText(sOldTitle);
aTitleEditDlg.HideHelpBtn();
+ auto aCurRegionItems = getFilteredItems([&](const TemplateItemProperties& rItem) {
+ return rItem.aRegionName == getRegionName(maSelectedItem->mnRegionId);
+ });
+ OUString sTooltip(SfxResId(STR_TOOLTIP_ERROR_RENAME_TEMPLATE));
+ sTooltip = sTooltip.replaceFirst("$2", getRegionName(maSelectedItem->mnRegionId));
+ aTitleEditDlg.setCheckEntry([&](OUString sNewTitle) {
+ if (sNewTitle.isEmpty() || sNewTitle == sOldTitle)
+ return true;
+ for (const auto& rItem : aCurRegionItems)
+ {
+ if (rItem.aName == sNewTitle)
+ {
+ aTitleEditDlg.SetTooltip(sTooltip.replaceFirst("$1", sNewTitle));
+ return false;
+ }
+ }
+ return true;
+ });
if (!aTitleEditDlg.run())
return;
OUString sNewTitle = comphelper::string::strip(aTitleEditDlg.GetEntryText(), ' ');
@@ -149,8 +167,8 @@ void TemplateDlgLocalView::ContextMenuSelectHdl(std::string_view rIdent)
if (!sNewTitle.isEmpty() && sNewTitle != sOldTitle)
{
maSelectedItem->setTitle(sNewTitle);
+ ListView::rename(OUString::number(maSelectedItem->mnId), maSelectedItem->maTitle);
}
- ListView::rename(OUString::number(maSelectedItem->mnId), maSelectedItem->maTitle);
}
else if (rIdent == "delete")
{
diff --git a/sfx2/source/control/templatelocalview.cxx b/sfx2/source/control/templatelocalview.cxx
index 4dcbaa3ba0b6..baf630c7fff0 100644
--- a/sfx2/source/control/templatelocalview.cxx
+++ b/sfx2/source/control/templatelocalview.cxx
@@ -205,6 +205,24 @@ void TemplateLocalView::ContextMenuSelectHdl(std::string_view rIdent)
aTitleEditDlg.SetEntryText(sOldTitle);
aTitleEditDlg.HideHelpBtn();
+ auto aCurRegionItems = getFilteredItems([&](const TemplateItemProperties& rItem) {
+ return rItem.aRegionName == getRegionName(maSelectedItem->mnRegionId);
+ });
+ OUString sTooltip(SfxResId(STR_TOOLTIP_ERROR_RENAME_TEMPLATE));
+ sTooltip = sTooltip.replaceFirst("$2", getRegionName(maSelectedItem->mnRegionId));
+ aTitleEditDlg.setCheckEntry([&](OUString sNewTitle) {
+ if (sNewTitle.isEmpty() || sNewTitle == sOldTitle)
+ return true;
+ for (const auto& rItem : aCurRegionItems)
+ {
+ if (rItem.aName == sNewTitle)
+ {
+ aTitleEditDlg.SetTooltip(sTooltip.replaceFirst("$1", sNewTitle));
+ return false;
+ }
+ }
+ return true;
+ });
if (!aTitleEditDlg.run())
return;
OUString sNewTitle = comphelper::string::strip(aTitleEditDlg.GetEntryText(), ' ');
diff --git a/sfx2/source/dialog/inputdlg.cxx b/sfx2/source/dialog/inputdlg.cxx
index e2e58625c8c2..243f2fa092e4 100644
--- a/sfx2/source/dialog/inputdlg.cxx
+++ b/sfx2/source/dialog/inputdlg.cxx
@@ -14,6 +14,7 @@ InputDialog::InputDialog(weld::Widget* pParent, const OUString& rLabelText)
, m_xEntry(m_xBuilder->weld_entry("entry"))
, m_xLabel(m_xBuilder->weld_label("label"))
, m_xHelp(m_xBuilder->weld_button("help"))
+ , m_xOk(m_xBuilder->weld_button("ok"))
{
m_xLabel->set_label(rLabelText);
}
@@ -28,4 +29,39 @@ void InputDialog::SetEntryText(const OUString& rStr)
m_xEntry->set_position(-1);
}
+void InputDialog::SetEntryMessageType(weld::EntryMessageType aType)
+{
+ m_xEntry->set_message_type(aType);
+ if (aType == weld::EntryMessageType::Error)
+ {
+ m_xEntry->select_region(0, -1);
+ m_xEntry->grab_focus();
+ m_xOk->set_sensitive(false);
+ }
+ else
+ {
+ m_xOk->set_sensitive(true);
+ SetTooltip("");
+ }
+}
+
+void InputDialog::SetTooltip(const OUString& rStr)
+{
+ m_xEntry->set_tooltip_text(rStr);
+ m_xOk->set_tooltip_text(rStr);
+}
+
+void InputDialog::setCheckEntry(std::function<bool(OUString)> aFunc)
+{
+ mCheckEntry = aFunc;
+ m_xEntry->connect_changed(LINK(this, InputDialog, EntryChangedHdl));
+}
+
+IMPL_LINK_NOARG(InputDialog, EntryChangedHdl, weld::Entry&, void)
+{
+ if (mCheckEntry(m_xEntry->get_text()))
+ SetEntryMessageType(weld::EntryMessageType::Normal);
+ else
+ SetEntryMessageType(weld::EntryMessageType::Error);
+}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
More information about the Libreoffice-commits
mailing list