1/* 2 * Copyright 2009, Haiku, Inc. All rights reserved. 3 * Distributed under the terms of the MIT License. 4 */ 5#ifndef _MULTI_CHANNEL_CONTROL_H 6#define _MULTI_CHANNEL_CONTROL_H 7 8 9#include <Control.h> 10 11 12class BMultiChannelControl : public BControl { 13public: 14 BMultiChannelControl(BRect frame, 15 const char* name, const char* label, 16 BMessage* message, int32 channelCount = 1, 17 uint32 resize = B_FOLLOW_LEFT 18 | B_FOLLOW_TOP, 19 uint32 flags = B_WILL_DRAW); 20 BMultiChannelControl(BMessage* archive); 21 virtual ~BMultiChannelControl(); 22 23 virtual status_t Archive(BMessage* archive, 24 bool deep = true) const; 25 26 virtual void Draw(BRect updateRect) = 0; 27 virtual void MouseDown(BPoint where) = 0; 28 virtual void KeyDown(const char* bytes, int32 numBytes) = 0; 29 30 virtual void FrameResized(float width, float height); 31 virtual void SetFont(const BFont* font, 32 uint32 mask = B_FONT_ALL); 33 34 virtual void AttachedToWindow(); 35 virtual void DetachedFromWindow(); 36 virtual void ResizeToPreferred(); 37 virtual void GetPreferredSize(float* _width, 38 float* _height) = 0; 39 40 virtual void MessageReceived(BMessage* message); 41 42 //! SetValueChannel() determines which channel 43 virtual void SetValue(int32 value); 44 virtual status_t SetCurrentChannel(int32 channel); 45 int32 CurrentChannel() const; 46 47 virtual int32 CountChannels() const; 48 virtual int32 MaxChannelCount() const = 0; 49 virtual status_t SetChannelCount(int32 channelCount); 50 int32 ValueFor(int32 channel) const; 51 virtual int32 GetValues(int32* _values, int32 firstChannel, 52 int32 channelCount) const; 53 status_t SetValueFor(int32 channel, int32 value); 54 virtual status_t SetValues(int32 firstChannel, 55 int32 channelCount, const int32* _values); 56 status_t SetAllValues(int32 values); 57 status_t SetLimitsFor(int32 channel, int32 minimum, 58 int32 maximum); 59 status_t GetLimitsFor(int32 channel, int32* _minimum, 60 int32* _maximum) const; 61 virtual status_t SetLimits(int32 firstChannel, 62 int32 channelCount, const int32* minimum, 63 const int32* maximum); 64 virtual status_t GetLimits(int32 firstChannel, 65 int32 channelCount, int32* _minimum, 66 int32* _maximum) const; 67 status_t SetAllLimits(int32 minimum, int32 maximum); 68 69 virtual status_t SetLimitLabels(const char* minLabel, 70 const char* maxLabel); 71 const char* MinLimitLabel() const; 72 const char* MaxLimitLabel() const; 73 74private: 75 // FBC padding 76 virtual status_t _Reserverd_MultiChannelControl_0(void*, ...); 77 virtual status_t _Reserverd_MultiChannelControl_1(void*, ...); 78 virtual status_t _Reserverd_MultiChannelControl_2(void*, ...); 79 virtual status_t _Reserverd_MultiChannelControl_3(void*, ...); 80 virtual status_t _Reserverd_MultiChannelControl_4(void*, ...); 81 virtual status_t _Reserverd_MultiChannelControl_5(void*, ...); 82 virtual status_t _Reserverd_MultiChannelControl_6(void*, ...); 83 virtual status_t _Reserverd_MultiChannelControl_7(void*, ...); 84 85 // Forbidden 86 BMultiChannelControl( 87 const BMultiChannelControl&); 88 BMultiChannelControl& operator=(const BMultiChannelControl&); 89 90 91protected: 92 inline int32* const& MinLimitList() const; 93 inline int32* const& MaxLimitList() const; 94 inline int32* const& ValueList() const; 95 96private: 97 int32 fChannelCount; 98 int32 fValueChannel; 99 int32* fChannelMinima; 100 int32* fChannelMaxima; 101 int32* fChannelValues; 102 char* fMinLabel; 103 char* fMaxLabel; 104 105 uint32 _reserved_[16]; 106}; 107 108 109inline int32* const& 110BMultiChannelControl::MinLimitList() const 111{ 112 return fChannelMinima; 113} 114 115 116inline int32* const& 117BMultiChannelControl::MaxLimitList() const 118{ 119 return fChannelMaxima; 120} 121 122 123inline int32* const& 124BMultiChannelControl::ValueList() const 125{ 126 return fChannelValues; 127} 128 129 130#endif // _MULTI_CHANNEL_CONTROL_H 131 132