add commandline arguments to serialize demo for xml export and Bullet import file name

update AntTweakBar version in CDTestFramework
add btCompoundShape support in BulletXmlWorldImporter (this importer is still premature/work-in-progress)
This commit is contained in:
erwin.coumans
2012-09-26 19:47:18 +00:00
parent 60c1b1918a
commit 4442a826ed
85 changed files with 59310 additions and 18485 deletions

View File

@@ -1,16 +1,14 @@
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
//
// @file TwBar.h
// @brief Tweak bar manager.
// @author Philippe Decaudin - http://www.antisphere.com
// @file TwBar.h
// @brief Tweak bar and var classes.
// @author Philippe Decaudin - http://www.antisphere.com
// @license This file is part of the AntTweakBar library.
// Copyright © 2005, 2006 Philippe Decaudin.
// For conditions of distribution and use, see License.txt
//
// notes: Private header
// TAB=4
// note: Private header
//
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
#if !defined ANT_TW_BAR_INCLUDED
@@ -19,319 +17,422 @@
#include <AntTweakBar.h>
#include "TwColors.h"
#define ANT_TWEAK_BAR_DLL "AntTweakBar"
#define ANT_TWEAK_BAR_DLL "AntTweakBar"
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
bool IsCustomType(int _Type);
struct CTwVar
{
std::string m_Name;
std::string m_Label;
std::string m_Help;
bool m_IsRoot;
bool m_DontClip;
bool m_Visible;
signed short m_LeftMargin;
signed short m_TopMargin;
color32 m_Color;
std::string m_Name;
std::string m_Label;
std::string m_Help;
bool m_IsRoot;
bool m_DontClip;
bool m_Visible;
signed short m_LeftMargin;
signed short m_TopMargin;
const color32 * m_ColorPtr;
const color32 * m_BgColorPtr;
virtual bool IsGroup() const = 0;
virtual const CTwVar * Find(const char *_Name, struct CTwVarGroup **_Parent, int *_Index) const = 0;
virtual int HasAttrib(const char *_Attrib, bool *_HasValue) const;
virtual int SetAttrib(int _AttribID, const char *_Value, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex);
virtual void SetReadOnly(bool _ReadOnly) = 0;
CTwVar() { m_IsRoot = false; m_DontClip = false; m_Visible = true; m_LeftMargin = 0; m_TopMargin = 0; m_Color = COLOR32_BLACK; }
virtual ~CTwVar() {}
virtual bool IsGroup() const = 0;
virtual bool IsCustom() const { return false; }
virtual const CTwVar * Find(const char *_Name, struct CTwVarGroup **_Parent, int *_Index) const = 0;
virtual int HasAttrib(const char *_Attrib, bool *_HasValue) const;
virtual int SetAttrib(int _AttribID, const char *_Value, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex);
virtual ERetType GetAttrib(int _AttribID, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex, std::vector<double>& outDouble, std::ostringstream& outString) const;
virtual void SetReadOnly(bool _ReadOnly) = 0;
virtual bool IsReadOnly() const = 0;
CTwVar();
virtual ~CTwVar() {}
static size_t GetDataSize(TwType _Type);
static size_t GetDataSize(TwType _Type);
};
struct CTwVarAtom : CTwVar
{
ETwType m_Type;
void * m_Ptr;
TwSetVarCallback m_SetCallback;
TwGetVarCallback m_GetCallback;
TwButtonCallback m_ButtonCallback;
void * m_ClientData;
bool m_ReadOnly;
bool m_NoSlider;
int m_KeyIncr[2]; // [0]=key_code [1]=modifiers
int m_KeyDecr[2]; // [0]=key_code [1]=modifiers
ETwType m_Type;
void * m_Ptr;
TwSetVarCallback m_SetCallback;
TwGetVarCallback m_GetCallback;
void * m_ClientData;
bool m_ReadOnly;
bool m_NoSlider;
int m_KeyIncr[2]; // [0]=key_code [1]=modifiers
int m_KeyDecr[2]; // [0]=key_code [1]=modifiers
template <typename _T> struct TVal
{
_T m_Min;
_T m_Max;
_T m_Step;
signed char m_Precision;
bool m_Hexa;
};
union UVal
{
TVal<unsigned char> m_Char;
TVal<signed char> m_Int8;
TVal<unsigned char> m_UInt8;
TVal<signed short> m_Int16;
TVal<unsigned short>m_UInt16;
TVal<signed int> m_Int32;
TVal<unsigned int> m_UInt32;
TVal<float> m_Float32;
TVal<double> m_Float64;
struct CBoolVal
{
char * m_TrueString;
char * m_FalseString;
bool m_FreeTrueString;
bool m_FreeFalseString;
} m_Bool;
struct CEnumVal // empty -> enum entries are deduced from m_Type
{
//typedef std::map<unsigned int, std::string> CEntries;
//CEntries * m_Entries;
} m_Enum;
struct CShortcutVal
{
int m_Incr[2];
int m_Decr[2];
} m_Shortcut;
struct CHelpStruct
{
int m_StructType;
} m_HelpStruct;
};
UVal m_Val;
template <typename _T> struct TVal
{
_T m_Min;
_T m_Max;
_T m_Step;
signed char m_Precision;
bool m_Hexa;
};
union UVal
{
TVal<unsigned char> m_Char;
TVal<signed char> m_Int8;
TVal<unsigned char> m_UInt8;
TVal<signed short> m_Int16;
TVal<unsigned short>m_UInt16;
TVal<signed int> m_Int32;
TVal<unsigned int> m_UInt32;
TVal<float> m_Float32;
TVal<double> m_Float64;
struct CBoolVal
{
char * m_TrueString;
char * m_FalseString;
bool m_FreeTrueString;
bool m_FreeFalseString;
} m_Bool;
struct CEnumVal // empty -> enum entries are deduced from m_Type
{
//typedef std::map<unsigned int, std::string> CEntries;
//CEntries * m_Entries;
} m_Enum;
struct CShortcutVal
{
int m_Incr[2];
int m_Decr[2];
} m_Shortcut;
struct CHelpStruct
{
int m_StructType;
} m_HelpStruct;
struct CButtonVal
{
TwButtonCallback m_Callback;
int m_Separator;
} m_Button;
struct CCustomVal
{
CTwMgr::CMemberProxy *m_MemberProxy;
} m_Custom;
};
UVal m_Val;
virtual bool IsGroup() const { return false; }
virtual void ValueToString(std::string *_Str) const;
virtual double ValueToDouble() const;
virtual void ValueFromDouble(double _Val);
virtual void MinMaxStepToDouble(double *_Min, double *_Max, double *_Step) const;
virtual const CTwVar * Find(const char *_Name, struct CTwVarGroup **_Parent, int *_Index) const;
virtual int HasAttrib(const char *_Attrib, bool *_HasValue) const;
virtual int SetAttrib(int _AttribID, const char *_Value, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex);
virtual void Increment(int _Step);
virtual void SetDefaults();
virtual void SetReadOnly(bool _ReadOnly) { if(_ReadOnly || m_SetCallback || m_Ptr) m_ReadOnly=_ReadOnly; }
//virtual int DefineEnum(const TwEnumVal *_EnumValues, unsigned int _NbValues);
CTwVarAtom();
virtual ~CTwVarAtom();
virtual bool IsGroup() const { return false; }
virtual bool IsCustom() const { return IsCustomType(m_Type); }
virtual void ValueToString(std::string *_Str) const;
virtual double ValueToDouble() const;
virtual void ValueFromDouble(double _Val);
virtual void MinMaxStepToDouble(double *_Min, double *_Max, double *_Step) const;
virtual const CTwVar * Find(const char *_Name, struct CTwVarGroup **_Parent, int *_Index) const;
virtual int HasAttrib(const char *_Attrib, bool *_HasValue) const;
virtual int SetAttrib(int _AttribID, const char *_Value, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex);
virtual ERetType GetAttrib(int _AttribID, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex, std::vector<double>& outDouble, std::ostringstream& outString) const;
virtual void Increment(int _Step);
virtual void SetDefaults();
virtual void SetReadOnly(bool _ReadOnly) { m_ReadOnly=_ReadOnly; if( m_Type!=TW_TYPE_BUTTON && m_SetCallback==NULL && m_Ptr==NULL ) m_ReadOnly=true; }
virtual bool IsReadOnly() const { if( m_Type!=TW_TYPE_BUTTON && m_SetCallback==NULL && m_Ptr==NULL ) return true; else return m_ReadOnly; }
//virtual int DefineEnum(const TwEnumVal *_EnumValues, unsigned int _NbValues);
CTwVarAtom();
virtual ~CTwVarAtom();
};
struct CTwVarGroup : CTwVar
{
std::vector<CTwVar *> m_Vars;
bool m_Open;
TwSummaryCallback m_SummaryCallback;
void * m_SummaryClientData;
void * m_StructValuePtr;
TwType m_StructType;
std::vector<CTwVar *> m_Vars;
bool m_Open;
TwSummaryCallback m_SummaryCallback;
void * m_SummaryClientData;
void * m_StructValuePtr;
TwType m_StructType;
virtual bool IsGroup() const { return true; }
virtual const CTwVar * Find(const char *_Name, CTwVarGroup **_Parent, int *_Index) const;
virtual int HasAttrib(const char *_Attrib, bool *_HasValue) const;
virtual int SetAttrib(int _AttribID, const char *_Value, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex);
virtual CTwVarAtom * FindShortcut(int _Key, int _Modifiers, bool *_DoIncr);
virtual void SetReadOnly(bool _ReadOnly) { for(size_t i=0; i<m_Vars.size(); ++i) if(m_Vars[i]) m_Vars[i]->SetReadOnly(_ReadOnly); }
CTwVarGroup() { m_Open=false; m_StructType=TW_TYPE_UNDEF; m_SummaryCallback=NULL; m_SummaryClientData=NULL; m_StructValuePtr=NULL; }
virtual ~CTwVarGroup();
virtual bool IsGroup() const { return true; }
virtual const CTwVar * Find(const char *_Name, CTwVarGroup **_Parent, int *_Index) const;
virtual int HasAttrib(const char *_Attrib, bool *_HasValue) const;
virtual int SetAttrib(int _AttribID, const char *_Value, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex);
virtual ERetType GetAttrib(int _AttribID, TwBar *_Bar, struct CTwVarGroup *_VarParent, int _VarIndex, std::vector<double>& outDouble, std::ostringstream& outString) const;
virtual CTwVarAtom * FindShortcut(int _Key, int _Modifiers, bool *_DoIncr);
virtual void SetReadOnly(bool _ReadOnly) { for(size_t i=0; i<m_Vars.size(); ++i) if(m_Vars[i]) m_Vars[i]->SetReadOnly(_ReadOnly); }
virtual bool IsReadOnly() const { for(size_t i=0; i<m_Vars.size(); ++i) if(m_Vars[i] && !m_Vars[i]->IsReadOnly()) return false; return true; }
CTwVarGroup() { m_Open=false; m_StructType=TW_TYPE_UNDEF; m_SummaryCallback=NULL; m_SummaryClientData=NULL; m_StructValuePtr=NULL; }
virtual ~CTwVarGroup();
};
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
struct CTwBar
{
std::string m_Name;
std::string m_Label;
std::string m_Help;
bool m_Visible;
int m_PosX;
int m_PosY;
int m_Width;
int m_Height;
color32 m_Color;
const CTexFont * m_Font;
int m_ValuesWidth;
int m_Sep;
int m_FirstLine;
float m_UpdatePeriod;
bool m_IsHelpBar;
int m_MinNumber; // accessed by TwDeleteBar
bool m_IsPopupList;
CTwVarAtom * m_VarEnumLinkedToPopupList;
CTwBar * m_BarLinkedToPopupList;
std::string m_Name;
std::string m_Label;
std::string m_Help;
bool m_Visible;
int m_PosX;
int m_PosY;
int m_Width;
int m_Height;
color32 m_Color;
bool m_DarkText;
const CTexFont * m_Font;
int m_ValuesWidth;
int m_Sep;
int m_LineSep;
int m_FirstLine;
float m_UpdatePeriod;
bool m_IsHelpBar;
int m_MinNumber; // accessed by TwDeleteBar
bool m_IsPopupList;
CTwVarAtom * m_VarEnumLinkedToPopupList;
CTwBar * m_BarLinkedToPopupList;
bool m_Resizable;
bool m_Movable;
bool m_Iconifiable;
bool m_Contained;
CTwVarGroup m_VarRoot;
CTwVarGroup m_VarRoot;
void NotUpToDate();
void Draw();
const CTwVar * Find(const char *_Name, CTwVarGroup **_Parent=NULL, int *_Index=NULL) const;
CTwVar * Find(const char *_Name, CTwVarGroup **_Parent=NULL, int *_Index=NULL);
int HasAttrib(const char *_Attrib, bool *_HasValue) const;
int SetAttrib(int _AttribID, const char *_Value);
bool MouseMotion(int _X, int _Y);
bool MouseButton(ETwMouseButtonID _Button, bool _Pressed, int _X, int _Y);
bool MouseWheel(int _Pos, int _PrevPos, int _MouseX, int _MouseY);
bool KeyPressed(int _Key, int _Modifiers);
bool IsMinimized() const { return m_IsMinimized; }
bool Show(CTwVar *_Var); // display the line associated to _Var
bool OpenHier(CTwVarGroup *_Root, CTwVar *_Var); // open a hierarchy if it contains _Var
int LineInHier(CTwVarGroup *_Root, CTwVar *_Var); // returns the number of the line associated to _Var
void UnHighlightLine() { m_HighlightedLine = -1; NotUpToDate(); } // used by PopupCallback
CTwBar(const char *_Name);
~CTwBar();
enum EDrawPart { DRAW_BG=(1<<0), DRAW_CONTENT=(1<<1), DRAW_ALL=DRAW_BG|DRAW_CONTENT };
void Draw(int _DrawPart=DRAW_ALL);
void NotUpToDate();
const CTwVar * Find(const char *_Name, CTwVarGroup **_Parent=NULL, int *_Index=NULL) const;
CTwVar * Find(const char *_Name, CTwVarGroup **_Parent=NULL, int *_Index=NULL);
int HasAttrib(const char *_Attrib, bool *_HasValue) const;
int SetAttrib(int _AttribID, const char *_Value);
ERetType GetAttrib(int _AttribID, std::vector<double>& outDouble, std::ostringstream& outString) const;
bool MouseMotion(int _X, int _Y);
bool MouseButton(ETwMouseButtonID _Button, bool _Pressed, int _X, int _Y);
bool MouseWheel(int _Pos, int _PrevPos, int _MouseX, int _MouseY);
bool KeyPressed(int _Key, int _Modifiers);
bool KeyTest(int _Key, int _Modifiers);
bool IsMinimized() const { return m_IsMinimized; }
bool IsDragging() const { return m_MouseDrag; }
bool Show(CTwVar *_Var); // display the line associated to _Var
bool OpenHier(CTwVarGroup *_Root, CTwVar *_Var); // open a hierarchy if it contains _Var
int LineInHier(CTwVarGroup *_Root, CTwVar *_Var); // returns the number of the line associated to _Var
void UnHighlightLine() { m_HighlightedLine = -1; NotUpToDate(); } // used by PopupCallback
void HaveFocus(bool _Focus) { m_DrawHandles = _Focus; } // used by PopupCallback
void StopEditInPlace() { if( m_EditInPlace.m_Active ) EditInPlaceEnd(false); }
CTwBar(const char *_Name);
~CTwBar();
color32 m_ColBg, m_ColBg1, m_ColBg2;
color32 m_ColHighBg;
color32 m_ColLabelText;
color32 m_ColStructText;
color32 m_ColValBg;
color32 m_ColValText;
color32 m_ColValTextRO;
color32 m_ColValMin;
color32 m_ColValMax;
color32 m_ColStructBg;
color32 m_ColTitleBg;
color32 m_ColTitleHighBg;
color32 m_ColTitleText;
color32 m_ColTitleShadow;
color32 m_ColLine;
color32 m_ColLineShadow;
color32 m_ColUnderline;
color32 m_ColBtn;
color32 m_ColHighBtn;
color32 m_ColGrpBg;
color32 m_ColGrpText;
color32 m_ColHierBg;
color32 m_ColShortcutText;
color32 m_ColShortcutBg;
color32 m_ColInfoText;
color32 m_ColHelpBg;
color32 m_ColHelpText;
color32 m_ColRoto;
color32 m_ColRotoVal;
color32 m_ColRotoBound;
void UpdateColors();
color32 m_ColBg, m_ColBg1, m_ColBg2;
color32 m_ColHighBg0;
color32 m_ColHighBg1;
color32 m_ColLabelText;
color32 m_ColStructText;
color32 m_ColValBg;
color32 m_ColValText;
color32 m_ColValTextRO;
color32 m_ColValTextNE;
color32 m_ColValMin;
color32 m_ColValMax;
color32 m_ColStructBg;
color32 m_ColTitleBg;
color32 m_ColTitleHighBg;
color32 m_ColTitleUnactiveBg;
color32 m_ColTitleText;
color32 m_ColTitleShadow;
color32 m_ColLine;
color32 m_ColLineShadow;
color32 m_ColUnderline;
color32 m_ColBtn;
color32 m_ColHighBtn;
color32 m_ColFold;
color32 m_ColHighFold;
color32 m_ColGrpBg;
color32 m_ColGrpText;
color32 m_ColHierBg;
color32 m_ColShortcutText;
color32 m_ColShortcutBg;
color32 m_ColInfoText;
color32 m_ColHelpBg;
color32 m_ColHelpText;
color32 m_ColRoto;
color32 m_ColRotoVal;
color32 m_ColRotoBound;
color32 m_ColEditBg;
color32 m_ColEditText;
color32 m_ColEditSelBg;
color32 m_ColEditSelText;
color32 m_ColSeparator;
color32 m_ColStaticText;
void UpdateColors();
protected:
int m_TitleWidth;
int m_VarX0;
int m_VarX1;
int m_VarX2;
int m_VarY0;
int m_VarY1;
int m_VarY2;
int m_ScrollYW;
int m_ScrollYH;
int m_ScrollY0;
int m_ScrollY1;
int m_NbHierLines;
int m_NbDisplayedLines;
bool m_UpToDate;
float m_LastUpdateTime;
void Update();
int m_TitleWidth;
int m_VarX0;
int m_VarX1;
int m_VarX2;
int m_VarY0;
int m_VarY1;
int m_VarY2;
int m_ScrollYW;
int m_ScrollYH;
int m_ScrollY0;
int m_ScrollY1;
int m_NbHierLines;
int m_NbDisplayedLines;
bool m_UpToDate;
float m_LastUpdateTime;
void Update();
bool m_MouseDrag;
bool m_MouseDragVar;
bool m_MouseDragTitle;
bool m_MouseDragScroll;
bool m_MouseDragResizeUR;
bool m_MouseDragResizeUL;
bool m_MouseDragResizeLR;
bool m_MouseDragResizeLL;
bool m_MouseDragValWidth;
int m_MouseOriginX;
int m_MouseOriginY;
bool m_VarHasBeenIncr;
int m_FirstLine0;
int m_HighlightedLine;
int m_HighlightedLinePrev;
bool m_HighlightIncrBtn;
bool m_HighlightDecrBtn;
bool m_HighlightClickBtn;
bool m_HighlightTitle;
bool m_HighlightScroll;
bool m_HighlightUpScroll;
bool m_HighlightDnScroll;
bool m_HighlightMinimize;
bool m_HighlightFont;
bool m_HighlightValWidth;
bool m_DrawHandles;
bool m_MouseDrag;
bool m_MouseDragVar;
bool m_MouseDragTitle;
bool m_MouseDragScroll;
bool m_MouseDragResizeUR;
bool m_MouseDragResizeUL;
bool m_MouseDragResizeLR;
bool m_MouseDragResizeLL;
bool m_MouseDragValWidth;
int m_MouseOriginX;
int m_MouseOriginY;
double m_ValuesWidthRatio;
bool m_VarHasBeenIncr;
int m_FirstLine0;
int m_HighlightedLine;
int m_HighlightedLinePrev;
int m_HighlightedLineLastValid;
bool m_HighlightIncrBtn;
bool m_HighlightDecrBtn;
bool m_HighlightRotoBtn;
bool m_HighlightListBtn;
bool m_HighlightBoolBtn;
bool m_HighlightClickBtn;
double m_HighlightClickBtnAuto;
bool m_HighlightTitle;
bool m_HighlightScroll;
bool m_HighlightUpScroll;
bool m_HighlightDnScroll;
bool m_HighlightMinimize;
bool m_HighlightFont;
bool m_HighlightValWidth;
bool m_HighlightLabelsHeader;
bool m_HighlightValuesHeader;
bool m_DrawHandles;
bool m_IsMinimized;
int m_MinPosX;
int m_MinPosY;
bool m_HighlightMaximize;
bool m_DrawIncrDecrBtn;
bool m_DrawClickBtn;
bool m_IsMinimized;
int m_MinPosX;
int m_MinPosY;
bool m_HighlightMaximize;
bool m_DrawIncrDecrBtn;
bool m_DrawRotoBtn;
bool m_DrawClickBtn;
bool m_DrawListBtn;
bool m_DrawBoolBtn;
EButtonAlign m_ButtonAlign;
struct CHierTag
{
CTwVar * m_Var;
int m_Level;
bool m_Closing;
};
std::vector<CHierTag> m_HierTags;
void BrowseHierarchy(int *_LineNum, int _CurrLevel, const CTwVar *_Var, int _First, int _Last);
void * m_TitleTextObj;
void * m_LabelsTextObj;
void * m_ValuesTextObj;
void * m_ShortcutTextObj;
int m_ShortcutLine;
void ListLabels(std::vector<std::string>& _Labels, std::vector<color32>& _Colors, const CTexFont *_Font, int _AtomWidthMax, int _GroupWidthMax);
void ListValues(std::vector<std::string>& _Values, std::vector<color32>& _Colors, std::vector<color32>& _BgColors, const CTexFont *_Font, int _WidthMax);
void DrawHierHandle();
struct CHierTag
{
CTwVar * m_Var;
int m_Level;
bool m_Closing;
};
std::vector<CHierTag> m_HierTags;
void BrowseHierarchy(int *_LineNum, int _CurrLevel, const CTwVar *_Var, int _First, int _Last);
void * m_TitleTextObj;
void * m_LabelsTextObj;
void * m_ValuesTextObj;
void * m_ShortcutTextObj;
int m_ShortcutLine;
void * m_HeadersTextObj;
void ListLabels(std::vector<std::string>& _Labels, std::vector<color32>& _Colors, std::vector<color32>& _BgColors, bool *_HasBgColors, const CTexFont *_Font, int _AtomWidthMax, int _GroupWidthMax);
void ListValues(std::vector<std::string>& _Values, std::vector<color32>& _Colors, std::vector<color32>& _BgColors, const CTexFont *_Font, int _WidthMax);
int ComputeLabelsWidth(const CTexFont *_Font);
int ComputeValuesWidth(const CTexFont *_Font);
void DrawHierHandle();
enum EValuesWidthFit { VALUES_WIDTH_FIT = -5555 };
// RotoSlider
struct CPoint
{
int x, y;
CPoint() {}
CPoint(int _X, int _Y):x(_X), y(_Y) {}
const CPoint operator+ (const CPoint& p) const { return CPoint(x+p.x, y+p.y); }
const CPoint operator- (const CPoint& p) const { return CPoint(x-p.x, y-p.y); }
};
struct CRotoSlider
{
CRotoSlider();
CTwVarAtom * m_Var;
double m_PreciseValue;
double m_CurrentValue;
double m_Value0;
double m_ValueAngle0;
bool m_Active;
bool m_ActiveMiddle;
CPoint m_Origin;
CPoint m_Current;
bool m_HasPrevious;
CPoint m_Previous;
double m_Angle0;
double m_AngleDT;
int m_Subdiv;
};
CRotoSlider m_Roto;
int m_RotoMinRadius;
int m_RotoNbSubdiv; // number of steps for one turn
void RotoDraw();
void RotoOnMouseMove(int _X, int _Y);
void RotoOnLButtonDown(int _X, int _Y);
void RotoOnLButtonUp(int _X, int _Y);
void RotoOnMButtonDown(int _X, int _Y);
void RotoOnMButtonUp(int _X, int _Y);
double RotoGetValue() const;
void RotoSetValue(double _Val);
double RotoGetMin() const;
double RotoGetMax() const;
double RotoGetStep() const;
double RotoGetSteppedValue() const;
// RotoSlider
struct CPoint
{
int x, y;
CPoint() {}
CPoint(int _X, int _Y):x(_X), y(_Y) {}
const CPoint operator+ (const CPoint& p) const { return CPoint(x+p.x, y+p.y); }
const CPoint operator- (const CPoint& p) const { return CPoint(x-p.x, y-p.y); }
};
struct CRotoSlider
{
CRotoSlider();
CTwVarAtom * m_Var;
double m_PreciseValue;
double m_CurrentValue;
double m_Value0;
double m_ValueAngle0;
bool m_Active;
bool m_ActiveMiddle;
CPoint m_Origin;
CPoint m_Current;
bool m_HasPrevious;
CPoint m_Previous;
double m_Angle0;
double m_AngleDT;
int m_Subdiv;
};
CRotoSlider m_Roto;
int m_RotoMinRadius;
int m_RotoNbSubdiv; // number of steps for one turn
void RotoDraw();
void RotoOnMouseMove(int _X, int _Y);
void RotoOnLButtonDown(int _X, int _Y);
void RotoOnLButtonUp(int _X, int _Y);
void RotoOnMButtonDown(int _X, int _Y);
void RotoOnMButtonUp(int _X, int _Y);
double RotoGetValue() const;
void RotoSetValue(double _Val);
double RotoGetMin() const;
double RotoGetMax() const;
double RotoGetStep() const;
double RotoGetSteppedValue() const;
friend struct CTwMgr;
// Edit-in-place
struct CEditInPlace
{
CEditInPlace();
~CEditInPlace();
CTwVarAtom * m_Var;
bool m_Active;
std::string m_String;
void * m_EditTextObj;
void * m_EditSelTextObj;
int m_CaretPos;
int m_SelectionStart;
int m_X, m_Y;
int m_Width;
int m_FirstChar;
std::string m_Clipboard;
};
CEditInPlace m_EditInPlace;
void EditInPlaceDraw();
bool EditInPlaceAcceptVar(const CTwVarAtom* _Var);
bool EditInPlaceIsReadOnly();
void EditInPlaceStart(CTwVarAtom* _Var, int _X, int _Y, int _Width);
void EditInPlaceEnd(bool _Commit);
bool EditInPlaceKeyPressed(int _Key, int _Modifiers);
bool EditInPlaceEraseSelect();
bool EditInPlaceMouseMove(int _X, int _Y, bool _Select);
bool EditInPlaceSetClipboard(const std::string& _String);
bool EditInPlaceGetClipboard(std::string *_OutString);
struct CCustomRecord
{
int m_IndexMin;
int m_IndexMax;
int m_XMin, m_XMax;
int m_YMin, m_YMax; // Y visible range
int m_Y0, m_Y1; // Y widget range
CTwVarGroup * m_Var;
};
typedef std::map<CTwMgr::CStructProxy*, CCustomRecord> CustomMap;
CustomMap m_CustomRecords;
CTwMgr::CStructProxy * m_CustomActiveStructProxy;
friend struct CTwMgr;
};
// ---------------------------------------------------------------------------
void DrawArc(int _X, int _Y, int _Radius, float _StartAngleDeg, float _EndAngleDeg, color32 _Color);
// ---------------------------------------------------------------------------
#endif // !defined ANT_TW_BAR_INCLUDED