src/stelnet/board/query/view/dialog/QueryPickerListener.java
package stelnet.board.query.view.dialog;
import com.fs.starfarer.api.campaign.CargoAPI;
import com.fs.starfarer.api.campaign.CargoPickerListener;
import com.fs.starfarer.api.campaign.CargoStackAPI;
import com.fs.starfarer.api.campaign.FleetMemberPickerListener;
import com.fs.starfarer.api.fleet.FleetMemberAPI;
import com.fs.starfarer.api.ui.TooltipMakerAPI;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import lombok.RequiredArgsConstructor;
import stelnet.board.query.Query;
import stelnet.board.query.QueryBoard;
import stelnet.board.query.QueryManager;
import stelnet.board.query.QueryState;
import stelnet.board.query.QueryState.QueryBoardTab;
import stelnet.board.query.provider.QueryProvider;
import stelnet.board.query.view.add.QueryFactory;
import stelnet.filter.CargoStackIsStack;
import stelnet.filter.Filter;
import stelnet.filter.LogicalOr;
import stelnet.filter.ShipHullIsHull;
import stelnet.util.CommonL10n;
import stelnet.util.L10n;
import stelnet.util.StelnetHelper;
@RequiredArgsConstructor
public class QueryPickerListener implements CargoPickerListener, FleetMemberPickerListener {
private final PickerDialog dialog;
private final QueryFactory factory;
private final String type;
@Override
public void pickedCargo(CargoAPI cargo) {
Set<Filter> selectedFilters = new LinkedHashSet<>();
cargo.sort();
for (CargoStackAPI cargoStack : cargo.getStacksCopy()) {
selectedFilters.add(new CargoStackIsStack(cargoStack));
}
addQuery(selectedFilters, L10n.get(CommonL10n.ITEMS));
}
@Override
public void pickedFleetMembers(List<FleetMemberAPI> members) {
Set<Filter> selectedFilters = new LinkedHashSet<>();
for (FleetMemberAPI member : members) {
selectedFilters.add(new ShipHullIsHull(member.getHullSpec()));
}
addQuery(selectedFilters, L10n.get(CommonL10n.SHIPS));
}
@Override
public void cancelledCargoSelection() {
dialog.dismiss(null);
}
@Override
public void cancelledFleetMemberPicking() {
dialog.dismiss(null);
}
@Override
public void recreateTextPanel(
TooltipMakerAPI panel,
CargoAPI cargo,
CargoStackAPI pickedUp,
boolean pickedUpFromSource,
CargoAPI combined
) {}
private void addQuery(Set<Filter> selectedFilters, String label) {
Set<Filter> filters = new LinkedHashSet<>();
filters.add(new LogicalOr(selectedFilters, label));
QueryBoard board = StelnetHelper.getInstance(QueryBoard.class);
QueryState state = board.getState();
QueryManager manager = state.getQueryManager();
QueryProvider provider = factory.getProvider();
Query query = new Query(manager, provider, filters, type);
manager.addQuery(query);
state.setActiveTab(QueryBoardTab.LIST);
dialog.dismiss(board);
}
}