Search in sources :

Example 71 with Transfer

use of org.eclipse.swt.dnd.Transfer in project dbeaver by serge-rider.

the class GISLeafletViewer method updateToolbar.

private void updateToolbar() {
    toolBarManager.removeAll();
    toolBarManager.add(new Action(GISMessages.panel_leaflet_viewer_tool_bar_action_text_open, DBeaverIcons.getImageDescriptor(UIIcon.BROWSER)) {

        @Override
        public void run() {
            UIUtils.launchProgram(scriptFile.getAbsolutePath());
        }
    });
    toolBarManager.add(new Action(GISMessages.panel_leaflet_viewer_tool_bar_action_text_copy_as, DBeaverIcons.getImageDescriptor(UIIcon.PICTURE)) {

        @Override
        public void run() {
            Image image = new Image(Display.getDefault(), browser.getBounds());
            GC gc = new GC(image);
            try {
                browser.print(gc);
            } finally {
                gc.dispose();
            }
            ImageTransfer imageTransfer = ImageTransfer.getInstance();
            Clipboard clipboard = new Clipboard(Display.getCurrent());
            clipboard.setContents(new Object[] { image.getImageData() }, new Transfer[] { imageTransfer });
        }
    });
    toolBarManager.add(new Action(GISMessages.panel_leaflet_viewer_tool_bar_action_text_save_as, DBeaverIcons.getImageDescriptor(UIIcon.PICTURE_SAVE)) {

        @Override
        public void run() {
            final Shell shell = browser.getShell();
            FileDialog saveDialog = new FileDialog(shell, SWT.SAVE);
            String[] extensions = new String[SUPPORTED_FORMATS.length];
            String[] filterNames = new String[SUPPORTED_FORMATS.length];
            for (int i = 0; i < SUPPORTED_FORMATS.length; i++) {
                extensions[i] = "*." + SUPPORTED_FORMATS[i];
                filterNames[i] = SUPPORTED_FORMATS[i].toUpperCase() + " (*." + SUPPORTED_FORMATS[i] + ")";
            }
            saveDialog.setFilterExtensions(extensions);
            saveDialog.setFilterNames(filterNames);
            String filePath = DialogUtils.openFileDialog(saveDialog);
            if (filePath == null) {
                return;
            }
            int imageType = SWT.IMAGE_BMP;
            {
                String filePathLower = filePath.toLowerCase();
                if (filePathLower.endsWith(".png")) {
                    imageType = SWT.IMAGE_PNG;
                } else if (filePathLower.endsWith(".gif")) {
                    imageType = SWT.IMAGE_GIF;
                }
            }
            Image image = new Image(Display.getDefault(), browser.getBounds());
            GC gc = new GC(image);
            try {
                browser.print(gc);
            } finally {
                gc.dispose();
            }
            ImageLoader imageLoader = new ImageLoader();
            imageLoader.data = new ImageData[1];
            imageLoader.data[0] = image.getImageData();
            File outFile = new File(filePath);
            try (OutputStream fos = new FileOutputStream(outFile)) {
                imageLoader.save(fos, imageType);
            } catch (IOException e) {
                DBWorkbench.getPlatformUI().showError("Image save error", "Error saving as picture", e);
            }
            UIUtils.launchProgram(outFile.getAbsolutePath());
        }
    });
    toolBarManager.add(new Action(GISMessages.panel_leaflet_viewer_tool_bar_action_text_print, DBeaverIcons.getImageDescriptor(UIIcon.PRINT)) {

        @Override
        public void run() {
            GC gc = new GC(browser.getDisplay());
            try {
                browser.execute("javascript:window.print();");
            } finally {
                gc.dispose();
            }
        }
    });
    toolBarManager.add(new Separator());
    Action crsSelectorAction = new SelectCRSAction(this);
    toolBarManager.add(ActionUtils.makeActionContribution(crsSelectorAction, true));
    Action tilesSelectorAction = new SelectTilesAction(this);
    toolBarManager.add(ActionUtils.makeActionContribution(tilesSelectorAction, true));
    toolBarManager.add(new Action(GISMessages.panel_leaflet_viewer_tool_bar_action_text_flip, Action.AS_CHECK_BOX) {

        {
            setToolTipText(GISMessages.panel_leaflet_viewer_tool_bar_action_tool_tip_text_flip);
            setImageDescriptor(DBeaverIcons.getImageDescriptor(UIIcon.LINK_TO_EDITOR));
        }

        @Override
        public boolean isChecked() {
            return flipCoordinates;
        }

        @Override
        public void run() {
            flipCoordinates = !flipCoordinates;
            try {
                reloadGeometryData(lastValue, true);
            } catch (DBException e) {
                DBWorkbench.getPlatformUI().showError("Render error", "Error rendering geometry", e);
            }
            saveAttributeSettings();
            updateToolbar();
        }
    });
    toolBarManager.add(new Separator());
    toolBarManager.add(new Action(GISMessages.panel_leaflet_viewer_tool_bar_action_text_show_hide, Action.AS_CHECK_BOX) {

        {
            setImageDescriptor(DBeaverIcons.getImageDescriptor(UIIcon.PALETTE));
        }

        @Override
        public boolean isChecked() {
            return toolsVisible;
        }

        @Override
        public void run() {
            toolsVisible = !toolsVisible;
            updateControlsVisibility();
            updateToolbar();
        }
    });
    toolBarManager.update(true);
}
Also used : ImageTransfer(org.eclipse.swt.dnd.ImageTransfer) DBException(org.jkiss.dbeaver.DBException) Action(org.eclipse.jface.action.Action) Image(org.eclipse.swt.graphics.Image) ImageData(org.eclipse.swt.graphics.ImageData) ImageTransfer(org.eclipse.swt.dnd.ImageTransfer) Transfer(org.eclipse.swt.dnd.Transfer) Clipboard(org.eclipse.swt.dnd.Clipboard) GC(org.eclipse.swt.graphics.GC) ImageLoader(org.eclipse.swt.graphics.ImageLoader) Separator(org.eclipse.jface.action.Separator)

Example 72 with Transfer

use of org.eclipse.swt.dnd.Transfer in project dbeaver by serge-rider.

the class ResultSetUtils method copyToClipboard.

public static void copyToClipboard(Map<Transfer, Object> formats) {
    if (!formats.isEmpty()) {
        Clipboard clipboard = new Clipboard(Display.getCurrent());
        try {
            Transfer[] transfers = new Transfer[formats.size()];
            Object[] values = new Object[formats.size()];
            int index = 0;
            for (Map.Entry<Transfer, Object> fmtEntry : formats.entrySet()) {
                transfers[index] = fmtEntry.getKey();
                values[index] = fmtEntry.getValue();
                index++;
            }
            clipboard.setContents(values, transfers);
        } finally {
            clipboard.dispose();
        }
    }
}
Also used : Transfer(org.eclipse.swt.dnd.Transfer) TextTransfer(org.eclipse.swt.dnd.TextTransfer) Clipboard(org.eclipse.swt.dnd.Clipboard) Map(java.util.Map)

Example 73 with Transfer

use of org.eclipse.swt.dnd.Transfer in project dbeaver by serge-rider.

the class SpreadsheetPresentation method copySelection.

@NotNull
@Override
public Map<Transfer, Object> copySelection(ResultSetCopySettings settings) {
    boolean copyHTML = settings.isCopyHTML();
    StringBuilder tdt = new StringBuilder();
    StringBuilder html = new StringBuilder();
    byte[] binaryData = null;
    Map<Transfer, Object> formats = new LinkedHashMap<>();
    String columnDelimiter = settings.getColumnDelimiter();
    if (columnDelimiter == null) {
        columnDelimiter = "\t";
    }
    String rowDelimiter = settings.getRowDelimiter();
    if (rowDelimiter == null) {
        rowDelimiter = GeneralUtils.getDefaultLineSeparator();
    }
    String quoteString = settings.getQuoteString();
    if ((CommonUtils.isEmpty(quoteString))) {
        quoteString = "\"";
    }
    List<Object> selectedColumns = spreadsheet.getColumnSelection();
    IGridLabelProvider labelProvider = spreadsheet.getLabelProvider();
    if (copyHTML)
        html.append("<table border=\"1\">");
    if (settings.isCopyHeader()) {
        if (copyHTML)
            html.append("<thead>");
        if (settings.isCopyRowNumbers()) {
            tdt.append("#");
            if (copyHTML)
                html.append("<th>#</th>");
        }
        for (Object column : selectedColumns) {
            if (tdt.length() > 0) {
                tdt.append(columnDelimiter);
            }
            String columnText = labelProvider.getText(column);
            tdt.append(columnText);
            if (copyHTML)
                html.append("<th>").append(XMLUtils.escapeXml(columnText)).append("</th>");
        }
        tdt.append(rowDelimiter);
        if (copyHTML)
            html.append("</thead>").append(rowDelimiter);
    }
    if (copyHTML)
        html.append("<tbody>");
    List<GridCell> selectedCells = spreadsheet.getCellSelection();
    boolean quoteCells = settings.isQuoteCells() && selectedCells.size() > 1;
    boolean forceQuotes = settings.isForceQuotes();
    GridCell prevCell = null;
    for (GridCell cell : selectedCells) {
        if (prevCell == null || cell.row != prevCell.row) {
            // Next row
            if (prevCell != null && prevCell.col != cell.col) {
                // Fill empty row tail
                int prevColIndex = selectedColumns.indexOf(prevCell.col);
                for (int i = prevColIndex; i < selectedColumns.size() - 1; i++) {
                    tdt.append(columnDelimiter);
                    if (copyHTML)
                        html.append("<td></td>");
                }
            }
            if (prevCell != null) {
                tdt.append(rowDelimiter);
                if (copyHTML)
                    html.append("</tr>").append(rowDelimiter);
            }
            if (settings.isCopyRowNumbers()) {
                String rowNumber = labelProvider.getText(cell.row);
                tdt.append(rowNumber).append(columnDelimiter);
                if (copyHTML)
                    html.append("<td>").append(rowNumber).append("</td>");
            }
            if (copyHTML)
                html.append("<tr>");
        }
        if (prevCell != null && prevCell.col != cell.col) {
            int prevColIndex = selectedColumns.indexOf(prevCell.col);
            int curColIndex = selectedColumns.indexOf(cell.col);
            for (int i = prevColIndex; i < curColIndex; i++) {
                tdt.append(columnDelimiter);
                if (i != prevColIndex) {
                    if (copyHTML)
                        html.append("<td></td>");
                }
            }
        }
        boolean recordMode = controller.isRecordMode();
        DBDAttributeBinding column = (DBDAttributeBinding) (!recordMode ? cell.col : cell.row);
        ResultSetRow row = (ResultSetRow) (!recordMode ? cell.row : cell.col);
        Object value = controller.getModel().getCellValue(column, row);
        if (binaryData == null && (column.getDataKind() == DBPDataKind.BINARY || column.getDataKind() == DBPDataKind.CONTENT)) {
            if (value instanceof byte[]) {
                binaryData = (byte[]) value;
            } else if (value instanceof DBDContent && !ContentUtils.isTextContent((DBDContent) value) && value instanceof DBDContentCached) {
                try {
                    binaryData = ContentUtils.getContentBinaryValue(new VoidProgressMonitor(), (DBDContent) value);
                } catch (DBCException e) {
                    log.debug("Error reading content binary value");
                }
            }
        }
        String cellText = column.getValueRenderer().getValueDisplayString(column.getAttribute(), value, settings.getFormat());
        if (forceQuotes || (quoteCells && !CommonUtils.isEmpty(cellText))) {
            if (forceQuotes || cellText.contains(columnDelimiter) || cellText.contains(rowDelimiter)) {
                cellText = quoteString + cellText + quoteString;
            }
        }
        tdt.append(cellText);
        if (copyHTML)
            html.append("<td>").append(XMLUtils.escapeXml(cellText)).append("</td> ");
        if (settings.isCut()) {
            IValueController valueController = new SpreadsheetValueController(controller, column, row, IValueController.EditType.NONE, null);
            if (!valueController.isReadOnly()) {
                valueController.updateValue(BaseValueManager.makeNullValue(valueController), false);
            }
        }
        prevCell = cell;
    }
    if (copyHTML) {
        html.append("</tbody>").append(rowDelimiter);
        html.append("</table>").append(rowDelimiter);
    }
    if (settings.isCut()) {
        controller.redrawData(false, false);
        controller.updatePanelsContent(false);
    }
    formats.put(TextTransfer.getInstance(), tdt.toString());
    if (copyHTML) {
        formats.put(HTMLTransfer.getInstance(), html.toString());
    }
    if (binaryData != null) {
        formats.put(SimpleByteArrayTransfer.getInstance(), binaryData);
    }
    return formats;
}
Also used : DBCException(org.jkiss.dbeaver.model.exec.DBCException) Transfer(org.eclipse.swt.dnd.Transfer) HTMLTransfer(org.eclipse.swt.dnd.HTMLTransfer) TextTransfer(org.eclipse.swt.dnd.TextTransfer) VoidProgressMonitor(org.jkiss.dbeaver.model.runtime.VoidProgressMonitor) IValueController(org.jkiss.dbeaver.ui.data.IValueController) NotNull(org.jkiss.code.NotNull)

Example 74 with Transfer

use of org.eclipse.swt.dnd.Transfer in project dbeaver by serge-rider.

the class ClipboardData method pushToClipboard.

public void pushToClipboard(Display display) {
    final int size = formats.size();
    final Transfer[] transfers = formats.keySet().toArray(new Transfer[size]);
    final Object[] objects = formats.values().toArray(new Object[size]);
    Clipboard clipboard = new Clipboard(display);
    try {
        clipboard.setContents(objects, transfers);
    } finally {
        clipboard.dispose();
    }
}
Also used : Transfer(org.eclipse.swt.dnd.Transfer) Clipboard(org.eclipse.swt.dnd.Clipboard)

Example 75 with Transfer

use of org.eclipse.swt.dnd.Transfer in project GT by Tencent.

the class CopySelectedItemsFromTableViewAction method run.

@Override
public void run() {
    StringBuffer sb = getContents();
    clipboard = new Clipboard(Display.getCurrent());
    Transfer[] transfers = new Transfer[] { TextTransfer.getInstance() };
    clipboard.setContents(new String[] { sb.toString() }, transfers);
}
Also used : TextTransfer(org.eclipse.swt.dnd.TextTransfer) Transfer(org.eclipse.swt.dnd.Transfer) Clipboard(org.eclipse.swt.dnd.Clipboard)

Aggregations

Transfer (org.eclipse.swt.dnd.Transfer)151 TextTransfer (org.eclipse.swt.dnd.TextTransfer)71 Point (org.eclipse.swt.graphics.Point)63 Clipboard (org.eclipse.swt.dnd.Clipboard)51 Menu (org.eclipse.swt.widgets.Menu)37 IMenuManager (org.eclipse.jface.action.IMenuManager)32 MenuManager (org.eclipse.jface.action.MenuManager)32 Separator (org.eclipse.jface.action.Separator)32 LocalSelectionTransfer (org.eclipse.jface.util.LocalSelectionTransfer)32 EditingDomainViewerDropAdapter (org.eclipse.emf.edit.ui.dnd.EditingDomainViewerDropAdapter)30 LocalTransfer (org.eclipse.emf.edit.ui.dnd.LocalTransfer)30 ViewerDragAdapter (org.eclipse.emf.edit.ui.dnd.ViewerDragAdapter)30 UnwrappingSelectionProvider (org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider)30 FileTransfer (org.eclipse.swt.dnd.FileTransfer)30 DropTargetEvent (org.eclipse.swt.dnd.DropTargetEvent)27 DropTarget (org.eclipse.swt.dnd.DropTarget)23 GridData (org.eclipse.swt.layout.GridData)23 GridLayout (org.eclipse.swt.layout.GridLayout)22 Composite (org.eclipse.swt.widgets.Composite)22 IStructuredSelection (org.eclipse.jface.viewers.IStructuredSelection)20