OSDN Git Service

Merge remote-tracking branch 'origin/master'
[coroid/inqubus.git] / frontend / src / saccubus / OptionComboBoxModel.java
1 /**
2  *
3  */
4 package saccubus;
5
6 import java.io.File;
7 import java.util.ArrayList;
8
9 import javax.swing.DefaultComboBoxModel;
10
11
12 /**
13  * @author Account01
14  *
15  */
16 public final class OptionComboBoxModel extends DefaultComboBoxModel<FFmpegSelectedItem> {
17         /**
18          *
19          */
20         private static final long serialVersionUID = -8948187216195366156L;
21
22         private final ArrayList<FFmpegSelectedItem> List = new ArrayList<>(
23                         20);
24
25         private int Size = 0;
26
27         private int Index = 0;
28
29         public OptionComboBoxModel() {
30                 File original_file = getSelectedItem().getFile();
31                 reload(original_file);
32         }
33
34         /**
35          * ファイル読み込みその他を行う
36          */
37     private static final File OPTION_FOLDER = new File("option");
38
39         private static final FFmpegSelectedItem DEFAULT_ITEM = new FFmpegSelectedItem(
40                         0, null, "外部ファイルを用いず、下に直接入力する。");
41
42         public void reload() {
43                 final File original_file = getSelectedItem().getFile();
44                 reload(original_file);
45         }
46
47         public void reload(File original_file) {
48                 int original_index = -1;
49                 int index = 1;
50                 // リストクリア
51                 List.clear();
52                 // ファイルリスト更新
53                 File[] file_array = OPTION_FOLDER.listFiles();
54                 if(file_array != null){
55                         for (int i = 0; i < file_array.length; i++) {
56                                 File file = file_array[i];
57                                 if (file.getName().endsWith(".xml")) {
58                                         List.add(new FFmpegSelectedItem(index, file, null));
59                                         // 前回示していたのと同じファイルを発見。
60                                         if (original_index < 0 && file.equals(original_file)) {
61                                                 original_index = index;
62                                         }
63                                         index++;
64                                 }
65                         }
66                 }
67                 // 初期化
68                 if (original_index < 0) {
69                         Index = 0;
70                 } else {
71                         Index = original_index;
72                 }
73                 Size = index;
74                 this.fireContentsChanged(this, 0, Size);
75         }
76
77         /**
78          * 選ばれているオブジェクトを返す
79          */
80     @Override
81         public FFmpegSelectedItem getSelectedItem() {
82                 return getElementAt(Index);
83         }
84
85         public File getSelectedFile() {
86                 if (Index == 0) {
87                         return null;
88                 } else {
89                         return List.get(Index - 1).getFile();
90                 }
91         }
92
93         /**
94          * オブジェクトから、インデックスを探す。
95          */
96     @Override
97         public void setSelectedItem(Object anItem) {
98                 if (anItem == null) {
99                         Index = 0;
100                         return;
101                 }
102                 FFmpegSelectedItem item = (FFmpegSelectedItem) anItem;
103                 Index = item.getIndex();
104         }
105
106         /**
107          * インデックスからオブジェクトを返す。
108          */
109     @Override
110         public FFmpegSelectedItem getElementAt(int index) {
111                 if (index == 0) {
112                         return DEFAULT_ITEM;
113                 } else if (index < Size) {
114                         return List.get(index - 1);
115                 } else {
116                         return null;
117                 }
118         }
119
120         /**
121          * サイズを返す。
122          */
123
124     @Override
125         public int getSize() {
126                 return Size;
127         }
128
129         public boolean isFile() {
130                 if (Index == 0) {
131                         return false;
132                 } else {
133                         return true;
134                 }
135         }
136
137 }