1*a0795c6fSMarcus Overhagen // ValControl.h 2*a0795c6fSMarcus Overhagen // +++++ cortex integration 23aug99: 3*a0795c6fSMarcus Overhagen // - way too many protected members 4*a0795c6fSMarcus Overhagen // - config'able font 5*a0795c6fSMarcus Overhagen // - implement GetPreferredSize() (should work before the view is attached 6*a0795c6fSMarcus Overhagen // to a window -- doable?) 7*a0795c6fSMarcus Overhagen // - keyboard entry (pop-up text field) 8*a0795c6fSMarcus Overhagen // - 'spin' mode: value changes based on vertical distance of pointer 9*a0795c6fSMarcus Overhagen // (configurable; set buttons/modifiers to activate either mode?) 10*a0795c6fSMarcus Overhagen // 11*a0795c6fSMarcus Overhagen // - should parameter binding happen at this level? 12*a0795c6fSMarcus Overhagen // +++++ how about a ValControlFactory? give it a BParameter, get back a 13*a0795c6fSMarcus Overhagen // ValControl subclass... +++++ 14*a0795c6fSMarcus Overhagen // 15*a0795c6fSMarcus Overhagen // e.moon 16jan99 16*a0795c6fSMarcus Overhagen // 17*a0795c6fSMarcus Overhagen // ABSTRACT CLASS: ValControl 18*a0795c6fSMarcus Overhagen // An abstract base class for 'value controls' -- interface 19*a0795c6fSMarcus Overhagen // components that display a value that may be modified via 20*a0795c6fSMarcus Overhagen // click-drag. Other editing methods (such as 'click, then 21*a0795c6fSMarcus Overhagen // type') may be supported by subclasses. 22*a0795c6fSMarcus Overhagen // 23*a0795c6fSMarcus Overhagen // IMPLEMENT 24*a0795c6fSMarcus Overhagen // getValue() and setValue(), for raw (BParameter-style) value access 25*a0795c6fSMarcus Overhagen // MessageReceived(), to handle: 26*a0795c6fSMarcus Overhagen // M_SET_VALUE 27*a0795c6fSMarcus Overhagen // M_GET_VALUE 28*a0795c6fSMarcus Overhagen // M_OFFSET_VALUE (May be sent by segments during mouse action, 29*a0795c6fSMarcus Overhagen // +++++ is a faster method needed?) 30*a0795c6fSMarcus Overhagen // 31*a0795c6fSMarcus Overhagen // NOTES 32*a0795c6fSMarcus Overhagen // The control view consists of: 33*a0795c6fSMarcus Overhagen // 34*a0795c6fSMarcus Overhagen // - One or more segments. Each segment is individually 35*a0795c6fSMarcus Overhagen // draggable. Subclasses may mix segment types, or add 36*a0795c6fSMarcus Overhagen // and remove segments dynamically. 37*a0795c6fSMarcus Overhagen // 38*a0795c6fSMarcus Overhagen // - A manipulator region, to which subcontrols (such as 'spin 39*a0795c6fSMarcus Overhagen // arrows') may be added. 40*a0795c6fSMarcus Overhagen // 41*a0795c6fSMarcus Overhagen // Views/segments may be aligned flush left or flush right. The 42*a0795c6fSMarcus Overhagen // side towards which views are aligned may be referred to as 43*a0795c6fSMarcus Overhagen // the 'anchor' side. 44*a0795c6fSMarcus Overhagen // 45*a0795c6fSMarcus Overhagen // Quickie interface guidelines: 46*a0795c6fSMarcus Overhagen // 47*a0795c6fSMarcus Overhagen // - Value controls are always underlined, indicating that the 48*a0795c6fSMarcus Overhagen // value is editable. (+++++ possible extension: dotted-underline 49*a0795c6fSMarcus Overhagen // for continuous variation, and solid for discrete/step variation) 50*a0795c6fSMarcus Overhagen // 51*a0795c6fSMarcus Overhagen // - When a value control's 'click action' is to pop down a menu of 52*a0795c6fSMarcus Overhagen // available choices (or pop up any sort of non-typable display) 53*a0795c6fSMarcus Overhagen // this should be indicated by a small right triangle in the 54*a0795c6fSMarcus Overhagen // manipulator area. 55*a0795c6fSMarcus Overhagen // +++++ this may need some clarification; pop-down sliders, for example? 56*a0795c6fSMarcus Overhagen // 57*a0795c6fSMarcus Overhagen // * HISTORY 58*a0795c6fSMarcus Overhagen // e.moon 19sep99 Cleanup 59*a0795c6fSMarcus Overhagen // e.moon 23aug99 begun Cortex integration 60*a0795c6fSMarcus Overhagen // e.moon 17jan99 started 61*a0795c6fSMarcus Overhagen 62*a0795c6fSMarcus Overhagen #ifndef __ValControl_H__ 63*a0795c6fSMarcus Overhagen #define __ValControl_H__ 64*a0795c6fSMarcus Overhagen 65*a0795c6fSMarcus Overhagen #include <vector> 66*a0795c6fSMarcus Overhagen 67*a0795c6fSMarcus Overhagen #include <Bitmap.h> 68*a0795c6fSMarcus Overhagen #include <View.h> 69*a0795c6fSMarcus Overhagen #include <Font.h> 70*a0795c6fSMarcus Overhagen #include <Control.h> 71*a0795c6fSMarcus Overhagen #include <Message.h> 72*a0795c6fSMarcus Overhagen 73*a0795c6fSMarcus Overhagen #include "ValCtrlLayoutEntry.h" 74*a0795c6fSMarcus Overhagen 75*a0795c6fSMarcus Overhagen #include "cortex_defs.h" 76*a0795c6fSMarcus Overhagen __BEGIN_CORTEX_NAMESPACE 77*a0795c6fSMarcus Overhagen 78*a0795c6fSMarcus Overhagen class ValControlSegment; 79*a0795c6fSMarcus Overhagen 80*a0795c6fSMarcus Overhagen // ---------------------------------------------------------------- // 81*a0795c6fSMarcus Overhagen 82*a0795c6fSMarcus Overhagen 83*a0795c6fSMarcus Overhagen /* abstract */ 84*a0795c6fSMarcus Overhagen class ValControl : public BControl { 85*a0795c6fSMarcus Overhagen typedef BControl _inherited; 86*a0795c6fSMarcus Overhagen 87*a0795c6fSMarcus Overhagen public: // types & constants 88*a0795c6fSMarcus Overhagen // child-view alignment options: 89*a0795c6fSMarcus Overhagen enum align_mode { 90*a0795c6fSMarcus Overhagen ALIGN_FLUSH_LEFT, 91*a0795c6fSMarcus Overhagen ALIGN_FLUSH_RIGHT 92*a0795c6fSMarcus Overhagen }; 93*a0795c6fSMarcus Overhagen 94*a0795c6fSMarcus Overhagen // alignment flags +++++ 23aug99: not implemented -- should they be? 95*a0795c6fSMarcus Overhagen enum align_flags { 96*a0795c6fSMarcus Overhagen ALIGN_NONE = 0, 97*a0795c6fSMarcus Overhagen ALIGN_GROW = 1 98*a0795c6fSMarcus Overhagen }; 99*a0795c6fSMarcus Overhagen 100*a0795c6fSMarcus Overhagen // should value update messages be sent asynchronously (during 101*a0795c6fSMarcus Overhagen // a mouse operation) or synchronously (after the mouse is 102*a0795c6fSMarcus Overhagen // released)? 103*a0795c6fSMarcus Overhagen enum update_mode { 104*a0795c6fSMarcus Overhagen UPDATE_ASYNC, 105*a0795c6fSMarcus Overhagen UPDATE_SYNC 106*a0795c6fSMarcus Overhagen }; 107*a0795c6fSMarcus Overhagen 108*a0795c6fSMarcus Overhagen enum entry_location { 109*a0795c6fSMarcus Overhagen LEFT_MOST = 0, 110*a0795c6fSMarcus Overhagen FROM_LEFT = 0, 111*a0795c6fSMarcus Overhagen RIGHT_MOST = 1, 112*a0795c6fSMarcus Overhagen FROM_RIGHT = 1 113*a0795c6fSMarcus Overhagen }; 114*a0795c6fSMarcus Overhagen 115*a0795c6fSMarcus Overhagen // layout system state +++++ 116*a0795c6fSMarcus Overhagen 117*a0795c6fSMarcus Overhagen public: // types 118*a0795c6fSMarcus Overhagen 119*a0795c6fSMarcus Overhagen public: // messages (all ValControl-related messages go here!) 120*a0795c6fSMarcus Overhagen enum message_t { 121*a0795c6fSMarcus Overhagen 122*a0795c6fSMarcus Overhagen // Set value of a control or segment: 123*a0795c6fSMarcus Overhagen // [your value field(s)] or "_value" (string) 124*a0795c6fSMarcus Overhagen M_SET_VALUE = ValControl_message_base, 125*a0795c6fSMarcus Overhagen 126*a0795c6fSMarcus Overhagen // Request for value of control/segment: 127*a0795c6fSMarcus Overhagen // [your value field(s)] 128*a0795c6fSMarcus Overhagen M_GET_VALUE, 129*a0795c6fSMarcus Overhagen 130*a0795c6fSMarcus Overhagen // ... reply to M_GET_VALUE with this: 131*a0795c6fSMarcus Overhagen // [your value field(s)] 132*a0795c6fSMarcus Overhagen M_VALUE 133*a0795c6fSMarcus Overhagen }; 134*a0795c6fSMarcus Overhagen 135*a0795c6fSMarcus Overhagen public: // hooks 136*a0795c6fSMarcus Overhagen 137*a0795c6fSMarcus Overhagen // * parameter-mode value access 138*a0795c6fSMarcus Overhagen 139*a0795c6fSMarcus Overhagen // called to set the control's value from raw BParameter data 140*a0795c6fSMarcus Overhagen virtual void setValue( 141*a0795c6fSMarcus Overhagen const void* data, 142*a0795c6fSMarcus Overhagen size_t size)=0; 143*a0795c6fSMarcus Overhagen 144*a0795c6fSMarcus Overhagen // called to request the control's value in raw form 145*a0795c6fSMarcus Overhagen virtual void getValue( 146*a0795c6fSMarcus Overhagen void* data, 147*a0795c6fSMarcus Overhagen size_t* ioSize)=0; 148*a0795c6fSMarcus Overhagen 149*a0795c6fSMarcus Overhagen // * string value access 150*a0795c6fSMarcus Overhagen 151*a0795c6fSMarcus Overhagen virtual status_t setValueFrom( 152*a0795c6fSMarcus Overhagen const char* text)=0; 153*a0795c6fSMarcus Overhagen 154*a0795c6fSMarcus Overhagen virtual status_t getString( 155*a0795c6fSMarcus Overhagen BString& buffer)=0; 156*a0795c6fSMarcus Overhagen 157*a0795c6fSMarcus Overhagen // called when a child view's preferred size has changed; 158*a0795c6fSMarcus Overhagen // it's up to the ValControl to grant the resize request. 159*a0795c6fSMarcus Overhagen // Return true to notify the child that the request has 160*a0795c6fSMarcus Overhagen // been granted, or false if denied (the default.) 161*a0795c6fSMarcus Overhagen 162*a0795c6fSMarcus Overhagen virtual bool childResizeRequest( 163*a0795c6fSMarcus Overhagen BView* child) { return false; } 164*a0795c6fSMarcus Overhagen 165*a0795c6fSMarcus Overhagen public: // ctor/dtor/accessors 166*a0795c6fSMarcus Overhagen virtual ~ValControl(); 167*a0795c6fSMarcus Overhagen 168*a0795c6fSMarcus Overhagen // value-access methods are left up to the subclasses, 169*a0795c6fSMarcus Overhagen // since they'll take varying types of arguments. 170*a0795c6fSMarcus Overhagen // (M_SET_VALUE and M_GET_VALUE should always behave 171*a0795c6fSMarcus Overhagen // as you'd expect, with a 'value' field of the appropriate 172*a0795c6fSMarcus Overhagen // type replacing or returning the current value.) +++++ decrepit 173*a0795c6fSMarcus Overhagen // 174*a0795c6fSMarcus Overhagen // Note that all implementations offering pop-up keyboard entry 175*a0795c6fSMarcus Overhagen // must accept an M_SET_VALUE with a value of B_STRING_TYPE. 176*a0795c6fSMarcus Overhagen 177*a0795c6fSMarcus Overhagen // get/set update mode (determines whether value updates are 178*a0795c6fSMarcus Overhagen // sent to the target during mouse operations, or only on 179*a0795c6fSMarcus Overhagen // mouse-up) 180*a0795c6fSMarcus Overhagen update_mode updateMode() const; 181*a0795c6fSMarcus Overhagen void setUpdateMode( 182*a0795c6fSMarcus Overhagen update_mode mode); 183*a0795c6fSMarcus Overhagen 184*a0795c6fSMarcus Overhagen // +++++ get/set font used by segments 185*a0795c6fSMarcus Overhagen // (would separate 'value' and 'label' fonts be a good move?) 186*a0795c6fSMarcus Overhagen // const BFont* font() const; 187*a0795c6fSMarcus Overhagen 188*a0795c6fSMarcus Overhagen const BFont* labelFont() const; //nyi 189*a0795c6fSMarcus Overhagen void setLabelFont( 190*a0795c6fSMarcus Overhagen const BFont* labelFont); //nyi 191*a0795c6fSMarcus Overhagen 192*a0795c6fSMarcus Overhagen const BFont* valueFont() const; //nyi 193*a0795c6fSMarcus Overhagen void setValueFont( 194*a0795c6fSMarcus Overhagen const BFont* valueFont); //nyi 195*a0795c6fSMarcus Overhagen 196*a0795c6fSMarcus Overhagen // get baseline y offset: this is measured relative to the top of the 197*a0795c6fSMarcus Overhagen // view 198*a0795c6fSMarcus Overhagen float baselineOffset() const; 199*a0795c6fSMarcus Overhagen 200*a0795c6fSMarcus Overhagen // segment padding: this amount of padding is added to the 201*a0795c6fSMarcus Overhagen // right of each segment bounds-rectangle 202*a0795c6fSMarcus Overhagen float segmentPadding() const; 203*a0795c6fSMarcus Overhagen 204*a0795c6fSMarcus Overhagen // fast drag rate: returns ratio of pixels:units for fast 205*a0795c6fSMarcus Overhagen // (left-button) dragging 206*a0795c6fSMarcus Overhagen float fastDragRate() const; //nyi 207*a0795c6fSMarcus Overhagen 208*a0795c6fSMarcus Overhagen // slow drag rate: returns ratio for precise (both/middle-button) 209*a0795c6fSMarcus Overhagen // dragging 210*a0795c6fSMarcus Overhagen float slowDragRate() const; //nyi 211*a0795c6fSMarcus Overhagen 212*a0795c6fSMarcus Overhagen // fetch back-buffer 213*a0795c6fSMarcus Overhagen BView* backBufferView() const; //nyi 214*a0795c6fSMarcus Overhagen BBitmap* backBuffer() const; //nyi 215*a0795c6fSMarcus Overhagen 216*a0795c6fSMarcus Overhagen // pop up keyboard input field 217*a0795c6fSMarcus Overhagen // +++++ should this turn into a message? 218*a0795c6fSMarcus Overhagen virtual void showEditField(); 219*a0795c6fSMarcus Overhagen 220*a0795c6fSMarcus Overhagen public: // debugging [23aug99] 221*a0795c6fSMarcus Overhagen virtual void dump(); 222*a0795c6fSMarcus Overhagen 223*a0795c6fSMarcus Overhagen public: // BControl impl. 224*a0795c6fSMarcus Overhagen // SetValue(), Value() aren't defined, since they only support 225*a0795c6fSMarcus Overhagen // 32-bit integer values. TextControl provides a precedent for 226*a0795c6fSMarcus Overhagen // this kind of naughtiness. 227*a0795c6fSMarcus Overhagen 228*a0795c6fSMarcus Overhagen // empty implementation (hands off to BControl) 229*a0795c6fSMarcus Overhagen virtual void SetEnabled( 230*a0795c6fSMarcus Overhagen bool enabled); 231*a0795c6fSMarcus Overhagen 232*a0795c6fSMarcus Overhagen public: // BView impl. 233*a0795c6fSMarcus Overhagen 234*a0795c6fSMarcus Overhagen // handle initial layout stuff: 235*a0795c6fSMarcus Overhagen virtual void AttachedToWindow(); 236*a0795c6fSMarcus Overhagen virtual void AllAttached(); 237*a0795c6fSMarcus Overhagen 238*a0795c6fSMarcus Overhagen // paint decorations (& decimal point) 239*a0795c6fSMarcus Overhagen virtual void Draw( 240*a0795c6fSMarcus Overhagen BRect updateRect); 241*a0795c6fSMarcus Overhagen 242*a0795c6fSMarcus Overhagen virtual void drawDecimalPoint( 243*a0795c6fSMarcus Overhagen ValCtrlLayoutEntry& entry); 244*a0795c6fSMarcus Overhagen 245*a0795c6fSMarcus Overhagen // handle frame resize (grow backbuffer if need be) 246*a0795c6fSMarcus Overhagen virtual void FrameResized( 247*a0795c6fSMarcus Overhagen float width, 248*a0795c6fSMarcus Overhagen float height); 249*a0795c6fSMarcus Overhagen 250*a0795c6fSMarcus Overhagen // calculate minimum size 251*a0795c6fSMarcus Overhagen virtual void GetPreferredSize( 252*a0795c6fSMarcus Overhagen float* outWidth, 253*a0795c6fSMarcus Overhagen float* outHeight); 254*a0795c6fSMarcus Overhagen 255*a0795c6fSMarcus Overhagen virtual void MakeFocus( 256*a0795c6fSMarcus Overhagen bool focused=true); 257*a0795c6fSMarcus Overhagen 258*a0795c6fSMarcus Overhagen virtual void MouseDown( 259*a0795c6fSMarcus Overhagen BPoint where); 260*a0795c6fSMarcus Overhagen 261*a0795c6fSMarcus Overhagen public: // BHandler impl. 262*a0795c6fSMarcus Overhagen virtual void MessageReceived( 263*a0795c6fSMarcus Overhagen BMessage* message); 264*a0795c6fSMarcus Overhagen 265*a0795c6fSMarcus Overhagen public: // archiving/instantiation 266*a0795c6fSMarcus Overhagen ValControl( 267*a0795c6fSMarcus Overhagen BMessage* archive); 268*a0795c6fSMarcus Overhagen 269*a0795c6fSMarcus Overhagen status_t Archive( 270*a0795c6fSMarcus Overhagen BMessage* archive, 271*a0795c6fSMarcus Overhagen bool deep=true) const; 272*a0795c6fSMarcus Overhagen 273*a0795c6fSMarcus Overhagen protected: // internal ctor/operations 274*a0795c6fSMarcus Overhagen ValControl( 275*a0795c6fSMarcus Overhagen BRect frame, 276*a0795c6fSMarcus Overhagen const char* name, 277*a0795c6fSMarcus Overhagen const char* label, 278*a0795c6fSMarcus Overhagen BMessage* message, 279*a0795c6fSMarcus Overhagen align_mode alignMode, 280*a0795c6fSMarcus Overhagen align_flags alignFlags, 281*a0795c6fSMarcus Overhagen update_mode updateMode=UPDATE_ASYNC, 282*a0795c6fSMarcus Overhagen bool backBuffer=true); 283*a0795c6fSMarcus Overhagen 284*a0795c6fSMarcus Overhagen // add segment view (which is responsible for generating its 285*a0795c6fSMarcus Overhagen // own ValCtrlLayoutEntry) 286*a0795c6fSMarcus Overhagen void add( 287*a0795c6fSMarcus Overhagen ValControlSegment* segment, 288*a0795c6fSMarcus Overhagen entry_location from, 289*a0795c6fSMarcus Overhagen uint16 distance=0); 290*a0795c6fSMarcus Overhagen 291*a0795c6fSMarcus Overhagen // add general view (manipulator, label, etc.) 292*a0795c6fSMarcus Overhagen // (the entry's frame rectangle will be filled in) 293*a0795c6fSMarcus Overhagen // covers ValCtrlLayoutEntry ctor: 294*a0795c6fSMarcus Overhagen void add( 295*a0795c6fSMarcus Overhagen ValCtrlLayoutEntry& entry, 296*a0795c6fSMarcus Overhagen entry_location from); 297*a0795c6fSMarcus Overhagen 298*a0795c6fSMarcus Overhagen // access child-view ValCtrlLayoutEntry 299*a0795c6fSMarcus Overhagen // (indexOf returns index from left) 300*a0795c6fSMarcus Overhagen const ValCtrlLayoutEntry& entryAt( 301*a0795c6fSMarcus Overhagen uint16 offset) const; 302*a0795c6fSMarcus Overhagen 303*a0795c6fSMarcus Overhagen const ValCtrlLayoutEntry& entryAt( 304*a0795c6fSMarcus Overhagen entry_location from, 305*a0795c6fSMarcus Overhagen uint16 distance=0) const; 306*a0795c6fSMarcus Overhagen 307*a0795c6fSMarcus Overhagen uint16 indexOf( 308*a0795c6fSMarcus Overhagen BView* child) const; 309*a0795c6fSMarcus Overhagen 310*a0795c6fSMarcus Overhagen uint16 countEntries() const; 311*a0795c6fSMarcus Overhagen 312*a0795c6fSMarcus Overhagen private: // steaming entrails 313*a0795c6fSMarcus Overhagen 314*a0795c6fSMarcus Overhagen // (re-)initialize the backbuffer 315*a0795c6fSMarcus Overhagen void _allocBackBuffer( 316*a0795c6fSMarcus Overhagen float width, 317*a0795c6fSMarcus Overhagen float height); 318*a0795c6fSMarcus Overhagen 319*a0795c6fSMarcus Overhagen // insert a layout entry in ordered position (doesn't call 320*a0795c6fSMarcus Overhagen // AddChild()) 321*a0795c6fSMarcus Overhagen void _insertEntry( 322*a0795c6fSMarcus Overhagen ValCtrlLayoutEntry& entry, 323*a0795c6fSMarcus Overhagen uint16 index); 324*a0795c6fSMarcus Overhagen 325*a0795c6fSMarcus Overhagen // move given entry horizontally (update child view's position 326*a0795c6fSMarcus Overhagen // and size as well, if any) 327*a0795c6fSMarcus Overhagen void _slideEntry( 328*a0795c6fSMarcus Overhagen int index, 329*a0795c6fSMarcus Overhagen float delta); 330*a0795c6fSMarcus Overhagen 331*a0795c6fSMarcus Overhagen // turn entry_location/offset into an index: 332*a0795c6fSMarcus Overhagen uint16 _locationToIndex( 333*a0795c6fSMarcus Overhagen entry_location from, 334*a0795c6fSMarcus Overhagen uint16 distance=0) const; 335*a0795c6fSMarcus Overhagen 336*a0795c6fSMarcus Overhagen void _getDefaultEntrySize( 337*a0795c6fSMarcus Overhagen ValCtrlLayoutEntry::entry_type type, 338*a0795c6fSMarcus Overhagen float* outWidth, 339*a0795c6fSMarcus Overhagen float* outHeight); 340*a0795c6fSMarcus Overhagen 341*a0795c6fSMarcus Overhagen void _invalidateAll(); 342*a0795c6fSMarcus Overhagen 343*a0795c6fSMarcus Overhagen protected: // impl. members 344*a0795c6fSMarcus Overhagen 345*a0795c6fSMarcus Overhagen // the set of visible segments and other child views, 346*a0795c6fSMarcus Overhagen // in left-to-right. top-to-bottom order 347*a0795c6fSMarcus Overhagen typedef vector<ValCtrlLayoutEntry> layout_set; 348*a0795c6fSMarcus Overhagen layout_set m_layoutSet; 349*a0795c6fSMarcus Overhagen 350*a0795c6fSMarcus Overhagen // true if value has been changed since last request 351*a0795c6fSMarcus Overhagen // (allows caching of value) 352*a0795c6fSMarcus Overhagen bool m_dirty; 353*a0795c6fSMarcus Overhagen 354*a0795c6fSMarcus Overhagen // when should messages be sent to the target? 355*a0795c6fSMarcus Overhagen update_mode m_updateMode; 356*a0795c6fSMarcus Overhagen 357*a0795c6fSMarcus Overhagen // layout stuff 358*a0795c6fSMarcus Overhagen // BFont m_font; 359*a0795c6fSMarcus Overhagen 360*a0795c6fSMarcus Overhagen BFont m_labelFont; 361*a0795c6fSMarcus Overhagen BFont m_valueFont; 362*a0795c6fSMarcus Overhagen 363*a0795c6fSMarcus Overhagen align_mode m_alignMode; 364*a0795c6fSMarcus Overhagen align_flags m_alignFlags; 365*a0795c6fSMarcus Overhagen 366*a0795c6fSMarcus Overhagen // the bounds rectangle requested upon construction. 367*a0795c6fSMarcus Overhagen // if the ALIGN_GROW flag is set, the real bounds 368*a0795c6fSMarcus Overhagen // rectangle may be wider 369*a0795c6fSMarcus Overhagen BRect m_origBounds; 370*a0795c6fSMarcus Overhagen 371*a0795c6fSMarcus Overhagen // backbuffer (made available to segments for flicker-free 372*a0795c6fSMarcus Overhagen // drawing) 373*a0795c6fSMarcus Overhagen bool m_haveBackBuffer; 374*a0795c6fSMarcus Overhagen BBitmap* m_backBuffer; 375*a0795c6fSMarcus Overhagen BView* m_backBufferView; 376*a0795c6fSMarcus Overhagen 377*a0795c6fSMarcus Overhagen static const float s_segmentPadding; 378*a0795c6fSMarcus Overhagen 379*a0795c6fSMarcus Overhagen static const float s_decimalPointWidth; 380*a0795c6fSMarcus Overhagen static const float s_decimalPointHeight; 381*a0795c6fSMarcus Overhagen 382*a0795c6fSMarcus Overhagen private: // guts 383*a0795c6fSMarcus Overhagen class fnInitChild; 384*a0795c6fSMarcus Overhagen }; 385*a0795c6fSMarcus Overhagen 386*a0795c6fSMarcus Overhagen __END_CORTEX_NAMESPACE 387*a0795c6fSMarcus Overhagen #endif /* __ValControl_H__ */ 388