no message

This commit is contained in:
2024-10-09 20:35:18 +03:00
parent e5f4ee40aa
commit 63b7f7dfd2
183 changed files with 443 additions and 266 deletions

View 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();
}
}
}
});
}
}

View 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;
}
*/
//-
}

View 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());
}
}
}

View 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;
}
}

View 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);
}
}
}
}

View 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);
}
}

View 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());
}
}

View 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();
}
}

View 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;
}
*/
}

View 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));
}
}

View 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);
}
}
}

View 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));
}
}

View 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();
}
}

View 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));
}
}

View 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;
}
}

View 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));
}
}

View 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;
}
}

View 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;
}
}

View 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;
}
}

View 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()));
}
}
}

View 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);
}
}

View 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);
}
}

View File

@@ -0,0 +1,10 @@
package Common.Visual.Tables;
public enum TableEditors {
EditorDefault,
EditorSelect,
EditorHyperlinks,
EditorDimension,
EditorCompilerEnvironmentValue,
EditorCompilerOptionParameterValue,
EditorAutoConfiguration
}

View 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
}

View 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());
}
}

View 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);
}
}
}
}

View 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;
}
}