OSDN Git Service

55e4cc6195489d6917d767aa65885d97d11c7728
[nt-manager/nt-manager.git] / src / twitter / gui / form / UserListDialog.java
1 /*
2  * To change this template, choose Tools | Templates
3  * and open the template in the editor.
4  */
5
6 /*
7  * UserListDialog.java
8  *
9  * Created on 2010/10/17, 16:55:08
10  */
11
12 package twitter.gui.form;
13
14 import java.awt.Point;
15 import java.awt.event.KeyAdapter;
16 import java.awt.event.KeyEvent;
17 import java.awt.event.MouseAdapter;
18 import java.awt.event.MouseEvent;
19 import java.util.List;
20 import javax.swing.ImageIcon;
21 import javax.swing.JOptionPane;
22 import javax.swing.JTable;
23 import javax.swing.table.TableColumn;
24 import javax.swing.table.TableColumnModel;
25 import javax.swing.table.TableModel;
26 import twitter.action.TweetUserTimelineGetter;
27 import twitter.action.list.UserListGetter;
28 import twitter.gui.action.TweetMainAction;
29 import twitter.gui.component.TweetListTableModel;
30 import twitter.manage.TweetManager;
31 import twitter4j.UserList;
32
33 /**
34  *
35  * @author nishio
36  */
37 public class UserListDialog extends javax.swing.JDialog {
38
39     //メインアクション
40     private TweetMainAction mainAction = null;
41     //Userlist
42     private UserListGetter userListGetter = null;
43     //リストを取得するユーザの名前
44     private String listUserName = null;
45     //リストモデル
46     private TweetListTableModel listTableModel = new TweetListTableModel();
47     //アイコンの大きさ
48     private static final int iconSize = 50;
49
50     /** Creates new form UserListDialog */
51     public UserListDialog(java.awt.Frame parent, boolean modal, TweetMainAction mainAction,
52             UserListGetter userListGetter, String listUserName) {
53         super(parent, modal);
54         initComponents();
55         this.mainAction = mainAction;
56         this.listUserName = listUserName;
57         this.userListGetter = userListGetter;
58
59         final String username = listUserName;
60         //スレッドにリスト挿入作業をさせる
61         new Thread() {
62
63             @Override
64             public void run() {
65                 addUserListToTable(username);
66             }
67         }.start();
68     }
69
70     /**
71      * テーブルにリスト一覧を挿入
72      * @param username
73      */
74     public void addUserListToTable(String username) {
75         this.listTableModel.clearStatus();
76         this.setTableEnvironment();
77         if( this.userListGetter != null ) {
78             List<UserList> list = this.userListGetter.getUserLists(username);
79             for(UserList u : list ) {
80                 this.listTableModel.insertUserList(u);
81             }
82         }
83     }
84
85     /**
86      * テーブルの大きさ等の情報を設定
87      */
88     public void setTableEnvironment() {
89         //テーブルの横幅設定
90         TableColumnModel columnModel = this.jTable1.getColumnModel();
91         TableColumn column = columnModel.getColumn(0);
92         column.setMinWidth( this.iconSize );
93         column.setMaxWidth( this.iconSize );
94
95         //マウスリスナー設定
96         jTable1.addMouseListener(new MouseAdapter() {
97
98             @Override
99             public void mousePressed(MouseEvent e) {
100                 // いったんSelectしていた情報を削除
101                 jTable1.clearSelection();
102                 // if (e.getButton() == MouseEvent.BUTTON3) {
103                 Point p = e.getPoint();
104                 int col = jTable1.columnAtPoint(p);
105                 int row = jTable1.rowAtPoint(p);
106                 jTable1.changeSelection(row, col, false, false);
107
108                 //テーブルで選択した要素を詳細情報として表示
109                 setDetailInformation(jTable1);
110                 // }
111             }
112         });
113
114         //キー受付
115         jTable1.addKeyListener(new KeyAdapter() {
116
117             @Override
118             public void keyReleased(KeyEvent ke) {
119                 setDetailInformation(jTable1);
120             }
121
122         });
123     }
124
125     /**
126      * テーブル情報の詳細をセット
127      * @param table
128      */
129     public void setDetailInformation(JTable table) {
130         UserList userList = getTweetTableInformation(table, listTableModel);
131         String listName = userList.getName();
132         String userName = userList.getUser().getName();
133         int subscriber = userList.getSubscriberCount();
134         int memberCount = userList.getMemberCount();
135         String description = userList.getDescription();
136
137         if( listName != null ) {
138             jLabel5.setText(listName);
139         }
140         if( userName != null ) {
141             jLabel6.setText(userName);
142         }
143         if( description != null ) {
144             jTextArea1.setText(description);
145         }
146         jLabel7.setText( memberCount + "");
147         jLabel8.setText( subscriber + "");
148
149         userImageLabel.setIcon( new ImageIcon(userList.getUser().getProfileImageURL() ) );
150     }
151
152     /**
153      * テーブルで選択した場所のUserList情報を取得
154      *
155      * @return
156      */
157     public UserList getTweetTableInformation(JTable table, TableModel model) {
158         int index = table.convertRowIndexToModel(table.getSelectedRow());
159         UserList info = null;
160         if (model instanceof TweetListTableModel) {
161             info = ((TweetListTableModel) model).getUserList(index);
162         }
163         return info;
164     }
165
166     /** This method is called from within the constructor to
167      * initialize the form.
168      * WARNING: Do NOT modify this code. The content of this method is
169      * always regenerated by the Form Editor.
170      */
171     @SuppressWarnings("unchecked")
172     // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
173     private void initComponents() {
174
175         jScrollPane1 = new javax.swing.JScrollPane();
176         jTable1 = new javax.swing.JTable();
177         jButton1 = new javax.swing.JButton();
178         jButton2 = new javax.swing.JButton();
179         jPanel1 = new javax.swing.JPanel();
180         jLabel1 = new javax.swing.JLabel();
181         jLabel2 = new javax.swing.JLabel();
182         jLabel3 = new javax.swing.JLabel();
183         jLabel4 = new javax.swing.JLabel();
184         userImageLabel = new javax.swing.JLabel();
185         jLabel5 = new javax.swing.JLabel();
186         jLabel6 = new javax.swing.JLabel();
187         jLabel7 = new javax.swing.JLabel();
188         jLabel8 = new javax.swing.JLabel();
189         jScrollPane2 = new javax.swing.JScrollPane();
190         jTextArea1 = new javax.swing.JTextArea();
191
192         setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
193
194         jTable1.setModel(listTableModel);
195         jScrollPane1.setViewportView(jTable1);
196
197         jButton1.setText("OK");
198         jButton1.addActionListener(new java.awt.event.ActionListener() {
199             public void actionPerformed(java.awt.event.ActionEvent evt) {
200                 jButton1ActionPerformed(evt);
201             }
202         });
203
204         jButton2.setText("キャンセル");
205         jButton2.addActionListener(new java.awt.event.ActionListener() {
206             public void actionPerformed(java.awt.event.ActionEvent evt) {
207                 jButton2ActionPerformed(evt);
208             }
209         });
210
211         jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
212
213         jLabel1.setText("リスト名");
214
215         jLabel2.setText("リスト所有者");
216
217         jLabel3.setText("フォロー中");
218
219         jLabel4.setText("リストをフォロー");
220
221         userImageLabel.setBackground(java.awt.Color.black);
222         userImageLabel.setOpaque(true);
223
224         jLabel5.setText("NULL");
225
226         jLabel6.setText("NULL");
227
228         jLabel7.setText("0");
229
230         jLabel8.setText("0");
231
232         jTextArea1.setColumns(20);
233         jTextArea1.setRows(5);
234         jScrollPane2.setViewportView(jTextArea1);
235
236         javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
237         jPanel1.setLayout(jPanel1Layout);
238         jPanel1Layout.setHorizontalGroup(
239             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
240             .addGroup(jPanel1Layout.createSequentialGroup()
241                 .addContainerGap()
242                 .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE)
243                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
244                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
245                     .addComponent(jLabel1)
246                     .addComponent(jLabel2)
247                     .addComponent(jLabel3)
248                     .addComponent(jLabel4))
249                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
250                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
251                     .addComponent(jLabel5, javax.swing.GroupLayout.PREFERRED_SIZE, 196, javax.swing.GroupLayout.PREFERRED_SIZE)
252                     .addComponent(jLabel6, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
253                     .addComponent(jLabel7, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
254                     .addComponent(jLabel8, javax.swing.GroupLayout.PREFERRED_SIZE, 116, javax.swing.GroupLayout.PREFERRED_SIZE))
255                 .addGap(6, 6, 6)
256                 .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE))
257         );
258
259         jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel1, jLabel2, jLabel3, jLabel4});
260
261         jPanel1Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {jLabel5, jLabel6, jLabel7, jLabel8});
262
263         jPanel1Layout.setVerticalGroup(
264             jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
265             .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 98, Short.MAX_VALUE)
266             .addGroup(jPanel1Layout.createSequentialGroup()
267                 .addContainerGap()
268                 .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
269                     .addGroup(jPanel1Layout.createSequentialGroup()
270                         .addComponent(jLabel5)
271                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
272                         .addComponent(jLabel6)
273                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
274                         .addComponent(jLabel7)
275                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
276                         .addComponent(jLabel8))
277                     .addGroup(jPanel1Layout.createSequentialGroup()
278                         .addComponent(jLabel1)
279                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
280                         .addComponent(jLabel2)
281                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
282                         .addComponent(jLabel3)
283                         .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
284                         .addComponent(jLabel4))
285                     .addComponent(userImageLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 48, javax.swing.GroupLayout.PREFERRED_SIZE))
286                 .addContainerGap())
287         );
288
289         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
290         getContentPane().setLayout(layout);
291         layout.setHorizontalGroup(
292             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
293             .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 762, Short.MAX_VALUE)
294             .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
295             .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
296                 .addContainerGap(542, Short.MAX_VALUE)
297                 .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
298                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
299                 .addComponent(jButton2, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
300                 .addContainerGap())
301         );
302         layout.setVerticalGroup(
303             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
304             .addGroup(layout.createSequentialGroup()
305                 .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 349, Short.MAX_VALUE)
306                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
307                 .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
308                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
309                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
310                     .addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
311                     .addComponent(jButton2))
312                 .addContainerGap())
313         );
314
315         pack();
316     }// </editor-fold>//GEN-END:initComponents
317
318     private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
319         this.dispose();
320     }//GEN-LAST:event_jButton2ActionPerformed
321
322     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
323         UserList info = getTweetTableInformation(jTable1, listTableModel);
324         if( info == null ) {
325             JOptionPane.showMessageDialog(null, "リストを選択してください",
326                     "Error", JOptionPane.ERROR_MESSAGE);
327             return;
328         }
329         String listName = info.getName();
330         String userName = info.getUser().getScreenName();
331         int id = info.getId();
332         String fullName = info.getFullName();
333
334         if( listName == null || userName == null || fullName == null ) {
335             JOptionPane.showMessageDialog(null, "選択できないリストです",
336                     "Error", JOptionPane.ERROR_MESSAGE);
337             return;
338         }
339         //TODO: 更新間隔をリスト毎に設定できるようにするべきか検討
340         this.mainAction.actionAddListTab(userName, id, fullName, this.mainAction.getGetTimelinePeriod());
341         //終了
342         this.dispose();
343     }//GEN-LAST:event_jButton1ActionPerformed
344
345     // Variables declaration - do not modify//GEN-BEGIN:variables
346     private javax.swing.JButton jButton1;
347     private javax.swing.JButton jButton2;
348     private javax.swing.JLabel jLabel1;
349     private javax.swing.JLabel jLabel2;
350     private javax.swing.JLabel jLabel3;
351     private javax.swing.JLabel jLabel4;
352     private javax.swing.JLabel jLabel5;
353     private javax.swing.JLabel jLabel6;
354     private javax.swing.JLabel jLabel7;
355     private javax.swing.JLabel jLabel8;
356     private javax.swing.JPanel jPanel1;
357     private javax.swing.JScrollPane jScrollPane1;
358     private javax.swing.JScrollPane jScrollPane2;
359     private javax.swing.JTable jTable1;
360     private javax.swing.JTextArea jTextArea1;
361     private javax.swing.JLabel userImageLabel;
362     // End of variables declaration//GEN-END:variables
363
364 }