root/src/apps/haikudepot/ui/UserUsageConditionsWindow.h
/*
 * Copyright 2019-2020, Andrew Lindesay <apl@lindesay.co.nz>.
 * All rights reserved. Distributed under the terms of the MIT License.
 */
#ifndef USER_USAGE_CONDITIONS_WINDOW_H
#define USER_USAGE_CONDITIONS_WINDOW_H

#include <Locker.h>
#include <Messenger.h>
#include <Window.h>

#include "HaikuDepotConstants.h"
#include "PackageInfo.h"
#include "UserDetail.h"
#include "UserUsageConditions.h"


class BarberPole;
class TextView;
class BStringView;
class MarkupTextView;
class Model;


class UserUsageConditionsWindow : public BWindow {
public:
                                                                UserUsageConditionsWindow(Model& model,
                                                                        UserUsageConditions& userUsageConditions);
                                                                UserUsageConditionsWindow(Model& model,
                                                                        UserUsageConditionsSelectionMode mode);
        virtual                                         ~UserUsageConditionsWindow();

        virtual void                            MessageReceived(BMessage* message);
        virtual bool                            QuitRequested();

private:
        void                                            _InitUiControls();

        static const BString            _VersionText(const BString& code);
        static const BString            _MinimumAgeText(uint8 minimumAge);
        static const BString            _IntroductionTextForMode(
                                                                        UserUsageConditionsSelectionMode mode,
                                                                        const UserDetail& userDetail);

        void                                            _DisplayData(const UserDetail& userDetail,
                                                                        const UserUsageConditions&
                                                                        userUsageConditions);

        void                                            _FetchData();
        void                                            _SetWorkerThread(thread_id thread);
        static int32                            _FetchDataThreadEntry(void* data);
        void                                            _FetchDataPerform();
        status_t                                        _FetchUserUsageConditionsCodePerform(
                                                                        UserDetail& userDetail, BString& code);
        status_t                                        _FetchUserUsageConditionsCodeForUserPerform(
                                                                        UserDetail& userDetail, BString& code);
        void                                            _NotifyFetchProblem();

private:
                        UserUsageConditionsSelectionMode
                                                                fMode;
                        MarkupTextView*         fCopyView;
                        Model&                          fModel;
                        BStringView*            fAgeNoteStringView;
                        BStringView*            fVersionStringView;
                        TextView*                       fIntroductionTextView;
                        BarberPole*                     fWorkerIndicator;
                        thread_id                       fWorkerThread;
};


#endif // USER_USAGE_CONDITIONS_WINDOW_H