no message
This commit is contained in:
78
src/Common/Visual/Tables/ColumnFilter.java
Normal file
78
src/Common/Visual/Tables/ColumnFilter.java
Normal file
@@ -0,0 +1,78 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Database.Tables.DataSet;
|
||||
import Common.Utils.CommonUtils;
|
||||
import Common.Visual.TextField.StyledTextField;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.border.MatteBorder;
|
||||
import javax.swing.event.DocumentEvent;
|
||||
import javax.swing.event.DocumentListener;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
public class ColumnFilter {
|
||||
public JTextField textField;
|
||||
public JPopupMenu popup;
|
||||
public ColumnFilter(DataSet dataSet, int columnIndex) {
|
||||
textField = new StyledTextField() {
|
||||
{
|
||||
setBorder(null);
|
||||
addActionListener(e -> {
|
||||
popup.setVisible(false);
|
||||
dataSet.ui_.control.getTableHeader().repaint();
|
||||
});
|
||||
getDocument().addDocumentListener(new DocumentListener() {
|
||||
@Override
|
||||
public void insertUpdate(DocumentEvent e) {
|
||||
dataSet.changeColumnFilterValue(columnIndex, getText());
|
||||
dataSet.ShowUI();
|
||||
}
|
||||
@Override
|
||||
public void removeUpdate(DocumentEvent e) {
|
||||
dataSet.changeColumnFilterValue(columnIndex, getText());
|
||||
dataSet.ShowUI();
|
||||
}
|
||||
@Override
|
||||
public void changedUpdate(DocumentEvent e) {
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
popup = new JPopupMenu() {
|
||||
{
|
||||
setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
|
||||
}
|
||||
};
|
||||
popup.add(textField);
|
||||
//--
|
||||
dataSet.getUi().control.getColumnModel().getColumn(columnIndex).setHeaderRenderer((table, value, isSelected, hasFocus, row, column1) -> new JLabel() {
|
||||
{
|
||||
setIcon(CommonUtils.getIcon("/icons/Filter.png"));
|
||||
setForeground(dataSet.getUi().control.getTableHeader().getForeground());
|
||||
setBackground(dataSet.getUi().control.getTableHeader().getBackground());
|
||||
setFont(dataSet.getUi().control.getTableHeader().getFont());
|
||||
setBorder(new MatteBorder(0, 0, 1, 1, Color.DARK_GRAY));
|
||||
setText("текст : "+dataSet.getColumnFilterValue(columnIndex));
|
||||
}
|
||||
});
|
||||
//--
|
||||
dataSet.getUi().control.getTableHeader().addMouseListener(new MouseAdapter() {
|
||||
@Override
|
||||
public void mouseClicked(MouseEvent event) {
|
||||
if (event.getClickCount() == 1) {
|
||||
int columnIndex = dataSet.getUi().control.getTableHeader().columnAtPoint(event.getPoint());
|
||||
if (dataSet.columnsFilters.containsKey(columnIndex)) {
|
||||
Rectangle columnRectangle = dataSet.getUi().control.getTableHeader().getHeaderRect(columnIndex);
|
||||
Dimension d = new Dimension(columnRectangle.width - 72, columnRectangle.height - 1);
|
||||
popup.setPreferredSize(d);
|
||||
popup.setMaximumSize(d);
|
||||
popup.show(dataSet.getUi().control.getTableHeader(), columnRectangle.x + 72, 0);
|
||||
textField.setText(dataSet.getColumnFilterValue(columnIndex).toString());
|
||||
textField.requestFocusInWindow();
|
||||
textField.selectAll();
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
94
src/Common/Visual/Tables/ColumnInfo.java
Normal file
94
src/Common/Visual/Tables/ColumnInfo.java
Normal file
@@ -0,0 +1,94 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.CommonConstants;
|
||||
public class ColumnInfo {
|
||||
private String Name = "?";
|
||||
private boolean visible = true;
|
||||
private boolean editable = false;
|
||||
private TableRenderers renderer = TableRenderers.RendererDefault;
|
||||
private TableEditors editor = TableEditors.EditorDefault;
|
||||
private int maxWidth = CommonConstants.Nan;
|
||||
private int minWidth = CommonConstants.Nan;
|
||||
//private int lastWidth = Utils.Nan;
|
||||
// public void setLastWidth(int width_in) {
|
||||
// lastWidth = width_in;
|
||||
// }
|
||||
// public int getLastWidth() {
|
||||
// return lastWidth;
|
||||
// }
|
||||
public ColumnInfo(String name_in) {
|
||||
setName(name_in);
|
||||
}
|
||||
public ColumnInfo(String name_in, TableRenderers renderer_in, TableEditors editor_in) {
|
||||
setName(name_in);
|
||||
setRenderer(renderer_in);
|
||||
setEditable(true);
|
||||
setEditor(editor_in);
|
||||
}
|
||||
public ColumnInfo(String name_in, TableRenderers renderer_in) {
|
||||
setName(name_in);
|
||||
setRenderer(renderer_in);
|
||||
}
|
||||
public String getName() {
|
||||
return Name;
|
||||
}
|
||||
public void setName(String name_in) {
|
||||
Name = name_in;
|
||||
}
|
||||
public boolean isVisible() {
|
||||
return visible;
|
||||
}
|
||||
public void setVisible(boolean visible_in) {
|
||||
this.visible = visible_in;
|
||||
}
|
||||
public boolean isEditable() {
|
||||
return editable;
|
||||
}
|
||||
public void setEditable(boolean editable_in) {
|
||||
this.editable = editable_in;
|
||||
}
|
||||
public TableRenderers getRenderer() {
|
||||
return renderer;
|
||||
}
|
||||
public void setRenderer(TableRenderers renderer_in) {
|
||||
this.renderer = renderer_in;
|
||||
}
|
||||
public TableEditors getEditor() {
|
||||
return editor;
|
||||
}
|
||||
public void setEditor(TableEditors editor_in) {
|
||||
this.editor = editor_in;
|
||||
setEditable(editor != TableEditors.EditorDefault);
|
||||
}
|
||||
public boolean hasRenderer() {
|
||||
return getRenderer() != TableRenderers.RendererDefault;
|
||||
}
|
||||
public boolean hasEditor() {
|
||||
return getEditor() != TableEditors.EditorDefault;
|
||||
}
|
||||
public int getMaxWidth() {
|
||||
return maxWidth;
|
||||
}
|
||||
public void setMaxWidth(int maxWidth_in) {
|
||||
this.maxWidth = maxWidth_in;
|
||||
}
|
||||
public boolean hasMaxWidth() {
|
||||
return maxWidth != CommonConstants.Nan;
|
||||
}
|
||||
//-
|
||||
public int getMinWidth() {
|
||||
return minWidth;
|
||||
}
|
||||
public void setMinWidth(int minWidth_in) {
|
||||
this.minWidth = minWidth_in;
|
||||
}
|
||||
public boolean hasMinWidth() {
|
||||
return minWidth != CommonConstants.Nan;
|
||||
}
|
||||
|
||||
/*
|
||||
public boolean hasLastWidth() {
|
||||
return lastWidth != Utils.Nan;
|
||||
}
|
||||
*/
|
||||
//-
|
||||
}
|
||||
10
src/Common/Visual/Tables/ConfigurationAutoRenderer.java
Normal file
10
src/Common/Visual/Tables/ConfigurationAutoRenderer.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package Common.Visual.Tables;
|
||||
import TestingSystem.Common.Configuration.Configuration;
|
||||
public class ConfigurationAutoRenderer extends DBObjectRenderer {
|
||||
@Override
|
||||
public void Display() {
|
||||
if (value != null) {
|
||||
setIcon(((Configuration)value).GetAutoIcon());
|
||||
}
|
||||
}
|
||||
}
|
||||
38
src/Common/Visual/Tables/ConfigurationAutoSwitcher.java
Normal file
38
src/Common/Visual/Tables/ConfigurationAutoSwitcher.java
Normal file
@@ -0,0 +1,38 @@
|
||||
package Common.Visual.Tables;
|
||||
import _VisualDVM.Global;
|
||||
import _VisualDVM.ServerObjectsCache.VisualCaches;
|
||||
import TestingSystem.Common.Configuration.Configuration;
|
||||
import TestingSystem.Common.TestingServer;
|
||||
import TestingSystem.SAPFOR.SapforConfiguration.SapforConfiguration;
|
||||
import Visual_DVM_2021.Passes.Pass_2021;
|
||||
import Visual_DVM_2021.Passes.Server.EditServerObject;
|
||||
public class ConfigurationAutoSwitcher extends DBObjectEditor<Configuration> {
|
||||
@Override
|
||||
public void Action() {
|
||||
value.SwitchAuto();
|
||||
setIcon(value.GetAutoIcon());
|
||||
///-
|
||||
Pass_2021 pass = new EditServerObject<TestingServer,Configuration> (Global.testingServer, Configuration.class){
|
||||
@Override
|
||||
protected boolean canStart(Object... args) throws Exception {
|
||||
target = (Configuration) args[0];
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return "Обновить флаг автоматического тестирования";
|
||||
}
|
||||
@Override
|
||||
protected void showDone() throws Exception {
|
||||
VisualCaches.RefreshCache(target);
|
||||
if (target instanceof SapforConfiguration)
|
||||
Global.testingServer.db.sapforConfigurations.ShowUI(target.id);
|
||||
}
|
||||
};
|
||||
pass.Do(value);
|
||||
}
|
||||
@Override
|
||||
public Object getCellEditorValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
88
src/Common/Visual/Tables/DBObjectEditor.java
Normal file
88
src/Common/Visual/Tables/DBObjectEditor.java
Normal file
@@ -0,0 +1,88 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Database.Objects.DBObject;
|
||||
import Common.Visual.DataControl;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.CellEditorListener;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import java.awt.*;
|
||||
import java.util.EventObject;
|
||||
import java.util.Objects;
|
||||
public abstract class DBObjectEditor<T extends DBObject> extends EditorCell implements TableCellEditor {
|
||||
//задается при редактировании клетки.
|
||||
public T value = null;
|
||||
protected transient ChangeEvent changeEvent;
|
||||
public abstract void Action();
|
||||
public void InitValue(JTable table, Object value_in, int row, int column) {
|
||||
value = (T) ((DataControl) table).getRowObject(row);
|
||||
}
|
||||
@Override
|
||||
public Component getTableCellEditorComponent(
|
||||
JTable table, Object value_in, boolean isSelected, int row, int column) {
|
||||
this.setBackground(table.getSelectionBackground());
|
||||
InitValue(table, value_in, row, column);
|
||||
Action();
|
||||
return this;
|
||||
}
|
||||
//Copied from AbstractCellEditor
|
||||
//protected EventListenerList listenerList = new EventListenerList();
|
||||
@Override
|
||||
public boolean isCellEditable(EventObject e) {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean shouldSelectCell(EventObject anEvent) {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean stopCellEditing() {
|
||||
fireEditingStopped();
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public void cancelCellEditing() {
|
||||
fireEditingCanceled();
|
||||
}
|
||||
@Override
|
||||
public void addCellEditorListener(CellEditorListener l) {
|
||||
listenerList.add(CellEditorListener.class, l);
|
||||
}
|
||||
@Override
|
||||
public void removeCellEditorListener(CellEditorListener l) {
|
||||
listenerList.remove(CellEditorListener.class, l);
|
||||
}
|
||||
public CellEditorListener[] getCellEditorListeners() {
|
||||
return listenerList.getListeners(CellEditorListener.class);
|
||||
}
|
||||
protected void fireEditingStopped() {
|
||||
// Guaranteed to return a non-null array
|
||||
Object[] listeners = listenerList.getListenerList();
|
||||
// Process the listeners last to first, notifying
|
||||
// those that are interested in this event
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) {
|
||||
if (listeners[i] == CellEditorListener.class) {
|
||||
// Lazily create the event:
|
||||
if (Objects.isNull(changeEvent)) {
|
||||
changeEvent = new ChangeEvent(this);
|
||||
}
|
||||
((CellEditorListener) listeners[i + 1]).editingStopped(changeEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
protected void fireEditingCanceled() {
|
||||
// Guaranteed to return a non-null array
|
||||
Object[] listeners = listenerList.getListenerList();
|
||||
// Process the listeners last to first, notifying
|
||||
// those that are interested in this event
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) {
|
||||
if (listeners[i] == CellEditorListener.class) {
|
||||
// Lazily create the event:
|
||||
if (Objects.isNull(changeEvent)) {
|
||||
changeEvent = new ChangeEvent(this);
|
||||
}
|
||||
((CellEditorListener) listeners[i + 1]).editingCanceled(changeEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
11
src/Common/Visual/Tables/DBObjectRenderer.java
Normal file
11
src/Common/Visual/Tables/DBObjectRenderer.java
Normal file
@@ -0,0 +1,11 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Database.Objects.DBObject;
|
||||
import Common.Visual.DataControl;
|
||||
|
||||
import javax.swing.*;
|
||||
public abstract class DBObjectRenderer extends RendererCell<DBObject> {
|
||||
@Override
|
||||
public DBObject Init(JTable table, Object value, int row, int column) {
|
||||
return ((DataControl) table).getRowObject(row);
|
||||
}
|
||||
}
|
||||
14
src/Common/Visual/Tables/DBObjectSelectionRenderer.java
Normal file
14
src/Common/Visual/Tables/DBObjectSelectionRenderer.java
Normal file
@@ -0,0 +1,14 @@
|
||||
package Common.Visual.Tables;
|
||||
public class DBObjectSelectionRenderer extends DBObjectRenderer {
|
||||
/*
|
||||
@Override
|
||||
public Dimension getMinimumSize() {
|
||||
return new Dimension(25,25);
|
||||
}
|
||||
*/
|
||||
@Override
|
||||
public void Display() {
|
||||
if (value != null)
|
||||
setIcon(value.GetSelectionIcon());
|
||||
}
|
||||
}
|
||||
13
src/Common/Visual/Tables/DBObjectSelector.java
Normal file
13
src/Common/Visual/Tables/DBObjectSelector.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Database.Objects.DBObject;
|
||||
public class DBObjectSelector<T extends DBObject> extends DBObjectEditor<T> {
|
||||
@Override
|
||||
public void Action() {
|
||||
value.SwitchSelection();
|
||||
setIcon(value.GetSelectionIcon());
|
||||
}
|
||||
@Override
|
||||
public Object getCellEditorValue() {
|
||||
return value.isSelected();
|
||||
}
|
||||
}
|
||||
64
src/Common/Visual/Tables/DataTable.java
Normal file
64
src/Common/Visual/Tables/DataTable.java
Normal file
@@ -0,0 +1,64 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Database.Objects.DBObject;
|
||||
import Common.Visual.DataControl;
|
||||
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
public abstract class DataTable extends StyledTable implements DataControl {
|
||||
public DataTable(AbstractTableModel model) {
|
||||
super(model);
|
||||
}
|
||||
@Override
|
||||
public void SelectRowByPK(Object pk) {
|
||||
for (int i = 0; i < getRowCount(); ++i) {
|
||||
DBObject o = getRowObject(i);
|
||||
if (o!=null) {
|
||||
if (o.getPK()
|
||||
.equals(pk)) {
|
||||
SelectRow(i);
|
||||
scrollToVisible(i, 0);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//-------------------------------
|
||||
/*
|
||||
public void SelectRow(int r) {
|
||||
getSelectionModel().setSelectionInterval(r, r);
|
||||
}
|
||||
public Object getRowKey(int r) {
|
||||
return getValueAt(r, 0);
|
||||
}
|
||||
public DBObject getRowObject(int row) {
|
||||
return (DBObject) getGrid().getDataSource().get(getRowKey(row));
|
||||
}
|
||||
//-------------------------------
|
||||
|
||||
public int getRowByKey(Object key) {
|
||||
for (int i = 0; i < getRowCount(); ++i) {
|
||||
if (getRowKey(i).equals(key)) return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
public void SelectRowByKey(Object key) {
|
||||
int r = getRowByKey(key);
|
||||
if (r >= 0)
|
||||
SelectRow(r);
|
||||
}
|
||||
public void ClearSelectionSync() {
|
||||
events_on = false;
|
||||
getSelectionModel().clearSelection();
|
||||
current_row_i = Utils.Nan;
|
||||
events_on = true;
|
||||
}
|
||||
public void SelectRowByKeySync(Object key) {
|
||||
int r = getRowByKey(key);
|
||||
events_on = false;
|
||||
if (r >= 0)
|
||||
SelectRow(r);
|
||||
events_on = true;
|
||||
current_row_i = r;
|
||||
}
|
||||
|
||||
*/
|
||||
}
|
||||
18
src/Common/Visual/Tables/DateRenderer_.java
Normal file
18
src/Common/Visual/Tables/DateRenderer_.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Utils.CommonUtils;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Date;
|
||||
//название пересекается с встроенным классом поэтому подчеркивание.
|
||||
public class DateRenderer_ extends RendererCell<Date> {
|
||||
private static final Date zero = new Date(0);
|
||||
@Override
|
||||
public Date Init(JTable table, Object value, int row, int column) {
|
||||
return (Date) value;
|
||||
}
|
||||
@Override
|
||||
public void Display() {
|
||||
if (value != null)
|
||||
setText(value.equals(zero) ? "нет" : CommonUtils.print_date(value));
|
||||
}
|
||||
}
|
||||
82
src/Common/Visual/Tables/EditableHeaderRenderer.java
Normal file
82
src/Common/Visual/Tables/EditableHeaderRenderer.java
Normal file
@@ -0,0 +1,82 @@
|
||||
package Common.Visual.Tables;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.JTableHeader;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.awt.event.MouseAdapter;
|
||||
import java.awt.event.MouseEvent;
|
||||
public class EditableHeaderRenderer implements TableCellRenderer {
|
||||
private JTable table = null;
|
||||
private MouseEventReposter reporter = null;
|
||||
private JComponent editor;
|
||||
public EditableHeaderRenderer(JComponent editor) {
|
||||
this.editor = editor;
|
||||
this.editor.setBorder(UIManager.getBorder("TableHeader.cellBorder"));
|
||||
}
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col) {
|
||||
if (table != null && this.table != table) {
|
||||
this.table = table;
|
||||
final JTableHeader header = table.getTableHeader();
|
||||
if (header != null) {
|
||||
this.editor.setForeground(header.getForeground());
|
||||
this.editor.setBackground(header.getBackground());
|
||||
this.editor.setFont(header.getFont());
|
||||
reporter = new MouseEventReposter(header, col, this.editor);
|
||||
header.addMouseListener(reporter);
|
||||
}
|
||||
}
|
||||
if (reporter != null) reporter.setColumn(col);
|
||||
return this.editor;
|
||||
}
|
||||
static public class MouseEventReposter extends MouseAdapter {
|
||||
private Component dispatchComponent;
|
||||
private JTableHeader header;
|
||||
private int column = -1;
|
||||
private Component editor;
|
||||
public MouseEventReposter(JTableHeader header, int column, Component editor) {
|
||||
this.header = header;
|
||||
this.column = column;
|
||||
this.editor = editor;
|
||||
}
|
||||
public void setColumn(int column) {
|
||||
this.column = column;
|
||||
}
|
||||
private void setDispatchComponent(MouseEvent e) {
|
||||
int col = header.getTable().columnAtPoint(e.getPoint());
|
||||
if (col != column || col == -1) return;
|
||||
Point p = e.getPoint();
|
||||
Point p2 = SwingUtilities.convertPoint(header, p, editor);
|
||||
dispatchComponent = SwingUtilities.getDeepestComponentAt(editor, p2.x, p2.y);
|
||||
}
|
||||
private boolean repostEvent(MouseEvent e) {
|
||||
if (dispatchComponent == null) {
|
||||
return false;
|
||||
}
|
||||
MouseEvent e2 = SwingUtilities.convertMouseEvent(header, e, dispatchComponent);
|
||||
dispatchComponent.dispatchEvent(e2);
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public void mousePressed(MouseEvent e) {
|
||||
if (header.getResizingColumn() == null) {
|
||||
Point p = e.getPoint();
|
||||
int col = header.getTable().columnAtPoint(p);
|
||||
if (col != column || col == -1) return;
|
||||
int index = header.getColumnModel().getColumnIndexAtX(p.x);
|
||||
if (index == -1) return;
|
||||
editor.setBounds(header.getHeaderRect(index));
|
||||
header.add(editor);
|
||||
editor.validate();
|
||||
setDispatchComponent(e);
|
||||
repostEvent(e);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void mouseReleased(MouseEvent e) {
|
||||
repostEvent(e);
|
||||
dispatchComponent = null;
|
||||
header.remove(editor);
|
||||
}
|
||||
}
|
||||
}
|
||||
7
src/Common/Visual/Tables/EditorCell.java
Normal file
7
src/Common/Visual/Tables/EditorCell.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package Common.Visual.Tables;
|
||||
import java.awt.*;
|
||||
public class EditorCell extends StyledCellLabel {
|
||||
public EditorCell() {
|
||||
setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
|
||||
}
|
||||
}
|
||||
28
src/Common/Visual/Tables/Grid/GridAnchestor.java
Normal file
28
src/Common/Visual/Tables/Grid/GridAnchestor.java
Normal file
@@ -0,0 +1,28 @@
|
||||
package Common.Visual.Tables.Grid;
|
||||
import javax.swing.table.AbstractTableModel;
|
||||
import java.util.Collection;
|
||||
import java.util.Vector;
|
||||
public abstract class GridAnchestor extends AbstractTableModel {
|
||||
public Vector<Object> data = new Vector<>();
|
||||
protected Vector<String> columnNames = new Vector<>(); //массив имен столбцов.
|
||||
public GridAnchestor(Collection columnNames_in, Collection data_in) {
|
||||
columnNames.addAll(columnNames_in);
|
||||
data.addAll(data_in);
|
||||
}
|
||||
@Override
|
||||
public String getColumnName(int col) {
|
||||
return columnNames.get(col);
|
||||
}
|
||||
@Override
|
||||
public int getColumnCount() {
|
||||
return columnNames.size();
|
||||
}
|
||||
@Override
|
||||
public int getRowCount() {
|
||||
return data.size();
|
||||
}
|
||||
@Override
|
||||
public Class getColumnClass(int column) {
|
||||
return getValueAt(0, column).getClass();
|
||||
}
|
||||
}
|
||||
17
src/Common/Visual/Tables/HiddenListRenderer.java
Normal file
17
src/Common/Visual/Tables/HiddenListRenderer.java
Normal file
@@ -0,0 +1,17 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.CommonUI;
|
||||
import Common.Visual.Fonts.VisualiserFonts;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Vector;
|
||||
public class HiddenListRenderer extends RendererCell<Vector<String>> {
|
||||
@Override
|
||||
public Vector<String> Init(JTable table, Object value, int row, int column) {
|
||||
return (Vector<String>) value;
|
||||
}
|
||||
@Override
|
||||
public void Display() {
|
||||
setText(String.join(";", value));
|
||||
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreePlain).deriveFont(12.0f));
|
||||
}
|
||||
}
|
||||
15
src/Common/Visual/Tables/HyperlinksRenderer.java
Normal file
15
src/Common/Visual/Tables/HyperlinksRenderer.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.Controls.HyperlinksStyledList;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.util.Vector;
|
||||
public class HyperlinksRenderer extends HyperlinksStyledList implements TableCellRenderer {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
|
||||
setListData((Vector) value);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
18
src/Common/Visual/Tables/MaskedIntegerValueRenderer.java
Normal file
18
src/Common/Visual/Tables/MaskedIntegerValueRenderer.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package Common.Visual.Tables;
|
||||
import javax.swing.*;
|
||||
public class MaskedIntegerValueRenderer extends RendererCell<Long> {
|
||||
@Override
|
||||
public Long Init(JTable table, Object value, int row, int column) {
|
||||
return (Long) value;
|
||||
}
|
||||
public long getMask() {
|
||||
return -1;
|
||||
}
|
||||
public String getMaskText() {
|
||||
return " — ";
|
||||
}
|
||||
public void Display() {
|
||||
if (value != null)
|
||||
setText(value.equals((getMask())) ? getMaskText() : String.valueOf(value));
|
||||
}
|
||||
}
|
||||
16
src/Common/Visual/Tables/MultilineRenderer.java
Normal file
16
src/Common/Visual/Tables/MultilineRenderer.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.Controls.StyledList;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
import java.util.Vector;
|
||||
public class MultilineRenderer extends StyledList implements TableCellRenderer {
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
|
||||
setListData((Vector) value);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
15
src/Common/Visual/Tables/ProgressBarRenderer.java
Normal file
15
src/Common/Visual/Tables/ProgressBarRenderer.java
Normal file
@@ -0,0 +1,15 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.Controls.StyledProgressBar;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
public class ProgressBarRenderer extends StyledProgressBar implements TableCellRenderer {
|
||||
@Override
|
||||
public java.awt.Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
|
||||
setValue((Integer) value);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
src/Common/Visual/Tables/RendererCell.java
Normal file
16
src/Common/Visual/Tables/RendererCell.java
Normal file
@@ -0,0 +1,16 @@
|
||||
package Common.Visual.Tables;
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
public abstract class RendererCell<T> extends StyledCellLabel implements TableCellRenderer {
|
||||
public T value;
|
||||
public abstract T Init(JTable table, Object value, int row, int column); //получить значение
|
||||
public abstract void Display(); //отобразить его.
|
||||
@Override
|
||||
public Component getTableCellRendererComponent(JTable table, Object value_in, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
|
||||
value = Init(table, value_in, row, column);
|
||||
Display();
|
||||
return this;
|
||||
}
|
||||
}
|
||||
18
src/Common/Visual/Tables/StatusEnumRenderer.java
Normal file
18
src/Common/Visual/Tables/StatusEnumRenderer.java
Normal file
@@ -0,0 +1,18 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.CommonUI;
|
||||
import Common.Visual.StatusEnum;
|
||||
|
||||
import javax.swing.*;
|
||||
public class StatusEnumRenderer extends RendererCell<StatusEnum> {
|
||||
@Override
|
||||
public StatusEnum Init(JTable table, Object value, int row, int column) {
|
||||
return (StatusEnum) value;
|
||||
}
|
||||
@Override
|
||||
public void Display() {
|
||||
if (value != null) {
|
||||
setText(value.getDescription());
|
||||
setFont(CommonUI.getTheme().Fonts.get(value.getFont()));
|
||||
}
|
||||
}
|
||||
}
|
||||
21
src/Common/Visual/Tables/StyledCellLabel.java
Normal file
21
src/Common/Visual/Tables/StyledCellLabel.java
Normal file
@@ -0,0 +1,21 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.CommonUI;
|
||||
import Common.Visual.Themes.ThemeElement;
|
||||
import Common.Visual.Fonts.VisualiserFonts;
|
||||
|
||||
import javax.swing.*;
|
||||
//наиболее распространенный случай. переотображение текста и/или изображения в ячейке таблицы.
|
||||
public class StyledCellLabel extends JLabel implements ThemeElement {
|
||||
public StyledCellLabel() {
|
||||
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreePlain));
|
||||
setHorizontalAlignment(SwingConstants.LEFT);
|
||||
setVerticalAlignment(SwingConstants.CENTER);
|
||||
setOpaque(true);
|
||||
applyTheme();
|
||||
}
|
||||
@Override
|
||||
public void applyTheme() {
|
||||
setBackground(CommonUI.getTheme().table_background);
|
||||
setForeground(CommonUI.getTheme().foreground);
|
||||
}
|
||||
}
|
||||
101
src/Common/Visual/Tables/StyledTable.java
Normal file
101
src/Common/Visual/Tables/StyledTable.java
Normal file
@@ -0,0 +1,101 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.CommonUI;
|
||||
import Common.Visual.Menus.TableMenu;
|
||||
import Common.Visual.Themes.ThemeElement;
|
||||
import Common.Visual.Fonts.VisualiserFonts;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.*;
|
||||
import java.awt.*;
|
||||
public abstract class StyledTable extends JTable implements ThemeElement {
|
||||
//https://askdev.ru/q/kak-upravlyat-stilem-cvetom-i-razmerom-shrifta-vnutri-jtable-455196/
|
||||
//https://stackoverflow.com/questions/4129666/how-to-convert-hex-to-rgb-using-java цвета
|
||||
public StyledTable(AbstractTableModel model) {
|
||||
super(model);
|
||||
setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
|
||||
setFillsViewportHeight(true);
|
||||
setAutoCreateRowSorter(dataModel.getRowCount() > 0);
|
||||
Init();
|
||||
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreePlain));
|
||||
JTableHeader header = getTableHeader();
|
||||
header.setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreePlain));
|
||||
putClientProperty("terminateEditOnFocusLost", Boolean.TRUE);
|
||||
setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
|
||||
//текущий объет может определяться по первому столбцу. могут быть баги если не запретить
|
||||
getTableHeader().setReorderingAllowed(false);
|
||||
CorrectSizes();
|
||||
setComponentPopupMenu(CreateMenu());
|
||||
applyTheme();
|
||||
}
|
||||
public TableMenu CreateMenu() {
|
||||
return new TableMenu(this);
|
||||
}
|
||||
public void Init() {
|
||||
}
|
||||
private void adjustColumnSizes(int column, int margin) {
|
||||
DefaultTableColumnModel colModel = (DefaultTableColumnModel) getColumnModel();
|
||||
TableColumn col = colModel.getColumn(column);
|
||||
int width;
|
||||
TableCellRenderer renderer = col.getHeaderRenderer();
|
||||
if (renderer == null) {
|
||||
renderer = getTableHeader().getDefaultRenderer();
|
||||
}
|
||||
Component comp = renderer.getTableCellRendererComponent(this, col.getHeaderValue(), false, false, 0, 0);
|
||||
width = comp.getPreferredSize().width;
|
||||
for (int r = 0; r < getRowCount(); r++) {
|
||||
renderer = getCellRenderer(r, column);
|
||||
comp = renderer.getTableCellRendererComponent(this, getValueAt(r, column), false, false, r, column);
|
||||
int currentWidth = comp.getPreferredSize().width;
|
||||
width = Math.max(width, currentWidth);
|
||||
}
|
||||
width += 2 * margin;
|
||||
col.setPreferredWidth(width);
|
||||
col.setWidth(width);
|
||||
}
|
||||
private void adjustJTableRowSizes() {
|
||||
for (int row = 0; row < getRowCount(); row++) {
|
||||
int maxHeight = 0;
|
||||
for (int column = 0; column < getColumnCount(); column++) {
|
||||
TableCellRenderer cellRenderer = getCellRenderer(row, column);
|
||||
Object valueAt = getValueAt(row, column);
|
||||
Component tableCellRendererComponent = cellRenderer.getTableCellRendererComponent(this, valueAt, false, false, row, column);
|
||||
int heightPreferable = tableCellRendererComponent.getPreferredSize().height;
|
||||
maxHeight = Math.max(heightPreferable, maxHeight);
|
||||
}
|
||||
setRowHeight(row, maxHeight);
|
||||
}
|
||||
}
|
||||
public void CorrectSizes() {
|
||||
adjustJTableRowSizes();
|
||||
CorrectColumnsSizes();
|
||||
this.removeEditor();//отлючение редактирования клеток если таковые были.
|
||||
}
|
||||
public void CorrectColumnsSizes() {
|
||||
for (int i = 0; i < getColumnCount(); i++) {
|
||||
adjustColumnSizes(i, 2);
|
||||
}
|
||||
}
|
||||
@Override
|
||||
public void applyTheme() {
|
||||
setBackground(CommonUI.getTheme().table_background);
|
||||
setForeground(CommonUI.getTheme().foreground);
|
||||
setSelectionBackground(CommonUI.getTheme().selection_background);
|
||||
setSelectionForeground(CommonUI.getTheme().foreground);
|
||||
}
|
||||
public void SelectRow(int r) {
|
||||
getSelectionModel().setSelectionInterval(r, r);
|
||||
}
|
||||
public void scrollToVisible(int rowIndex, int vColIndex) {
|
||||
if (!(getParent() instanceof JViewport)) {
|
||||
return;
|
||||
}
|
||||
JViewport viewport = (JViewport) getParent();
|
||||
Rectangle rect = getCellRect(rowIndex, vColIndex, true);
|
||||
Point pt = viewport.getViewPosition();
|
||||
rect.setLocation(rect.x - pt.x, rect.y - pt.y);
|
||||
viewport.scrollRectToVisible(rect);
|
||||
}
|
||||
public void scrollToLastRow() {
|
||||
scrollToVisible(getRowCount() - 1, 0);
|
||||
}
|
||||
}
|
||||
10
src/Common/Visual/Tables/TableEditors.java
Normal file
10
src/Common/Visual/Tables/TableEditors.java
Normal file
@@ -0,0 +1,10 @@
|
||||
package Common.Visual.Tables;
|
||||
public enum TableEditors {
|
||||
EditorDefault,
|
||||
EditorSelect,
|
||||
EditorHyperlinks,
|
||||
EditorDimension,
|
||||
EditorCompilerEnvironmentValue,
|
||||
EditorCompilerOptionParameterValue,
|
||||
EditorAutoConfiguration
|
||||
}
|
||||
20
src/Common/Visual/Tables/TableRenderers.java
Normal file
20
src/Common/Visual/Tables/TableRenderers.java
Normal file
@@ -0,0 +1,20 @@
|
||||
package Common.Visual.Tables;
|
||||
public enum TableRenderers {
|
||||
RendererDefault,
|
||||
RendererDate,
|
||||
RendererProgress,
|
||||
RendererSelect,
|
||||
RendererDimension,
|
||||
RendererMultiline,
|
||||
RendererHyperlinks,
|
||||
RendererTopLeft,
|
||||
RendererMaskedInt,
|
||||
RendererVariantRank,
|
||||
RendererHiddenList,
|
||||
RendererWrapText,
|
||||
RendererCompilerOptionParameterValue,
|
||||
RendererCompilerEnvironmentValue,
|
||||
RendererCompilerOptionParameterName,
|
||||
RendererStatusEnum,
|
||||
RendererAutoConfiguration
|
||||
}
|
||||
13
src/Common/Visual/Tables/TopLeftRenderer.java
Normal file
13
src/Common/Visual/Tables/TopLeftRenderer.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package Common.Visual.Tables;
|
||||
import javax.swing.*;
|
||||
public class TopLeftRenderer extends RendererCell {
|
||||
@Override
|
||||
public Object Init(JTable table, Object value, int row, int column) {
|
||||
return value;
|
||||
}
|
||||
@Override
|
||||
public void Display() {
|
||||
if (value != null)
|
||||
setText(value.toString());
|
||||
}
|
||||
}
|
||||
89
src/Common/Visual/Tables/VectorEditor.java
Normal file
89
src/Common/Visual/Tables/VectorEditor.java
Normal file
@@ -0,0 +1,89 @@
|
||||
package Common.Visual.Tables;
|
||||
import ProjectData.Files.UI.FilesHyperlinksPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.event.CellEditorListener;
|
||||
import javax.swing.event.ChangeEvent;
|
||||
import javax.swing.table.TableCellEditor;
|
||||
import java.awt.*;
|
||||
import java.util.EventObject;
|
||||
import java.util.Objects;
|
||||
import java.util.Vector;
|
||||
public class VectorEditor extends FilesHyperlinksPanel implements TableCellEditor {
|
||||
protected transient ChangeEvent changeEvent;
|
||||
@Override
|
||||
public Component getTableCellEditorComponent(
|
||||
JTable table, Object value, boolean isSelected, int row, int column) {
|
||||
if (value instanceof Vector) {
|
||||
UpdateByCell((Vector) value);
|
||||
this.Hyperlinks.setBackground(table.getSelectionBackground());
|
||||
Hyperlinks.setSelectionBackground(table.getSelectionBackground());
|
||||
Hyperlinks.setSelectionForeground(table.getSelectionForeground());
|
||||
}
|
||||
return this;
|
||||
}
|
||||
@Override
|
||||
public Object getCellEditorValue() {
|
||||
return links;
|
||||
}
|
||||
//Copied from AbstractCellEditor
|
||||
//protected EventListenerList listenerList = new EventListenerList();
|
||||
@Override
|
||||
public boolean isCellEditable(EventObject e) {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean shouldSelectCell(EventObject anEvent) {
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public boolean stopCellEditing() {
|
||||
fireEditingStopped();
|
||||
return true;
|
||||
}
|
||||
@Override
|
||||
public void cancelCellEditing() {
|
||||
fireEditingCanceled();
|
||||
}
|
||||
@Override
|
||||
public void addCellEditorListener(CellEditorListener l) {
|
||||
listenerList.add(CellEditorListener.class, l);
|
||||
}
|
||||
@Override
|
||||
public void removeCellEditorListener(CellEditorListener l) {
|
||||
listenerList.remove(CellEditorListener.class, l);
|
||||
}
|
||||
public CellEditorListener[] getCellEditorListeners() {
|
||||
return listenerList.getListeners(CellEditorListener.class);
|
||||
}
|
||||
protected void fireEditingStopped() {
|
||||
// Guaranteed to return a non-null array
|
||||
Object[] listeners = listenerList.getListenerList();
|
||||
// Process the listeners last to first, notifying
|
||||
// those that are interested in this event
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) {
|
||||
if (listeners[i] == CellEditorListener.class) {
|
||||
// Lazily create the event:
|
||||
if (Objects.isNull(changeEvent)) {
|
||||
changeEvent = new ChangeEvent(this);
|
||||
}
|
||||
((CellEditorListener) listeners[i + 1]).editingStopped(changeEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
protected void fireEditingCanceled() {
|
||||
// Guaranteed to return a non-null array
|
||||
Object[] listeners = listenerList.getListenerList();
|
||||
// Process the listeners last to first, notifying
|
||||
// those that are interested in this event
|
||||
for (int i = listeners.length - 2; i >= 0; i -= 2) {
|
||||
if (listeners[i] == CellEditorListener.class) {
|
||||
// Lazily create the event:
|
||||
if (Objects.isNull(changeEvent)) {
|
||||
changeEvent = new ChangeEvent(this);
|
||||
}
|
||||
((CellEditorListener) listeners[i + 1]).editingCanceled(changeEvent);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
25
src/Common/Visual/Tables/WrapTextRenderer.java
Normal file
25
src/Common/Visual/Tables/WrapTextRenderer.java
Normal file
@@ -0,0 +1,25 @@
|
||||
package Common.Visual.Tables;
|
||||
import Common.Visual.CommonUI;
|
||||
import Common.Visual.Fonts.VisualiserFonts;
|
||||
|
||||
import javax.swing.*;
|
||||
import javax.swing.table.TableCellRenderer;
|
||||
import java.awt.*;
|
||||
public class WrapTextRenderer extends JTextArea implements TableCellRenderer {
|
||||
public WrapTextRenderer() {
|
||||
setLineWrap(true);
|
||||
setWrapStyleWord(true);
|
||||
// setOpaque(false);
|
||||
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Distribution).deriveFont(14.0f));
|
||||
}
|
||||
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
|
||||
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
|
||||
setText((value == null) ? "" : value.toString());
|
||||
setSize(table.getColumnModel().getColumn(column).getWidth(),
|
||||
getPreferredSize().height);
|
||||
if (table.getRowHeight(row) != getPreferredSize().height) {
|
||||
table.setRowHeight(row, getPreferredSize().height);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user