Skip to content

Commit 81963bf

Browse files
committed
- add move capability to search history edit dialog
1 parent 1cd4956 commit 81963bf

File tree

2 files changed

+80
-5
lines changed

2 files changed

+80
-5
lines changed

src/main/java/mediathek/gui/tabs/tab_film/EditHistoryDialog.java

Lines changed: 66 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import java.awt.event.WindowAdapter;
1818
import java.awt.event.WindowEvent;
1919
import java.util.ArrayList;
20+
import java.util.function.Function;
2021

2122
/**
2223
* @author christianfranzke
@@ -26,11 +27,16 @@ public class EditHistoryDialog extends JDialog {
2627
private static final String CONFIG_Y = "edit_history.y";
2728
private static final String CONFIG_HEIGHT = "edit_history.height";
2829
private static final String CONFIG_WIDTH = "edit_history.width";
30+
private final EventList<String> eventList;
31+
private final Function<Integer,Integer> inc_op = f -> f + 1;
32+
private final Function<Integer,Integer> dec_op = f -> f - 1;
2933

3034
public EditHistoryDialog(Window owner, JMenuItem menuItem, EventList<String> eventList) {
3135
super(owner);
3236
initComponents();
3337

38+
this.eventList = eventList;
39+
3440
menuItem.setEnabled(false);
3541
addWindowListener(new WindowAdapter() {
3642
@Override
@@ -45,14 +51,15 @@ public void windowClosed(WindowEvent e) {
4551
list.getSelectionModel().addListSelectionListener(l -> {
4652
if (l.getValueIsAdjusting())
4753
return;
48-
adjustDeleteButton();
54+
adjustButtons();
4955
});
50-
adjustDeleteButton();
56+
adjustButtons();
5157

5258
btnDeleteEntries.addActionListener(l -> {
5359
var changeList = new ArrayList<String>();
60+
var listModel = list.getModel();
5461
for (var idx : list.getSelectedIndices()) {
55-
changeList.add(list.getModel().getElementAt(idx));
62+
changeList.add(listModel.getElementAt(idx));
5663
}
5764

5865
var lock = eventList.getReadWriteLock().writeLock();
@@ -66,9 +73,37 @@ public void windowClosed(WindowEvent e) {
6673
changeList.clear();
6774
});
6875

76+
btnUp.addActionListener(l -> {
77+
var idx = list.getSelectedIndex();
78+
idx = moveEntry(idx, dec_op);
79+
list.setSelectedIndex(idx);
80+
});
81+
82+
btnDown.addActionListener(l -> {
83+
var idx = list.getSelectedIndex();
84+
idx = moveEntry(idx, inc_op);
85+
list.setSelectedIndex(idx);
86+
});
87+
6988
restorePosition();
7089
}
7190

91+
private int moveEntry(int idx, Function<Integer,Integer> operator) {
92+
var lock = eventList.getReadWriteLock().writeLock();
93+
lock.lock();
94+
try {
95+
var obj = eventList.get(idx);
96+
eventList.remove(idx);
97+
idx = operator.apply(idx);
98+
eventList.add(idx, obj);
99+
}
100+
finally {
101+
lock.unlock();
102+
}
103+
104+
return idx;
105+
}
106+
72107
private void restorePosition() {
73108
var config = ApplicationConfiguration.getConfiguration();
74109
try {
@@ -102,8 +137,20 @@ private void savePosition() {
102137
}
103138
}
104139

105-
private void adjustDeleteButton() {
106-
btnDeleteEntries.setEnabled(list.getSelectionModel().getSelectedItemsCount() > 0);
140+
private void adjustButtons() {
141+
final var itemCount = list.getSelectionModel().getSelectedItemsCount();
142+
final var singleSelection = itemCount == 1;
143+
btnDeleteEntries.setEnabled(itemCount > 0);
144+
btnUp.setEnabled(singleSelection);
145+
btnDown.setEnabled(singleSelection);
146+
if (singleSelection) {
147+
//check if entry is either first or last entry
148+
var idx = list.getSelectionModel().getLeadSelectionIndex();
149+
if (idx == 0) //first
150+
btnUp.setEnabled(false);
151+
if (idx == list.getModel().getSize() - 1) //last
152+
btnDown.setEnabled(false);
153+
}
107154
}
108155

109156
private void initComponents() {
@@ -116,6 +163,10 @@ private void initComponents() {
116163
var toolBar1 = new JToolBar();
117164
btnDeleteEntries = new JButton();
118165
btnDeleteEntries.setIcon(SVGIconUtilities.createSVGIcon("icons/fontawesome/trash-can.svg")); //NON-NLS
166+
btnUp = new JButton();
167+
btnUp.setIcon(SVGIconUtilities.createSVGIcon("icons/fontawesome/arrow-up.svg")); //NON-NLS
168+
btnDown = new JButton();
169+
btnDown.setIcon(SVGIconUtilities.createSVGIcon("icons/fontawesome/arrow-down.svg")); //NON-NLS
119170

120171
//======== this ========
121172
setTitle("Suchhistorie bearbeiten"); //NON-NLS
@@ -146,6 +197,14 @@ private void initComponents() {
146197
//---- btnDeleteEntries ----
147198
btnDeleteEntries.setToolTipText("Ausgew\u00e4hlte Eintr\u00e4ge l\u00f6schen"); //NON-NLS
148199
toolBar1.add(btnDeleteEntries);
200+
201+
//---- btnUp ----
202+
btnUp.setToolTipText("Element nach oben verschieben"); //NON-NLS
203+
toolBar1.add(btnUp);
204+
205+
//---- btnDown ----
206+
btnDown.setToolTipText("Element nach unten verschieben"); //NON-NLS
207+
toolBar1.add(btnDown);
149208
}
150209
contentPanel.add(toolBar1, BorderLayout.NORTH);
151210
}
@@ -161,5 +220,7 @@ private void initComponents() {
161220
// Generated using JFormDesigner non-commercial license
162221
private JList<String> list;
163222
private JButton btnDeleteEntries;
223+
private JButton btnUp;
224+
private JButton btnDown;
164225
// JFormDesigner - End of variables declaration //GEN-END:variables @formatter:on
165226
}

src/main/java/mediathek/gui/tabs/tab_film/EditHistoryDialog.jfd

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,20 @@ new FormModel {
4646
"JavaCodeGenerator.postCreateCode": "btnDeleteEntries.setIcon(SVGIconUtilities.createSVGIcon(\"icons/fontawesome/trash-can.svg\"));"
4747
}
4848
} )
49+
add( new FormComponent( "javax.swing.JButton" ) {
50+
name: "btnUp"
51+
"toolTipText": "Element nach oben verschieben"
52+
auxiliary() {
53+
"JavaCodeGenerator.postCreateCode": "btnUp.setIcon(SVGIconUtilities.createSVGIcon(\"icons/fontawesome/arrow-up.svg\"));"
54+
}
55+
} )
56+
add( new FormComponent( "javax.swing.JButton" ) {
57+
name: "btnDown"
58+
"toolTipText": "Element nach unten verschieben"
59+
auxiliary() {
60+
"JavaCodeGenerator.postCreateCode": "btnDown.setIcon(SVGIconUtilities.createSVGIcon(\"icons/fontawesome/arrow-down.svg\"));"
61+
}
62+
} )
4963
}, new FormLayoutConstraints( class java.lang.String ) {
5064
"value": "North"
5165
} )

0 commit comments

Comments
 (0)