aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-10-27 15:29:19 -0500
committerSean Hall <r.sean.hall@gmail.com>2021-11-01 16:34:09 -0500
commitdce1c97c7d3e76c18e4f80d4ffe288d2933a74bc (patch)
tree68dc0653ee1a6fe962d82dac2159c8ab00a95808 /src/test
parentbad2e93524f376cfeb76d5231d4b08510bdad033 (diff)
downloadwix-dce1c97c7d3e76c18e4f80d4ffe288d2933a74bc.tar.gz
wix-dce1c97c7d3e76c18e4f80d4ffe288d2933a74bc.tar.bz2
wix-dce1c97c7d3e76c18e4f80d4ffe288d2933a74bc.zip
Make thmutil automatically load controls during window creation.
Add control loaded event.
Diffstat (limited to 'src/test')
-rw-r--r--src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp103
-rw-r--r--src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingTheme.xml21
-rw-r--r--src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingThemeLoose.xml158
3 files changed, 234 insertions, 48 deletions
diff --git a/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp b/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp
index a5bcba3e..8304403a 100644
--- a/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp
+++ b/src/test/burn/TestData/Manual/BafThmutilTesting/BafThmUtilTesting.cpp
@@ -230,18 +230,14 @@ private:
230 return lres; 230 return lres;
231 } 231 }
232 232
233 case WM_CREATE:
234 if (!pBaf->OnCreate(hWnd))
235 {
236 return -1;
237 }
238 break;
239
240 case WM_THMUTIL_LOADING_CONTROL: 233 case WM_THMUTIL_LOADING_CONTROL:
241 return pBaf->OnThemeLoadingControl(reinterpret_cast<THEME_LOADINGCONTROL_ARGS*>(wParam), reinterpret_cast<THEME_LOADINGCONTROL_RESULTS*>(lParam)); 234 return pBaf->OnThemeLoadingControl(reinterpret_cast<THEME_LOADINGCONTROL_ARGS*>(wParam), reinterpret_cast<THEME_LOADINGCONTROL_RESULTS*>(lParam));
242 235
236 case WM_THMUTIL_LOADED_CONTROL:
237 return pBaf->OnThemeLoadedControl(hWnd, reinterpret_cast<THEME_LOADEDCONTROL_ARGS*>(wParam), reinterpret_cast<THEME_LOADEDCONTROL_RESULTS*>(lParam));
238
243 case WM_TIMER: 239 case WM_TIMER:
244 if (!lParam && pBaf) 240 if (!lParam && BAFTHMUTILTESTING_CONTROL_PROGRESSBAR_IMAGE == wParam && pBaf)
245 { 241 {
246 pBaf->UpdateProgressBarProgress(); 242 pBaf->UpdateProgressBarProgress();
247 243
@@ -253,33 +249,14 @@ private:
253 return ThemeDefWindowProc(pBaf ? pBaf->m_pBafTheme : NULL, hWnd, uMsg, wParam, lParam); 249 return ThemeDefWindowProc(pBaf ? pBaf->m_pBafTheme : NULL, hWnd, uMsg, wParam, lParam);
254 } 250 }
255 251
256 BOOL OnCreate( 252 HRESULT OnCreatedListView(
257 __in HWND hWnd 253 __in HWND hWndListView
258 ) 254 )
259 { 255 {
260 HRESULT hr = S_OK; 256 HRESULT hr = S_OK;
261 LVITEMW lvitem = { }; 257 LVITEMW lvitem = { };
262 LVGROUP lvgroup = { }; 258 LVGROUP lvgroup = { };
263 static UINT puColumns[] = { 0, 1, 2 }; 259 static UINT puColumns[] = { 0, 1, 2 };
264 HWND hwndTopLeft = NULL;
265 HWND hwndTopRight = NULL;
266 HWND hwndBottomLeft = NULL;
267 HWND hwndBottomRight = NULL;
268
269 hr = ThemeLoadControls(m_pBafTheme);
270 BalExitOnFailure(hr, "Failed to load theme controls.");
271
272 hwndTopLeft = ::GetDlgItem(m_pBafTheme->hwndParent, BAFTHMUTILTESTING_CONTROL_LISTVIEW_TOP_LEFT);
273 BalExitOnNull(hwndTopLeft, hr, E_INVALIDSTATE, "Failed to get top left list view hWnd.");
274
275 hwndTopRight = ::GetDlgItem(m_pBafTheme->hwndParent, BAFTHMUTILTESTING_CONTROL_LISTVIEW_TOP_RIGHT);
276 BalExitOnNull(hwndTopRight, hr, E_INVALIDSTATE, "Failed to get top right list view hWnd.");
277
278 hwndBottomLeft = ::GetDlgItem(m_pBafTheme->hwndParent, BAFTHMUTILTESTING_CONTROL_LISTVIEW_BOTTOM_LEFT);
279 BalExitOnNull(hwndBottomLeft, hr, E_INVALIDSTATE, "Failed to get bottom left list view hWnd.");
280
281 hwndBottomRight = ::GetDlgItem(m_pBafTheme->hwndParent, BAFTHMUTILTESTING_CONTROL_LISTVIEW_BOTTOM_RIGHT);
282 BalExitOnNull(hwndBottomRight, hr, E_INVALIDSTATE, "Failed to get bottom right list view hWnd.");
283 260
284 lvgroup.cbSize = sizeof(LVGROUP); 261 lvgroup.cbSize = sizeof(LVGROUP);
285 lvgroup.mask = LVGF_GROUPID | LVGF_TITLEIMAGE | LVGF_DESCRIPTIONTOP | LVGF_HEADER; 262 lvgroup.mask = LVGF_GROUPID | LVGF_TITLEIMAGE | LVGF_DESCRIPTIONTOP | LVGF_HEADER;
@@ -295,10 +272,7 @@ private:
295 hr = StrAllocFormatted(&lvgroup.pszHeader, L"Header_%d", i); 272 hr = StrAllocFormatted(&lvgroup.pszHeader, L"Header_%d", i);
296 BalExitOnFailure(hr, "Failed to alloc list view group header."); 273 BalExitOnFailure(hr, "Failed to alloc list view group header.");
297 274
298 ListView_InsertGroup(hwndTopLeft, -1, &lvgroup); 275 ListView_InsertGroup(hWndListView, -1, &lvgroup);
299 ListView_InsertGroup(hwndTopRight, -1, &lvgroup);
300 ListView_InsertGroup(hwndBottomLeft, -1, &lvgroup);
301 ListView_InsertGroup(hwndBottomRight, -1, &lvgroup);
302 276
303 lvitem.mask = LVIF_COLUMNS | LVIF_GROUPID | LVIF_IMAGE | LVIF_TEXT; 277 lvitem.mask = LVIF_COLUMNS | LVIF_GROUPID | LVIF_IMAGE | LVIF_TEXT;
304 lvitem.iItem = i; 278 lvitem.iItem = i;
@@ -312,10 +286,7 @@ private:
312 lvitem.cColumns = countof(puColumns); 286 lvitem.cColumns = countof(puColumns);
313 lvitem.puColumns = puColumns; 287 lvitem.puColumns = puColumns;
314 288
315 ListView_InsertItem(hwndTopLeft, &lvitem); 289 ListView_InsertItem(hWndListView, &lvitem);
316 ListView_InsertItem(hwndTopRight, &lvitem);
317 ListView_InsertItem(hwndBottomLeft, &lvitem);
318 ListView_InsertItem(hwndBottomRight, &lvitem);
319 290
320 for (int j = 0; j < 3; ++j) 291 for (int j = 0; j < 3; ++j)
321 { 292 {
@@ -325,23 +296,16 @@ private:
325 hr = StrAllocFormatted(&lvitem.pszText, L"%d_%d", j, i); 296 hr = StrAllocFormatted(&lvitem.pszText, L"%d_%d", j, i);
326 BalExitOnFailure(hr, "Failed to alloc list view subitem text."); 297 BalExitOnFailure(hr, "Failed to alloc list view subitem text.");
327 298
328 ListView_InsertItem(hwndTopLeft, &lvitem); 299 ListView_InsertItem(hWndListView, &lvitem);
329 ListView_InsertItem(hwndTopRight, &lvitem);
330 ListView_InsertItem(hwndBottomLeft, &lvitem);
331 ListView_InsertItem(hwndBottomRight, &lvitem);
332 } 300 }
333 } 301 }
334 302
335 ListView_EnableGroupView(hwndTopRight, TRUE);
336
337 ::SetTimer(hWnd, BAFTHMUTILTESTING_CONTROL_PROGRESSBAR_IMAGE, 500, NULL);
338
339 LExit: 303 LExit:
340 ReleaseStr(lvgroup.pszDescriptionTop); 304 ReleaseStr(lvgroup.pszDescriptionTop);
341 ReleaseStr(lvgroup.pszHeader); 305 ReleaseStr(lvgroup.pszHeader);
342 ReleaseStr(lvitem.pszText); 306 ReleaseStr(lvitem.pszText);
343 307
344 return SUCCEEDED(hr); 308 return hr;
345 } 309 }
346 310
347 BOOL OnThemeLoadingControl( 311 BOOL OnThemeLoadingControl(
@@ -349,17 +313,60 @@ private:
349 __in THEME_LOADINGCONTROL_RESULTS* pResults 313 __in THEME_LOADINGCONTROL_RESULTS* pResults
350 ) 314 )
351 { 315 {
316 HRESULT hr = S_OK;
317 BOOL fProcessed = FALSE;
318
352 for (DWORD iAssignControl = 0; iAssignControl < countof(vrgInitControls); ++iAssignControl) 319 for (DWORD iAssignControl = 0; iAssignControl < countof(vrgInitControls); ++iAssignControl)
353 { 320 {
354 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pArgs->pThemeControl->sczName, -1, vrgInitControls[iAssignControl].wzName, -1)) 321 if (CSTR_EQUAL == ::CompareStringW(LOCALE_NEUTRAL, 0, pArgs->pThemeControl->sczName, -1, vrgInitControls[iAssignControl].wzName, -1))
355 { 322 {
323 fProcessed = TRUE;
356 pResults->wId = vrgInitControls[iAssignControl].wId; 324 pResults->wId = vrgInitControls[iAssignControl].wId;
357 break; 325 break;
358 } 326 }
359 } 327 }
360 328
361 pResults->hr = S_OK; 329 pResults->hr = hr;
362 return TRUE; 330 return fProcessed || FAILED(hr);
331 }
332
333 BOOL OnThemeLoadedControl(
334 __in HWND hWndParent,
335 __in const THEME_LOADEDCONTROL_ARGS* pArgs,
336 __in THEME_LOADEDCONTROL_RESULTS* pResults
337 )
338 {
339 HRESULT hr = S_OK;
340 BOOL fProcessed = FALSE;
341
342 switch (pArgs->pThemeControl->wId)
343 {
344 case BAFTHMUTILTESTING_CONTROL_LISTVIEW_TOP_LEFT:
345 case BAFTHMUTILTESTING_CONTROL_LISTVIEW_TOP_RIGHT:
346 case BAFTHMUTILTESTING_CONTROL_LISTVIEW_BOTTOM_LEFT:
347 case BAFTHMUTILTESTING_CONTROL_LISTVIEW_BOTTOM_RIGHT:
348 fProcessed = TRUE;
349
350 hr = OnCreatedListView(pArgs->pThemeControl->hWnd);
351 ExitOnFailure(hr, "Failed to populate list view.");
352
353 if (BAFTHMUTILTESTING_CONTROL_LISTVIEW_TOP_RIGHT == pArgs->pThemeControl->wId)
354 {
355 ListView_EnableGroupView(pArgs->pThemeControl->hWnd, TRUE);
356 }
357
358 break;
359
360 case BAFTHMUTILTESTING_CONTROL_PROGRESSBAR_STANDARD:
361 fProcessed = TRUE;
362
363 ::SetTimer(hWndParent, BAFTHMUTILTESTING_CONTROL_PROGRESSBAR_IMAGE, 500, NULL);
364 break;
365 }
366
367 LExit:
368 pResults->hr = hr;
369 return fProcessed || FAILED(hr);
363 } 370 }
364 371
365 void UpdateProgressBarProgress() 372 void UpdateProgressBarProgress()
diff --git a/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingTheme.xml b/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingTheme.xml
index 0d0dabf5..7491ab1c 100644
--- a/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingTheme.xml
+++ b/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingTheme.xml
@@ -124,6 +124,27 @@ There are currently four states for a button: default, focus, hover, and selecte
124 <Text>Back</Text> 124 <Text>Back</Text>
125 <ChangePageAction Page="Button" /> 125 <ChangePageAction Page="Button" />
126 </Button> 126 </Button>
127 <Button Name="BillboardButton" X="-183" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
128 <Text>Next</Text>
129 <ChangePageAction Page="Billboard" />
130 </Button>
131 </Page>
132 <Page Name="Billboard">
133 <Label X="6" Y="6" Width="-6" Height="43" FontId="Default">
134 This page has a billboard. It loops between two panels every 1.5 seconds. Only one button should be visible at all times (this is currently broken).
135 </Label>
136 <Billboard Name="FirstBillboard" X="11" Y="59" Width="-11" Height="-39" Interval="1500" Loop="yes">
137 <BillboardPanel>
138 <Button Name="FirstBillboardButton1" X="11" Y="11" Width="75" Height="23" TabStop="yes" FontId="Default">First Panel</Button>
139 </BillboardPanel>
140 <BillboardPanel>
141 <Button Name="FirstBillboardButton2" X="11" Y="39" Width="75" Height="23" TabStop="yes" FontId="Default">Second Panel</Button>
142 </BillboardPanel>
143 </Billboard>
144 <Button Name="BillboardBackButton" X="-269" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
145 <Text>Back</Text>
146 <ChangePageAction Page="Progressbar" />
147 </Button>
127 </Page> 148 </Page>
128 <Button Name="StartButton" X="-97" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default" Visible="yes"> 149 <Button Name="StartButton" X="-97" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default" Visible="yes">
129 <Text>Start</Text> 150 <Text>Start</Text>
diff --git a/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingThemeLoose.xml b/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingThemeLoose.xml
new file mode 100644
index 00000000..7e360544
--- /dev/null
+++ b/src/test/burn/TestData/Manual/BafThmutilTesting/theme/BafThmUtilTestingThemeLoose.xml
@@ -0,0 +1,158 @@
1<?xml version="1.0" encoding="utf-8"?>
2<!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4
5<Theme xmlns="http://wixtoolset.org/schemas/v4/thmutil">
6 <Font Id="Default" Height="-12" Weight="500" Foreground="windowtext" Background="window">Segoe UI</Font>
7 <Image Id="star_transparent.bmp" ImageFile="star_transparent.bmp" />
8 <Image Id="star_opaque.bmp" ImageFile="star_opaque.bmp" />
9 <Image Id="star_transparent.png" ImageFile="star_transparent.png" />
10 <Image Id="square_default" ImageFile="16x16.png">
11 <AlternateResolution ImageFile="32x32.png" />
12 <AlternateResolution ImageFile="64x64.png" />
13 <AlternateResolution ImageFile="128x128.png" />
14 <AlternateResolution ImageFile="256x256.png" />
15 </Image>
16 <Image Id="square_focus" ImageFile="64x64_focus.png">
17 <AlternateResolution ImageFile="128x128_focus.png" />
18 <AlternateResolution ImageFile="256x256_focus.png" />
19 </Image>
20 <Image Id="square_hover" ImageFile="64x64_hover.png">
21 <AlternateResolution ImageFile="128x128_hover.png" />
22 <AlternateResolution ImageFile="256x256_hover.png" />
23 </Image>
24 <Image Id="square_selected" ImageFile="64x64_selected.png">
25 <AlternateResolution ImageFile="128x128_selected.png" />
26 <AlternateResolution ImageFile="256x256_selected.png" />
27 </Image>
28 <Image Id="progressbar" ImageFile="progressbar.bmp" />
29 <Image Id="progressbar_reverse" ImageFile="progressbar_reverse.bmp" />
30
31 <Window Width="600" Height="450" FontId="Default" Caption="BafThmUtilTestingTheme" HexStyle="10cf0000" AutoResize="yes">
32 <ImageList Name="Stars">
33 <ImageListItem ImageFile="star_transparent.bmp" />
34 <ImageListItem ImageFile="star_opaque.bmp" />
35 <ImageListItem ImageFile="star_transparent.png" />
36 </ImageList>
37 <Page Name="Transparency">
38 <Label X="6" Y="6" Width="-6" Height="94" FontId="Default">
39 This page has three versions of an image. The top image is a bitmap with a transparent background, the yellow star should be visible but its black background should not (this is currently broken). The middle image is the same bitmap except the black background is fully opaque so the yellow star should be visible on a black background. The bottom image in a PNG version of the top image and should look exactly the same.
40 </Label>
41 <ImageControl X="6" Y="106" Width="64" Height="64" ImageId="star_transparent.bmp" />
42 <ImageControl X="6" Y="176" Width="64" Height="64" ImageId="star_opaque.bmp" />
43 <ImageControl X="6" Y="246" Width="64" Height="64" ImageId="star_transparent.png" />
44 <Button Name="ListViewButton" X="-183" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
45 <Text>Next</Text>
46 <ChangePageAction Page="ListView" />
47 </Button>
48 </Page>
49 <Page Name="ListView">
50 <Label X="6" Y="6" Width="-6" Height="18" FontId="Default">
51 This page is for testing ListView.
52 </Label>
53 <ListView Name="ListViewTopLeft" X="6" Y="30" Width="288" Height="176" FontId="Default" HexStyle="00" ImageList="Stars">
54 <Column Width="100">TL One</Column>
55 <Column Width="100">TL Two</Column>
56 <Column Width="88">TL Three</Column>
57 </ListView>
58 <ListView Name="ListViewTopRight" X="300" Y="30" Width="-11" Height="176" FontId="Default" HexStyle="01" ImageListGroupHeader="Stars">
59 <Column Width="100">TR One</Column>
60 <Column Width="100">TR Two</Column>
61 <Column Width="88" Expands="yes">TR Exp</Column>
62 </ListView>
63 <ListView Name="ListViewBottomLeft" X="6" Y="212" Width="288" Height="176" FontId="Default" HexStyle="02" ImageListSmall="Stars">
64 <Column Width="100">BL One</Column>
65 <Column Width="100">BL Two</Column>
66 <Column Width="88">BL Three</Column>
67 </ListView>
68 <ListView Name="ListViewBottomRight" X="300" Y="212" Width="-11" Height="176" FontId="Default" HexStyle="03">
69 <Column Width="100">BR One</Column>
70 <Column Width="100">BR Two</Column>
71 <Column Width="88" Expands="yes">BR Exp</Column>
72 </ListView>
73 <Button Name="ListViewBackButton" X="-269" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
74 <Text>Back</Text>
75 <ChangePageAction Page="Transparency" />
76 </Button>
77 <Button Name="ButtonButton" X="-183" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
78 <Text>Next</Text>
79 <ChangePageAction Page="Button" />
80 </Button>
81 </Page>
82 <Page Name="Button">
83 <Label X="6" Y="6" Width="-6" Height="132" FontId="Default">
84 This page is for testing graphical buttons. The left image is 16x16 at 100% scaling, the middle image is 32x32 at 100% scaling. The images for the buttons display their dimensions, so the left should be 16x16 at 100% but 32x32 at 200%. The right button starts at 32x32 at 100%, but grows and shrinks with the window and its image should also change.
85
86There are currently four states for a button: default, focus, hover, and selected (in that priority order). There should be a different image for each state, although the left button should have a focus rectangle over the default image since it didn't specify an image for the focused state.
87 </Label>
88 <Button Name="Square16Button" X="6" Y="140" Width="16" Height="16" FontId="Default" TabStop="yes">
89 <ButtonImage ImageId="square_default" />
90 <ButtonHoverImage ImageId="square_hover" />
91 <ButtonSelectedImage ImageId="square_selected" />
92 </Button>
93 <Button Name="Square32Button" X="54" Y="140" Width="32" Height="32" FontId="Default" TabStop="yes">
94 <ButtonImage ImageId="square_default" />
95 <ButtonFocusImage ImageId="square_focus" />
96 <ButtonHoverImage ImageId="square_hover" />
97 <ButtonSelectedImage ImageId="square_selected" />
98 </Button>
99 <Button Name="SquareExpandButton" X="92" Y="140" Width="-476" Height="-278" FontId="Default" TabStop="yes">
100 <ButtonImage ImageId="square_default" />
101 <ButtonFocusImage ImageId="square_focus" />
102 <ButtonHoverImage ImageId="square_hover" />
103 <ButtonSelectedImage ImageId="square_selected" />
104 </Button>
105 <Button Name="ButtonBackButton" X="-269" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
106 <Text>Back</Text>
107 <ChangePageAction Page="ListView" />
108 </Button>
109 <Button Name="ProgressbarButton" X="-183" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
110 <Text>Next</Text>
111 <ChangePageAction Page="Progressbar" />
112 </Button>
113 </Page>
114 <Page Name="Progressbar">
115 <Label X="6" Y="6" Width="-6" Height="94" FontId="Default">
116 This page has two progress bars. The top progress bar is a standard control, the bottom one is custom drawn from an image. The bottom one should have its left side one pixel wide as black, the right side one pixel wide as grey, the progress as green, and the remaining as blue. The colors should be reversed when the progress goes backward (this is a way to test different colors, not a standard feature of thmutil).
117 </Label>
118 <Progressbar Name="StandardProgressBar" X="6" Y="106" Width="-6" Height="23" />
119 <Progressbar Name="ImageProgressBar" X="6" Y="141" Width="-6" Height="23">
120 <ProgressbarImage ImageId="progressbar" />
121 <ProgressbarImage ImageId="progressbar_reverse" />
122 </Progressbar>
123 <Button Name="ProgressbarBackButton" X="-269" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
124 <Text>Back</Text>
125 <ChangePageAction Page="Button" />
126 </Button>
127 <Button Name="BillboardButton" X="-183" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
128 <Text>Next</Text>
129 <ChangePageAction Page="Billboard" />
130 </Button>
131 </Page>
132 <Page Name="Billboard">
133 <Label X="6" Y="6" Width="-6" Height="43" FontId="Default">
134 This page has a billboard. It loops between two panels every 1.5 seconds. Only one button should be visible at all times (this is currently broken).
135 </Label>
136 <Billboard Name="FirstBillboard" X="11" Y="59" Width="-11" Height="-39" Interval="1500" Loop="yes">
137 <BillboardPanel>
138 <Button Name="FirstBillboardButton1" X="11" Y="11" Width="75" Height="23" TabStop="yes" FontId="Default">First Panel</Button>
139 </BillboardPanel>
140 <BillboardPanel>
141 <Button Name="FirstBillboardButton2" X="11" Y="39" Width="75" Height="23" TabStop="yes" FontId="Default">Second Panel</Button>
142 </BillboardPanel>
143 </Billboard>
144 <Button Name="BillboardBackButton" X="-269" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default">
145 <Text>Back</Text>
146 <ChangePageAction Page="Progressbar" />
147 </Button>
148 </Page>
149 <Button Name="StartButton" X="-97" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default" Visible="yes">
150 <Text>Start</Text>
151 <ChangePageAction Page="Transparency" />
152 </Button>
153 <Button Name="CloseButton" X="-11" Y="-11" Width="75" Height="23" TabStop="yes" FontId="Default" Visible="yes">
154 <Text>ThemeClose</Text>
155 <CloseWindowAction />
156 </Button>
157 </Window>
158</Theme>