RestPanel.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package org.leumasjaffe.recipe.view;
  2. import javax.swing.JPanel;
  3. import org.leumasjaffe.observer.ObservableController;
  4. import org.leumasjaffe.observer.ObservableListener;
  5. import org.leumasjaffe.observer.ObserverDispatch;
  6. import org.leumasjaffe.recipe.model.Rest;
  7. import lombok.AccessLevel;
  8. import lombok.experimental.FieldDefaults;
  9. import java.awt.GridBagLayout;
  10. import javax.swing.JComboBox;
  11. import javax.swing.JFormattedTextField;
  12. import javax.swing.JLabel;
  13. import java.awt.GridBagConstraints;
  14. import java.awt.Insets;
  15. @SuppressWarnings("serial")
  16. @FieldDefaults(level=AccessLevel.PRIVATE)
  17. public class RestPanel extends JPanel {
  18. ObservableListener<JFormattedTextField, Rest> durationController;
  19. ObservableListener<JFormattedTextField, Rest> upToController;
  20. JComboBox<Rest.Where> jcbLocation;
  21. DurationPanel panelDuration;
  22. DurationPanel panelUpTo;
  23. // TODO
  24. Rest model;
  25. public RestPanel() {
  26. GridBagLayout gridBagLayout = new GridBagLayout();
  27. gridBagLayout.columnWidths = new int[]{0, 0, 0, 0, 0};
  28. gridBagLayout.rowHeights = new int[]{0, 0};
  29. gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
  30. gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE};
  31. setLayout(gridBagLayout);
  32. JLabel lblRest = new JLabel("Rest");
  33. GridBagConstraints gbc_lblRest = new GridBagConstraints();
  34. gbc_lblRest.insets = new Insets(0, 0, 0, 5);
  35. gbc_lblRest.gridx = 0;
  36. gbc_lblRest.gridy = 0;
  37. add(lblRest, gbc_lblRest);
  38. jcbLocation = new JComboBox<>(Rest.Where.values());
  39. GridBagConstraints gbc_lblLocation = new GridBagConstraints();
  40. gbc_lblLocation.insets = new Insets(0, 0, 0, 5);
  41. gbc_lblLocation.gridx = 1;
  42. gbc_lblLocation.gridy = 0;
  43. add(jcbLocation, gbc_lblLocation);
  44. panelDuration = new DurationPanel("");
  45. GridBagConstraints gbc_panelDuration = new GridBagConstraints();
  46. gbc_panelDuration.gridx = 2;
  47. gbc_panelDuration.gridy = 0;
  48. add(panelDuration, gbc_panelDuration);
  49. panelUpTo = new DurationPanel("and up to");
  50. GridBagConstraints gbc_panelUpTo = new GridBagConstraints();
  51. gbc_panelUpTo.gridx = 3;
  52. gbc_panelUpTo.gridy = 0;
  53. add(panelUpTo, gbc_panelUpTo);
  54. jcbLocation.addItemListener(e -> {
  55. panelDuration.txtTime.setEditable(isResting());
  56. panelUpTo.txtTime.setEditable(isResting());
  57. this.model.setWhere(Rest.Where.class.cast(e.getItem()));
  58. });
  59. durationController = ObservableController.from(panelDuration.txtTime,
  60. Rest::getDuration, Rest::setDuration);
  61. upToController = ObservableController.from(panelUpTo.txtTime,
  62. Rest::getUpTo, Rest::setUpTo);
  63. panelDuration.txtTime.setEditable(false);
  64. panelUpTo.txtTime.setEditable(false);
  65. }
  66. public RestPanel(final Rest rest) {
  67. this();
  68. setModel(rest);
  69. }
  70. public void setModel(final Rest rest) {
  71. this.model = rest;
  72. jcbLocation.setSelectedItem(rest.getWhere());
  73. durationController.setObserved(rest);
  74. upToController.setObserved(rest);
  75. }
  76. @Override
  77. public void setEnabled(boolean enabled) {
  78. super.setEnabled(enabled);
  79. setVisible(enabled || isResting());
  80. jcbLocation.setEnabled(enabled);
  81. panelDuration.txtTime.setEditable(enabled && isResting());
  82. panelUpTo.txtTime.setEditable(enabled && isResting());
  83. }
  84. @Override
  85. public void removeNotify() {
  86. super.removeNotify();
  87. ObserverDispatch.unsubscribeAll(durationController);
  88. }
  89. private boolean isResting() {
  90. return !jcbLocation.getSelectedItem().equals(Rest.Where.NONE);
  91. }
  92. }