📄 resizelistener.java
字号:
/*
* Created on Apr 18, 2005
*/
package org.flexdock.dockbar.event;
import java.awt.Component;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.flexdock.dockbar.DockbarManager;
import org.flexdock.dockbar.ViewPane;
import org.flexdock.dockbar.layout.DockbarLayout;
import org.flexdock.dockbar.layout.DockbarLayoutManager;
import org.flexdock.docking.Dockable;
import org.flexdock.docking.props.DockablePropertySet;
import org.flexdock.docking.state.MinimizationManager;
import org.flexdock.util.RootWindow;
/**
* @author Christopher Butler
*/
public class ResizeListener extends MouseAdapter implements MouseMotionListener {
private DockbarManager manager;
private Dockable dockable;
private JPanel dragGlassPane;
private Component cachedGlassPane;
private RootWindow rootWindow;
public ResizeListener(DockbarManager mgr) {
manager = mgr;
dragGlassPane = new JPanel();
dragGlassPane.setOpaque(false);
}
public void mouseMoved(MouseEvent e) {
// noop
}
public void mousePressed(MouseEvent e) {
dockable = manager.getActiveDockable();
rootWindow = manager.getWindow();
cachedGlassPane = rootWindow.getGlassPane();
rootWindow.setGlassPane(dragGlassPane);
dragGlassPane.setCursor(manager.getResizeCursor());
dragGlassPane.setVisible(true);
manager.setDragging(true);
}
public void mouseReleased(MouseEvent e) {
dockable = null;
dragGlassPane.setVisible(false);
manager.setDragging(false);
if(rootWindow!=null && cachedGlassPane!=null) {
rootWindow.setGlassPane(cachedGlassPane);
cachedGlassPane = null;
rootWindow = null;
}
}
public void mouseDragged(MouseEvent e) {
if(dockable!=null)
handleResizeEvent(e);
}
private void handleResizeEvent(MouseEvent me) {
ViewPane viewPane = manager.getViewPane();
Point p = SwingUtilities.convertPoint((Component)me.getSource(), me.getPoint(), viewPane.getParent());
Rectangle viewArea = DockbarLayoutManager.getManager().getViewArea(manager, dockable);
p.x = Math.max(p.x, 0);
p.x = Math.min(p.x, viewArea.width);
p.y = Math.max(p.y, 0);
p.y = Math.min(p.y, viewArea.height);
int orientation = manager.getActiveEdge();
int loc = orientation==MinimizationManager.LEFT || orientation==MinimizationManager.RIGHT? p.x: p.y;
int dim = orientation==MinimizationManager.LEFT || orientation==MinimizationManager.RIGHT? viewArea.width: viewArea.height;
if(orientation==MinimizationManager.RIGHT || orientation==MinimizationManager.BOTTOM)
loc = dim - loc;
float percent = (float)loc/(float)dim;
float minPercent = (float)DockbarLayout.MINIMUM_VIEW_SIZE/(float)dim;
percent = Math.max(percent, minPercent);
DockablePropertySet props = dockable.getDockingProperties();
props.setPreviewSize(percent);
manager.revalidate();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -