diff options
Diffstat (limited to 'sfx2')
-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 |
8 files changed, 99 insertions, 2 deletions
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*); |