пока завершение рефакторинга и обощения фильтров

This commit is contained in:
2024-10-22 01:35:30 +03:00
parent 20044315fb
commit 348b7602ff
10 changed files with 104 additions and 107 deletions

View File

@@ -7,6 +7,7 @@ import Common.Database.Tables.DataSet;
import Common.Database.Tables.FKBehaviour;
import Common.MainModule_;
import Common.Utils.Utils_;
import Common.Visual.Controls.MenuBarButton;
import Common.Visual.Menus.DataMenuBar;
import Common.Visual.Menus.TableMenu;
import Common.Visual.Tables.*;
@@ -43,12 +44,12 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
}
return res;
}
public void AddFilter(DBObjectFilter_ filter_in){
public void AddFilter(DBObjectFilter_<D> filter_in){
allFilters.add(filter_in);
}
//---
//фильтры и подсчеты. todo слить с баром (?)
MatchesCounter f_ui = null;
MatchesCounter counter_ui = null;
//--
Object savedCurrentKey = null;
Vector<Object> savedSelectedKeys = new Vector<>();
@@ -70,11 +71,16 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
}
mountPanel.add(bar, BorderLayout.NORTH);
//--
f_ui = (count -> bar.countLabel.setText(String.valueOf(count)));
//todo возможно улушить объект бара
counter_ui = (count -> bar.countLabel.setText(String.valueOf(count)));
//--фильтры всегда в конец бара.
bar.add(new JSeparator());
for (FilterFlag filter : getFilters(FilterFlag.class)) {
bar.add(filter.getControl());
}
for (JMenu filter : getFilters(DataSetFiltersMenu.class)) {
bar.addMenus(filter);
}
//------------------------
} catch (Exception ex) {
ex.printStackTrace();
}
@@ -342,7 +348,7 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
}
protected boolean ApplyFilters(D object) {
for (DBObjectFilter_ filterInterface: allFilters){
if (!filterInterface.Validate(object))
if (!filterInterface.Validate(object)) //??
return false;
}
return true;
@@ -355,7 +361,7 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
public void Show() {
for (DBObjectFilter_ filter_ : allFilters) filter_.DropMatchesCount();
super.Show();
if (f_ui != null) f_ui.ShowMatchesCount(getRowCount());
if (counter_ui != null) counter_ui.ShowMatchesCount(getRowCount());
for (DBObjectFilter_ filter_ : allFilters) filter_.ShowMatchesCount();
}
public void Show(Object pk) {
@@ -372,7 +378,7 @@ public class DataSetControlForm<D extends DBObject> extends ControlForm<DataTabl
@Override
public void Clear() {
super.Clear();
if (f_ui != null) f_ui.ShowNoMatches();
if (counter_ui != null) counter_ui.ShowNoMatches();
}
public int getRowCount() {
return control.getRowCount();

View File

@@ -10,14 +10,14 @@ import java.util.Vector;
public abstract class DataSetFiltersMenu<D extends DBObject> extends VisualiserMenu implements DBObjectFilter_<D> {
//--
protected DataSet<?, D> dataSet;
protected Vector<FilterFlagMenuItem<D>> field_filters;
protected Vector<FilterFlag<D>> field_filters;
public DataSetFiltersMenu(String name, DataSet dataSet_in) {
super(name, "/Common/icons/Filter.png", true);
dataSet = dataSet_in;
field_filters = new Vector<>();
fill();
//-
for (FilterFlagMenuItem<D> filter : field_filters)
for (FilterFlag<D> filter : field_filters)
add(filter.getControl());
addSeparator();
add(new StableMenuItem("Выбрать всё", "/Common/icons/SelectAll.png") {
@@ -48,12 +48,12 @@ public abstract class DataSetFiltersMenu<D extends DBObject> extends VisualiserM
public boolean Validate(D object) {
if (!isActive()) {
//считаем без учета результатов
for (FilterFlagMenuItem<D> filter : field_filters)
for (FilterFlag<D> filter : field_filters)
filter.Validate(object);
return true;
}
boolean res = false;
for (FilterFlagMenuItem<D> filter : field_filters)
for (FilterFlag<D> filter : field_filters)
if (filter.Validate(object))
res |= true;
return res;
@@ -61,22 +61,22 @@ public abstract class DataSetFiltersMenu<D extends DBObject> extends VisualiserM
//-------
void selectAll(boolean flag) {
for (FilterFlagMenuItem filter : field_filters)
for (FilterFlag filter : field_filters)
filter.setActive(flag);
}
public abstract void fill();
@Override
public void DropMatchesCount() {
for (FilterFlagMenuItem<D> filter : field_filters)
for (FilterFlag<D> filter : field_filters)
filter.DropMatchesCount();
}
@Override
public void ShowMatchesCount() {
for (FilterFlagMenuItem<D> filter : field_filters)
for (FilterFlag<D> filter : field_filters)
filter.ShowMatchesCount();
}
public boolean isActive() {
for (FilterFlagMenuItem<D> filter : field_filters) {
for (FilterFlag<D> filter : field_filters) {
if (filter.isActive())
return true;
}

View File

@@ -1,7 +1,9 @@
package Common.Visual;
import Common.Database.Objects.DBObject;
import Common.Database.Tables.DataSet;
import Common.MainModule_;
import Common.Utils.Utils_;
import Common.Visual.Fonts.VisualiserFonts;
import javax.swing.*;
//фильтр флаг. либо в меню, либо на баре. текста нет.
@@ -24,10 +26,12 @@ public abstract class FilterFlag<D extends DBObject> implements DBObjectFilter_<
description = control.getText();
control.addActionListener(e -> {
active = !active;
System.out.println("active="+active);
Mark();
dataSet.ShowUI();
});
Mark();
control.setFont(MainModule_.instance.getUI().getTheme().Fonts.get(VisualiserFonts.TreePlain));
}
public AbstractButton getControl(){return control;}
public void Mark() {
@@ -46,14 +50,11 @@ public abstract class FilterFlag<D extends DBObject> implements DBObjectFilter_<
boolean valid = validate(object);
if (valid)
count++;
return valid & active;
return !active || valid;
}
@Override
public void DropMatchesCount() {
count = 0;
}
@Override
public void ShowMatchesCount() {
control.setText(description + " " + Utils_.RBrackets(count));
}
}

View File

@@ -1,13 +0,0 @@
package Common.Visual;
import Common.Database.Objects.DBObject;
import Common.Database.Tables.DataSet;
import Common.Utils.Utils_;
import Common.Visual.Controls.StableMenuItem;
import javax.swing.*;
//одиночный фильтр, пункт фильтрационного меню.
public abstract class FilterFlagMenuItem<D extends DBObject> extends FilterFlag<D> {
public FilterFlagMenuItem(DataSet dataSet_in, String description_in, boolean active_in) {
super(dataSet_in, new StableMenuItem(description_in), active_in);
}
}

View File

@@ -0,0 +1,22 @@
package Common.Visual;
import Common.Database.Objects.DBObject;
import Common.Database.Tables.DataSet;
import Common.Utils.Utils_;
import javax.swing.*;
public abstract class FilterMenuFlag<D extends DBObject> extends FilterFlag<D>{
public FilterMenuFlag(DataSet<?, D> dataSet_in, AbstractButton control_in, boolean active_in) {
super(dataSet_in, control_in, active_in);
}
@Override
public boolean Validate(D object) {
boolean valid = validate(object);
if (valid)
count++;
return active & valid;
}
@Override
public void ShowMatchesCount() {
control.setText(description + " " + Utils_.RBrackets(count));
}
}

View File

@@ -1,9 +0,0 @@
package Common.Visual;
import Common.Database.Objects.DBObject;
public class MenuButtonFilterFlag<D extends DBObject> implements DBObjectFilter_<D> {
boolean active = true; //включен ли фильтр
@Override
public boolean Validate(D dbObject) {
return false;
}
}