Author: af
Date: Tue May 21 08:49:40 2013
New Revision: 1484700
URL: http://svn.apache.org/r1484700
Log:
i122352: Do not allow selection of disabled decks via menu.
Modified:
openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx
openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx
openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx
openoffice/trunk/main/sfx2/source/sidebar/TabBar.hxx
Modified: openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx?rev=1484700&r1=1484699&r2=1484700&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/SidebarController.cxx Tue May 21
08:49:40 2013
@@ -110,7 +110,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(),
@@ -802,10 +802,9 @@ IMPL_LINK(SidebarController, WindowEvent
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
@@ -837,9 +836,9 @@ void SidebarController::ShowDetailMenu (
::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)
@@ -847,21 +846,36 @@ void SidebarController::ShowDetailMenu (
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 (MID_FIRST_PANEL);
- for(::std::vector<TabBar::DeckMenuData>::const_iterator
- iItem(rDeckSelectionData.begin()),
- iEnd(rDeckSelectionData.end());
- iItem!=iEnd;
- ++iItem)
+ sal_Int32 nIndex (0);
+ for(::std::vector<TabBar::DeckMenuData>::const_iterator
+ iItem(rMenuData.begin()),
+ iEnd(rMenuData.end());
+ iItem!=iEnd;
+ ++iItem,++nIndex)
+ {
+ 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);
}
}
@@ -873,22 +887,6 @@ void SidebarController::ShowDetailMenu (
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)));
@@ -934,7 +932,8 @@ IMPL_LINK(SidebarController, OnMenuItemS
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&)
{
Modified: openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx?rev=1484700&r1=1484699&r2=1484700&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/SidebarController.hxx Tue May 21
08:49:40 2013
@@ -182,12 +182,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);
Modified: openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx?rev=1484700&r1=1484699&r2=1484700&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/TabBar.cxx Tue May 21 08:49:40
2013
@@ -379,8 +379,7 @@ void TabBar::UpdateFocusManager (FocusMa
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;
@@ -389,18 +388,14 @@ IMPL_LINK(TabBar, OnToolboxClicked, void
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);
}
}
@@ -408,8 +403,7 @@ IMPL_LINK(TabBar, OnToolboxClicked, void
Rectangle(
mpMenuButton->GetPosPixel(),
mpMenuButton->GetSizePixel()),
- aSelectionData,
- aShowData);
+ aMenuData);
return 0;
}
Modified: openoffice/trunk/main/sfx2/source/sidebar/TabBar.hxx
URL:
http://svn.apache.org/viewvc/openoffice/trunk/main/sfx2/source/sidebar/TabBar.hxx?rev=1484700&r1=1484699&r2=1484700&view=diff
==============================================================================
--- openoffice/trunk/main/sfx2/source/sidebar/TabBar.hxx (original)
+++ openoffice/trunk/main/sfx2/source/sidebar/TabBar.hxx Tue May 21 08:49:40
2013
@@ -56,11 +56,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,