1 | /* |
2 | src/example2.cpp -- C++ version of an example application that shows |
3 | how to use the form helper class. For a Python implementation, see |
4 | '../python/example2.py'. |
5 | |
6 | NanoGUI was developed by Wenzel Jakob <wenzel.jakob@epfl.ch>. |
7 | The widget drawing code is based on the NanoVG demo application |
8 | by Mikko Mononen. |
9 | |
10 | All rights reserved. Use of this source code is governed by a |
11 | BSD-style license that can be found in the LICENSE.txt file. |
12 | */ |
13 | |
14 | #include <nanogui/nanogui.h> |
15 | #include <iostream> |
16 | |
17 | using namespace nanogui; |
18 | |
19 | enum test_enum { |
20 | Item1 = 0, |
21 | Item2, |
22 | Item3 |
23 | }; |
24 | |
25 | bool bvar = true; |
26 | int ivar = 12345678; |
27 | double dvar = 3.1415926; |
28 | float fvar = (float)dvar; |
29 | std::string strval = "A string" ; |
30 | test_enum enumval = Item2; |
31 | Color colval(0.5f, 0.5f, 0.7f, 1.f); |
32 | |
33 | int main(int /* argc */, char ** /* argv */) { |
34 | nanogui::init(); |
35 | |
36 | /* scoped variables */ { |
37 | bool use_gl_4_1 = false;// Set to true to create an OpenGL 4.1 context. |
38 | Screen *screen = nullptr; |
39 | |
40 | if (use_gl_4_1) { |
41 | // NanoGUI presents many options for you to utilize at your discretion. |
42 | // See include/nanogui/screen.h for what all of these represent. |
43 | screen = new Screen(Vector2i(500, 700), "NanoGUI test [GL 4.1]" , |
44 | /*resizable*/true, /*fullscreen*/false, /*colorBits*/8, |
45 | /*alphaBits*/8, /*depthBits*/24, /*stencilBits*/8, |
46 | /*nSamples*/0, /*glMajor*/4, /*glMinor*/1); |
47 | } else { |
48 | screen = new Screen(Vector2i(500, 700), "NanoGUI test" ); |
49 | } |
50 | |
51 | bool enabled = true; |
52 | FormHelper *gui = new FormHelper(screen); |
53 | ref<Window> window = gui->addWindow(Eigen::Vector2i(10, 10), "Form helper example" ); |
54 | gui->addGroup("Basic types" ); |
55 | gui->addVariable("bool" , bvar); |
56 | gui->addVariable("string" , strval); |
57 | |
58 | gui->addGroup("Validating fields" ); |
59 | gui->addVariable("int" , ivar)->setSpinnable(true); |
60 | gui->addVariable("float" , fvar); |
61 | gui->addVariable("double" , dvar)->setSpinnable(true); |
62 | |
63 | gui->addGroup("Complex types" ); |
64 | gui->addVariable("Enumeration" , enumval, enabled) |
65 | ->setItems({"Item 1" , "Item 2" , "Item 3" }); |
66 | gui->addVariable("Color" , colval) |
67 | ->setFinalCallback([](const Color &c) { |
68 | std::cout << "ColorPicker Final Callback: [" |
69 | << c.r() << ", " |
70 | << c.g() << ", " |
71 | << c.b() << ", " |
72 | << c.w() << "]" << std::endl; |
73 | }); |
74 | |
75 | gui->addGroup("Other widgets" ); |
76 | gui->addButton("A button" , []() { std::cout << "Button pressed." << std::endl; }); |
77 | |
78 | screen->setVisible(true); |
79 | screen->performLayout(); |
80 | window->center(); |
81 | |
82 | nanogui::mainloop(); |
83 | } |
84 | |
85 | nanogui::shutdown(); |
86 | return 0; |
87 | } |
88 | |