pjs/grendel/search/AttributeLayout.java

127 строки
3.7 KiB
Java

/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Mozilla Public License
* Version 1.0 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
* the License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is the Grendel mail/news client.
*
* The Initial Developer of the Original Code is Netscape Communications
* Corporation. Portions created by Netscape are Copyright (C) 1997
* Netscape Communications Corporation. All Rights Reserved.
*
* Created: Will Scullin <scullin@netscape.com>, 4 Nov 1997.
*/
package grendel.search;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager2;
import java.awt.IllegalComponentStateException;
class AttributeLayout implements LayoutManager2 {
int fMargin = 4;
Component fAttribute;
Component fOperator;
Component fValue;
public static final String kAttribute = "attribute";
public static final String kOperator = "operator";
public static final String kValue = "value";
public void addLayoutComponent(Component aComponent, Object aConstraint) {
if (aConstraint.equals(kAttribute) && fAttribute == null) {
fAttribute = aComponent;
} else if (aConstraint.equals(kOperator) && fOperator == null) {
fOperator = aComponent;
} else if (aConstraint.equals(kValue) && fValue == null) {
fValue = aComponent;
} else {
throw new IllegalComponentStateException();
}
}
public void addLayoutComponent(String aConstraint, Component aComponent) {
addLayoutComponent(aComponent, aConstraint);
}
public void removeLayoutComponent(Component aComponent) {
if (aComponent == fAttribute) {
fAttribute = null;
} else if (aComponent == fOperator) {
fOperator = null;
} else if (aComponent == fValue) {
fValue = null;
}
}
public void layoutContainer(Container aParent) {
int count = aParent.getComponentCount();
Component c[] = aParent.getComponents();
Insets insets = aParent.getInsets();
Dimension size = aParent.getSize();
int x = insets.top;
int y = insets.left;
int w = size.width - fMargin * (count - 1) - insets.left - insets.right;
for (int i = 0; i < count; i++) {
Dimension dim = c[i].getPreferredSize();
if (c[i] == fValue) {
dim.width = w / 2 + w % 4;
} else {
dim.width = w / 4;
}
c[i].setBounds(x, y, dim.width, dim.height);
x += dim.width + fMargin;
}
}
public Dimension preferredLayoutSize(Container aParent) {
int count = aParent.getComponentCount();
Component c[] = aParent.getComponents();
Insets insets = aParent.getInsets();
int h = 0;
int w = 0;
for (int i = 0; i < count; i++) {
Dimension dim = c[i].getPreferredSize();
if (dim.height > h) {
h = dim.height;
}
w += dim.width;
}
w += insets.left + insets.right + (count - 1) * fMargin;
h += insets.top + insets.bottom;
return new Dimension(w, h);
}
public Dimension minimumLayoutSize(Container aParent) {
return preferredLayoutSize(aParent);
}
public Dimension maximumLayoutSize(Container aParent) {
return preferredLayoutSize(aParent);
}
public float getLayoutAlignmentX(Container aParent) {
return 0;
}
public float getLayoutAlignmentY(Container aParent) {
return 0;
}
public void invalidateLayout(Container aParent) {
}
}