Added class PagesView for visualization of the options Reverse and Collate.
git-svn-id: file:///srv/svn/repos/haiku/trunk/current@10621 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -0,0 +1,122 @@
|
|||||||
|
#include "PagesView.h"
|
||||||
|
|
||||||
|
static const float kWidth = 80;
|
||||||
|
static const float kHeight = 30;
|
||||||
|
|
||||||
|
static const float kPageWidth = 16;
|
||||||
|
static const float kPageHeight = 16;
|
||||||
|
|
||||||
|
static const float kPageHorizontalIndent = 7;
|
||||||
|
static const float kPageVerticalIndent = 5;
|
||||||
|
|
||||||
|
PagesView::PagesView(BRect frame, const char* name, uint32 resizeMask, uint32 flags)
|
||||||
|
: BView(frame, name, resizeMask, flags),
|
||||||
|
fCollate(false),
|
||||||
|
fReverse(false)
|
||||||
|
{
|
||||||
|
SetViewColor(B_TRANSPARENT_COLOR);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagesView::GetPreferredSize(float *width, float *height)
|
||||||
|
{
|
||||||
|
*width = kWidth;
|
||||||
|
*height = kHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagesView::Draw(BRect rect)
|
||||||
|
{
|
||||||
|
rgb_color backgroundColor = {255, 255, 255};
|
||||||
|
// inherit view color from parent if available
|
||||||
|
if (Parent() != NULL) {
|
||||||
|
backgroundColor = Parent()->ViewColor();
|
||||||
|
}
|
||||||
|
SetHighColor(backgroundColor);
|
||||||
|
FillRect(rect);
|
||||||
|
|
||||||
|
BFont font(be_plain_font);
|
||||||
|
font.SetSize(8);
|
||||||
|
SetFont(&font);
|
||||||
|
|
||||||
|
BPoint position(3, 3);
|
||||||
|
if (fCollate) {
|
||||||
|
BPoint next(kPageWidth + kPageHorizontalIndent * 2 + 10, 0);
|
||||||
|
DrawPages(position, 1, 3);
|
||||||
|
position += next;
|
||||||
|
DrawPages(position, 1, 3);
|
||||||
|
} else {
|
||||||
|
BPoint next(kPageWidth + kPageHorizontalIndent * 1 + 10, 0);
|
||||||
|
for (int i = 1; i <= 3; i ++) {
|
||||||
|
int page = fReverse ? 4 - i : i;
|
||||||
|
DrawPages(position, page, 2);
|
||||||
|
position += next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagesView::DrawPages(BPoint position, int number, int count)
|
||||||
|
{
|
||||||
|
position.x += kPageHorizontalIndent * (count - 1);
|
||||||
|
BPoint next(-kPageHorizontalIndent, kPageVerticalIndent);
|
||||||
|
if (fCollate) {
|
||||||
|
for (int i = 0; i < count; i ++) {
|
||||||
|
int page;
|
||||||
|
if (fReverse) {
|
||||||
|
page = 1 + i;
|
||||||
|
} else {
|
||||||
|
page = count - i;
|
||||||
|
}
|
||||||
|
DrawPage(position, page);
|
||||||
|
position += next;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int i = 0; i < count; i ++) {
|
||||||
|
DrawPage(position, number);
|
||||||
|
position += next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagesView::DrawPage(BPoint position, int number)
|
||||||
|
{
|
||||||
|
const rgb_color pageBackgroundColor = {255, 255, 255};
|
||||||
|
const rgb_color pageBorderColor = {0, 0, 0};
|
||||||
|
const rgb_color pageNumberColor = {0, 0, 0};
|
||||||
|
|
||||||
|
BPoint page[5];
|
||||||
|
page[0].x = position.x + 3;
|
||||||
|
page[0].y = position.y;
|
||||||
|
page[4].x = position.x;
|
||||||
|
page[4].y = position.y + 3;
|
||||||
|
page[1].x = position.x + kPageWidth - 1;
|
||||||
|
page[1].y = position.y;
|
||||||
|
page[2].x = position.x + kPageWidth - 1;
|
||||||
|
page[2].y = position.y + kPageHeight - 1;
|
||||||
|
page[3].x = position.x;
|
||||||
|
page[3].y = position.y + kPageHeight - 1;
|
||||||
|
|
||||||
|
SetHighColor(pageBackgroundColor);
|
||||||
|
FillPolygon(page, 5);
|
||||||
|
|
||||||
|
SetHighColor(pageBorderColor);
|
||||||
|
StrokePolygon(page, 5);
|
||||||
|
StrokeLine(position + BPoint(3, 1), position + BPoint(3, 3));
|
||||||
|
StrokeLine(position + BPoint(3, 3), position + BPoint(1, 3));
|
||||||
|
|
||||||
|
SetHighColor(pageNumberColor);
|
||||||
|
SetLowColor(pageBackgroundColor);
|
||||||
|
DrawChar('0' + number,
|
||||||
|
position +
|
||||||
|
BPoint(kPageWidth - kPageHorizontalIndent + 1, kPageHeight - 2));
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagesView::setCollate(bool collate)
|
||||||
|
{
|
||||||
|
fCollate = collate;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PagesView::setReverse(bool reverse)
|
||||||
|
{
|
||||||
|
fReverse = reverse;
|
||||||
|
Invalidate();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user