/***************************************************************** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. ****************************************************************/ package org.apache.cayenne.modeler.util; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JLabel; import javax.swing.JTable; import javax.swing.border.CompoundBorder; import javax.swing.table.DefaultTableCellRenderer; import java.awt.Color; import java.awt.Component; import java.awt.Font; public class SortButtonRenderer extends DefaultTableCellRenderer { public static final int NONE = 0; public static final int DOWN = 1; public static final int UP = 2; private static final Icon ICON_DOWN = ModelerUtil.buildIcon("icon-sort-desc.png"); private static final Icon ICON_UP = ModelerUtil.buildIcon("icon-sort-asc.png"); private static final Font FONT; private static final CompoundBorder BORDER = BorderFactory.createCompoundBorder( BorderFactory.createMatteBorder(0, 0, 1, 1, Color.GRAY), BorderFactory.createEmptyBorder(0, 5, 0, 0)); static { // Get default font for current system FONT = new JLabel().getFont().deriveFont(Font.BOLD); } private boolean sortingEnabled = true; private int currentState; private int currentColumn; public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); if (sortingEnabled && column == currentColumn) { if (currentState == DOWN) { setIcon(ICON_DOWN); } else { setIcon(ICON_UP); } } else { setIcon(null); } setText(value == null ? "" : value.toString()); setFont(FONT); setHorizontalTextPosition(JLabel.LEFT); setBorder(BORDER); return this; } public void setSelectedColumn(int col, boolean isAscOrder) { if (col < 0) { return; } //shows the direction of ordering if (isAscOrder) { currentState = DOWN; } else { currentState = UP; } currentColumn = col; } public int getState(int col) { if (col == currentColumn){ return currentState; } return NONE; } public boolean isSortingEnabled() { return sortingEnabled; } public void setSortingEnabled(boolean sortingEnabled) { this.sortingEnabled = sortingEnabled; } }