diff --git a/src/main/java/core/gui/HOMainFrame.java b/src/main/java/core/gui/HOMainFrame.java
index b4e4a1383..1114fc833 100644
--- a/src/main/java/core/gui/HOMainFrame.java
+++ b/src/main/java/core/gui/HOMainFrame.java
@@ -13,7 +13,6 @@
import core.model.TranslationFacility;
import core.model.UserParameter;
import core.model.match.Weather;
-import core.model.player.Player;
import core.module.IModule;
import core.module.ModuleManager;
import core.module.config.ModuleConfig;
@@ -69,16 +68,6 @@ public final class HOMainFrame extends JFrame implements Refreshable {
private final Color c_beta = new Color(162, 201, 255);
private final Color c_dev = new Color(235, 170, 170);
- // TODO: Move this to a model backing the main window
- public Player getSelectedPlayer() {
- return m_selectedPlayer;
- }
-
- private Player m_selectedPlayer;
-
- // ~ Constructors
- // -------------------------------------------------------------------------------
-
/**
* Singleton
*/
@@ -188,15 +177,6 @@ public static boolean isHOMainFrame_initialized() {
return m_HOMainFrame_initialized;
}
- public void selectPlayer(Player player) {
- if (m_selectedPlayer != player) {
- m_selectedPlayer = player;
- var lineupPanel = getLineupPanel();
- if (lineupPanel != null) lineupPanel.setPlayer(player.getPlayerId());
- getSpielerUebersichtPanel().setPlayer(player);
- }
- }
-
public LineupPanel getLineupPanel() {
Container c = getTabbedPane().getModulePanel(IModule.LINEUP);
if (c instanceof LineupPanel) {
@@ -674,7 +654,6 @@ private void saveUserParameter() {
parameter.spielerUebersichtsPanel_horizontalLeftSplitPane = sup[0];
parameter.spielerUebersichtsPanel_horizontalRightSplitPane = sup[1];
parameter.spielerUebersichtsPanel_verticalSplitPane = sup[2];
-// getSpielerUebersichtPanel().saveColumnOrder();
}
// Lineup Panel
@@ -682,7 +661,6 @@ private void saveUserParameter() {
final int[] ap = getLineupPanel().getDividerLocations();
parameter.lineupPanel_verticalSplitLocation = ap[0];
parameter.lineupPanel_horizontalSplitLocation = ap[1];
- getLineupPanel().saveColumnOrder();
}
// TransferScoutPanel
diff --git a/src/main/java/core/gui/comp/entry/CheckBoxTableEntry.kt b/src/main/java/core/gui/comp/entry/CheckBoxTableEntry.kt
new file mode 100644
index 000000000..9009bf56a
--- /dev/null
+++ b/src/main/java/core/gui/comp/entry/CheckBoxTableEntry.kt
@@ -0,0 +1,100 @@
+package core.gui.comp.entry
+
+import core.gui.comp.renderer.HODefaultTableCellRenderer
+import java.awt.Color
+import javax.swing.JCheckBox
+import javax.swing.JComponent
+
+open class CheckBoxTableEntry(isEnabled: Boolean, var value: Boolean, fgStandard: Color?, bgStandard: Color?) :
+ IHOTableCellEntry {
+ private val fgStandard: Color?
+ private val bgStandard: Color?
+ private val checkBox: JCheckBox = JCheckBox()
+
+ /**
+ * Create table cell entry for booleans by check box
+ * @param isEnabled boolean
+ * @param value Boolean - Checked
+ * @param fgStandard Color
+ * @param bgStandard Color
+ */
+ init {
+ this.checkBox.setSelected(value)
+ this.checkBox.setEnabled(isEnabled)
+ this.fgStandard = fgStandard
+ this.bgStandard = bgStandard
+ createComponent()
+ }
+
+ /**
+ * Set value is called from HOTableModel
+ * @param b boolean
+ */
+ open fun changeValue(b: Boolean) {
+ this.value = b
+ this.updateComponent()
+ }
+
+ /**
+ * Return the checkbox component
+ * @param selected boolean
+ * @return JComponent
+ */
+ override fun getComponent(selected: Boolean): JComponent {
+ if (selected) {
+ this.checkBox.setBackground(HODefaultTableCellRenderer.SELECTION_BG)
+ this.checkBox.setForeground(HODefaultTableCellRenderer.SELECTION_FG)
+ } else {
+ this.checkBox.setBackground(bgStandard)
+ this.checkBox.setForeground(fgStandard)
+ }
+ return this.checkBox
+ }
+
+ /**
+ * Reset the checkbox
+ */
+ override fun clear() {
+ this.value = false
+ this.checkBox.setSelected(false)
+ }
+
+ /**
+ * Compare with other cell entry.
+ * Descending order is true, false, null.
+ * @param obj the object to be compared.
+ * @return int [-1,0,1]
+ */
+ override fun compareTo(obj: IHOTableCellEntry): Int {
+ if (obj is CheckBoxTableEntry) {
+ return this.value.compareTo(obj.value)
+ }
+ // Not a checkbox
+ return -1
+ }
+
+ /**
+ * Same as compareTo
+ * @param obj IHOTableCellEntry The other entry
+ * @return int
+ */
+ override fun compareToThird(obj: IHOTableCellEntry): Int {
+ return this.compareTo(obj)
+ }
+
+ /**
+ * Update the component
+ */
+ override fun createComponent() {
+ updateComponent()
+ }
+
+ /**
+ * Update the component
+ */
+ override fun updateComponent() {
+ this.checkBox.setSelected(value)
+ this.checkBox.setBackground(bgStandard)
+ this.checkBox.setForeground(fgStandard)
+ }
+}
diff --git a/src/main/java/core/gui/comp/entry/IHOTableCellEntry.java b/src/main/java/core/gui/comp/entry/IHOTableCellEntry.java
index b991ca878..fd08d3be5 100644
--- a/src/main/java/core/gui/comp/entry/IHOTableCellEntry.java
+++ b/src/main/java/core/gui/comp/entry/IHOTableCellEntry.java
@@ -5,7 +5,7 @@
/**
* Classes implementing this interface create a {@link javax.swing.JComponent} that will
* be displayed as a cell in a {@link javax.swing.JTable}: they act as factories to
- * create and initialise the UI component.
+ * create and update the UI component.
*
*
To display the component, call {@link #getComponent(boolean)}
.
*/
@@ -14,7 +14,7 @@ public interface IHOTableCellEntry extends Comparable {
/**
* This method returns the JComponent, which shall be shown in the Table. The component should
- * be created be createComponent and only the background should be changed according to the
+ * be created by createComponent and only the background should be changed according to the
* isSelected-Flag. Nevertheless, you can ignore the createComponent and updateComponent and
* create a new one everytime getComponent is called, but that is much slower!
*/
diff --git a/src/main/java/core/gui/comp/entry/TorLabelEntry.java b/src/main/java/core/gui/comp/entry/TorLabelEntry.java
deleted file mode 100644
index 3ade935c0..000000000
--- a/src/main/java/core/gui/comp/entry/TorLabelEntry.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package core.gui.comp.entry;
-
-import core.gui.comp.renderer.HODefaultTableCellRenderer;
-import core.gui.theme.HOIconName;
-import core.gui.theme.ThemeManager;
-import org.jetbrains.annotations.NotNull;
-
-import javax.swing.*;
-
-
-public class TorLabelEntry extends AbstractHOTableEntry {
-
- private static Icon BALLIMAGEICON;
-
- private JComponent m_clComponent = new JPanel();
- private int m_iTore;
-
-
- public TorLabelEntry() {
- this(0);
- }
-
- public TorLabelEntry(int tore) {
- if (BALLIMAGEICON == null) {
- BALLIMAGEICON = ThemeManager.getScaledIcon(HOIconName.BALL, 14, 14);
- }
-
- setTore(tore);
- createComponent();
- }
-
- public final javax.swing.JComponent getComponent(boolean isSelected) {
- m_clComponent.setBackground(isSelected?HODefaultTableCellRenderer.SELECTION_BG:ColorLabelEntry.BG_STANDARD);
- return m_clComponent;
- }
-
- public final void setTore(int tore) {
- if (tore != m_iTore) {
- m_iTore = tore;
- updateComponent();
- }
- }
-
- public final int getTore() {
- return m_iTore;
- }
-
-
- public final void clear() {
- m_clComponent.removeAll();
- }
-
-
- public final int compareTo(@NotNull IHOTableCellEntry obj) {
- if (obj instanceof TorLabelEntry) {
- final TorLabelEntry entry = (TorLabelEntry) obj;
-
- if (getTore() < entry.getTore()) {
- return -1;
- } else if (getTore() > entry.getTore()) {
- return 1;
- } else {
- return 0;
- }
- }
-
- return 0;
- }
-
- public final void createComponent() {
- JPanel renderer = new JPanel();
- renderer.setLayout(new BoxLayout(renderer, 0));
- renderer.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
-
- for (float f = m_iTore; f > 0; f--) {
- final JLabel jlabel = new JLabel(BALLIMAGEICON);
- jlabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
- renderer.add(jlabel);
- }
-
- m_clComponent = renderer;
- }
-
- public final void incTore() {
- setTore(getTore() + 1);
- }
-
- public final void updateComponent() {
- m_clComponent.removeAll();
-
- for (float f = m_iTore; f > 0; f--) {
- final JLabel jlabel = new JLabel(BALLIMAGEICON);
- jlabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0));
- m_clComponent.add(jlabel);
- }
- }
-}
diff --git a/src/main/java/core/gui/comp/renderer/HODefaultTableCellRenderer.java b/src/main/java/core/gui/comp/renderer/HODefaultTableCellRenderer.java
index c4914d4aa..ec8aa79df 100644
--- a/src/main/java/core/gui/comp/renderer/HODefaultTableCellRenderer.java
+++ b/src/main/java/core/gui/comp/renderer/HODefaultTableCellRenderer.java
@@ -11,7 +11,6 @@
import javax.swing.JLabel;
import javax.swing.JTable;
-
/**
* Renderer for tables with JLabels as table objects
*/
@@ -26,12 +25,13 @@ public java.awt.Component getTableCellRendererComponent(JTable table, Object val
boolean isSelected,
boolean hasFocus,
int row,
- int column)
- {
+ int column) {
if (value instanceof IHOTableCellEntry ihoTableCellEntry) {
final JComponent component = ihoTableCellEntry.getComponent(isSelected);
- if (isSelected) {
- component.setOpaque(true);
+ if (component != null) {
+ if (isSelected) {
+ component.setOpaque(true);
+ }
}
return component;
} else if (value instanceof JComponent component) {
@@ -47,4 +47,4 @@ public java.awt.Component getTableCellRendererComponent(JTable table, Object val
return component;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/core/gui/comp/table/BooleanColumn.java b/src/main/java/core/gui/comp/table/BooleanColumn.java
deleted file mode 100644
index 296d55b3e..000000000
--- a/src/main/java/core/gui/comp/table/BooleanColumn.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package core.gui.comp.table;
-
-import core.model.player.Player;
-
-public class BooleanColumn extends UserColumn {
-
- public BooleanColumn(int id, String name, String tooltip, int minWidth){
- super(id,name,tooltip);
- this.minWidth = minWidth;
- preferredWidth = minWidth;
- }
-
- public Boolean getValue(Player player){
-
- return player.getCanBeSelectedByAssistant();
- }
-
-
-}
diff --git a/src/main/java/core/gui/comp/table/FixedColumnsTable.kt b/src/main/java/core/gui/comp/table/FixedColumnsTable.kt
index bbab6017f..aaf648211 100644
--- a/src/main/java/core/gui/comp/table/FixedColumnsTable.kt
+++ b/src/main/java/core/gui/comp/table/FixedColumnsTable.kt
@@ -79,12 +79,13 @@ open class FixedColumnsTable @JvmOverloads constructor(
if (fixedColumnsCount > 0) {
fixed = JTable(model)
- fixed!!.setFocusable(false)
- fixed!!.setSelectionModel(getSelectionModel())
+ fixed!!.setFocusable(true)
fixed!!.getTableHeader().reorderingAllowed = false
fixed!!.setSelectionModel(getSelectionModel())
+ fixed!!.columnModel.selectionModel = getSelectionModel()
+
// Remove the non-fixed columns from the fixed table
- while (fixed!!.getColumnCount() > fixedColumnsCount) {
+ while (fixed!!.columnCount > fixedColumnsCount) {
val _columnModel = fixed!!.getColumnModel()
_columnModel.removeColumn(_columnModel.getColumn(fixedColumnsCount))
}
@@ -173,7 +174,6 @@ open class FixedColumnsTable @JvmOverloads constructor(
}
}
-
/**
* Show the horizontal scroll bar of the scroll pane when the other horizontal scroll bar appeared in case of pane resizing
* @param scrollPane The scroll pane that has to be synchronized with the other scroll pane
@@ -189,8 +189,8 @@ open class FixedColumnsTable @JvmOverloads constructor(
/**
* Hide the horizontal scroll bar of the scroll pane when the other horizontal scroll bar disappeared in case of pane resizing
- * If the other scroll bar does not require a scroll bar, its scroll bar will be removed
- * otherwise the disappearance in hidden scroll bar will be reset.
+ * If the other scroll bar does not require a scroll bar, its scroll bar will be removed,
+ * otherwise the disappearance in hidden scroll bar will reset.
* @param hiddenScrollPane The scroll pane that removed the scroll bar
* @param otherScrollPane The scroll pane that has to be adapted
*/
diff --git a/src/main/java/core/gui/comp/table/HOTableModel.kt b/src/main/java/core/gui/comp/table/HOTableModel.kt
index 0cf21b4e5..e90814d1c 100644
--- a/src/main/java/core/gui/comp/table/HOTableModel.kt
+++ b/src/main/java/core/gui/comp/table/HOTableModel.kt
@@ -1,6 +1,7 @@
package core.gui.comp.table
import core.db.DBManager
+import core.gui.comp.entry.CheckBoxTableEntry
import core.gui.comp.renderer.HODefaultTableCellRenderer
import core.gui.model.UserColumnController.ColumnModelId
import core.model.TranslationFacility
@@ -34,8 +35,8 @@ abstract class HOTableModel protected constructor(
* Identifier of the column model.
* It is used for saving columns in db
*/
- @JvmField
- val id: Int = id.value
+ @JvmField
+ val id: Int = id.value
/**
* Return all columns of the model
@@ -51,7 +52,7 @@ abstract class HOTableModel protected constructor(
/** Data of table */
@JvmField
- protected var m_clData: Array>? = null
+ protected var m_clData: Array>? = null
// TODO: Check if a list of tables is necessary (See SpielerMatchesTable, which uses two instances of same table model type)
@@ -131,15 +132,20 @@ abstract class HOTableModel protected constructor(
* @return Object
*/
override fun getValueAt(row: Int, column: Int): Any? {
- if (m_clData != null && m_clData!!.size > row && row > -1 && column > -1 && column < m_clData!![row].size ) {
- return m_clData!![row][column]
+ if (m_clData != null && m_clData!!.size > row && row > -1 && column > -1 && column < m_clData!![row].size) {
+ val ret = m_clData!![row][column]
+ if (ret is CheckBoxTableEntry) {
+ return ret.value
+ }
+ return ret
}
return null
}
override fun isCellEditable(row: Int, column: Int): Boolean {
- if (column > -1 && column < columns.size) {
- return columns[column].isEditable
+ val cols = getDisplayedColumns()
+ if (column > -1 && column < cols.size) {
+ return cols[column].isEditable
}
return false
}
@@ -161,6 +167,9 @@ abstract class HOTableModel protected constructor(
val obj = getValueAt(0, columnIndex)
if (obj != null) {
+ if (obj is CheckBoxTableEntry) {
+ return Boolean::class.java
+ }
return obj.javaClass
}
@@ -186,7 +195,11 @@ abstract class HOTableModel protected constructor(
* @param column column of cell
*/
override fun setValueAt(value: Any, row: Int, column: Int) {
- if (m_clData != null && m_clData!!.size > row && row > -1 && column > -1 && column < m_clData!![row].size ) {
+ if (m_clData != null && m_clData!!.size > row && row > -1 && column > -1 && column < m_clData!![row].size) {
+ val ret = m_clData!![row][column]
+ if (ret is CheckBoxTableEntry && value is Boolean) {
+ ret.changeValue(value)
+ }
m_clData!![row][column] = value
}
for (table in tables) {
@@ -312,14 +325,14 @@ abstract class HOTableModel protected constructor(
// Copy user columns' identifiers to table's columns
val displayedColumns = getDisplayedColumns()
- var i=0
+ var i = 0
for (userColumn in displayedColumns) {
val tableColumn = getTableColumn(table, i++)
tableColumn.identifier = userColumn.getId()
- if (userColumn.isHidden){
- tableColumn.preferredWidth=0
- tableColumn.minWidth=0
- tableColumn.maxWidth=0
+ if (userColumn.isHidden) {
+ tableColumn.preferredWidth = 0
+ tableColumn.minWidth = 0
+ tableColumn.maxWidth = 0
}
}
getUserColumnSettings(table)
@@ -337,6 +350,7 @@ abstract class HOTableModel protected constructor(
val newSelectedRow = table.convertRowIndexToView(modelIndex)
table.setRowSelectionInterval(newSelectedRow, newSelectedRow)
}
+ selectedRow = -1
}
}
}
@@ -434,4 +448,4 @@ abstract class HOTableModel protected constructor(
if (tables.isNotEmpty()) return tables[0]
return null
}
-}
\ No newline at end of file
+}
diff --git a/src/main/java/core/gui/comp/table/PlayerCheckBoxColumn.java b/src/main/java/core/gui/comp/table/PlayerCheckBoxColumn.java
new file mode 100644
index 000000000..4002c7b71
--- /dev/null
+++ b/src/main/java/core/gui/comp/table/PlayerCheckBoxColumn.java
@@ -0,0 +1,19 @@
+package core.gui.comp.table;
+
+import core.gui.comp.entry.IHOTableCellEntry;
+import core.gui.model.PlayerColumn;
+import core.model.player.Player;
+import org.jetbrains.annotations.NotNull;
+
+public class PlayerCheckBoxColumn extends PlayerColumn {
+
+ public PlayerCheckBoxColumn(int id, String name, String tooltip, int minWidth) {
+ super(id, name, tooltip);
+ this.minWidth = minWidth;
+ this.preferredWidth = minWidth;
+ }
+
+ public IHOTableCellEntry getTableEntry(@NotNull Player player) {
+ return null;
+ }
+}
diff --git a/src/main/java/core/gui/comp/table/PlayersTable.kt b/src/main/java/core/gui/comp/table/PlayersTable.kt
index d9ba86dfa..a155c6970 100644
--- a/src/main/java/core/gui/comp/table/PlayersTable.kt
+++ b/src/main/java/core/gui/comp/table/PlayersTable.kt
@@ -64,7 +64,7 @@ class PlayersTable @JvmOverloads constructor(tableModel: HOPlayersTableModel, fi
}
fun getSelectedPlayers() : List{
- var players = mutableListOf()
+ val players = mutableListOf()
val allPLayers = getPlayers()
for (viewRow in this.selectedRows){
players.add(allPLayers.get(this.convertRowIndexToModel(viewRow)))
diff --git a/src/main/java/core/gui/comp/table/UserColumn.java b/src/main/java/core/gui/comp/table/UserColumn.java
index 99b22d28f..83afef647 100644
--- a/src/main/java/core/gui/comp/table/UserColumn.java
+++ b/src/main/java/core/gui/comp/table/UserColumn.java
@@ -1,6 +1,7 @@
package core.gui.comp.table;
import core.model.TranslationFacility;
+
import javax.swing.*;
import javax.swing.table.TableColumn;
@@ -9,189 +10,221 @@
*/
public abstract class UserColumn {
- /** unique column id **/
- protected int id;
-
- /** columnName properties representation, not display!! **/
- protected String columnName;
-
- /** tooltip properties representation **/
- protected String tooltip;
-
- /** minimum width of the column **/
- protected int minWidth;
-
- /** preferred width of the column **/
- protected int preferredWidth;
-
- /** index of the column in the table **/
- protected int index = 0;
-
- /** if a column is shown in the table. Only displayed columns are saved in db. **/
- protected boolean display = false;
+ /**
+ * unique column id
+ **/
+ protected int id;
+
+ /**
+ * columnName properties representation, not display!!
+ **/
+ protected String columnName;
+
+ /**
+ * tooltip properties representation
+ **/
+ protected String tooltip;
+
+ /**
+ * minimum width of the column
+ **/
+ protected int minWidth;
+
+ /**
+ * preferred width of the column
+ **/
+ protected int preferredWidth;
+
+ /**
+ * index of the column in the table
+ **/
+ protected int index = 0;
+
+ /**
+ * if a column is shown in the table. Only displayed columns are saved in db.
+ **/
+ protected boolean display = false;
protected boolean translateColumnName = true;
protected boolean translateColumnTooltip = true;
- /**
- * Sort order of the column
- */
- SortOrder sortOrder;
-
- /**
- * Sort priority
- * Defines the order of the sort keys if more than one column are sorted
- */
- Integer sortPriority;
-
- /**
- * Constructor of an user column
- * @param id column identifier has to be unique in one table
- * @param name Column name is displayed in the column header
- * @param tooltip Column header tool tip
- */
- protected UserColumn(int id,String name, String tooltip){
- this.id = id;
- columnName = name;
- this.tooltip = tooltip;
- }
-
- /**
- * Constructor of an user column
- * @param id column identifier has to be unique in one table
- * @param name Column name and tool tip
- */
- protected UserColumn(int id,String name){
- this(id,name,name);
- }
-
- /**
- * constructor is used by AbstractTable
- */
- public UserColumn(){}
-
- /**
- * returns the language dependency name of the column
- * @return String
- */
- public final String getColumnName() {
+ /**
+ * Sort order of the column
+ */
+ SortOrder sortOrder;
+
+ /**
+ * Sort priority
+ * Defines the order of the sort keys if more than one column are sorted
+ */
+ Integer sortPriority;
+
+ /**
+ * Constructor of an user column
+ *
+ * @param id column identifier has to be unique in one table
+ * @param name Column name is displayed in the column header
+ * @param tooltip Column header tool tip
+ */
+ protected UserColumn(int id, String name, String tooltip) {
+ this.id = id;
+ columnName = name;
+ this.tooltip = tooltip;
+ }
+
+ /**
+ * Constructor of an user column
+ *
+ * @param id column identifier has to be unique in one table
+ * @param name Column name and tool tip
+ */
+ protected UserColumn(int id, String name) {
+ this(id, name, name);
+ }
+
+ /**
+ * constructor is used by AbstractTable
+ */
+ public UserColumn() {
+ }
+
+ /**
+ * returns the language dependency name of the column
+ *
+ * @return String
+ */
+ public final String getColumnName() {
return translateColumnName ? TranslationFacility.tr(columnName) : columnName;
}
-
- /**
- * Return id
- * @return int
- */
- public final int getId() {
- return id;
- }
-
- /**
- * returns the language dependency tooltip of the column
- * @return String
- */
- public final String getTooltip() {
- return (this.translateColumnTooltip)?TranslationFacility.tr(tooltip):tooltip;
- }
-
- /**
- * Should a column be shown
- * @return boolean
- */
- public boolean isDisplay() {
- return display;
- }
-
- /**
- * set a column to be showed
- * @param display boolean
- */
- public final void setDisplay(boolean display) {
- this.display = display;
- if (!display) {
- index = 0;
- sortPriority = null;
- sortOrder = null;
- }
- }
-
- /**
- * return the current index of column
- * only actual if user don´t move the column !!
- * @return int
- */
- public final int getIndex() {
- return index;
- }
-
- /**
- * set index
- * if columnModel should be saved index will set, or column is loaded
- * @param index int
- */
- public final void setIndex(int index) {
- this.index = index;
- }
-
- /**
- * String representation
- * use in UserColumnsPanel in OptionsPanel
- */
- @Override
- public String toString(){
- return getTooltip();
- }
-
- /**
- * Some columns must be displayed, so some columns are not editable in options dialog
- * @return boolean
- */
- public boolean canBeDisabled(){
- return true;
- }
-
- /**
- * Column is not visible (width is reduced to zero).
- * @return boolean
- */
- public boolean isHidden(){return false;}
-
- /**
- * set minWidth and prefWidth in the TableColumn
- * @param column TableColumn
- */
- public void setSize(TableColumn column){
- column.setMinWidth(minWidth);
- column.setPreferredWidth(preferredWidth);
- }
-
- /**
- * set preferredWidth for saving to DB
- * @param width int
- */
- public void setPreferredWidth(int width){
- preferredWidth = width;
- }
-
- public int getPreferredWidth(){
- return preferredWidth;
- }
-
- public Integer getSortPriority() {
- return sortPriority;
- }
-
- public SortOrder getSortOrder() {
- return sortOrder;
- }
-
- public void setSortPriority(Integer sortPriority) {
- this.sortPriority = sortPriority;
- }
-
- public void setSortOrder(SortOrder sortOrder) {
- this.sortOrder = sortOrder;
- }
-
- public boolean isEditable() {return false;}
+
+ /**
+ * Return id
+ *
+ * @return int
+ */
+ public final int getId() {
+ return id;
+ }
+
+ /**
+ * returns the language dependency tooltip of the column
+ *
+ * @return String
+ */
+ public final String getTooltip() {
+ return (this.translateColumnTooltip) ? TranslationFacility.tr(tooltip) : tooltip;
+ }
+
+ /**
+ * Should a column be shown
+ *
+ * @return boolean
+ */
+ public boolean isDisplay() {
+ return display;
+ }
+
+ /**
+ * set a column to be showed
+ *
+ * @param display boolean
+ */
+ public final void setDisplay(boolean display) {
+ this.display = display;
+ if (!display) {
+ index = 0;
+ sortPriority = null;
+ sortOrder = null;
+ }
+ }
+
+ /**
+ * return the current index of column
+ * only actual if user don´t move the column !!
+ *
+ * @return int
+ */
+ public final int getIndex() {
+ return index;
+ }
+
+ /**
+ * set index
+ * if columnModel should be saved index will set, or column is loaded
+ *
+ * @param index int
+ */
+ public final void setIndex(int index) {
+ this.index = index;
+ }
+
+ /**
+ * String representation
+ * use in UserColumnsPanel in OptionsPanel
+ */
+ @Override
+ public String toString() {
+ return getTooltip();
+ }
+
+ /**
+ * Some columns must be displayed, so some columns are not editable in options dialog
+ *
+ * @return boolean
+ */
+ public boolean canBeDisabled() {
+ return true;
+ }
+
+ /**
+ * Column is not visible (width is reduced to zero).
+ *
+ * @return boolean
+ */
+ public boolean isHidden() {
+ return false;
+ }
+
+ /**
+ * set minWidth and prefWidth in the TableColumn
+ *
+ * @param column TableColumn
+ */
+ public void setSize(TableColumn column) {
+ column.setMinWidth(minWidth);
+ column.setPreferredWidth(preferredWidth);
+ }
+
+ /**
+ * set preferredWidth for saving to DB
+ *
+ * @param width int
+ */
+ public void setPreferredWidth(int width) {
+ preferredWidth = width;
+ }
+
+ public int getPreferredWidth() {
+ return preferredWidth;
+ }
+
+ public Integer getSortPriority() {
+ return sortPriority;
+ }
+
+ public SortOrder getSortOrder() {
+ return sortOrder;
+ }
+
+ public void setSortPriority(Integer sortPriority) {
+ this.sortPriority = sortPriority;
+ }
+
+ public void setSortOrder(SortOrder sortOrder) {
+ this.sortOrder = sortOrder;
+ }
+
+ public boolean isEditable() {
+ return false;
+ }
}
diff --git a/src/main/java/core/gui/model/PlayerColumn.java b/src/main/java/core/gui/model/PlayerColumn.java
index 82126b31a..5d5a901bc 100644
--- a/src/main/java/core/gui/model/PlayerColumn.java
+++ b/src/main/java/core/gui/model/PlayerColumn.java
@@ -7,6 +7,8 @@
import core.model.player.Player;
import org.jetbrains.annotations.Nullable;
+import javax.swing.*;
+
/**
* Column shows skill of a player
* @author Thorsten Dietz
@@ -60,9 +62,9 @@ public PlayerColumn(int id,String name, String tooltip,int minWidth){
*/
public IHOTableCellEntry getTableEntry(Player player, @Nullable Player comparePlayer){
return new ColorLabelEntry(getValue(player),
- ColorLabelEntry.BG_STANDARD, false, 0);
+ ColorLabelEntry.BG_STANDARD, 0);
}
-
+
/**
* return the individual playerValue
* overwritten by created columns
@@ -72,6 +74,4 @@ public IHOTableCellEntry getTableEntry(Player player, @Nullable Player comparePl
public int getValue(Player player){
return player.getPlayerId();
}
-
-
}
diff --git a/src/main/java/core/gui/model/UserColumnController.java b/src/main/java/core/gui/model/UserColumnController.java
index c4523e7dd..eed7e7dfa 100644
--- a/src/main/java/core/gui/model/UserColumnController.java
+++ b/src/main/java/core/gui/model/UserColumnController.java
@@ -4,6 +4,7 @@
import core.gui.comp.table.HOTableModel;
import module.halloffame.HallOfFameTableModel;
import module.matches.statistics.MatchesOverviewColumnModel;
+import module.playeroverview.PlayerOverviewTableModel;
import module.specialevents.SpecialEventsTableModel;
import module.teamanalyzer.ui.RecapPanelTableModel;
import module.training.ui.TrainingProgressTableModel;
@@ -61,19 +62,19 @@ public enum ColumnModelId {
/** singleton **/
private static final UserColumnController columnController = new UserColumnController();
-
+
/** model for matches table **/
private MatchesColumnModel matchesColumnModel = null;
/** model for matches statistic table **/
private MatchesOverviewColumnModel matchesOverview1ColumnModel = null;
-
+
/** model for player overview **/
private PlayerOverviewTableModel playerOverviewColumnModel = null;
-
+
/** model for lineup table **/
private PlayerOverviewTableModel lineupColumnModel = null;
-
+
/** model for player analysis **/
private final PlayerAnalysisModel[] playerAnalysisModels = new PlayerAnalysisModel[2];
@@ -101,23 +102,21 @@ public enum ColumnModelId {
/**
- * constructor
- *
+ * Constructor
*/
private UserColumnController(){
-
+
}
/**
- * singelton
+ * Singleton
* @return UserColumnController
*/
public static UserColumnController instance(){
return columnController;
}
-
+
/**
- * load all models from db
- *
+ * Load all models from db
*/
public void load() {
final DBManager dbManager = DBManager.instance();
@@ -211,35 +210,35 @@ public SpecialEventsTableModel getSpecialEventsTableModel() {
}
/**
- *
+ *
* @return PlayerAnalysisModel
*/
public PlayerAnalysisModel getAnalysisModel(int instance){
if(playerAnalysisModels[instance-1] == null)
playerAnalysisModels[instance-1] = new PlayerAnalysisModel(ColumnModelId.PLAYERANALYSIS1, instance);
-
+
return playerAnalysisModels[instance-1];
}
-
+
/**
- *
+ *
* @return MatchesColumnModel
*/
public MatchesColumnModel getMatchesModel(){
if(matchesColumnModel == null)
matchesColumnModel = new MatchesColumnModel(ColumnModelId.MATCHES);
-
+
return matchesColumnModel;
}
-
+
public MatchesOverviewColumnModel getMatchesOverview1ColumnModel(){
if(matchesOverview1ColumnModel == null)
matchesOverview1ColumnModel = new MatchesOverviewColumnModel(ColumnModelId.MATCHESOVERVIEW);
- return matchesOverview1ColumnModel;
+ return matchesOverview1ColumnModel;
}
-
+
/**
- *
+ *
* @return PlayerOverviewModel
*/
public PlayerOverviewTableModel getPlayerOverviewModel(){
@@ -248,9 +247,9 @@ public PlayerOverviewTableModel getPlayerOverviewModel(){
}
return playerOverviewColumnModel;
}
-
+
/**
- *
+ *
* @return LineupColumnModel
*/
public PlayerOverviewTableModel getLineupModel(){
diff --git a/src/main/java/core/gui/model/UserColumnFactory.java b/src/main/java/core/gui/model/UserColumnFactory.java
index 531884c80..f4c9a94f4 100644
--- a/src/main/java/core/gui/model/UserColumnFactory.java
+++ b/src/main/java/core/gui/model/UserColumnFactory.java
@@ -4,6 +4,7 @@
import core.constants.player.PlayerSkill;
import core.db.DBManager;
import core.gui.comp.entry.*;
+import core.gui.comp.table.PlayerCheckBoxColumn;
import core.gui.theme.HOColorName;
import core.gui.theme.HOIconName;
import core.gui.theme.ImageUtilities;
@@ -21,6 +22,7 @@
import core.util.Helper;
import core.util.StringUtils;
import module.playeroverview.PlayerStatusLabelEntry;
+import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import javax.swing.table.TableColumn;
@@ -499,7 +501,7 @@ public IHOTableCellEntry getTableEntry(PlayerMatchCBItem spielerCBItem) {
* @return PlayerColumn[]
*/
public static PlayerColumn[] createPlayerAdditionalArray() {
- final PlayerColumn[] playerAdditionalArray = new PlayerColumn[31];
+ final PlayerColumn[] playerAdditionalArray = new PlayerColumn[32];
playerAdditionalArray[0] = new PlayerColumn(10, "ls.player.shirtnumber.short", "ls.player.shirtnumber", 25) {
@Override
@@ -958,6 +960,25 @@ public IHOTableCellEntry getTableEntry(Player player, Player playerCompare) {
return new ColorLabelEntry(player.getNote().replace('\n', '/'), ColorLabelEntry.FG_STANDARD, ColorLabelEntry.BG_STANDARD, SwingConstants.LEFT);
}
};
+
+ playerAdditionalArray[31] = new PlayerCheckBoxColumn(UserColumnFactory.AUTO_LINEUP, " ", "AutoAufstellung", 28) {
+ @Override
+ public IHOTableCellEntry getTableEntry(@NotNull Player player) {
+ return new CheckBoxTableEntry(!player.isExternallyRecruitedCoach(), player.getCanBeSelectedByAssistant(), ColorLabelEntry.FG_STANDARD, ColorLabelEntry.BG_STANDARD) {
+ @Override
+ public void changeValue(boolean value) {
+ player.setCanBeSelectedByAssistant(value);
+ super.changeValue(value);
+ }
+ };
+ }
+
+ @Override
+ public boolean isEditable() {
+ return true;
+ }
+
+ };
return playerAdditionalArray;
}
diff --git a/src/main/java/core/model/player/Player.java b/src/main/java/core/model/player/Player.java
index e6dc5a6fa..6b9d2d41a 100644
--- a/src/main/java/core/model/player/Player.java
+++ b/src/main/java/core/model/player/Player.java
@@ -334,10 +334,6 @@ public void setContractDate(String contractDate) {
private List skillChanges;
-
- //~ Constructors -------------------------------------------------------------------------------
-
-
/**
* Creates a new instance of Player
*/
@@ -345,11 +341,12 @@ public Player() {
}
/**
- * Erstellt einen Player aus den Properties einer HRF Datei
+ * Create player from properties of a hrf file
+ * @param properties HOProperties hrf properties
+ * @param hrfDate HODateTime Date from the hrf file
+ * @param hrfId int Identifier of the hrf file
*/
public Player(HOProperties properties, HODateTime hrfDate, int hrfId) {
- // Separate first, nick and last names are available. Utilize them?
-
this.hrfId = hrfId;
spielerId = properties.getInt("id", 0);
firstName = properties.getProperty("firstname", "");
@@ -467,6 +464,7 @@ public Integer getOrDownloadMotherClubId() {
downloadMotherClubInfoIfMissing();
return this.motherClubId;
}
+
private void downloadMotherClubInfoIfMissing() {
var isCurrentPlayer = HOVerwaltung.instance().getModel().getCurrentPlayer(this.getPlayerId()) != null;
if (isCurrentPlayer && motherClubId == null ) {
@@ -1158,7 +1156,6 @@ public int getMarktwert() {
return tsi;
}
-
String latestTSIInjured;
String latestTSINotInjured;
@@ -1230,19 +1227,33 @@ public int getPlaymakingSkill() {
}
/**
- * set whether that player can be selected by the assistant
+ * Set whether that player can be selected by the assistant
+ * The value is stored to the database
+ * @param flag boolean
*/
public void setCanBeSelectedByAssistant(boolean flag) {
- if (this.isExternallyRecruitedCoach()) flag = false;
+ if (flag == canBeSelectedByAssistant) {
+ return; // Nothing changed
+ }
+ if (this.isExternallyRecruitedCoach()) {
+ flag = false;
+ }
getNotes().setEligibleToPlay(flag);
DBManager.instance().storePlayerNotes(notes);
+ canBeSelectedByAssistant = flag;
}
+ private Boolean canBeSelectedByAssistant;
+
/**
- * get whether that player can be selected by the assistant
+ * Get whether that player can be selected by the assistant
+ * @return Boolean
*/
public boolean getCanBeSelectedByAssistant() {
- return !this.isExternallyRecruitedCoach() && getNotes().isEligibleToPlay();
+ if (canBeSelectedByAssistant == null) {
+ canBeSelectedByAssistant = !this.isExternallyRecruitedCoach() && getNotes().isEligibleToPlay();
+ }
+ return canBeSelectedByAssistant;
}
public void setPlayerId(int m_iSpielerID) {
diff --git a/src/main/java/module/lineup/LineupMasterView.java b/src/main/java/module/lineup/LineupMasterView.java
index 28137740c..894a33798 100644
--- a/src/main/java/module/lineup/LineupMasterView.java
+++ b/src/main/java/module/lineup/LineupMasterView.java
@@ -99,4 +99,8 @@ private void refreshView() {
this.penaltyTakersView.setPlayers(HOVerwaltung.instance().getModel().getCurrentPlayers());
this.penaltyTakersView.setLineup(HOVerwaltung.instance().getModel().getCurrentLineup());
}
+
+ public void storeUserSettings() {
+ this.lineupPanel.storeUserSettings();
+ }
}
diff --git a/src/main/java/module/lineup/LineupModule.java b/src/main/java/module/lineup/LineupModule.java
index 85816479a..d396d13f8 100644
--- a/src/main/java/module/lineup/LineupModule.java
+++ b/src/main/java/module/lineup/LineupModule.java
@@ -8,6 +8,8 @@
public final class LineupModule extends DefaultModule {
+ private LineupMasterView lineupMasterView;
+
public LineupModule() {
super(true);
}
@@ -24,7 +26,8 @@ public String getDescription() {
@Override
public JPanel createTabPanel() {
- return new LineupMasterView();
+ this.lineupMasterView = new LineupMasterView();
+ return this.lineupMasterView;
}
@Override
@@ -32,4 +35,10 @@ public KeyStroke getKeyStroke() {
return KeyStroke.getKeyStroke(KeyEvent.VK_F2, 0);
}
+ @Override
+ public void storeUserSettings() {
+ if (this.lineupMasterView != null) {
+ this.lineupMasterView.storeUserSettings();
+ }
+ }
}
diff --git a/src/main/java/module/lineup/LineupPanel.java b/src/main/java/module/lineup/LineupPanel.java
index 8a392f807..51a452880 100644
--- a/src/main/java/module/lineup/LineupPanel.java
+++ b/src/main/java/module/lineup/LineupPanel.java
@@ -1,7 +1,9 @@
package module.lineup;
-import core.gui.HOMainFrame;
+import core.gui.Refreshable;
import core.gui.Updatable;
+import core.gui.comp.table.PlayersTable;
+import core.gui.model.UserColumnController;
import core.gui.theme.HOColorName;
import core.gui.theme.ThemeManager;
import core.model.UserParameter;
@@ -11,6 +13,8 @@
import module.lineup.lineup.MatchAndLineupSelectionPanel;
import module.lineup.lineup.PlayerPositionPanel;
import module.lineup.ratings.LineupRatingPanel;
+import module.playeroverview.PlayerOverviewTableModel;
+
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
@@ -20,27 +24,25 @@
/**
* Master panel of the Lineup module
*/
-public class LineupPanel extends core.gui.comp.panel.ImagePanel {
+public class LineupPanel extends core.gui.comp.panel.ImagePanel implements Refreshable {
public static final Color TITLE_FG = ThemeManager.getColor(HOColorName.LINEUP_HIGHLIGHT_FG);
private LineupPositionsPanel lineupPositionsPanel;
- private LineupPlayersTable lineupPlayersTable;
+ private PlayersTable lineupPlayersTable;
private LineupRatingAssistantPanel lineupRatingAssistantPanel;
private JSplitPane horizontalSplitPane;
private JSplitPane verticalSplitPane;
private final List updatable = new ArrayList<>();
- private boolean areSelecting = false;
public LineupPanel() {
initComponents();
+ var playerOverviewTableModel = (PlayerOverviewTableModel) this.lineupPlayersTable.getModel();
+ playerOverviewTableModel.reInitData();
}
- public void storeUserSettings(){
- this.lineupPlayersTable.getTableModel().storeUserSettings();
- }
-
- public void setPlayer(int idPlayer) {
- lineupPlayersTable.setPlayer(idPlayer);
+ public void storeUserSettings() {
+ var playerOverviewTableModel = (PlayerOverviewTableModel) this.lineupPlayersTable.getModel();
+ playerOverviewTableModel.storeUserSettings();
}
public void refresh() {
@@ -67,7 +69,6 @@ private LineupPositionsPanel getLineupPositionsPanel() {
return lineupPositionsPanel;
}
-
/**
* Get the divider location to restore user previous view organization
*/
@@ -79,10 +80,6 @@ public final int[] getDividerLocations() {
return locations;
}
- public void saveColumnOrder() {
- lineupPlayersTable.saveColumnOrder();
- }
-
/**
* Refresh the players and tactics of each Lineup panels
*/
@@ -92,7 +89,6 @@ public final void update() {
lineupPlayersTable.refresh();
// Refresh the table and details of the player overview
core.gui.HOMainFrame.instance().getSpielerUebersichtPanel().refresh();
-
fireUpdate();
}
@@ -137,24 +133,8 @@ private LineupRatingAssistantPanel getLineupRatingAssistantPanel() {
}
private Component initSpielerTabelle() {
- lineupPlayersTable = new LineupPlayersTable();
- lineupPlayersTable.getSelectionModel().addListSelectionListener(
- e -> {
- if (!areSelecting) {
- areSelecting = true;
- var player = lineupPlayersTable.getPlayer(e.getFirstIndex());
- if (player == null) {
- player = HOMainFrame.instance().getSelectedPlayer();
- if (player != null) {
- lineupPlayersTable.setPlayer(player.getPlayerId());
- }
- } else {
- HOMainFrame.instance().selectPlayer(player);
- }
- areSelecting = false;
- }
- }
- );
+ var model = UserColumnController.instance().getLineupModel();
+ lineupPlayersTable = new PlayersTable(model);
return lineupPlayersTable.getContainerComponent();
}
@@ -253,4 +233,10 @@ public ArrayList getAllPositions() {
public int getSelectedMatchMinute() {
return this.lineupRatingAssistantPanel.getLineupRatingPanel().getSelectedMatchMinute();
}
+
+ @Override
+ public void reInit() {
+ refresh();
+ }
+
}
diff --git a/src/main/java/module/lineup/LineupPlayersTable.java b/src/main/java/module/lineup/LineupPlayersTable.java
deleted file mode 100644
index fe750c9ff..000000000
--- a/src/main/java/module/lineup/LineupPlayersTable.java
+++ /dev/null
@@ -1,128 +0,0 @@
-package module.lineup;
-
-import core.db.DBManager;
-import core.gui.HOMainFrame;
-import core.gui.RefreshManager;
-import core.gui.comp.renderer.BooleanTableCellRenderer;
-import core.gui.comp.renderer.HODefaultTableCellRenderer;
-import core.gui.comp.table.FixedColumnsTable;
-import core.gui.model.PlayerOverviewTableModel;
-import core.gui.model.UserColumnController;
-import core.gui.model.UserColumnFactory;
-import core.model.HOVerwaltung;
-import core.model.match.MatchKurzInfo;
-import core.model.player.IMatchRoleID;
-import core.model.player.Player;
-import core.net.HattrickLink;
-import module.playeroverview.PlayerTable;
-import org.jetbrains.annotations.Nullable;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-
-/**
- * Table displaying the players' details in Lineup tab.
- * which is the same table class used in the Squad tab
- */
-public final class LineupPlayersTable extends FixedColumnsTable implements core.gui.Refreshable, PlayerTable {
-
- private final PlayerOverviewTableModel tableModel;
-
- LineupPlayersTable() {
- super(UserColumnController.instance().getLineupModel());
- tableModel = (PlayerOverviewTableModel) this.getModel();
- tableModel.setValues(HOVerwaltung.instance().getModel().getCurrentPlayers());
- setDefaultRenderer(Object.class, new HODefaultTableCellRenderer());
- setDefaultRenderer(Boolean.class, new BooleanTableCellRenderer());
- RefreshManager.instance().registerRefreshable(this);
- initListeners();
- }
-
- @Override
- public void setPlayer(int iPlayerID) {
- tableModel.selectPlayer(iPlayerID);
- }
-
- @Override
- public @Nullable Player getPlayer(int row) {
- return tableModel.getPlayerAtRow(row);
- }
-
- @Override
- public void reInit() {
- var selectedPlayer = tableModel.getSelectedPlayer();
- resetPlayers();
- repaint();
- if (selectedPlayer != null) {
- tableModel.selectPlayer(selectedPlayer.getPlayerId());
- }
- }
-
- @Override
- public void refresh() {
- reInit();
- }
-
- public PlayerOverviewTableModel getTableModel() {
- return this.tableModel;
- }
-
- public void saveColumnOrder() {
- tableModel.storeUserSettings();
- }
-
- private void resetPlayers() {
- tableModel.setValues(HOVerwaltung.instance().getModel().getCurrentPlayers());
- }
-
- private void initListeners() {
- this.getTableModel().addTableModelListener(e -> {
- var r = e.getFirstRow();
- var c = e.getColumn();
- var player = tableModel.getPlayerAtRow(r);
- if (player != null) {
- var userColumn = this.getUserColumn(e);
- if (userColumn != null && userColumn.getId() == UserColumnFactory.AUTO_LINEUP) {
- var autoLineup = tableModel.getValueAt(convertRowIndexToModel(r),convertColumnIndexToModel(c));
- if (autoLineup != null){
- player.setCanBeSelectedByAssistant((boolean) autoLineup);
- if( player.getCanBeSelectedByAssistant()){
- // this player has been made selectable from the Lineup tab, for consistency we set its position to undefined
- player.setUserPosFlag(IMatchRoleID.UNKNOWN);
- }
- else {
- player.setUserPosFlag(IMatchRoleID.UNSELECTABLE);
- }
- HOMainFrame.instance().getSpielerUebersichtPanel().update();
- }
- }
- }
- });
-
- addMouseListener(new MouseAdapter() {
- @Override
- public void mouseReleased(MouseEvent e) {
- int rowindex = getSelectedRow();
- if (rowindex >= 0) {
- // Last match column
- Player selectedPlayer = tableModel.getPlayerAtRow(rowindex);
- if (selectedPlayer != null) {
- var viewColumn = columnAtPoint(e.getPoint());
- if (viewColumn > -1) {
- var column = getColumnModel().getColumn(viewColumn);
- if ((Integer)column.getIdentifier() == UserColumnFactory.LAST_MATCH_RATING) {
- if (e.isShiftDown()) {
- int matchId = selectedPlayer.getLastMatchId();
- // TODO get the match type of last match from player. For the moment we hope, that going with no type will work
- MatchKurzInfo info = DBManager.instance().getMatchesKurzInfoByMatchID(matchId, null);
- HattrickLink.showMatch(matchId + "", info.getMatchType().isOfficial());
- } else if (e.getClickCount() == 2) {
- HOMainFrame.instance().showMatch(selectedPlayer.getLastMatchId());
- }
- }
- }
- }
- }
- }
- });
- }
-}
\ No newline at end of file
diff --git a/src/main/java/module/lineup/lineup/PlayerPositionPanel.java b/src/main/java/module/lineup/lineup/PlayerPositionPanel.java
index e8ad5b842..d4634ee54 100644
--- a/src/main/java/module/lineup/lineup/PlayerPositionPanel.java
+++ b/src/main/java/module/lineup/lineup/PlayerPositionPanel.java
@@ -1,9 +1,9 @@
package module.lineup.lineup;
import core.datatype.CBItem;
-import core.gui.HOMainFrame;
import core.gui.Updatable;
import core.gui.comp.panel.ImagePanel;
+import core.gui.comp.table.PlayersTable;
import core.gui.model.PlayerCBItem;
import core.gui.model.PlayerCBItemRenderer;
import core.gui.theme.HOColorName;
@@ -100,11 +100,15 @@ private byte getTactic() {
return null;
}
-
+ /**
+ * Handle the focus gained event.
+ * If a player is selected the PlayersTable's selection is updated
+ * @param event the event to be processed
+ */
@Override
public void focusGained(FocusEvent event) {
if (getSelectedPlayer() != null) {
- HOMainFrame.instance().selectPlayer(getSelectedPlayer());
+ PlayersTable.Companion.setSelectedPlayer(getSelectedPlayer());
}
}
@@ -158,7 +162,6 @@ private void initComponents() {
add(jlp, BorderLayout.CENTER);
}
-
@Override
public void itemStateChanged(java.awt.event.ItemEvent itemEvent) {
if (itemEvent.getStateChange() == ItemEvent.SELECTED) {
@@ -203,7 +206,7 @@ else if (m_iPositionID == IMatchRoleID.captain) {
}
if (player != null) {
- HOMainFrame.instance().selectPlayer(player);
+ PlayersTable.Companion.setSelectedPlayer(player);
}
//Update all other positions
@@ -355,7 +358,6 @@ protected void setPlayersList(List oCandidates, @Nullable Player oSelect
cbModel.removeAllElements();
//Ensure the number of m_clCBItems objects match what is needed
-
assert m_clCBItems != null;
if (m_clCBItems.length != oCandidates.size()) {
PlayerCBItem[] tempCB = new PlayerCBItem[oCandidates.size()];
diff --git a/src/main/java/module/playeroverview/PlayerDetailsPanel.java b/src/main/java/module/playeroverview/PlayerDetailsPanel.java
index 999b7fee0..1776511e1 100644
--- a/src/main/java/module/playeroverview/PlayerDetailsPanel.java
+++ b/src/main/java/module/playeroverview/PlayerDetailsPanel.java
@@ -10,6 +10,7 @@
import core.gui.comp.entry.DoubleLabelEntries;
import core.gui.comp.panel.ImagePanel;
import core.gui.comp.renderer.SmilieListCellRenderer;
+import core.gui.comp.table.PlayersTable;
import core.gui.theme.*;
import core.model.FactorObject;
import core.model.FormulaFactors;
@@ -46,7 +47,6 @@
import static core.util.Helper.DEFAULTDEZIMALFORMAT;
import static core.util.Helper.INTEGERFORMAT;
-
/**
* Shows player details for the selected player
*/
@@ -59,7 +59,6 @@ public final class PlayerDetailsPanel extends ImagePanel implements Refreshable,
private final Color URL = ThemeManager.getColor(HOColorName.URL_PANEL_BG);
private final Color FGcolor = ColorLabelEntry.FG_STANDARD;
private final Color BORDER_COLOR = ThemeManager.getColor(HOColorName.PLAYER_DETAILS_BAR_BORDER_COLOR);
- private final PlayerOverviewTable m_playerOverviewTable;
private final JLabel jlName = new JLabel("");
private final JLabel m_jlPlayerDescription = new JLabel("");
private final JPanel jpPlayerGeneral = new JPanel();
@@ -103,8 +102,7 @@ public final class PlayerDetailsPanel extends ImagePanel implements Refreshable,
/**
* Constructor
*/
- PlayerDetailsPanel(PlayerOverviewTable playerOverviewTable) {
- m_playerOverviewTable = playerOverviewTable;
+ PlayerDetailsPanel() {
initComponents();
RefreshManager.instance().registerRefreshable(this);
}
@@ -115,14 +113,9 @@ public final class PlayerDetailsPanel extends ImagePanel implements Refreshable,
public void setPlayer(Player player) {
if (player == null) {
if (HOMainFrame.isHOMainFrame_initialized()) {
- player = HOMainFrame.instance().getSelectedPlayer();
+ player = PlayersTable.Companion.getSelectedPlayer();
}
}
- if ( player == null) {
- // at initialisation select first player to ensure clean display =====
- player = m_playerOverviewTable.getPlayerTableModel().getPlayerAtRow(0);
- }
-
m_clPlayer = player;
if (m_clPlayer != null) {
findComparisonPlayer();
@@ -155,7 +148,6 @@ else if ( actionevent.getSource().equals(jlPlayerAvatar)){
}
}
-
@Override
public void itemStateChanged(java.awt.event.ItemEvent itemEvent) {
if (itemEvent.getStateChange() == java.awt.event.ItemEvent.SELECTED) {
@@ -336,7 +328,6 @@ private void setLabels() {
jlPlayerAvatar.setEnabled(true);
formatBar(jpbForm, m_clPlayer.getForm(), true);
- //m_clPlayer.getValue4Skill(6)
formatBar(jpbStamina, m_clPlayer.getStamina(), true);
formatBar(jpbGK, (float)Helper.round(m_clPlayer.getSkill(PlayerSkill.KEEPER), 2));
formatBar(jpbDE, (float)Helper.round(m_clPlayer.getSkill(PlayerSkill.DEFENDING), 2));
diff --git a/src/main/java/module/playeroverview/PlayerOverviewPanel.java b/src/main/java/module/playeroverview/PlayerOverviewPanel.java
index 1da05e3a0..a84e13dc8 100644
--- a/src/main/java/module/playeroverview/PlayerOverviewPanel.java
+++ b/src/main/java/module/playeroverview/PlayerOverviewPanel.java
@@ -1,11 +1,17 @@
package module.playeroverview;
import core.gui.HOMainFrame;
+import core.gui.RefreshManager;
+import core.gui.Refreshable;
import core.gui.comp.panel.ImagePanel;
+import core.gui.comp.table.PlayersTable;
+import core.gui.model.UserColumnController;
import core.model.HOVerwaltung;
import core.model.TranslationFacility;
import core.model.UserParameter;
-import core.model.player.Player;
+import module.playeroverview.PlayerOverviewTableModel;
+import module.playeroverview.SpielerTrainingsSimulatorPanel;
+import module.playeroverview.TeamSummaryPanel;
import javax.swing.*;
import java.awt.*;
@@ -14,33 +20,36 @@
/**
* Overview of all the players on the team (main class of the package)
*/
-public class PlayerOverviewPanel extends ImagePanel {
+public class PlayerOverviewPanel extends ImagePanel implements Refreshable {
private JSplitPane horizontalRightSplitPane;
private JSplitPane verticalSplitPane;
private PlayerDetailsPanel playerDetailsPanel;
private SpielerTrainingsSimulatorPanel spielerTrainingsSimulatorPanel;
- private PlayerOverviewTable playerOverviewTable;
+ private PlayersTable playerOverviewTable;
private TeamSummaryPanel teamSummaryPanel;
/**
- * Creates a new SpielerUebersichtsPanel object. (Players view panel)
+ * Creates a new player overview. (Players view panel)
*/
public PlayerOverviewPanel() {
initComponents();
- addTableSelectionListeners();
+ RefreshManager.instance().registerRefreshable(this);
+ this.playerOverviewTable.addListSelectionListener(e -> selectPlayer());
+ if (this.playerOverviewTable.getRowCount() > 0) {
+ this.playerOverviewTable.setRowSelectionInterval(0, 0);
+ }
}
/**
- * Selects the player with the given id.
- *
- * @param player
- * the id of the player to select.
+ * Selects the player
*/
- public void setPlayer(Player player) {
- playerOverviewTable.selectPlayer(player.getPlayerId());
- playerDetailsPanel.setPlayer(player);
- spielerTrainingsSimulatorPanel.setSpieler(player);
+ public void selectPlayer() {
+ var players = this.playerOverviewTable.getSelectedPlayers();
+ for (var player : players ) {
+ playerDetailsPanel.setPlayer(player);
+ spielerTrainingsSimulatorPanel.setSpieler(player);
+ }
}
/**
@@ -58,16 +67,16 @@ public final int[] getDividerLocations() {
* Refresh, if a player is changed in the lineup
*/
public final void refresh() {
- playerDetailsPanel.refresh();
playerOverviewTable.refresh();
+ playerDetailsPanel.refresh();
}
/**
* Updates all the columns affected by a comparison.
*/
public final void refreshHRFComparison() {
- playerOverviewTable.refreshHRFComparison();
- playerDetailsPanel.setPlayer(playerOverviewTable.getSelectedPlayer());
+ var playerTableModel = (PlayerOverviewTableModel)playerOverviewTable.getModel();
+ playerTableModel.reInitData();
}
/**
@@ -104,7 +113,7 @@ private void initComponents() {
*/
private Component initSpielerDetail() {
JTabbedPane tabbedPane = new JTabbedPane();
- playerDetailsPanel = new PlayerDetailsPanel(playerOverviewTable);
+ playerDetailsPanel = new PlayerDetailsPanel();
JScrollPane scrollPane = new JScrollPane(playerDetailsPanel);
scrollPane.getVerticalScrollBar().setBlockIncrement(100);
@@ -132,7 +141,7 @@ private Component initSpielerHistory() {
scrollPane.getVerticalScrollBar().setBlockIncrement(100);
scrollPane.getVerticalScrollBar().setUnitIncrement(20);
panel.add(spielerTrainingsVergleichsPanel, BorderLayout.CENTER);
- panel.add(new JScrollPane(new RemoveGruppenPanel(playerOverviewTable)), BorderLayout.NORTH);
+ panel.add(new JScrollPane(new RemoveGruppenPanel()), BorderLayout.NORTH);
if (teamSummaryPanel != null) {
spielerTrainingsVergleichsPanel.addChangeListener(teamSummaryPanel);
@@ -149,7 +158,8 @@ private Component initPlayersTable() {
overviewPanel.setLayout(new BorderLayout());
// table with the player's details
- playerOverviewTable = new PlayerOverviewTable();
+ var playerOverviewTableModel = UserColumnController.instance().getPlayerOverviewModel();
+ playerOverviewTable = new PlayersTable(playerOverviewTableModel, 1);
overviewPanel.add(playerOverviewTable.getContainerComponent(), BorderLayout.CENTER);
TeamSummaryModel teamSummaryModel = new TeamSummaryModel();
teamSummaryModel.setPlayers(HOVerwaltung.instance().getModel().getCurrentPlayers());
@@ -160,36 +170,18 @@ private Component initPlayersTable() {
scrollPane.setPreferredSize(new Dimension((int) teamSummaryPanel.getPreferredSize().getWidth(),
(int) teamSummaryPanel.getPreferredSize().getHeight() + 22));
overviewPanel.add(scrollPane, BorderLayout.SOUTH);
+
+ playerOverviewTableModel.initData();
return overviewPanel;
}
-
- private boolean areSelecting = false;
- /**
- * Adds ListSelectionListener which keep the row selection of the table with
- * the players name and the table with the players details in sync.
- */
- private void addTableSelectionListeners() {
- playerOverviewTable.getSelectionModel().addListSelectionListener(
- e -> {
- if (!areSelecting) {
- areSelecting = true;
- var player = playerOverviewTable.getSelectedPlayer();
- if (player == null) {
- player = HOMainFrame.instance().getSelectedPlayer();
- if ( player != null) {
- playerOverviewTable.selectPlayer(player.getPlayerId());
- }
- } else {
- HOMainFrame.instance().selectPlayer(player);
- }
- areSelecting = false;
- }
- }
- );
+ public void storeUserSettings() {
+ var playerOverviewTableModel = (PlayerOverviewTableModel) playerOverviewTable.getModel();
+ playerOverviewTableModel.storeUserSettings();
}
- public void storeUserSettings() {
- playerOverviewTable.getPlayerTableModel().storeUserSettings();
- }
-}
\ No newline at end of file
+ @Override
+ public void reInit() {
+ refresh();
+ }
+}
diff --git a/src/main/java/module/playeroverview/PlayerOverviewTable.kt b/src/main/java/module/playeroverview/PlayerOverviewTable.kt
deleted file mode 100644
index 18a43da7e..000000000
--- a/src/main/java/module/playeroverview/PlayerOverviewTable.kt
+++ /dev/null
@@ -1,119 +0,0 @@
-package module.playeroverview
-
-import core.db.DBManager
-import core.gui.HOMainFrame
-import core.gui.RefreshManager
-import core.gui.Refreshable
-import core.gui.comp.table.FixedColumnsTable
-import core.gui.model.PlayerOverviewTableModel
-import core.gui.model.UserColumnController
-import core.model.HOVerwaltung
-import core.model.TranslationFacility
-import core.model.player.Player
-import core.net.HattrickLink
-import java.awt.event.MouseAdapter
-import java.awt.event.MouseEvent
-import java.io.Serial
-
-/**
- * The Squad table, listing all the players on the team.
- *
- *
- * The actual model for that table is defined in [PlayerOverviewTableModel], which defines
- * all the columns to be displayed; the columns are initiated by a factory, [UserColumnFactory],
- * which in particular sets their preferred width.
- *
- *
- * Sorting in the table is handled by [TableSorter] which decorates the model, and is set
- * as the [javax.swing.table.TableModel] for this table. Triggering sorting by a click sorts
- * the entries in the table model itself. The new sorting order is then used by re-displaying the
- * table. This approach differs from the “normal” Swing approach of using
- * [JTable.setRowSorter].
- *
- * @author Thorsten Dietz
- */
-class PlayerOverviewTable : FixedColumnsTable(UserColumnController.instance().playerOverviewModel), Refreshable {
- val playerTableModel: PlayerOverviewTableModel = this.model as PlayerOverviewTableModel
-
- init {
- playerTableModel.setValues(HOVerwaltung.instance().model.currentPlayers)
- isOpaque = false
- RefreshManager.instance().registerRefreshable(this)
-
- // Add a mouse listener that, when clicking on the “Last match” column
- // - opens the Hattrick page for the player if you shift-click,
- // - or opens the match in HO if you double-click.
- addMouseListener(object : MouseAdapter() {
- override fun mouseReleased(e: MouseEvent) {
- val player: Player? = selectedPlayer
- if (player != null) {
- // Last match column
- val columnAtPoint = columnAtPoint(e.point)
- // Get name of the actual column at columnAtPoint, i.e. post-ordering of the columns
- // based on preferences.
- val columnName = playerTableModel.getColumnName(columnAtPoint)
- val lastMatchRating = TranslationFacility.tr("LastMatchRating")
- if (columnName != null && columnName.equals(lastMatchRating, ignoreCase = true)) {
- if (e.isShiftDown) {
- val matchId = player.lastMatchId
- val matchType = player.lastMatchType
- val info = DBManager.instance().getMatchesKurzInfoByMatchID(matchId, matchType)
- HattrickLink.showMatch(matchId.toString(), info.matchType.isOfficial)
- } else if (e.clickCount == 2) {
- HOMainFrame.instance().showMatch(player.lastMatchId)
- }
- }
- }
- }
- })
- }
-
- val selectedPlayer: Player?
- get() {
- val rowIndex = selectedRow
- if (rowIndex >= 0) {
- return playerTableModel.players!![convertRowIndexToModel(rowIndex)]
- }
- return null
- }
-
- fun selectPlayer(playerId: Int) {
- playerTableModel.selectPlayer(playerId)
- }
-
- override fun reInit() {
- val player = selectedPlayer
- resetPlayers()
- repaint()
- if (player != null) {
- selectPlayer(player.playerId)
- }
- }
-
- fun reInitModel() {
- playerTableModel.reInitData()
- }
-
- fun reInitModelHRFComparison() {
- playerTableModel.reInitDataHRFComparison()
- }
-
- override fun refresh() {
- reInitModel()
- repaint()
- }
-
- fun refreshHRFComparison() {
- reInitModelHRFComparison()
- repaint()
- }
-
- private fun resetPlayers() {
- playerTableModel.setValues(HOVerwaltung.instance().model.currentPlayers)
- }
-
- companion object {
- @Serial
- private val serialVersionUID = -6074136156090331418L
- }
-}
diff --git a/src/main/java/core/gui/model/PlayerOverviewTableModel.kt b/src/main/java/module/playeroverview/PlayerOverviewTableModel.kt
similarity index 56%
rename from src/main/java/core/gui/model/PlayerOverviewTableModel.kt
rename to src/main/java/module/playeroverview/PlayerOverviewTableModel.kt
index 1d8e06996..ee115f7b0 100644
--- a/src/main/java/core/gui/model/PlayerOverviewTableModel.kt
+++ b/src/main/java/module/playeroverview/PlayerOverviewTableModel.kt
@@ -1,13 +1,16 @@
-package core.gui.model
+package module.playeroverview
import core.db.DBManager
-import core.gui.comp.table.BooleanColumn
-import core.gui.comp.table.HOTableModel
+import core.gui.comp.table.PlayerCheckBoxColumn
+import core.gui.comp.table.HOPlayersTableModel
import core.gui.comp.table.UserColumn
-import core.gui.model.UserColumnController.ColumnModelId
+import core.gui.model.PlayerColumn
+import core.gui.model.PlayerPositionColumn
+import core.gui.model.PlayerSkillColumn
+import core.gui.model.UserColumnController
+import core.gui.model.UserColumnFactory
import core.model.player.Player
import core.util.HODateTime
-import module.playeroverview.SpielerTrainingsVergleichsPanel
/**
* Model used to display players in the Squad table.
@@ -15,20 +18,17 @@ import module.playeroverview.SpielerTrainingsVergleichsPanel
* @author Thorsten Dietz
* @since 1.36
*/
-class PlayerOverviewTableModel(id: ColumnModelId, name: String) : HOTableModel(id, name) {
- /** all players */
- var players: List? = null
- private set
+class PlayerOverviewTableModel(id: UserColumnController.ColumnModelId, name: String) : HOPlayersTableModel(id, name) {
/**
* constructor
*
*/
- internal constructor(id: ColumnModelId) : this(id, "Spieleruebersicht")
+ internal constructor(id: UserColumnController.ColumnModelId) : this(id, "Spieleruebersicht")
init {
val basic: Array? = UserColumnFactory.createPlayerBasicArray()
- val columns : Array = arrayOfNulls(70)
+ val columns: Array = arrayOfNulls(70)
columns[0] = basic?.get(0)
columns[48] = basic?.get(1)
@@ -75,7 +75,7 @@ class PlayerOverviewTableModel(id: ColumnModelId, name: String) : HOTableModel(i
columns[60] = additionalArray?.get(22)
columns[61] = additionalArray?.get(23) // schum-rank
columns[62] = additionalArray?.get(24) // schum-rank benchmark
- columns[63] = BooleanColumn(UserColumnFactory.AUTO_LINEUP, " ", "AutoAufstellung", 28)
+ columns[63] = additionalArray?.get(31)
columns[64] = additionalArray?.get(25)
columns[65] = additionalArray?.get(26)
columns[66] = additionalArray?.get(27)
@@ -87,82 +87,19 @@ class PlayerOverviewTableModel(id: ColumnModelId, name: String) : HOTableModel(i
assert(this.columns.size == columns.size)
}
- // TODO: table column model should control isEditable
- // Refactoring player overview table model should replace the class BooleanColumn
- override fun isCellEditable(row: Int, column: Int): Boolean {
- return getValueAt(row, column) is Boolean
- }
-
- fun getRowIndexOfPlayer(playerId: Int): Int {
- val modelIndex = getPlayerIndex(playerId)
- if (modelIndex > -1 && modelIndex < this.rowCount) {
- return table!!.convertRowIndexToView(modelIndex)
- }
- return -1
- }
-
val selectedPlayer: Player?
get() {
val rowIndex = table!!.selectedRow
if (rowIndex >= 0 && rowIndex < this.rowCount) {
- return players!![table!!.convertRowIndexToModel(rowIndex)]
+ return players[table!!.convertRowIndexToModel(rowIndex)]
}
return null
}
- fun selectPlayer(playerId: Int) {
- val row = getRowIndexOfPlayer(playerId)
- if (row > -1 && row < this.rowCount) {
- table!!.setRowSelectionInterval(row, row)
- }
- }
-
- fun getPlayerAtRow(tableRow: Int): Player? {
- if (players != null && tableRow > -1 && tableRow < this.rowCount) {
- val modelIndex = table!!.convertRowIndexToModel(tableRow)
- if (modelIndex > -1 && modelIndex < this.rowCount) {
- return players!![modelIndex]
- }
- }
- return null
- }
-
- fun getPlayer(playerId: Int): Player? {
- // Can be negative for temp player
- if (playerId != 0) {
- for (m_vPlayer in players!!) {
- if (m_vPlayer.playerId == playerId) {
- return m_vPlayer
- }
- }
- }
-
- return null
- }
-
- fun getPlayerIndex(playerId: Int): Int {
- var i = 0
- for (m_vPlayer in players!!) {
- if (m_vPlayer.playerId == playerId) {
- return i
- }
- i++
- }
- return -1
- }
-
- /**
- * Sets the new list of players.
- */
- fun setValues(player: List?) {
- players = player
- initData()
- }
-
/**
- * Resets the data for an HRF comparison.
+ * Resets the data.
*/
- fun reInitDataHRFComparison() {
+ fun reInitData() {
initData()
}
@@ -171,7 +108,7 @@ class PlayerOverviewTableModel(id: ColumnModelId, name: String) : HOTableModel(i
*/
private fun getPreviousPlayerDevelopmentStage(currentDevelopmentStage: Player): Player? {
val id = currentDevelopmentStage.playerId
- if ( id >= 0 ) {
+ if (id >= 0) {
// not a temporary player
val selectedPlayerDevelopmentStage = SpielerTrainingsVergleichsPanel.getSelectedPlayerDevelopmentStage()
var i = 0
@@ -210,40 +147,20 @@ class PlayerOverviewTableModel(id: ColumnModelId, name: String) : HOTableModel(i
*/
override fun initData() {
val tmpDisplayedColumns = getDisplayedColumns()
- m_clData = Array(players!!.size) { arrayOfNulls(tmpDisplayedColumns.size) }
+ m_clData = Array(players.size) { arrayOfNulls(tmpDisplayedColumns.size) }
- for (i in players!!.indices) {
- val currentPlayer = players!![i]
+ for (i in players.indices) {
+ val currentPlayer = players[i]
val comparisonPlayer = getPreviousPlayerDevelopmentStage(currentPlayer)
for (j in tmpDisplayedColumns.indices) {
- if (tmpDisplayedColumns[j] is PlayerColumn) {
- m_clData!!.get(i)[j] = (tmpDisplayedColumns[j] as PlayerColumn).getTableEntry(currentPlayer, comparisonPlayer)
- } else if (tmpDisplayedColumns[j] is BooleanColumn) {
- m_clData!!.get(i)[j] = (tmpDisplayedColumns[j] as BooleanColumn).getValue(currentPlayer)
+ if (tmpDisplayedColumns[j] is PlayerCheckBoxColumn) {
+ m_clData!!.get(i)[j] = (tmpDisplayedColumns[j] as PlayerCheckBoxColumn).getTableEntry(currentPlayer)
+ } else if (tmpDisplayedColumns[j] is PlayerColumn) {
+ m_clData!!.get(i)[j] =
+ (tmpDisplayedColumns[j] as PlayerColumn).getTableEntry(currentPlayer, comparisonPlayer)
}
}
}
fireTableDataChanged()
}
-
- /**
- * Initializes the lineup only
- */
- fun reInitData() {
- val tmpDisplayedColumns = getDisplayedColumns()
- for (i in players!!.indices) {
- val currentPlayer = players!![i]
- for (j in tmpDisplayedColumns.indices) {
- if (tmpDisplayedColumns[j].id == UserColumnFactory.NAME ||
- tmpDisplayedColumns[j].id == UserColumnFactory.LINEUP ||
- tmpDisplayedColumns[j].id == UserColumnFactory.BEST_POSITION ||
- tmpDisplayedColumns[j].id == UserColumnFactory.SCHUM_RANK_BENCHMARK ||
- tmpDisplayedColumns[j].id == UserColumnFactory.GROUP) {
- m_clData!![i][j] = (tmpDisplayedColumns[j] as PlayerColumn).getTableEntry(currentPlayer, null)
- } else if (tmpDisplayedColumns[j].id == UserColumnFactory.AUTO_LINEUP) {
- m_clData!![i][j] = (tmpDisplayedColumns[j] as BooleanColumn).getValue(currentPlayer)
- }
- }
- }
- }
}
diff --git a/src/main/java/module/playeroverview/PlayerTable.java b/src/main/java/module/playeroverview/PlayerTable.java
deleted file mode 100644
index a870be2aa..000000000
--- a/src/main/java/module/playeroverview/PlayerTable.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package module.playeroverview;
-
-import core.model.player.Player;
-
-public interface PlayerTable {
-
- Player getPlayer(int row);
- void setPlayer(int spielerid);
-
-}
diff --git a/src/main/java/module/playeroverview/RemoveGruppenPanel.java b/src/main/java/module/playeroverview/RemoveGruppenPanel.java
index 99f817c69..f521e32e9 100644
--- a/src/main/java/module/playeroverview/RemoveGruppenPanel.java
+++ b/src/main/java/module/playeroverview/RemoveGruppenPanel.java
@@ -17,6 +17,7 @@
import java.awt.event.ActionListener;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
/**
@@ -24,8 +25,6 @@
*/
public class RemoveGruppenPanel extends ImagePanel implements ActionListener {
- private static final long serialVersionUID = 3606384591123088694L;
-
//~ Instance fields ----------------------------------------------------------------------------
private final JButton doButton = new JButton(ImageUtilities.getSvgIcon(HOIconName.TURN));
private final JButton m_jbClean = new JButton(ImageUtilities.getSvgIcon(HOIconName.GROUP_TEAM_CLEAN, Map.of("fillColor", HOColorName.TABLEENTRY_DECLINE_FG)));
@@ -80,7 +79,7 @@ public class RemoveGruppenPanel extends ImagePanel implements ActionListener {
* Creates a new RemoveGruppenPanel object.
*
*/
- public RemoveGruppenPanel(PlayerOverviewTable spielerTable) {
+ public RemoveGruppenPanel() {
initComponents();
}
@@ -161,14 +160,14 @@ private void groupsClear() {
boolean update = false;
for (Player player : allePlayer) {
- if (!player.getTeamGroup().equals("")) {
+ if (!player.getTeamGroup().isEmpty()) {
player.setTeamInfoSmilie("");
update = true;
}
}
if (update) {
- HOMainFrame.instance().getLineupPanel().update();
+ Objects.requireNonNull(HOMainFrame.instance().getLineupPanel()).update();
}
}
@@ -187,7 +186,7 @@ private void gruppenMarkierung() {
}
}
- core.gui.HOMainFrame.instance().getLineupPanel().update();
+ Objects.requireNonNull(HOMainFrame.instance().getLineupPanel()).update();
}
}
diff --git a/src/main/java/module/teamanalyzer/vo/RosterRoleData.java b/src/main/java/module/teamanalyzer/vo/RosterRoleData.java
index b961c0746..e1564c72d 100644
--- a/src/main/java/module/teamanalyzer/vo/RosterRoleData.java
+++ b/src/main/java/module/teamanalyzer/vo/RosterRoleData.java
@@ -1,15 +1,12 @@
package module.teamanalyzer.vo;
-import core.model.player.MatchRoleID;
-import core.util.HelperWrapper;
-
public class RosterRoleData {
//~ Instance fields ----------------------------------------------------------------------------
private double avg;
private double max;
private double min;
private int app;
- private int pos;
+ private final int pos;
//~ Constructors -------------------------------------------------------------------------------
/**
@@ -42,12 +39,6 @@ public int getPos() {
return pos;
}
- public String getPositionDesc() {
- int posCode = HelperWrapper.instance().getPosition(pos);
-
- return MatchRoleID.getNameForPosition((byte) posCode);
- }
-
public void addMatch(double rating) {
if (rating > max) {
max = rating;
diff --git a/src/main/java/module/youth/YouthPlayerView.java b/src/main/java/module/youth/YouthPlayerView.java
index a06bcf343..5b831fc19 100644
--- a/src/main/java/module/youth/YouthPlayerView.java
+++ b/src/main/java/module/youth/YouthPlayerView.java
@@ -155,7 +155,7 @@ private void refreshPlayerOverview() {
isRefreshingPlayerOverview = true;
var selection = this.playerOverviewTable.getSelectedModelIndex();
playerOverviewTableModel.initData();
- this.playerOverviewTable.selectModelIndex(selection);
+ SwingUtilities.invokeLater(() -> this.playerOverviewTable.selectModelIndex(selection));
}
finally {
isRefreshingPlayerOverview=false;
@@ -265,7 +265,6 @@ private String getScoutComment(YouthPlayer player) {
}
private String formatLine(String text) {
- /*if ( !text.endsWith(" ")) */
return text + "
";
}
@@ -312,7 +311,7 @@ private void initSelection(int row) {
@Override
public void valueChanged(ListSelectionEvent e) {
- if ( !e.getValueIsAdjusting() && !isSelectionInitialized) {
+ if (!isSelectionInitialized) {
refreshPlayerDetails();
}
}
diff --git a/src/main/resources/release_notes.md b/src/main/resources/release_notes.md
index 9cd0beeed..69f8a609c 100644
--- a/src/main/resources/release_notes.md
+++ b/src/main/resources/release_notes.md
@@ -16,6 +16,8 @@
### Player overview
* Fix error storing owner notes with length exceeding the column length (#2358)
+* Fix error selecting players with the arrow keys (#2379)
+* Synchronise player selection in training and player overview modules (#2379)
### Team Analyzer
@@ -48,10 +50,13 @@
Reports by Contributors - October 19, 2025 - December 30, 2025
* Ioannidouefty 459
-* wsbrenk 31
+* wsbrenk 107
+* Frankieorabona 73
+* \_KOHb\_ 54
+* Sebastian Reddig 32
* Lidegand 24
* Kristaps 4
* Mara 3
* Joeri Roels 1
-Total 522
+Total 757
diff --git a/src/test/java/core/gui/comp/entry/CheckBoxTableEntryTest.kt b/src/test/java/core/gui/comp/entry/CheckBoxTableEntryTest.kt
new file mode 100644
index 000000000..655faec71
--- /dev/null
+++ b/src/test/java/core/gui/comp/entry/CheckBoxTableEntryTest.kt
@@ -0,0 +1,20 @@
+package core.gui.comp.entry
+
+import org.junit.jupiter.api.Assertions
+import org.junit.jupiter.api.Test
+import java.awt.Color
+
+internal class CheckBoxTableEntryTest {
+ @Test
+ fun testCheckBoxEntryCompareTo() {
+
+ val checkBoxTableEntry = CheckBoxTableEntry(true, true, Color.RED, Color.BLUE)
+ val checkBoxTableEntryTrue = CheckBoxTableEntry(true, true, Color.RED, Color.BLUE)
+ val checkBoxTableEntryFalse = CheckBoxTableEntry(true, false, Color.BLUE, Color.RED)
+
+ Assertions.assertEquals(0, checkBoxTableEntryTrue.compareTo(checkBoxTableEntry))
+ Assertions.assertEquals(0, checkBoxTableEntryFalse.compareTo(checkBoxTableEntryFalse))
+ Assertions.assertEquals(1, checkBoxTableEntryTrue.compareTo(checkBoxTableEntryFalse))
+ Assertions.assertEquals(-1, checkBoxTableEntryFalse.compareTo(checkBoxTableEntryTrue))
+ }
+}
diff --git a/src/test/java/core/model/TranslatorTest.java b/src/test/java/core/model/TranslatorTest.java
index 3e93b5776..b4e155d8c 100644
--- a/src/test/java/core/model/TranslatorTest.java
+++ b/src/test/java/core/model/TranslatorTest.java
@@ -1,7 +1,6 @@
package core.model;
import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.StringUtils;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
@@ -193,4 +192,4 @@ void translateWithVariables(String language, String key, Object[] values, String
// when-then
assertThat(translator.translate(key, values)).isEqualTo(expectedTranslation);
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/module/playeroverview/RemoveGruppenPanelTest.java b/src/test/java/module/playeroverview/RemoveGruppenPanelTest.java
index 0a5c74e28..628419b03 100644
--- a/src/test/java/module/playeroverview/RemoveGruppenPanelTest.java
+++ b/src/test/java/module/playeroverview/RemoveGruppenPanelTest.java
@@ -28,7 +28,7 @@ public static void main(String[] args) {
JPanel content = new JPanel();
content.setLayout(new BorderLayout());
- RemoveGruppenPanel panel = new RemoveGruppenPanel(null);
+ RemoveGruppenPanel panel = new RemoveGruppenPanel();
content.add(panel, BorderLayout.CENTER);
frame.setContentPane(content);
diff --git a/src/test/java/tool/arenasizer/ArenaSizerTest.java b/src/test/java/tool/arenasizer/ArenaSizerTest.java
index 410508e82..28f56572a 100644
--- a/src/test/java/tool/arenasizer/ArenaSizerTest.java
+++ b/src/test/java/tool/arenasizer/ArenaSizerTest.java
@@ -1,7 +1,6 @@
package tool.arenasizer;
import core.util.AmountOfMoney;
-import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
@@ -107,4 +106,4 @@ private static Stadium createStadium(int terraces, int basicSeating, int underRo
stadium.setVipBox(vipBox);
return stadium;
}
-}
\ No newline at end of file
+}
diff --git a/src/test/java/tool/arenasizer/StadiumTest.java b/src/test/java/tool/arenasizer/StadiumTest.java
index 97f8ee54e..9fe30cb92 100644
--- a/src/test/java/tool/arenasizer/StadiumTest.java
+++ b/src/test/java/tool/arenasizer/StadiumTest.java
@@ -1,6 +1,5 @@
package tool.arenasizer;
-import core.util.AmountOfMoney;
import core.util.HODateTime;
import org.junit.jupiter.api.Test;