// THIS SOFTWARE IS PROVIDED BY SOFTARIS PTY.LTD. AND OTHER METABOSS
// CONTRIBUTORS ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING,
// BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SOFTARIS PTY.LTD.
// OR OTHER METABOSS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
// EVEN IF SOFTARIS PTY.LTD. OR OTHER METABOSS CONTRIBUTORS ARE ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//
// Copyright 2000-2005 Softaris Pty.Ltd. All Rights Reserved.
package com.metaboss.applications.designstudio.propertiesview;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableColumn;
import com.metaboss.applications.designstudio.Application;
/* Properties panel table */
public class PropertiesTable extends JTable
{
private TableColumn mFirstColumn = null;
private TableColumn mSecondColumn = null;
private boolean mMoving = false;
private boolean mLoading = true;
public PropertiesTable(AbstractTableModel pModel)
{
super(pModel);
setTableHeader(null);
setCellSelectionEnabled(false);
setRowSelectionAllowed(false);
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
setGridColor(UIManager.getColor("control").darker());
setBackground(UIManager.getColor("control"));
mFirstColumn = getColumnModel().getColumn(0);
mSecondColumn = getColumnModel().getColumn(1);
mFirstColumn.setWidth(getFirstColumnWidth());
mFirstColumn.setMinWidth(getFirstColumnWidth());
mFirstColumn.setMaxWidth(getFirstColumnWidth());
mFirstColumn.setCellRenderer(new PropertiesCellrenderer(true));
mSecondColumn.setCellRenderer(new PropertiesCellrenderer(false));
addMouseMotionListener(new TableMouseMotionAdapter(this));
addMouseListener(new TableMouseAdapter());
mLoading = false;
}
public int getFirstColumnWidth()
{
return 180;
}
protected void processMouseMotionEvent(MouseEvent e)
{
super.processMouseMotionEvent(e);
if (mMoving) setFirstColumnWidth(e.getX());
}
public void reshape(int x, int y, int w, int h)
{
super.reshape(x, y, w, h);
if (!mLoading && getWidth()>0)
setFirstColumnWidth(mFirstColumn.getWidth());
}
private boolean isMoveCursor(int x)
{
return (x>mFirstColumn.getWidth()-5 && x<mFirstColumn.getWidth()+5);
}
private void setFirstColumnWidth(int pWidth)
{
if (pWidth<20) pWidth = 20;
if (pWidth>getWidth()-20) pWidth = getWidth()-20;
mFirstColumn.setWidth(pWidth);
mFirstColumn.setMinWidth(pWidth);
mFirstColumn.setMaxWidth(pWidth);
}
/* Mouse Adapter class */
public class TableMouseAdapter extends MouseAdapter
{
public void mousePressed(MouseEvent e)
{
super.mousePressed(e);
if (isMoveCursor(e.getX())) mMoving = true;
}
public void mouseReleased(MouseEvent e)
{
super.mouseReleased(e);
mMoving = false;
}
}
/* Table Mouse Moution Adapter class */
public class TableMouseMotionAdapter extends MouseMotionAdapter
{
private JTable mTable = null;
public TableMouseMotionAdapter(JTable pTable)
{
super();
mTable = pTable;
}
public void mouseMoved(MouseEvent e)
{
if (isMoveCursor(e.getX()))
mTable.setCursor(new Cursor(Cursor.W_RESIZE_CURSOR));
else
mTable.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
}
/* Cell Renderer */
public class PropertiesCellrenderer extends DefaultTableCellRenderer
{
private boolean mUseFont = false;
public PropertiesCellrenderer(boolean pUseFont)
{
super();
mUseFont = pUseFont;
}
public void setFont(Font font)
{
if (mUseFont)
super.setFont(Application.DEFAULT_FONT_BOLD);
else
super.setFont(font);
}
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row, int column)
{
if (!getCellSelectionEnabled())
{
this.setBackground(UIManager.getColor("control"));
super.getTableCellRendererComponent(table, value, false, false, row, column);
return this;
}
else
return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
}
}
}
|