Commit 48b8e0c7 authored by Ondřej Hrdlička's avatar Ondřej Hrdlička
Browse files

Made taskSupplier not be null itself, just return null values

parent 96bac8e6
Loading
Loading
Loading
Loading
+3 −9
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package cz.muni.fi.pv168.project.ui.action;
import cz.muni.fi.pv168.project.data.task.Task;
import cz.muni.fi.pv168.project.ui.dialog.factory.DialogFactory;
import cz.muni.fi.pv168.project.ui.main.tab.ListHolder;
import org.jetbrains.annotations.Nullable;

import javax.swing.JList;
import java.util.ArrayList;
@@ -13,14 +12,13 @@ import java.util.function.Supplier;

public abstract class AbstractAction<T> extends javax.swing.AbstractAction {

    @Nullable
    private final Supplier<Task> taskSupplier;
    private IntPredicate enabledCondition;
    protected final ListHolder<T> listHolder;

    private final List<Updatable> updatables = new ArrayList<>();

    public AbstractAction(ListHolder<T> listHolder, IntPredicate enabledCondition, @Nullable Supplier<Task> taskSupplier) {
    public AbstractAction(ListHolder<T> listHolder, IntPredicate enabledCondition, Supplier<Task> taskSupplier) {
        this.enabledCondition = enabledCondition;
        this.taskSupplier = taskSupplier;
        this.listHolder = listHolder;
@@ -29,7 +27,7 @@ public abstract class AbstractAction<T> extends javax.swing.AbstractAction {
    }

    public AbstractAction(ListHolder<T> listHolder, IntPredicate enabledCondition) {
        this(listHolder, enabledCondition, null);
        this(listHolder, enabledCondition, () -> null);
    }

    private void updateEnabledStatus() {
@@ -57,10 +55,6 @@ public abstract class AbstractAction<T> extends javax.swing.AbstractAction {
    }

    public void triggerUpdate() {
        if (taskSupplier != null) {
        updatables.forEach(updatable -> updatable.updateFrom(taskSupplier.get()));
        } else {
            updatables.forEach(updatable -> updatable.updateFrom(null));
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@ public final class EditAction<T> extends AbstractAction<T> {
    }

    public EditAction(ListHolder<T> listHolder, Icon icon, String description) {
        this(listHolder, icon, description, null);
        this(listHolder, icon, description, () -> null);
    }

    @Override
+0 −49
Original line number Diff line number Diff line
package cz.muni.fi.pv168.project.ui.component;

import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;
import javax.swing.border.TitledBorder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

public final class ModeledJList<T> extends JList<T> {

    private DefaultListModel<T> model;

    public ModeledJList(ListCellRenderer<T> renderer) {
        this(Optional.empty(), renderer, new ArrayList<>());
    }

    public ModeledJList(String listName, ListCellRenderer<T> renderer, List<T> data) {
        this(Optional.of(listName), renderer, data);
    }

    private ModeledJList(Optional<String> borderTitle, ListCellRenderer<T> renderer, List<T> data) {
        model = new DefaultListModel<>();
        model.addAll(data);
        this.setModel(model);

        this.setCellRenderer(renderer);
        this.setEnabled(true);
        this.setOpaque(false);

        borderTitle.ifPresent(name -> this.setBorder(new TitledBorder(name)));
    }

    public void setCustomListModel(DefaultListModel<T> customListModel) {
        super.setModel(customListModel);
        this.model = customListModel;
    }

    public List<T> getValues() {
        return Collections.list(model.elements());
    }

    public void setValues(List<T> values) {
        model.clear();
        model.addAll(values);
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -2,7 +2,6 @@ package cz.muni.fi.pv168.project.ui.main.panel;

import cz.muni.fi.pv168.project.data.task.Task;
import cz.muni.fi.pv168.project.ui.action.Updatable;
import cz.muni.fi.pv168.project.ui.component.ModeledJList;
import cz.muni.fi.pv168.project.ui.main.panel.listholder.CategoryHolderPanel;
import cz.muni.fi.pv168.project.ui.main.panel.listholder.DependencyHolderPanel;
import cz.muni.fi.pv168.project.ui.main.panel.listholder.SubTaskHolderPanel;
@@ -73,7 +72,7 @@ public class TaskPanel extends JPanel implements Updatable {
        var allLists = List.of(categoryHolder.getList(), subTaskHolder.getList(), dependencyHolder.getList());
        for (JList<?> list : allLists) {
            list.addListSelectionListener(e -> {
                ModeledJList<?> source = (ModeledJList<?>) e.getSource();
                JList<?> source = (JList<?>) e.getSource();

                if (source.getSelectedIndex() != -1) {
                    for (JList<?> list1 : allLists) {
+9 −5
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@ package cz.muni.fi.pv168.project.ui.main.panel.listholder;
import cz.muni.fi.pv168.project.data.task.Task;
import cz.muni.fi.pv168.project.model.db.AbstractTaskPropertyListDataModel;
import cz.muni.fi.pv168.project.ui.action.Updatable;
import cz.muni.fi.pv168.project.ui.component.ModeledJList;
import cz.muni.fi.pv168.project.ui.main.panel.CounterPanel;
import cz.muni.fi.pv168.project.ui.main.tab.ListHolder;
import org.jetbrains.annotations.Nullable;
@@ -21,7 +20,7 @@ import java.util.function.Predicate;

public abstract class AbstractHolderPanel<T> implements ListHolder<T>, Updatable {

    protected final ModeledJList<T> jList;
    protected final JList<T> jList;
    private final JPanel panel;
    private Optional<CounterPanel<T>> counterPanel = Optional.empty();

@@ -30,8 +29,12 @@ public abstract class AbstractHolderPanel<T> implements ListHolder<T>, Updatable
    protected AbstractHolderPanel(AbstractTaskPropertyListDataModel<T> model, String panelName,
                                  ListCellRenderer<T> renderer, Optional<Predicate<T>> maybeCounter) {
        this.dataModel = model;
        jList = new ModeledJList<>(renderer);
        jList.setCustomListModel(model);
        jList = new JList<T>();

        jList.setCellRenderer(renderer);
        jList.setEnabled(true);
        jList.setOpaque(false);
        jList.setModel(model);

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.fill = GridBagConstraints.BOTH;
@@ -72,7 +75,8 @@ public abstract class AbstractHolderPanel<T> implements ListHolder<T>, Updatable
    public void updateFrom(@Nullable Task task) {
        if (task != null) {
            dataModel.setParentTask(task);
            jList.setValues(dataModel.fetchAll());
            dataModel.clear();
            dataModel.addAll(dataModel.fetchAll());
        }
        counterPanel.ifPresent(CounterPanel::updateCounter);
    }