haiku/headers/os/interface/ScrollBar.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

147 lines
4.4 KiB
C++

/*
* Copyright (c) 2001-2008, Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT license.
*
* Authors:
* Marc Flerackers (mflerackers@androme.be)
* DarkWyrm (bpmagic@columbus.rr.com)
* Stefano Ceccherini (burton666@libero.it)
* Stephan Aßmus <superstippi@gmx.de>
*/
#ifndef _SCROLL_BAR_H
#define _SCROLL_BAR_H
#include <BeBuild.h>
#include <View.h>
#define B_V_SCROLL_BAR_WIDTH 14.0f
#define B_H_SCROLL_BAR_HEIGHT 14.0f
// TODO: shouldn't these be moved into the implementation?
#define SCROLL_BAR_MAXIMUM_KNOB_SIZE 50
#define SCROLL_BAR_MINIMUM_KNOB_SIZE 9
#define DISABLES_ON_WINDOW_DEACTIVATION 1
class BScrollBar : public BView {
public:
BScrollBar(BRect frame, const char* name,
BView* target, float min, float max,
orientation direction);
BScrollBar(const char* name, BView* target,
float min, float max, orientation direction);
BScrollBar(BMessage* data);
virtual ~BScrollBar();
static BArchivable* Instantiate(BMessage* data);
virtual status_t Archive(BMessage *data, bool deep = true) const;
virtual void AttachedToWindow();
void SetValue(float value);
float Value() const;
void SetProportion(float);
float Proportion() const;
virtual void ValueChanged(float newValue);
void SetRange(float min, float max);
void GetRange(float* _min, float* _max) const;
void SetSteps(float smallStep, float largeStep);
void GetSteps(float* _smallStep,
float* _largeStep) const;
void SetTarget(BView *target);
void SetTarget(const char* targetName);
BView* Target() const;
void SetOrientation(enum orientation orientation);
orientation Orientation() const;
// TODO: make this a virtual method, it should be one,
// but it's not important right now. This is supposed
// to be used in case the BScrollBar should draw part of
// the focus indication of the target view for aesthetical
// reasons. BScrollView will forward this method.
status_t SetBorderHighlighted(bool state);
virtual void MessageReceived(BMessage* message);
virtual void MouseDown(BPoint pt);
virtual void MouseUp(BPoint pt);
virtual void MouseMoved(BPoint pt, uint32 code,
const BMessage* dragMessage);
virtual void DetachedFromWindow();
virtual void Draw(BRect updateRect);
virtual void FrameMoved(BPoint new_position);
virtual void FrameResized(float newWidth, float newHeight);
virtual BHandler* ResolveSpecifier(BMessage* message,
int32 index, BMessage* specifier,
int32 form, const char* property);
virtual void ResizeToPreferred();
virtual void GetPreferredSize(float* _width, float* _height);
virtual void MakeFocus(bool state = true);
virtual void AllAttached();
virtual void AllDetached();
virtual status_t GetSupportedSuites(BMessage* data);
virtual BSize MinSize();
virtual BSize MaxSize();
virtual BSize PreferredSize();
virtual status_t Perform(perform_code d, void* arg);
#if DISABLES_ON_WINDOW_DEACTIVATION
virtual void WindowActivated(bool active);
#endif
private:
class Private;
friend class Private;
friend status_t control_scrollbar(scroll_bar_info* info,
BScrollBar *bar);
// for use within the preflet
virtual void _ReservedScrollBar1();
virtual void _ReservedScrollBar2();
virtual void _ReservedScrollBar3();
virtual void _ReservedScrollBar4();
// disabled
BScrollBar& operator=(const BScrollBar& other);
bool _DoubleArrows() const;
void _UpdateThumbFrame();
float _ValueFor(BPoint where) const;
int32 _ButtonFor(BPoint where) const;
BRect _ButtonRectFor(int32 button) const;
void _UpdateTargetValue(BPoint where);
void _UpdateArrowButtons();
void _DrawDisabledBackground(BRect area,
const rgb_color& light,
const rgb_color& dark,
const rgb_color& fill);
void _DrawArrowButton(int32 direction,
bool doubleArrows, BRect frame,
const BRect& updateRect,
bool enabled, bool down);
BSize _MinSize() const;
float fMin;
float fMax;
float fSmallStep;
float fLargeStep;
float fValue;
float fProportion;
BView* fTarget;
orientation fOrientation;
char* fTargetName;
Private* fPrivateData;
uint32 _reserved[3];
};
#endif // _SCROLL_BAR_H