/* * Copyright 2009, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _CHANNEL_SLIDER_H #define _CHANNEL_SLIDER_H #include class BChannelSlider : public BChannelControl { public: BChannelSlider(BRect area, const char* name, const char* label, BMessage* message, int32 channels = 1, uint32 resizeMode = B_FOLLOW_LEFT | B_FOLLOW_TOP, uint32 flags = B_WILL_DRAW); BChannelSlider(BRect area, const char* name, const char* label, BMessage* message, enum orientation orientation, int32 channels = 1, uint32 resizeMode = B_FOLLOW_LEFT | B_FOLLOW_TOP, uint32 flags = B_WILL_DRAW); BChannelSlider(const char* name, const char* label, BMessage* message, enum orientation orientation, int32 channels = 1, uint32 flags = B_WILL_DRAW); BChannelSlider(BMessage* archive); virtual ~BChannelSlider(); static BArchivable* Instantiate(BMessage* from); virtual status_t Archive(BMessage* into, bool deep = true) const; virtual void AttachedToWindow(); virtual void AllAttached(); virtual void DetachedFromWindow(); virtual void AllDetached(); virtual void MessageReceived(BMessage* message); virtual void Draw(BRect updateRect); virtual void MouseDown(BPoint where); virtual void MouseUp(BPoint where); virtual void MouseMoved(BPoint where, uint32 transit, const BMessage* dragMessage); virtual void WindowActivated(bool state); virtual void KeyDown(const char* bytes, int32 numBytes); virtual void KeyUp(const char* bytes, int32 numBytes); virtual void FrameResized(float width, float height); virtual void SetFont(const BFont* font, uint32 mask = B_FONT_ALL); virtual void MakeFocus(bool focusState = true); virtual void GetPreferredSize(float* _width, float* _height); virtual BHandler* ResolveSpecifier(BMessage* message, int32 index, BMessage* specifier, int32 form, const char* property); virtual status_t GetSupportedSuites(BMessage* data); virtual void SetEnabled(bool on); virtual orientation Orientation() const; void SetOrientation(enum orientation orientation); virtual int32 MaxChannelCount() const; virtual bool SupportsIndividualLimits() const; virtual void DrawChannel(BView* into, int32 channel, BRect area, bool pressed); virtual void DrawGroove(BView* into, int32 channel, BPoint leftTop, BPoint rightBottom); virtual void DrawThumb(BView* into, int32 channel, BPoint where, bool pressed); virtual const BBitmap* ThumbFor(int32 channel, bool pressed); virtual BRect ThumbFrameFor(int32 channel); virtual float ThumbDeltaFor(int32 channel); virtual float ThumbRangeFor(int32 channel); private: // FBC padding BChannelSlider(const BChannelSlider&); BChannelSlider& operator=(const BChannelSlider&); virtual void _Reserved_BChannelSlider_0(void*, ...); virtual void _Reserved_BChannelSlider_1(void*, ...); virtual void _Reserved_BChannelSlider_2(void*, ...); virtual void _Reserved_BChannelSlider_3(void*, ...); virtual void _Reserved_BChannelSlider_4(void*, ...); virtual void _Reserved_BChannelSlider_5(void*, ...); virtual void _Reserved_BChannelSlider_6(void*, ...); virtual void _Reserved_BChannelSlider_7(void*, ...); private: void _InitData(); void _FinishChange(bool update = false); void _UpdateFontDimens(); void _DrawThumbs(); void _DrawGrooveFrame(BView* where, const BRect& area); void _MouseMovedCommon(BPoint point, BPoint point2); private: float fBaseLine; float fLineFeed; BBitmap* fLeftKnob; BBitmap* fMidKnob; BBitmap* fRightKnob; BBitmap* fBacking; BView* fBackingView; bool fIsVertical; bool _padding_[3]; BPoint fClickDelta; int32 fCurrentChannel; bool fAllChannels; int32* fInitialValues; float fMinPoint; int32 fFocusChannel; uint32 _reserved_[12]; }; #endif // _CHANNEL_SLIDER_H