diff options
-rw-r--r-- | include/sfx2/inputdlg.hxx | 6 | ||||
-rw-r--r-- | include/sfx2/strings.hrc | 1 | ||||
-rw-r--r-- | sfx2/source/control/templatedlglocalview.cxx | 20 | ||||
-rw-r--r-- | sfx2/source/control/templatelocalview.cxx | 18 | ||||
-rw-r--r-- | sfx2/source/dialog/inputdlg.cxx | 36 |
5 files changed, 80 insertions, 1 deletions
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: */ |