My favorites | Sign in
Project Home Downloads Source
Checkout   Browse   Changes    
 
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
133
134
135
136
137
138
139
140
141
142
#ifndef _SourceUpdater_Wizard_h_
#define _SourceUpdater_Wizard_h_

#include <CtrlLib/CtrlLib.h>
NAMESPACE_UPP

struct NullStep : public ParentCtrl {
static Size GetLayoutSize() {
return Ctrl::LayoutZoom(1,1);
}
};

inline
void InitLayout(Upp::Ctrl& parent, NullStep& layout, NullStep& uts, NullStep&){
parent.LayoutId("NullStepLayout");
};

//$-
template < class T0, class T1,
class T2 = NullStep, class T3 = NullStep, class T4 = NullStep, class T5 = NullStep,
class T6 = NullStep, class T7 = NullStep, class T8 = NullStep, class T9 = NullStep
>
//$+
//$ template<class T0,class T1,class T2 = NullStep,...>
class Wizard : public TopWindow {
int step,count;
Buffer<bool> allowed;
public:
typedef Wizard CLASSNAME;
T0 s0; T1 s1; T2 s2; T3 s3; T4 s4; T5 s5; T6 s6; T7 s7; T8 s8; T9 s9;
Button cancel,prev,next,finish;
Callback WhenFinish;
Callback WhenCancel;
Callback1<int> WhenStep;
Wizard();
void NextStep();
void PrevStep();
void SetStep(int n);
void Block(int n,bool block=true) {allowed[n]=!block; UpdateButtons();}
void Unblock(int n) {allowed[n]=true; UpdateButtons();}
bool IsBlocked(int n) {return !allowed[n];}
int GetCount() {return count;}
private:
void CountStep(const NullStep&) {}
template<class T> void CountStep(const T&) {count++;}
void AddStep(Ctrl& sN);
bool IsFirst(int step);
bool IsLast(int step);
void SetVisibility(Ctrl& sN,int n);
void UpdateButtons();
void DoStep();
void PerformChanges();
void Cancel();
};

//$-
//just a simple typing savers ...
#define MAP_FN_ON_STEPS(FN) \
FN(s0); FN(s1); FN(s2); FN(s3); FN(s4); FN(s5); FN(s6); FN(s7); FN(s8); FN(s9);
#define MAP_FN2_ON_STEPS(FN) \
FN(s0,0); FN(s1,1); FN(s2,2); FN(s3,3); FN(s4,4); FN(s5,5); FN(s6,6); FN(s7,7); FN(s8,8); FN(s9,9);
#define WIZMEM(x) \
template <class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9> x Wizard<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>
//$+

template <class T0,class T1,class T2,class T3,class T4,class T5,class T6,class T7,class T8,class T9>\
Wizard<T0,T1,T2,T3,T4,T5,T6,T7,T8,T9>::Wizard():step(0),count(0){
SetRect(0,0,600,400);
*this << cancel.SetLabel(t_("Cancel")).RightPosZ(244, 72).BottomPosZ(4, 24)
<< prev.SetLabel(String("< ")+t_("Previous")).RightPosZ(164, 72).BottomPosZ(4, 24)
<< next.SetLabel(t_("Next")+String(" >")).RightPosZ(84, 72).BottomPosZ(4, 24)
<< finish.SetLabel(t_("Finish")).RightPosZ(4, 72).BottomPosZ(4, 24);
finish.Ok()<<=Acceptor(IDOK);
cancel.Cancel()<<=Rejector(IDCANCEL);
MAP_FN_ON_STEPS(CtrlLayout);
MAP_FN_ON_STEPS(CountStep);
MAP_FN_ON_STEPS(AddStep);
allowed=Buffer<bool>(count,true);
next<<=THISBACK(NextStep);
prev<<=THISBACK(PrevStep);
cancel<<THISBACK(Cancel);
finish<<THISBACK(PerformChanges);
next.SetFocus();
DoStep();
}
WIZMEM(void)::NextStep(){
while(!allowed[++step]){}
DoStep();
}
WIZMEM(void)::PrevStep(){
while(!allowed[--step]){}
DoStep();
}
WIZMEM(void)::SetStep(int n){
ASSERT(n<count);
step=n;
DoStep();
}
WIZMEM(void)::AddStep(Ctrl& sN){
Add(sN.HSizePosZ(4,4).VSizePosZ(4,28));
}
WIZMEM(bool)::IsFirst(int step){
if(step==0) return true;
for(int i=step-1; i>=0; i--)
if(allowed[i]) return false;
return true;
}
WIZMEM(bool)::IsLast(int step){
if(step==count-1) return true;
for(int i=step+1; i<count; i++)
if(allowed[i]) return false;
return true;
}
WIZMEM(void)::SetVisibility(Ctrl& sN,int n){
sN.Show(step==n);
}
WIZMEM(void)::UpdateButtons(){
prev.Enable(!IsFirst(step));
next.Enable(!IsLast(step));
}
WIZMEM(void)::DoStep(){
WhenStep(step);
UpdateButtons();
MAP_FN2_ON_STEPS(SetVisibility);
}
WIZMEM(void)::PerformChanges(){
Hide();
WhenFinish();
Close();
}
WIZMEM(void)::Cancel(){
Hide();
WhenCancel();
Close();
}

#undef WIZMEM
#undef MAP_FN_ON_STEPS
#undef MAP_FN2_ON_STEPS

END_UPP_NAMESPACE;
#endif

Change log

r4457 by cxl on Jan 21, 2012   Diff
*uppsrc: Fixed many GCC warnings
Go to: 
Project members, sign in to write a code review

Older revisions

r3307 by dolik on Mar 24, 2011   Diff
theide: new source updating system
All revisions of this file

File info

Size: 3890 bytes, 142 lines
Powered by Google Project Hosting