package net.dirtyfilthy.Bitten; import java.awt.Component; import java.awt.LayoutManager; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.TableModelEvent; import javax.swing.event.TableModelListener; import com.google.bitcoin.core.GraphBlockStore; import com.google.bitcoin.core.GraphTransactionOutput; import com.google.bitcoin.core.GraphWallet; public class ControlPanel extends JTabbedPane implements TableModelListener { private SearchPanel searchPanel; private GraphBlockStore store; private WalletView view; private VisibilityManager visibilityManager; private HashMap<String,Integer> tabMap; public ControlPanel(GraphBlockStore store, WalletView view) { super(); this.store=store; this.view=view; this.view.panel=this; // this.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); this.visibilityManager=new VisibilityManager(view); searchPanel=new SearchPanel(this); searchPanel.setVisible(true); tabMap=new HashMap<String,Integer>(); this.addTab("Search", searchPanel); } public int autoViz(){ if(searchPanel.autoViz.isSelected()){ return new Integer(searchPanel.autoVizNum.getText()); } return 0; } public void registerTransactionPanel(TransactionResultPanel p){ } public void searchAddress(String address){ String full="A"+address.trim(); if(!switchToTab(full)){ AddressSearchResultPanel results=new AddressSearchResultPanel(this,store,address); this.addSwitchableTab(results,StringUtils.truncateText(address,8),full); } } public void addSwitchableTab(Component c, String title, String full){ this.addTab(title,c); int tab=this.getTabCount()-1; setTabComponentAt(tab,new ButtonTabComponent(this)); this.setSelectedIndex(tab); tabMap.put(full,tab); } public boolean switchToTab(String full){ if(tabMap.containsKey(full)){ this.setSelectedIndex(tabMap.get(full)); return true; } return false; } public void remove(int i){ if (i != -1) { Component c=getComponentAt(i); if(c instanceof Closeable){ ((Closeable) c).close(); } Iterator<Entry<String,Integer>> it = tabMap.entrySet().iterator(); while(it.hasNext()){ Entry<String,Integer> e=it.next(); if(e.getValue()==i){ it.remove(); } if(e.getValue()>i){ e.setValue(i-1); } } super.remove(i); } } public void showWallet(GraphWallet w){ String full="W"+w.node().getId(); if(!switchToTab(full)){ WalletSearchResultPanel results=new WalletSearchResultPanel(this,w); addSwitchableTab(results,StringUtils.truncateText(w.label(),8),full); } } public void searchTainted(GraphTransactionOutput o, Integer steps){ String full="T"+o.node().getId(); if(!switchToTab(full)){ TaintSearchResultPanel results=new TaintSearchResultPanel(this,o,steps); addSwitchableTab(results,StringUtils.truncateText("Tainted",8),full); } } @Override public void tableChanged(TableModelEvent arg0) { System.out.println("event: "+arg0); System.out.println("source "+arg0.getSource()); System.out.println("row "+arg0.getFirstRow()); System.out.println("column "+arg0.getColumn()); System.out.println("type "+arg0.getType()); } public void notifyVisibilityChange(TransactionTreeNode transactionTreeNode) { visibilityManager.setTransactionVisibility(transactionTreeNode.transaction, transactionTreeNode.visible); } public void registerTransactionTreeTable(TransactionTreeTable t){ visibilityManager.registerTable(t); } public void unregisterTransactionTreeTable(TransactionTreeTable t){ visibilityManager.unregisterTable(t); } public WalletView getView() { return view; } public GraphBlockStore getBlockStore() { // TODO Auto-generated method stub return store; } }