●プラグインサンプル3

 
001 /*
002  * PluginSample3    1.00    1999/10/15
003  *
004  * Copyright 1998-1999 (C) Justsystem Corporation
005  */
006
007 import    java.awt.*;
008 import    java.awt.event.*;
009 import    javax.swing.*;
010 import    jp.co.justsystem.ark.*;
011 import    jp.co.justsystem.ark.plugin.*;
012 import    jp.co.justsystem.jd.JDADialog;
013 import    jp.co.justsystem.util.PropertyManager;
014 import    jp.co.justsystem.util.ResourceManager;
015
016
017 /**
018  * 【プラグインサンプル3】
019  *
020  * モードレスダイアログを表示する。
021  * プラグインオプションを出す。
022  *
023  * ※このサンプルをコンパイル・実行するためには、JDK1.2.2サンプル
024  * 「Java2Demo.jar」が必要です。コンパイル時にはclasspathを通し、
025  * 実行時には「PluginSample3.jar」と同じディレクトリに置きます。
026  *
027  * @version    1.00 1999/10/15
028  */
029 public class PluginSample3 extends ArkPlugin implements UIPlugin {
030
031     /**
032      * このプラグインのID
033      */
034     private static final String ID = "plugin_sample3";
035
036     /**
037      * このプラグインのリソース
038      */
039     private static final String RESOURCE= "Resource";
040
041     /*
042      *
043      */
044     static final String RK_MENU_ITEM1    = ID + ".menu_item1";
045     static final String STR_ACTION1        = ID + ".action1";
046     static final String RK_DIALOG_TITLE    = ID + ".dialog_title";
047
048     static final String  RK_OPTION1_NAME    = ID + ".option1";
049     static final String STR_OPTION1_DEFAULT    = "Foo Bar Baz";
050     static final String  RK_OPTION2_NAME        = ID + ".option2";
051     static final String STR_OPTION2_DEFAULT    = "Ho Ge Ra";
052     static final String  RK_OPTION3_NAME            = ID + ".option3";
053     static final int     INT_OPTION3_DEFAULT        = 5;
054     static final String  RK_OPTION3_ITEM0_NAME        = ID + ".option3.item0";
055     static final String STR_OPTION3_ITEM0_DEFAULT    = "0";
056     static final String  RK_OPTION3_ITEM1_NAME        = ID + ".option3.item1";
057     static final String STR_OPTION3_ITEM1_DEFAULT    = "1";
058     static final String  RK_OPTION3_ITEM2_NAME        = ID + ".option3.item2";
059     static final String STR_OPTION3_ITEM2_DEFAULT    = "2";
060     static final String  RK_OPTION3_ITEM3_NAME        = ID + ".option3.item3";
061     static final String STR_OPTION3_ITEM3_DEFAULT    = "3";
062     static final String  RK_OPTION3_ITEM4_NAME        = ID + ".option3.item4";
063     static final String STR_OPTION3_ITEM4_DEFAULT    = "4";
064     static final String  RK_OPTION3_ITEM5_NAME        = ID + ".option3.item5";
065     static final String STR_OPTION3_ITEM5_DEFAULT    = "5";
066     static final String  RK_OPTION3_ITEM6_NAME        = ID + ".option3.item6";
067     static final String STR_OPTION3_ITEM6_DEFAULT    = "6";
068
069
070     /**
071      * リソース
072      */
073     ResourcePlugin        resource;
074
075     /**
076      * オプション
077      */
078     PluginOption[]        options;
079
080     /**
081      * メモリモニタ
082      */
083     JDADialog            dialog;
084     MemoryMonitor        monitor;
085
086
087     /**
088      * デフォルトコンストラクタ。
089      */
090     public PluginSample3() {
091     }
092
093
094     /*
095      * ---------- プラグイン基本コールバック -----------------------------------------------------
096      */
097
098     /**
099      * 初期化
100      */
101     public void init() {
102        // コンテキストを取ってくる。
103         ArkPluginContext context = getPluginContext();
104         // リソースを登録
105         resource = new PluginResourceFactory(RESOURCE, getClass().getClassLoader());
106         context.addResourcePlugin(resource);
107         // オプションを作成
108         options = new PluginOption[] {
109             new PluginOptionEditor(RK_OPTION1_NAME, STR_OPTION1_DEFAULT),
110             new PluginOptionEditor(RK_OPTION2_NAME, STR_OPTION2_DEFAULT),
111             new PluginOptionChooser(RK_OPTION3_NAME, INT_OPTION3_DEFAULT, new PluginOptionChooser.Item[] {
112                 new PluginOptionChooser.Item(RK_OPTION3_ITEM0_NAME, STR_OPTION3_ITEM0_DEFAULT),
113                 new PluginOptionChooser.Item(RK_OPTION3_ITEM1_NAME, STR_OPTION3_ITEM1_DEFAULT),
114                 new PluginOptionChooser.Item(RK_OPTION3_ITEM2_NAME, STR_OPTION3_ITEM2_DEFAULT),
115                 new PluginOptionChooser.Item(RK_OPTION3_ITEM3_NAME, STR_OPTION3_ITEM3_DEFAULT),
116                 new PluginOptionChooser.Item(RK_OPTION3_ITEM4_NAME, STR_OPTION3_ITEM4_DEFAULT),
117                 new PluginOptionChooser.Item(RK_OPTION3_ITEM5_NAME, STR_OPTION3_ITEM5_DEFAULT),
118                 new PluginOptionChooser.Item(RK_OPTION3_ITEM6_NAME, STR_OPTION3_ITEM6_DEFAULT),
119             }),
120         };
121     }
122
123     /**
124      * 利用開始
125      */
126     public void start() {
127         // コンテキストを取ってくる。
128         ArkPluginContext context = getPluginContext();
129         // UIプラグインを登録。
130         context.addUIPlugin(this);
131         // あとしまつ(念のため)
132         if (monitor != null) {
133             monitor.surf.stop();
134             monitor = null;
135         }
136         if (dialog != null) {
137             dialog.destroy();
138             dialog = null;
139         }
140         // オプションをロード
141         PropertyManager property = context.getPropertyManager();
142         String option1 = property.getString(RK_OPTION1_NAME, null);
143         if (option1 != null) {
144             options[0].setValueContent(option1);
145        }
146         String option2 = property.getString(RK_OPTION2_NAME, null);
147         if (option2 != null) {
148             options[1].setValueContent(option2);
149         }
150         String option3 = property.getString(RK_OPTION3_NAME, null);
151         if (option3 != null) {
152            options[2].setValueContent(option3);
153         }
154     }
155
156     /**
157      * 利用停止
158      */
159     public void stop() {
160         // コンテキストを取ってくる。
161         ArkPluginContext context = getPluginContext();
162         // UIプラグイン抹消。
163         context.removeUIPlugin(this);
164         // あとしまつ
165         if (monitor != null) {
166             monitor.surf.stop();
167             monitor = null;
168         }
169         if (dialog != null) {
170             dialog.destroy();
171             dialog = null;
172         }
173         // オプションをセーブ
174         PropertyManager property = context.getPropertyManager();
175         property.putString(RK_OPTION1_NAME, options[0].getValueContent().toString());
176         property.putString(RK_OPTION2_NAME, options[1].getValueContent().toString());
177         property.putString(RK_OPTION3_NAME, options[2].getValueContent().toString());
178     }
179
180     /**
181      * 破棄
182      */
183     public void destroy() {
184         // コンテキストを取ってくる。
185         ArkPluginContext context = getPluginContext();
186         // リソースを抹消。
187         context.removeResourcePlugin(resource);
188         // あとしまつ
189         resource = null;
190     }
191
192     /**
193      * IDを取得する。
194      */
195     public String getID() {
196         return ID;
197     }
198
199     /*
200      * プラグインのオプションを提供する。
201      * プラグインプロパティダイアログで使われる。
202      * オプション項目がないときはnullを返す。
203      */
204     public PluginOption[] getPluginOptions() {
205         return this.options;
206     }
207
208     /*
209      * プラグインのオプションを設定する。
210      * プラグインプロパティダイアログで設定された値が渡される。
211      */
212     public void setPluginOptions(PluginOption[] options) {
213         this.options = options;
214     }
215
216
217     /*
218      * ---------- UIプラグイン -----------------------------------------------------------------
219      */
220
221     /**
222      * Actionを登録する。
223      */
224     public Action[] getActions() {
225         Action[] actions = new Action[] {
226             new Action1(),
227         };
228         return actions;
229     }
230
231     /**
232      * MenuItemを登録する。
233      */
234     public UIPlugin.MenuItem[] getMenuItems() {
235         UIPlugin.MenuItem[] items = new UIPlugin.MenuItem[1];
236         items[0] = new UIPlugin.MenuItem(RK_MENU_ITEM1, STR_ACTION1);
237         return items;
238     }
239
240
241     /*
242      * ---------- アクション ---------------------------------------------------------------------
243      */
244
245     /**
246      * アクション1
247      */
248     public class Action1 extends AbstractAction {
249         public Action1() {
250             super(STR_ACTION1);
251         }
252         public void actionPerformed(ActionEvent ev) {
253             if (dialog != null || monitor != null) {
254                 return;
255             }
256             ArkFrameWrapper frame    = ArkActionEvent.getTargetFrame(ev);
257             // リソース
258             ResourceManager    resource = frame.getResource();
259             // ダイアログ作成
260             dialog = frame.createModelessDialog(resource.getString(RK_DIALOG_TITLE));
261             dialog.addComponentListener(new ComponentAdapter() {
262                 public void componentHidden(ComponentEvent ev) {
263                     if (monitor != null) {
264                         monitor.surf.stop();
265                         monitor = null;
266                     }
267                     if (dialog != null) {
268                         dialog.destroy();
269                         dialog = null;
270                     }
271                 }
272             });
273
274             JPanel panel = new JPanel(new BorderLayout(5, 5));
275             // 本体作成
276             buildUI(panel);
277             // 組み立て
278             _setFont(panel, frame.getUIFont());
279             dialog.getContentPane().add(panel);
280             dialog.pack();
281             // 位置決め
282             Point p = frame.getRootPoint();
283             Dimension d1 = frame.getSize();
284             Dimension d2 = dialog.getSize();
285             dialog.setLocation(p.x + (d1.width - d2.width) / 2, p.y + (d1.height - d2.height) / 2);
286             // 出現
287             monitor.surf.start();
288             dialog.setVisible(true);
289         }
290         /**
291          * ダイアログ本体領域の構築
292          */
293         public void buildUI(JPanel panel) {
294             panel.setBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4));
295             monitor = new MemoryMonitor() {
296                 public void removeNotify() {
297                     if (monitor != null) {
298                         monitor.surf.stop();
299                         monitor = null;
300                     }
301                     if (dialog != null) {
302                         dialog = null;
303                     }
304                     super.removeNotify();
305                 }
306             };
307             panel.add(monitor, BorderLayout.CENTER);
308         }
309     }
310
311     /*
312      * ---------- その他 -------------------------------------------------------------------------
313      */
314
315     /**
316      * コンポーネントにフォントをセットしていく。
317      */
318     static void _setFont(Component comp, Font f) {
319         if (comp instanceof Container) {
320             Component[] comps = ((Container)comp).getComponents();
321             for (int i = 0; i < comps.length; i++) {
322                 _setFont(comps[i], f);
323             }
324         }
325         comp.setFont(f);
326     }
327 }
328