/* * Copyright (c) 1999-2000, Eric Moon. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions, and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions, and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ // NumericValControl.h // * PURPOSE // Extends ValControl to provide the basis for a variety // of numeric UI controls. // * HISTORY // e.moon 18sep99 General cleanup; values are now stored // in fixed-point form only. // e.moon 17jan99 Begun // +++++ 31jan99: negatives are still handled wrong... // // CLASS: NumericValControl #ifndef NUMERIC_VAL_CONTROL_H #define NUMERIC_VAL_CONTROL_H #include "cortex_defs.h" #include "ValControl.h" #include class BContinuousParameter; __BEGIN_CORTEX_NAMESPACE class ValControlDigitSegment; class NumericValControl : public ValControl { public: typedef ValControl _inherited; public: // +++++ need control over number of segments +++++ // parameter-linked ctor NumericValControl(BRect frame, const char* name, BContinuousParameter* param, uint16 wholeDigits, uint16 fractionalDigits = 0, align_mode alignMode = ALIGN_FLUSH_RIGHT, align_flags alignFlags = ALIGN_NONE); // 'plain' ctor NumericValControl(BRect frame, const char* name, BMessage* message, uint16 wholeDigits, uint16 fractionalDigits = 0, bool negativeVisible = true, align_mode alignMode = ALIGN_FLUSH_RIGHT, align_flags alignFlags = ALIGN_NONE); ~NumericValControl(); BContinuousParameter* param() const; // bound parameter, or 0 if none void getConstraints(double* outMinValue, double* outMaxValue); // value constraints (by default, the min/max allowed by the ctor // settings: wholeDigits, fractionalDigits, and negativeVisible) status_t setConstraints(double minValue, double maxValue); // the current value is not yet re-constrained by this call double value() const; // fetches the current value (calculated on the spot from each // segment.) void setValue(double value, bool setParam = false); // set the displayed value (and, if setParam is true, the // linked parameter.) The value will be constrained if necessary. public: // segment interface // 18sep99: old segment interface // virtual void offsetValue(double dfDelta); // 18sep99: new segment interface. 'offset' is given // in the segment's units. virtual void offsetSegmentValue(ValControlDigitSegment* segment, int64 offset); public: virtual void mediaParameterChanged(); virtual void updateParameter(double value); // writes the stored value to the bound parameter virtual void initSegments(); virtual void initConstraintsFromParam(); public: // ValControl impl. void setValue(const void* data, size_t size); //nyi void getValue(void* data, size_t* ioSize); //nyi // string value access virtual status_t setValueFrom(const char* text); virtual status_t getString(BString& buffer); public: virtual void MessageReceived(BMessage* message); protected: // internal operations virtual void _SetDefaultConstraints(bool negativeVisible); private: int64 _ValueFixed() const; //nyi // calculates the current value as an int64 void _SetValueFixed(int64 fixed); //nyi // sets the value of each segment based on an int64 value; // does not constrain the value protected: // double m_dfValue; removed 18sep99 BContinuousParameter* fParam; // bound parameter uint16 fWholeDigits; uint16 fFractionalDigits; // constraints int64 fMinFixed; int64 fMaxFixed; }; __END_CORTEX_NAMESPACE #endif /* NUMERIC_VAL_CONTROL_H */