no message
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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> {
|
||||
|
||||
10
src/Common/Visual/Controls/HyperlinksStyledList.java
Normal file
10
src/Common/Visual/Controls/HyperlinksStyledList.java
Normal 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));
|
||||
}
|
||||
}
|
||||
17
src/Common/Visual/Controls/StyledList.java
Normal file
17
src/Common/Visual/Controls/StyledList.java
Normal 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);
|
||||
}
|
||||
}
|
||||
16
src/Common/Visual/Controls/StyledProgressBar.java
Normal file
16
src/Common/Visual/Controls/StyledProgressBar.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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> {
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package Common.Visual;
|
||||
import Common.CurrentAnchestor;
|
||||
import Common_old.Current;
|
||||
public interface DataControl_OLD {
|
||||
//todo скорее всего устареет.
|
||||
default CurrentAnchestor getCurrent() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
38
src/Common/Visual/Menus/StyledPopupMenu.java
Normal file
38
src/Common/Visual/Menus/StyledPopupMenu.java
Normal 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();
|
||||
}
|
||||
}
|
||||
32
src/Common/Visual/Menus/TableMenu.java
Normal file
32
src/Common/Visual/Menus/TableMenu.java
Normal 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();
|
||||
}
|
||||
}
|
||||
44
src/Common/Visual/Menus/TextComboBoxMenu.java
Normal file
44
src/Common/Visual/Menus/TextComboBoxMenu.java
Normal 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();
|
||||
}
|
||||
}
|
||||
88
src/Common/Visual/Menus/TextEditorMenu.java
Normal file
88
src/Common/Visual/Menus/TextEditorMenu.java
Normal 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();
|
||||
}
|
||||
}
|
||||
21
src/Common/Visual/Menus/VisualiserMenuItem.java
Normal file
21
src/Common/Visual/Menus/VisualiserMenuItem.java
Normal 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));
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
}
|
||||
9
src/Common/Visual/TextArea/StyledTextArea.java
Normal file
9
src/Common/Visual/TextArea/StyledTextArea.java
Normal 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));
|
||||
}
|
||||
}
|
||||
11
src/Common/Visual/TextField/StyledPasswordField.java
Normal file
11
src/Common/Visual/TextField/StyledPasswordField.java
Normal 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));
|
||||
}
|
||||
}
|
||||
11
src/Common/Visual/TextField/StyledTextField.java
Normal file
11
src/Common/Visual/TextField/StyledTextField.java
Normal 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));
|
||||
}
|
||||
}
|
||||
39
src/Common/Visual/Trees/DataTree.java
Normal file
39
src/Common/Visual/Trees/DataTree.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
||||
27
src/Common/Visual/Trees/GraphTreeCellRenderer.java
Normal file
27
src/Common/Visual/Trees/GraphTreeCellRenderer.java
Normal 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;
|
||||
}
|
||||
}
|
||||
18
src/Common/Visual/Trees/SelectableTree.java
Normal file
18
src/Common/Visual/Trees/SelectableTree.java
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
26
src/Common/Visual/Trees/SelectionTreeCellRenderer.java
Normal file
26
src/Common/Visual/Trees/SelectionTreeCellRenderer.java
Normal 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;
|
||||
}
|
||||
}
|
||||
167
src/Common/Visual/Trees/StyledTree.java
Normal file
167
src/Common/Visual/Trees/StyledTree.java
Normal 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);
|
||||
}
|
||||
}
|
||||
15
src/Common/Visual/Trees/StyledTreeCellRenderer.java
Normal file
15
src/Common/Visual/Trees/StyledTreeCellRenderer.java
Normal 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);
|
||||
}
|
||||
}
|
||||
30
src/Common/Visual/Trees/TreeForm.java
Normal file
30
src/Common/Visual/Trees/TreeForm.java
Normal 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);
|
||||
}
|
||||
}
|
||||
13
src/Common/Visual/Trees/TreeRenderers.java
Normal file
13
src/Common/Visual/Trees/TreeRenderers.java
Normal file
@@ -0,0 +1,13 @@
|
||||
package Common.Visual.Trees;
|
||||
public enum TreeRenderers {
|
||||
RendererUndefined,
|
||||
//-
|
||||
RendererGraph,
|
||||
RendererFile,
|
||||
RendererRemoteFile,
|
||||
RendererVersion,
|
||||
RendererRule,
|
||||
RendererAttachment,
|
||||
RendererSapforVersion,
|
||||
RendererSelection,
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user