diff options
author | Andre Fischer <af@apache.org> | 2013-04-23 14:08:04 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-05-20 11:33:20 +0100 |
commit | eebf7fa20a97d36e859b6537cf889bff8dbbf565 (patch) | |
tree | 83320858522291878a653ca9ff456b281f282881 | |
parent | a1c02181319d32c4444ab7fdb4f1086221056a34 (diff) |
Resolves: #i122086# Show icons in decks and titles (optionally)
(cherry picked from commit 80b53edb04ed2d4b4f27f8256b754593902f0c23)
Change-Id: Ic9aafce182b96aa44956d9ddbf165f4cc736e41b
-rw-r--r-- | officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs | 28 | ||||
-rw-r--r-- | sfx2/source/sidebar/Deck.hxx | 2 | ||||
-rw-r--r-- | sfx2/source/sidebar/DeckDescriptor.hxx | 2 | ||||
-rw-r--r-- | sfx2/source/sidebar/PanelDescriptor.hxx | 2 | ||||
-rw-r--r-- | sfx2/source/sidebar/ResourceManager.cxx | 8 | ||||
-rw-r--r-- | sfx2/source/sidebar/SidebarController.cxx | 46 | ||||
-rw-r--r-- | sfx2/source/sidebar/SidebarController.hxx | 6 | ||||
-rw-r--r-- | sfx2/source/sidebar/TitleBar.cxx | 33 | ||||
-rw-r--r-- | sfx2/source/sidebar/TitleBar.hxx | 2 |
9 files changed, 127 insertions, 2 deletions
diff --git a/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs b/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs index 49d6118defca..f7a35a364a52 100644 --- a/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs +++ b/officecfg/registry/schema/org/openoffice/Office/UI/Sidebar.xcs @@ -53,6 +53,20 @@ </info> <value></value> </prop> + <prop oor:name="TitleBarIconURL" oor:type="xs:string"> + <info> + <desc>This icon is displayed in the title bar of the deck. + Any URL scheme supported by the com.sun.star.graphic.GraphicProvider service is suitable here.</desc> + </info> + <value></value> + </prop> + <prop oor:name="HighContrastTitleBarIconURL" oor:type="xs:string"> + <info> + <desc>This icon is displayed in the title bar of the deck when high contrast mode is active. + Any URL scheme supported by the com.sun.star.graphic.GraphicProvider service is suitable here.</desc> + </info> + <value></value> + </prop> <prop oor:name="HelpURL" oor:type="xs:string"> <info> <desc>Help about the sidebar deck.</desc> @@ -142,6 +156,20 @@ </info> <value></value> </prop> + <prop oor:name="TitleBarIconURL" oor:type="xs:string"> + <info> + <desc>This icon is displayed in the title bar of the panel. + Any URL scheme supported by the com.sun.star.graphic.GraphicProvider service is suitable here.</desc> + </info> + <value></value> + </prop> + <prop oor:name="HighContrastTitleBarIconURL" oor:type="xs:string"> + <info> + <desc>This icon is displayed in the title bar of the panel when high contrast mode is active. + Any URL scheme supported by the com.sun.star.graphic.GraphicProvider service is suitable here.</desc> + </info> + <value></value> + </prop> <prop oor:name="HelpURL" oor:type="xs:string"> <info> <desc>Help about the sidebar content panel.</desc> diff --git a/sfx2/source/sidebar/Deck.hxx b/sfx2/source/sidebar/Deck.hxx index ae1cf196ad42..07cdaecb6d71 100644 --- a/sfx2/source/sidebar/Deck.hxx +++ b/sfx2/source/sidebar/Deck.hxx @@ -93,6 +93,8 @@ private: ::boost::scoped_ptr<ScrollBar> mpVerticalScrollBar; DECL_LINK(HandleVerticalScrollBarChange,void*); + + }; diff --git a/sfx2/source/sidebar/DeckDescriptor.hxx b/sfx2/source/sidebar/DeckDescriptor.hxx index 2c5a3d481f65..c7dc62742865 100644 --- a/sfx2/source/sidebar/DeckDescriptor.hxx +++ b/sfx2/source/sidebar/DeckDescriptor.hxx @@ -32,6 +32,8 @@ public: ::rtl::OUString msId; ::rtl::OUString msIconURL; ::rtl::OUString msHighContrastIconURL; + ::rtl::OUString msTitleBarIconURL; + ::rtl::OUString msHighContrastTitleBarIconURL; ::rtl::OUString msHelpURL; ::rtl::OUString msHelpText; ContextList maContextList; diff --git a/sfx2/source/sidebar/PanelDescriptor.hxx b/sfx2/source/sidebar/PanelDescriptor.hxx index a9b34456d762..cb39dbbc598f 100644 --- a/sfx2/source/sidebar/PanelDescriptor.hxx +++ b/sfx2/source/sidebar/PanelDescriptor.hxx @@ -32,6 +32,8 @@ public: sal_Bool mbIsTitleBarOptional; ::rtl::OUString msId; ::rtl::OUString msDeckId; + ::rtl::OUString msTitleBarIconURL; + ::rtl::OUString msHighContrastTitleBarIconURL; ::rtl::OUString msHelpURL; ContextList maContextList; ::rtl::OUString msImplementationURL; diff --git a/sfx2/source/sidebar/ResourceManager.cxx b/sfx2/source/sidebar/ResourceManager.cxx index c29ef9ad2f4b..070bb1c7ddd1 100644 --- a/sfx2/source/sidebar/ResourceManager.cxx +++ b/sfx2/source/sidebar/ResourceManager.cxx @@ -269,6 +269,10 @@ void ResourceManager::ReadDeckList (void) aDeckNode.getNodeValue("IconURL")); rDeckDescriptor.msHighContrastIconURL = ::comphelper::getString( aDeckNode.getNodeValue("HighContrastIconURL")); + rDeckDescriptor.msTitleBarIconURL = ::comphelper::getString( + aDeckNode.getNodeValue("TitleBarIconURL")); + rDeckDescriptor.msHighContrastTitleBarIconURL = ::comphelper::getString( + aDeckNode.getNodeValue("HighContrastTitleBarIconURL")); rDeckDescriptor.msHelpURL = ::comphelper::getString( aDeckNode.getNodeValue("HelpURL")); rDeckDescriptor.msHelpText = rDeckDescriptor.msTitle; @@ -320,6 +324,10 @@ void ResourceManager::ReadPanelList (void) aPanelNode.getNodeValue("Id")); rPanelDescriptor.msDeckId = ::comphelper::getString( aPanelNode.getNodeValue("DeckId")); + rPanelDescriptor.msTitleBarIconURL = ::comphelper::getString( + aPanelNode.getNodeValue("TitleBarIconURL")); + rPanelDescriptor.msHighContrastTitleBarIconURL = ::comphelper::getString( + aPanelNode.getNodeValue("HighContrastTitleBarIconURL")); rPanelDescriptor.msHelpURL = ::comphelper::getString( aPanelNode.getNodeValue("HelpURL")); rPanelDescriptor.msImplementationURL = ::comphelper::getString( diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 969cc04fd291..12fc4ca9980d 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -487,6 +487,7 @@ void SidebarController::SwitchToDeck ( // buttons. maFocusManager.SetPanels(aNewPanels); mpTabBar->UpdateFocusManager(maFocusManager); + UpdateTitleBarIcons(); } @@ -642,6 +643,7 @@ IMPL_LINK(SidebarController, WindowEventHandler, VclWindowEvent*, pEvent) // Force an update of deck and tab bar to reflect // changes in theme (high contrast mode). Theme::HandleDataChange(); + UpdateTitleBarIcons(); mpParentWindow->Invalidate(); break; @@ -931,4 +933,48 @@ void SidebarController::RestrictWidth (void) } + + +void SidebarController::UpdateTitleBarIcons (void) +{ + if ( ! mpCurrentDeck) + return; + + const bool bIsHighContrastModeActive (Theme::IsHighContrastMode()); + const ResourceManager& rResourceManager (ResourceManager::Instance()); + + // Update the deck icon. + const DeckDescriptor* pDeckDescriptor = rResourceManager.GetDeckDescriptor(mpCurrentDeck->GetId()); + if (pDeckDescriptor != NULL && mpCurrentDeck->GetTitleBar()) + { + const OUString sIconURL( + bIsHighContrastModeActive + ? pDeckDescriptor->msHighContrastTitleBarIconURL + : pDeckDescriptor->msTitleBarIconURL); + mpCurrentDeck->GetTitleBar()->SetIcon(Tools::GetImage(sIconURL, mxFrame)); + } + + // Update the panel icons. + const SharedPanelContainer& rPanels (mpCurrentDeck->GetPanels()); + for (SharedPanelContainer::const_iterator + iPanel(rPanels.begin()), iEnd(rPanels.end()); + iPanel!=iEnd; + ++iPanel) + { + if ( ! *iPanel) + continue; + if ((*iPanel)->GetTitleBar() == NULL) + continue; + const PanelDescriptor* pPanelDescriptor = rResourceManager.GetPanelDescriptor((*iPanel)->GetId()); + if (pPanelDescriptor == NULL) + continue; + const OUString sIconURL ( + bIsHighContrastModeActive + ? pPanelDescriptor->msHighContrastTitleBarIconURL + : pPanelDescriptor->msTitleBarIconURL); + (*iPanel)->GetTitleBar()->SetIcon(Tools::GetImage(sIconURL, mxFrame)); + } +} + + } } // end of namespace sfx2::sidebar diff --git a/sfx2/source/sidebar/SidebarController.hxx b/sfx2/source/sidebar/SidebarController.hxx index 4ae0f7d9ceef..9c4e2a8ff7a6 100644 --- a/sfx2/source/sidebar/SidebarController.hxx +++ b/sfx2/source/sidebar/SidebarController.hxx @@ -161,6 +161,12 @@ private: void RestrictWidth (void); + /** Update the icons displayed in the title bars of the deck and + the panels. This is called once when a deck is created and + every time when a data change event is processed. + */ + void UpdateTitleBarIcons (void); + virtual void SAL_CALL disposing (void); }; diff --git a/sfx2/source/sidebar/TitleBar.cxx b/sfx2/source/sidebar/TitleBar.cxx index f5eac2ac7ea5..6f73636e16ae 100644 --- a/sfx2/source/sidebar/TitleBar.cxx +++ b/sfx2/source/sidebar/TitleBar.cxx @@ -25,6 +25,11 @@ ToolbarValue::~ToolbarValue (void) {} +namespace +{ + const static sal_Int32 gnLeftIconSpace (3); + const static sal_Int32 gnRightIconSpace (3); +} namespace sfx2 { namespace sidebar { @@ -34,7 +39,8 @@ TitleBar::TitleBar ( const sidebar::Paint& rInitialBackgroundPaint) : Window(pParentWindow), maToolBox(this), - msTitle(rsTitle) + msTitle(rsTitle), + maIcon() { SetBackground(rInitialBackgroundPaint.GetWallpaper()); @@ -60,6 +66,15 @@ void TitleBar::SetTitle (const ::rtl::OUString& rsTitle) +void TitleBar::SetIcon (const Image& rIcon) +{ + maIcon = rIcon; + Invalidate(); +} + + + + void TitleBar::Paint (const Rectangle& rUpdateArea) { (void)rUpdateArea; @@ -132,6 +147,20 @@ void TitleBar::PaintTitle (const Rectangle& rTitleBox) { Push(PUSH_FONT | PUSH_TEXTCOLOR); + Rectangle aTitleBox (rTitleBox); + + // When there is an icon then paint it at the left of the given + // box. + if ( !! maIcon) + { + DrawImage( + Point( + aTitleBox.Left() + gnLeftIconSpace, + aTitleBox.Top() + (aTitleBox.GetHeight()-maIcon.GetSizePixel().Height())/2), + maIcon); + aTitleBox.Left() += gnLeftIconSpace + maIcon.GetSizePixel().Width() + gnRightIconSpace; + } + Font aFont(GetFont()); aFont.SetWeight(WEIGHT_BOLD); SetFont(aFont); @@ -139,7 +168,7 @@ void TitleBar::PaintTitle (const Rectangle& rTitleBox) // Paint title bar text. SetTextColor(GetTextColor()); DrawText( - rTitleBox, + aTitleBox, msTitle, TEXT_DRAW_LEFT | TEXT_DRAW_VCENTER); diff --git a/sfx2/source/sidebar/TitleBar.hxx b/sfx2/source/sidebar/TitleBar.hxx index 4f4f67c8b601..e0e37723a965 100644 --- a/sfx2/source/sidebar/TitleBar.hxx +++ b/sfx2/source/sidebar/TitleBar.hxx @@ -37,6 +37,7 @@ public: virtual ~TitleBar (void); void SetTitle (const ::rtl::OUString& rsTitle); + void SetIcon (const Image& rIcon); virtual void Paint (const Rectangle& rUpdateArea); virtual void DataChanged (const DataChangedEvent& rEvent); @@ -61,6 +62,7 @@ protected: private: ::rtl::OUString msTitle; + Image maIcon; void PaintTitle (const Rectangle& rTitleBox); DECL_LINK(SelectionHandler, ToolBox*); |