mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-16 06:05:58 -06:00
88 lines
No EOL
1.5 KiB
C++
88 lines
No EOL
1.5 KiB
C++
#include "RichEdit.h"
|
|
|
|
namespace Upp {
|
|
|
|
ColumnPopUp::ColumnPopUp()
|
|
{
|
|
SetFrame(BlackFrame());
|
|
}
|
|
|
|
void ColumnPopUp::Paint(Draw& w)
|
|
{
|
|
int ii = 0;
|
|
int y = 0;
|
|
while(ii < count || ii == 0) {
|
|
for(int x = 0; x < columns; x++) {
|
|
w.Clipoff(x * isz.cx, y * isz.cy, isz.cx, isz.cy);
|
|
w.DrawRect(isz, ii == cursor ? SColorHighlight() : SColorPaper());
|
|
if(ii < count)
|
|
WhenPaintItem(w, isz, ii, ii == cursor);
|
|
w.End();
|
|
ii++;
|
|
}
|
|
y++;
|
|
}
|
|
}
|
|
|
|
void ColumnPopUp::MouseMove(Point p, dword keyflags)
|
|
{
|
|
int ii = p.x / isz.cx + p.y / isz.cy * columns;
|
|
if(ii < 0 || ii >= count)
|
|
ii = -1;
|
|
if(ii != cursor) {
|
|
cursor = ii;
|
|
Refresh();
|
|
}
|
|
}
|
|
|
|
void ColumnPopUp::LeftUp(Point, dword keyflags)
|
|
{
|
|
if(cursor >= 0)
|
|
WhenSelect(cursor);
|
|
Close();
|
|
}
|
|
|
|
void ColumnPopUp::MouseLeave()
|
|
{
|
|
cursor = -1;
|
|
Refresh();
|
|
}
|
|
|
|
void ColumnPopUp::PopUp(const Rect& sr, Ctrl *owner)
|
|
{
|
|
if(IsOpen())
|
|
Close();
|
|
Size sz = AddFrameSize(columns * isz.cx, (count + columns - 1) / columns * isz.cy);
|
|
Point p = sr.BottomLeft();
|
|
Rect r = owner ? owner->GetWorkArea() : GetWorkArea();
|
|
if(p.x + sz.cx > r.right)
|
|
p.x = max(r.right - sz.cx, 0);
|
|
if(p.y + sz.cy > r.bottom)
|
|
p.y = max(sr.top - sz.cy, 0);
|
|
SetRect(p.x, p.y, sz.cx, sz.cy);
|
|
Ctrl::PopUp(owner);
|
|
}
|
|
|
|
int ColumnPopUp::Execute(const Rect& sr, Ctrl *owner)
|
|
{
|
|
PopUp(sr, owner);
|
|
EventLoop(this);
|
|
if(IsOpen())
|
|
Close();
|
|
return cursor;
|
|
}
|
|
|
|
int ColumnPopUp::Execute()
|
|
{
|
|
Point p = GetMousePos();
|
|
return Execute(Rect(p, p), GetActiveCtrl());
|
|
}
|
|
|
|
void ColumnPopUp::Deactivate()
|
|
{
|
|
Close();
|
|
IgnoreMouseClick();
|
|
cursor = Null;
|
|
}
|
|
|
|
}; |