root/src/apps/packageinstaller/PackageTextViewer.cpp
/*
 * Copyright (c) 2007-2014, Haiku, Inc.
 * Distributed under the terms of the MIT license.
 *
 * Author:
 *              Łukasz 'Sil2100' Zemczak <sil2100@vexillium.org>
 *              Stephan Aßmus <superstippi@gmx.de>
 */


#include "PackageTextViewer.h"

#include <Button.h>
#include <Catalog.h>
#include <LayoutBuilder.h>
#include <Locale.h>
#include <ScrollView.h>


enum {
        P_MSG_ACCEPT = 'pmac',
        P_MSG_DECLINE
};

#undef B_TRANSLATION_CONTEXT
#define B_TRANSLATION_CONTEXT "PackageTextViewer"


PackageTextViewer::PackageTextViewer(const char *text, bool disclaimer)
        :
        BlockingWindow(BRect(125, 125, 675, 475), B_TRANSLATE("Disclaimer"),
                B_AUTO_UPDATE_SIZE_LIMITS)
{
        _InitView(text, disclaimer);
        CenterOnScreen();
}


void
PackageTextViewer::MessageReceived(BMessage* message)
{
        switch (message->what) {
                case P_MSG_ACCEPT:
                        ReleaseSem(1);
                        break;

                case P_MSG_DECLINE:
                        ReleaseSem(0);
                        break;

                default:
                        BWindow::MessageReceived(message);
                        break;
        }
}


// #pragma mark -


void
PackageTextViewer::_InitView(const char* text, bool disclaimer)
{
        BTextView* textView = new BTextView("text_view");
        textView->MakeEditable(false);
        textView->MakeSelectable(true);
        float margin = ceilf(be_plain_font->Size());
        textView->SetInsets(margin, margin, margin, margin);
        BScrollView* scrollView = new BScrollView("scroll_view", textView, 0, false,
                true);

        BButton* defaultButton;

        if (disclaimer) {
                defaultButton = new BButton("accept", B_TRANSLATE("Accept"),
                        new BMessage(P_MSG_ACCEPT));

                BButton* decline = new BButton("decline", B_TRANSLATE("Decline"),
                        new BMessage(P_MSG_DECLINE));

                BLayoutBuilder::Group<>(this, B_VERTICAL)
                        .Add(scrollView)
                        .AddGroup(B_HORIZONTAL)
                                .AddGlue()
                                .Add(defaultButton)
                                .Add(decline)
                        .End()
                        .SetInsets(B_USE_WINDOW_INSETS)
                ;
        } else {
                defaultButton = new BButton("accept", B_TRANSLATE("Continue"),
                        new BMessage(P_MSG_ACCEPT));

                BLayoutBuilder::Group<>(this, B_VERTICAL)
                        .Add(scrollView)
                        .AddGroup(B_HORIZONTAL)
                                .AddGlue()
                                .Add(defaultButton)
                        .End()
                        .SetInsets(B_USE_WINDOW_INSETS)
                ;
        }

        defaultButton->MakeDefault(true);

        textView->SetText(text);
}