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;