/**
* Copyright (c) 2012 by JP Moresmau
* This code is made available under the terms of the Eclipse Public License,
* version 1.0 (EPL). See http://www.eclipse.org/legal/epl-v10.html
*/
package net.sf.eclipsefp.haskell.visual.ui;
import net.sf.eclipsefp.haskell.visual.ui.text.VisualTexts;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
/**
* @author JP Moresmau
*
*/
public class Desktop extends Composite {
private Point mouseDownPoint;
/**
* @param parent
* @param style
*/
public Desktop(Composite parent, int style) {
super(parent, style);
setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_WHITE));
setLayout(null);
Bubble b=new Bubble(this,SWT.NONE);
Menu ctxMenu=new Menu(this);
addMouseListener(new MouseAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent)
*/
@Override
public void mouseDown(MouseEvent e) {
mouseDownPoint=new Point(e.x, e.y);
}
});
MenuItem ctxAdd=new MenuItem(ctxMenu, SWT.PUSH);
ctxAdd.setText(VisualTexts.desktop_bubble_new);
ctxAdd.addSelectionListener(new SelectionAdapter() {
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e) {
Bubble nb=new Bubble(Desktop.this,SWT.NONE);
Desktop.this.setBounds(mouseDownPoint!=null?mouseDownPoint.x:e.x, mouseDownPoint!=null?mouseDownPoint.y:e.y, nb);
}
});
setMenu(ctxMenu);
setBounds(0, 0, b);
}
public void setBounds(int x,int y,Control c){
Point p=c.computeSize(SWT.DEFAULT, SWT.DEFAULT);
c.setBounds(x, y, p.x, p.y);
}
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setText ("Shell");
shell.setSize (200, 200);
shell.setLayout(new GridLayout(1,false));
Desktop d=new Desktop(shell,SWT.NONE);
d.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL));
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ()) display.sleep ();
}
display.dispose ();
}
}