source: josm/trunk/src/org/openstreetmap/josm/gui/history/HistoryViewerPanel.java@ 6340

Last change on this file since 6340 was 6207, checked in by Don-vip, 11 years ago

Sonar - refactor duplicate code in history browsing panels

File size: 4.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.history;
3
4import java.awt.GridBagConstraints;
5import java.awt.GridBagLayout;
6import java.awt.Insets;
7
8import javax.swing.JPanel;
9import javax.swing.JScrollPane;
10import javax.swing.JTable;
11
12import org.openstreetmap.josm.gui.util.AdjustmentSynchronizer;
13
14/**
15 * Base class of {@link TagInfoViewer} and {@link RelationMemberListViewer}.
16 * @since 6207
17 */
18public abstract class HistoryViewerPanel extends JPanel {
19
20 protected HistoryBrowserModel model;
21 protected VersionInfoPanel referenceInfoPanel;
22 protected VersionInfoPanel currentInfoPanel;
23 protected AdjustmentSynchronizer adjustmentSynchronizer;
24 protected SelectionSynchronizer selectionSynchronizer;
25
26 protected HistoryViewerPanel(HistoryBrowserModel model) {
27 setModel(model);
28 build();
29 }
30
31 private JScrollPane embedInScrollPane(JTable table) {
32 JScrollPane pane = new JScrollPane(table);
33 pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
34 pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
35 adjustmentSynchronizer.participateInSynchronizedScrolling(pane.getVerticalScrollBar());
36 return pane;
37 }
38
39 /**
40 * Sets the history browsing model.
41 * @param model The history browsing model
42 */
43 public final void setModel(HistoryBrowserModel model) {
44 if (this.model != null) {
45 unregisterAsObserver(model);
46 }
47 this.model = model;
48 if (this.model != null) {
49 registerAsObserver(model);
50 }
51 }
52
53 protected final void unregisterAsObserver(HistoryBrowserModel model) {
54 if (currentInfoPanel != null) {
55 model.deleteObserver(currentInfoPanel);
56 }
57 if (referenceInfoPanel != null) {
58 model.deleteObserver(referenceInfoPanel);
59 }
60 }
61
62 protected final void registerAsObserver(HistoryBrowserModel model) {
63 if (currentInfoPanel != null) {
64 model.addObserver(currentInfoPanel);
65 }
66 if (referenceInfoPanel != null) {
67 model.addObserver(referenceInfoPanel);
68 }
69 }
70
71 protected abstract JTable buildReferenceTable();
72
73 protected abstract JTable buildCurrentTable();
74
75 private void build() {
76 setLayout(new GridBagLayout());
77 GridBagConstraints gc = new GridBagConstraints();
78
79 // ---------------------------
80 gc.gridx = 0;
81 gc.gridy = 0;
82 gc.gridwidth = 1;
83 gc.gridheight = 1;
84 gc.weightx = 0.5;
85 gc.weighty = 0.0;
86 gc.insets = new Insets(5,5,5,0);
87 gc.fill = GridBagConstraints.HORIZONTAL;
88 gc.anchor = GridBagConstraints.FIRST_LINE_START;
89 referenceInfoPanel = new VersionInfoPanel(model, PointInTimeType.REFERENCE_POINT_IN_TIME);
90 add(referenceInfoPanel,gc);
91
92 gc.gridx = 1;
93 gc.gridy = 0;
94 gc.gridwidth = 1;
95 gc.gridheight = 1;
96 gc.fill = GridBagConstraints.HORIZONTAL;
97 gc.weightx = 0.5;
98 gc.weighty = 0.0;
99 gc.anchor = GridBagConstraints.FIRST_LINE_START;
100 currentInfoPanel = new VersionInfoPanel(model, PointInTimeType.CURRENT_POINT_IN_TIME);
101 add(currentInfoPanel,gc);
102
103 adjustmentSynchronizer = new AdjustmentSynchronizer();
104 selectionSynchronizer = new SelectionSynchronizer();
105
106 // ---------------------------
107 gc.gridx = 0;
108 gc.gridy = 1;
109 gc.gridwidth = 1;
110 gc.gridheight = 1;
111 gc.weightx = 0.5;
112 gc.weighty = 1.0;
113 gc.fill = GridBagConstraints.BOTH;
114 gc.anchor = GridBagConstraints.NORTHWEST;
115 add(embedInScrollPane(buildReferenceTable()),gc);
116
117 gc.gridx = 1;
118 gc.gridy = 1;
119 gc.gridwidth = 1;
120 gc.gridheight = 1;
121 gc.weightx = 0.5;
122 gc.weighty = 1.0;
123 gc.fill = GridBagConstraints.BOTH;
124 gc.anchor = GridBagConstraints.NORTHWEST;
125 add(embedInScrollPane(buildCurrentTable()),gc);
126 }
127}
Note: See TracBrowser for help on using the repository browser.