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);