summarylogtreecommitdiffstats
path: root/main.cpp
blob: 48fe5bf0363b76f2552ed1484f3383427ed8c8ac (plain)
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
#include <nana/gui.hpp>
#include <nana/gui/widgets/button.hpp>
#include <nana/gui/widgets/label.hpp>
#include <nana/gui/msgbox.hpp>
#include <nana/gui/place.hpp>
#include <nana/gui/filebox.hpp>
#include <nana/filesystem/filesystem.hpp>
#include <fstream>
#include <iostream>

std::string select_build_file(nana::window wd) {
    nana::filebox fb(wd, false);
    fb.title("Select or Create build.hob");
    fb.init_path(".");
    fb.init_file("build.hob");
    fb.add_filter("Hob Build File", "*.hob");
    
    auto files = fb.show();
    if (!files.empty() && files[0].filename() == "build.hob") {
        return files[0].parent_path().string();
    }
    return "";
}

int main() {
    using namespace nana;

    form fm(API::make_center(400, 200), appear::decorate<appear::taskbar>());
    fm.caption("Hobuild GUI");

    label dir_label(fm, "No directory selected");
    button select_btn(fm, "Select build.hob Location");
    button create_btn(fm, "Create");
    create_btn.enabled(false);

    place pl(fm);
    pl.div("vert <><weight=25 gap=5 dir_label><><weight=30 gap=10 select_btn><><weight=30 gap=10 create_btn><>");
    pl["dir_label"] << dir_label;
    pl["select_btn"] << select_btn;
    pl["create_btn"] << create_btn;
    pl.collocate();

    std::string selected_dir;

    select_btn.events().click([&] {
        if (auto dir = select_build_file(fm); !dir.empty()) {
            selected_dir = dir;
            dir_label.caption("Will create in: " + selected_dir);
            create_btn.enabled(true);
        }
    });

    create_btn.events().click([&] {
        if (selected_dir.empty()) return;
        
        std::ofstream out(selected_dir + "/build.hob");
        if (out) {
            out << "p INT = \"...\"\n\n";
            out << "all;\n";
            out << "    !(INT) ...";
            msgbox info(fm, "Success");
            info << "build.hob created in:\n" << selected_dir;
            info.show();
        } else {
            msgbox err(fm, "Error");
            err << "Failed to create file in:\n" << selected_dir;
            err.show();
        }
    });

    fm.show();
    exec();
}