summaryrefslogtreecommitdiff
path: root/sfx2
diff options
context:
space:
mode:
authorAndre Fischer <af@apache.org>2013-05-21 08:49:40 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-05-21 18:45:51 +0100
commitd456545fb1215eda69f6970d4207b2b062384877 (patch)
tree7c150f15c6bd922c5f0cdfbfc8e354b2b7fa884c /sfx2
parent9a32ed36709cb03a8b5d3bcff0276bc31c934848 (diff)
Resolves: #i122352# Do not allow selection of disabled decks via menu
(cherry picked from commit b27563ac5988d7ce407b045466e952114f54e07c) Change-Id: Id36b8fd12d0fce8f8717e5dd21538d1871a005b0
Diffstat (limited to 'sfx2')
-rw-r--r--sfx2/source/sidebar/SidebarController.cxx63
-rw-r--r--sfx2/source/sidebar/SidebarController.hxx6
-rw-r--r--sfx2/source/sidebar/TabBar.cxx26
-rw-r--r--sfx2/source/sidebar/TabBar.hxx13
4 files changed, 53 insertions, 55 deletions
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 7cc315e7acf7..e1e00426e852 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -102,7 +102,7 @@ SidebarController::SidebarController (
mpParentWindow,
rxFrame,
::boost::bind(&SidebarController::OpenThenSwitchToDeck, this, _1),
- ::boost::bind(&SidebarController::ShowPopupMenu, this, _1,_2,_3))),
+ ::boost::bind(&SidebarController::ShowPopupMenu, this, _1,_2))),
mxFrame(rxFrame),
maCurrentContext(OUString(), OUString()),
maRequestedContext(),
@@ -794,10 +794,9 @@ IMPL_LINK(SidebarController, WindowEventHandler, VclWindowEvent*, pEvent)
void SidebarController::ShowPopupMenu (
const Rectangle& rButtonBox,
- const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData,
- const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const
+ const ::std::vector<TabBar::DeckMenuData>& rMenuData) const
{
- ::boost::shared_ptr<PopupMenu> pMenu = CreatePopupMenu(rDeckSelectionData, rDeckShowData);
+ ::boost::shared_ptr<PopupMenu> pMenu = CreatePopupMenu(rMenuData);
pMenu->SetSelectHdl(LINK(this, SidebarController, OnMenuItemSelected));
// pass toolbox button rect so the menu can stay open on button up
@@ -829,9 +828,9 @@ void SidebarController::ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) co
::boost::shared_ptr<PopupMenu> SidebarController::CreatePopupMenu (
- const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData,
- const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const
+ const ::std::vector<TabBar::DeckMenuData>& rMenuData) const
{
+ // Create the top level popup menu.
::boost::shared_ptr<PopupMenu> pMenu (new PopupMenu());
FloatingWindow* pMenuWindow = dynamic_cast<FloatingWindow*>(pMenu->GetWindow());
if (pMenuWindow != NULL)
@@ -839,21 +838,36 @@ void SidebarController::ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) co
pMenuWindow->SetPopupModeFlags(pMenuWindow->GetPopupModeFlags() | FLOATWIN_POPUPMODE_NOMOUSEUPCLOSE);
}
+ // Create sub menu for customization (hiding of deck tabs.)
+ PopupMenu* pCustomizationMenu = new PopupMenu();
+
SidebarResource aLocalResource;
// Add one entry for every tool panel element to individually make
// them visible or hide them.
+ sal_Int32 nIndex (0);
+ for(::std::vector<TabBar::DeckMenuData>::const_iterator
+ iItem(rMenuData.begin()),
+ iEnd(rMenuData.end());
+ iItem!=iEnd;
+ ++iItem,++nIndex)
{
- sal_Int32 nIndex (MID_FIRST_PANEL);
- for(::std::vector<TabBar::DeckMenuData>::const_iterator
- iItem(rDeckSelectionData.begin()),
- iEnd(rDeckSelectionData.end());
- iItem!=iEnd;
- ++iItem)
+ const sal_Int32 nMenuIndex (nIndex+MID_FIRST_PANEL);
+ pMenu->InsertItem(nMenuIndex, iItem->msDisplayName, MIB_RADIOCHECK);
+ pMenu->CheckItem(nMenuIndex, iItem->mbIsCurrentDeck ? sal_True : sal_False);
+ pMenu->EnableItem(nMenuIndex, (iItem->mbIsEnabled&&iItem->mbIsActive) ? sal_True : sal_False);
+
+ const sal_Int32 nSubMenuIndex (nIndex+MID_FIRST_HIDE);
+ if (iItem->mbIsCurrentDeck)
+ {
+ // Don't allow the currently visible deck to be disabled.
+ pCustomizationMenu->InsertItem(nSubMenuIndex, iItem->msDisplayName, MIB_RADIOCHECK);
+ pCustomizationMenu->CheckItem(nSubMenuIndex, sal_True);
+ }
+ else
{
- pMenu->InsertItem(nIndex, iItem->get<0>(), MIB_RADIOCHECK);
- pMenu->CheckItem(nIndex, iItem->get<2>());
- ++nIndex;
+ pCustomizationMenu->InsertItem(nSubMenuIndex, iItem->msDisplayName, MIB_CHECKABLE);
+ pCustomizationMenu->CheckItem(nSubMenuIndex, iItem->mbIsActive ? sal_True : sal_False);
}
}
@@ -865,22 +879,6 @@ void SidebarController::ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) co
else
pMenu->InsertItem(MID_UNLOCK_TASK_PANEL, String(SfxResId(STR_SFX_UNDOCK)));
- // Add sub menu for customization (hiding of deck tabs.)
- PopupMenu* pCustomizationMenu = new PopupMenu();
- {
- sal_Int32 nIndex (MID_FIRST_HIDE);
- for(::std::vector<TabBar::DeckMenuData>::const_iterator
- iItem(rDeckShowData.begin()),
- iEnd(rDeckShowData.end());
- iItem!=iEnd;
- ++iItem)
- {
- pCustomizationMenu->InsertItem(nIndex, iItem->get<0>(), MIB_CHECKABLE);
- pCustomizationMenu->CheckItem(nIndex, iItem->get<2>());
- ++nIndex;
- }
- }
-
pCustomizationMenu->InsertSeparator();
pCustomizationMenu->InsertItem(MID_RESTORE_DEFAULT, String(SfxResId(STRING_RESTORE)));
@@ -926,7 +924,8 @@ IMPL_LINK(SidebarController, OnMenuItemSelected, Menu*, pMenu)
if (nIndex >= MID_FIRST_PANEL && nIndex<MID_FIRST_HIDE)
SwitchToDeck(mpTabBar->GetDeckIdForIndex(nIndex - MID_FIRST_PANEL));
else if (nIndex >=MID_FIRST_HIDE)
- mpTabBar->ToggleHideFlag(nIndex-MID_FIRST_HIDE);
+ if (pMenu->GetItemBits(nIndex) == MIB_CHECKABLE)
+ mpTabBar->ToggleHideFlag(nIndex-MID_FIRST_HIDE);
}
catch (RuntimeException&)
{
diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx
index dc62f7af1b04..7eeab7fb06b5 100644
--- a/sfx2/source/sidebar/SidebarController.hxx
+++ b/sfx2/source/sidebar/SidebarController.hxx
@@ -178,12 +178,10 @@ private:
const Context& rContext);
void ShowPopupMenu (
const Rectangle& rButtonBox,
- const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData,
- const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const;
+ const ::std::vector<TabBar::DeckMenuData>& rMenuData) const;
void ShowDetailMenu (const ::rtl::OUString& rsMenuCommand) const;
::boost::shared_ptr<PopupMenu> CreatePopupMenu (
- const ::std::vector<TabBar::DeckMenuData>& rDeckSelectionData,
- const ::std::vector<TabBar::DeckMenuData>& rDeckShowData) const;
+ const ::std::vector<TabBar::DeckMenuData>& rMenuData) const;
DECL_LINK(OnMenuItemSelected, Menu*);
void BroadcastPropertyChange (void);
diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx
index 11f8e2ea6459..21beb0f548a7 100644
--- a/sfx2/source/sidebar/TabBar.cxx
+++ b/sfx2/source/sidebar/TabBar.cxx
@@ -363,8 +363,7 @@ void TabBar::UpdateFocusManager (FocusManager& rFocusManager)
IMPL_LINK(TabBar, OnToolboxClicked, void*, EMPTYARG)
{
- ::std::vector<DeckMenuData> aSelectionData;
- ::std::vector<DeckMenuData> aShowData;
+ ::std::vector<DeckMenuData> aMenuData;
for(ItemContainer::const_iterator iItem(maItems.begin()),iEnd(maItems.end());
iItem!=iEnd;
@@ -373,18 +372,14 @@ IMPL_LINK(TabBar, OnToolboxClicked, void*, EMPTYARG)
const DeckDescriptor* pDeckDescriptor = ResourceManager::Instance().GetDeckDescriptor(iItem->msDeckId);
if (pDeckDescriptor != NULL)
{
- if ( ! iItem->mbIsHidden)
- aSelectionData.push_back(
- DeckMenuData(
- pDeckDescriptor->msTitle,
- pDeckDescriptor->msId,
- iItem->mpButton->IsChecked()));
-
- aShowData.push_back(
- DeckMenuData(
- pDeckDescriptor->msTitle,
- pDeckDescriptor->msId,
- !iItem->mbIsHidden));
+ DeckMenuData aData;
+ aData.msDisplayName = pDeckDescriptor->msTitle;
+ aData.msDeckId = pDeckDescriptor->msId;
+ aData.mbIsCurrentDeck = iItem->mpButton->IsChecked();
+ aData.mbIsActive = !iItem->mbIsHidden;
+ aData.mbIsEnabled = iItem->mpButton->IsEnabled();
+
+ aMenuData.push_back(aData);
}
}
@@ -392,8 +387,7 @@ IMPL_LINK(TabBar, OnToolboxClicked, void*, EMPTYARG)
Rectangle(
mpMenuButton->GetPosPixel(),
mpMenuButton->GetSizePixel()),
- aSelectionData,
- aShowData);
+ aMenuData);
return 0;
}
diff --git a/sfx2/source/sidebar/TabBar.hxx b/sfx2/source/sidebar/TabBar.hxx
index a9479cb20c60..7cecc42e68b1 100644
--- a/sfx2/source/sidebar/TabBar.hxx
+++ b/sfx2/source/sidebar/TabBar.hxx
@@ -52,11 +52,18 @@ public:
- isCurrentDeck for the deck selection data
- isEnabled for the show/hide menu
*/
- typedef ::boost::tuple<rtl::OUString,rtl::OUString,bool> DeckMenuData;
+ class DeckMenuData
+ {
+ public:
+ ::rtl::OUString msDisplayName;
+ ::rtl::OUString msDeckId;
+ bool mbIsCurrentDeck;
+ bool mbIsActive;
+ bool mbIsEnabled;
+ };
typedef ::boost::function<void(
const Rectangle&,
- const ::std::vector<DeckMenuData>& rDeckSelectionData,
- const ::std::vector<DeckMenuData>& rDeckShowData)> PopupMenuProvider;
+ const ::std::vector<DeckMenuData>& rMenuData)> PopupMenuProvider;
TabBar (
Window* pParentWindow,
const cssu::Reference<css::frame::XFrame>& rxFrame,