use of org.eclipse.swt.widgets.Canvas in project uiautomatorviewer by yangzaiCN.
the class UiAutomatorViewer method createContents.
/**
* Create contents of the application window.
*
* @param parent
*/
@Override
protected Control createContents(Composite parent) {
UiAutomatorModel.createInstance(this);
Composite basePane = new Composite(parent, SWT.NONE);
basePane.setLayout(new GridLayout(2, false));
mScreenshotCanvas = new Canvas(basePane, SWT.NONE);
mScreenshotCanvas.addMouseListener(new MouseAdapter() {
@Override
public void mouseUp(MouseEvent e) {
UiAutomatorModel.getModel().toggleExploreMode();
}
});
mScreenshotCanvas.setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_BLACK));
mScreenshotCanvas.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 3));
mScreenshotCanvas.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
if (mCachedScaleImage != null) {
// shifting the image here, so that there's a border around screen shot
// this makes highlighting red rectangles on the screen shot edges more visible
e.gc.drawImage(mCachedScaleImage, IMG_BORDER, IMG_BORDER);
Rectangle rect = UiAutomatorModel.getModel().getCurrentDrawingRect();
if (rect != null) {
e.gc.setForeground(e.gc.getDevice().getSystemColor(SWT.COLOR_RED));
if (UiAutomatorModel.getModel().isExploreMode()) {
// when we highlight nodes dynamically on mouse move,
// use dashed borders
e.gc.setLineStyle(SWT.LINE_DASH);
e.gc.setLineWidth(1);
} else {
// when highlighting nodes on tree node selection,
// use solid borders
e.gc.setLineStyle(SWT.LINE_SOLID);
e.gc.setLineWidth(2);
}
e.gc.drawRectangle(IMG_BORDER + getScaledSize(rect.x), IMG_BORDER + getScaledSize(rect.y), getScaledSize(rect.width), getScaledSize(rect.height));
}
}
}
});
mScreenshotCanvas.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent e) {
if (UiAutomatorModel.getModel().isExploreMode()) {
UiAutomatorModel.getModel().updateSelectionForCoordinates(getInverseScaledSize(e.x - IMG_BORDER), getInverseScaledSize(e.y - IMG_BORDER));
}
}
});
mScreenshotCanvas.setBackgroundImage(ImageHelper.loadImageDescriptorFromResource("images/logo.png").createImage());
ToolBarManager toolBarManager = new ToolBarManager(SWT.FLAT);
toolBarManager.add(mOpenFilesAction);
toolBarManager.add(mExpandAllAction);
toolBarManager.add(mScreenshotAction);
toolBarManager.createControl(basePane);
mTreeViewer = new TreeViewer(basePane, SWT.BORDER);
Tree tree = mTreeViewer.getTree();
GridData gd_Tree = new GridData(SWT.FILL, SWT.FILL, false, true, 1, 1);
gd_Tree.widthHint = 350;
tree.setLayoutData(gd_Tree);
mTreeViewer.setContentProvider(new BasicTreeNodeContentProvider());
// default LabelProvider uses toString() to generate text to display
mTreeViewer.setLabelProvider(new LabelProvider());
mTreeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
@Override
public void selectionChanged(SelectionChangedEvent event) {
if (event.getSelection().isEmpty()) {
UiAutomatorModel.getModel().setSelectedNode(null);
} else if (event.getSelection() instanceof IStructuredSelection) {
IStructuredSelection selection = (IStructuredSelection) event.getSelection();
Object o = selection.toArray()[0];
if (o instanceof BasicTreeNode) {
UiAutomatorModel.getModel().setSelectedNode((BasicTreeNode) o);
}
}
}
});
// move focus so that it's not on tool bar (looks weird)
tree.setFocus();
Group grpNodeDetail = new Group(basePane, SWT.NONE);
grpNodeDetail.setLayout(new FillLayout(SWT.HORIZONTAL));
GridData gd_grpNodeDetail = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
gd_grpNodeDetail.heightHint = FIXED_DETAIL_VIEW_HEIGHT;
gd_grpNodeDetail.minimumHeight = FIXED_DETAIL_VIEW_HEIGHT;
gd_grpNodeDetail.widthHint = FIXED_RHS_WIDTH;
gd_grpNodeDetail.minimumWidth = FIXED_RHS_WIDTH;
grpNodeDetail.setLayoutData(gd_grpNodeDetail);
grpNodeDetail.setText("Node Detail");
Composite tableContainer = new Composite(grpNodeDetail, SWT.NONE);
tableContainer.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1));
TableColumnLayout columnLayout = new TableColumnLayout();
tableContainer.setLayout(columnLayout);
mTableViewer = new TableViewer(tableContainer, SWT.BORDER | SWT.FULL_SELECTION);
Table table = mTableViewer.getTable();
table.setLinesVisible(true);
// use ArrayContentProvider here, it assumes the input to the TableViewer
// is an array, where each element represents a row in the table
mTableViewer.setContentProvider(new ArrayContentProvider());
TableViewerColumn tableViewerColumnKey = new TableViewerColumn(mTableViewer, SWT.NONE);
TableColumn tblclmnKey = tableViewerColumnKey.getColumn();
tableViewerColumnKey.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof AttributePair) {
// first column, shows the attribute name
return ((AttributePair) element).key;
}
return super.getText(element);
}
});
columnLayout.setColumnData(tblclmnKey, new ColumnWeightData(1, ColumnWeightData.MINIMUM_WIDTH, true));
TableViewerColumn tableViewerColumnValue = new TableViewerColumn(mTableViewer, SWT.NONE);
tableViewerColumnValue.setEditingSupport(new AttributeTableEditingSupport(mTableViewer));
TableColumn tblclmnValue = tableViewerColumnValue.getColumn();
columnLayout.setColumnData(tblclmnValue, new ColumnWeightData(2, ColumnWeightData.MINIMUM_WIDTH, true));
tableViewerColumnValue.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
if (element instanceof AttributePair) {
// second column, shows the attribute value
return ((AttributePair) element).value;
}
return super.getText(element);
}
});
return basePane;
}
use of org.eclipse.swt.widgets.Canvas in project archi by archimatetool.
the class OverviewOutlinePage method createControl.
@Override
public void createControl(Composite parent) {
if (fEditPart == null) {
return;
}
// create canvas and lws
fCanvas = new Canvas(parent, SWT.NONE);
LightweightSystem lws = new LightweightSystem(fCanvas);
fThumbnail = new ScrollableThumbnail((Viewport) fEditPart.getFigure());
fThumbnail.setUseScaledGraphics(false);
fThumbnail.setSource(fEditPart.getLayer(LayerConstants.PRINTABLE_LAYERS));
fThumbnail.setBorder(new MarginBorder(3));
lws.setContents(fThumbnail);
// Help
PlatformUI.getWorkbench().getHelpSystem().setHelp(fCanvas, HELP_ID);
}
use of org.eclipse.swt.widgets.Canvas in project archi by archimatetool.
the class SimpleSWTExample method createMainPanel.
private void createMainPanel() {
mainComposite = new Canvas(mainShell, SWT.NO_BACKGROUND);
GridData mainGridData = new GridData(GridData.HORIZONTAL_ALIGN_FILL, GridData.VERTICAL_ALIGN_FILL, true, true);
mainGridData.widthHint = INITIAL_PANEL_WIDTH;
mainGridData.heightHint = INITIAL_PANEL_HEIGHT;
mainComposite.setLayoutData(mainGridData);
mainComposite.addPaintListener(new GraphPaintListener());
mainComposite.setBackground(new Color(255, 255, 255));
mainComposite.setLayout(null);
mainComposite.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent e) {
if (selectedEntity == null) {
// Nothing selected, lets use a mouse hover
SimpleNode oldEntity = hoverEntity;
hoverEntity = null;
for (Iterator iter = entities.iterator(); iter.hasNext() && selectedEntity == null; ) {
SimpleNode entity = (SimpleNode) iter.next();
double x = entity.getX();
double y = entity.getY();
double w = entity.getWidth();
double h = entity.getHeight();
Rectangle rect = new Rectangle((int) x, (int) y, (int) w, (int) h);
if (rect.contains(e.x, e.y)) {
hoverEntity = entity;
hoverEntity.ignoreInLayout(true);
hoverEntity.setSelected();
break;
}
}
if (oldEntity != null && oldEntity != hoverEntity) {
oldEntity.ignoreInLayout(false);
oldEntity.setUnSelected();
}
}
}
});
mainComposite.addMouseListener(new MouseListener() {
@Override
public void mouseDoubleClick(MouseEvent e) {
}
@Override
public void mouseDown(MouseEvent e) {
selectedEntity = null;
hoverEntity = null;
for (Iterator iter = entities.iterator(); iter.hasNext() && selectedEntity == null; ) {
SimpleNode entity = (SimpleNode) iter.next();
double x = entity.getX();
double y = entity.getY();
double w = entity.getWidth();
double h = entity.getHeight();
Rectangle rect = new Rectangle((int) x, (int) y, (int) w, (int) h);
if (rect.contains(e.x, e.y)) {
selectedEntity = entity;
}
}
if (selectedEntity != null) {
mouseDownPoint = new Point(e.x, e.y);
selectedEntityPositionAtMouseDown = new Point((int) selectedEntity.getX(), (int) selectedEntity.getY());
selectedEntity.ignoreInLayout(true);
selectedEntity.setSelected();
} else {
mouseDownPoint = null;
selectedEntityPositionAtMouseDown = null;
}
}
@Override
public void mouseUp(MouseEvent e) {
if (selectedEntity != null) {
selectedEntity.ignoreInLayout(false);
selectedEntity.setUnSelected();
List relatedNodes = selectedEntity.getRelatedEntities();
for (Iterator iter = relatedNodes.iterator(); iter.hasNext(); ) {
SimpleNode element = (SimpleNode) iter.next();
element.setUnSelected();
}
SimpleRelationship[] rels = selectedEntity.getRelationships();
for (int i = 0; i < rels.length; i++) {
rels[i].resetLineWidth();
}
}
selectedEntity = null;
mouseDownPoint = null;
selectedEntityPositionAtMouseDown = null;
}
});
// stops the algorithm when the window is closed
mainComposite.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
if (currentLayoutAlgorithm != null) {
currentLayoutAlgorithm.stop();
}
}
});
mainComposite.addMouseMoveListener(new MouseMoveListener() {
@Override
public void mouseMove(MouseEvent e) {
if (selectedEntity != null && mouseDownPoint != null) {
double dx = e.x - mouseDownPoint.x;
double dy = e.y - mouseDownPoint.y;
selectedEntity.setLocation(selectedEntityPositionAtMouseDown.x + dx, selectedEntityPositionAtMouseDown.y + dy);
mainComposite.redraw();
}
}
});
}
use of org.eclipse.swt.widgets.Canvas in project archi by archimatetool.
the class ProfilesManagerDialog method createButtonPanel.
/**
* Create the button panel
*/
private void createButtonPanel(Composite parent) {
Composite client = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.marginHeight = 0;
layout.marginWidth = 0;
client.setLayout(layout);
GridDataFactory.create(GridData.VERTICAL_ALIGN_BEGINNING).applyTo(client);
fButtonNew = new Button(client, SWT.PUSH);
fButtonNew.setText(Messages.ProfilesManagerDialog_10);
GridDataFactory.create(GridData.FILL_HORIZONTAL).applyTo(fButtonNew);
fButtonNew.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
createNewProfile();
}
});
fButtonDelete = new Button(client, SWT.PUSH);
fButtonDelete.setText(Messages.ProfilesManagerDialog_11);
fButtonDelete.setEnabled(false);
GridDataFactory.create(GridData.FILL_HORIZONTAL).applyTo(fButtonDelete);
fButtonDelete.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
deleteSelectedProfiles();
}
});
fImageButton = new Button(client, SWT.PUSH);
fImageButton.setText(Messages.ProfilesManagerDialog_12);
fImageButton.setEnabled(false);
GridDataFactory.create(GridData.FILL_HORIZONTAL).applyTo(fImageButton);
// Create sub-menu for Image button
MenuManager menuManager = new MenuManager();
menuManager.add(fActionChooseImage);
menuManager.add(fActionClearImage);
Menu menu = menuManager.createContextMenu(fImageButton.getShell());
// Image Button is clicked...
fImageButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
// Display sub menu below button
Rectangle buttonBounds = fImageButton.getBounds();
menu.setLocation(fImageButton.getParent().toDisplay(buttonBounds.x - 0, buttonBounds.y + buttonBounds.height));
menu.setVisible(true);
}
});
fImagePreview = new Canvas(client, SWT.BORDER);
GridDataFactory.create(SWT.NONE).hint(IMAGE_SIZE, IMAGE_SIZE).applyTo(fImagePreview);
fImagePreview.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
if (fPreviewImage != null) {
e.gc.setAntialias(SWT.ON);
e.gc.setInterpolation(SWT.HIGH);
Rectangle imageBounds = fPreviewImage.getBounds();
Rectangle newSize = ImageFactory.getScaledImageSize(fPreviewImage, IMAGE_SIZE);
// Centre the image
int x = (IMAGE_SIZE - newSize.width) / 2;
int y = (IMAGE_SIZE - newSize.height) / 2;
e.gc.drawImage(fPreviewImage, 0, 0, imageBounds.width, imageBounds.height, x, y, newSize.width, newSize.height);
}
}
});
fImagePreview.addListener(SWT.MouseDoubleClick, new Listener() {
@Override
public void handleEvent(Event event) {
if (fActionChooseImage.isEnabled()) {
chooseImage();
}
}
});
fImagePreview.addDisposeListener((e) -> {
disposePreviewImage();
});
}
use of org.eclipse.swt.widgets.Canvas in project archi by archimatetool.
the class IconSection method createControls.
@Override
protected void createControls(Composite parent) {
createLabel(parent, Messages.IconSection_9, ITabbedLayoutConstants.STANDARD_LABEL_WIDTH, SWT.NONE);
fCanvas = new Canvas(parent, SWT.BORDER);
getWidgetFactory().adapt(fCanvas);
GridData gd = new GridData(SWT.NONE, SWT.NONE, false, false);
gd.widthHint = IMAGE_SIZE;
gd.heightHint = IMAGE_SIZE;
fCanvas.setLayoutData(gd);
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
fCanvas.setLayout(layout);
fCanvas.addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
disposeImage();
}
});
fCanvas.addListener(SWT.MouseDoubleClick, new Listener() {
@Override
public void handleEvent(Event event) {
if (fImageButton.isEnabled()) {
chooseImage();
}
}
});
fCanvas.addPaintListener(new PaintListener() {
@Override
public void paintControl(PaintEvent e) {
if (fImage != null) {
e.gc.setAntialias(SWT.ON);
e.gc.setInterpolation(SWT.HIGH);
Rectangle imageBounds = fImage.getBounds();
Rectangle newSize = ImageFactory.getScaledImageSize(fImage, IMAGE_SIZE);
// Centre the image
int x = (IMAGE_SIZE - newSize.width) / 2;
int y = (IMAGE_SIZE - newSize.height) / 2;
e.gc.drawImage(fImage, 0, 0, imageBounds.width, imageBounds.height, x, y, newSize.width, newSize.height);
}
}
});
String tooltip = Messages.IconSection_10;
fCanvas.setToolTipText(tooltip);
DropTarget target = new DropTarget(fCanvas, DND.DROP_MOVE | DND.DROP_COPY | DND.DROP_DEFAULT);
target.setTransfer(new Transfer[] { FileTransfer.getInstance() });
target.addDropListener(new DropTargetAdapter() {
@Override
public void drop(DropTargetEvent event) {
if (event.data instanceof String[] && fImageButton.isEnabled()) {
File file = new File(((String[]) event.data)[0]);
setImage(file);
}
}
});
// Image Button
createImageButton(parent);
// Position
createLabel(parent, Messages.IconSection_11, ITabbedLayoutConstants.STANDARD_LABEL_WIDTH, SWT.CENTER);
fComboPosition = new Combo(parent, SWT.READ_ONLY);
fComboPosition.setItems(fComboPositionItems);
getWidgetFactory().adapt(fComboPosition, true, true);
gd = new GridData(SWT.NONE, SWT.NONE, false, false);
fComboPosition.setLayoutData(gd);
fComboPosition.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
CompoundCommand result = new CompoundCommand();
for (EObject iconic : getEObjects()) {
if (isAlive(iconic)) {
Command cmd = new EObjectFeatureCommand(Messages.IconSection_12, iconic, IArchimatePackage.Literals.ICONIC__IMAGE_POSITION, fComboPosition.getSelectionIndex());
if (cmd.canExecute()) {
result.add(cmd);
}
}
}
executeCommand(result.unwrap());
}
});
// Help
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, HELP_ID);
}
Aggregations