annotate dwtx/jface/layout/TreeColumnLayout.d @ 32:5802cda3813d

TreeColumnLayout
author Frank Benoit <benoit@tionex.de>
date Thu, 03 Apr 2008 20:38:02 +0200
parents
children 644f1334b451
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
32
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
1 /*******************************************************************************
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2007 IBM Corporation and others.
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * Tom Schindl <tom.schindl@bestsolution.at> - initial API and implementation
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
10 * - fix for bug 178280, 183999, 184609
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
11 * IBM Corporation - API refactoring and general maintenance
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 * Port to the D programming language:
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 * Frank Benoit <benoit@tionex.de>
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14 *******************************************************************************/
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 module dwtx.jface.layout.TreeColumnLayout;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
18 import dwtx.jface.layout.AbstractColumnLayout;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
19
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.events.TreeEvent;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.events.TreeListener;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.widgets.Composite;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
23 import dwt.widgets.Layout;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.widgets.Scrollable;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25 import dwt.widgets.Tree;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import dwt.widgets.TreeColumn;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27 import dwt.widgets.Widget;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 import dwtx.jface.viewers.ColumnLayoutData;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29 import dwtx.jface.viewers.ColumnPixelData;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
30
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
31 import dwt.dwthelper.utils;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
32 import dwt.dwthelper.Runnable;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
33
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
34 /**
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
35 * The TreeColumnLayout is the {@link Layout} used to maintain {@link TreeColumn} sizes in a
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36 * {@link Tree}.
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
37 *
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
38 * <p>
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39 * <b>You can only add the {@link Layout} to a container whose <i>only</i>
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
40 * child is the {@link Tree} control you want the {@link Layout} applied to.
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
41 * Don't assign the layout directly the {@link Tree}</b>
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
42 * </p>
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43 *
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
44 * @since 3.3
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45 */
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
46 public class TreeColumnLayout : AbstractColumnLayout {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
47 private bool addListener = true;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
48
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49 private static class TreeLayoutListener : TreeListener {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 public void treeCollapsed(TreeEvent e) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
52 update(cast(Tree) e.widget);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
53 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
54
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55 public void treeExpanded(TreeEvent e) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
56 update(cast(Tree) e.widget);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
57 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
59 private void update(Tree tree) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60 tree.getDisplay().asyncExec(new class Runnable {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
61 Tree tree_;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62 this(){
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
63 tree_=tree;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
64 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
65 public void run() {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
66 tree_.update();
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
67 tree_.getParent().layout();
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
68 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
69
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
70 });
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
72
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75 private static const TreeLayoutListener listener;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77 static this(){
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
78 listener = new TreeLayoutListener();
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
79 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
80
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
81 protected void layout(Composite composite, bool flushCache) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82 super.layout(composite, flushCache);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 if( addListener ) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84 addListener=false;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 (cast(Tree)getControl(composite)).addTreeListener(listener);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
87 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
88
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
89 /* (non-Javadoc)
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
90 * @see dwtx.jface.layout.AbstractColumnLayout#getColumnCount(dwt.widgets.Scrollable)
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
91 */
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
92 int getColumnCount(Scrollable tree) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93 return (cast(Tree) tree).getColumnCount();
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 /* (non-Javadoc)
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97 * @see dwtx.jface.layout.AbstractColumnLayout#setColumnWidths(dwt.widgets.Scrollable, int[])
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
98 */
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99 void setColumnWidths(Scrollable tree, int[] widths) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
100 TreeColumn[] columns = (cast(Tree) tree).getColumns();
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101 for (int i = 0; i < widths.length; i++) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
102 columns[i].setWidth(widths[i]);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
103 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
104 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
105
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
106 /* (non-Javadoc)
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
107 * @see dwtx.jface.layout.AbstractColumnLayout#getLayoutData(dwt.widgets.Scrollable, int)
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
108 */
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
109 ColumnLayoutData getLayoutData(Scrollable tableTree, int columnIndex) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
110 TreeColumn column = (cast(Tree) tableTree).getColumn(columnIndex);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
111 return cast(ColumnLayoutData) column.getData(LAYOUT_DATA);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
112 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 void updateColumnData(Widget column) {
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115 TreeColumn tColumn = cast(TreeColumn) column;
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 Tree t = tColumn.getParent();
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
118 if( ! IS_GTK || t.getColumn(t.getColumnCount()-1) !is tColumn ){
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119 tColumn.setData(LAYOUT_DATA,new ColumnPixelData(tColumn.getWidth()));
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 layout(t.getParent(), true);
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 }
5802cda3813d TreeColumnLayout
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123 }