xref: /haiku/src/apps/bootmanager/WizardView.cpp (revision 106388ddbfdd00f4409c86bd3fe8d581bae532ec)
1 /*
2  * Copyright 2008-2011, Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *		Michael Pfeiffer <laplace@users.sourceforge.net>
7  *		Axel Dörfler, axeld@pinc-software.de
8  */
9 
10 
11 #include "WizardView.h"
12 
13 #include <LayoutBuilder.h>
14 #include <Button.h>
15 #include <Catalog.h>
16 #include <SeparatorView.h>
17 
18 #include "WizardPageView.h"
19 
20 
21 #undef B_TRANSLATION_CONTEXT
22 #define B_TRANSLATION_CONTEXT "WizardView"
23 
24 
25 WizardView::WizardView(const char* name)
26 	:
27 	BGroupView(name, B_VERTICAL, 0),
28 	fPrevious(NULL),
29 	fNext(NULL),
30 	fPage(NULL)
31 {
32 	_BuildUI();
33 	SetPreviousButtonHidden(true);
34 }
35 
36 
37 WizardView::~WizardView()
38 {
39 }
40 
41 
42 void
43 WizardView::SetPage(WizardPageView* page)
44 {
45 	if (fPage == page)
46 		return;
47 
48 	if (fPage != NULL) {
49 		fPageContainer->RemoveChild(fPage);
50 		delete fPage;
51 	}
52 
53 	fPage = page;
54 	if (page == NULL)
55 		return;
56 
57 	fPageContainer->AddChild(page);
58 	Window()->ResizeToPreferred();
59 }
60 
61 
62 void
63 WizardView::PageCompleted()
64 {
65 	if (fPage != NULL)
66 		fPage->PageCompleted();
67 
68 	// Restore initial state
69 	SetNextButtonLabel(B_TRANSLATE_COMMENT("Next", "Button"));
70 	SetPreviousButtonLabel(B_TRANSLATE_COMMENT("Previous", "Button"));
71 	SetNextButtonEnabled(true);
72 	SetPreviousButtonEnabled(true);
73 	SetPreviousButtonHidden(false);
74 }
75 
76 
77 void
78 WizardView::SetPreviousButtonEnabled(bool enabled)
79 {
80 	fPrevious->SetEnabled(enabled);
81 }
82 
83 
84 void
85 WizardView::SetNextButtonEnabled(bool enabled)
86 {
87 	fNext->SetEnabled(enabled);
88 }
89 
90 
91 void
92 WizardView::SetPreviousButtonLabel(const char* text)
93 {
94 	fPrevious->SetLabel(text);
95 }
96 
97 
98 void
99 WizardView::SetNextButtonLabel(const char* text)
100 {
101 	fNext->SetLabel(text);
102 }
103 
104 
105 void
106 WizardView::SetPreviousButtonHidden(bool hide)
107 {
108 	if (hide) {
109 		if (!fPrevious->IsHidden())
110 			fPrevious->Hide();
111 	} else {
112 		if (fPrevious->IsHidden())
113 			fPrevious->Show();
114 	}
115 }
116 
117 
118 void
119 WizardView::_BuildUI()
120 {
121 	fPageContainer = new BGroupView("page container");
122 	fPageContainer->GroupLayout()->SetInsets(B_USE_WINDOW_SPACING,
123 		B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING);
124 	fPrevious = new BButton("previous",
125 		B_TRANSLATE_COMMENT("Previous", "Button"),
126 		new BMessage(kMessagePrevious));
127 	fNext = new BButton("next", B_TRANSLATE_COMMENT("Next", "Button"),
128 		new BMessage(kMessageNext));
129 	BButton* quit = new BButton("quit", B_TRANSLATE_COMMENT("Quit", "Button"),
130 		new BMessage(B_QUIT_REQUESTED));
131 
132 	BLayoutBuilder::Group<>(this)
133 		.Add(fPageContainer)
134 		.Add(new BSeparatorView(B_HORIZONTAL))
135 		.AddGroup(B_HORIZONTAL)
136 			.SetInsets(B_USE_WINDOW_SPACING, B_USE_DEFAULT_SPACING,
137 				B_USE_WINDOW_SPACING, B_USE_WINDOW_SPACING)
138 			.Add(quit)
139 			.AddGlue()
140 			.Add(fPrevious)
141 			.Add(fNext)
142 			.End()
143 		.End();
144 }
145