mirror of
https://review.haiku-os.org/haiku
synced 2025-01-21 22:04:49 +01:00
1ae794159a
really makes no sense if the pointer belongs to the derived class and only confuses). Note this change does not affect binary compatibility. * Introduced a new MaxUpdateTextWidth() virtual method which is really necessary to handle the update text correctly in the layout. * Introduced a new UpdateTextChanged() method which can be called to notify the control of a changed update text. Internally, SetValue() also uses it. * Handle the width or height of the UpdateText() correctly in the layout. For horizontal layout, the width was forgotten to be included in GetPreferredSize(), for vertical layout, it was completely broken before. * Handle invalidation correctly when the UpdateText() changes. * Remove the arbitrary insets for labels from the border the control. This makes it easier to align the control's labels with other controls. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26447 a95241bf-73f2-0310-859d-f6bbb57e9c96
226 lines
5.9 KiB
C++
226 lines
5.9 KiB
C++
/*
|
|
* Copyright 2001-2006, Haiku.
|
|
* Distributed under the terms of the MIT License.
|
|
*
|
|
* Authors:
|
|
* Marc Flerackers (mflerackers@androme.be)
|
|
*/
|
|
#ifndef _SLIDER_H
|
|
#define _SLIDER_H
|
|
|
|
|
|
#include <BeBuild.h>
|
|
#include <Control.h>
|
|
|
|
|
|
enum hash_mark_location {
|
|
B_HASH_MARKS_NONE = 0,
|
|
B_HASH_MARKS_TOP = 1,
|
|
B_HASH_MARKS_LEFT = 1,
|
|
B_HASH_MARKS_BOTTOM = 2,
|
|
B_HASH_MARKS_RIGHT = 2,
|
|
B_HASH_MARKS_BOTH = 3
|
|
};
|
|
|
|
enum thumb_style {
|
|
B_BLOCK_THUMB,
|
|
B_TRIANGLE_THUMB
|
|
};
|
|
|
|
|
|
#define USE_OFF_SCREEN_VIEW 1
|
|
|
|
|
|
class BSlider : public BControl {
|
|
public:
|
|
BSlider(BRect frame, const char *name, const char *label,
|
|
BMessage *message, int32 minValue, int32 maxValue,
|
|
thumb_style thumbType = B_BLOCK_THUMB,
|
|
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
|
uint32 flags = B_NAVIGABLE | B_WILL_DRAW | B_FRAME_EVENTS);
|
|
|
|
BSlider(BRect frame, const char *name, const char *label,
|
|
BMessage *message, int32 minValue, int32 maxValue,
|
|
orientation posture, thumb_style thumbType = B_BLOCK_THUMB,
|
|
uint32 resizingMode = B_FOLLOW_LEFT | B_FOLLOW_TOP,
|
|
uint32 flags = B_NAVIGABLE | B_WILL_DRAW | B_FRAME_EVENTS);
|
|
|
|
BSlider(const char *name, const char *label,
|
|
BMessage *message, int32 minValue, int32 maxValue,
|
|
orientation posture, thumb_style thumbType = B_BLOCK_THUMB,
|
|
uint32 flags = B_NAVIGABLE | B_WILL_DRAW | B_FRAME_EVENTS);
|
|
|
|
BSlider(BMessage *data);
|
|
virtual ~BSlider();
|
|
|
|
static BArchivable *Instantiate(BMessage *data);
|
|
virtual status_t Archive(BMessage *data, bool deep = true) const;
|
|
virtual status_t Perform(perform_code d, void *arg);
|
|
|
|
virtual void WindowActivated(bool state);
|
|
virtual void AttachedToWindow();
|
|
virtual void AllAttached();
|
|
virtual void AllDetached();
|
|
virtual void DetachedFromWindow();
|
|
|
|
virtual void MessageReceived(BMessage *msg);
|
|
virtual void FrameMoved(BPoint new_position);
|
|
virtual void FrameResized(float w,float h);
|
|
virtual void KeyDown(const char * bytes, int32 n);
|
|
virtual void MouseDown(BPoint);
|
|
virtual void MouseUp(BPoint pt);
|
|
virtual void MouseMoved(BPoint pt, uint32 c, const BMessage *m);
|
|
virtual void Pulse();
|
|
|
|
virtual void SetLabel(const char *label);
|
|
virtual void SetLimitLabels(const char *minLabel,
|
|
const char *maxLabel);
|
|
const char* MinLimitLabel() const;
|
|
const char* MaxLimitLabel() const;
|
|
virtual void SetValue(int32);
|
|
virtual int32 ValueForPoint(BPoint) const;
|
|
virtual void SetPosition(float);
|
|
float Position() const;
|
|
virtual void SetEnabled(bool on);
|
|
void GetLimits(int32 * minimum, int32 * maximum);
|
|
|
|
virtual void Draw(BRect);
|
|
virtual void DrawSlider();
|
|
virtual void DrawBar();
|
|
virtual void DrawHashMarks();
|
|
virtual void DrawThumb();
|
|
virtual void DrawFocusMark();
|
|
virtual void DrawText();
|
|
virtual const char* UpdateText() const;
|
|
void UpdateTextChanged();
|
|
|
|
virtual BRect BarFrame() const;
|
|
virtual BRect HashMarksFrame() const;
|
|
virtual BRect ThumbFrame() const;
|
|
|
|
virtual void SetFlags(uint32 flags);
|
|
virtual void SetResizingMode(uint32 mode);
|
|
|
|
virtual void GetPreferredSize( float *width, float *height);
|
|
virtual void ResizeToPreferred();
|
|
|
|
virtual status_t Invoke(BMessage *msg=NULL);
|
|
virtual BHandler* ResolveSpecifier(BMessage *msg, int32 index,
|
|
BMessage *specifier, int32 form,
|
|
const char *property);
|
|
virtual status_t GetSupportedSuites(BMessage* data);
|
|
|
|
virtual void SetModificationMessage(BMessage *message);
|
|
BMessage* ModificationMessage() const;
|
|
|
|
virtual void SetSnoozeAmount(int32);
|
|
int32 SnoozeAmount() const;
|
|
|
|
virtual void SetKeyIncrementValue(int32 value);
|
|
int32 KeyIncrementValue() const;
|
|
|
|
virtual void SetHashMarkCount(int32 count);
|
|
int32 HashMarkCount() const;
|
|
|
|
virtual void SetHashMarks(hash_mark_location where);
|
|
hash_mark_location HashMarks() const;
|
|
|
|
virtual void SetStyle(thumb_style s);
|
|
thumb_style Style() const;
|
|
|
|
virtual void SetBarColor(rgb_color);
|
|
rgb_color BarColor() const;
|
|
virtual void UseFillColor(bool, const rgb_color* c=NULL);
|
|
bool FillColor(rgb_color*) const;
|
|
|
|
BView* OffscreenView() const;
|
|
|
|
orientation Orientation() const;
|
|
virtual void SetOrientation(orientation);
|
|
|
|
float BarThickness() const;
|
|
virtual void SetBarThickness(float thickness);
|
|
|
|
virtual void SetFont(const BFont *font,
|
|
uint32 properties = B_FONT_ALL);
|
|
|
|
virtual void SetLimits(int32 minimum, int32 maximum);
|
|
|
|
virtual float MaxUpdateTextWidth();
|
|
|
|
virtual void InvalidateLayout(bool descendants = false);
|
|
|
|
virtual BSize MinSize();
|
|
virtual BSize MaxSize();
|
|
virtual BSize PreferredSize();
|
|
|
|
private:
|
|
void _DrawBlockThumb();
|
|
void _DrawTriangleThumb();
|
|
|
|
BPoint _Location() const;
|
|
void _SetLocation(BPoint p);
|
|
|
|
float _MinPosition() const;
|
|
float _MaxPosition() const;
|
|
bool _ConstrainPoint(BPoint& point, BPoint compare) const;
|
|
|
|
BSize _ValidateMinSize();
|
|
|
|
virtual void _ReservedSlider6();
|
|
virtual void _ReservedSlider7();
|
|
virtual void _ReservedSlider8();
|
|
virtual void _ReservedSlider9();
|
|
virtual void _ReservedSlider10();
|
|
virtual void _ReservedSlider11();
|
|
virtual void _ReservedSlider12();
|
|
|
|
BSlider& operator=(const BSlider &);
|
|
|
|
void _InitObject();
|
|
|
|
private:
|
|
BMessage* fModificationMessage;
|
|
int32 fSnoozeAmount;
|
|
|
|
rgb_color fBarColor;
|
|
rgb_color fFillColor;
|
|
bool fUseFillColor;
|
|
|
|
char* fMinLimitLabel;
|
|
char* fMaxLimitLabel;
|
|
const char* fUpdateText;
|
|
|
|
int32 fMinValue;
|
|
int32 fMaxValue;
|
|
int32 fKeyIncrementValue;
|
|
|
|
int32 fHashMarkCount;
|
|
hash_mark_location fHashMarks;
|
|
|
|
#if USE_OFF_SCREEN_VIEW
|
|
BBitmap* fOffScreenBits;
|
|
BView* fOffScreenView;
|
|
#endif
|
|
|
|
thumb_style fStyle;
|
|
|
|
BPoint fLocation;
|
|
BPoint fInitialLocation;
|
|
|
|
orientation fOrientation;
|
|
float fBarThickness;
|
|
|
|
BSize fMinSize;
|
|
|
|
float fMaxUpdateTextWidth;
|
|
|
|
#if USE_OFF_SCREEN_VIEW
|
|
uint32 _reserved[4];
|
|
#else
|
|
uint32 _reserved[6];
|
|
#endif
|
|
};
|
|
|
|
#endif // _SLIDER_H
|