root/src/apps/bootmanager/WizardPageView.cpp
/*
 * Copyright 2008-2011, Haiku, Inc. All rights reserved.
 * Distributed under the terms of the MIT License.
 *
 * Authors:
 *              Michael Pfeiffer <laplace@users.sourceforge.net>
 */


#include "WizardPageView.h"

#include <math.h>
#include <string.h>

#include <TextView.h>


WizardPageView::WizardPageView(BMessage* settings, BRect frame,
        const char* name, uint32 resizingMode, uint32 flags)
        :
        BView(frame, name, resizingMode, flags),
        fSettings(settings)
{
        SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


WizardPageView::WizardPageView(BMessage* settings, const char* name)
        :
        BView(name, B_WILL_DRAW),
        fSettings(settings)
{
        SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
}


WizardPageView::~WizardPageView()
{
}


void
WizardPageView::PageCompleted()
{
}


BTextView*
WizardPageView::CreateDescription(BRect frame, const char* name,
        const char* description)
{
        BTextView* view = new BTextView(frame, "text",
                frame.OffsetToCopy(0, 0),
                B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP,
                B_WILL_DRAW | B_PULSE_NEEDED | B_FRAME_EVENTS);
        view->MakeEditable(false);
        view->SetViewUIColor(ViewUIColor());
        view->SetStylable(true);
        view->SetText(description);

        return view;
}


BTextView*
WizardPageView::CreateDescription(const char* name,
        const char* description)
{
        BTextView* view = new BTextView("text");
        view->MakeEditable(false);
        view->SetViewUIColor(ViewUIColor());
        view->SetStylable(true);
        view->SetText(description);

        return view;
}


void
WizardPageView::MakeHeading(BTextView* view)
{
        const char* text = view->Text();
        const char* firstLineEnd = strchr(text, '\n');
        if (firstLineEnd != NULL) {
                int indexFirstLineEnd = firstLineEnd - text;
                BFont font;
                view->GetFont(&font);
                font.SetFace(B_BOLD_FACE);
                font.SetSize(font.Size() + 1);
                rgb_color color = ui_color(B_PANEL_TEXT_COLOR);
                view->SetFontAndColor(0, indexFirstLineEnd, &font, B_FONT_ALL,
                        &color);

                font.SetFace(B_REGULAR_FACE);
                font.SetSize(font.Size() - 1);
                view->SetFontAndColor(indexFirstLineEnd + 1, view->TextLength(),
                        &font, B_FONT_ALL, &color);
        }
}


void
WizardPageView::LayoutDescriptionVertically(BTextView* view)
{
        view->SetTextRect(view->Bounds());

        float height = view->TextHeight(0, 32000);
        float width = view->Bounds().Width();

        view->ResizeTo(width, height);
        view->SetTextRect(view->Bounds());
}