From b0240c4936c561e4e964f35663f1b7344110ac42 Mon Sep 17 00:00:00 2001 From: stippi Date: Fri, 23 Apr 2010 16:07:22 +0000 Subject: [PATCH] Allow setting a listener target and a modification message. git-svn-id: http://svn.haiku-os.org/webpositive/webkit/trunk@457 94f232f2-1747-11df-bad5-a5bfde151594 --- .../webpositive/support/FontSelectionView.cpp | 36 ++++++++++++++++++- .../webpositive/support/FontSelectionView.h | 8 +++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/src/apps/webpositive/support/FontSelectionView.cpp b/src/apps/webpositive/support/FontSelectionView.cpp index 24fcd248fb..c463a8c9ef 100644 --- a/src/apps/webpositive/support/FontSelectionView.cpp +++ b/src/apps/webpositive/support/FontSelectionView.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -43,7 +44,9 @@ static const int32 kMsgSetSize = 'size'; FontSelectionView::FontSelectionView(const char* name, const char* label, bool separateStyles, const BFont* currentFont) : - BHandler(name) + BHandler(name), + fMessage(NULL), + fTarget(NULL) { if (currentFont == NULL) fCurrentFont = _DefaultFont(); @@ -96,6 +99,8 @@ FontSelectionView::~FontSelectionView() delete fStylesMenuField; if (!fFontsMenuField->Window()) delete fFontsMenuField; + + delete fMessage; } @@ -120,6 +125,7 @@ FontSelectionView::MessageReceived(BMessage* message) fCurrentFont.SetSize(size); _UpdateFontPreview(); + _Invoke(); break; } @@ -153,6 +159,8 @@ FontSelectionView::MessageReceived(BMessage* message) if (fStylesMenuField != NULL) _AddStylesToMenu(fCurrentFont, fStylesMenuField->Menu()); } + + _Invoke(); break; } @@ -173,6 +181,7 @@ FontSelectionView::MessageReceived(BMessage* message) fCurrentFont.SetFamilyAndStyle(family, style); _UpdateFontPreview(); + _Invoke(); break; } @@ -182,6 +191,21 @@ FontSelectionView::MessageReceived(BMessage* message) } +void +FontSelectionView::SetMessage(BMessage* message) +{ + delete fMessage; + fMessage = message; +} + + +void +FontSelectionView::SetTarget(BHandler* target) +{ + fTarget = target; +} + + // #pragma mark - @@ -379,6 +403,16 @@ FontSelectionView::PreviewBox() const // #pragma mark - private +void +FontSelectionView::_Invoke() +{ + if (fTarget != NULL && fTarget->Looper() != NULL && fMessage != NULL) { + BMessage message(*fMessage); + fTarget->Looper()->PostMessage(&message, fTarget); + } +} + + BFont FontSelectionView::_DefaultFont() const { diff --git a/src/apps/webpositive/support/FontSelectionView.h b/src/apps/webpositive/support/FontSelectionView.h index f25801a840..8ee630b448 100644 --- a/src/apps/webpositive/support/FontSelectionView.h +++ b/src/apps/webpositive/support/FontSelectionView.h @@ -35,6 +35,9 @@ public: void AttachedToLooper(); virtual void MessageReceived(BMessage* message); + void SetMessage(BMessage* message); + void SetTarget(BHandler* target); + void SetFont(const BFont& font, float size); void SetFont(const BFont& font); void SetSize(float size); @@ -59,6 +62,8 @@ public: BView* PreviewBox() const; private: + void _Invoke(); + BFont _DefaultFont() const; void _SelectCurrentFont(bool select); void _SelectCurrentSize(bool select); @@ -78,6 +83,9 @@ protected: BFont fSavedFont; BFont fCurrentFont; + + BMessage* fMessage; + BHandler* fTarget; }; #endif // FONT_SELECTION_VIEW_H