1 package com.atlassian.theplugin.idea.crucible.comments;
2
3 import com.intellij.util.ui.UIUtil;
4 import com.intellij.util.ui.ListTableModel;
5 import com.atlassian.theplugin.idea.ui.TableItemSelectedListener;
6 import com.atlassian.theplugin.idea.ui.AtlassianTableViewWithToolbar;
7 import com.atlassian.theplugin.idea.ui.TableColumnProvider;
8 import com.atlassian.theplugin.idea.ProgressAnimationProvider;
9
10 import javax.swing.*;
11 import java.awt.*;
12
13
14
15
16
17
18
19
20 public abstract class AbstractCommentPanel extends JPanel implements CrucibleReviewActionListener {
21 private ListTableModel commentTableModel;
22 private JLayeredPane dataPanelsHolder;
23 private ProgressAnimationProvider progressAnimation = new ProgressAnimationProvider();
24
25 public AtlassianTableViewWithToolbar getCommentsTable() {
26 return commentsTable;
27 }
28
29 public AtlassianTableViewWithToolbar getCommentReplyTable() {
30 return replyCommentsTable;
31 }
32
33 private AtlassianTableViewWithToolbar commentsTable;
34 private AtlassianTableViewWithToolbar replyCommentsTable;
35 private ListTableModel commentReplyTableModel;
36
37 public AbstractCommentPanel() {
38 super(new BorderLayout());
39 }
40
41 protected void initialize() {
42 setLayout(new BorderLayout());
43 setBackground(UIUtil.getTreeTextBackground());
44 getCommentTableModel().setSortable(true);
45 commentsTable = createCommentsTable(getCommentTableModel(), getCommentTableColumnProvider(),
46 getCommentToolbarActionGroup(), getCommentSelectedListener(), getCommentToolbarPlace());
47
48 getCommentReplyTableModel().setSortable(true);
49 replyCommentsTable = createCommentsTable(getCommentReplyTableModel(), getCommentReplyTableColumnProvider(),
50 getCommentReplyToolbarActionGroup(),
51 getCommentReplySelectedListener(), getCommentReplyToolbarPlace());
52
53 dataPanelsHolder = new JLayeredPane();
54 dataPanelsHolder.setLayout(new BorderLayout());
55 dataPanelsHolder.setBackground(UIUtil.getTreeTextBackground());
56
57 dataPanelsHolder.add(commentsTable, BorderLayout.CENTER, JLayeredPane.POPUP_LAYER);
58 add(dataPanelsHolder, BorderLayout.CENTER);
59 progressAnimation.configure(this, dataPanelsHolder, BorderLayout.CENTER);
60 }
61
62 protected abstract String getCommentToolbarPlace();
63
64 protected abstract String getCommentReplyToolbarPlace();
65
66 protected abstract TableColumnProvider getCommentTableColumnProvider();
67
68 protected abstract TableColumnProvider getCommentReplyTableColumnProvider();
69
70 protected abstract TableItemSelectedListener getCommentReplySelectedListener();
71
72 protected abstract TableItemSelectedListener getCommentSelectedListener();
73
74 protected abstract String getCommentToolbarActionGroup();
75
76 protected abstract String getCommentReplyToolbarActionGroup();
77
78 protected ProgressAnimationProvider getProgressAnimation() {
79 return progressAnimation;
80 }
81
82 protected ListTableModel getCommentTableModel() {
83 return commentTableModel;
84 }
85
86 protected void setCommentTableModel(ListTableModel commentTableModel) {
87 this.commentTableModel = commentTableModel;
88 }
89
90 protected void setCommentReplyTableModel(ListTableModel commentReplyTableModel) {
91 this.commentReplyTableModel = commentReplyTableModel;
92 }
93
94 protected ListTableModel getCommentReplyTableModel() {
95 return commentReplyTableModel;
96 }
97
98 protected AtlassianTableViewWithToolbar createCommentsTable(ListTableModel listTableModel, TableColumnProvider columnProvider,
99 String toolbarName, TableItemSelectedListener tableItemSelectedListener,
100 String toolbarPlace) {
101 AtlassianTableViewWithToolbar table = new AtlassianTableViewWithToolbar(columnProvider, listTableModel, null,
102 toolbarPlace,
103 toolbarName,
104 "Context menu",
105 "ThePlugin.Crucible.ReviewPopupMenu"
106 );
107 table.setBorder(BorderFactory.createEmptyBorder());
108 table.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
109 table.getColumnModel().setColumnMargin(0);
110
111 table.setMinRowHeight(20);
112 table.getTable().addItemSelectedListener(tableItemSelectedListener);
113 return table;
114 }
115
116 public void switchToComments() {
117 dataPanelsHolder.removeAll();
118 dataPanelsHolder.add(commentsTable, BorderLayout.CENTER);
119 }
120
121 protected void switchToCommentReplies() {
122 dataPanelsHolder.removeAll();
123 dataPanelsHolder.add(replyCommentsTable, BorderLayout.CENTER);
124 }
125
126
127 }