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:
Michael Pfeiffer 2005-01-09 17:46:28 +00:00
parent a4d61ba325
commit be15dcda7f

View File

@ -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();
}