Issue #659 make fixes to float/dock

Former-commit-id: 1f54c2d09d [formerly cc5c172a77 [formerly 6ce7d566d2da59436b6d141ad96503873b11f1aa]]
Former-commit-id: cc5c172a77
Former-commit-id: 5accda84c9
This commit is contained in:
Matt Nash 2012-06-11 10:21:40 -05:00
parent 0898ad6970
commit 8acb6d3be2
2 changed files with 31 additions and 11 deletions

View file

@ -141,13 +141,6 @@ public class CaveDetachedWindow extends DetachedWindow implements
private void updateTitle() {
if (activePart != null) {
windowShell.setText(activePart.getPartName());
// Uncomment to set the shell title to match the title of the active
// part
// String text = activePart.getTitle();
//
// if (!text.equals(s.getText())) {
// s.setText(text);
// }
}
}

View file

@ -24,16 +24,18 @@ import java.io.File;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.ILayoutContainer;
import org.eclipse.ui.internal.PartPane;
import org.eclipse.ui.internal.PartPlaceholder;
import org.eclipse.ui.internal.ViewPane;
import org.eclipse.ui.internal.ViewSite;
import org.eclipse.ui.internal.WorkbenchPage;
@ -91,29 +93,52 @@ public abstract class CaveFloatingView extends ViewPart {
*/
protected void createToolbarButton() {
IToolBarManager mgr = getViewSite().getActionBars().getToolBarManager();
Action floatAction = new Action("Float", SWT.TOGGLE) {
final Action floatAction = new Action("Float", SWT.TOGGLE) {
@Override
public void run() {
// should only run when the user is currently attached to cave
// (or detached, but not a floating dialog)
this.setToolTipText("Dock");
setChecked(true);
detached = true;
WorkbenchPage page = (WorkbenchPage) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
bounds = ((ViewSite) ((ViewPart) getPart()).getViewSite())
.getPane().getBounds();
container = ((ViewSite) ((ViewPart) getPart()).getViewSite())
.getPane().getStack();
container.add(new PartPlaceholder("temp "));
window = new CaveDetachedWindow(page);
window.create();
window.open();
bounds.x += PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getShell().getMonitor()
.getBounds().x;
ViewPane pane = (ViewPane) ((ViewSite) getPart().getViewSite())
.getPane();
container = pane.getContainer();
window.drop(pane);
window.getShell().setBounds(bounds);
window.getShell().addShellListener(new ShellAdapter() {
@Override
public void shellDeactivated(ShellEvent e) {
detached = false;
setChecked(false);
setToolTipText("Float");
}
});
window.getShell().addListener(SWT.Modify, new Listener() {
@Override
public void handleEvent(Event event) {
if (window.getChildren().length == 0) {
window.getShell().setVisible(false);
setChecked(false);
setToolTipText("Float");
detached = false;
}
}
});
};
@Override
@ -122,7 +147,8 @@ public abstract class CaveFloatingView extends ViewPart {
run();
return;
}
this.setToolTipText("Float");
setToolTipText("Float");
setChecked(false);
detached = false;
WorkbenchPage page = (WorkbenchPage) PlatformUI.getWorkbench()
.getActiveWorkbenchWindow().getActivePage();
@ -131,6 +157,7 @@ public abstract class CaveFloatingView extends ViewPart {
Point point = new Point(bounds.x + bounds.width / 2, bounds.y
+ bounds.height / 2);
window.getShell().setVisible(false);
window = null;
DragUtil.dragTo(Display.getCurrent(), layoutPart, point, bounds);
}
};