ultimatepp/uppdev/QuickTabs/main.cpp
cxl 2e4b276e07 Merge continued
git-svn-id: svn://ultimatepp.org/upp/trunk@10263 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2016-10-04 08:34:39 +00:00

128 lines
2.9 KiB
C++

#include <CtrlLib/CtrlLib.h>
IdeQuickTabs::IdeQuickTabs()
{
font = Arial(10);
fcy = ScreenInfo().GetFontInfo(font).GetHeight();
hl = -1;
cursor = -1;
}
void PaintTab(Draw& w, int x, int y, int cx, int cy, Color paper, Color top)
{
w.DrawRect(x + 1, y + 2, cx - 2, cy - 2, paper);
w.DrawRect(x + 2, y + 1, cx - 4, 1, top);
w.DrawRect(x + 2, y, cx - 6, 1, top);
Color fc = Blend(SColorHighlight, SColorShadow);
w.DrawRect(x + 0, y + 2, 1, cy - 2, fc);
w.DrawRect(x + 1, y + 1, 1, 1, fc);
w.DrawRect(x + 2, y, cx - 4, 1, fc);
w.DrawRect(x + cx - 2, y + 1, 1, 1, fc);
w.DrawRect(x + cx - 1, y + 2, 1, cy - 2, fc);
}
void IdeQuickTabs::Paint(Draw& w)
{
Size sz = GetSize();
w.DrawRect(sz, SColorFace);
int cx = (sz.cx - 6) / 10;
int x = 0;
Color hc = Blend(Yellow, LtRed, 100);
Color inactive = Blend(SColorPaper, SColorFace);
for(int i = 0; i < 10; i++) {
if(i != cursor && !IsNull(file[i]))
PaintTab(w, x + 2, 2, cx - 1, sz.cy - 2, inactive, i == hl ? hc : inactive);
x += cx;
}
w.DrawRect(0, sz.cy - 1, sz.cx, 1, Blend(SColorHighlight, SColorShadow));
if(cursor >= 0)
PaintTab(w, cx * cursor, 1, cx + 4, sz.cy - 1, SColorPaper, hc);
x = 0;
for(int i = 0; i < 10; i++) {
if(!IsNull(file[i])) {
DrawFileName(w, x + DX, DY - (i == cursor), cx - 10, fcy, GetFileName(file[i]),
false, font, SColorText, LtBlue, Null, Null, false);
w.DrawText(x + cx - 6, DY - (i == cursor) - 1, AsString((i + 1) % 10), Arial(9), SColorText);
}
x += cx;
}
}
int IdeQuickTabs::GetPos(int x)
{
int cx = (GetSize().cx - 6) / 10;
int i = x / cx;
return IsNull(file[i]) ? -1 : i;
}
void IdeQuickTabs::LeftDown(Point p, dword)
{
int c = GetPos(p.x);
if(c > 0 && c != cursor) {
cursor = c;
UpdateActionRefresh();
}
}
void IdeQuickTabs::MouseMove(Point p, dword)
{
int c = GetPos(p.x);
if(c != hl) {
hl = c;
Refresh();
}
}
void IdeQuickTabs::MouseLeave()
{
hl = -1;
Refresh();
}
void IdeQuickTabs::CancelMode()
{
hl = -1;
Refresh();
}
void IdeQuickTabs::FramePaint(Draw& w, const Rect& rr)
{
Rect r = rr;
r.top += fcy + HEIGHT;
Color c = Blend(SColorHighlight, SColorShadow);
w.DrawRect(r.left, r.top, 1, r.Height(), c);
w.DrawRect(r.right - 1, r.top, 1, r.Height(), c);
w.DrawRect(r.left, r.bottom - 1, r.Width(), 1, c);
r.top--;
DrawFrame(w, r.Deflated(1), SColorPaper);
}
void IdeQuickTabs::FrameLayout(Rect& r)
{
LayoutFrameTop(r, this, fcy + HEIGHT);
r.top++;
r.left += 2;
r.right -= 2;
r.bottom -= 2;
}
void IdeQuickTabs::FrameAddSize(Size& sz)
{
sz += 4;
sz.cy += fcy + HEIGHT;
}
GUI_APP_MAIN
{
TopWindow win;
LineEdit edit1, edit2;
IdeQuickTabs tabs;
tabs.SetFile(5, "Hello.cpp");
tabs.SetFile(7, "World.h");
edit2.SetFrame(tabs);
Splitter split;
split.Vert(edit1, edit2);
win.Add(split);
win.Sizeable();
win.Run();
}