.CtrlLib: Various improvements (spin edits, ProgressInfo) - thanks kohait00

git-svn-id: svn://ultimatepp.org/upp/trunk@3343 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
cxl 2011-04-16 18:03:39 +00:00
parent 186b91efaa
commit 59e50cbce3
3 changed files with 120 additions and 15 deletions

View file

@ -325,6 +325,8 @@ protected:
void Inc();
void Dec();
void Init();
typedef EditIntSpin CLASSNAME;
public:
EditIntSpin& SetInc(int _inc) { inc = _inc; return *this; }
@ -333,15 +335,23 @@ public:
bool IsOnSides() const { return sb.IsOnSides(); }
EditIntSpin& ShowSpin(bool s = true) { sb.Show(s); return *this; }
bool IsSpinVisible() const { return sb.IsVisible(); }
SpinButtons& SpinButtonsObject() { return sb; }
const SpinButtons& SpinButtonsObject() const { return sb; }
EditIntSpin();
EditIntSpin(int min, int max);
EditIntSpin(int inc = 1);
EditIntSpin(int min, int max, int inc = 1);
virtual ~EditIntSpin();
};
class EditIntNotNullSpin : public EditIntSpin
{
public:
EditIntNotNullSpin(int inc = 1) : EditIntSpin(inc) { NotNull(); }
EditIntNotNullSpin(int min, int max, int inc = 1) : EditIntSpin(min, max, inc) { NotNull(); }
};
class EditDoubleSpin : public EditDouble
{
public:
@ -367,6 +377,7 @@ public:
bool IsOnSides() const { return sb.IsOnSides(); }
EditDoubleSpin& ShowSpin(bool s = true) { sb.Show(s); return *this; }
bool IsSpinVisible() const { return sb.IsVisible(); }
SpinButtons& SpinButtonsObject() { return sb; }
const SpinButtons& SpinButtonsObject() const { return sb; }
@ -382,3 +393,42 @@ public:
EditDoubleNotNullSpin(double inc = 0.1) : EditDoubleSpin(inc) { NotNull(); }
EditDoubleNotNullSpin(double min, double max, double inc = 0.1) : EditDoubleSpin(min, max, inc) { NotNull(); }
};
class EditInt64Spin : public EditInt64 {
public:
virtual void MouseWheel(Point p, int zdelta, dword keyflags);
virtual bool Key(dword key, int repcnt);
protected:
SpinButtons sb;
int64 inc;
void Inc();
void Dec();
void Init();
typedef EditInt64Spin CLASSNAME;
public:
EditInt64Spin& SetInc(int64 _inc) { inc = _inc; return *this; }
int64 GetInc() const { return inc; }
EditInt64Spin& OnSides(bool b = true) { sb.OnSides(b); return *this; }
bool IsOnSides() const { return sb.IsOnSides(); }
EditInt64Spin& ShowSpin(bool s = true) { sb.Show(s); return *this; }
bool IsSpinVisible() const { return sb.IsVisible(); }
SpinButtons& SpinButtonsObject() { return sb; }
const SpinButtons& SpinButtonsObject() const { return sb; }
EditInt64Spin(int64 inc = 1);
EditInt64Spin(int64 min, int64 max, int64 inc = 1);
virtual ~EditInt64Spin();
};
class EditInt64NotNullSpin : public EditInt64Spin
{
public:
EditInt64NotNullSpin(int inc = 1) : EditInt64Spin(inc) { NotNull(); }
EditInt64NotNullSpin(int min, int max, int inc = 1) : EditInt64Spin(min, max, inc) { NotNull(); }
};

View file

@ -1062,22 +1062,13 @@ void EditIntSpin::Dec()
void EditIntSpin::Init()
{
sb.inc.WhenAction = sb.inc.WhenRepeat = callback(this, &EditIntSpin::Inc);
sb.dec.WhenAction = sb.dec.WhenRepeat = callback(this, &EditIntSpin::Dec);
sb.inc.WhenAction = sb.inc.WhenRepeat = THISBACK(Inc);
sb.dec.WhenAction = sb.dec.WhenRepeat = THISBACK(Dec);
AddFrame(sb);
inc = 1;
}
EditIntSpin::EditIntSpin()
{
Init();
}
EditIntSpin::EditIntSpin(int min, int max)
{
MinMax(min, max);
Init();
}
EditIntSpin::EditIntSpin(int inc) : inc(inc) { Init(); }
EditIntSpin::EditIntSpin(int min, int max, int inc) : EditInt(min, max), inc(inc) { Init(); }
EditIntSpin::~EditIntSpin() {}
@ -1096,6 +1087,69 @@ void EditIntSpin::MouseWheel(Point, int zdelta, dword)
Inc();
}
void EditInt64Spin::Inc()
{
if(IsReadOnly()) return;
int i = GetData();
if(IsNull(i)) {
if(IsNull(GetMin()) || GetMin() == INT64_MIN) return;
SetData(GetMin());
}
else
if(!IsNull(GetMax()) && i < GetMax())
SetData(min(i + inc, GetMax()));
else
return;
SetFocus();
SetSelection();
UpdateAction();
}
void EditInt64Spin::Dec()
{
if(IsReadOnly()) return;
int i = GetData();
if(IsNull(i)) {
if(IsNull(GetMax()) || GetMax() == INT_MAX) return;
SetData(GetMax());
}
else
if(!IsNull(GetMin()) && i > GetMin())
SetData(max(i - inc, GetMin()));
else
return;
SetFocus();
SetSelection();
UpdateAction();
}
void EditInt64Spin::Init()
{
sb.inc.WhenAction = sb.inc.WhenRepeat = THISBACK(Inc);
sb.dec.WhenAction = sb.dec.WhenRepeat = THISBACK(Dec);
AddFrame(sb);
}
EditInt64Spin::EditInt64Spin(int64 inc) : inc(inc) { Init(); }
EditInt64Spin::EditInt64Spin(int64 min, int64 max, int64 inc) : EditInt64(min, max), inc(inc) { Init(); }
EditInt64Spin::~EditInt64Spin() {}
bool EditInt64Spin::Key(dword key, int repcnt)
{
if(key == K_UP) { Inc(); return true; }
if(key == K_DOWN) { Dec(); return true; }
return EditInt64::Key(key, repcnt);
}
void EditInt64Spin::MouseWheel(Point, int zdelta, dword)
{
if(zdelta < 0)
Dec();
else
Inc();
}
EditDoubleSpin::EditDoubleSpin(double inc) : inc(inc) { Init(); }
EditDoubleSpin::EditDoubleSpin(double min, double max, double inc) : EditDouble(min, max), inc(inc) { Init(); }

View file

@ -112,6 +112,7 @@ public:
void Set(int _pos) { Set(_pos, total); }
int Get() const { return pos; }
int GetTotal() const { return total; }
void operator=(int p) { Set(p); }
void operator++() { pos++; Refresh(); }