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

@@ -2,8 +2,8 @@ package Common.Database.Tables;
import Common.CurrentAnchestor;
import Common.Visual.DataSetFilter;
import Common.Visual.DataSetControlForm;
import Common.Visual.DataMenuBar;
import Common_old.UI.Tables.ColumnFilter;
import Common.Visual.Menus.DataMenuBar;
import Common.Visual.Tables.ColumnFilter;
import Common.Visual.Windows.Dialog.DBObjectDialog;
import Common.Visual.Windows.Dialog.DialogFields;
import Common.Utils.TextLog;

View File

@@ -1,11 +1,9 @@
package Common.Visual;
import Common.Database.Tables.DataSet;
import Common.Mode;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.DataMenuBar;
import Common.Visual.Themes.DefaultTheme;
import Common.Visual.Themes.ThemeElement;
import Common.Visual.Themes.VisualiserTheme;
import _VisualDVM.Global;
import javax.swing.*;
import javax.swing.event.ChangeListener;

View File

@@ -1,6 +1,5 @@
package Common.Visual;
import Common.CurrentAnchestor;
import Common_old.Current;
import java.awt.*;
public class ControlWithCurrentForm<C extends Component> extends ControlForm<C> {

View File

@@ -0,0 +1,10 @@
package Common.Visual.Controls;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
public class HyperlinksStyledList extends StyledList {
@Override
public void applyTheme() {
super.applyTheme();
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Hyperlink));
}
}

View File

@@ -0,0 +1,17 @@
package Common.Visual.Controls;
import Common.Visual.CommonUI;
import Common.Visual.Themes.ThemeElement;
import Common.Visual.Fonts.VisualiserFonts;
import javax.swing.*;
public class StyledList extends JList implements ThemeElement {
public StyledList() {
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreePlain));
applyTheme();
}
@Override
public void applyTheme() {
setBackground(CommonUI.getTheme().table_background);
setForeground(CommonUI.getTheme().foreground);
}
}

View File

@@ -0,0 +1,16 @@
package Common.Visual.Controls;
import Common.Visual.CommonUI;
import Common.Visual.Themes.ThemeElement;
import javax.swing.*;
public class StyledProgressBar extends JProgressBar implements ThemeElement {
public StyledProgressBar() {
setStringPainted(true);
applyTheme();
}
@Override
public void applyTheme() {
setBackground(CommonUI.getTheme().bar_background);
setForeground(CommonUI.getTheme().bar_foreground);
}
}

View File

@@ -1,5 +1,5 @@
package Common.Visual.Controls;
import Common_old.UI.Menus.TextComboBoxMenu;
import Common.Visual.Menus.TextComboBoxMenu;
import javax.swing.*;
public class StyledTextComboBox extends JComboBox<String> {

View File

@@ -1,6 +1,5 @@
package Common.Visual;
import Common.CurrentAnchestor;
import Common_old.Current;
public interface DataControl_OLD {
//todo скорее всего устареет.
default CurrentAnchestor getCurrent() {

View File

@@ -7,10 +7,10 @@ import Common.Database.Tables.DBTable;
import Common.Database.Tables.DataSet;
import Common.Database.Tables.FKBehaviour;
import Common_old.UI.UI;
import Common_old.UI.Menus.TableMenu;
import Common_old.UI.Tables.ColumnInfo;
import Common_old.UI.Tables.DataTable;
import Common_old.UI.Tables.Grid.GridAnchestor;
import Common.Visual.Menus.TableMenu;
import Common.Visual.Tables.ColumnInfo;
import Common.Visual.Tables.DataTable;
import Common.Visual.Tables.Grid.GridAnchestor;
import GlobalData.Grid.TableVisualData;
import javax.swing.*;
@@ -23,8 +23,8 @@ import java.util.Vector;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import static Common_old.UI.Tables.TableEditors.EditorSelect;
import static Common_old.UI.Tables.TableRenderers.RendererSelect;
import static Common.Visual.Tables.TableEditors.EditorSelect;
import static Common.Visual.Tables.TableRenderers.RendererSelect;
public class DataSetControlForm extends ControlWithCurrentForm<DataTable> {
protected JPanel dataPanel;
protected DataSet dataSource;

View File

@@ -1,4 +1,4 @@
package Common.Visual;
package Common.Visual.Menus;
import Common.Database.Tables.DataSet;
import Common_old.UI.Menus_2023.MenuBarButton;
import Common_old.UI.Menus_2023.VisualiserMenuBar;

View File

@@ -0,0 +1,38 @@
package Common.Visual.Menus;
import Common.Visual.CommonUI;
import Common.Visual.Themes.ThemeElement;
import javax.swing.*;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
public class StyledPopupMenu extends JPopupMenu implements ThemeElement {
public StyledPopupMenu() {
addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {
CheckElementsVisibility();
}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {
}
});
}
private void refreshTheme_r(MenuElement element) {
element.getComponent().setBackground(CommonUI.getTheme().background);
element.getComponent().setForeground(CommonUI.getTheme().foreground);
for (MenuElement se : element.getSubElements())
refreshTheme_r(se);
}
@Override
public void applyTheme() {
setBackground(CommonUI.getTheme().background);
setForeground(CommonUI.getTheme().foreground);
refreshTheme_r(this);
}
public void CheckElementsVisibility() {
applyTheme();
}
}

View File

@@ -0,0 +1,32 @@
package Common.Visual.Menus;
import Common.CommonConstants;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import javax.swing.*;
public class TableMenu extends StyledPopupMenu {
int row = CommonConstants.Nan;
int column = CommonConstants.Nan;
Object target = null;
//-
JTable owner = null;
VisualiserMenuItem mcopy;
public TableMenu(JTable owner_in) {
owner = owner_in;
mcopy = new VisualiserMenuItem("Копировать текст текущей ячейки", "/icons/Editor/Copy.png");
//если удалось нажать значит все условия выполнены
mcopy.addActionListener(e -> CommonUtils.CopyToClipboard(target.toString()));
add(mcopy);
}
@Override
public void CheckElementsVisibility() {
row = owner.getSelectedRow();
column = owner.getSelectedColumn();
if ((row >= 0) && (column >= 0)) {
target = owner.getValueAt(row, column);
mcopy.setVisible(true);
} else mcopy.setVisible(false);
super.CheckElementsVisibility();
}
}

View File

@@ -0,0 +1,44 @@
package Common.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import javax.swing.*;
import java.awt.event.ActionEvent;
public class TextComboBoxMenu extends StyledPopupMenu {
protected JComboBox<String> box;
protected String selectedText = null;
//-------------------------------------------------
JMenuItem m_copy;
JMenuItem m_paste;
//-------------------------------------------------
public TextComboBoxMenu(JComboBox<String> box_in) {
box = box_in;
m_copy = new VisualiserMenuItem("Копировать", "/icons/Editor/Copy.png");
m_copy.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
CommonUtils.CopyToClipboard(box.getSelectedItem().toString());
}
});
add(m_copy);
m_paste = new VisualiserMenuItem("Вставить", "/icons/Editor/Paste.png");
m_paste.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
CommonUI.TrySelect(box, CommonUtils.getFromClipboard());
}
});
add(m_paste);
}
@Override
public void CheckElementsVisibility() {
boolean visible_ = box.getSelectedIndex() >= 0;
m_paste.setVisible(visible_);
m_copy.setVisible(visible_);
super.CheckElementsVisibility();
}
}

View File

@@ -0,0 +1,88 @@
package Common.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.VisualiserMenuItem;
import javax.swing.*;
import javax.swing.text.JTextComponent;
import java.awt.event.ActionEvent;
import java.util.Vector;
public class TextEditorMenu extends StyledPopupMenu {
protected JTextComponent editor;
protected String selectedText = null;
//-------------------------------------------------
JMenuItem m_cut;
JMenuItem m_copy;
JMenuItem m_paste;
protected JMenuItem m_strike;
protected JMenuItem m_unstrike;
//-------------------------------------------------
public TextEditorMenu(JTextComponent editor_in) {
editor = editor_in;
m_cut = new VisualiserMenuItem("Вырезать", "/icons/Editor/Cut.png");
m_cut.addActionListener(new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
editor.cut();
}
});
add(m_cut);
m_copy = new VisualiserMenuItem("Копировать", "/icons/Editor/Copy.png");
m_copy.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
editor.copy();
}
});
add(m_copy);
m_paste = new VisualiserMenuItem("Вставить", "/icons/Editor/Paste.png");
m_paste.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
editor.paste();
}
});
add(m_paste);
//--
m_strike = new VisualiserMenuItem("Вычеркнуть","/icons/Editor/Strikethrough.png");
m_strike.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String[] data = selectedText.split("\n");
Vector<String> new_data = new Vector<>();
for (String line: data){
new_data.add(CommonUtils.strikeThrough(line));
}
editor.replaceSelection(String.join("\n", new_data));
}
});
add(m_strike);
m_unstrike = new VisualiserMenuItem("Отменить вычёркивание","/icons/Editor/NoStrike.png");
m_unstrike.addActionListener(
new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
String[] data = selectedText.split("\n");
Vector<String> new_data = new Vector<>();
for (String line: data){
new_data.add(CommonUtils.noStrikeThrough(line));
}
editor.replaceSelection(String.join("\n", new_data));
}
});
add(m_unstrike);
}
@Override
public void CheckElementsVisibility() {
selectedText = editor.getSelectedText();
m_cut.setVisible(editor.isEditable() && (selectedText != null));
m_paste.setVisible(editor.isEditable());
m_copy.setVisible(selectedText != null);
m_strike.setVisible(editor.isEditable() && (selectedText != null));
m_unstrike.setVisible(editor.isEditable() && (selectedText != null));
super.CheckElementsVisibility();
}
}

View File

@@ -0,0 +1,21 @@
package Common.Visual.Menus;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
import javax.swing.*;
public class VisualiserMenuItem extends JMenuItem {
public VisualiserMenuItem(String text) {
super(text, null);
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Menu));
}
public VisualiserMenuItem(String text, String icon_path) {
super(text);
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Menu));
if (icon_path != null)
setIcon(CommonUtils.getIcon(icon_path));
}
public VisualiserMenuItem(){
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.Menu));
}
}

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

View File

@@ -0,0 +1,9 @@
package Common.Visual.TextArea;
import Common.Visual.Menus.TextEditorMenu;
import javax.swing.*;
public class StyledTextArea extends JTextArea {
public StyledTextArea() {
setComponentPopupMenu(new TextEditorMenu(this));
}
}

View File

@@ -0,0 +1,11 @@
package Common.Visual.TextField;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.TextEditorMenu;
import javax.swing.*;
public class StyledPasswordField extends JPasswordField {
private StyledPopupMenu menu;
public StyledPasswordField() {
setComponentPopupMenu(new TextEditorMenu(this));
}
}

View File

@@ -0,0 +1,11 @@
package Common.Visual.TextField;
import Common.Visual.Menus.StyledPopupMenu;
import Common.Visual.Menus.TextEditorMenu;
import javax.swing.*;
public class StyledTextField extends JTextField {
private StyledPopupMenu menu;
public StyledTextField() {
setComponentPopupMenu(new TextEditorMenu(this));
}
}

View File

@@ -0,0 +1,39 @@
package Common.Visual.Trees;
import Common.CurrentAnchestor;
import Common.Utils.CommonUtils;
import Common.Visual.DataControl_OLD;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
public class DataTree extends StyledTree implements DataControl_OLD {
public DataTree(DefaultMutableTreeNode root_in) {
super(root_in);
}
public void ChangeCurrentObject(DefaultMutableTreeNode node) {
if (getCurrent() != null)
CurrentAnchestor.set(getCurrent(), node.getUserObject());
}
@Override
public void ShowCurrentObject() throws Exception {
}
@Override
public void ShowNoCurrentObject() throws Exception {
}
@Override
public void SelectionAction(TreePath path) {
ChangeCurrentObject((DefaultMutableTreeNode) path.getLastPathComponent());
try {
ShowCurrentObject();
} catch (Exception ex) {
CommonUtils.MainLog.PrintException(ex);
}
}
public void SelectNodeByCriteria(Object criteria) {
EventsOff();
TreePath res = ShowNodeByCriteria(criteria);
setSelectionPath(res);
ChangeCurrentObject((DefaultMutableTreeNode) res.getLastPathComponent());
EventsOn();
}
}

View File

@@ -0,0 +1,27 @@
package Common.Visual.Trees;
import Common.Utils.CommonUtils;
import Common.Visual.CommonUI;
import Common.Visual.Fonts.VisualiserFonts;
import ProjectData.SapforData.FileObjectWithMessages;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class GraphTreeCellRenderer extends StyledTreeCellRenderer {
public java.awt.Component getTreeCellRendererComponent(
JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof FileObjectWithMessages) {
FileObjectWithMessages target = (FileObjectWithMessages) o;
setIcon(CommonUtils.getIcon(target.ImageKey()));
setFont(CommonUI.getTheme().Fonts.get(target.getFont()));
} else {
setIcon(null);
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
}
setForeground(tree.getForeground());
return this;
}
}

View File

@@ -0,0 +1,18 @@
package Common.Visual.Trees;
import Common.CurrentAnchestor;
import Common.Visual.Selectable;
import javax.swing.tree.DefaultMutableTreeNode;
public class SelectableTree extends DataTree {
public SelectableTree(DefaultMutableTreeNode root_in) {
super(root_in);
}
@Override
public void LeftMouseAction1() {
Object element = CurrentAnchestor.get(getCurrent());
if ((element instanceof Selectable)) {
((Selectable) element).SwitchSelection();
updateUI();
}
}
}

View File

@@ -0,0 +1,26 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common.Visual.Selectable;
import Common.Visual.Fonts.VisualiserFonts;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
public class SelectionTreeCellRenderer extends StyledTreeCellRenderer {
public java.awt.Component getTreeCellRendererComponent(
JTree tree, Object value,
boolean selected, boolean expanded,
boolean leaf, int row, boolean hasFocus) {
super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
Object o = ((DefaultMutableTreeNode) value).getUserObject();
if (o instanceof Selectable) {
Selectable selectable = (Selectable) o;
setText(selectable.getSelectionText());
setIcon(selectable.GetSelectionIcon());
} else {
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreeItalic));
setIcon(null);
}
setForeground(tree.getForeground());
return this;
}
}

View File

@@ -0,0 +1,167 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common_old.UI.Menus.GraphMenu;
import Common.Visual.Themes.ThemeElement;
import Common.Visual.Fonts.VisualiserFonts;
import Common_old.UI.UI;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class StyledTree extends JTree implements ThemeElement {
//---------------------------------
private final GraphMenu menu;
public DefaultMutableTreeNode root = null;
//-включение /отключение событий --
protected boolean events_on = true;
public StyledTree(DefaultMutableTreeNode root_in) {
super(root_in);
root = root_in;
setOpaque(true);
setFont(CommonUI.getTheme().Fonts.get(VisualiserFonts.TreePlain));
setToggleClickCount(0); //отключение сворачивание разворачивания по двойному клику
//--
if (!getRenderer().equals(TreeRenderers.RendererUndefined))
setCellRenderer(UI.TreeRenderers.get(getRenderer()));
//--
getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
addTreeSelectionListener(e -> {
if (events_on && e.isAddedPath())
SelectionAction(e.getPath());
});
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 1) {
switch ((e.getButton())) {
//левая клавиша.
case MouseEvent.BUTTON1:
if (getSelectionCount() > 0) LeftMouseAction1();
break;
//колесо
case MouseEvent.BUTTON2:
break;
//правая клавиша
case MouseEvent.BUTTON3:
if (menu != null)
menu.Show(e);
break;
}
} else {
if (e.getClickCount() == 2) {
switch ((e.getButton())) {
case MouseEvent.BUTTON1:
if (getSelectionCount() > 0) LeftMouseAction2();
break;
}
}
}
}
});
menu = createMenu();
applyTheme();
ExpandAll();
}
public TreeRenderers getRenderer() {
return TreeRenderers.RendererUndefined;
}
public void EventsOn() {
events_on = true;
}
public void EventsOff() {
events_on = false;
}
public String getBranchesName() {
return "";
}
public void LeftMouseAction1() {
}
public void LeftMouseAction2() {
}
public void SelectionAction(TreePath e) {
}
@Override
public void applyTheme() {
setBackground(CommonUI.getTheme().trees_background);
setForeground(CommonUI.getTheme().foreground);
menu.applyTheme();
}
protected GraphMenu createMenu() {
return new GraphMenu(this);
}
public DefaultMutableTreeNode getNodeByRow(int row) {
DefaultMutableTreeNode res = null;
if (row >= 0) {
TreePath p = getPathForRow(row);
res = (DefaultMutableTreeNode) p.getLastPathComponent();
}
return res;
}
protected int getStartLine() {
return 0;
}
public void ExpandAll() {
for (int i = getStartLine(); i < getRowCount(); ++i)
expandRow(i);
}
public void CollapseAll() {
for (int i = getRowCount() - 1; i >= getStartLine(); --i) {
collapseRow(i);
}
}
protected boolean findNode(Object userObject, Object criteria) {
return true;
}
public DefaultMutableTreeNode FindByCriteria(Object criteria) {
DefaultMutableTreeNode res = root;
for (int i = 0; i < getRowCount(); ++i) {
DefaultMutableTreeNode node = getNodeByRow(i);
if (findNode(node.getUserObject(), criteria)) {
res = node;
break;
}
}
return res;
}
public TreePath ShowNode(DefaultMutableTreeNode node) {
TreePath res = new TreePath(((DefaultTreeModel) getModel()).getPathToRoot(node));
scrollPathToVisible(res);
return res;
}
public TreePath ShowNodeByCriteria(Object criteria) {
return ShowNode(FindByCriteria(criteria));
}
public void SelectNodeByCriteria(Object criteria) {
EventsOff();
TreePath res = ShowNodeByCriteria(criteria);
setSelectionPath(res);
EventsOn();
}
public void SelectNode(DefaultMutableTreeNode node) {
setSelectionPath(new TreePath(((DefaultTreeModel) getModel()).getPathToRoot(node)));
}
//https://stackoverflow.com/questions/7928839/adding-and-removing-nodes-from-a-jtree !!!
public void AddNode(DefaultMutableTreeNode parent, DefaultMutableTreeNode node){
parent.add(node);
DefaultTreeModel model = (DefaultTreeModel) getModel();
model.reload(parent);
//--->>
TreePath path = new TreePath(model.getPathToRoot(node)); //брать путь к узлу так и только так.иначе не работает.!!
setSelectionPath(path);
//scrollPathToVisible(path);
}
public void RemoveNode(DefaultMutableTreeNode node){
if (node.getParent()!=null) {
DefaultTreeModel model = (DefaultTreeModel) getModel();
model.removeNodeFromParent(node);
}
}
public void RefreshNode(DefaultMutableTreeNode node){
DefaultTreeModel model = (DefaultTreeModel) getModel();
model.reload(node);
}
}

View File

@@ -0,0 +1,15 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common.Visual.Themes.ThemeElement;
import javax.swing.tree.DefaultTreeCellRenderer;
public class StyledTreeCellRenderer extends DefaultTreeCellRenderer implements ThemeElement {
public StyledTreeCellRenderer() {
applyTheme();
}
@Override
public void applyTheme() {
setBackgroundNonSelectionColor(CommonUI.getTheme().trees_background);
setBackgroundSelectionColor(CommonUI.getTheme().selection_background);
}
}

View File

@@ -0,0 +1,30 @@
package Common.Visual.Trees;
import Common.Visual.CommonUI;
import Common.Visual.ControlForm;
import java.awt.*;
public class TreeForm<C extends StyledTree> extends ControlForm<C> {
public TreeForm(Class<C> class_in) {
super(class_in);
}
//временно, чтобы не затрагивать коды раньше времени.
public StyledTree getTree() {
return control;
}
@Override
protected void refresh() {
getTree().revalidate();
getTree().repaint();
}
@Override
public void Show() {
super.Show();
content.add(scroll, BorderLayout.CENTER);
content.updateUI();
}
@Override
public void Clear() {
super.Clear();
CommonUI.Clear(content);
}
}

View File

@@ -0,0 +1,13 @@
package Common.Visual.Trees;
public enum TreeRenderers {
RendererUndefined,
//-
RendererGraph,
RendererFile,
RendererRemoteFile,
RendererVersion,
RendererRule,
RendererAttachment,
RendererSapforVersion,
RendererSelection,
}

View File

@@ -1,5 +1,5 @@
package Common.Visual.Windows.Dialog;
import Common_old.UI.TextField.StyledTextField;
import Common.Visual.TextField.StyledTextField;
import java.awt.*;
public class DialogTextField extends StyledTextField implements DialogFields {

View File

@@ -1,5 +1,5 @@
package Common.Visual.Windows.Dialog.Text;
import Common_old.UI.Editor.BaseEditor;
import _VisualDVM.Visual.Editor.BaseEditor;
public class MultilineTextForm extends TextDialog<BaseEditor> {
public MultilineTextForm() {
super(BaseEditor.class);