OSDN Git Service

新聞形式の描画速度向上施策
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / AbsPaperColorsDialog.java
1 package tainavi;\r
2 \r
3 import java.awt.BorderLayout;\r
4 import java.awt.Color;\r
5 import java.awt.Component;\r
6 import java.awt.Dimension;\r
7 import java.awt.Point;\r
8 import java.awt.event.ActionEvent;\r
9 import java.awt.event.ActionListener;\r
10 import java.awt.event.MouseAdapter;\r
11 import java.awt.event.MouseEvent;\r
12 import java.awt.event.WindowAdapter;\r
13 import java.awt.event.WindowEvent;\r
14 import java.util.ArrayList;\r
15 \r
16 import javax.swing.DefaultCellEditor;\r
17 import javax.swing.JButton;\r
18 import javax.swing.JCheckBox;\r
19 import javax.swing.JDialog;\r
20 import javax.swing.JLabel;\r
21 import javax.swing.JPanel;\r
22 import javax.swing.JScrollPane;\r
23 import javax.swing.JTabbedPane;\r
24 import javax.swing.JTable;\r
25 import javax.swing.ListSelectionModel;\r
26 import javax.swing.ScrollPaneConstants;\r
27 import javax.swing.SpringLayout;\r
28 import javax.swing.SwingUtilities;\r
29 import javax.swing.table.DefaultTableCellRenderer;\r
30 import javax.swing.table.DefaultTableColumnModel;\r
31 import javax.swing.table.DefaultTableModel;\r
32 import javax.swing.table.TableCellRenderer;\r
33 import javax.swing.table.TableColumn;\r
34 \r
35 import tainavi.Env.AAMode;\r
36 import tainavi.JTXTButton.FontStyle;\r
37 import tainavi.TVProgram.ProgGenre;\r
38 \r
39 \r
40 abstract class AbsPaperColorsDialog extends JEscCancelDialog {\r
41 \r
42         private static final long serialVersionUID = 1L;\r
43         \r
44         private static boolean debug = false;\r
45 \r
46         \r
47         /*******************************************************************************\r
48          * 抽象メソッド\r
49          ******************************************************************************/\r
50         \r
51         protected abstract Env getEnv();\r
52         protected abstract Bounds getBoundsEnv();\r
53         protected abstract PaperColorsMap getPaperColorMap();\r
54 \r
55         protected abstract VWColorChooserDialog getCCWin();\r
56 \r
57         protected abstract void updatePaperColors(Env ec, PaperColorsMap pc);\r
58         protected abstract void updatePaperFonts(Env ec);\r
59         protected abstract void updatePaperBounds(Env ec, Bounds bc);\r
60         protected abstract void updatePaperRepaint();\r
61 \r
62         \r
63         /*******************************************************************************\r
64          * 呼び出し元から引き継いだもの\r
65          ******************************************************************************/\r
66         \r
67         private final Env origenv = getEnv();\r
68         private final Bounds origbnd = getBoundsEnv();\r
69         private final PaperColorsMap origpc = getPaperColorMap();\r
70         \r
71         private final VWColorChooserDialog ccwin = getCCWin();\r
72         \r
73         private final Env tmpenv = new Env();\r
74         private final Bounds tmpbnd = new Bounds();\r
75         private final PaperColorsMap tmppc = new PaperColorsMap();\r
76         \r
77         \r
78         /*******************************************************************************\r
79          * 定数\r
80          ******************************************************************************/\r
81 \r
82         private static final int STEPBY = 10;\r
83         \r
84         private static final int SEP_WIDTH = 10;\r
85         private static final int SEP_WIDTH_NARROW = 2;\r
86         private static final int SEP_HEIGHT = 5;\r
87         private static final int SEP_HEIGHT_NARROW = 2;\r
88         \r
89         //private static final int PARTS_WIDTH = 900;\r
90         private static final int PARTS_HEIGHT = 30;\r
91         \r
92         private static final int LABEL_WIDTH = 125;\r
93         private static final int ITEM_WIDTH = 250;\r
94         private static final int TITLE_WIDTH = LABEL_WIDTH+ITEM_WIDTH;\r
95         \r
96         private static final int BUTTON_WIDTH = 100;\r
97         \r
98         private static final int PANEL_WIDTH = LABEL_WIDTH+ITEM_WIDTH+SEP_WIDTH*2;\r
99         private static int PANEL_HEIGHT = 0;\r
100         \r
101         private static final int TABLE_WIDTH = PANEL_WIDTH-SEP_WIDTH*2;\r
102         private static final int TABLE_HEIGHT = 260;\r
103         \r
104         private static final int STYLETABLE_HEIGHT = 80;\r
105         \r
106         private static final int TIMEBAR_WIDTH = TABLE_WIDTH/4;\r
107         \r
108         \r
109         /*******************************************************************************\r
110          * 部品\r
111          ******************************************************************************/\r
112         \r
113         private JPanel jPanel = null;\r
114         \r
115         private JTabbedPane jTabbedPane = null;\r
116         \r
117         private JPanel jPanel_buttons = null;\r
118         private JButton jButton_preview = null;\r
119         private JButton jButton_update = null;\r
120         private JButton jButton_cancel = null;\r
121         \r
122         // ジャンル別背景色のタブ\r
123         private JPanel jPanel_pColors = null;\r
124         private JScrollPane jScrollPane_list = null;\r
125         private JNETable jTable_list = null;\r
126         private DefaultTableModel jTableModel_list = null;\r
127         private JCCLabel jLabel_timebar = null;\r
128         private JCCLabel jLabel_timebar2 = null;\r
129         private JCCLabel jLabel_timebar3 = null;\r
130         private JCCLabel jLabel_timebar4 = null;\r
131         private JCheckBoxPanel jCBP_highlight = null;\r
132         private JCCLabel jLabel_highlight = null;\r
133         \r
134         // フォント設定のタブ\r
135         private JPanel jPanel_fonts = null;\r
136         private JCheckBoxPanel jCBP_showStart = null;\r
137         private JComboBoxPanel jCBX_titleFont = null;\r
138         private JSliderPanel jSP_titleFontSize = null;\r
139         private JCCLabel jLabel_titleFontColor = null;\r
140         private JScrollPane jScrollPane_titleFontStyle = null;\r
141         private JCheckBoxPanel jCBP_showDetail = null;\r
142         private JComboBoxPanel jCBX_detailFont = null;\r
143         private JSliderPanel jSP_detailFontSize = null;\r
144         private JCCLabel jLabel_detailFontColor = null;\r
145         private JScrollPane jScrollPane_detailFontStyle = null;\r
146         private JSliderPanel jSP_detailTab = null;\r
147         private JComboBoxPanel jCBX_aaMode = null;\r
148         \r
149         // サイズのタブ\r
150         private JPanel jPanel_bounds = null;\r
151         private JSliderPanel jSP_width = null;\r
152         private JSliderPanel jSP_height = null;\r
153         private JSliderPanel jSP_timebarPosition = null;\r
154         private JCCLabel jLabel_execon = null;\r
155         private JCCLabel jLabel_execoff = null;\r
156         private JCCLabel jLabel_pickup = null;\r
157         private JCCLabel jLabel_pickupFont = null;\r
158         private JCCLabel jLabel_matchedBorderColor = null;\r
159         private JSliderPanel jSP_matchedBorderThickness = null;\r
160         //private JCheckBoxPanel jCBP_lightProgramView = null;\r
161         \r
162         \r
163         /*******************************************************************************\r
164          * コンストラクタ\r
165          ******************************************************************************/\r
166         \r
167         public AbsPaperColorsDialog() {\r
168                 //\r
169                 super();\r
170                 //\r
171                 this.setModal(true);\r
172                 //\r
173                 this.addWindowListener(new WindowAdapter() {\r
174                         @Override\r
175                         public void windowClosing(WindowEvent e) {\r
176                                 doCancel();\r
177                         }\r
178                 });\r
179 \r
180                 this.setContentPane(getJPanel());\r
181                 this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);     // 閉じるときはキャンセルボタンを使ってクレ\r
182                 \r
183                 this.pack();\r
184                 this.setResizable(false);\r
185                 \r
186                 this.setTitle("新聞形式の表示設定");\r
187         }\r
188 \r
189         \r
190         /*******************************************************************************\r
191          * アクション\r
192          ******************************************************************************/\r
193         \r
194         private void doPreview() {\r
195                 getColors(tmpenv,tmppc);\r
196                 getFonts(tmpenv);\r
197                 getBounds(tmpenv,tmpbnd);\r
198                 \r
199                 updatePaperColors(tmpenv,tmppc);\r
200                 updatePaperFonts(tmpenv);\r
201                 updatePaperBounds(tmpenv,tmpbnd);\r
202                 \r
203                 updatePaperRepaint();\r
204         }\r
205         \r
206         private void doUpdate() {\r
207                 getColors(origenv,origpc);\r
208                 getFonts(origenv);\r
209                 getBounds(origenv,origbnd);\r
210                 \r
211                 updatePaperFonts(origenv);\r
212                 updatePaperColors(origenv,origpc);\r
213                 updatePaperBounds(origenv,origbnd);\r
214                 \r
215                 updatePaperRepaint();\r
216                 \r
217                 origpc.save();\r
218                 origenv.save();\r
219                 origbnd.save();\r
220 \r
221                 setVisible(false);\r
222         }\r
223         \r
224         @Override\r
225         protected void doCancel() {\r
226                 updatePaperColors(origenv,origpc);\r
227                 updatePaperFonts(origenv);\r
228                 updatePaperBounds(origenv,origbnd);\r
229                 \r
230                 updatePaperRepaint();\r
231                 \r
232                 setVisible(false);\r
233         }\r
234 \r
235         /*\r
236          * メソッド\r
237          */\r
238 \r
239         //\r
240         @Override\r
241         public void setVisible(boolean b) {\r
242                 if (b) {\r
243                         if (debug) {\r
244                                 for ( ProgGenre key : origpc.keySet() ) {\r
245                                         System.err.println("[DEBUG] before orig papercolorsmap "+key+"="+origpc.get(key));\r
246                                 }\r
247                         }\r
248                         FieldUtils.deepCopy(tmpenv, origenv);\r
249                         FieldUtils.deepCopy(tmpbnd, origbnd);\r
250                         FieldUtils.deepCopy(tmppc, origpc);\r
251                         setColors();\r
252                         setFonts();\r
253                         setBounds();\r
254                 }\r
255                 else {\r
256                         if (debug) {\r
257                                 for ( ProgGenre key : origpc.keySet() ) {\r
258                                         System.err.println("[DEBUG] after orig papercolorsmap "+key+"="+origpc.get(key));\r
259                                 }\r
260                         }\r
261                 }\r
262                 super.setVisible(b);\r
263         }\r
264         \r
265         //\r
266         private void getColors(Env toe, PaperColorsMap top) {\r
267                 for ( int row=0; row<jTable_list.getRowCount(); row++ ) {\r
268                         TVProgram.ProgGenre g = (ProgGenre) jTable_list.getValueAt(row, 0);\r
269                         Color c = CommonUtils.str2color((String) jTable_list.getValueAt(row, 1));\r
270                         top.put(g, c);\r
271                 }\r
272                 toe.setTimebarColor(jLabel_timebar.getChoosed());\r
273                 toe.setTimebarColor2(jLabel_timebar2.getChoosed());\r
274                 toe.setTimebarColor3(jLabel_timebar3.getChoosed());\r
275                 toe.setTimebarColor4(jLabel_timebar4.getChoosed());\r
276                 toe.setEnableHighlight(jCBP_highlight.isSelected());\r
277                 toe.setHighlightColor(jLabel_highlight.getChoosed());\r
278         }\r
279         \r
280         //\r
281         private void getFonts(Env to) {\r
282                 to.setShowStart(jCBP_showStart.isSelected());\r
283                 to.setTitleFont((String) jCBX_titleFont.getSelectedItem());\r
284                 to.setTitleFontSize(jSP_titleFontSize.getValue());\r
285                 to.setTitleFontColor(jLabel_titleFontColor.getChoosed());\r
286                 to.setTitleFontStyle(getFontStyles((JNETable) jScrollPane_titleFontStyle.getViewport().getView()));\r
287                 to.setShowDetail(jCBP_showDetail.isSelected());\r
288                 to.setDetailFont((String) jCBX_detailFont.getSelectedItem());\r
289                 to.setDetailFontSize(jSP_detailFontSize.getValue());\r
290                 to.setDetailFontColor(jLabel_detailFontColor.getChoosed());\r
291                 to.setDetailFontStyle(getFontStyles((JNETable) jScrollPane_detailFontStyle.getViewport().getView()));\r
292                 to.setDetailTab(jSP_detailTab.getValue());\r
293                 to.setPaperAAMode((AAMode) jCBX_aaMode.getSelectedItem());\r
294         }\r
295         private ArrayList<JTXTButton.FontStyle> getFontStyles(JNETable jt) {\r
296                 ArrayList<JTXTButton.FontStyle> fsa = new ArrayList<JTXTButton.FontStyle>();\r
297                 for ( int row=0; row<jt.getRowCount(); row++ ) {\r
298                         if ( (Boolean)jt.getValueAt(row, 0) ) {\r
299                                 fsa.add((FontStyle) jt.getValueAt(row, 1));\r
300                         }\r
301                 }\r
302                 return fsa;\r
303         }\r
304         \r
305         //\r
306         private void getBounds(Env toe, Bounds tob) {\r
307                 tob.setBangumiColumnWidth(jSP_width.getValue());\r
308                 tob.setPaperHeightMultiplier(jSP_height.getValue()*(float)STEPBY/(float)60);\r
309                 tob.setTimelinePosition(jSP_timebarPosition.getValue());\r
310                 toe.setExecOnFontColor(jLabel_execon.getChoosed());\r
311                 toe.setExecOffFontColor(jLabel_execoff.getChoosed());\r
312                 toe.setPickedColor(jLabel_pickup.getChoosed());\r
313                 toe.setPickedFontColor(jLabel_pickupFont.getChoosed());\r
314                 toe.setMatchedBorderColor(jLabel_matchedBorderColor.getChoosed());\r
315                 toe.setMatchedBorderThickness(jSP_matchedBorderThickness.getValue());\r
316                 //\r
317                 tob.setShowMatchedBorder(origbnd.getShowMatchedBorder());\r
318         }\r
319         \r
320         \r
321         \r
322         /*******************************************************************************\r
323          * コンポーネント\r
324          ******************************************************************************/\r
325 \r
326         private JPanel getJPanel() {\r
327                 if (jPanel == null) {\r
328                         jPanel = new JPanel();\r
329                         jPanel.setLayout(new BorderLayout());\r
330                         jPanel.add(getJTabbedPane(), BorderLayout.CENTER);\r
331                         jPanel.add(getJPanel_buttons(), BorderLayout.PAGE_END);\r
332                 }\r
333                 return jPanel;\r
334         }\r
335         \r
336         //\r
337         private JTabbedPane getJTabbedPane() {\r
338                 if (jTabbedPane == null) {\r
339                         jTabbedPane = new JTabbedPane();\r
340                         jTabbedPane.add(getJPanel_pColors(),"背景色",0);\r
341                         jTabbedPane.add(getJPanel_fonts(),"テキスト",1);\r
342                         jTabbedPane.add(getJPanel_bounds(),"その他",2);\r
343                 }\r
344                 return jTabbedPane;\r
345         }\r
346         \r
347         //\r
348         private JPanel getJPanel_buttons() {\r
349                 if (jPanel_buttons == null) {\r
350                         jPanel_buttons = new JPanel();\r
351 \r
352                         jPanel_buttons.setLayout(new SpringLayout());\r
353                         \r
354                         int y = SEP_HEIGHT;\r
355                         int x = (PANEL_WIDTH - (BUTTON_WIDTH*3+SEP_WIDTH*2))/2;\r
356                         CommonSwingUtils.putComponentOn(jPanel_buttons, getJButton_preview("プレビュー"), BUTTON_WIDTH, PARTS_HEIGHT, x, y);\r
357                         CommonSwingUtils.putComponentOn(jPanel_buttons, getJButton_update("登録"), BUTTON_WIDTH, PARTS_HEIGHT, x+=BUTTON_WIDTH+SEP_WIDTH, y);\r
358                         CommonSwingUtils.putComponentOn(jPanel_buttons, getJButton_cancel("キャンセル"), BUTTON_WIDTH, PARTS_HEIGHT, x+=BUTTON_WIDTH+SEP_WIDTH, y);\r
359                         \r
360                         y += PARTS_HEIGHT+SEP_HEIGHT;\r
361                         \r
362                         jPanel_buttons.setPreferredSize(new Dimension(PANEL_WIDTH, y));\r
363                 }\r
364                 return jPanel_buttons;\r
365         }\r
366         private JButton getJButton_preview(String s) {\r
367                 if (jButton_preview == null) {\r
368                         jButton_preview = new JButton();\r
369                         jButton_preview.setText(s);\r
370                         \r
371                         jButton_preview.addActionListener(new ActionListener() {\r
372                                 @Override\r
373                                 public void actionPerformed(ActionEvent e) {\r
374                                         doPreview();\r
375                                 }\r
376                         });\r
377                 }\r
378                 return jButton_preview;\r
379         }\r
380         private JButton getJButton_update(String s) {\r
381                 if (jButton_update == null) {\r
382                         jButton_update = new JButton();\r
383                         jButton_update.setText(s);\r
384                         \r
385                         jButton_update.addActionListener(new ActionListener() {\r
386                                 @Override\r
387                                 public void actionPerformed(ActionEvent e) {\r
388                                         doUpdate();\r
389                                 }\r
390                         });\r
391                 }\r
392                 return jButton_update;\r
393         }\r
394         private JButton getJButton_cancel(String s) {\r
395                 if (jButton_cancel == null) {\r
396                         jButton_cancel = new JButton();\r
397                         jButton_cancel.setText(s);\r
398                         \r
399                         jButton_cancel.addActionListener(new ActionListener() {\r
400                                 @Override\r
401                                 public void actionPerformed(ActionEvent e) {\r
402                                         doCancel();\r
403                                 }\r
404                         });\r
405                 }\r
406                 return jButton_cancel;\r
407         }\r
408         \r
409         \r
410         /*\r
411          * ジャンル別背景色のタブ \r
412          */\r
413         \r
414         private JPanel getJPanel_pColors() {\r
415                 if (jPanel_pColors == null) {\r
416                         jPanel_pColors = new JPanel();\r
417 \r
418                         jPanel_pColors.setLayout(new SpringLayout());\r
419                         \r
420                         int y = SEP_HEIGHT_NARROW;\r
421                         int x = SEP_WIDTH;\r
422                         \r
423                         CommonSwingUtils.putComponentOn(jPanel_pColors, new JTitleLabel("ジャンル別背景色"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
424                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
425                         CommonSwingUtils.putComponentOn(jPanel_pColors, getJScrollPane_list(), TABLE_WIDTH, TABLE_HEIGHT, SEP_WIDTH, y);\r
426                         \r
427                         y += (TABLE_HEIGHT+SEP_HEIGHT);\r
428                         CommonSwingUtils.putComponentOn(jPanel_pColors, new JTitleLabel("タイムバーの色"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
429                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
430                         CommonSwingUtils.putComponentOn(jPanel_pColors, jLabel_timebar = new JCCLabel("6~11", origenv.getTimebarColor(),true,this,ccwin), TIMEBAR_WIDTH, PARTS_HEIGHT, x, y);\r
431                         CommonSwingUtils.putComponentOn(jPanel_pColors, jLabel_timebar2 = new JCCLabel("12~17", origenv.getTimebarColor2(),true,this,ccwin), TIMEBAR_WIDTH, PARTS_HEIGHT, x+=TIMEBAR_WIDTH, y);\r
432                         CommonSwingUtils.putComponentOn(jPanel_pColors, jLabel_timebar3 = new JCCLabel("18~23", origenv.getTimebarColor3(),true,this,ccwin), TIMEBAR_WIDTH, PARTS_HEIGHT, x+=TIMEBAR_WIDTH, y);\r
433                         CommonSwingUtils.putComponentOn(jPanel_pColors, jLabel_timebar4 = new JCCLabel("24~5", origenv.getTimebarColor4(),true,this,ccwin), TIMEBAR_WIDTH, PARTS_HEIGHT, x+=TIMEBAR_WIDTH, y);\r
434                         \r
435                         y += (PARTS_HEIGHT+SEP_HEIGHT);\r
436                         CommonSwingUtils.putComponentOn(jPanel_pColors, new JTitleLabel("マウスオーバー時のハイライト色"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
437                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
438                         CommonSwingUtils.putComponentOn(jPanel_pColors, jCBP_highlight = new JCheckBoxPanel("有効",LABEL_WIDTH/2), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
439                         CommonSwingUtils.putComponentOn(jPanel_pColors, jLabel_highlight = new JCCLabel("ハイライト",origenv.getHighlightColor(),true,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, LABEL_WIDTH+SEP_WIDTH, y);\r
440                         \r
441                         y += (PARTS_HEIGHT+SEP_HEIGHT*2);\r
442                         \r
443                         if (PANEL_HEIGHT < y) PANEL_HEIGHT = y;\r
444                         \r
445                         jPanel_pColors.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));\r
446                 }\r
447                 return jPanel_pColors;\r
448         }\r
449         private void setColors() {\r
450                 //\r
451                 for (int i=jTableModel_list.getRowCount()-1; i>=0; i--) {\r
452                         jTableModel_list.removeRow(i);\r
453                 }\r
454                 for (TVProgram.ProgGenre g : TVProgram.ProgGenre.values()) {\r
455                         Object[] data = {\r
456                                         g,\r
457                                         CommonSwingUtils.getColoredString(origpc.get(g),"色見本")\r
458                         };\r
459                         jTableModel_list.addRow(data);\r
460                 }\r
461                 jTable_list.updateUI();\r
462                 //\r
463                 jLabel_timebar.setChoosed(origenv.getTimebarColor());\r
464                 jLabel_timebar2.setChoosed(origenv.getTimebarColor2());\r
465                 jLabel_timebar3.setChoosed(origenv.getTimebarColor3());\r
466                 jLabel_timebar4.setChoosed(origenv.getTimebarColor4());\r
467                 jCBP_highlight.setSelected(origenv.getEnableHighlight());\r
468                 jLabel_highlight.setChoosed(origenv.getHighlightColor());\r
469         }\r
470         \r
471         private JScrollPane getJScrollPane_list() {\r
472                 if (jScrollPane_list == null) {\r
473                         jScrollPane_list = new JScrollPane();\r
474                         jScrollPane_list.setViewportView(getJTable_list());\r
475                         jScrollPane_list.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);\r
476                         jScrollPane_list.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);\r
477                 }\r
478                 return(jScrollPane_list);\r
479         }\r
480         private JNETable getJTable_list() {\r
481                 if (jTable_list == null) {\r
482                         //\r
483                         String[] colname = {"ジャンル", "色"};\r
484                         int[] colwidth = {TABLE_WIDTH-100,100};\r
485                         //\r
486                         jTableModel_list = new DefaultTableModel(colname, 0);\r
487                         jTable_list = new JNETable(jTableModel_list, false);\r
488                         jTable_list.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
489                         DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable_list.getColumnModel();\r
490                         TableColumn column = null;\r
491                         for (int i = 0 ; i < columnModel.getColumnCount() ; i++){\r
492                                 column = columnModel.getColumn(i);\r
493                                 column.setPreferredWidth(colwidth[i]);\r
494                         }\r
495                         //\r
496                         TableCellRenderer colorCellRenderer = new VWColorCellRenderer();\r
497                         jTable_list.getColumn("色").setCellRenderer(colorCellRenderer);\r
498                         //\r
499                         final JDialog jd = this;\r
500                         jTable_list.addMouseListener(new MouseAdapter() {\r
501                                 @Override\r
502                                 public void mouseClicked(MouseEvent e) {\r
503                                         if (SwingUtilities.isLeftMouseButton(e)) {\r
504                                                 //\r
505                                                 JTable t = (JTable) e.getSource();\r
506                                                 Point p = e.getPoint();\r
507                                                 \r
508                                                 int col = t.convertColumnIndexToModel(t.columnAtPoint(p));\r
509                                                 if (col == 1) {\r
510                                                         int row = t.convertRowIndexToModel(t.rowAtPoint(p));\r
511                                                         \r
512                                                         ccwin.setColor(CommonUtils.str2color((String) t.getValueAt(row,1)));\r
513                                                         CommonSwingUtils.setLocationCenter(jd,ccwin);\r
514                                                         ccwin.setVisible(true);\r
515                                                         \r
516                                                         if (ccwin.getSelectedColor() != null ) {\r
517                                                                 //\r
518                                                                 tmppc.put((TVProgram.ProgGenre) t.getValueAt(row,0), ccwin.getSelectedColor());\r
519                                                                 //\r
520                                                                 t.setValueAt(CommonSwingUtils.getColoredString(ccwin.getSelectedColor(),"色見本"), row, 1);\r
521                                                         }\r
522                                                 }\r
523                                         }\r
524                                 }\r
525                         });\r
526                 }\r
527                 return(jTable_list);\r
528         }\r
529         \r
530         \r
531         \r
532         /*\r
533          * フォントのタブ \r
534          */\r
535         \r
536         /**\r
537          * フォントの選択肢を設定\r
538          */\r
539         public void setFontList(VWFont vwfont) {\r
540                 jCBX_titleFont.removeAllItems();\r
541                 jCBX_detailFont.removeAllItems();\r
542                 for ( String fn : vwfont.getNames() ) {\r
543                         jCBX_titleFont.addItem(fn);\r
544                         jCBX_detailFont.addItem(fn);\r
545                         \r
546                         //if (debug) System.err.println("[DEBUG] font name="+fn);\r
547                 }\r
548         }\r
549         private JPanel getJPanel_fonts() {\r
550                 if (jPanel_fonts == null) {\r
551                         jPanel_fonts = new JPanel();\r
552 \r
553                         jPanel_fonts.setLayout(new SpringLayout());\r
554                         \r
555                         int y = SEP_HEIGHT_NARROW;\r
556                         \r
557                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JTitleLabel("開始時刻欄の設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_HEIGHT_NARROW, y);\r
558                         \r
559                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
560                         CommonSwingUtils.putComponentOn(jPanel_fonts, jCBP_showStart = new JCheckBoxPanel("表示する",LABEL_WIDTH), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
561                         //jCBP_showStart.addActionListener(fal);\r
562                         \r
563                         y += (PARTS_HEIGHT+SEP_HEIGHT);\r
564                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JTitleLabel("番組名のフォント設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
565                         \r
566                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
567                         CommonSwingUtils.putComponentOn(jPanel_fonts, jCBX_titleFont = new JComboBoxPanel("フォント",LABEL_WIDTH,ITEM_WIDTH,true), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
568                         \r
569                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
570                         CommonSwingUtils.putComponentOn(jPanel_fonts, jSP_titleFontSize = new JSliderPanel("サイズ",LABEL_WIDTH,6,24,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
571                         \r
572                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
573                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JLabel("文字色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
574                         CommonSwingUtils.putComponentOn(jPanel_fonts, jLabel_titleFontColor = new JCCLabel("番組名", origenv.getTitleFontColor(),false,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
575                         \r
576                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
577                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JLabel("スタイル"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
578                         CommonSwingUtils.putComponentOn(jPanel_fonts, jScrollPane_titleFontStyle = getJScrollPane_fontstyle(), ITEM_WIDTH, STYLETABLE_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
579                         \r
580                         y += (STYLETABLE_HEIGHT+10);\r
581                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JTitleLabel("番組詳細のフォント設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
582                         \r
583                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
584                         CommonSwingUtils.putComponentOn(jPanel_fonts, jCBP_showDetail = new JCheckBoxPanel("表示する",LABEL_WIDTH), TITLE_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
585                         \r
586                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
587                         CommonSwingUtils.putComponentOn(jPanel_fonts, jCBX_detailFont = new JComboBoxPanel("フォント",LABEL_WIDTH,ITEM_WIDTH,true), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
588                         \r
589                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
590                         CommonSwingUtils.putComponentOn(jPanel_fonts, jSP_detailFontSize = new JSliderPanel("サイズ",LABEL_WIDTH,6,24,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
591                         \r
592                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
593                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JLabel("文字色"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
594                         CommonSwingUtils.putComponentOn(jPanel_fonts, jLabel_detailFontColor = new JCCLabel("番組詳細", origenv.getDetailFontColor(),false,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
595                         \r
596                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
597                         CommonSwingUtils.putComponentOn(jPanel_fonts, new JLabel("スタイル"), LABEL_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
598                         CommonSwingUtils.putComponentOn(jPanel_fonts, jScrollPane_detailFontStyle = getJScrollPane_fontstyle(), ITEM_WIDTH, STYLETABLE_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
599                         \r
600                         y += (STYLETABLE_HEIGHT+SEP_HEIGHT_NARROW);\r
601                         CommonSwingUtils.putComponentOn(jPanel_fonts, jSP_detailTab = new JSliderPanel("左余白",LABEL_WIDTH,0,24,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
602                         \r
603                         y += (PARTS_HEIGHT+SEP_HEIGHT*3);\r
604                         \r
605                         if (PANEL_HEIGHT < y) PANEL_HEIGHT = y;\r
606                         \r
607                         jPanel_fonts.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));\r
608                 }\r
609                 return jPanel_fonts;\r
610         }\r
611         private void setFonts() {\r
612                 //\r
613                 jCBP_showStart.setSelected(origenv.getShowStart());\r
614                 //\r
615                 if ( ! origenv.getTitleFont().equals("") ) {\r
616                         jCBX_titleFont.setSelectedItem(origenv.getTitleFont());\r
617                 }\r
618                 else if ( ! origenv.getFontName().equals("") ) {\r
619                         jCBX_titleFont.setSelectedItem(origenv.getFontName());\r
620                 }\r
621                 jSP_titleFontSize.setValue(origenv.getTitleFontSize());\r
622                 jLabel_titleFontColor.setChoosed(origenv.getTitleFontColor());\r
623                 setFontStyles((JNETable) jScrollPane_titleFontStyle.getViewport().getView(), origenv.getTitleFontStyle());\r
624                 //\r
625                 jCBP_showDetail.setSelected(origenv.getShowDetail());\r
626                 if ( ! origenv.getDetailFont().equals("") ) {\r
627                         jCBX_detailFont.setSelectedItem(origenv.getDetailFont());\r
628                 }\r
629                 else if ( ! origenv.getFontName().equals("") ) {\r
630                         jCBX_detailFont.setSelectedItem(origenv.getFontName());\r
631                 }\r
632                 jSP_detailFontSize.setValue(origenv.getDetailFontSize());\r
633                 jLabel_detailFontColor.setChoosed(origenv.getDetailFontColor());\r
634                 setFontStyles((JNETable) jScrollPane_detailFontStyle.getViewport().getView(), origenv.getDetailFontStyle());\r
635                 jSP_detailTab.setValue(origenv.getDetailTab());\r
636                 jCBX_aaMode.setSelectedItem(origenv.getPaperAAMode());\r
637         }\r
638         private void setFontStyles(JNETable jt, ArrayList<JTXTButton.FontStyle> fsa) {\r
639                 for ( int row=0; row<jt.getRowCount(); row++ ) {\r
640                         jt.setValueAt(false, row, 0);\r
641                         for ( JTXTButton.FontStyle fs : fsa ) {\r
642                                 if ( fs == jt.getValueAt(row, 1) ) {\r
643                                         jt.setValueAt(true, row, 0);\r
644                                         break;\r
645                                 }\r
646                         }\r
647                 }\r
648         }\r
649         \r
650         private JScrollPane getJScrollPane_fontstyle() {\r
651                 JScrollPane jScrollPane = new JScrollPane();\r
652                 jScrollPane.setViewportView(getJTable_fontstyle());\r
653                 jScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER);\r
654                 jScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);\r
655                 return jScrollPane;\r
656         }\r
657         private JNETable getJTable_fontstyle() {\r
658                 \r
659                 // ヘッダの設定\r
660                 String[] colname = {"チェック", "スタイル"};\r
661                 int[] colwidth = {50,ITEM_WIDTH-50};\r
662                         \r
663                 //\r
664                 DefaultTableModel model = new DefaultTableModel(colname, 0);\r
665                 JNETable jTable = new JNETable(model, false) {\r
666 \r
667                         private static final long serialVersionUID = 1L;\r
668 \r
669                         @Override\r
670                         public boolean isCellEditable(int row, int column) {\r
671                                         return (column == 0);\r
672                         }\r
673                 };\r
674                 jTable.setAutoResizeMode(JNETable.AUTO_RESIZE_OFF);\r
675                 DefaultTableColumnModel columnModel = (DefaultTableColumnModel)jTable.getColumnModel();\r
676                 TableColumn column = null;\r
677                 for (int i = 0 ; i < columnModel.getColumnCount() ; i++){\r
678                         column = columnModel.getColumn(i);\r
679                         column.setPreferredWidth(colwidth[i]);\r
680                 }\r
681                 \r
682                 // にゃーん\r
683                 jTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);\r
684    \r
685                 // エディタに手を入れる\r
686                 DefaultCellEditor editor = new DefaultCellEditor(new JCheckBox() {\r
687 \r
688                         private static final long serialVersionUID = 1L;\r
689 \r
690                         @Override\r
691                         public int getHorizontalAlignment() {\r
692                                 return JCheckBox.CENTER;\r
693                         }\r
694                 });\r
695                 jTable.getColumn("チェック").setCellEditor(editor);\r
696                 // レンダラに手を入れる\r
697                 DefaultTableCellRenderer renderer = new DefaultTableCellRenderer() {\r
698 \r
699                         private static final long serialVersionUID = 1L;\r
700 \r
701                         @Override\r
702                         public Component getTableCellRendererComponent(JTable table, Object value,\r
703                                         boolean isSelected, boolean hasFocus, int row, int column) {\r
704                                 //\r
705                                 JCheckBox cBox = new JCheckBox();\r
706                                 cBox.setHorizontalAlignment(JCheckBox.CENTER);\r
707                                 //\r
708                                 Boolean b = (Boolean)value;\r
709                                 cBox.setSelected(b.booleanValue());\r
710                                 //\r
711                                 if (isSelected) {\r
712                                         cBox.setBackground(table.getSelectionBackground());\r
713                                 }\r
714                                 else {\r
715                                         cBox.setBackground(table.getBackground());\r
716                                 }\r
717                                 return cBox;\r
718                         }\r
719                 };\r
720                 jTable.getColumn("チェック").setCellRenderer(renderer);\r
721                 \r
722                 //\r
723                 for ( JTXTButton.FontStyle fs : JTXTButton.FontStyle.values() ) {\r
724                         Object[] data = { false,fs };\r
725                         model.addRow(data);\r
726                 }\r
727                 return jTable;\r
728         }\r
729         \r
730         /*\r
731          * サイズのタブ \r
732          */\r
733         \r
734         private JPanel getJPanel_bounds() {\r
735                 if (jPanel_bounds == null) {\r
736                         jPanel_bounds = new JPanel();\r
737 \r
738                         jPanel_bounds.setLayout(new SpringLayout());\r
739                         \r
740                         int y = SEP_HEIGHT_NARROW;\r
741                         \r
742                         CommonSwingUtils.putComponentOn(jPanel_bounds, new JTitleLabel("サイズの設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
743                         \r
744                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
745                         CommonSwingUtils.putComponentOn(jPanel_bounds, jSP_width = new JSliderPanel("幅",LABEL_WIDTH,50,300,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
746                         \r
747                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
748                         CommonSwingUtils.putComponentOn(jPanel_bounds, jSP_height = new JSliderPanel("高さ(pt/H)",LABEL_WIDTH,30,600,STEPBY,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
749                         \r
750                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
751                         CommonSwingUtils.putComponentOn(jPanel_bounds, jSP_timebarPosition = new JSliderPanel("現在時刻線(分)",LABEL_WIDTH,1,180,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
752 \r
753                         y += (PARTS_HEIGHT+SEP_HEIGHT);\r
754                         CommonSwingUtils.putComponentOn(jPanel_bounds, new JTitleLabel("予約枠の設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
755                         \r
756                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
757                         CommonSwingUtils.putComponentOn(jPanel_bounds, jLabel_execon = new JCCLabel("実行ONの文字色",origenv.getExecOnFontColor(),false,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
758                         \r
759                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
760                         CommonSwingUtils.putComponentOn(jPanel_bounds, jLabel_execoff = new JCCLabel("実行OFFの文字色",origenv.getExecOffFontColor(),false,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
761 \r
762                         y += (PARTS_HEIGHT+SEP_HEIGHT);\r
763                         CommonSwingUtils.putComponentOn(jPanel_bounds, new JTitleLabel("ピックアップ枠の設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
764                         \r
765                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
766                         CommonSwingUtils.putComponentOn(jPanel_bounds, jLabel_pickup = new JCCLabel("ピックアップの枠色",origenv.getPickedColor(),true,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
767                         \r
768                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
769                         CommonSwingUtils.putComponentOn(jPanel_bounds, jLabel_pickupFont = new JCCLabel("ピックアップの文字色",origenv.getPickedFontColor(),false,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
770                         \r
771                         y += (PARTS_HEIGHT+SEP_HEIGHT);\r
772                         CommonSwingUtils.putComponentOn(jPanel_bounds, new JTitleLabel("予約待機枠の設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
773                         \r
774                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
775                         CommonSwingUtils.putComponentOn(jPanel_bounds, jSP_matchedBorderThickness = new JSliderPanel("太さ",LABEL_WIDTH,1,16,ITEM_WIDTH), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
776                         \r
777                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
778                         CommonSwingUtils.putComponentOn(jPanel_bounds, jLabel_matchedBorderColor = new JCCLabel("予約待機の枠色",origenv.getMatchedBorderColor(),true,this,ccwin), ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH+LABEL_WIDTH, y);\r
779                         \r
780                         y += (PARTS_HEIGHT+SEP_HEIGHT);\r
781                         CommonSwingUtils.putComponentOn(jPanel_bounds, new JTitleLabel("フォントのアンチエイリアス設定"), TITLE_WIDTH, PARTS_HEIGHT, SEP_WIDTH_NARROW, y);\r
782                         \r
783                         y += (PARTS_HEIGHT+SEP_HEIGHT_NARROW);\r
784                         CommonSwingUtils.putComponentOn(jPanel_bounds, jCBX_aaMode = new JComboBoxPanel("アンチエイリアス",LABEL_WIDTH,ITEM_WIDTH,true), LABEL_WIDTH+ITEM_WIDTH, PARTS_HEIGHT, SEP_WIDTH, y);\r
785                         for ( AAMode aam : AAMode.values() ) {\r
786                                 jCBX_aaMode.addItem(aam);\r
787                         }\r
788                         \r
789                         y += (PARTS_HEIGHT+SEP_HEIGHT*2);\r
790                         \r
791                         if (PANEL_HEIGHT < y) PANEL_HEIGHT = y;\r
792                         \r
793                         jPanel_bounds.setPreferredSize(new Dimension(PANEL_WIDTH, PANEL_HEIGHT));\r
794                 }\r
795                 return jPanel_bounds;\r
796         }\r
797 \r
798         private void setBounds() {\r
799                 jSP_width.setValue(origbnd.getBangumiColumnWidth());\r
800                 jSP_height.setValue(Math.round(origbnd.getPaperHeightMultiplier()*(float)60/(float)STEPBY));\r
801                 jSP_timebarPosition.setValue(origbnd.getTimelinePosition());\r
802                 jLabel_execon.setChoosed(origenv.getExecOnFontColor());\r
803                 jLabel_execon.setBackground(Color.RED);\r
804                 jLabel_execoff.setChoosed(origenv.getExecOffFontColor());\r
805                 jLabel_execoff.setBackground(Color.RED);\r
806                 jLabel_pickup.setChoosed(origenv.getPickedColor());\r
807                 jLabel_pickupFont.setChoosed(origenv.getPickedFontColor());\r
808                 jLabel_pickupFont.setBackground(Color.RED);\r
809                 jLabel_matchedBorderColor.setChoosed(origenv.getMatchedBorderColor());\r
810                 jSP_matchedBorderThickness.setValue(origenv.getMatchedBorderThickness());\r
811                 /*\r
812                 if ( ! origenv.getShowStart() && ! origenv.getShowDetail() ) {\r
813                         jCBP_lightProgramView.setSelected(true);\r
814                 }\r
815                 else {\r
816                         jCBP_lightProgramView.setSelected(false);\r
817                 }\r
818                 */\r
819         }\r
820         \r
821         /*******************************************************************************\r
822          * 独自部品\r
823          ******************************************************************************/\r
824         \r
825         private class JTitleLabel extends JLabel {\r
826                 \r
827                 private static final long serialVersionUID = 1L;\r
828 \r
829                 public JTitleLabel(String s) {\r
830                         super(s);\r
831                         this.setForeground(Color.RED);\r
832                         //this.setFont(this.getFont().deriveFont(this.getFont().getStyle()|Font.BOLD));\r
833                 }\r
834         }\r
835         \r
836 }\r