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
This commit is contained in:
stippi
2012-07-03 15:43:40 +02:00
committed by Alexandre Deckner
parent 1547f92b8e
commit b0240c4936
2 changed files with 43 additions and 1 deletions
@@ -15,6 +15,7 @@
#include <Box.h> #include <Box.h>
#include <Catalog.h> #include <Catalog.h>
#include <Locale.h> #include <Locale.h>
#include <Looper.h>
#include <MenuField.h> #include <MenuField.h>
#include <MenuItem.h> #include <MenuItem.h>
#include <PopUpMenu.h> #include <PopUpMenu.h>
@@ -43,7 +44,9 @@ static const int32 kMsgSetSize = 'size';
FontSelectionView::FontSelectionView(const char* name, const char* label, FontSelectionView::FontSelectionView(const char* name, const char* label,
bool separateStyles, const BFont* currentFont) bool separateStyles, const BFont* currentFont)
: :
BHandler(name) BHandler(name),
fMessage(NULL),
fTarget(NULL)
{ {
if (currentFont == NULL) if (currentFont == NULL)
fCurrentFont = _DefaultFont(); fCurrentFont = _DefaultFont();
@@ -96,6 +99,8 @@ FontSelectionView::~FontSelectionView()
delete fStylesMenuField; delete fStylesMenuField;
if (!fFontsMenuField->Window()) if (!fFontsMenuField->Window())
delete fFontsMenuField; delete fFontsMenuField;
delete fMessage;
} }
@@ -120,6 +125,7 @@ FontSelectionView::MessageReceived(BMessage* message)
fCurrentFont.SetSize(size); fCurrentFont.SetSize(size);
_UpdateFontPreview(); _UpdateFontPreview();
_Invoke();
break; break;
} }
@@ -153,6 +159,8 @@ FontSelectionView::MessageReceived(BMessage* message)
if (fStylesMenuField != NULL) if (fStylesMenuField != NULL)
_AddStylesToMenu(fCurrentFont, fStylesMenuField->Menu()); _AddStylesToMenu(fCurrentFont, fStylesMenuField->Menu());
} }
_Invoke();
break; break;
} }
@@ -173,6 +181,7 @@ FontSelectionView::MessageReceived(BMessage* message)
fCurrentFont.SetFamilyAndStyle(family, style); fCurrentFont.SetFamilyAndStyle(family, style);
_UpdateFontPreview(); _UpdateFontPreview();
_Invoke();
break; 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 - // #pragma mark -
@@ -379,6 +403,16 @@ FontSelectionView::PreviewBox() const
// #pragma mark - private // #pragma mark - private
void
FontSelectionView::_Invoke()
{
if (fTarget != NULL && fTarget->Looper() != NULL && fMessage != NULL) {
BMessage message(*fMessage);
fTarget->Looper()->PostMessage(&message, fTarget);
}
}
BFont BFont
FontSelectionView::_DefaultFont() const FontSelectionView::_DefaultFont() const
{ {
@@ -35,6 +35,9 @@ public:
void AttachedToLooper(); void AttachedToLooper();
virtual void MessageReceived(BMessage* message); 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, float size);
void SetFont(const BFont& font); void SetFont(const BFont& font);
void SetSize(float size); void SetSize(float size);
@@ -59,6 +62,8 @@ public:
BView* PreviewBox() const; BView* PreviewBox() const;
private: private:
void _Invoke();
BFont _DefaultFont() const; BFont _DefaultFont() const;
void _SelectCurrentFont(bool select); void _SelectCurrentFont(bool select);
void _SelectCurrentSize(bool select); void _SelectCurrentSize(bool select);
@@ -78,6 +83,9 @@ protected:
BFont fSavedFont; BFont fSavedFont;
BFont fCurrentFont; BFont fCurrentFont;
BMessage* fMessage;
BHandler* fTarget;
}; };
#endif // FONT_SELECTION_VIEW_H #endif // FONT_SELECTION_VIEW_H