File: guilayout.cpp

package info (click to toggle)
clanlib 0.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 28,372 kB
  • ctags: 16,520
  • sloc: cpp: 101,145; sh: 8,752; xml: 6,410; makefile: 1,740; ansic: 463; perl: 424; php: 247
file content (132 lines) | stat: -rw-r--r-- 3,865 bytes parent folder | download | duplicates (7)
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <ClanLib/core.h>
#include <ClanLib/gui.h>
#include <ClanLib/guistylesilver.h>
#include <ClanLib/application.h>
#include <ClanLib/display.h>
#include <ClanLib/gl.h>

// The main application
class App : public CL_ClanApplication
{
public:
	int main(int argc, char** argv)
	{
		// Create a console window for text-output if not available
		CL_ConsoleWindow console("Console");
		console.redirect_stdio();

		try
		{
			CL_SetupCore setup_core;
			CL_SetupDisplay setup_display;
			CL_SetupGL setup_gl;
			CL_SetupGUI setup_gui;

			CL_DisplayWindow display("GUI Layout example", 640, 480, false, true);

			// Connect the Window close event
			CL_Slot slot_quit = display.sig_window_close().connect(this, &App::on_window_close);
			
			// Create the GUI using the default style
			CL_ResourceManager gui_resources("../../Resources/GUIStyleSilver/gui.xml");
			CL_StyleManager_Silver style(&gui_resources);
			CL_GUIManager guimanager(&style);
			gui = &guimanager;

			CL_TreeView tree(&guimanager);
			tree.add_column("Column 1", 100);
			tree.add_column("Column 2", 100);
			tree.add_column("Column 3", 100);
			CL_Label label1("Layout management:", &guimanager);
			CL_InputBox input1("foo", &guimanager);
			CL_Component spacer(&guimanager);
			CL_Button button1("Button1", &guimanager);
			CL_Button button2("Button2", &guimanager);
			CL_Button button3("Button3", &guimanager);
			CL_Button button4("Button4", &guimanager);
			CL_Button button5("Button5", &guimanager);
			CL_Button button6("Button6", &guimanager);

			label1.set_horizontal_policy(layout_minimum);
			button1.set_horizontal_policy(layout_minimum);
			button2.set_horizontal_policy(layout_minimum);
			button3.set_horizontal_policy(layout_minimum);
			button4.set_horizontal_policy(layout_minimum);
			button5.set_horizontal_policy(layout_minimum);
			button6.set_horizontal_policy(layout_minimum);
			label1.set_vertical_policy(layout_minimum);
			input1.set_vertical_policy(layout_minimum);
			spacer.set_horizontal_policy(layout_minimum);
			button1.set_vertical_policy(layout_minimum);
			button2.set_vertical_policy(layout_minimum);
			button3.set_vertical_policy(layout_minimum);
			button4.set_vertical_policy(layout_minimum);
			button5.set_vertical_policy(layout_minimum);
			button6.set_vertical_policy(layout_minimum);

			CL_Layout layout2(layout_horizontal);
			layout2.add_component(&label1);
			layout2.add_component(&input1);
//			layout2.add_component(&spacer);
			layout2.add_component(&button1);
			layout2.add_component(&button2);
			layout2.add_component(&button3);

			CL_Layout layout4(layout_vertical);
			layout4.add_component(&button4);
			layout4.add_component(&button5);
			layout4.add_component(&button6);
			layout4.add_component(&spacer);

			CL_Layout layout3(layout_horizontal);
			layout3.add_component(&tree);
			layout3.add_layout(layout4);

			CL_Layout layout1(layout_vertical);
			layout1.set_margin(4);
			layout1.add_layout(layout3);
			layout1.add_layout(layout2);
			guimanager.set_layout(layout1);
			layout1.set_position(CL_Rect(0, 0, guimanager.get_width(), guimanager.get_height())); // hack, shouldnt be needed.
			
			CL_Slot slot_paint = guimanager.sig_paint().connect(this, &App::on_paint);

			CL_Slot slot_resize1 = button5.sig_clicked().connect(this, &App::on_resize1);
			CL_Slot slot_resize2 = button6.sig_clicked().connect(this, &App::on_resize2);

			guimanager.run();
		}
		catch (CL_Error e)
		{
 			std::cout << e.message.c_str() << std::endl;

			// Display console close message and wait for a key
			console.display_close_message();
		}

		return 0;
	}
	
private:
	void on_window_close()
	{
		gui->quit();
	}
	
	void on_paint()
	{
		CL_Display::clear(CL_Color::white);
	}
	
	void on_resize1()
	{
		CL_Display::set_size(640, 480);
	}

	void on_resize2()
	{
		CL_Display::set_size(800, 600);
	}

	CL_GUIManager *gui;
} app;