OSDN Git Service

複数選択可能カテゴリで、且つ、省略不可のケースの挙動を修正
authorseraphy <seraphy@users.osdn.me>
Tue, 11 Dec 2018 17:18:06 +0000 (02:18 +0900)
committerseraphy <seraphy@users.osdn.me>
Tue, 11 Dec 2018 17:18:06 +0000 (02:18 +0900)
src/main/java/charactermanaj/ui/ImageSelectPanel.java

index 1d6c5f3..d89037f 100644 (file)
@@ -1185,11 +1185,23 @@ class PartsSelectListModel extends AbstractTableModel {
                PartsSelectRow rowModel = partsSelectRowList.get(rowIndex);
                boolean checked = ((Boolean) aValue).booleanValue();
 
-               if (!checked && rowModel.isChecked() && !deselectableAlways
-                               && !partsCategory.isOptional()) {
-                       // 省略可能でない場合、これを外すことはしない。
-                       // ただし全カテゴリでの選択解除が許可されている場合を除く。
-                       return;
+               if (!checked && rowModel.isChecked() &&
+                               !partsCategory.isOptional() && !deselectableAlways) {
+                       // チェックをはずそうしている場合、省略可能でなく、
+                       // 全カテゴリの選択解除も許可されていない場合、
+                       // 選択数が2つ以上でなければ選択解除しない。(選択数をゼロにしない)
+                       int numOfSelected = 0;
+                       int mx = partsSelectRowList.size();
+                       for (int idx = 0; idx < mx; idx++) {
+                               PartsSelectRow otherRow = partsSelectRowList.get(idx);
+                               if (otherRow.isChecked()) {
+                                       numOfSelected++;
+                               }
+                       }
+                       if (numOfSelected <= 1) {
+                               // 選択数が1未満である
+                               return;
+                       }
                }
 
                rowModel.setChecked(checked);