Skip to content

Commit

Permalink
Children filter - setting tabs back to 4
Browse files Browse the repository at this point in the history
nutritiousemployee committed Oct 24, 2023
1 parent 2bb5a4d commit df54613
Showing 2 changed files with 817 additions and 817 deletions.
706 changes: 353 additions & 353 deletions MekHQ/src/mekhq/gui/PersonnelTab.java
Original file line number Diff line number Diff line change
@@ -51,377 +51,377 @@
* Tab for interacting with all personnel
*/
public final class PersonnelTab extends CampaignGuiTab {
public static final int PERSONNEL_VIEW_WIDTH = 500;

private JSplitPane splitPersonnel;
private JTable personnelTable;
private MMComboBox<PersonnelFilter> choicePerson;
private MMComboBox<PersonnelTabView> choicePersonView;
private JScrollPane scrollPersonnelView;
private JCheckBox chkGroupByUnit;

private PersonnelTableModel personModel;
private TableRowSorter<PersonnelTableModel> personnelSorter;

//region Constructors
public PersonnelTab(CampaignGUI gui, String name) {
super(gui, name);
MekHQ.registerHandler(this);
setUserPreferences();
}
//endregion Constructors

@Override
public MHQTabType tabType() {
return MHQTabType.PERSONNEL;
}

/*
* (non-Javadoc)
*
* @see mekhq.gui.CampaignGuiTab#initTab()
*/
@Override
public void initTab() {
final ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.CampaignGUI",
MekHQ.getMHQOptions().getLocale());
GridBagConstraints gridBagConstraints;

setLayout(new GridBagLayout());

gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(new JLabel(resourceMap.getString("lblPersonChoice.text")), gridBagConstraints);

choicePerson = new MMComboBox<>("choicePerson", createPersonGroupModel());
choicePerson.setSelectedItem(PersonnelFilter.ACTIVE);
choicePerson.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(final JList<?> list, final Object value,
final int index, final boolean isSelected,
final boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof PersonnelFilter) {
list.setToolTipText(((PersonnelFilter) value).getToolTipText());
public static final int PERSONNEL_VIEW_WIDTH = 500;

private JSplitPane splitPersonnel;
private JTable personnelTable;
private MMComboBox<PersonnelFilter> choicePerson;
private MMComboBox<PersonnelTabView> choicePersonView;
private JScrollPane scrollPersonnelView;
private JCheckBox chkGroupByUnit;

private PersonnelTableModel personModel;
private TableRowSorter<PersonnelTableModel> personnelSorter;

//region Constructors
public PersonnelTab(CampaignGUI gui, String name) {
super(gui, name);
MekHQ.registerHandler(this);
setUserPreferences();
}
//endregion Constructors

@Override
public MHQTabType tabType() {
return MHQTabType.PERSONNEL;
}

/*
* (non-Javadoc)
*
* @see mekhq.gui.CampaignGuiTab#initTab()
*/
@Override
public void initTab() {
final ResourceBundle resourceMap = ResourceBundle.getBundle("mekhq.resources.CampaignGUI",
MekHQ.getMHQOptions().getLocale());
GridBagConstraints gridBagConstraints;

setLayout(new GridBagLayout());

gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 0;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(new JLabel(resourceMap.getString("lblPersonChoice.text")), gridBagConstraints);

choicePerson = new MMComboBox<>("choicePerson", createPersonGroupModel());
choicePerson.setSelectedItem(PersonnelFilter.ACTIVE);
choicePerson.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(final JList<?> list, final Object value,
final int index, final boolean isSelected,
final boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof PersonnelFilter) {
list.setToolTipText(((PersonnelFilter) value).getToolTipText());
}
return this;
}
});
choicePerson.addActionListener(ev -> filterPersonnel());
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(choicePerson, gridBagConstraints);

gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(new JLabel(resourceMap.getString("lblPersonView.text")), gridBagConstraints);

choicePersonView = new MMComboBox<>("choicePersonView", PersonnelTabView.values());
choicePersonView.setSelectedItem(PersonnelTabView.GENERAL);
choicePersonView.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(final JList<?> list, final Object value,
final int index, final boolean isSelected,
final boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof PersonnelTabView) {
list.setToolTipText(((PersonnelTabView) value).getToolTipText());
}
return this;
}
});
choicePersonView.addActionListener(ev -> changePersonnelView());
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(choicePersonView, gridBagConstraints);

chkGroupByUnit = new JCheckBox(resourceMap.getString("chkGroupByUnit.text"));
chkGroupByUnit.setToolTipText(resourceMap.getString("chkGroupByUnit.toolTipText"));
chkGroupByUnit.addActionListener(e -> {
personModel.setGroupByUnit(chkGroupByUnit.isSelected());
personModel.refreshData();
});
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 4;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(chkGroupByUnit, gridBagConstraints);

personModel = new PersonnelTableModel(getCampaign());
personnelTable = new JTable(personModel);
personnelTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
personnelTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
XTableColumnModel personColumnModel = new XTableColumnModel();
personnelTable.setColumnModel(personColumnModel);
personnelTable.createDefaultColumnsFromModel();
personnelSorter = new TableRowSorter<>(personModel);
final ArrayList<RowSorter.SortKey> sortKeys = new ArrayList<>();
for (final PersonnelTableModelColumn column : PersonnelTableModel.PERSONNEL_COLUMNS) {
final Comparator<?> comparator = column.getComparator(getCampaign());
if (comparator != null) {
personnelSorter.setComparator(column.ordinal(), comparator);
}
final SortOrder sortOrder = column.getDefaultSortOrder();
if (sortOrder != null) {
sortKeys.add(new RowSorter.SortKey(column.ordinal(), sortOrder));
}
}
return this;
}
});
choicePerson.addActionListener(ev -> filterPersonnel());
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(choicePerson, gridBagConstraints);

gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(new JLabel(resourceMap.getString("lblPersonView.text")), gridBagConstraints);

choicePersonView = new MMComboBox<>("choicePersonView", PersonnelTabView.values());
choicePersonView.setSelectedItem(PersonnelTabView.GENERAL);
choicePersonView.setRenderer(new DefaultListCellRenderer() {
@Override
public Component getListCellRendererComponent(final JList<?> list, final Object value,
final int index, final boolean isSelected,
final boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
if (value instanceof PersonnelTabView) {
list.setToolTipText(((PersonnelTabView) value).getToolTipText());
personnelSorter.setSortKeys(sortKeys);
personnelTable.setRowSorter(personnelSorter);
personnelTable.setIntercellSpacing(new Dimension(0, 0));
personnelTable.setShowGrid(false);
changePersonnelView();
personnelTable.getSelectionModel().addListSelectionListener(ev -> refreshPersonnelView());

scrollPersonnelView = new JScrollPane();
scrollPersonnelView.setMinimumSize(new Dimension(PERSONNEL_VIEW_WIDTH, 600));
scrollPersonnelView.setPreferredSize(new Dimension(PERSONNEL_VIEW_WIDTH, 600));
scrollPersonnelView.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPersonnelView.setViewportView(null);

JScrollPane scrollPersonnelTable = new JScrollPane(personnelTable);
splitPersonnel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPersonnelTable,
scrollPersonnelView);
splitPersonnel.setOneTouchExpandable(true);
splitPersonnel.setResizeWeight(1.0);
splitPersonnel.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, ev -> refreshPersonnelView());
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 5;
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(splitPersonnel, gridBagConstraints);

PersonnelTableMouseAdapter.connect(getCampaignGui(), personnelTable, personModel, splitPersonnel);

filterPersonnel();
}

private DefaultComboBoxModel<PersonnelFilter> createPersonGroupModel() {
final DefaultComboBoxModel<PersonnelFilter> personGroupModel = new DefaultComboBoxModel<>();
for (PersonnelFilter filter : MekHQ.getMHQOptions().getPersonnelFilterStyle().getFilters(false)) {
personGroupModel.addElement(filter);
}
return this;
}
});
choicePersonView.addActionListener(ev -> changePersonnelView());
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 0.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(choicePersonView, gridBagConstraints);

chkGroupByUnit = new JCheckBox(resourceMap.getString("chkGroupByUnit.text"));
chkGroupByUnit.setToolTipText(resourceMap.getString("chkGroupByUnit.toolTipText"));
chkGroupByUnit.addActionListener(e -> {
personModel.setGroupByUnit(chkGroupByUnit.isSelected());
personModel.refreshData();
});
gridBagConstraints = new GridBagConstraints();
gridBagConstraints.gridx = 4;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = GridBagConstraints.NONE;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 0.0;
gridBagConstraints.anchor = GridBagConstraints.WEST;
gridBagConstraints.insets = new Insets(5, 5, 0, 0);
add(chkGroupByUnit, gridBagConstraints);

personModel = new PersonnelTableModel(getCampaign());
personnelTable = new JTable(personModel);
personnelTable.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
personnelTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS);
XTableColumnModel personColumnModel = new XTableColumnModel();
personnelTable.setColumnModel(personColumnModel);
personnelTable.createDefaultColumnsFromModel();
personnelSorter = new TableRowSorter<>(personModel);
final ArrayList<RowSorter.SortKey> sortKeys = new ArrayList<>();
for (final PersonnelTableModelColumn column : PersonnelTableModel.PERSONNEL_COLUMNS) {
final Comparator<?> comparator = column.getComparator(getCampaign());
if (comparator != null) {
personnelSorter.setComparator(column.ordinal(), comparator);
}
final SortOrder sortOrder = column.getDefaultSortOrder();
if (sortOrder != null) {
sortKeys.add(new RowSorter.SortKey(column.ordinal(), sortOrder));
}
return personGroupModel;
}
personnelSorter.setSortKeys(sortKeys);
personnelTable.setRowSorter(personnelSorter);
personnelTable.setIntercellSpacing(new Dimension(0, 0));
personnelTable.setShowGrid(false);
changePersonnelView();
personnelTable.getSelectionModel().addListSelectionListener(ev -> refreshPersonnelView());

scrollPersonnelView = new JScrollPane();
scrollPersonnelView.setMinimumSize(new Dimension(PERSONNEL_VIEW_WIDTH, 600));
scrollPersonnelView.setPreferredSize(new Dimension(PERSONNEL_VIEW_WIDTH, 600));
scrollPersonnelView.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
scrollPersonnelView.setViewportView(null);

JScrollPane scrollPersonnelTable = new JScrollPane(personnelTable);
splitPersonnel = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scrollPersonnelTable,
scrollPersonnelView);
splitPersonnel.setOneTouchExpandable(true);
splitPersonnel.setResizeWeight(1.0);
splitPersonnel.addPropertyChangeListener(JSplitPane.DIVIDER_LOCATION_PROPERTY, ev -> refreshPersonnelView());
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.gridwidth = 5;
gridBagConstraints.fill = GridBagConstraints.BOTH;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.weighty = 1.0;
add(splitPersonnel, gridBagConstraints);

PersonnelTableMouseAdapter.connect(getCampaignGui(), personnelTable, personModel, splitPersonnel);

filterPersonnel();
}

private DefaultComboBoxModel<PersonnelFilter> createPersonGroupModel() {
final DefaultComboBoxModel<PersonnelFilter> personGroupModel = new DefaultComboBoxModel<>();
for (PersonnelFilter filter : MekHQ.getMHQOptions().getPersonnelFilterStyle().getFilters(false)) {
personGroupModel.addElement(filter);

@Deprecated // These need to be migrated to the Suite Constants / Suite Options Setup
private void setUserPreferences() {
try {
PreferencesNode preferences = MekHQ.getMHQPreferences().forClass(PersonnelTab.class);
this.setName("dialog");

choicePerson.setName("personnelType");
preferences.manage(new JComboBoxPreference(choicePerson));

choicePersonView.setName("personnelView");
preferences.manage(new JComboBoxPreference(choicePersonView));

chkGroupByUnit.setName("groupByUnit");
preferences.manage(new JToggleButtonPreference(chkGroupByUnit));

personnelTable.setName("personnelTable");
preferences.manage(new JTablePreference(personnelTable));
} catch (Exception ex) {
LogManager.getLogger().error("Failed to set user preferences", ex);
}
}
return personGroupModel;
}

@Deprecated // These need to be migrated to the Suite Constants / Suite Options Setup
private void setUserPreferences() {
try {
PreferencesNode preferences = MekHQ.getMHQPreferences().forClass(PersonnelTab.class);
this.setName("dialog");
/* For export */
public JTable getPersonnelTable() {
return personnelTable;
}

choicePerson.setName("personnelType");
preferences.manage(new JComboBoxPreference(choicePerson));
public PersonnelTableModel getPersonModel() {
return personModel;
}

choicePersonView.setName("personnelView");
preferences.manage(new JComboBoxPreference(choicePersonView));
/*
* (non-Javadoc)
*
* @see mekhq.gui.CampaignGuiTab#refreshAll()
*/
@Override
public void refreshAll() {
refreshPersonnelList();
changePersonnelView();
}

chkGroupByUnit.setName("groupByUnit");
preferences.manage(new JToggleButtonPreference(chkGroupByUnit));
public void filterPersonnel() {
final PersonnelFilter filter = (choicePerson.getSelectedItem() == null)
? PersonnelFilter.ACTIVE : choicePerson.getSelectedItem();
personnelSorter.setRowFilter(new RowFilter<>() {
@Override
public boolean include(Entry<? extends PersonnelTableModel, ? extends Integer> entry) {
return filter.getFilteredInformation(entry.getModel().getPerson(entry.getIdentifier()), getCampaignGui().getCampaign().getLocalDate());
}
});
}

personnelTable.setName("personnelTable");
preferences.manage(new JTablePreference(personnelTable));
} catch (Exception ex) {
LogManager.getLogger().error("Failed to set user preferences", ex);
private void changePersonnelView() {
final PersonnelTabView view = (choicePersonView.getSelectedItem() == null)
? PersonnelTabView.GENERAL : choicePersonView.getSelectedItem();
final XTableColumnModel columnModel = (XTableColumnModel) getPersonnelTable().getColumnModel();
getPersonnelTable().setRowHeight(15);

// set the renderer
for (final PersonnelTableModelColumn column : PersonnelTableModel.PERSONNEL_COLUMNS) {
final TableColumn tableColumn = columnModel.getColumnByModelIndex(column.ordinal());
tableColumn.setCellRenderer(getPersonModel().getRenderer(choicePersonView.getSelectedItem()));
tableColumn.setPreferredWidth(column.getWidth());
columnModel.setColumnVisible(tableColumn,
column.isVisible(getCampaign(), view, getPersonnelTable()));
}
}
}

/* For export */
public JTable getPersonnelTable() {
return personnelTable;
}

public PersonnelTableModel getPersonModel() {
return personModel;
}

/*
* (non-Javadoc)
*
* @see mekhq.gui.CampaignGuiTab#refreshAll()
*/
@Override
public void refreshAll() {
refreshPersonnelList();
changePersonnelView();
}

public void filterPersonnel() {
final PersonnelFilter filter = (choicePerson.getSelectedItem() == null)
? PersonnelFilter.ACTIVE : choicePerson.getSelectedItem();
personnelSorter.setRowFilter(new RowFilter<>() {
@Override
public boolean include(Entry<? extends PersonnelTableModel, ? extends Integer> entry) {
return filter.getFilteredInformation(entry.getModel().getPerson(entry.getIdentifier()), getCampaignGui().getCampaign().getLocalDate());
}
});
}

private void changePersonnelView() {
final PersonnelTabView view = (choicePersonView.getSelectedItem() == null)
? PersonnelTabView.GENERAL : choicePersonView.getSelectedItem();
final XTableColumnModel columnModel = (XTableColumnModel) getPersonnelTable().getColumnModel();
getPersonnelTable().setRowHeight(15);

// set the renderer
for (final PersonnelTableModelColumn column : PersonnelTableModel.PERSONNEL_COLUMNS) {
final TableColumn tableColumn = columnModel.getColumnByModelIndex(column.ordinal());
tableColumn.setCellRenderer(getPersonModel().getRenderer(choicePersonView.getSelectedItem()));
tableColumn.setPreferredWidth(column.getWidth());
columnModel.setColumnVisible(tableColumn,
column.isVisible(getCampaign(), view, getPersonnelTable()));

public void focusOnPerson(UUID id) {
splitPersonnel.resetToPreferredSizes();
int row = -1;
for (int i = 0; i < personnelTable.getRowCount(); i++) {
if (personModel.getPerson(personnelTable.convertRowIndexToModel(i)).getId().equals(id)) {
row = i;
break;
}
}
if (row == -1) {
// try expanding the filter to all units
choicePerson.setSelectedIndex(0);
for (int i = 0; i < personnelTable.getRowCount(); i++) {
if (personModel.getPerson(personnelTable.convertRowIndexToModel(i)).getId().equals(id)) {
row = i;
break;
}
}

}
if (row != -1) {
personnelTable.setRowSelectionInterval(row, row);
personnelTable.scrollRectToVisible(personnelTable.getCellRect(row, 0, true));
}
}
}

public void focusOnPerson(UUID id) {
splitPersonnel.resetToPreferredSizes();
int row = -1;
for (int i = 0; i < personnelTable.getRowCount(); i++) {
if (personModel.getPerson(personnelTable.convertRowIndexToModel(i)).getId().equals(id)) {
row = i;
break;
}

/**
* Refreshes personnel table model.
*/
public void refreshPersonnelList() {
UUID selectedUUID = null;
int selectedRow = personnelTable.getSelectedRow();
if (selectedRow != -1) {
Person p = personModel.getPerson(personnelTable.convertRowIndexToModel(selectedRow));
if (null != p) {
selectedUUID = p.getId();
}
}
personModel.refreshData();
// try to put the focus back on same person if they are still available
for (int row = 0; row < personnelTable.getRowCount(); row++) {
Person p = personModel.getPerson(personnelTable.convertRowIndexToModel(row));
if (p.getId().equals(selectedUUID)) {
personnelTable.setRowSelectionInterval(row, row);
refreshPersonnelView();
break;
}
}
filterPersonnel();
}
if (row == -1) {
// try expanding the filter to all units
choicePerson.setSelectedIndex(0);
for (int i = 0; i < personnelTable.getRowCount(); i++) {
if (personModel.getPerson(personnelTable.convertRowIndexToModel(i)).getId().equals(id)) {
row = i;
break;

public void refreshPersonnelView() {
int row = personnelTable.getSelectedRow();
if (row < 0) {
scrollPersonnelView.setViewportView(null);
return;
}
}
Person selectedPerson = personModel.getPerson(personnelTable.convertRowIndexToModel(row));
scrollPersonnelView.setViewportView(new PersonViewPanel(selectedPerson, getCampaign(), getCampaignGui()));
// This odd code is to make sure that the scrollbar stays at the top
// I can't just call it here, because it ends up getting reset somewhere later
SwingUtilities.invokeLater(() -> scrollPersonnelView.getVerticalScrollBar().setValue(0));
}

private ActionScheduler personnelListScheduler = new ActionScheduler(this::refreshPersonnelList);
private ActionScheduler filterPersonnelScheduler = new ActionScheduler(this::filterPersonnel);

@Subscribe
public void handle(OptionsChangedEvent ev) {
changePersonnelView();
personnelListScheduler.schedule();
}

@Subscribe
public void handle(MHQOptionsChangedEvent evt) {
choicePerson.setModel(createPersonGroupModel());
personnelListScheduler.schedule();
}

@Subscribe
public void handle(DeploymentChangedEvent ev) {
filterPersonnelScheduler.schedule();
}

@Subscribe
public void handle(PersonChangedEvent ev) {
personnelListScheduler.schedule();
}
if (row != -1) {
personnelTable.setRowSelectionInterval(row, row);
personnelTable.scrollRectToVisible(personnelTable.getCellRect(row, 0, true));

@Subscribe
public void handle(PersonNewEvent ev) {
personnelListScheduler.schedule();
}
}

/**
* Refreshes personnel table model.
*/
public void refreshPersonnelList() {
UUID selectedUUID = null;
int selectedRow = personnelTable.getSelectedRow();
if (selectedRow != -1) {
Person p = personModel.getPerson(personnelTable.convertRowIndexToModel(selectedRow));
if (null != p) {
selectedUUID = p.getId();
}

@Subscribe
public void handle(PersonRemovedEvent ev) {
personnelListScheduler.schedule();
}
personModel.refreshData();
// try to put the focus back on same person if they are still available
for (int row = 0; row < personnelTable.getRowCount(); row++) {
Person p = personModel.getPerson(personnelTable.convertRowIndexToModel(row));
if (p.getId().equals(selectedUUID)) {
personnelTable.setRowSelectionInterval(row, row);

@Subscribe
public void handle(PersonLogEvent ev) {
refreshPersonnelView();
break;
}
}
filterPersonnel();
}

public void refreshPersonnelView() {
int row = personnelTable.getSelectedRow();
if (row < 0) {
scrollPersonnelView.setViewportView(null);
return;

@Subscribe
public void handle(ScenarioResolvedEvent ev) {
personnelListScheduler.schedule();
}

@Subscribe
public void handle(UnitRemovedEvent ev) {
filterPersonnelScheduler.schedule();
}

@Subscribe
public void handle(PartWorkEvent ev) {
filterPersonnelScheduler.schedule();
}

@Subscribe
public void handle(OvertimeModeEvent ev) {
filterPersonnelScheduler.schedule();
}
Person selectedPerson = personModel.getPerson(personnelTable.convertRowIndexToModel(row));
scrollPersonnelView.setViewportView(new PersonViewPanel(selectedPerson, getCampaign(), getCampaignGui()));
// This odd code is to make sure that the scrollbar stays at the top
// I can't just call it here, because it ends up getting reset somewhere later
SwingUtilities.invokeLater(() -> scrollPersonnelView.getVerticalScrollBar().setValue(0));
}

private ActionScheduler personnelListScheduler = new ActionScheduler(this::refreshPersonnelList);
private ActionScheduler filterPersonnelScheduler = new ActionScheduler(this::filterPersonnel);

@Subscribe
public void handle(OptionsChangedEvent ev) {
changePersonnelView();
personnelListScheduler.schedule();
}

@Subscribe
public void handle(MHQOptionsChangedEvent evt) {
choicePerson.setModel(createPersonGroupModel());
personnelListScheduler.schedule();
}

@Subscribe
public void handle(DeploymentChangedEvent ev) {
filterPersonnelScheduler.schedule();
}

@Subscribe
public void handle(PersonChangedEvent ev) {
personnelListScheduler.schedule();
}

@Subscribe
public void handle(PersonNewEvent ev) {
personnelListScheduler.schedule();
}

@Subscribe
public void handle(PersonRemovedEvent ev) {
personnelListScheduler.schedule();
}

@Subscribe
public void handle(PersonLogEvent ev) {
refreshPersonnelView();
}

@Subscribe
public void handle(ScenarioResolvedEvent ev) {
personnelListScheduler.schedule();
}

@Subscribe
public void handle(UnitRemovedEvent ev) {
filterPersonnelScheduler.schedule();
}

@Subscribe
public void handle(PartWorkEvent ev) {
filterPersonnelScheduler.schedule();
}

@Subscribe
public void handle(OvertimeModeEvent ev) {
filterPersonnelScheduler.schedule();
}
}
928 changes: 464 additions & 464 deletions MekHQ/src/mekhq/gui/enums/PersonnelFilter.java
Original file line number Diff line number Diff line change
@@ -30,469 +30,469 @@
import java.util.stream.Stream;

public enum PersonnelFilter {
//region Enum Declarations
//region Standard Personnel Filters
ALL("PersonnelFilter.ALL.text", "PersonnelFilter.ALL.toolTipText"),
ACTIVE("PersonnelFilter.ACTIVE.text", "PersonnelFilter.ACTIVE.toolTipText"),
COMBAT("PersonnelFilter.COMBAT.text", "PersonnelFilter.COMBAT.toolTipText"),
SUPPORT("PersonnelFilter.SUPPORT.text", "PersonnelFilter.SUPPORT.toolTipText"),
MECHWARRIORS("PersonnelFilter.MECHWARRIORS.text", "PersonnelFilter.MECHWARRIORS.toolTipText", true, false),
MECHWARRIOR("PersonnelFilter.MECHWARRIOR.text", "PersonnelFilter.MECHWARRIOR.toolTipText", false, true),
LAM_PILOT("PersonnelFilter.LAM_PILOT.text", "PersonnelFilter.LAM_PILOT.toolTipText", false, true),
VEHICLE_CREWMEMBER("PersonnelFilter.VEHICLE_CREWMEMBER.text", "PersonnelFilter.VEHICLE_CREWMEMBER.toolTipText", true, false),
GROUND_VEHICLE_DRIVER("PersonnelFilter.GROUND_VEHICLE_DRIVER.text", "PersonnelFilter.GROUND_VEHICLE_DRIVER.toolTipText", false, true),
NAVAL_VEHICLE_DRIVER("PersonnelFilter.NAVAL_VEHICLE_DRIVER.text", "PersonnelFilter.NAVAL_VEHICLE_DRIVER.toolTipText", false, true),
VTOL_PILOT("PersonnelFilter.VTOL_PILOT.text", "PersonnelFilter.VTOL_PILOT.toolTipText", false, true),
VEHICLE_GUNNER("PersonnelFilter.VEHICLE_GUNNER.text", "PersonnelFilter.VEHICLE_GUNNER.toolTipText", false, true),
VEHICLE_CREW("PersonnelFilter.VEHICLE_CREW.text", "PersonnelFilter.VEHICLE_CREW.toolTipText", false, true),
AEROSPACE_PILOT("PersonnelFilter.AEROSPACE_PILOT.text", "PersonnelFilter.AEROSPACE_PILOT.toolTipText"),
CONVENTIONAL_AIRCRAFT_PILOT("PersonnelFilter.CONVENTIONAL_AIRCRAFT_PILOT.text", "PersonnelFilter.CONVENTIONAL_AIRCRAFT_PILOT.toolTipText"),
PROTOMECH_PILOT("PersonnelFilter.PROTOMECH_PILOT.text", "PersonnelFilter.PROTOMECH_PILOT.toolTipText"),
BATTLE_ARMOUR("PersonnelFilter.BATTLE_ARMOUR.text", "PersonnelFilter.BATTLE_ARMOUR.toolTipText"),
SOLDIER("PersonnelFilter.SOLDIER.text", "PersonnelFilter.SOLDIER.toolTipText"),
VESSEL_CREWMEMBER("PersonnelFilter.VESSEL_CREWMEMBER.text", "PersonnelFilter.VESSEL_CREWMEMBER.toolTipText", true, false),
VESSEL_PILOT("PersonnelFilter.VESSEL_PILOT.text", "PersonnelFilter.VESSEL_PILOT.toolTipText", false, true),
VESSEL_GUNNER("PersonnelFilter.VESSEL_GUNNER.text", "PersonnelFilter.VESSEL_GUNNER.toolTipText", false, true),
VESSEL_CREW("PersonnelFilter.VESSEL_CREW.text", "PersonnelFilter.VESSEL_CREW.toolTipText", false, true),
VESSEL_NAVIGATOR("PersonnelFilter.VESSEL_NAVIGATOR.text", "PersonnelFilter.VESSEL_NAVIGATOR.toolTipText", false, true),
TECH("PersonnelFilter.TECH.text", "PersonnelFilter.TECH.toolTipText", true, false),
MECH_TECH("PersonnelFilter.MECH_TECH.text", "PersonnelFilter.MECH_TECH.toolTipText", false, true),
MECHANIC("PersonnelFilter.MECHANIC.text", "PersonnelFilter.MECHANIC.toolTipText", false, true),
AERO_TECH("PersonnelFilter.AERO_TECH.text", "PersonnelFilter.AERO_TECH.toolTipText", false, true),
BA_TECH("PersonnelFilter.BA_TECH.text", "PersonnelFilter.BA_TECH.toolTipText", false, true),
ASTECH("PersonnelFilter.ASTECH.text", "PersonnelFilter.ASTECH.toolTipText", false, true),
MEDICAL("PersonnelFilter.MEDICAL.text", "PersonnelFilter.MEDICAL.toolTipText", true, false),
DOCTOR("PersonnelFilter.DOCTOR.text", "PersonnelFilter.DOCTOR.toolTipText", false, true),
MEDIC("PersonnelFilter.MEDIC.text", "PersonnelFilter.MEDIC.toolTipText", false, true),
ADMINISTRATOR("PersonnelFilter.ADMINISTRATOR.text", "PersonnelFilter.ADMINISTRATOR.toolTipText", true, false),
ADMINISTRATOR_COMMAND("PersonnelFilter.ADMINISTRATOR_COMMAND.text", "PersonnelFilter.ADMINISTRATOR_COMMAND.toolTipText", false, true),
ADMINISTRATOR_LOGISTICS("PersonnelFilter.ADMINISTRATOR_LOGISTICS.text", "PersonnelFilter.ADMINISTRATOR_LOGISTICS.toolTipText", false, true),
ADMINISTRATOR_TRANSPORT("PersonnelFilter.ADMINISTRATOR_TRANSPORT.text", "PersonnelFilter.ADMINISTRATOR_TRANSPORT.toolTipText", false, true),
ADMINISTRATOR_HR("PersonnelFilter.ADMINISTRATOR_HR.text", "PersonnelFilter.ADMINISTRATOR_HR.toolTipText", false, true),
DEPENDENT("PersonnelFilter.DEPENDENT.text", "PersonnelFilter.DEPENDENT.toolTipText"),
//endregion Standard Personnel Filters

//region Expanded Personnel Tab Filters
FOUNDER("PersonnelFilter.FOUNDER.text", "PersonnelFilter.FOUNDER.toolTipText", false, false),
KIDS("PersonnelFilter.KIDS.text", "PersonnelFilter.KIDS.toolTipText"),
PRISONER("PersonnelFilter.PRISONER.text", "PersonnelFilter.PRISONER.toolTipText", false, false),
INACTIVE("PersonnelFilter.INACTIVE.text", "PersonnelFilter.INACTIVE.toolTipText", false, false),
MIA("PersonnelFilter.MIA.text", "PersonnelFilter.MIA.toolTipText", false, false),
RETIRED("PersonnelFilter.RETIRED.text", "PersonnelFilter.RETIRED.toolTipText", false, false),
DESERTED("PersonnelFilter.DESERTED.text", "PersonnelFilter.DESERTED.toolTipText", false, false),
KIA("PersonnelFilter.KIA.text", "PersonnelFilter.KIA.toolTipText", false, false),
DEAD("PersonnelFilter.DEAD.text", "PersonnelFilter.DEAD.toolTipText", false, false);
//endregion Expanded Personnel Tab Filters
//endregion Enum Declarations

//region Variable Declarations
private final String name;
private final String toolTipText;
private final boolean baseline;
private final boolean standard;
private final boolean individualRole;
//endregion Variable Declarations

//region Constructors
PersonnelFilter(final String name, final String toolTipText) {
this(name, toolTipText, true, true, true);
}

PersonnelFilter(final String name, final String toolTipText, final boolean standard,
final boolean individualRole) {
this(name, toolTipText, false, standard, individualRole);
}

PersonnelFilter(final String name, final String toolTipText, final boolean baseline,
final boolean standard, final boolean individualRole) {
final ResourceBundle resources = ResourceBundle.getBundle("mekhq.resources.GUI",
MekHQ.getMHQOptions().getLocale());
this.name = resources.getString(name);
this.toolTipText = resources.getString(toolTipText);
this.baseline = baseline;
this.standard = standard;
this.individualRole = individualRole;
}
//endregion Constructors

//region Getters
public String getToolTipText() {
return toolTipText;
}

public boolean isBaseline() {
return baseline;
}

public boolean isStandard() {
return standard;
}

public boolean isIndividualRole() {
return individualRole;
}
//endregion Getters

//region Boolean Comparison Methods
public boolean isAll() {
return this == ALL;
}

public boolean isActive() {
return this == ACTIVE;
}

public boolean isCombat() {
return this == COMBAT;
}

public boolean isSupport() {
return this == SUPPORT;
}

public boolean isMechWarriors() {
return this == MECHWARRIORS;
}

public boolean isMechWarrior() {
return this == MECHWARRIOR;
}

public boolean isLAMPilot() {
return this == LAM_PILOT;
}

public boolean isVehicleCrewmember() {
return this == VEHICLE_CREWMEMBER;
}

public boolean isGroundVehicleDriver() {
return this == GROUND_VEHICLE_DRIVER;
}

public boolean isNavalVehicleDriver() {
return this == NAVAL_VEHICLE_DRIVER;
}

public boolean isVTOLPilot() {
return this == VTOL_PILOT;
}

public boolean isVehicleGunner() {
return this == VEHICLE_GUNNER;
}

public boolean isVehicleCrew() {
return this == VEHICLE_CREW;
}

public boolean isAerospacePilot() {
return this == AEROSPACE_PILOT;
}

public boolean isConventionalAircraftPilot() {
return this == CONVENTIONAL_AIRCRAFT_PILOT;
}

public boolean isProtoMechPilot() {
return this == PROTOMECH_PILOT;
}

public boolean isBattleArmor() {
return this == BATTLE_ARMOUR;
}

public boolean isSoldier() {
return this == SOLDIER;
}

public boolean isVesselCrewmember() {
return this == VESSEL_CREWMEMBER;
}

public boolean isVesselPilot() {
return this == VESSEL_PILOT;
}
//region Enum Declarations
//region Standard Personnel Filters
ALL("PersonnelFilter.ALL.text", "PersonnelFilter.ALL.toolTipText"),
ACTIVE("PersonnelFilter.ACTIVE.text", "PersonnelFilter.ACTIVE.toolTipText"),
COMBAT("PersonnelFilter.COMBAT.text", "PersonnelFilter.COMBAT.toolTipText"),
SUPPORT("PersonnelFilter.SUPPORT.text", "PersonnelFilter.SUPPORT.toolTipText"),
MECHWARRIORS("PersonnelFilter.MECHWARRIORS.text", "PersonnelFilter.MECHWARRIORS.toolTipText", true, false),
MECHWARRIOR("PersonnelFilter.MECHWARRIOR.text", "PersonnelFilter.MECHWARRIOR.toolTipText", false, true),
LAM_PILOT("PersonnelFilter.LAM_PILOT.text", "PersonnelFilter.LAM_PILOT.toolTipText", false, true),
VEHICLE_CREWMEMBER("PersonnelFilter.VEHICLE_CREWMEMBER.text", "PersonnelFilter.VEHICLE_CREWMEMBER.toolTipText", true, false),
GROUND_VEHICLE_DRIVER("PersonnelFilter.GROUND_VEHICLE_DRIVER.text", "PersonnelFilter.GROUND_VEHICLE_DRIVER.toolTipText", false, true),
NAVAL_VEHICLE_DRIVER("PersonnelFilter.NAVAL_VEHICLE_DRIVER.text", "PersonnelFilter.NAVAL_VEHICLE_DRIVER.toolTipText", false, true),
VTOL_PILOT("PersonnelFilter.VTOL_PILOT.text", "PersonnelFilter.VTOL_PILOT.toolTipText", false, true),
VEHICLE_GUNNER("PersonnelFilter.VEHICLE_GUNNER.text", "PersonnelFilter.VEHICLE_GUNNER.toolTipText", false, true),
VEHICLE_CREW("PersonnelFilter.VEHICLE_CREW.text", "PersonnelFilter.VEHICLE_CREW.toolTipText", false, true),
AEROSPACE_PILOT("PersonnelFilter.AEROSPACE_PILOT.text", "PersonnelFilter.AEROSPACE_PILOT.toolTipText"),
CONVENTIONAL_AIRCRAFT_PILOT("PersonnelFilter.CONVENTIONAL_AIRCRAFT_PILOT.text", "PersonnelFilter.CONVENTIONAL_AIRCRAFT_PILOT.toolTipText"),
PROTOMECH_PILOT("PersonnelFilter.PROTOMECH_PILOT.text", "PersonnelFilter.PROTOMECH_PILOT.toolTipText"),
BATTLE_ARMOUR("PersonnelFilter.BATTLE_ARMOUR.text", "PersonnelFilter.BATTLE_ARMOUR.toolTipText"),
SOLDIER("PersonnelFilter.SOLDIER.text", "PersonnelFilter.SOLDIER.toolTipText"),
VESSEL_CREWMEMBER("PersonnelFilter.VESSEL_CREWMEMBER.text", "PersonnelFilter.VESSEL_CREWMEMBER.toolTipText", true, false),
VESSEL_PILOT("PersonnelFilter.VESSEL_PILOT.text", "PersonnelFilter.VESSEL_PILOT.toolTipText", false, true),
VESSEL_GUNNER("PersonnelFilter.VESSEL_GUNNER.text", "PersonnelFilter.VESSEL_GUNNER.toolTipText", false, true),
VESSEL_CREW("PersonnelFilter.VESSEL_CREW.text", "PersonnelFilter.VESSEL_CREW.toolTipText", false, true),
VESSEL_NAVIGATOR("PersonnelFilter.VESSEL_NAVIGATOR.text", "PersonnelFilter.VESSEL_NAVIGATOR.toolTipText", false, true),
TECH("PersonnelFilter.TECH.text", "PersonnelFilter.TECH.toolTipText", true, false),
MECH_TECH("PersonnelFilter.MECH_TECH.text", "PersonnelFilter.MECH_TECH.toolTipText", false, true),
MECHANIC("PersonnelFilter.MECHANIC.text", "PersonnelFilter.MECHANIC.toolTipText", false, true),
AERO_TECH("PersonnelFilter.AERO_TECH.text", "PersonnelFilter.AERO_TECH.toolTipText", false, true),
BA_TECH("PersonnelFilter.BA_TECH.text", "PersonnelFilter.BA_TECH.toolTipText", false, true),
ASTECH("PersonnelFilter.ASTECH.text", "PersonnelFilter.ASTECH.toolTipText", false, true),
MEDICAL("PersonnelFilter.MEDICAL.text", "PersonnelFilter.MEDICAL.toolTipText", true, false),
DOCTOR("PersonnelFilter.DOCTOR.text", "PersonnelFilter.DOCTOR.toolTipText", false, true),
MEDIC("PersonnelFilter.MEDIC.text", "PersonnelFilter.MEDIC.toolTipText", false, true),
ADMINISTRATOR("PersonnelFilter.ADMINISTRATOR.text", "PersonnelFilter.ADMINISTRATOR.toolTipText", true, false),
ADMINISTRATOR_COMMAND("PersonnelFilter.ADMINISTRATOR_COMMAND.text", "PersonnelFilter.ADMINISTRATOR_COMMAND.toolTipText", false, true),
ADMINISTRATOR_LOGISTICS("PersonnelFilter.ADMINISTRATOR_LOGISTICS.text", "PersonnelFilter.ADMINISTRATOR_LOGISTICS.toolTipText", false, true),
ADMINISTRATOR_TRANSPORT("PersonnelFilter.ADMINISTRATOR_TRANSPORT.text", "PersonnelFilter.ADMINISTRATOR_TRANSPORT.toolTipText", false, true),
ADMINISTRATOR_HR("PersonnelFilter.ADMINISTRATOR_HR.text", "PersonnelFilter.ADMINISTRATOR_HR.toolTipText", false, true),
DEPENDENT("PersonnelFilter.DEPENDENT.text", "PersonnelFilter.DEPENDENT.toolTipText"),
//endregion Standard Personnel Filters

//region Expanded Personnel Tab Filters
FOUNDER("PersonnelFilter.FOUNDER.text", "PersonnelFilter.FOUNDER.toolTipText", false, false),
KIDS("PersonnelFilter.KIDS.text", "PersonnelFilter.KIDS.toolTipText"),
PRISONER("PersonnelFilter.PRISONER.text", "PersonnelFilter.PRISONER.toolTipText", false, false),
INACTIVE("PersonnelFilter.INACTIVE.text", "PersonnelFilter.INACTIVE.toolTipText", false, false),
MIA("PersonnelFilter.MIA.text", "PersonnelFilter.MIA.toolTipText", false, false),
RETIRED("PersonnelFilter.RETIRED.text", "PersonnelFilter.RETIRED.toolTipText", false, false),
DESERTED("PersonnelFilter.DESERTED.text", "PersonnelFilter.DESERTED.toolTipText", false, false),
KIA("PersonnelFilter.KIA.text", "PersonnelFilter.KIA.toolTipText", false, false),
DEAD("PersonnelFilter.DEAD.text", "PersonnelFilter.DEAD.toolTipText", false, false);
//endregion Expanded Personnel Tab Filters
//endregion Enum Declarations

//region Variable Declarations
private final String name;
private final String toolTipText;
private final boolean baseline;
private final boolean standard;
private final boolean individualRole;
//endregion Variable Declarations

//region Constructors
PersonnelFilter(final String name, final String toolTipText) {
this(name, toolTipText, true, true, true);
}

PersonnelFilter(final String name, final String toolTipText, final boolean standard,
final boolean individualRole) {
this(name, toolTipText, false, standard, individualRole);
}

PersonnelFilter(final String name, final String toolTipText, final boolean baseline,
final boolean standard, final boolean individualRole) {
final ResourceBundle resources = ResourceBundle.getBundle("mekhq.resources.GUI",
MekHQ.getMHQOptions().getLocale());
this.name = resources.getString(name);
this.toolTipText = resources.getString(toolTipText);
this.baseline = baseline;
this.standard = standard;
this.individualRole = individualRole;
}
//endregion Constructors

//region Getters
public String getToolTipText() {
return toolTipText;
}

public boolean isBaseline() {
return baseline;
}

public boolean isStandard() {
return standard;
}

public boolean isIndividualRole() {
return individualRole;
}
//endregion Getters

//region Boolean Comparison Methods
public boolean isAll() {
return this == ALL;
}

public boolean isActive() {
return this == ACTIVE;
}

public boolean isCombat() {
return this == COMBAT;
}

public boolean isSupport() {
return this == SUPPORT;
}

public boolean isMechWarriors() {
return this == MECHWARRIORS;
}

public boolean isMechWarrior() {
return this == MECHWARRIOR;
}

public boolean isLAMPilot() {
return this == LAM_PILOT;
}

public boolean isVehicleCrewmember() {
return this == VEHICLE_CREWMEMBER;
}

public boolean isGroundVehicleDriver() {
return this == GROUND_VEHICLE_DRIVER;
}

public boolean isNavalVehicleDriver() {
return this == NAVAL_VEHICLE_DRIVER;
}

public boolean isVTOLPilot() {
return this == VTOL_PILOT;
}

public boolean isVehicleGunner() {
return this == VEHICLE_GUNNER;
}

public boolean isVehicleCrew() {
return this == VEHICLE_CREW;
}

public boolean isAerospacePilot() {
return this == AEROSPACE_PILOT;
}

public boolean isConventionalAircraftPilot() {
return this == CONVENTIONAL_AIRCRAFT_PILOT;
}

public boolean isProtoMechPilot() {
return this == PROTOMECH_PILOT;
}

public boolean isBattleArmor() {
return this == BATTLE_ARMOUR;
}

public boolean isSoldier() {
return this == SOLDIER;
}

public boolean isVesselCrewmember() {
return this == VESSEL_CREWMEMBER;
}

public boolean isVesselPilot() {
return this == VESSEL_PILOT;
}

public boolean isVesselGunner() {
return this == VESSEL_GUNNER;
}

public boolean isVesselCrew() {
return this == VESSEL_CREW;
}

public boolean isVesselNavigator() {
return this == VESSEL_NAVIGATOR;
}

public boolean isTech() {
return this == TECH;
}

public boolean isMechTech() {
return this == MECH_TECH;
}

public boolean isMechanic() {
return this == MECHANIC;
}

public boolean isAeroTech() {
return this == AERO_TECH;
}

public boolean isBATech() {
return this == BA_TECH;
}

public boolean isAstech() {
return this == ASTECH;
}

public boolean isMedical() {
return this == MEDICAL;
}

public boolean isDoctor() {
return this == DOCTOR;
}

public boolean isMedic() {
return this == MEDIC;
}

public boolean isAdministrator() {
return this == ADMINISTRATOR;
}

public boolean isAdministratorCommand() {
return this == ADMINISTRATOR_COMMAND;
}

public boolean isAdministratorLogistics() {
return this == ADMINISTRATOR_LOGISTICS;
}

public boolean isAdministratorTransport() {
return this == ADMINISTRATOR_TRANSPORT;
}

public boolean isAdministratorHR() {
return this == ADMINISTRATOR_HR;
}

public boolean isDependent() {
return this == DEPENDENT;
}

public boolean isFounder() {
return this == FOUNDER;
}

public boolean isPrisoner() {
return this == PRISONER;
}

public boolean isInactive() {
return this == INACTIVE;
}

public boolean isMIA() {
return this == MIA;
}

public boolean isRetired() {
return this == RETIRED;
}

public boolean isDeserted() {
return this == DESERTED;
}

public boolean isKIA() {
return this == KIA;
}

public boolean isDead() {
return this == DEAD;
}
//endregion Boolean Comparison Methods

public boolean isVesselGunner() {
return this == VESSEL_GUNNER;
}

public boolean isVesselCrew() {
return this == VESSEL_CREW;
}

public boolean isVesselNavigator() {
return this == VESSEL_NAVIGATOR;
}

public boolean isTech() {
return this == TECH;
}

public boolean isMechTech() {
return this == MECH_TECH;
}

public boolean isMechanic() {
return this == MECHANIC;
}

public boolean isAeroTech() {
return this == AERO_TECH;
}

public boolean isBATech() {
return this == BA_TECH;
}

public boolean isAstech() {
return this == ASTECH;
}

public boolean isMedical() {
return this == MEDICAL;
}

public boolean isDoctor() {
return this == DOCTOR;
}

public boolean isMedic() {
return this == MEDIC;
}

public boolean isAdministrator() {
return this == ADMINISTRATOR;
}

public boolean isAdministratorCommand() {
return this == ADMINISTRATOR_COMMAND;
}

public boolean isAdministratorLogistics() {
return this == ADMINISTRATOR_LOGISTICS;
}

public boolean isAdministratorTransport() {
return this == ADMINISTRATOR_TRANSPORT;
}

public boolean isAdministratorHR() {
return this == ADMINISTRATOR_HR;
}

public boolean isDependent() {
return this == DEPENDENT;
}

public boolean isFounder() {
return this == FOUNDER;
}

public boolean isPrisoner() {
return this == PRISONER;
}

public boolean isInactive() {
return this == INACTIVE;
}

public boolean isMIA() {
return this == MIA;
}

public boolean isRetired() {
return this == RETIRED;
}

public boolean isDeserted() {
return this == DESERTED;
}

public boolean isKIA() {
return this == KIA;
}

public boolean isDead() {
return this == DEAD;
}
//endregion Boolean Comparison Methods

public static List<PersonnelFilter> getStandardPersonnelFilters() {
return Stream.of(values()).filter(filter -> filter.isBaseline() || filter.isStandard())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getExpandedPersonnelFilters() {
return Stream.of(values()).filter(filter -> filter.isBaseline() || !filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getIndividualRolesStandardPersonnelFilters() {
return Stream.of(values()).filter(filter -> filter.isBaseline() || filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getIndividualRolesExpandedPersonnelFilters() {
return Stream.of(values())
.filter(filter -> filter.isBaseline() || !filter.isStandard() || filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getAllStandardFilters() {
return Stream.of(values())
.filter(filter -> filter.isBaseline() || filter.isStandard() || filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getAllIndividualRoleFilters() {
return Arrays.asList(values());
}

public boolean getFilteredInformation(final Person person, LocalDate currentDate) {
final boolean active = person.getStatus().isActive() && !person.getPrisonerStatus().isCurrentPrisoner();
switch (this) {
case ALL:
return true;
case ACTIVE:
return active;
case COMBAT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isCombat() : person.hasCombatRole());
case SUPPORT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? !person.getPrimaryRole().isCombat() : person.hasSupportRole(true));
case MECHWARRIORS:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechWarriorGrouping()
: (person.getPrimaryRole().isMechWarriorGrouping() || person.getSecondaryRole().isMechWarriorGrouping()));
case MECHWARRIOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechWarrior() : person.hasRole(PersonnelRole.MECHWARRIOR));
case LAM_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isLAMPilot() : person.hasRole(PersonnelRole.LAM_PILOT));
case VEHICLE_CREWMEMBER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVehicleCrewmember()
: (person.getPrimaryRole().isVehicleCrewmember() || person.getSecondaryRole().isVehicleCrewmember()));
case GROUND_VEHICLE_DRIVER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isGroundVehicleDriver() : person.hasRole(PersonnelRole.GROUND_VEHICLE_DRIVER));
case NAVAL_VEHICLE_DRIVER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isNavalVehicleDriver() : person.hasRole(PersonnelRole.NAVAL_VEHICLE_DRIVER));
case VEHICLE_GUNNER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVehicleGunner() : person.hasRole(PersonnelRole.VEHICLE_GUNNER));
case VEHICLE_CREW:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVehicleCrew() : person.hasRole(PersonnelRole.VEHICLE_CREW));
case VTOL_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVTOLPilot() : person.hasRole(PersonnelRole.VTOL_PILOT));
case AEROSPACE_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAerospacePilot() : person.hasRole(PersonnelRole.AEROSPACE_PILOT));
case CONVENTIONAL_AIRCRAFT_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isConventionalAircraftPilot() : person.hasRole(PersonnelRole.CONVENTIONAL_AIRCRAFT_PILOT));
case PROTOMECH_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isProtoMechPilot() : person.hasRole(PersonnelRole.PROTOMECH_PILOT));
case BATTLE_ARMOUR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isBattleArmour() : person.hasRole(PersonnelRole.BATTLE_ARMOUR));
case SOLDIER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isSoldier() : person.hasRole(PersonnelRole.SOLDIER));
case VESSEL_CREWMEMBER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselCrewmember()
: (person.getPrimaryRole().isVesselCrewmember() || person.getSecondaryRole().isVesselCrewmember()));
case VESSEL_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselPilot() : person.hasRole(PersonnelRole.VESSEL_PILOT));
case VESSEL_CREW:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselCrew() : person.hasRole(PersonnelRole.VESSEL_CREW));
case VESSEL_GUNNER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselGunner() : person.hasRole(PersonnelRole.VESSEL_GUNNER));
case VESSEL_NAVIGATOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselNavigator() : person.hasRole(PersonnelRole.VESSEL_NAVIGATOR));
case TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isTech() : person.isTech());
case MECH_TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechTech() : person.hasRole(PersonnelRole.MECH_TECH));
case MECHANIC:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechanic() : person.hasRole(PersonnelRole.MECHANIC));
case AERO_TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAeroTech() : person.hasRole(PersonnelRole.AERO_TECH));
case BA_TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isBATech() : person.hasRole(PersonnelRole.BA_TECH));
case ASTECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAstech() : person.hasRole(PersonnelRole.ASTECH));
case MEDICAL:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMedicalStaff()
: (person.getPrimaryRole().isMedicalStaff() || person.getSecondaryRole().isMedicalStaff()));
case DOCTOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isDoctor() : person.hasRole(PersonnelRole.DOCTOR));
case MEDIC:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMedic() : person.hasRole(PersonnelRole.MEDIC));
case ADMINISTRATOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministrator() : person.isAdministrator());
case ADMINISTRATOR_COMMAND:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorCommand() : person.hasRole(PersonnelRole.ADMINISTRATOR_COMMAND));
case ADMINISTRATOR_LOGISTICS:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorLogistics() : person.hasRole(PersonnelRole.ADMINISTRATOR_LOGISTICS));
case ADMINISTRATOR_TRANSPORT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorTransport() : person.hasRole(PersonnelRole.ADMINISTRATOR_TRANSPORT));
case ADMINISTRATOR_HR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorHR() : person.hasRole(PersonnelRole.ADMINISTRATOR_HR));
case DEPENDENT:
return active && person.getPrimaryRole().isDependent();
case FOUNDER:
return person.isFounder();
case KIDS:
return person.isChild(currentDate);
case PRISONER:
return person.getPrisonerStatus().isCurrentPrisoner() || person.getPrisonerStatus().isBondsman();
case INACTIVE:
return !person.getStatus().isActive();
case MIA:
return person.getStatus().isMIA();
case RETIRED:
return person.getStatus().isRetired();
case DESERTED:
return person.getStatus().isDeserted();
case KIA:
return person.getStatus().isKIA();
case DEAD:
return person.getStatus().isDead();
default:
return false;
}
}

@Override
public String toString() {
return name;
}
public static List<PersonnelFilter> getStandardPersonnelFilters() {
return Stream.of(values()).filter(filter -> filter.isBaseline() || filter.isStandard())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getExpandedPersonnelFilters() {
return Stream.of(values()).filter(filter -> filter.isBaseline() || !filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getIndividualRolesStandardPersonnelFilters() {
return Stream.of(values()).filter(filter -> filter.isBaseline() || filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getIndividualRolesExpandedPersonnelFilters() {
return Stream.of(values())
.filter(filter -> filter.isBaseline() || !filter.isStandard() || filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getAllStandardFilters() {
return Stream.of(values())
.filter(filter -> filter.isBaseline() || filter.isStandard() || filter.isIndividualRole())
.collect(Collectors.toList());
}

public static List<PersonnelFilter> getAllIndividualRoleFilters() {
return Arrays.asList(values());
}

public boolean getFilteredInformation(final Person person, LocalDate currentDate) {
final boolean active = person.getStatus().isActive() && !person.getPrisonerStatus().isCurrentPrisoner();
switch (this) {
case ALL:
return true;
case ACTIVE:
return active;
case COMBAT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isCombat() : person.hasCombatRole());
case SUPPORT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? !person.getPrimaryRole().isCombat() : person.hasSupportRole(true));
case MECHWARRIORS:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechWarriorGrouping()
: (person.getPrimaryRole().isMechWarriorGrouping() || person.getSecondaryRole().isMechWarriorGrouping()));
case MECHWARRIOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechWarrior() : person.hasRole(PersonnelRole.MECHWARRIOR));
case LAM_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isLAMPilot() : person.hasRole(PersonnelRole.LAM_PILOT));
case VEHICLE_CREWMEMBER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVehicleCrewmember()
: (person.getPrimaryRole().isVehicleCrewmember() || person.getSecondaryRole().isVehicleCrewmember()));
case GROUND_VEHICLE_DRIVER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isGroundVehicleDriver() : person.hasRole(PersonnelRole.GROUND_VEHICLE_DRIVER));
case NAVAL_VEHICLE_DRIVER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isNavalVehicleDriver() : person.hasRole(PersonnelRole.NAVAL_VEHICLE_DRIVER));
case VEHICLE_GUNNER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVehicleGunner() : person.hasRole(PersonnelRole.VEHICLE_GUNNER));
case VEHICLE_CREW:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVehicleCrew() : person.hasRole(PersonnelRole.VEHICLE_CREW));
case VTOL_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVTOLPilot() : person.hasRole(PersonnelRole.VTOL_PILOT));
case AEROSPACE_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAerospacePilot() : person.hasRole(PersonnelRole.AEROSPACE_PILOT));
case CONVENTIONAL_AIRCRAFT_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isConventionalAircraftPilot() : person.hasRole(PersonnelRole.CONVENTIONAL_AIRCRAFT_PILOT));
case PROTOMECH_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isProtoMechPilot() : person.hasRole(PersonnelRole.PROTOMECH_PILOT));
case BATTLE_ARMOUR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isBattleArmour() : person.hasRole(PersonnelRole.BATTLE_ARMOUR));
case SOLDIER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isSoldier() : person.hasRole(PersonnelRole.SOLDIER));
case VESSEL_CREWMEMBER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselCrewmember()
: (person.getPrimaryRole().isVesselCrewmember() || person.getSecondaryRole().isVesselCrewmember()));
case VESSEL_PILOT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselPilot() : person.hasRole(PersonnelRole.VESSEL_PILOT));
case VESSEL_CREW:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselCrew() : person.hasRole(PersonnelRole.VESSEL_CREW));
case VESSEL_GUNNER:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselGunner() : person.hasRole(PersonnelRole.VESSEL_GUNNER));
case VESSEL_NAVIGATOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isVesselNavigator() : person.hasRole(PersonnelRole.VESSEL_NAVIGATOR));
case TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isTech() : person.isTech());
case MECH_TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechTech() : person.hasRole(PersonnelRole.MECH_TECH));
case MECHANIC:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMechanic() : person.hasRole(PersonnelRole.MECHANIC));
case AERO_TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAeroTech() : person.hasRole(PersonnelRole.AERO_TECH));
case BA_TECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isBATech() : person.hasRole(PersonnelRole.BA_TECH));
case ASTECH:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAstech() : person.hasRole(PersonnelRole.ASTECH));
case MEDICAL:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMedicalStaff()
: (person.getPrimaryRole().isMedicalStaff() || person.getSecondaryRole().isMedicalStaff()));
case DOCTOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isDoctor() : person.hasRole(PersonnelRole.DOCTOR));
case MEDIC:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isMedic() : person.hasRole(PersonnelRole.MEDIC));
case ADMINISTRATOR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministrator() : person.isAdministrator());
case ADMINISTRATOR_COMMAND:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorCommand() : person.hasRole(PersonnelRole.ADMINISTRATOR_COMMAND));
case ADMINISTRATOR_LOGISTICS:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorLogistics() : person.hasRole(PersonnelRole.ADMINISTRATOR_LOGISTICS));
case ADMINISTRATOR_TRANSPORT:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorTransport() : person.hasRole(PersonnelRole.ADMINISTRATOR_TRANSPORT));
case ADMINISTRATOR_HR:
return active && (MekHQ.getMHQOptions().getPersonnelFilterOnPrimaryRole()
? person.getPrimaryRole().isAdministratorHR() : person.hasRole(PersonnelRole.ADMINISTRATOR_HR));
case DEPENDENT:
return active && person.getPrimaryRole().isDependent();
case FOUNDER:
return person.isFounder();
case KIDS:
return person.isChild(currentDate);
case PRISONER:
return person.getPrisonerStatus().isCurrentPrisoner() || person.getPrisonerStatus().isBondsman();
case INACTIVE:
return !person.getStatus().isActive();
case MIA:
return person.getStatus().isMIA();
case RETIRED:
return person.getStatus().isRetired();
case DESERTED:
return person.getStatus().isDeserted();
case KIA:
return person.getStatus().isKIA();
case DEAD:
return person.getStatus().isDead();
default:
return false;
}
}

@Override
public String toString() {
return name;
}
}

0 comments on commit df54613

Please sign in to comment.