0,0 → 1,94 |
struct SELECTION { |
dword start_x, start_y, start_offset; |
dword end_x, end_y, end_offset; |
dword color; |
bool is_active(); |
void set_start(); |
void set_end(); |
void draw(); |
void draw_line(); |
void cancel(); |
bool swap_start_end(); |
void normalize(); |
void select_all(); |
} selection; |
|
bool SELECTION::is_active() |
{ |
if (start_offset) && (end_offset) && (start_offset != end_offset) { |
return true; |
} else { |
return false; |
} |
} |
|
void SELECTION::draw_line(dword x,y,w) |
{ |
DrawBuf.DrawBar(x, y, w, list.item_h, color); |
} |
|
void SELECTION::draw(int i) |
{ |
if (is_active()) { |
if (start_y == i) && (end_y == i) draw_line(start_x * list.font_w+2, start_y * list.item_h, end_x - start_x * list.font_w); |
else if (start_y == i) draw_line(start_x * list.font_w+2, start_y * list.item_h, list.w -2- calc(start_x * list.font_w)); |
else if (end_y == i) draw_line(0, end_y * list.item_h, end_x * list.font_w+2); |
//DrawBuf.DrawBar(start_x * list.font_w + 2, start_y * list.item_h, 2, list.item_h, 0x00FF00); |
//DrawBuf.DrawBar(end_x * list.font_w + 0, end_y * list.item_h, 2, list.item_h, 0xFF00FF); |
} |
DrawBuf.DrawBar(list.cur_x * list.font_w + 2, list.cur_y * list.item_h, 2, list.item_h, theme.cursor); //DrawCursor |
} |
|
void SELECTION::cancel() |
{ |
start_offset = end_offset = lines.get(list.cur_y) + list.cur_x; |
start_x = end_x = list.cur_x; |
start_y = end_y = list.cur_y; |
normalize(); |
} |
|
void SELECTION::set_start() |
{ |
start_x = list.cur_x; |
start_y = list.cur_y; |
normalize(); |
start_offset = lines.get(start_y) + start_x; |
} |
|
void SELECTION::set_end() |
{ |
end_x = list.cur_x; |
end_y = list.cur_y; |
normalize(); |
end_offset = lines.get(end_y) + end_x; |
debugval("end_x", end_x); |
debugval("end_y", end_y); |
} |
|
|
void SELECTION::normalize() |
{ |
start_x = math.min(start_x, lines.get(start_y+1) - lines.get(start_y)); |
end_x = math.min(end_x, lines.get(end_y+1) - lines.get(end_y)); |
} |
|
void SELECTION::select_all() |
{ |
start_y = 0; |
start_x = 0; |
end_y = lines.count-2; |
end_x = lines.get(end_y+1) - lines.get(end_y); |
//normalize(); |
start_offset = lines.get(start_y) + start_x; |
end_offset = lines.get(end_y) + end_x; |
debugval("end_x__", end_x); |
debugval("end_y__", end_y); |
} |
|
bool SELECTION::swap_start_end() |
{ |
start_offset >< end_offset; |
start_x >< end_x; |
start_y >< end_y; |
return true; |
} |