diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityHeader.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityHeader.java index 7a435e6..54655c9 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityHeader.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityHeader.java @@ -20,7 +20,7 @@ public class ActivityHeader extends JPanel { public static final Dimension PREFERRED_SIZE4 = new Dimension(40, 40); public static final Dimension PREFERRED_SIZE2 = new Dimension(100, 40); - private TTextField sortkey = new TTextField("Sortkey"); + //private TTextField sortkey = new TTextField("Sortkey"); private TTextField name = new TTextField("Name"); private TTextField comment = new TTextField("Comment"); private TTextField ticket = new TTextField("Ticket"); @@ -35,7 +35,7 @@ public class ActivityHeader extends JPanel { public ActivityHeader() { this.setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0)); - add(sortkey); + //add(sortkey); add(name); add(comment); add(ticket); @@ -47,7 +47,7 @@ public class ActivityHeader extends JPanel { add(done); add(todo); - sortkey.setPreferredSize(PREFERRED_SIZE1); + //sortkey.setPreferredSize(PREFERRED_SIZE1); name.setPreferredSize(PREFERRED_SIZE); comment.setPreferredSize(PREFERRED_SIZE); ticket.setPreferredSize(PREFERRED_SIZE1); @@ -59,7 +59,7 @@ public class ActivityHeader extends JPanel { done.setPreferredSize(PREFERRED_SIZE3); todo.setPreferredSize(PREFERRED_SIZE3); - sortkey.setEditable(false); + //sortkey.setEditable(false); name.setEditable(false); comment.setEditable(false); ticket.setEditable(false); @@ -71,7 +71,7 @@ public class ActivityHeader extends JPanel { done.setEditable(false); todo.setEditable(false); - sortkey.setFont(FONT); + //sortkey.setFont(FONT); name.setFont(FONT); comment.setFont(FONT); ticket.setFont(FONT); @@ -83,7 +83,7 @@ public class ActivityHeader extends JPanel { done.setFont(FONT); todo.setFont(FONT); - sortkey.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); + //sortkey.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); name.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); comment.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); ticket.setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); @@ -98,5 +98,6 @@ public class ActivityHeader extends JPanel { //this.setBorder(BorderFactory.createLineBorder(Color.ORANGE, 1)); setAlignmentX(LEFT_ALIGNMENT); + //sortkey.setVisible(false); } } diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityPanel.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityPanel.java index 0c2d553..e86f860 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityPanel.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/ActivityPanel.java @@ -17,6 +17,7 @@ import java.awt.FlowLayout; import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.StringSelection; +import java.util.List; import java.util.function.BiConsumer; /** @@ -93,7 +94,7 @@ public class ActivityPanel extends JPanel implements Comparable { @Getter private final Activity activity; - private final TTextField sortkey; + //private final TTextField sortkey; private final TTextField name; private final TTextField comment; private final TTextField ticket; @@ -121,7 +122,7 @@ public class ActivityPanel extends JPanel implements Comparable { { this.subject = new TTextFieldForActivityPanel("", "subject"); this.totalComment = new TTextFieldForActivityPanel("", "totalComment"); - this.sortkey = new TTextFieldForActivityPanel("1", "sortkey", (a, r)->a.setSortkey(Integer.parseInt(r)), true); + //this.sortkey = new TTextFieldForActivityPanel("1", "sortkey", (a, r)->a.setSortkey(Integer.parseInt(r)), true); this.name = new TTextFieldForActivityPanel("", "name", (a, r)->{a.setName(r);getSubject().setText(a.createSubject());}, false); this.comment = new TTextFieldForActivityPanel("", "comment", (a, r)->{a.setComment(r);getTotalComment().setText(a.createTotalComment());}, false); this.ticket = new TTextFieldForActivityPanel("", "ticket", @@ -143,7 +144,7 @@ public class ActivityPanel extends JPanel implements Comparable { } this.dayPanel = dayPanel; - add(sortkey); + //add(sortkey); add(name); add(comment); add(ticket); @@ -154,23 +155,27 @@ public class ActivityPanel extends JPanel implements Comparable { add(totalComment); add(today); add(remains); + //sortkey.setVisible(false); name.setHorizontalAlignment(JTextField.LEFT); comment.setHorizontalAlignment(JTextField.LEFT); ticket.setHorizontalAlignment(JTextField.LEFT); JButton copyButton = new SmallTButton("Copy"); JButton deleteButton = new SmallTButton("Delete"); - JButton moveButton = new SmallTButton("Move"); + JButton moveThisButton = new SmallTButton("Move this"); + JButton moveBeforeButton = new SmallTButton("Move before"); add(copyButton); add(deleteButton); - add(moveButton); + add(moveThisButton); + add(moveBeforeButton); copyButton.setFont(SwingUtils.SMALL_FONT); deleteButton.setFont(SwingUtils.SMALL_FONT); - moveButton.setFont(SwingUtils.SMALL_FONT); + moveThisButton.setFont(SwingUtils.SMALL_FONT); + moveBeforeButton.setFont(SwingUtils.SMALL_FONT); - sortkey.setPreferredSize(PREFERRED_SIZE1); + //sortkey.setPreferredSize(PREFERRED_SIZE1); name.setPreferredSize(PREFERRED_SIZE); comment.setPreferredSize(PREFERRED_SIZE); ticket.setPreferredSize(PREFERRED_SIZE1); @@ -184,10 +189,11 @@ public class ActivityPanel extends JPanel implements Comparable { copyButton.setPreferredSize(PREFERRED_SIZE4); deleteButton.setPreferredSize(PREFERRED_SIZE4); - moveButton.setPreferredSize(PREFERRED_SIZE4); + moveThisButton.setPreferredSize(PREFERRED_SIZE1); + moveBeforeButton.setPreferredSize(PREFERRED_SIZE1); this.setPreferredSize(new Dimension(getWidth(), 40)); - sortkey.setText(String.valueOf(activity.getSortkey())); + //sortkey.setText(String.valueOf(activity.getSortkey())); name.setText(activity.getName()); comment.setText(activity.getComment()); ticket.setText(activity.getTicket()); @@ -218,16 +224,74 @@ public class ActivityPanel extends JPanel implements Comparable { copyButton.addActionListener(e -> { activityRepository.putToClipboard(this.activity); }); - moveButton.addActionListener(e-> { + moveThisButton.addActionListener(e-> { this.dayPanel.markActivityPanelToBeMoved(this); }); + + moveBeforeButton.addActionListener(e-> { + if(dayPanel.getMarkActivityPanelToBeMoved() == null) { + //nothing to do + return; + } + List list = dayPanel.getActivities(); + Activity activityToBeMoved = activityRepository.read(dayPanel.getMarkActivityPanelToBeMoved().getActivity().getId()); + Activity activityTarget = activityRepository.read(activity.getId()); + int activityTargetSortkey = activityTarget.getSortkey(); + int newSortKey = activityToBeMoved.getSortkey(); + for(int i = 0; i < list.size(); i++) { + if(activityToBeMoved.getSortkey() == activityTarget.getSortkey()) { + //nothing to do + break; + } + if(i >= 1 && activityToBeMoved.getSortkey() == activityTarget.getSortkey()) { + //nothing to do + break; + } + if(list.get(i).getId().equals(activityTarget.getId())) { + Activity activityBefore = i == 0 ? null : list.get(i - 1); + if(activityBefore != null && activityBefore.getId().equals(activityToBeMoved.getId())) { + //nothing to do + break; + } + int activityBeforeSortkey = activityBefore == null ? activityTargetSortkey : activityBefore.getSortkey(); + int start = activityBeforeSortkey + 1; + int end = activityTargetSortkey - 1; + if(start > end) { + start = end; + } + if(start == end) { + newSortKey = end; + break; + } + newSortKey = start + (end - start) / 2; + if(newSortKey > activityTargetSortkey) { + newSortKey = activityTargetSortkey; + } + break; + } + + } + int oldSortkey = activityToBeMoved.getSortkey(); + if(oldSortkey != newSortKey) { + activityToBeMoved.setSortkey(newSortKey); + } + ActivityPanel activityPanelForActivity = + dayPanel.getActivityPanelForActivity(activityToBeMoved); + activityPanelForActivity.getActivity().setSortkey(newSortKey); +// activityPanelForActivity.getSortkeyTTextField().setText( +// String.valueOf(newSortKey)); + activityRepository.update(activityToBeMoved); + dayPanel.sortActivityPanels(); + + + }); } @Override public int compareTo(ActivityPanel o) { return this.getActivity().compareTo(o.getActivity()); } - public TTextField getSortkeyTTextField() { - return sortkey; - } +// public TTextField getSortkeyTTextField() { +// return sortkey; +// } } diff --git a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/DayPanel.java b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/DayPanel.java index c13d0f5..93b3369 100644 --- a/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/DayPanel.java +++ b/modules/time-calc-app/src/main/java/org/nanoboot/utils/timecalc/swing/common/DayPanel.java @@ -1,5 +1,6 @@ package org.nanoboot.utils.timecalc.swing.common; +import lombok.Getter; import org.nanoboot.utils.timecalc.entity.Activity; import org.nanoboot.utils.timecalc.persistence.api.ActivityRepositoryApi; import org.nanoboot.utils.timecalc.utils.common.NumberFormats; @@ -44,66 +45,9 @@ public class DayPanel extends JPanel { private JButton loadButton; private JScrollPane scrollPane; private JPanel panelInsideScrollPane; + @Getter private ActivityPanel markActivityPanelToBeMoved = null; - class MoveHereButton extends JButton { - public MoveHereButton(String activityId) { - setText("Move here"); - setMaximumSize(MAXIMUM_SIZE_2); - putClientProperty(FOR_ACTIVITY_ID, activityId); - setVisible(true); - addActionListener(e-> { - List list = getActivities(); - Activity activityToBeMoved = activityRepository.read(markActivityPanelToBeMoved.getActivity().getId()); - Activity activityTarget = activityRepository.read(activityId); - int activityTargetSortkey = activityTarget.getSortkey(); - int newSortKey = activityToBeMoved.getSortkey(); - for(int i = 0; i < list.size(); i++) { - if(activityToBeMoved.getSortkey() == activityTarget.getSortkey()) { - //nothing to do - break; - } - if(i >= 1 && activityToBeMoved.getSortkey() == activityTarget.getSortkey()) { - //nothing to do - break; - } - if(list.get(i).getId().equals(activityTarget.getId())) { - Activity activityBefore = i == 0 ? null : list.get(i - 1); - int activityBeforeSortkey = activityBefore == null ? activityTargetSortkey : activityBefore.getSortkey(); - int start = activityBeforeSortkey + 1; - int end = activityTargetSortkey - 1; - if(start > end) { - start = end; - } - if(start == end) { - newSortKey = end; - break; - } - newSortKey = start + (end - start) / 2; - if(newSortKey > activityTargetSortkey) { - newSortKey = activityTargetSortkey; - } - break; - } - - } - activityToBeMoved.setSortkey(newSortKey); - ActivityPanel activityPanelForActivity = - getActivityPanelForActivity(activityToBeMoved); - activityPanelForActivity.getActivity().setSortkey(newSortKey); - activityPanelForActivity.getSortkeyTTextField().setText( - String.valueOf(newSortKey)); - activityRepository.update(activityToBeMoved); - sortActivityPanels(); - - - }); - } - public String getActivityId() { - return (String) getClientProperty(FOR_ACTIVITY_ID); - } - } - public DayPanel(String yearIn, String monthIn, String dayIn, ActivityRepositoryApi activityRepository) { super(); @@ -190,11 +134,6 @@ public class DayPanel extends JPanel { comp.setMaximumSize(new Dimension(1300, 40)); add(comp); activityRepository.create(newActivity); - if(this.markActivityPanelToBeMoved != null) { - panelInsideScrollPane.add(new MoveHereButton(newActivity.getId())); - } else { - //comp.setBorder(BorderFactory.createEmptyBorder(0, 0, 20, 0)); - } panelInsideScrollPane.add(comp); revalidate(); @@ -212,11 +151,7 @@ public class DayPanel extends JPanel { comp.setMaximumSize(new Dimension(1200, 40)); add(comp); activityRepository.create(newActivity); - if(this.markActivityPanelToBeMoved != null) { - panelInsideScrollPane.add(new MoveHereButton(newActivity.getId())); - } else { - //comp.setBorder(BorderFactory.createEmptyBorder(20, 0, 0, 0)); - } + panelInsideScrollPane.add(comp); revalidate(); @@ -296,11 +231,7 @@ public class DayPanel extends JPanel { .stream(panelInsideScrollPane.getComponents()) .filter(c-> c instanceof ActivityPanel).filter(c-> !((ActivityPanel)c).isDeleted()).forEach(e-> list.add((ActivityPanel) e)); Collections.sort(list); - Arrays - .stream(panelInsideScrollPane.getComponents()) - .filter(c-> {return (c instanceof MoveHereButton);}).forEach(c-> panelInsideScrollPane.remove(c)); - //.filter(c -> getClientProperty( FOR_ACTIVITY_ID) != null) for(ActivityPanel ap:list) { panelInsideScrollPane.remove(ap); } @@ -324,7 +255,7 @@ public class DayPanel extends JPanel { sortkey = sortkey + sortkeySpace; ap.getActivity().setSortkey(sortkey); activityRepository.update(ap.getActivity()); - ap.getSortkeyTTextField().setText(String.valueOf(sortkey)); +// ap.getSortkeyTTextField().setText(String.valueOf(sortkey)); } } @@ -340,16 +271,7 @@ public class DayPanel extends JPanel { TTime todoTTime = TTime.ofMilliseconds((int) (todo * 60d * 60d * 1000d)); ap.remains.setText(todoTTime.toString().substring(0,todoTTime.isNegative() ? 6 : 5)); - { - if(this.markActivityPanelToBeMoved != null) { - MoveHereButton mhb = - new MoveHereButton(ap.getActivity().getId()); - panelInsideScrollPane.add(mhb); - } else { -// Component mhb = new MoveHereButton(ap.getActivity().getId()); -// panelInsideScrollPane.add(mhb); - } - } + panelInsideScrollPane.add(ap); ap.setVisible(false); ap.setVisible(true); @@ -361,19 +283,9 @@ public class DayPanel extends JPanel { } public void markActivityPanelToBeMoved(ActivityPanel activityPanel) { - boolean moveHereButtonsExist = Arrays - .stream(panelInsideScrollPane.getComponents()) - .filter(c-> {return (c instanceof MoveHereButton);}).findFirst().isPresent(); boolean deletion = this.markActivityPanelToBeMoved == activityPanel; - boolean enabling = this.markActivityPanelToBeMoved == null && activityPanel != null; this.markActivityPanelToBeMoved = deletion ? null : activityPanel; - if(moveHereButtonsExist && deletion) { - sortActivityPanels(); - } - if(!moveHereButtonsExist && enabling) { - sortActivityPanels(); - } - + this.markActivityPanelToBeMoved = activityPanel; } }