X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.browsing.ui%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2FColumn.java;fp=bundles%2Forg.simantics.browsing.ui%2Fsrc%2Forg%2Fsimantics%2Fbrowsing%2Fui%2FColumn.java;h=9ef15f1c22340c0c9557330226e3056b90e60a5e;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.browsing.ui/src/org/simantics/browsing/ui/Column.java b/bundles/org.simantics.browsing.ui/src/org/simantics/browsing/ui/Column.java new file mode 100644 index 000000000..9ef15f1c2 --- /dev/null +++ b/bundles/org.simantics.browsing.ui/src/org/simantics/browsing/ui/Column.java @@ -0,0 +1,268 @@ +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.browsing.ui; + + +/** + * Immutable descriptor for an IGraphExplorer Column. + * + * Columns can be specified to be space-grabbing or non-space-grabbing. When a + * column is marked as grabbing, it will receive/lose its own weight's worth of + * screen space when the parenting control is resized in a way that allows + * columns to shrink or grow. + * + * Each column is identified by a string that must be unique among the set of + * columns used at a time. The key must be a valid string, null is + * not allowed. + * + * See @see org.simantics.browsing.ui.common.ColumnKeys for some + * commonly usable column keys. + * + * @see ColumnFactory + * + * @author Tuukka Lehtonen + */ +public final class Column { + + public static enum Align { + LEFT, + CENTER, + RIGHT + } + + public static final int UNDEFINED_CONTROL_WIDTH = -1; + + public static final int DEFAULT_CONTROL_WIDTH = UNDEFINED_CONTROL_WIDTH; + + /** + * Name of the column. + * @see ColumnKeys + */ + private final String key; + + /** + * Text to be shown in the column. + * @see ColumnKeys + */ + private final String label; + + /** + * Content alignment used by this column. + */ + private final Align alignment; + + /** + * -1 means not specified. If grab == false, this describes the default + * width, if grab == true, this describes the minimum width of the column. + */ + private final int width; + + /** + * A string to show as tooltip or null. + */ + private final String tooltip; + + /** + * Indicates whether this column participates in grabbing extra widget space + * that is freed when columns are resized. + */ + private final boolean grab; + + /** + * Weight describes how much a space-grabbing column will grab or release of + * screen space that is gained or lost when controls are resized. The + * percentage of space given to a column is defined by the formula: + * 100*weight / sum(all column weights) + */ + private final int weight; + + public Column(String key) { + this(key, key, Align.LEFT); + } + + public Column(String key, String label, Align alignment) { + this(key, label, alignment, DEFAULT_CONTROL_WIDTH); + } + + public Column(String key, String label, Align alignment, int width) { + this(key, label, alignment, width, null); + } + + public Column(String key, Align alignment, int width) { + this(key, key, alignment, width, null); + } + + public Column(String key, Align alignment, int width, String tooltip) { + this(key, key, alignment, width, tooltip); + } + + public Column(String key, Align alignment, int width, String tooltip, boolean grab) { + this(key, key, alignment, width, tooltip, grab); + } + + public Column(String key, Align alignment, int width, String tooltip, boolean grab, int weight) { + this(key, key, alignment, width, tooltip, grab, weight); + } + + public Column(String key, String label, Align alignment, int width, String tooltip) { + this(key, label, alignment, width, tooltip, false); + } + + public Column(String key, String label, Align alignment, int width, String tooltip, boolean grab) { + this(key, label, alignment, width, tooltip, grab, 1); + } + + public Column(String key, String label, Align alignment, int width, String tooltip, boolean grab, int weight) { + if (alignment == null) + throw new IllegalArgumentException("null alignment"); + if (key == null) + throw new IllegalArgumentException("null key"); + + this.key = key; + this.label = label; + this.alignment = alignment; + this.width = width; + this.tooltip = tooltip; + this.grab = grab; + this.weight = weight; + } + + public String getKey() { + return key; + } + + public String getLabel() { + return label; + } + + public Align getAlignment() { + return alignment; + } + + public int getWidth() { + return width; + } + + public String getTooltip() { + return tooltip; + } + + public boolean hasGrab() { + return grab; + } + + public int getWeight() { + return weight; + } + + public Column withKey(String key) { + return new Column(key, this.label, this.alignment, this.width, this.tooltip, this.grab, this.weight); + } + + public Column withLabel(String label) { + return new Column(this.key, label, this.alignment, this.width, this.tooltip, this.grab, this.weight); + } + + public Column withAlignment(Align alignment) { + return new Column(this.key, this.label, alignment, this.width, this.tooltip, this.grab, this.weight); + } + + public Column withWidth(int width) { + return new Column(this.key, this.label, this.alignment, width, this.tooltip, this.grab, this.weight); + } + + public Column withTooltip(String tooltip) { + return new Column(this.key, this.label, this.alignment, this.width, tooltip, this.grab, this.weight); + } + + public Column withGrab(boolean grab) { + return new Column(this.key, this.label, this.alignment, this.width, this.tooltip, grab, this.weight); + } + + public Column withWeight(int weight) { + return new Column(this.key, this.label, this.alignment, this.width, this.tooltip, this.grab, weight); + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + alignment.hashCode(); + result = prime * result + (grab ? 1231 : 1237); + result = prime * result + ((key == null) ? 0 : key.hashCode()); + result = prime * result + ((label == null) ? 0 : label.hashCode()); + result = prime * result + ((tooltip == null) ? 0 : tooltip.hashCode()); + result = prime * result + width; + result = prime * result + weight; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Column other = (Column) obj; + if (alignment != other.alignment) + return false; + if (grab != other.grab) + return false; + if (key == null) { + if (other.key != null) + return false; + } else if (!key.equals(other.key)) + return false; + if (label == null) { + if (other.label != null) + return false; + } else if (!label.equals(other.label)) + return false; + if (tooltip == null) { + if (other.tooltip != null) + return false; + } else if (!tooltip.equals(other.tooltip)) + return false; + if (width != other.width) + return false; + if (weight != other.weight) + return false; + return true; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Column[key="); + sb.append(key); + if (!key.equals(label)) + sb.append(", label="); + sb.append(label); + sb.append(", align="); + sb.append(alignment); + sb.append(", width="); + sb.append(width); + if (!label.equals(tooltip)) { + sb.append(", tooltip="); + sb.append(tooltip); + } + sb.append(", grab="); + sb.append(grab); + sb.append(", weight="); + sb.append(weight); + sb.append("]"); + return sb.toString(); + } + +}