Search in sources :

Example 66 with PaintListener

use of org.eclipse.swt.events.PaintListener in project BiglyBT by BiglySoftware.

the class SWTBGImagePainter method main.

public static void main(String[] args) {
    Display display = Display.getDefault();
    Shell shell = new Shell(display, SWT.DIALOG_TRIM);
    shell.setLayout(new FillLayout());
    Composite c = new Composite(shell, SWT.BORDER);
    c.setLayout(new FillLayout());
    c.addPaintListener(new PaintListener() {

        @Override
        public void paintControl(PaintEvent e) {
            e.gc.drawLine(0, 0, 100, 50);
        }
    });
    Label lbl = new Label(c, SWT.NONE);
    lbl.setText("text");
    shell.open();
    while (!shell.isDisposed()) {
        if (display.readAndDispatch()) {
            display.sleep();
        }
    }
}
Also used : PaintEvent(org.eclipse.swt.events.PaintEvent) PaintListener(org.eclipse.swt.events.PaintListener) FillLayout(org.eclipse.swt.layout.FillLayout)

Example 67 with PaintListener

use of org.eclipse.swt.events.PaintListener in project BiglyBT by BiglySoftware.

the class SBC_LibraryView method skinObjectInitialShow.

// @see SkinView#showSupport(SWTSkinObject, java.lang.Object)
@Override
public Object skinObjectInitialShow(final SWTSkinObject skinObject, Object params) {
    selectedContentListener = new SelectedContentListener() {

        @Override
        public void currentlySelectedContentChanged(ISelectedContent[] currentContent, String viewId) {
            selection_count = currentContent.length;
            long total_size = 0;
            long total_done = 0;
            ArrayList<DownloadManager> dms = new ArrayList<>(currentContent.length);
            for (ISelectedContent sc : currentContent) {
                DownloadManager dm = sc.getDownloadManager();
                if (dm != null) {
                    dms.add(dm);
                    int file_index = sc.getFileIndex();
                    if (file_index == -1) {
                        DiskManagerFileInfo[] file_infos = dm.getDiskManagerFileInfoSet().getFiles();
                        for (DiskManagerFileInfo file_info : file_infos) {
                            if (!file_info.isSkipped()) {
                                total_size += file_info.getLength();
                                total_done += file_info.getDownloaded();
                            }
                        }
                    } else {
                        DiskManagerFileInfo file_info = dm.getDiskManagerFileInfoSet().getFiles()[file_index];
                        if (!file_info.isSkipped()) {
                            total_size += file_info.getLength();
                            total_done += file_info.getDownloaded();
                        }
                    }
                }
            }
            selection_size = total_size;
            selection_done = total_done;
            selection_dms = dms.toArray(new DownloadManager[dms.size()]);
            SB_Transfers transfers = MainMDISetup.getSb_transfers();
            if (transfers != null) {
                transfers.triggerCountRefreshListeners();
            }
        }
    };
    SelectedContentManager.addCurrentlySelectedContentListener(selectedContentListener);
    soWait = null;
    try {
        soWait = getSkinObject("library-wait");
        soWaitProgress = getSkinObject("library-wait-progress");
        soWaitTask = (SWTSkinObjectText) getSkinObject("library-wait-task");
        if (soWaitProgress != null) {
            soWaitProgress.getControl().addPaintListener(new PaintListener() {

                @Override
                public void paintControl(PaintEvent e) {
                    assert e != null;
                    Control c = (Control) e.widget;
                    Point size = c.getSize();
                    e.gc.setBackground(ColorCache.getColor(e.display, "#23a7df"));
                    int breakX = size.x * waitProgress / 100;
                    e.gc.fillRectangle(0, 0, breakX, size.y);
                    e.gc.setBackground(ColorCache.getColor(e.display, "#cccccc"));
                    e.gc.fillRectangle(breakX, 0, size.x - breakX, size.y);
                }
            });
        }
        soLibraryInfo = (SWTSkinObjectText) getSkinObject("library-info");
        if (soLibraryInfo != null) {
            MainMDISetup.getSb_transfers().addCountRefreshListener(new SB_Transfers.countRefreshListener() {

                final Map<Composite, ExtraInfoProvider> extra_info_map = new HashMap<>();

                {
                    soLibraryInfo.getControl().getParent().setData("ViewUtils:ViewTitleExtraInfo", new ViewUtils.ViewTitleExtraInfo() {

                        @Override
                        public void update(Composite reporter, int count, int active) {
                            ExtraInfoProvider provider = getProvider(reporter);
                            if (provider == null) {
                                return;
                            }
                            if (provider.value != count || provider.active != active) {
                                provider.value = count;
                                provider.active = active;
                                if (viewMode == provider.view_mode && provider.enabled) {
                                    MainMDISetup.getSb_transfers().triggerCountRefreshListeners();
                                }
                            }
                        }

                        @Override
                        public void setEnabled(Composite reporter, boolean enabled) {
                            ExtraInfoProvider provider = getProvider(reporter);
                            if (provider == null) {
                                return;
                            }
                            if (provider.enabled != enabled) {
                                provider.enabled = enabled;
                                if (viewMode == provider.view_mode) {
                                    MainMDISetup.getSb_transfers().triggerCountRefreshListeners();
                                }
                            }
                        }

                        private ExtraInfoProvider getProvider(Composite reporter) {
                            synchronized (extra_info_map) {
                                ExtraInfoProvider provider = extra_info_map.get(reporter);
                                if (provider != null) {
                                    return (provider);
                                }
                                Composite temp = reporter;
                                while (temp != null) {
                                    Integer vm = (Integer) temp.getData("SBC_LibraryView:ViewMode");
                                    if (vm != null) {
                                        provider = new ExtraInfoProvider(vm);
                                        extra_info_map.put(reporter, provider);
                                        return (provider);
                                    }
                                    temp = temp.getParent();
                                }
                                Debug.out("No view mode found for " + reporter);
                                return (null);
                            }
                        }
                    });
                }

                // @see SBC_LibraryView.countRefreshListener#countRefreshed(SBC_LibraryView.stats, SBC_LibraryView.stats)
                @Override
                public void countRefreshed(SB_Transfers.stats statsWithLowNoise, SB_Transfers.stats statsNoLowNoise) {
                    SB_Transfers.stats stats = viewMode == MODE_SMALLTABLE ? statsWithLowNoise : statsNoLowNoise;
                    String s;
                    if (torrentFilterMode == TORRENTS_ALL || (datasource instanceof Tag)) {
                        if (datasource instanceof Category) {
                            Category cat = (Category) datasource;
                            String id = "library.category.header";
                            s = MessageText.getString(id, new String[] { (cat.getType() != Category.TYPE_USER) ? MessageText.getString(cat.getName()) : cat.getName() });
                        } else if (datasource instanceof Tag) {
                            Tag tag = (Tag) datasource;
                            String id = "library.tag.header";
                            s = MessageText.getString(id, new String[] { tag.getTagName(true) });
                            String desc = tag.getDescription();
                            if (desc != null) {
                                s += " - " + desc;
                            }
                        } else {
                            String id = "library.all.header";
                            if (stats.numComplete + stats.numIncomplete != 1) {
                                id += ".p";
                            }
                            s = MessageText.getString(id, new String[] { String.valueOf(stats.numComplete + stats.numIncomplete), String.valueOf(stats.numSeeding + stats.numDownloading) });
                            if (stats.numQueued > 0) {
                                s += ", " + MessageText.getString("label.num_queued", new String[] { String.valueOf(stats.numQueued) });
                            }
                        }
                    } else if (torrentFilterMode == TORRENTS_INCOMPLETE) {
                        String id = "library.incomplete.header";
                        if (stats.numDownloading != 1) {
                            id += ".p";
                        }
                        int numWaiting = Math.max(stats.numIncomplete - stats.numDownloading, 0);
                        s = MessageText.getString(id, new String[] { String.valueOf(stats.numDownloading), String.valueOf(numWaiting) });
                    } else if (torrentFilterMode == TORRENTS_UNOPENED || torrentFilterMode == TORRENTS_COMPLETE) {
                        // complete filtering currently uses same display text as unopened
                        String id = "library.unopened.header";
                        if (stats.numUnOpened != 1) {
                            id += ".p";
                        }
                        s = MessageText.getString(id, new String[] { String.valueOf(stats.numUnOpened) });
                    } else {
                        s = "";
                    }
                    synchronized (extra_info_map) {
                        int filter_total = 0;
                        int filter_active = 0;
                        boolean filter_enabled = false;
                        for (ExtraInfoProvider provider : extra_info_map.values()) {
                            if (viewMode == provider.view_mode) {
                                if (provider.enabled) {
                                    filter_enabled = true;
                                    filter_total += provider.value;
                                    filter_active += provider.active;
                                }
                            }
                        }
                        if (filter_enabled) {
                            String extra = MessageText.getString("filter.header.matches2", new String[] { String.valueOf(filter_total), String.valueOf(filter_active) });
                            s += " " + extra;
                        }
                    }
                    SB_Transfers transfers = MainMDISetup.getSb_transfers();
                    if (selection_count > 1) {
                        s += ", " + MessageText.getString("label.num_selected", new String[] { String.valueOf(selection_count) });
                        String size_str = null;
                        String rate_str = null;
                        if (selection_size > 0) {
                            if (selection_size == selection_done) {
                                size_str = DisplayFormatters.formatByteCountToKiBEtc(selection_size);
                            } else {
                                size_str = DisplayFormatters.formatByteCountToKiBEtc(selection_done) + "/" + DisplayFormatters.formatByteCountToKiBEtc(selection_size);
                            }
                        }
                        DownloadManager[] dms = selection_dms;
                        if (transfers.header_show_rates && dms.length > 1) {
                            long total_data_up = 0;
                            long total_prot_up = 0;
                            long total_data_down = 0;
                            long total_prot_down = 0;
                            for (DownloadManager dm : dms) {
                                DownloadManagerStats dm_stats = dm.getStats();
                                total_prot_up += dm_stats.getProtocolSendRate();
                                total_data_up += dm_stats.getDataSendRate();
                                total_prot_down += dm_stats.getProtocolReceiveRate();
                                total_data_down += dm_stats.getDataReceiveRate();
                            }
                            rate_str = MessageText.getString("ConfigView.download.abbreviated") + DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(total_data_down, total_prot_down) + " " + MessageText.getString("ConfigView.upload.abbreviated") + DisplayFormatters.formatDataProtByteCountToKiBEtcPerSec(total_data_up, total_prot_up);
                        }
                        if (size_str != null || rate_str != null) {
                            String temp;
                            if (size_str == null) {
                                temp = rate_str;
                            } else if (rate_str == null) {
                                temp = size_str;
                            } else {
                                temp = size_str + "; " + rate_str;
                            }
                            s += " (" + temp + ")";
                        }
                    }
                    if (transfers.header_show_uptime && transfers.totalStats != null) {
                        long up_secs = (transfers.totalStats.getSessionUpTime() / 60) * 60;
                        String op;
                        if (up_secs < 60) {
                            up_secs = 60;
                            op = "<";
                        } else {
                            op = " ";
                        }
                        String up_str = TimeFormatter.format2(up_secs, false);
                        if (s.equals("")) {
                            Debug.out("eh");
                        }
                        s += "; " + MessageText.getString("label.uptime_coarse", new String[] { op, up_str });
                    }
                    soLibraryInfo.setText(s);
                }

                class ExtraInfoProvider {

                    int view_mode;

                    boolean enabled;

                    int value;

                    int active;

                    private ExtraInfoProvider(int vm) {
                        view_mode = vm;
                    }
                }
            });
        }
    } catch (Exception ignored) {
    }
    // Core core = CoreFactory.getSingleton();
    if (!CoreFactory.isCoreRunning()) {
        if (soWait != null) {
            soWait.setVisible(true);
        // soWait.getControl().getParent().getParent().getParent().layout(true, true);
        }
        final Initializer initializer = Initializer.getLastInitializer();
        if (initializer != null) {
            initializer.addListener(new InitializerListener() {

                @Override
                public void reportPercent(final int percent) {
                    Utils.execSWTThread(new AERunnable() {

                        @Override
                        public void runSupport() {
                            if (soWaitProgress != null && !soWaitProgress.isDisposed()) {
                                waitProgress = percent;
                                soWaitProgress.getControl().redraw();
                                soWaitProgress.getControl().update();
                            }
                        }
                    });
                    if (percent > 100) {
                        initializer.removeListener(this);
                    }
                }

                @Override
                public void reportCurrentTask(String currentTask) {
                    if (soWaitTask != null && !soWaitTask.isDisposed()) {
                        soWaitTask.setText(currentTask);
                    }
                }
            });
        }
    }
    CoreFactory.addCoreRunningListener(new CoreRunningListener() {

        @Override
        public void coreRunning(final Core core) {
            PluginInterface pi = PluginInitializer.getDefaultInterface();
            final UIManager uim = pi.getUIManager();
            uim.addUIListener(new UIManagerListener() {

                @Override
                public void UIDetached(UIInstance instance) {
                }

                @Override
                public void UIAttached(UIInstance instance) {
                    if (instance instanceof UISWTInstance) {
                        uim.removeUIListener(this);
                        Utils.execSWTThread(new AERunnable() {

                            @Override
                            public void runSupport() {
                                if (soWait != null) {
                                    soWait.setVisible(false);
                                }
                                if (!skinObject.isDisposed()) {
                                    setupView(core, skinObject);
                                }
                            }
                        });
                    }
                }
            });
        }
    });
    return null;
}
Also used : Category(com.biglybt.core.category.Category) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) UIManager(com.biglybt.pif.ui.UIManager) DownloadManager(com.biglybt.core.download.DownloadManager) Control(org.eclipse.swt.widgets.Control) CoreRunningListener(com.biglybt.core.CoreRunningListener) DownloadManagerStats(com.biglybt.core.download.DownloadManagerStats) UIInstance(com.biglybt.pif.ui.UIInstance) Core(com.biglybt.core.Core) DiskManagerFileInfo(com.biglybt.core.disk.DiskManagerFileInfo) ISelectedContent(com.biglybt.ui.selectedcontent.ISelectedContent) PaintEvent(org.eclipse.swt.events.PaintEvent) Composite(org.eclipse.swt.widgets.Composite) PaintListener(org.eclipse.swt.events.PaintListener) PluginInterface(com.biglybt.pif.PluginInterface) SelectedContentListener(com.biglybt.ui.selectedcontent.SelectedContentListener) InitializerListener(com.biglybt.ui.InitializerListener) Point(org.eclipse.swt.graphics.Point) Point(org.eclipse.swt.graphics.Point) PluginInitializer(com.biglybt.pifimpl.local.PluginInitializer) Initializer(com.biglybt.ui.swt.Initializer) Tag(com.biglybt.core.tag.Tag) UISWTInstance(com.biglybt.ui.swt.pif.UISWTInstance) UIManagerListener(com.biglybt.pif.ui.UIManagerListener)

Example 68 with PaintListener

use of org.eclipse.swt.events.PaintListener in project BiglyBT by BiglySoftware.

the class PeerInfoView method createPeerInfoPanel.

private Composite createPeerInfoPanel(Composite parent) {
    GridLayout layout;
    GridData gridData;
    // Peer Info section contains
    // - Peer's Block display
    // - Peer's Datarate
    peerInfoComposite = new Composite(parent, SWT.NONE);
    layout = new GridLayout();
    layout.numColumns = 2;
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    peerInfoComposite.setLayout(layout);
    gridData = new GridData(GridData.FILL, GridData.FILL, true, true);
    Utils.setLayoutData(peerInfoComposite, gridData);
    imageLabel = new Label(peerInfoComposite, SWT.NULL);
    gridData = new GridData();
    if (ImageRepository.hasCountryFlags(false) || countryLocator != null)
        gridData.widthHint = 28;
    Utils.setLayoutData(imageLabel, gridData);
    topLabel = new Label(peerInfoComposite, SWT.NULL);
    gridData = new GridData(SWT.FILL, SWT.DEFAULT, false, false);
    Utils.setLayoutData(topLabel, gridData);
    sc = new ScrolledComposite(peerInfoComposite, SWT.V_SCROLL);
    sc.setExpandHorizontal(true);
    sc.setExpandVertical(true);
    layout = new GridLayout();
    layout.horizontalSpacing = 0;
    layout.verticalSpacing = 0;
    layout.marginHeight = 0;
    layout.marginWidth = 0;
    sc.setLayout(layout);
    gridData = new GridData(GridData.FILL, GridData.FILL, true, true, 2, 1);
    Utils.setLayoutData(sc, gridData);
    sc.getVerticalBar().setIncrement(BLOCK_SIZE);
    peerInfoCanvas = new Canvas(sc, SWT.NO_REDRAW_RESIZE | SWT.NO_BACKGROUND);
    gridData = new GridData(GridData.FILL, SWT.DEFAULT, true, false);
    Utils.setLayoutData(peerInfoCanvas, gridData);
    peerInfoCanvas.addPaintListener(new PaintListener() {

        @Override
        public void paintControl(PaintEvent e) {
            if (e.width <= 0 || e.height <= 0)
                return;
            try {
                Rectangle bounds = (img == null) ? null : img.getBounds();
                if (bounds == null) {
                    e.gc.fillRectangle(e.x, e.y, e.width, e.height);
                } else {
                    if (e.x + e.width > bounds.width)
                        e.gc.fillRectangle(bounds.width, e.y, e.x + e.width - bounds.width + 1, e.height);
                    if (e.y + e.height > bounds.height)
                        e.gc.fillRectangle(e.x, bounds.height, e.width, e.y + e.height - bounds.height + 1);
                    int width = Math.min(e.width, bounds.width - e.x);
                    int height = Math.min(e.height, bounds.height - e.y);
                    e.gc.drawImage(img, e.x, e.y, width, height, e.x, e.y, width, height);
                }
            } catch (Exception ex) {
            }
        }
    });
    Listener doNothingListener = new Listener() {

        @Override
        public void handleEvent(Event event) {
        }
    };
    peerInfoCanvas.addListener(SWT.KeyDown, doNothingListener);
    peerInfoCanvas.addListener(SWT.Resize, new Listener() {

        @Override
        public void handleEvent(Event e) {
            if (refreshInfoCanvasQueued || !peerInfoCanvas.isVisible()) {
                return;
            }
            // wrap in asyncexec because sc.setMinWidth (called later) doesn't work
            // too well inside a resize (the canvas won't size isn't always updated)
            Utils.execSWTThreadLater(100, new AERunnable() {

                @Override
                public void runSupport() {
                    if (refreshInfoCanvasQueued) {
                        return;
                    }
                    refreshInfoCanvasQueued = true;
                    if (img != null) {
                        int iOldColCount = img.getBounds().width / BLOCK_SIZE;
                        int iNewColCount = peerInfoCanvas.getClientArea().width / BLOCK_SIZE;
                        if (iOldColCount != iNewColCount)
                            refreshInfoCanvas();
                    }
                }
            });
        }
    });
    sc.setContent(peerInfoCanvas);
    Legend.createLegendComposite(peerInfoComposite, blockColors, new String[] { "PeersView.BlockView.Avail.Have", "PeersView.BlockView.Avail.NoHave", "PeersView.BlockView.NoAvail.Have", "PeersView.BlockView.NoAvail.NoHave", "PeersView.BlockView.Transfer", "PeersView.BlockView.NextRequest", "PeersView.BlockView.AvailCount" }, new GridData(SWT.FILL, SWT.DEFAULT, true, false, 2, 1));
    int iFontPixelsHeight = 10;
    int iFontPointHeight = (iFontPixelsHeight * 72) / Utils.getDPIRaw(peerInfoCanvas.getDisplay()).y;
    Font f = peerInfoCanvas.getFont();
    FontData[] fontData = f.getFontData();
    fontData[0].setHeight(iFontPointHeight);
    font = new Font(peerInfoCanvas.getDisplay(), fontData);
    return peerInfoComposite;
}
Also used : AERunnable(com.biglybt.core.util.AERunnable) PaintEvent(org.eclipse.swt.events.PaintEvent) PaintListener(org.eclipse.swt.events.PaintListener) UISWTViewCoreEventListener(com.biglybt.ui.swt.pifimpl.UISWTViewCoreEventListener) CoreRunningListener(com.biglybt.core.CoreRunningListener) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) PaintListener(org.eclipse.swt.events.PaintListener) GridLayout(org.eclipse.swt.layout.GridLayout) GridData(org.eclipse.swt.layout.GridData) ScrolledComposite(org.eclipse.swt.custom.ScrolledComposite) UISWTViewEvent(com.biglybt.ui.swt.pif.UISWTViewEvent) PaintEvent(org.eclipse.swt.events.PaintEvent) LogEvent(com.biglybt.core.logging.LogEvent)

Example 69 with PaintListener

use of org.eclipse.swt.events.PaintListener in project eclipse-integration-commons by spring-projects.

the class DashboardMainPage method displayUpdate.

private void displayUpdate(final SyndEntry entry, String severity, Composite composite, int pos, Control[] children) {
    ImageHyperlink link;
    FormText text;
    if (pos < children.length / 2) {
        link = (ImageHyperlink) children[pos * 2];
        link.setVisible(true);
        text = (FormText) children[pos * 2 + 1];
        text.setVisible(true);
    } else {
        link = toolkit.createImageHyperlink(composite, SWT.NONE);
        text = new FormText(composite, SWT.WRAP | SWT.MULTI | SWT.NO_BACKGROUND | SWT.NO_FOCUS);
        text.setHyperlinkSettings(toolkit.getHyperlinkGroup());
        final TableWrapData data = new TableWrapData();
        data.indent = UPDATE_INDENTATION;
        data.maxWidth = updateSection.getSize().x - UPDATE_TEXT_WRAP_INDENT;
        text.setLayoutData(data);
        text.addPaintListener(new PaintListener() {

            public void paintControl(PaintEvent e) {
                data.maxWidth = updateSection.getSize().x - UPDATE_TEXT_WRAP_INDENT;
            }
        });
        text.setBackground(toolkit.getColors().getBackground());
        text.addHyperlinkListener(new HyperlinkAdapter() {

            @Override
            public void linkActivated(HyperlinkEvent e) {
                if (e.data instanceof String) {
                    TasksUiUtil.openUrl((String) e.data);
                }
            }
        });
    }
    link.setText(entry.getTitle());
    TableWrapData linkData = new TableWrapData();
    if ("important".equals(severity)) {
        link.setImage(StsUiImages.getImage(StsUiImages.IMPORTANT));
        linkData.indent = 0;
    } else if ("warning".equals(severity)) {
        link.setImage(StsUiImages.getImage(StsUiImages.WARNING));
        linkData.indent = 0;
    } else {
        // link.setImage(IdeUiPlugin.getImage(ICON_BLOG_BLANK));
        linkData.indent = UPDATE_INDENTATION - 1;
    }
    link.setLayoutData(linkData);
    link.addHyperlinkListener(new HyperlinkAdapter() {

        @Override
        public void linkActivated(HyperlinkEvent e) {
            String url = entry.getLink();
            if (url == null) {
                return;
            }
            TasksUiUtil.openUrl(url);
        }
    });
    String description = getDescription(entry);
    if (entry.getPublishedDate() != null && description.endsWith("</p></form>")) {
        String dateString = DateFormat.getDateInstance(DateFormat.MEDIUM).format(entry.getPublishedDate());
        description = description.replace("</p></form>", " (" + dateString + ")</p></form>");
    } else if (entry.getPublishedDate() != null) {
        String dateString = DateFormat.getDateInstance(DateFormat.MEDIUM).format(entry.getPublishedDate());
        description = description + " (" + dateString + ")";
    }
    text.setText(description, description.startsWith("<form>"), true);
    text.setForeground(feedColor);
    text.setBackground(toolkit.getColors().getBackground());
    addImages(text, description);
}
Also used : TableWrapData(org.eclipse.ui.forms.widgets.TableWrapData) PaintEvent(org.eclipse.swt.events.PaintEvent) HyperlinkEvent(org.eclipse.ui.forms.events.HyperlinkEvent) ImageHyperlink(org.eclipse.ui.forms.widgets.ImageHyperlink) PaintListener(org.eclipse.swt.events.PaintListener) FormText(org.eclipse.ui.forms.widgets.FormText) HyperlinkAdapter(org.eclipse.ui.forms.events.HyperlinkAdapter)

Example 70 with PaintListener

use of org.eclipse.swt.events.PaintListener in project eclipse-integration-commons by spring-projects.

the class DashboardMainPage method displayFeed.

private void displayFeed(SyndEntry entry, Composite composite, final Section section, final int pos, Control[] children) {
    ImageHyperlink link;
    FormText text;
    if (pos < children.length / 2) {
        link = (ImageHyperlink) children[pos * 2];
        link.setVisible(true);
        text = (FormText) children[pos * 2 + 1];
        text.setVisible(true);
    } else {
        final ImageHyperlink newLink = toolkit.createImageHyperlink(composite, SWT.NONE);
        feedControls.add(newLink);
        link = newLink;
        link.addHyperlinkListener(new HyperlinkAdapter() {

            @Override
            public void linkActivated(HyperlinkEvent e) {
                Object source = e.getSource();
                if (source instanceof ImageHyperlink && ((ImageHyperlink) source).getData() != null) {
                    SyndEntry entry = (SyndEntry) ((ImageHyperlink) source).getData();
                    String url = entry.getLink();
                    if (url == null) {
                        return;
                    }
                    int urlPos = url.indexOf("?");
                    String newUrl = url;
                    if (urlPos > 0) {
                        newUrl = url.substring(0, urlPos + 1) + url.substring(urlPos + 1).replaceAll("\\?", "&");
                    }
                    TasksUiUtil.openUrl(url);
                    prefStore.setValue(IIdeUiConstants.PREF_FEED_ENTRY_READ_STATE + ":" + newUrl, true);
                    IdeUiPlugin.getDefault().savePluginPreferences();
                    newLink.setImage(IdeUiPlugin.getImage(ICON_BLOG_BLANK));
                }
            }
        });
        // text = new Text(composite, SWT.WRAP | SWT.MULTI |
        // SWT.NO_BACKGROUND);
        text = new FormText(composite, SWT.WRAP | SWT.MULTI | SWT.NO_BACKGROUND | SWT.NO_FOCUS);
        text.setHyperlinkSettings(toolkit.getHyperlinkGroup());
        feedControls.add(text);
        final TableWrapData data = new TableWrapData();
        data.indent = UPDATE_INDENTATION;
        data.maxWidth = section.getSize().x - FEEDS_TEXT_WRAP_INDENT;
        data.grabVertical = true;
        text.setLayoutData(data);
        text.addPaintListener(new PaintListener() {

            public void paintControl(PaintEvent e) {
                data.maxWidth = section.getSize().x - FEEDS_TEXT_WRAP_INDENT;
            }
        });
        text.setForeground(feedColor);
        text.setBackground(toolkit.getColors().getBackground());
    }
    String title = entry.getTitle();
    Date entryDate = new Date(0);
    if (entry.getUpdatedDate() != null) {
        entryDate = entry.getUpdatedDate();
    } else {
        entryDate = entry.getPublishedDate();
    }
    String dateString = "";
    if (entryDate != null) {
        dateString = DateFormat.getDateInstance(DateFormat.MEDIUM).format(entryDate);
    }
    String entryAuthor = "";
    if (entry.getAuthor() != null && entry.getAuthor().trim() != "") {
        entryAuthor = " by " + entry.getAuthor();
    }
    if (dateString.length() > 0 && entryAuthor.length() > 0) {
        link.setText(removeHtmlEntities(title));
    }
    TableWrapData linkData = new TableWrapData();
    if (!prefStore.getBoolean(IIdeUiConstants.PREF_FEED_ENTRY_READ_STATE + ":" + entry.getLink())) {
        link.setImage(IdeUiPlugin.getImage(ICON_BLOG_INCOMING));
        linkData.indent = 0;
    } else {
        // link.setImage(IdeUiPlugin.getImage(ICON_BLOG_BLANK));
        linkData.indent = UPDATE_INDENTATION - 1;
    }
    link.setLayoutData(linkData);
    link.setData(entry);
    String description = trimText(getDescription(entry));
    text.setText(description + " (" + dateString + entryAuthor + ")", false, false);
}
Also used : TableWrapData(org.eclipse.ui.forms.widgets.TableWrapData) HyperlinkEvent(org.eclipse.ui.forms.events.HyperlinkEvent) PaintEvent(org.eclipse.swt.events.PaintEvent) ImageHyperlink(org.eclipse.ui.forms.widgets.ImageHyperlink) PaintListener(org.eclipse.swt.events.PaintListener) SyndEntry(com.sun.syndication.feed.synd.SyndEntry) FormText(org.eclipse.ui.forms.widgets.FormText) Date(java.util.Date) HyperlinkAdapter(org.eclipse.ui.forms.events.HyperlinkAdapter)

Aggregations

PaintListener (org.eclipse.swt.events.PaintListener)89 PaintEvent (org.eclipse.swt.events.PaintEvent)88 Canvas (org.eclipse.swt.widgets.Canvas)32 Composite (org.eclipse.swt.widgets.Composite)29 MouseEvent (org.eclipse.swt.events.MouseEvent)26 GridData (org.eclipse.swt.layout.GridData)26 Rectangle (org.eclipse.swt.graphics.Rectangle)25 Point (org.eclipse.swt.graphics.Point)23 GridLayout (org.eclipse.swt.layout.GridLayout)22 MouseAdapter (org.eclipse.swt.events.MouseAdapter)15 SelectionEvent (org.eclipse.swt.events.SelectionEvent)15 DisposeEvent (org.eclipse.swt.events.DisposeEvent)14 DisposeListener (org.eclipse.swt.events.DisposeListener)14 FillLayout (org.eclipse.swt.layout.FillLayout)14 Control (org.eclipse.swt.widgets.Control)14 ControlEvent (org.eclipse.swt.events.ControlEvent)13 SelectionAdapter (org.eclipse.swt.events.SelectionAdapter)12 Event (org.eclipse.swt.widgets.Event)11 GC (org.eclipse.swt.graphics.GC)10 Button (org.eclipse.swt.widgets.Button)10