1 package org.columba.core.gui.frame; 2 3 import java.awt.Component ; 4 import java.io.File ; 5 import java.io.FileInputStream ; 6 import java.io.FileOutputStream ; 7 import java.io.IOException ; 8 import java.util.ArrayList ; 9 import java.util.Iterator ; 10 11 import javax.swing.BorderFactory ; 12 import javax.swing.JComponent ; 13 import javax.swing.JPanel ; 14 import javax.swing.JPopupMenu ; 15 16 import org.columba.api.gui.frame.IDock; 17 import org.columba.api.gui.frame.IDockable; 18 import org.columba.core.config.DefaultConfigDirectory; 19 import org.columba.core.config.ViewItem; 20 import org.columba.core.gui.docking.XMLPersister; 21 import org.flexdock.docking.Dockable; 22 import org.flexdock.docking.DockingConstants; 23 import org.flexdock.docking.DockingManager; 24 import org.flexdock.docking.DockingPort; 25 import org.flexdock.docking.defaults.DefaultDockingPort; 26 import org.flexdock.docking.state.PersistenceException; 27 28 public abstract class DockFrameController extends DefaultFrameController 29 implements IDock { 30 31 private DefaultDockingPort dockingPort = new DefaultDockingPort(); 32 33 private ArrayList <IDockable> list = new ArrayList <IDockable>(); 34 35 private IDockable contextualPanelDockable; 36 private IDockable searchPanelDockable; 37 38 41 public DockFrameController(ViewItem viewItem) { 42 super(viewItem); 43 44 initComponents(); 45 46 } 47 48 51 public DockFrameController(String id) { 52 super(id); 53 54 initComponents(); 55 56 } 57 58 59 62 private void initComponents() { 63 64 dockingPort = new DefaultDockingPort(); 65 dockingPort.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); 66 67 searchPanelDockable = registerDockable(IDock.DOCKING_VIEW_SEARCH, "Search", getSearchPanel().getView(), null); 68 69 } 70 71 74 public JPanel getContentPane() { 75 return dockingPort; 76 } 77 78 81 public void loadPositions() { 82 super.loadPositions(); 83 84 boolean restoreSuccess = false; 85 File configDirectory = DefaultConfigDirectory.getInstance().getCurrentPath(); 87 File dockDirectory = new File (configDirectory, "flexdock"); 88 if (!dockDirectory.exists()) 89 dockDirectory.mkdir(); 90 String filename = getId() + ".xml"; 91 92 try { 93 File file = new File (dockDirectory, filename); 94 if (file.exists()) { 95 new XMLPersister().load(new FileInputStream (file), dockingPort); 96 restoreSuccess = true; 97 } 98 99 } catch (IOException e1) { 100 e1.printStackTrace(); 101 } catch (PersistenceException e1) { 102 e1.printStackTrace(); 103 } 104 105 if (!restoreSuccess) { 106 dockingPort.clear(); 108 109 loadDefaultPosition(); 110 } 111 112 } 113 114 117 public void savePositions() { 118 super.savePositions(); 119 120 try { 121 File configDirectory = DefaultConfigDirectory.getInstance().getCurrentPath(); 122 File dockDirectory = new File (configDirectory, "flexdock"); 123 if (!dockDirectory.exists()) 124 dockDirectory.mkdir(); 125 String filename = getId() + ".xml"; 126 File file = new File (dockDirectory, filename); 127 128 new XMLPersister().store(new FileOutputStream (file), dockingPort); 129 130 } catch (IOException e) { 131 e.printStackTrace(); 132 } catch (PersistenceException e) { 133 e.printStackTrace(); 134 } 135 136 } 137 138 141 144 public boolean isInitialized() { 145 return false; 146 } 147 148 151 154 public void registerDockable(IDockable dockable) { 155 156 list.add(dockable); 157 158 dockingPort.dock(dockable.getView(), dockable.getId()); 159 160 } 161 162 166 169 public IDockable registerDockable(String id, String name, JComponent comp, 170 JPopupMenu popup) { 171 IDockable dockable = new FrameMediatorDockable(id, name, comp, popup); 172 173 registerDockable(dockable); 174 175 return dockable; 176 } 177 178 181 184 public Iterator <IDockable> getDockableIterator() { 185 return list.iterator(); 186 } 187 188 192 195 public void dock(IDockable dockable, REGION region, float percentage) { 196 String regionString = convertRegion(region); 197 198 DockingManager.dock(dockable.getView(), dockingPort, regionString, 199 percentage); 200 201 } 202 203 207 210 public void dock(IDockable dockable, REGION region) { 211 String regionString = convertRegion(region); 212 213 DockingManager.dock((Component ) dockable.getView(), 214 (DockingPort) dockingPort, regionString); 215 } 216 217 222 225 public void dock(IDockable dockable, IDockable parentDockable, 226 REGION region, float percentage) { 227 String regionString = convertRegion(region); 228 229 DockingManager.dock(dockable.getView(), parentDockable.getView(), 230 regionString, percentage); 231 232 } 233 234 238 241 public void setSplitProportion(IDockable dockable, float percentage) { 242 DockingManager.setSplitProportion(dockable.getView(), percentage); 243 } 244 245 250 private String convertRegion(REGION region) { 251 String regionString = null; 252 if (region == REGION.CENTER) 253 regionString = DockingConstants.CENTER_REGION; 254 else if (region == REGION.WEST) 255 regionString = DockingConstants.WEST_REGION; 256 else if (region == REGION.EAST) 257 regionString = DockingConstants.EAST_REGION; 258 else if (region == REGION.NORTH) 259 regionString = DockingConstants.NORTH_REGION; 260 else if (region == REGION.SOUTH) 261 regionString = DockingConstants.SOUTH_REGION; 262 else 263 throw new IllegalArgumentException ("unsupported region: " 264 + region.toString()); 265 return regionString; 266 } 267 268 277 280 public void loadDefaultPosition() { 281 dock(searchPanelDockable, REGION.WEST); 282 dock(contextualPanelDockable, REGION.EAST); 283 } 284 285 286 289 public void showDockable(String id) { 290 Dockable dockable = DockingManager.getDockable(id); 291 DockingManager.display(dockable); 292 } 293 } 294 | Popular Tags |