1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include <final/final.h>

using namespace finalcut;

class LineView : public FScrollView
{
  public:
    LineView(FWidget *parent)
      : FScrollView{ parent }
    {
    }

    void
    draw() override
    {
        clearArea();
        for (auto y{ 1 }; y <= int(numLines); ++y) {
            setPrintPos(FPoint{ 1, y });
            print() << "Line = " << y;
        }
        FScrollView::draw();
    }

    void
    setGeometry(const FPoint &pos, const FSize &size,
                bool adjust = true) override
    {
        FScrollView::setGeometry(pos, size, adjust);
        auto w = std::max(numCols, getWidth());
        auto h = std::max(numLines, getHeight());

        setScrollSize(FSize{ w, h });
    }

  private:
    std::size_t numCols{ 10 };
    std::size_t numLines{ 42 };
};

class PrgView final : public FDialog
{
  public:
    PrgView(FWidget *parent)
      : FDialog{ parent }
      , lineView{ this } // show 42 lines
    {
    }

    void
    initLayout() override
    {
        FDialog::setGeometry(FPoint{ 16, 3 }, FSize{ 50, 19 });

        setText("Program");
        setBorder(false);
        setResizeable();
        lineView.setGeometry(FPoint{ 1, 1 },
                             FSize{ getWidth() - 1, getHeight() - 1 });
        FDialog::initLayout();
    }

    void
    setGeometry(const FPoint &p, const FSize &s, bool adj = true) override
    {
        FDialog::setGeometry(p, s, adj);
    }

    void
    adjustSize() override
    {
        FDialog::adjustSize();
        lineView.setGeometry(FPoint{ 1, 1 },
                             FSize{ getWidth() - 1, getHeight() - 1 });
    }

    LineView lineView;
};

int
main(int argc, char *argv[])
{
    FApplication app{ argc, argv };

    PrgView prgView{ &app };

    FWidget::setMainWidget(&prgView);
    app.show();
    return app.exec();
}