75
|
1 /*******************************************************************************
|
|
2 * Copyright (c) 2004, 2007 IBM Corporation and others.
|
|
3 * All rights reserved. This program and the accompanying materials
|
|
4 * are made available under the terms of the Eclipse Public License v1.0
|
|
5 * which accompanies this distribution, and is available at
|
|
6 * http://www.eclipse.org/legal/epl-v10.html
|
|
7 *
|
|
8 * Contributors:
|
|
9 * IBM Corporation - initial API and implementation
|
|
10 * Port to the D programming language:
|
|
11 * Frank Benoit <benoit@tionex.de>
|
|
12 *******************************************************************************/
|
|
13 module dwtx.ui.internal.forms.widgets.WrappedPageBook;
|
|
14
|
|
15 import dwt.DWT;
|
|
16 import dwt.graphics.Point;
|
|
17 import dwt.widgets.Composite;
|
|
18 import dwt.widgets.Control;
|
|
19 import dwt.widgets.Layout;
|
|
20 import dwtx.ui.forms.widgets.ILayoutExtension;
|
|
21
|
|
22 import dwt.dwthelper.utils;
|
|
23
|
|
24 /**
|
|
25 * A pagebook is a composite control where only a single control is visible at
|
|
26 * a time. It is similar to a notebook, but without tabs.
|
|
27 * <p>
|
|
28 * This class may be instantiated; it is not intended to be subclassed.
|
|
29 * </p>
|
|
30 */
|
|
31 public class WrappedPageBook : Composite {
|
|
32 class PageBookLayout : Layout, ILayoutExtension {
|
|
33 protected Point computeSize(Composite composite, int wHint, int hHint,
|
|
34 bool flushCache) {
|
|
35 if (wHint !is DWT.DEFAULT && hHint !is DWT.DEFAULT)
|
|
36 return new Point(wHint, hHint);
|
|
37 Point result = null;
|
|
38 if (currentPage !is null) {
|
|
39 result = currentPage.computeSize(wHint, hHint, flushCache);
|
|
40 } else {
|
|
41 result = new Point(0, 0);
|
|
42 }
|
|
43 return result;
|
|
44 }
|
|
45 protected void layout(Composite composite, bool flushCache) {
|
|
46 if (currentPage !is null) {
|
|
47 currentPage.setBounds(composite.getClientArea());
|
|
48 }
|
|
49 }
|
|
50 /*
|
|
51 * (non-Javadoc)
|
|
52 *
|
|
53 * @see dwtx.ui.forms.widgets.ILayoutExtension#computeMaximumWidth(dwt.widgets.Composite,
|
|
54 * bool)
|
|
55 */
|
|
56 public int computeMaximumWidth(Composite parent, bool changed) {
|
|
57 return computeSize(parent, DWT.DEFAULT, DWT.DEFAULT, changed).x;
|
|
58 }
|
|
59 /*
|
|
60 * (non-Javadoc)
|
|
61 *
|
|
62 * @see dwtx.ui.forms.widgets.ILayoutExtension#computeMinimumWidth(dwt.widgets.Composite,
|
|
63 * bool)
|
|
64 */
|
|
65 public int computeMinimumWidth(Composite parent, bool changed) {
|
|
66 return computeSize(parent, 0, DWT.DEFAULT, changed).x;
|
|
67 }
|
|
68 }
|
|
69 /**
|
|
70 * The current control; <code>null</code> if none.
|
|
71 */
|
|
72 private Control currentPage = null;
|
|
73 /**
|
|
74 * Creates a new empty pagebook.
|
|
75 *
|
|
76 * @param parent
|
|
77 * the parent composite
|
|
78 * @param style
|
|
79 * the DWT style bits
|
|
80 */
|
|
81 public this(Composite parent, int style) {
|
|
82 super(parent, style);
|
|
83 setLayout(new PageBookLayout());
|
|
84 }
|
|
85 /**
|
|
86 * Shows the given page. This method has no effect if the given page is not
|
|
87 * contained in this pagebook.
|
|
88 *
|
|
89 * @param page
|
|
90 * the page to show
|
|
91 */
|
|
92 public void showPage(Control page) {
|
|
93 if (page is currentPage)
|
|
94 return;
|
|
95 if (page.getParent() !is this)
|
|
96 return;
|
|
97 Control oldPage = currentPage;
|
|
98 currentPage = page;
|
|
99 // show new page
|
|
100 if (page !is null) {
|
|
101 if (!page.isDisposed()) {
|
|
102 //page.setVisible(true);
|
|
103 layout(true);
|
|
104 page.setVisible(true);
|
|
105 }
|
|
106 }
|
|
107 // hide old *after* new page has been made visible in order to avoid
|
|
108 // flashing
|
|
109 if (oldPage !is null && !oldPage.isDisposed())
|
|
110 oldPage.setVisible(false);
|
|
111 }
|
|
112 public Point computeSize(int wHint, int hHint, bool changed) {
|
|
113 return (cast(PageBookLayout) getLayout()).computeSize(this, wHint, hHint,
|
|
114 changed);
|
|
115 }
|
|
116 }
|