OSDN Git Service

コメント追加
[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(File original_file) {
43                 int original_index = -1;
44                 int index = 1;
45                 // リストクリア
46                 List.clear();
47                 // ファイルリスト更新
48                 File[] file_array = OPTION_FOLDER.listFiles();
49                 if(file_array != null){
50                         for (int i = 0; i < file_array.length; i++) {
51                                 File file = file_array[i];
52                                 if (file.getName().endsWith(".xml")) {
53                                         List.add(new FFmpegSelectedItem(index, file, null));
54                                         // 前回示していたのと同じファイルを発見。
55                                         if (original_index < 0 && file.equals(original_file)) {
56                                                 original_index = index;
57                                         }
58                                         index++;
59                                 }
60                         }
61                 }
62                 // 初期化
63                 if (original_index < 0) {
64                         Index = 0;
65                 } else {
66                         Index = original_index;
67                 }
68                 Size = index;
69                 this.fireContentsChanged(this, 0, Size);
70         }
71
72         /**
73          * 選ばれているオブジェクトを返す
74          */
75     @Override
76         public FFmpegSelectedItem getSelectedItem() {
77                 return getElementAt(Index);
78         }
79
80         public File getSelectedFile() {
81                 if (Index == 0) {
82                         return null;
83                 } else {
84                         return List.get(Index - 1).getFile();
85                 }
86         }
87
88         /**
89          * オブジェクトから、インデックスを探す。
90          */
91     @Override
92         public void setSelectedItem(Object anItem) {
93                 if (anItem == null) {
94                         Index = 0;
95                         return;
96                 }
97                 FFmpegSelectedItem item = (FFmpegSelectedItem) anItem;
98                 Index = item.getIndex();
99         }
100
101         /**
102          * インデックスからオブジェクトを返す。
103          */
104     @Override
105         public FFmpegSelectedItem getElementAt(int index) {
106                 if (index == 0) {
107                         return DEFAULT_ITEM;
108                 } else if (index < Size) {
109                         return List.get(index - 1);
110                 } else {
111                         return null;
112                 }
113         }
114
115         /**
116          * サイズを返す。
117          */
118
119     @Override
120         public int getSize() {
121                 return Size;
122         }
123
124         public boolean isFile() {
125                 if (Index == 0) {
126                         return false;
127                 } else {
128                         return true;
129                 }
130         }
131
132 }