package jdepend.client.ui.result.framework; import java.awt.BorderLayout; import java.awt.GridLayout; import java.util.LinkedList; import java.util.List; import javax.swing.BorderFactory; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.JPanel; import jdepend.framework.ui.util.JDependUIUtil; public class ResultOperationPanel extends JPanel { private int currentTabIndex = -1; private List<TabIndexInfo> mementoTabs = new LinkedList<TabIndexInfo>(); private ResultPanel resultPanel; private JLabel navPriorButton; private JLabel navNextButton; private final ImageIcon nav_left_dis = new ImageIcon(JDependUIUtil.getImage("nav-left-dis.png")); private final ImageIcon nav_left = new ImageIcon(JDependUIUtil.getImage("nav-left.png")); private final ImageIcon nav_right_dis = new ImageIcon(JDependUIUtil.getImage("nav-right-dis.png")); private final ImageIcon nav_right = new ImageIcon(JDependUIUtil.getImage("nav-right.png")); public ResultOperationPanel(ResultPanel resultPanel1) { this.resultPanel = resultPanel1; this.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); JPanel contentPanel = new JPanel(); contentPanel.setLayout(new BorderLayout()); JPanel operationPanel = new JPanel(); operationPanel.setLayout(new GridLayout(4, 1)); operationPanel.add(this.splitPanel()); navPriorButton = new JLabel(); navPriorButton.setIcon(nav_left_dis); navPriorButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); navPriorButton.setToolTipText("导航-后退"); navPriorButton.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { prior(); resultPanel.setTab(getCurrentTab().tabOne, getCurrentTab().tabTwo); } }); operationPanel.add(navPriorButton); operationPanel.add(this.splitPanel()); navNextButton = new JLabel(); navNextButton.setIcon(nav_right_dis); navNextButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); navNextButton.setToolTipText("导航-前进"); navNextButton.addMouseListener(new java.awt.event.MouseAdapter() { @Override public void mouseClicked(java.awt.event.MouseEvent evt) { next(); resultPanel.setTab(getCurrentTab().tabOne, getCurrentTab().tabTwo); } }); operationPanel.add(navNextButton); contentPanel.add(BorderLayout.NORTH, operationPanel); this.add(contentPanel); } private JPanel splitPanel() { JPanel splitPanel = new JPanel(); splitPanel.setBounds(0, 0, 16, 16); return splitPanel; } public void addMemetoTab(int tabOne, int tabTwo) { TabIndexInfo tabInfo = new TabIndexInfo(tabOne, tabTwo); if (mementoTabs.size() > 0 && mementoTabs.get(currentTabIndex).equals(tabInfo)) { return; } else { if (currentTabIndex != mementoTabs.size() - 1) { for (int index = mementoTabs.size() - 1; index > currentTabIndex; index--) { mementoTabs.remove(tabInfo); } } mementoTabs.add(tabInfo); currentTabIndex = mementoTabs.size() - 1; } this.switchNavButton(); } private void switchNavButton() { if (currentTabIndex > 0) { navPriorButton.setIcon(nav_left); } else { navPriorButton.setIcon(nav_left_dis); } if (currentTabIndex < mementoTabs.size() - 1) { navNextButton.setIcon(nav_right); } else { navNextButton.setIcon(nav_right_dis); } } private void next() { if (currentTabIndex < mementoTabs.size() - 1) { currentTabIndex++; this.switchNavButton(); } } private void prior() { if (currentTabIndex > 0) { currentTabIndex--; this.switchNavButton(); } } public TabIndexInfo getCurrentTab() { return mementoTabs.get(currentTabIndex); } public class TabIndexInfo { public int tabOne; public int tabTwo; public TabIndexInfo(int tabOne, int tabTwo) { super(); this.tabOne = tabOne; this.tabTwo = tabTwo; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + getOuterType().hashCode(); result = prime * result + tabTwo; result = prime * result + tabOne; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; TabIndexInfo other = (TabIndexInfo) obj; if (!getOuterType().equals(other.getOuterType())) return false; if (tabTwo != other.tabTwo) return false; if (tabOne != other.tabOne) return false; return true; } private ResultOperationPanel getOuterType() { return ResultOperationPanel.this; } } }