summaryrefslogtreecommitdiff
path: root/sw/source/uibase/docvw/AnnotationMenuButton.cxx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2020-12-04 16:30:31 +0000
committerCaolán McNamara <caolanm@redhat.com>2021-02-06 12:16:04 +0100
commit69c546e1e7a697217f273baa7c1729ff823efd76 (patch)
tree4533c38b84d1cd57f86094ac816f0eb7c526ade1 /sw/source/uibase/docvw/AnnotationMenuButton.cxx
parent2c61782812b1b8b382dd48a04a712da9eaeb4685 (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.cxx213
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