OSDN Git Service

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