рефакторинг фильтра по заголовку столбца. начало.
This commit is contained in:
9
.idea/workspace.xml
generated
9
.idea/workspace.xml
generated
@@ -8,11 +8,12 @@
|
|||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
|
<list default="true" id="e42177c3-2328-4b27-8a01-35779b2beb99" name="Default Changelist" comment="">
|
||||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/Common/Database/Database.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Database/Database.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/Common/MainModules/_MainModule.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/MainModules/_MainModule.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/Common/Database/Tables/DataSet.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Database/Tables/DataSet.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/Common/Module.java" beforeDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/Common/Visual/DataSetControlForm.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Visual/DataSetControlForm.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/Common/Visual/DataSetControlForm.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Visual/DataSetControlForm.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Passes/All/SynchronizeBugReports.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Passes/All/SynchronizeBugReports.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/Common/Visual/Tables/HeaderTextFilter.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/Common/Visual/Tables/HeaderTextFilter.java" afterDir="false" />
|
||||||
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Passes/All/UpdateSelectedComponents.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Passes/All/UpdateSelectedComponents.java" afterDir="false" />
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/Global.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/Global.java" afterDir="false" />
|
||||||
|
<change beforePath="$PROJECT_DIR$/src/_VisualDVM/ProjectData/Messages/MessagesControlForm.java" beforeDir="false" afterPath="$PROJECT_DIR$/src/_VisualDVM/ProjectData/Messages/MessagesControlForm.java" afterDir="false" />
|
||||||
</list>
|
</list>
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
|
|||||||
@@ -1,3 +1,13 @@
|
|||||||
package Common.MainModules;
|
package Common.MainModules;
|
||||||
|
import Common.Database.Database;
|
||||||
|
import Common.Visual.UIModule_;
|
||||||
public class _MainModule {
|
public class _MainModule {
|
||||||
|
protected Database db = null;
|
||||||
|
protected UIModule_ ui = null;
|
||||||
|
public boolean hasUI() {
|
||||||
|
return ui != null;
|
||||||
|
}
|
||||||
|
public Database getDb() {
|
||||||
|
return db;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
package Common;
|
|
||||||
public class Module {
|
|
||||||
}
|
|
||||||
@@ -31,8 +31,11 @@ public class DataSetControlForm extends ControlForm<DataTable> {
|
|||||||
protected boolean events_on = true;
|
protected boolean events_on = true;
|
||||||
protected String colNamesAndSizes = "";
|
protected String colNamesAndSizes = "";
|
||||||
protected Vector<ColumnInfo> columns = new Vector<>(); //информация о столбцах и их оформлении
|
protected Vector<ColumnInfo> columns = new Vector<>(); //информация о столбцах и их оформлении
|
||||||
|
public ColumnInfo getColumnInfo(int i) {
|
||||||
|
return columns.get(i);
|
||||||
|
}
|
||||||
protected Vector<DataSetFiltersMenu> filtersMenus = new Vector<>();
|
protected Vector<DataSetFiltersMenu> filtersMenus = new Vector<>();
|
||||||
public LinkedHashMap<Integer, HeaderTextFilter> headersTextFilters = new LinkedHashMap<>(); //текстовые фильтры столбцов
|
protected LinkedHashMap<Integer, HeaderTextFilter> headersTextFilters = new LinkedHashMap<>(); //текстовые фильтры столбцов
|
||||||
//фильтры и подсчеты. todo слить с баром (?)
|
//фильтры и подсчеты. todo слить с баром (?)
|
||||||
MatchesCounter f_ui = null;
|
MatchesCounter f_ui = null;
|
||||||
//--
|
//--
|
||||||
@@ -42,7 +45,7 @@ public class DataSetControlForm extends ControlForm<DataTable> {
|
|||||||
public DataSetControlForm(DataSet dataSource_in, JPanel mountPanel_in) {
|
public DataSetControlForm(DataSet dataSource_in, JPanel mountPanel_in) {
|
||||||
super(DataTable.class, mountPanel_in);
|
super(DataTable.class, mountPanel_in);
|
||||||
dataSource = dataSource_in;
|
dataSource = dataSource_in;
|
||||||
//--
|
createFilters();
|
||||||
if (hasMenuBar()) {
|
if (hasMenuBar()) {
|
||||||
try {
|
try {
|
||||||
if (!MainModule_.instance.getUI().menuBars.containsKey(dataSource.getClass())) {
|
if (!MainModule_.instance.getUI().menuBars.containsKey(dataSource.getClass())) {
|
||||||
@@ -57,7 +60,6 @@ public class DataSetControlForm extends ControlForm<DataTable> {
|
|||||||
//--
|
//--
|
||||||
f_ui = (count -> bar.countLabel.setText(String.valueOf(count)));
|
f_ui = (count -> bar.countLabel.setText(String.valueOf(count)));
|
||||||
//--
|
//--
|
||||||
createFilters();
|
|
||||||
if (!filtersMenus.isEmpty()) {
|
if (!filtersMenus.isEmpty()) {
|
||||||
for (DataSetFiltersMenu filter : filtersMenus)
|
for (DataSetFiltersMenu filter : filtersMenus)
|
||||||
bar.addMenus(filter.getMenu());
|
bar.addMenus(filter.getMenu());
|
||||||
@@ -284,6 +286,9 @@ public class DataSetControlForm extends ControlForm<DataTable> {
|
|||||||
Utils_.MainLog.PrintException(e);
|
Utils_.MainLog.PrintException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (HeaderTextFilter filter : headersTextFilters.values()) {
|
||||||
|
filter.Mount(getControl());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
protected DataMenuBar createMenuBar() {
|
protected DataMenuBar createMenuBar() {
|
||||||
return new DataMenuBar(dataSource.getPluralDescription());
|
return new DataMenuBar(dataSource.getPluralDescription());
|
||||||
@@ -301,6 +306,7 @@ public class DataSetControlForm extends ControlForm<DataTable> {
|
|||||||
//могут быть и другие фильтры ( например свои/активные). перенести их сюда и обобщить
|
//могут быть и другие фильтры ( например свои/активные). перенести их сюда и обобщить
|
||||||
return applyFiltersMenus(object);
|
return applyFiltersMenus(object);
|
||||||
}
|
}
|
||||||
|
//todo упразднить.
|
||||||
// применить значение фильтра к фильру объекта напирмер Message.filterValue = text;
|
// применить значение фильтра к фильру объекта напирмер Message.filterValue = text;
|
||||||
public void changeHeaderFilterValue(int columnIndex, String text) {
|
public void changeHeaderFilterValue(int columnIndex, String text) {
|
||||||
}
|
}
|
||||||
@@ -386,13 +392,21 @@ public class DataSetControlForm extends ControlForm<DataTable> {
|
|||||||
savedSelectedKeys = dataSource.getSelectedKeys();
|
savedSelectedKeys = dataSource.getSelectedKeys();
|
||||||
}
|
}
|
||||||
public void RestoreLastCurrent() {
|
public void RestoreLastCurrent() {
|
||||||
|
for (Object key : savedSelectedKeys) {
|
||||||
for (Object key: savedSelectedKeys){
|
|
||||||
if (dataSource.containsKey(key))
|
if (dataSource.containsKey(key))
|
||||||
dataSource.get(key).Select(true);
|
dataSource.get(key).Select(true);
|
||||||
}
|
}
|
||||||
if ((savedCurrentKey!=null)&&(dataSource.containsKey(savedCurrentKey))){
|
if ((savedCurrentKey != null) && (dataSource.containsKey(savedCurrentKey))) {
|
||||||
SetCurrentByPK(savedCurrentKey);
|
SetCurrentByPK(savedCurrentKey);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
|
||||||
|
for (int i = 0; i < 6; ++i)
|
||||||
|
sorter.setSortable(i, false);
|
||||||
|
sortKeys.add(new RowSorter.SortKey(6, SortOrder.DESCENDING));
|
||||||
|
sortKeys.add(new RowSorter.SortKey(7, SortOrder.DESCENDING));
|
||||||
|
// sorter.setSortKeys(sortKeys);
|
||||||
|
// sorter.sort();
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,36 +1,55 @@
|
|||||||
package Common.Visual.Tables;
|
package Common.Visual.Tables;
|
||||||
|
import Common.CommonConstants;
|
||||||
|
import Common.Database.Database;
|
||||||
import Common.Database.Tables.DataSet;
|
import Common.Database.Tables.DataSet;
|
||||||
import Common.Utils.Utils_;
|
import Common.Utils.Utils_;
|
||||||
|
import Common.Visual.DataSetControlForm;
|
||||||
import Common.Visual.TextField.StyledTextField;
|
import Common.Visual.TextField.StyledTextField;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.MatteBorder;
|
import javax.swing.border.MatteBorder;
|
||||||
import javax.swing.event.DocumentEvent;
|
import javax.swing.event.DocumentEvent;
|
||||||
import javax.swing.event.DocumentListener;
|
import javax.swing.event.DocumentListener;
|
||||||
|
import javax.swing.table.TableModel;
|
||||||
|
import javax.swing.table.TableRowSorter;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.MouseAdapter;
|
import java.awt.event.MouseAdapter;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
public class HeaderTextFilter {
|
public class HeaderTextFilter {
|
||||||
public JTextField textField;
|
DataSet dataSet= null; //таблица к интерфейсу которой относится фильтр.
|
||||||
public JPopupMenu popup;
|
String value= "";
|
||||||
public HeaderTextFilter(DataSet dataSet, int columnIndex) {
|
int columnIndex = CommonConstants.Nan; //номер столбца к которому привязан фильтр.
|
||||||
|
JTextField textField = null;
|
||||||
|
JPopupMenu popup = null;
|
||||||
|
//при одиночном клике, показать поверх заголовка столбца выпавшее меню с полем фильтра.
|
||||||
|
public HeaderTextFilter(DataSet dataSet_in, int columnIndex_in) {
|
||||||
|
dataSet = dataSet_in;
|
||||||
|
columnIndex = columnIndex_in;
|
||||||
|
}
|
||||||
|
public void Mount(DataTable control) {
|
||||||
|
popup = new JPopupMenu() {
|
||||||
|
{
|
||||||
|
setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
|
||||||
|
}
|
||||||
|
};
|
||||||
textField = new StyledTextField() {
|
textField = new StyledTextField() {
|
||||||
{
|
{
|
||||||
setBorder(null);
|
setBorder(null);
|
||||||
addActionListener(e -> {
|
addActionListener(e -> {
|
||||||
popup.setVisible(false);
|
popup.setVisible(false);
|
||||||
dataSet.getUI().getControl().getTableHeader().repaint();
|
control.getTableHeader().repaint();
|
||||||
});
|
});
|
||||||
getDocument().addDocumentListener(new DocumentListener() {
|
getDocument().addDocumentListener(new DocumentListener() {
|
||||||
@Override
|
@Override
|
||||||
public void insertUpdate(DocumentEvent e) {
|
public void insertUpdate(DocumentEvent e) {
|
||||||
|
// value = getText();
|
||||||
dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
||||||
dataSet.ShowUI();
|
dataSet.getUI().Show();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void removeUpdate(DocumentEvent e) {
|
public void removeUpdate(DocumentEvent e) {
|
||||||
dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
dataSet.getUI().changeHeaderFilterValue(columnIndex, getText());
|
||||||
dataSet.ShowUI();
|
dataSet.getUI().Show();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public void changedUpdate(DocumentEvent e) {
|
public void changedUpdate(DocumentEvent e) {
|
||||||
@@ -38,35 +57,37 @@ public class HeaderTextFilter {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
popup = new JPopupMenu() {
|
|
||||||
{
|
|
||||||
setBorder(new MatteBorder(0, 1, 1, 1, Color.DARK_GRAY));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
popup.add(textField);
|
popup.add(textField);
|
||||||
|
//запретить сортировать по столбцу,чтобы при нажатии на фильтр не сбивался
|
||||||
|
control.setRowSorter(null);
|
||||||
|
TableRowSorter<TableModel> sorter = new TableRowSorter<>(control.getModel());
|
||||||
|
sorter.setSortable(columnIndex, false);
|
||||||
|
control.setRowSorter(sorter);
|
||||||
//--
|
//--
|
||||||
dataSet.getUI().getControl().getColumnModel().getColumn(columnIndex).setHeaderRenderer((table, value, isSelected, hasFocus, row, column1) -> new JLabel() {
|
control.getColumnModel().getColumn(columnIndex).setHeaderRenderer((table, value, isSelected, hasFocus, row, column1) -> new JLabel() {
|
||||||
{
|
{
|
||||||
setIcon(Utils_.getIcon("/Common/icons/Filter.png"));
|
setIcon(Utils_.getIcon("/Common/icons/Filter.png"));
|
||||||
setForeground(dataSet.getUI().getControl().getTableHeader().getForeground());
|
setForeground(control.getTableHeader().getForeground());
|
||||||
setBackground(dataSet.getUI().getControl().getTableHeader().getBackground());
|
setBackground(control.getTableHeader().getBackground());
|
||||||
setFont(dataSet.getUI().getControl().getTableHeader().getFont());
|
setFont(control.getTableHeader().getFont());
|
||||||
setBorder(new MatteBorder(0, 0, 1, 1, Color.DARK_GRAY));
|
setBorder(new MatteBorder(0, 0, 1, 1, Color.DARK_GRAY));
|
||||||
setText("текст : " + dataSet.getUI().getHeaderFilterValue(columnIndex));
|
setText(dataSet.getUI().getColumnInfo(columnIndex).getName() + " : " + dataSet.getUI().getHeaderFilterValue(columnIndex));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//--
|
//--
|
||||||
dataSet.getUI().getControl().getTableHeader().addMouseListener(new MouseAdapter() {
|
control.getTableHeader().addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseClicked(MouseEvent event) {
|
public void mouseClicked(MouseEvent event) {
|
||||||
if (event.getClickCount() == 1) {
|
if (event.getClickCount() == 1) {
|
||||||
int columnIndex = dataSet.getUI().getControl().getTableHeader().columnAtPoint(event.getPoint());
|
int clickedColumnIndex = control.getTableHeader().columnAtPoint(event.getPoint());
|
||||||
if (dataSet.getUI().headersTextFilters.containsKey(columnIndex)) {
|
if (columnIndex == clickedColumnIndex) {
|
||||||
Rectangle columnRectangle = dataSet.getUI().getControl().getTableHeader().getHeaderRect(columnIndex);
|
Rectangle columnRectangle = control.getTableHeader().getHeaderRect(columnIndex);
|
||||||
Dimension d = new Dimension(columnRectangle.width - 72, columnRectangle.height - 1);
|
Dimension d = new Dimension(columnRectangle.width - 72, columnRectangle.height - 1);
|
||||||
|
//-
|
||||||
popup.setPreferredSize(d);
|
popup.setPreferredSize(d);
|
||||||
popup.setMaximumSize(d);
|
popup.setMaximumSize(d);
|
||||||
popup.show(dataSet.getUI().getControl().getTableHeader(), columnRectangle.x + 72, 0);
|
popup.show(control.getTableHeader(), columnRectangle.x + 72, 0);
|
||||||
|
//-
|
||||||
textField.setText(dataSet.getUI().getHeaderFilterValue(columnIndex).toString());
|
textField.setText(dataSet.getUI().getHeaderFilterValue(columnIndex).toString());
|
||||||
textField.requestFocusInWindow();
|
textField.requestFocusInWindow();
|
||||||
textField.selectAll();
|
textField.selectAll();
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import java.io.File;
|
|||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
public class Global {
|
public class Global {
|
||||||
|
//todo свести большинство к содержимому mainModule, сделать различные типы properties, переместить туда глобальный журнал (?)
|
||||||
public static MainModule mainModule = null;
|
public static MainModule mainModule = null;
|
||||||
//Режим
|
//Режим
|
||||||
public static Mode mode = Mode.Undefined;
|
public static Mode mode = Mode.Undefined;
|
||||||
|
|||||||
@@ -35,22 +35,9 @@ public class MessagesControlForm extends DataSetControlForm {
|
|||||||
ShowCurrentObject();
|
ShowCurrentObject();
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
protected void createControl() {
|
protected void createFilters() {
|
||||||
super.createControl();
|
super.createFilters();
|
||||||
headersTextFilters.put(3, new HeaderTextFilter(dataSource, 3));
|
headersTextFilters.put(3, new HeaderTextFilter(dataSource, 3));
|
||||||
control.setRowSorter(null);
|
|
||||||
TableRowSorter<TableModel> sorter = new TableRowSorter<>(control.getModel());
|
|
||||||
sorter.setSortable(3, false);
|
|
||||||
control.setRowSorter(sorter);
|
|
||||||
/*
|
|
||||||
List<RowSorter.SortKey> sortKeys = new ArrayList<>();
|
|
||||||
for (int i = 0; i < 6; ++i)
|
|
||||||
sorter.setSortable(i, false);
|
|
||||||
sortKeys.add(new RowSorter.SortKey(6, SortOrder.DESCENDING));
|
|
||||||
sortKeys.add(new RowSorter.SortKey(7, SortOrder.DESCENDING));
|
|
||||||
*/
|
|
||||||
// sorter.setSortKeys(sortKeys);
|
|
||||||
// sorter.sort();
|
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
public boolean hasMenuBar() {
|
public boolean hasMenuBar() {
|
||||||
|
|||||||
Reference in New Issue
Block a user