mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 14:16:09 -06:00
-Paint and style overhaul -Repos fix git-svn-id: svn://ultimatepp.org/upp/trunk@2535 f0d560ea-af0d-0410-9eb7-867de7ffcac7
106 lines
2.1 KiB
C++
106 lines
2.1 KiB
C++
#include "ExpandFrame.h"
|
|
|
|
void ExpanderCtrl::Layout()
|
|
{
|
|
Repos();
|
|
scroll.SetPage(Hv(GetSize()));
|
|
UpdateScrollBar();
|
|
}
|
|
|
|
void ExpanderCtrl::ChildMouseEvent(Ctrl *child, int event, Point p, int zdelta, dword keyflags)
|
|
{
|
|
int i = -1;
|
|
if (event == MOUSEWHEEL)
|
|
scroll.Wheel(zdelta);
|
|
}
|
|
|
|
ExpandFrame & ExpanderCtrl::AddExpander(Ctrl &c, bool expand, int size)
|
|
{
|
|
int sz = (size < 0) ? Hv(c.GetMinSize())
|
|
: (IsHorz() ? HorzLayoutZoom(size) : VertLayoutZoom(size));
|
|
ExpandFrame &e = exp.Add();
|
|
e.Set(c, sz, IsHorz() ? ExpandFrame::LEFT : ExpandFrame::TOP);
|
|
if (IsHorz()) {
|
|
e.VSizePos();
|
|
e.LeftPos(0, 0);
|
|
}
|
|
else {
|
|
e.HSizePos();
|
|
e.TopPos(0, 0);
|
|
}
|
|
e <<= THISBACK(OnExpand);
|
|
Add(e);
|
|
e.Expand(expand);
|
|
Repos();
|
|
if (GetCount() == 1) scroll.SetLine(Hv(e.GetMinSize()));
|
|
return e;
|
|
}
|
|
|
|
ExpanderCtrl & ExpanderCtrl::Horz(bool v)
|
|
{
|
|
if (v == horz) return *this;
|
|
|
|
horz = v;
|
|
scroll.Horz(v);
|
|
if (horz)
|
|
for (int i = 0; i < exp.GetCount(); i++)
|
|
exp[i].Left(*exp[i].GetLastChild());
|
|
else
|
|
for (int i = 0; i < exp.GetCount(); i++)
|
|
exp[i].Top(*exp[i].GetLastChild());
|
|
Repos();
|
|
return *this;
|
|
}
|
|
|
|
void ExpanderCtrl::UpdateScrollBar()
|
|
{
|
|
Size sz(0, 0);
|
|
for (int i = 0; i < GetCount(); i++)
|
|
sz += exp[i].GetStdSize();
|
|
scroll.SetTotal(Hv(sz));
|
|
}
|
|
|
|
void ExpanderCtrl::OnScroll()
|
|
{
|
|
Repos();
|
|
scroller.Scroll(*this, scroll.Get());
|
|
}
|
|
|
|
void ExpanderCtrl::OnExpand()
|
|
{
|
|
int p = scroll.Get();
|
|
Repos();
|
|
if (p != scroll.Get())
|
|
OnScroll();
|
|
}
|
|
|
|
void ExpanderCtrl::Repos()
|
|
{
|
|
if (!GetCount()) return;
|
|
Rect r = GetSize();
|
|
Size sz = r.GetSize();
|
|
int &var = IsHorz() ? sz.cx : sz.cy;
|
|
int total = 0;
|
|
Point off = IsHorz() ? Point(-scroll.Get(), 0) : Point(0, -scroll.Get());
|
|
for (int i = 0; i < GetCount(); i++) {
|
|
ExpandFrame &e = exp[i];
|
|
int intsz = Hv(e.GetStdSize());
|
|
total += intsz;
|
|
var = intsz;
|
|
e.SetRect(Rect(off, sz));
|
|
if (IsHorz())
|
|
off.x += intsz;
|
|
else
|
|
off.y += intsz;
|
|
}
|
|
scroll.SetTotal(total);
|
|
}
|
|
|
|
ExpanderCtrl::ExpanderCtrl()
|
|
{
|
|
Vert();
|
|
AddFrame(scroll);
|
|
scroll <<= THISBACK(OnScroll);
|
|
scroll.AutoHide(true);
|
|
}
|
|
|