haiku/headers/os/interface/Slider.h
Stephan Aßmus 2f86ba4557 Implemented a new look for the Haiku interface controls. It was
overheard that they looked too ninety-ish.
TODO: The code behind this is work in progress. The basic idea
is to extract all drawing code into a new class BControlLook,
of which there is a global instance be_control_look, instantiated
in InterfaceDefs.cpp. At the moment, all the old drawing code is
still there, and the usage of be_control_look is inside if-bodies
checking the instance against NULL. In another words, by not
instanitating be_control_look, you can revert back to the old look.
BControlLook's job is to provide reusable methods for drawing
certain types of frames, backgrounds and labels, so that application
developers can make controls that re-use the same drawing code
as built-in controls and adopt to changes made there. I have added
the notion of "borders". Each of the frame drawing methods can be
made to draw certain borders only, which is supposed to help when
controls shall visually attach. This feature is not fully explored
at all ATM.
TODO: Update BColumnListView header view and BStringItem text
spacing. Update other apps where it makes sense to use BControlLook.
For the moment, only Tracker and LaunchBox are updated. More...
NOTE: The new look is not very radically different, so that existing
apps do not immediately look too ugly or out of place.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29221 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-02-15 18:23:19 +00:00

227 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 code, void* data);
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 _InitBarColor();
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