📄 dockablewindowmanager.java
字号:
{ Entry entry = (Entry)iter.next(); if(entry.win != null) { entry.container.unregister(entry); } } iter = clones.iterator(); while(iter.hasNext()) { Entry entry = (Entry)iter.next(); if(entry.win != null) { entry.container.unregister(entry); } } } //}}} //{{{ getTopDockingArea() method public PanelWindowContainer getTopDockingArea() { return top; } //}}} //{{{ getLeftDockingArea() method public PanelWindowContainer getLeftDockingArea() { return left; } //}}} //{{{ getBottomDockingArea() method public PanelWindowContainer getBottomDockingArea() { return bottom; } //}}} //{{{ getRightDockingArea() method public PanelWindowContainer getRightDockingArea() { return right; } //}}} //{{{ createPopupMenu() method public JPopupMenu createPopupMenu( final DockableWindowContainer container, final String dockable, final boolean clone) { JPopupMenu popup = new JPopupMenu(); if(dockable == null && container instanceof PanelWindowContainer) { ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent evt) { showDockableWindow(evt.getActionCommand()); } }; String[] dockables = ((PanelWindowContainer) container).getDockables(); for(int i = 0; i < dockables.length; i++) { String name = dockables[i]; JMenuItem item = new JMenuItem(getDockableTitle(name)); item.setActionCommand(name); item.addActionListener(listener); popup.add(item); } } else { JMenuItem caption = new JMenuItem(getDockableTitle(dockable)); caption.setEnabled(false); popup.add(caption); popup.addSeparator(); String currentPos = jEdit.getProperty(dockable + ".dock-position",FLOATING); if(!clone) { String[] positions = { FLOATING, TOP, LEFT, BOTTOM, RIGHT }; for(int i = 0; i < positions.length; i++) { final String pos = positions[i]; if(pos.equals(currentPos)) continue; JMenuItem moveMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-" + pos)); moveMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jEdit.setProperty(dockable + ".dock-position",pos); EditBus.send(new DockableWindowUpdate( DockableWindowManager.this, DockableWindowUpdate.PROPERTIES_CHANGED, null )); showDockableWindow(dockable); } }); popup.add(moveMenuItem); } popup.addSeparator(); } JMenuItem cloneMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-clone")); cloneMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { floatDockableWindow(dockable); } }); popup.add(cloneMenuItem); popup.addSeparator(); JMenuItem closeMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-close")); closeMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { if(clone) ((FloatingWindowContainer)container).dispose(); else removeDockableWindow(dockable); } }); popup.add(closeMenuItem); if(!(clone || currentPos.equals(FLOATING))) { JMenuItem undockMenuItem = new JMenuItem(jEdit.getProperty("view.docking.menu-undock")); undockMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { jEdit.setProperty(dockable + ".dock-position",FLOATING); EditBus.send(new DockableWindowUpdate( DockableWindowManager.this, DockableWindowUpdate.PROPERTIES_CHANGED, null )); } }); popup.add(undockMenuItem); } } return popup; } //}}} //{{{ paintChildren() method public void paintChildren(Graphics g) { super.paintChildren(g); if(resizeRect != null) { g.setColor(Color.darkGray); g.fillRect(resizeRect.x,resizeRect.y, resizeRect.width,resizeRect.height); } } //}}} //{{{ handleMessage() method public void handleMessage(EBMessage msg) { if(msg instanceof DockableWindowUpdate) { if(((DockableWindowUpdate)msg).getWhat() == DockableWindowUpdate.PROPERTIES_CHANGED) propertiesChanged(); } else if(msg instanceof PropertiesChanged) propertiesChanged(); else if(msg instanceof PluginUpdate) { PluginUpdate pmsg = (PluginUpdate)msg; if(pmsg.getWhat() == PluginUpdate.LOADED) { Iterator iter = dockableWindowFactories .values().iterator(); while(iter.hasNext()) { Factory factory = (Factory)iter.next(); if(factory.plugin == pmsg.getPluginJAR()) addEntry(factory); } propertiesChanged(); } else if(pmsg.isExiting()) { // we don't care } else if(pmsg.getWhat() == PluginUpdate.DEACTIVATED) { Iterator iter = getAllPluginEntries( pmsg.getPluginJAR(),false); while(iter.hasNext()) { Entry entry = (Entry)iter.next(); entry.container.remove(entry); } } else if(pmsg.getWhat() == PluginUpdate.UNLOADED) { Iterator iter = getAllPluginEntries( pmsg.getPluginJAR(),true); while(iter.hasNext()) { Entry entry = (Entry)iter.next(); entry.container.unregister(entry); entry.win = null; entry.container = null; } } } } //}}} //{{{ Package-private members int resizePos; Rectangle resizeRect; //{{{ setResizePos() method void setResizePos(int resizePos, PanelWindowContainer resizing) { this.resizePos = resizePos; if(resizePos < 0) resizePos = 0; Rectangle newResizeRect = new Rectangle(0,0, PanelWindowContainer.SPLITTER_WIDTH - 2, PanelWindowContainer.SPLITTER_WIDTH - 2); if(resizing == top) { resizePos = Math.min(resizePos,getHeight() - top.buttonPanel.getHeight() - bottom.dockablePanel.getHeight() - bottom.buttonPanel.getHeight() - PanelWindowContainer.SPLITTER_WIDTH); newResizeRect.x = top.dockablePanel.getX() + 1; newResizeRect.y = resizePos + top.buttonPanel.getHeight() + 1; newResizeRect.width = top.dockablePanel.getWidth() - 2; } else if(resizing == left) { resizePos = Math.min(resizePos,getWidth() - left.buttonPanel.getWidth() - right.dockablePanel.getWidth() - right.buttonPanel.getWidth() - PanelWindowContainer.SPLITTER_WIDTH); newResizeRect.x = resizePos + left.buttonPanel.getWidth() + 1; newResizeRect.y = left.dockablePanel.getY() + 1; newResizeRect.height = left.dockablePanel.getHeight() - 2; } else if(resizing == bottom) { resizePos = Math.min(resizePos,getHeight() - bottom.buttonPanel.getHeight() - top.dockablePanel.getHeight() - top.buttonPanel.getHeight() - PanelWindowContainer.SPLITTER_WIDTH); newResizeRect.x = bottom.dockablePanel.getX() + 1; newResizeRect.y = getHeight() - bottom.buttonPanel.getHeight() - resizePos - PanelWindowContainer.SPLITTER_WIDTH + 2; newResizeRect.width = bottom.dockablePanel.getWidth() - 2; } else if(resizing == right) { resizePos = Math.min(resizePos,getWidth() - right.buttonPanel.getWidth() - left.dockablePanel.getWidth() - left.buttonPanel.getWidth() - PanelWindowContainer.SPLITTER_WIDTH); newResizeRect.x = getWidth() - right.buttonPanel.getWidth() - resizePos - PanelWindowContainer.SPLITTER_WIDTH + 1; newResizeRect.y = right.dockablePanel.getY() + 1; newResizeRect.height = right.dockablePanel.getHeight() - 2; } Rectangle toRepaint; if(resizeRect == null) toRepaint = newResizeRect; else toRepaint = resizeRect.union(newResizeRect); resizeRect = newResizeRect; repaint(toRepaint); } //}}} //{{{ finishResizing() method void finishResizing() { resizeRect = null; repaint(); } //}}} //}}} //{{{ Private members private View view; private Hashtable windows; private boolean alternateLayout; private PanelWindowContainer left; private PanelWindowContainer right; private PanelWindowContainer top; private PanelWindowContainer bottom; private ArrayList clones; //{{{ propertiesChanged() method private void propertiesChanged() { if(view.isPlainView()) return; alternateLayout = jEdit.getBooleanProperty("view.docking.alternateLayout"); String[] windowList = getRegisteredDockableWindows(); for(int i = 0; i < windowList.length; i++) { String dockable = windowList[i]; Entry entry = (Entry)windows.get(dockable); String newPosition = jEdit.getProperty(dockable + ".dock-position",FLOATING); if(newPosition.equals(entry.position)) { continue; } entry.position = newPosition; if(entry.container != null) { entry.container.unregister(entry); entry.container = null; entry.win = null; } if(newPosition.equals(FLOATING)) /* do nothing */; else { if(newPosition.equals(TOP)) entry.container = top; else if(newPosition.equals(LEFT)) entry.container = left; else if(newPosition.equals(BOTTOM)) entry.container = bottom; else if(newPosition.equals(RIGHT)) entry.container = right; else { Log.log(Log.WARNING,this, "Unknown position: " + newPosition); continue; } entry.container.register(entry); } } top.sortDockables(); left.sortDockables(); bottom.sortDockables(); right.sortDockables(); revalidate(); repaint(); } //}}} //{{{ addEntry() method private void addEntry(Factory factory) { Entry e; if(view.isPlainView()) { // don't show menu items to dock into a plain view e = new Entry(factory,FLOATING); } else { e = new Entry(factory); if(e.position.equals(FLOATING)) /* nothing to do */; else if(e.position.equals(TOP)) e.container = top; else if(e.position.equals(LEFT)) e.container = left; else if(e.position.equals(BOTTOM)) e.container = bottom; else if(e.position.equals(RIGHT)) e.container = right; else { Log.log(Log.WARNING,this, "Unknown position: " + e.position); } if(e.container != null) e.container.register(e); } windows.put(factory.name,e); } //}}} //{{{ getAllPluginEntries() method /** * If remove is false, only remove from clones list, otherwise remove * from both entries and clones. */ private Iterator getAllPluginEntries(PluginJAR plugin, boolean remove) { java.util.List returnValue = new LinkedList(); Iterator iter = windows.values().iterator(); while(iter.hasNext()) { Entry entry = (Entry)iter.next(); if(entry.factory.plugin == plugin) { returnValue.add(entry); if(remove) iter.remove(); } } iter = clones.iterator(); while(iter.hasNext()) { Entry entry = (Entry)iter.next(); if(entry.factory.plugin == plugin) { returnValue.add(entry); iter.remove(); } } return returnValue.iterator(); } //}}} //}}} //}}} //{{{ DockableLayout class public class DockableLayout implements LayoutManager2 { // for backwards compatibility with plugins that fiddle with // jEdit's UI layout static final String CENTER = BorderLayout.CENTER; public static final String TOP_TOOLBARS = "top-toolbars"; public static final String BOTTOM_TOOLBARS = "bottom-toolbars"; static final String TOP_BUTTONS = "top-buttons"; static final String LEFT_BUTTONS = "left-buttons"; static final String BOTTOM_BUTTONS = "bottom-buttons"; static final String RIGHT_BUTTONS = "right-buttons"; Component topToolbars, bottomToolbars; Component center; Component top, left, bottom, right; Component topButtons, leftButtons, bottomButtons, rightButtons;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -