diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-12-04 16:30:31 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2021-02-06 12:16:04 +0100 |
commit | 69c546e1e7a697217f273baa7c1729ff823efd76 (patch) | |
tree | 4533c38b84d1cd57f86094ac816f0eb7c526ade1 /sw/source/uibase/docvw/AnnotationMenuButton.cxx | |
parent | 2c61782812b1b8b382dd48a04a712da9eaeb4685 (diff) |
weld annotation window
note the labels in sw/uiconfig/swriter/ui/annotation.ui are deliberately
yaligned to 0 to retain the preexisting SwAnnotationWin::PaintTile hack which
depends on this for bin/run gtktiledviewer --enable-tiled-annotations to
not show clipped author/date/etc labels
Change-Id: I53827aa98ed4d71d532a5993d21c6e22190b8063
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/107264
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sw/source/uibase/docvw/AnnotationMenuButton.cxx')
-rw-r--r-- | sw/source/uibase/docvw/AnnotationMenuButton.cxx | 213 |
1 files changed, 60 insertions, 153 deletions
diff --git a/sw/source/uibase/docvw/AnnotationMenuButton.cxx b/sw/source/uibase/docvw/AnnotationMenuButton.cxx index a38cba50aa04..48f848416ec6 100644 --- a/sw/source/uibase/docvw/AnnotationMenuButton.cxx +++ b/sw/source/uibase/docvw/AnnotationMenuButton.cxx @@ -17,117 +17,86 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include "AnnotationMenuButton.hxx" - +#include <AnnotationWin.hxx> #include <strings.hrc> #include <unotools/useroptions.hxx> -#include <vcl/menu.hxx> -#include <vcl/decoview.hxx> -#include <vcl/gradient.hxx> -#include <vcl/settings.hxx> #include <vcl/event.hxx> #include <cmdid.h> -#include <AnnotationWin.hxx> + #include <swtypes.hxx> namespace sw::annotation { -static Color ColorFromAlphaColor(const sal_uInt8 aTransparency, const Color& aFront, const Color& aBack) -{ - return Color(sal_uInt8(aFront.GetRed() * aTransparency / 255.0 + aBack.GetRed() * (1 - aTransparency / 255.0)), - sal_uInt8(aFront.GetGreen() * aTransparency / 255.0 + aBack.GetGreen() * (1 - aTransparency / 255.0)), - sal_uInt8(aFront.GetBlue() * aTransparency / 255.0 + aBack.GetBlue() * (1 - aTransparency / 255.0))); -} - -AnnotationMenuButton::AnnotationMenuButton(sw::annotation::SwAnnotationWin& rSidebarWin) - : MenuButton(&rSidebarWin) - , mrSidebarWin(rSidebarWin) -{ - AddEventListener(LINK(&mrSidebarWin, sw::annotation::SwAnnotationWin, WindowEventListener)); - - SetAccessibleName(SwResId(STR_ACCESS_ANNOTATION_BUTTON_NAME)); - SetAccessibleDescription(SwResId(STR_ACCESS_ANNOTATION_BUTTON_DESC)); - SetQuickHelpText(GetAccessibleDescription()); -} - -AnnotationMenuButton::~AnnotationMenuButton() -{ - disposeOnce(); -} - -void AnnotationMenuButton::dispose() -{ - RemoveEventListener(LINK(&mrSidebarWin, sw::annotation::SwAnnotationWin, WindowEventListener)); - MenuButton::dispose(); -} - -void AnnotationMenuButton::Select() +IMPL_LINK(SwAnnotationWin, SelectHdl, const OString&, rIdent, void) { - OString sIdent = GetCurItemIdent(); - if (sIdent.isEmpty()) + if (rIdent.isEmpty()) return; // tdf#136682 ensure this is the currently active sidebar win so the command // operates in an active sidebar context - bool bSwitchedFocus = mrSidebarWin.SetActiveSidebarWin(); - - if (sIdent == "reply") - mrSidebarWin.ExecuteCommand(FN_REPLY); - if (sIdent == "resolve" || sIdent == "unresolve") - mrSidebarWin.ExecuteCommand(FN_RESOLVE_NOTE); - else if (sIdent == "resolvethread" || sIdent == "unresolvethread") - mrSidebarWin.ExecuteCommand(FN_RESOLVE_NOTE_THREAD); - else if (sIdent == "delete") - mrSidebarWin.ExecuteCommand(FN_DELETE_COMMENT); - else if (sIdent == "deletethread") - mrSidebarWin.ExecuteCommand(FN_DELETE_COMMENT_THREAD); - else if (sIdent == "deleteby") - mrSidebarWin.ExecuteCommand(FN_DELETE_NOTE_AUTHOR); - else if (sIdent == "deleteall") - mrSidebarWin.ExecuteCommand(FN_DELETE_ALL_NOTES); - else if (sIdent == "formatall") - mrSidebarWin.ExecuteCommand(FN_FORMAT_ALL_NOTES); + bool bSwitchedFocus = SetActiveSidebarWin(); + + if (rIdent == "reply") + ExecuteCommand(FN_REPLY); + if (rIdent == "resolve" || rIdent == "unresolve") + ExecuteCommand(FN_RESOLVE_NOTE); + else if (rIdent == "resolvethread" || rIdent == "unresolvethread") + ExecuteCommand(FN_RESOLVE_NOTE_THREAD); + else if (rIdent == "delete") + ExecuteCommand(FN_DELETE_COMMENT); + else if (rIdent == "deletethread") + ExecuteCommand(FN_DELETE_COMMENT_THREAD); + else if (rIdent == "deleteby") + ExecuteCommand(FN_DELETE_NOTE_AUTHOR); + else if (rIdent == "deleteall") + ExecuteCommand(FN_DELETE_ALL_NOTES); + else if (rIdent == "formatall") + ExecuteCommand(FN_FORMAT_ALL_NOTES); if (bSwitchedFocus) - mrSidebarWin.UnsetActiveSidebarWin(); - mrSidebarWin.GrabFocusToDocument(); + UnsetActiveSidebarWin(); + GrabFocusToDocument(); } -void AnnotationMenuButton::MouseButtonDown( const MouseEvent& rMEvt ) +IMPL_LINK_NOARG(SwAnnotationWin, ToggleHdl, weld::ToggleButton&, void) { - PopupMenu* pButtonPopup(GetPopupMenu()); - if (mrSidebarWin.IsReadOnly()) + if (!mxMenuButton->get_active()) + return; + + bool bReplyVis = true; + + bool bReadOnly = IsReadOnly(); + if (bReadOnly) { - pButtonPopup->EnableItem(pButtonPopup->GetItemId("reply"), false); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("resolve"), false); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("unresolve"), false); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("resolvethread"), false); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("unresolvethread"), false); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("delete"), false ); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("deletethread"), false ); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("deleteby"), false ); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("deleteall"), false ); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("formatall"), false ); + mxMenuButton->set_item_visible("reply", false); + bReplyVis = false; + mxMenuButton->set_item_visible("resolve", false); + mxMenuButton->set_item_visible("unresolve", false); + mxMenuButton->set_item_visible("resolvethread", false); + mxMenuButton->set_item_visible("unresolvethread", false); + mxMenuButton->set_item_visible("delete", false ); } else { - pButtonPopup->EnableItem(pButtonPopup->GetItemId("resolve"), !mrSidebarWin.IsResolved()); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("unresolve"), mrSidebarWin.IsResolved()); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("resolvethread"), !mrSidebarWin.IsThreadResolved()); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("unresolvethread"), mrSidebarWin.IsThreadResolved()); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("delete"), !mrSidebarWin.IsProtected()); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("deletethread")); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("deleteby")); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("deleteall")); - pButtonPopup->EnableItem(pButtonPopup->GetItemId("formatall")); + mxMenuButton->set_item_visible("resolve", !IsResolved()); + mxMenuButton->set_item_visible("unresolve", IsResolved()); + mxMenuButton->set_item_visible("resolvethread", !IsThreadResolved()); + mxMenuButton->set_item_visible("unresolvethread", IsThreadResolved()); + mxMenuButton->set_item_visible("delete", !IsProtected()); } - if (mrSidebarWin.IsProtected()) + mxMenuButton->set_item_visible("deletethread", !bReadOnly); + mxMenuButton->set_item_visible("deleteby", !bReadOnly); + mxMenuButton->set_item_visible("deleteall", !bReadOnly); + mxMenuButton->set_item_visible("formatall", !bReadOnly); + + if (IsProtected()) { - pButtonPopup->EnableItem(pButtonPopup->GetItemId("reply"), false); + mxMenuButton->set_item_visible("reply", false); + bReplyVis = false; } else { @@ -141,84 +110,22 @@ void AnnotationMenuButton::MouseButtonDown( const MouseEvent& rMEvt ) } } // do not allow to reply to ourself and no answer possible if this note is in a protected section - if (sAuthor == mrSidebarWin.GetAuthor()) - { - pButtonPopup->EnableItem(pButtonPopup->GetItemId("reply"), false); - } - else - { - pButtonPopup->EnableItem(pButtonPopup->GetItemId("reply")); - } - } - - MenuButton::MouseButtonDown(rMEvt); -} - -void AnnotationMenuButton::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& /*rRect*/) -{ - bool bHighContrast = rRenderContext.GetSettings().GetStyleSettings().GetHighContrastMode(); - - if (bHighContrast) - rRenderContext.SetFillColor(COL_BLACK); - else - rRenderContext.SetFillColor(mrSidebarWin.ColorDark()); - rRenderContext.SetLineColor(); - const tools::Rectangle aRect(tools::Rectangle(Point(0, 0), rRenderContext.PixelToLogic(GetSizePixel()))); - rRenderContext.DrawRect(aRect); - - if (bHighContrast) - { - //draw rect around button - rRenderContext.SetFillColor(COL_BLACK); - rRenderContext.SetLineColor(COL_WHITE); - } - else - { - //draw button - Gradient aGradient; - if (IsMouseOver()) - aGradient = Gradient(GradientStyle::Linear, - ColorFromAlphaColor(80, mrSidebarWin.ColorAnchor(), mrSidebarWin.ColorDark()), - ColorFromAlphaColor(15, mrSidebarWin.ColorAnchor(), mrSidebarWin.ColorDark())); - else - aGradient = Gradient(GradientStyle::Linear, - ColorFromAlphaColor(15, mrSidebarWin.ColorAnchor(), mrSidebarWin.ColorDark()), - ColorFromAlphaColor(80, mrSidebarWin.ColorAnchor(), mrSidebarWin.ColorDark())); - rRenderContext.DrawGradient(aRect, aGradient); - - //draw rect around button - rRenderContext.SetFillColor(); - rRenderContext.SetLineColor(ColorFromAlphaColor(90, mrSidebarWin.ColorAnchor(), mrSidebarWin.ColorDark())); + bReplyVis = sAuthor != GetAuthor(); + mxMenuButton->set_item_visible("reply", bReplyVis); } - rRenderContext.DrawRect(aRect); - - tools::Rectangle aSymbolRect(aRect); - // 25% distance to the left and right button border - const tools::Long nBorderDistanceLeftAndRight = ((aSymbolRect.GetWidth() * 250) + 500) / 1000; - aSymbolRect.AdjustLeft(nBorderDistanceLeftAndRight ); - aSymbolRect.AdjustRight( -nBorderDistanceLeftAndRight ); - // 40% distance to the top button border - const tools::Long nBorderDistanceTop = ((aSymbolRect.GetHeight() * 400) + 500) / 1000; - aSymbolRect.AdjustTop(nBorderDistanceTop ); - // 15% distance to the bottom button border - const tools::Long nBorderDistanceBottom = ((aSymbolRect.GetHeight() * 150) + 500) / 1000; - aSymbolRect.AdjustBottom( -nBorderDistanceBottom ); - DecorationView aDecoView(&rRenderContext); - aDecoView.DrawSymbol(aSymbolRect, SymbolType::SPIN_DOWN, (bHighContrast ? COL_WHITE : COL_BLACK)); + mxMenuButton->set_item_visible("sep1", bReplyVis); } -void AnnotationMenuButton::KeyInput(const KeyEvent& rKeyEvt) +IMPL_LINK(SwAnnotationWin, KeyInputHdl, const KeyEvent&, rKeyEvt, bool) { const vcl::KeyCode& rKeyCode = rKeyEvt.GetKeyCode(); if (rKeyCode.GetCode() == KEY_TAB) { - mrSidebarWin.ActivatePostIt(); - mrSidebarWin.GrabFocus(); - } - else - { - MenuButton::KeyInput(rKeyEvt); + ActivatePostIt(); + GrabFocus(); + return true; } + return false; } } // end of namespace sw::annotation |