Search in sources :

Example 1 with MultipleDocumentInterfaceSWT

use of com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT in project BiglyBT by BiglySoftware.

the class SB_Transfers method setupTag.

public MdiEntry setupTag(final Tag tag) {
    MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT();
    if (mdi == null) {
        return null;
    }
    synchronized (tag_setup_lock) {
        String id = "Tag." + tag.getTagType().getTagType() + "." + tag.getTagID();
        if (mdi.getEntry(id) != null) {
            return null;
        }
        // find where to locate this in the sidebar
        TreeMap<Tag, String> name_map = new TreeMap<>(TagUIUtils.getTagComparator());
        name_map.put(tag, id);
        for (Tag t : tag.getTagType().getTags()) {
            if (t.isVisible()) {
                String tid = "Tag." + tag.getTagType().getTagType() + "." + t.getTagID();
                if (mdi.getEntry(tid) != null) {
                    name_map.put(t, tid);
                }
            }
        }
        String prev_id = null;
        for (String this_id : name_map.values()) {
            if (this_id == id) {
                break;
            }
            prev_id = this_id;
        }
        if (prev_id == null && name_map.size() > 1) {
            Iterator<String> it = name_map.values().iterator();
            it.next();
            prev_id = "~" + it.next();
        }
        boolean auto = tag.getTagType().isTagTypeAuto();
        ViewTitleInfo viewTitleInfo = new ViewTitleInfo() {

            @Override
            public Object getTitleInfoProperty(int pid) {
                if (pid == TITLE_TEXT) {
                    return (tag.getTagName(true));
                } else if (pid == TITLE_INDICATOR_TEXT) {
                    return (String.valueOf(tag.getTaggedCount()));
                } else if (pid == TITLE_INDICATOR_COLOR) {
                    TagType tag_type = tag.getTagType();
                    int[] def_color = tag_type.getColorDefault();
                    int[] tag_color = tag.getColor();
                    if (tag_color != def_color) {
                        return (tag_color);
                    }
                } else if (pid == TITLE_INDICATOR_TEXT_TOOLTIP) {
                    return (TagUIUtils.getTagTooltip(tag));
                }
                return null;
            }
        };
        MdiEntry entry;
        boolean closable = auto;
        if (tag.getTaggableTypes() == Taggable.TT_DOWNLOAD) {
            closable = true;
            String name = tag.getTagName(true);
            entry = mdi.createEntryFromSkinRef(MultipleDocumentInterface.SIDEBAR_HEADER_TRANSFERS, id, "library", name, viewTitleInfo, tag, closable, prev_id);
        } else {
            entry = mdi.createEntryFromEventListener(MultipleDocumentInterface.SIDEBAR_HEADER_TRANSFERS, new PeersGeneralView(tag), id, closable, null, prev_id);
            entry.setViewTitleInfo(viewTitleInfo);
        }
        if (closable) {
            entry.addListener(new MdiCloseListener() {

                @Override
                public void mdiEntryClosed(MdiEntry entry, boolean userClosed) {
                    if (userClosed && entry.getUserData(AUTO_CLOSE_KEY) == null) {
                        if (COConfigurationManager.getBooleanParameter("Library.TagInSideBar")) {
                            tag.setVisible(false);
                        }
                    }
                }
            });
        }
        if (entry != null) {
            String image_id = tag.getImageID();
            if (image_id != null) {
                entry.setImageLeftID(image_id);
            } else if (tag.getTagType().getTagType() == TagType.TT_PEER_IPSET) {
                entry.setImageLeftID("image.sidebar.tag-red");
            } else if (tag.getTagType().isTagTypePersistent()) {
                entry.setImageLeftID("image.sidebar.tag-green");
            } else {
                entry.setImageLeftID("image.sidebar.tag-blue");
            }
        }
        if (entry instanceof SideBarEntrySWT) {
            final SideBarEntrySWT entrySWT = (SideBarEntrySWT) entry;
            entrySWT.addListener(new MdiSWTMenuHackListener() {

                @Override
                public void menuWillBeShown(MdiEntry entry, Menu menuTree) {
                    TagUIUtils.createSideBarMenuItems(menuTree, tag);
                }
            });
        }
        if (!auto && entry != null) {
            MdiEntryDropListener dl = new MdiEntryDropListener() {

                @Override
                public boolean mdiEntryDrop(MdiEntry entry, Object payload) {
                    if (!(payload instanceof String)) {
                        return false;
                    }
                    boolean[] auto = tag.isTagAuto();
                    if (auto[0] && auto[1]) {
                        return (false);
                    }
                    final String dropped = (String) payload;
                    new AEThread2("Tagger") {

                        @Override
                        public void run() {
                            dropTorrentOnTag(tag, dropped);
                        }
                    }.start();
                    return true;
                }

                private void dropTorrentOnTag(Tag tag, String dropped) {
                    String[] split = Constants.PAT_SPLIT_SLASH_N.split(dropped);
                    if (split.length <= 1) {
                        return;
                    }
                    String type = split[0];
                    if (!type.startsWith("DownloadManager") && !type.startsWith("DiskManagerFileInfo")) {
                        return;
                    }
                    GlobalManager gm = CoreFactory.getSingleton().getGlobalManager();
                    List<DownloadManager> listDMs = new ArrayList<>();
                    boolean doAdd = false;
                    for (int i = 1; i < split.length; i++) {
                        String hash = split[i];
                        // for files
                        int sep = hash.indexOf(";");
                        if (sep != -1) {
                            hash = hash.substring(0, sep);
                        }
                        try {
                            DownloadManager dm = gm.getDownloadManager(new HashWrapper(Base32.decode(hash)));
                            if (dm != null) {
                                listDMs.add(dm);
                                if (!doAdd && !tag.hasTaggable(dm)) {
                                    doAdd = true;
                                }
                            }
                        } catch (Throwable t) {
                        }
                        boolean[] auto = tag.isTagAuto();
                        for (DownloadManager dm : listDMs) {
                            if (doAdd) {
                                if (!auto[0]) {
                                    tag.addTaggable(dm);
                                }
                            } else {
                                if (!(auto[0] && auto[1])) {
                                    tag.removeTaggable(dm);
                                }
                            }
                        }
                    }
                }
            };
            boolean[] tag_auto = tag.isTagAuto();
            entry.setUserData(TAG_DATA_KEY, new Object[] { dl, tag_auto });
            if (!(tag_auto[0] && tag_auto[1])) {
                entry.addListener(dl);
            }
        }
        return entry;
    }
}
Also used : SideBarEntrySWT(com.biglybt.ui.swt.views.skin.sidebar.SideBarEntrySWT) MdiSWTMenuHackListener(com.biglybt.ui.swt.mdi.MdiSWTMenuHackListener) DownloadManager(com.biglybt.core.download.DownloadManager) GlobalManager(com.biglybt.core.global.GlobalManager) MultipleDocumentInterfaceSWT(com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT) Menu(org.eclipse.swt.widgets.Menu) PeersGeneralView(com.biglybt.ui.swt.views.PeersGeneralView) ViewTitleInfo(com.biglybt.ui.common.viewtitleinfo.ViewTitleInfo)

Example 2 with MultipleDocumentInterfaceSWT

use of com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT in project BiglyBT by BiglySoftware.

the class ToolBarView method triggerViewToolBar.

private boolean triggerViewToolBar(ToolBarItem item, long activationType, Object datasource) {
    if (DEBUG && !isVisible()) {
        Debug.out("Trying to triggerViewToolBar when toolbar is not visible");
        return false;
    }
    MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT();
    if (mdi != null) {
        MdiEntrySWT entry = mdi.getCurrentEntrySWT();
        UIToolBarEnablerBase[] enablers = entry.getToolbarEnablers();
        for (UIToolBarEnablerBase enabler : enablers) {
            if (enabler instanceof UIPluginViewToolBarListener) {
                if (((UIPluginViewToolBarListener) enabler).toolBarItemActivated(item, activationType, datasource)) {
                    return true;
                }
            }
        }
    }
    return false;
}
Also used : MultipleDocumentInterfaceSWT(com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT) MdiEntrySWT(com.biglybt.ui.swt.mdi.MdiEntrySWT) UIPluginViewToolBarListener(com.biglybt.pif.ui.UIPluginViewToolBarListener)

Example 3 with MultipleDocumentInterfaceSWT

use of com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT in project BiglyBT by BiglySoftware.

the class ToolBarView method _refreshCoreToolBarItems.

public void _refreshCoreToolBarItems() {
    if (DEBUG && !isVisible()) {
        Debug.out("Trying to refresh core toolbar items when toolbar is not visible " + this + getMainSkinObject());
    }
    UIFunctionsSWT uiFunctionsSWT = UIFunctionsManagerSWT.getUIFunctionsSWT();
    MultipleDocumentInterfaceSWT mdi = uiFunctionsSWT != null ? uiFunctionsSWT.getMDISWT() : null;
    if (mdi != null) {
        UIToolBarItem[] allToolBarItems = tbm.getAllToolBarItems();
        MdiEntrySWT entry = mdi.getCurrentEntrySWT();
        Map<String, Long> mapStates = new HashMap<>();
        if (entry != null) {
            UIToolBarEnablerBase[] enablers = entry.getToolbarEnablers();
            for (UIToolBarEnablerBase enabler : enablers) {
                if (enabler instanceof UIPluginViewToolBarListener) {
                    try {
                        ((UIPluginViewToolBarListener) enabler).refreshToolBarItems(mapStates);
                    } catch (Throwable e) {
                        // don't trust them plugins
                        Debug.out(e);
                    }
                }
            }
        }
        ISelectedContent[] currentContent = SelectedContentManager.getCurrentlySelectedContent();
        synchronized (dm_listener_map) {
            Map<DownloadManager, DownloadManagerListener> copy = new IdentityHashMap<>(dm_listener_map);
            for (ISelectedContent content : currentContent) {
                DownloadManager dm = content.getDownloadManager();
                if (dm != null) {
                    copy.remove(dm);
                    if (!dm_listener_map.containsKey(dm)) {
                        DownloadManagerListener l = new DownloadManagerListener() {

                            @Override
                            public void stateChanged(DownloadManager manager, int state) {
                                refreshCoreToolBarItems();
                            }

                            @Override
                            public void downloadComplete(DownloadManager manager) {
                                refreshCoreToolBarItems();
                            }

                            @Override
                            public void completionChanged(DownloadManager manager, boolean bCompleted) {
                                refreshCoreToolBarItems();
                            }

                            @Override
                            public void positionChanged(DownloadManager download, int oldPosition, int newPosition) {
                                refreshCoreToolBarItems();
                            }

                            @Override
                            public void filePriorityChanged(DownloadManager download, DiskManagerFileInfo file) {
                                refreshCoreToolBarItems();
                            }
                        };
                        dm.addListener(l, false);
                        dm_listener_map.put(dm, l);
                    // System.out.println( "Added " + dm.getDisplayName() + " - size=" + dm_listener_map.size());
                    }
                }
            }
            for (Map.Entry<DownloadManager, DownloadManagerListener> e : copy.entrySet()) {
                DownloadManager dm = e.getKey();
                dm.removeListener(e.getValue());
                dm_listener_map.remove(dm);
            // System.out.println( "Removed " + dm.getDisplayName() + " - size=" + dm_listener_map.size());
            }
        }
        boolean has1Selection = currentContent.length == 1;
        boolean can_play = false;
        boolean can_stream = false;
        boolean stream_permitted = false;
        if (has1Selection) {
            if (!(currentContent[0] instanceof ISelectedVuzeFileContent)) {
                can_play = PlayUtils.canPlayDS(currentContent[0], currentContent[0].getFileIndex(), false);
                can_stream = PlayUtils.canStreamDS(currentContent[0], currentContent[0].getFileIndex(), false);
                if (can_stream) {
                    stream_permitted = PlayUtils.isStreamPermitted();
                }
            }
        }
        if (mapStates.containsKey("play")) {
            can_play |= (mapStates.get("play") & UIToolBarItem.STATE_ENABLED) > 0;
        }
        if (mapStates.containsKey("stream")) {
            can_stream |= (mapStates.get("stream") & UIToolBarItem.STATE_ENABLED) > 0;
        }
        mapStates.put("play", can_play | can_stream ? UIToolBarItem.STATE_ENABLED : 0);
        UIToolBarItem pitem = tbm.getToolBarItem("play");
        if (pitem != null) {
            if (can_stream) {
                pitem.setImageID(stream_permitted ? "image.button.stream" : "image.button.pstream");
                pitem.setTextID(stream_permitted ? "iconBar.stream" : "iconBar.pstream");
            } else {
                pitem.setImageID("image.button.play");
                pitem.setTextID("iconBar.play");
            }
        }
        UIToolBarItem ssItem = tbm.getToolBarItem("startstop");
        if (ssItem != null) {
            boolean shouldStopGroup;
            if (currentContent.length == 0 && mapStates.containsKey("start") && (!mapStates.containsKey("stop") || (mapStates.get("stop") & UIToolBarItem.STATE_ENABLED) == 0) && (mapStates.get("start") & UIToolBarItem.STATE_ENABLED) > 0) {
                shouldStopGroup = false;
            } else {
                shouldStopGroup = TorrentUtil.shouldStopGroup(currentContent);
            }
            ssItem.setTextID(shouldStopGroup ? "iconBar.stop" : "iconBar.start");
            ssItem.setImageID("image.toolbar.startstop." + (shouldStopGroup ? "stop" : "start"));
            if (currentContent.length == 0 && !mapStates.containsKey("startstop")) {
                boolean can_stop = mapStates.containsKey("stop") && (mapStates.get("stop") & UIToolBarItem.STATE_ENABLED) > 0;
                boolean can_start = mapStates.containsKey("start") && (mapStates.get("start") & UIToolBarItem.STATE_ENABLED) > 0;
                if (can_start && can_stop) {
                    can_stop = false;
                }
                if (can_start || can_stop) {
                    ssItem.setTextID(can_stop ? "iconBar.stop" : "iconBar.start");
                    ssItem.setImageID("image.toolbar.startstop." + (can_stop ? "stop" : "start"));
                    mapStates.put("startstop", UIToolBarItem.STATE_ENABLED);
                }
            }
        }
        Map<String, Long> fallBackStates = TorrentUtil.calculateToolbarStates(currentContent, null);
        for (String key : fallBackStates.keySet()) {
            if (!mapStates.containsKey(key)) {
                mapStates.put(key, fallBackStates.get(key));
            }
        }
        final String[] TBKEYS = new String[] { "play", "run", "top", "up", "down", "bottom", "start", "stop", "startstop", "remove" };
        for (String key : TBKEYS) {
            if (!mapStates.containsKey(key)) {
                mapStates.put(key, 0L);
            }
        }
        for (int i = 0; i < allToolBarItems.length; i++) {
            UIToolBarItem toolBarItem = allToolBarItems[i];
            Long state = mapStates.get(toolBarItem.getID());
            if (state != null) {
                toolBarItem.setState(state);
            }
        }
    }
}
Also used : DownloadManagerListener(com.biglybt.core.download.DownloadManagerListener) DownloadManager(com.biglybt.core.download.DownloadManager) MultipleDocumentInterfaceSWT(com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT) ISelectedVuzeFileContent(com.biglybt.ui.selectedcontent.ISelectedVuzeFileContent) DiskManagerFileInfo(com.biglybt.core.disk.DiskManagerFileInfo) ISelectedContent(com.biglybt.ui.selectedcontent.ISelectedContent) UIFunctionsSWT(com.biglybt.ui.swt.UIFunctionsSWT) MdiEntrySWT(com.biglybt.ui.swt.mdi.MdiEntrySWT) UIPluginViewToolBarListener(com.biglybt.pif.ui.UIPluginViewToolBarListener)

Example 4 with MultipleDocumentInterfaceSWT

use of com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT in project BiglyBT by BiglySoftware.

the class DeviceManagerUI method uiAttachedAndCoreRunning.

private void uiAttachedAndCoreRunning(Core core) {
    Utils.execSWTThread(new AERunnable() {

        @Override
        public void runSupport() {
            MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT();
            if (mdi != null) {
                setupUI(mdi);
            } else {
                SkinViewManager.addListener(new SkinViewManagerListener() {

                    @Override
                    public void skinViewAdded(SkinView skinview) {
                        if (skinview instanceof SideBar) {
                            setupUI((SideBar) skinview);
                            SkinViewManager.RemoveListener(this);
                        }
                    }
                });
            }
        }
    });
    canCloseListener = new canCloseListener() {

        @Override
        public boolean canClose() {
            try {
                if (device_manager == null) {
                    return (true);
                }
                if (!device_manager.isTranscodeManagerInitialized()) {
                    return true;
                }
                final TranscodeJob job = device_manager.getTranscodeManager().getQueue().getCurrentJob();
                if (job == null || job.getState() != TranscodeJob.ST_RUNNING) {
                    return (true);
                }
                if (job.getTranscodeFile().getDevice().isHidden()) {
                    return (true);
                }
                String title = MessageText.getString("device.quit.transcoding.title");
                String text = MessageText.getString("device.quit.transcoding.text", new String[] { job.getName(), job.getTarget().getDevice().getName(), String.valueOf(job.getPercentComplete()) });
                MessageBoxShell mb = new MessageBoxShell(title, text, new String[] { MessageText.getString("UpdateWindow.quit"), MessageText.getString("Content.alert.notuploaded.button.abort") }, 1);
                mb.open(null);
                mb.waitUntilClosed();
                return mb.getResult() == 0;
            } catch (Throwable e) {
                Debug.out(e);
                return true;
            }
        }
    };
    UIExitUtilsSWT.addListener(canCloseListener);
}
Also used : SkinViewManagerListener(com.biglybt.ui.swt.views.skin.SkinViewManager.SkinViewManagerListener) MessageBoxShell(com.biglybt.ui.swt.shells.MessageBoxShell) MultipleDocumentInterfaceSWT(com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT) SkinView(com.biglybt.ui.swt.views.skin.SkinView) SideBar(com.biglybt.ui.swt.views.skin.sidebar.SideBar) UIExitUtilsSWT.canCloseListener(com.biglybt.ui.swt.UIExitUtilsSWT.canCloseListener)

Example 5 with MultipleDocumentInterfaceSWT

use of com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT in project BiglyBT by BiglySoftware.

the class DeviceInfoArea method skinObjectInitialShow.

// @see SkinView#skinObjectInitialShow(SWTSkinObject, java.lang.Object)
@Override
public Object skinObjectInitialShow(SWTSkinObject skinObject, Object params) {
    MultipleDocumentInterfaceSWT mdi = UIFunctionsManagerSWT.getUIFunctionsSWT().getMDISWT();
    if (mdi != null) {
        MdiEntrySWT entry = mdi.getEntryFromSkinObject(skinObject);
        if (entry != null) {
            device = (DeviceMediaRenderer) entry.getDatasource();
        }
    }
    parent = (Composite) skinObject.getControl();
    return null;
}
Also used : MultipleDocumentInterfaceSWT(com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT) MdiEntrySWT(com.biglybt.ui.swt.mdi.MdiEntrySWT)

Aggregations

MultipleDocumentInterfaceSWT (com.biglybt.ui.swt.mdi.MultipleDocumentInterfaceSWT)16 UIPluginViewToolBarListener (com.biglybt.pif.ui.UIPluginViewToolBarListener)4 MdiEntry (com.biglybt.ui.mdi.MdiEntry)4 MdiEntrySWT (com.biglybt.ui.swt.mdi.MdiEntrySWT)4 DownloadManager (com.biglybt.core.download.DownloadManager)3 UISWTViewEventListenerHolder (com.biglybt.ui.swt.pifimpl.UISWTViewEventListenerHolder)3 Core (com.biglybt.core.Core)2 CoreRunningListener (com.biglybt.core.CoreRunningListener)2 DiskManagerFileInfo (com.biglybt.core.disk.DiskManagerFileInfo)2 GlobalManager (com.biglybt.core.global.GlobalManager)2 ISelectedContent (com.biglybt.ui.selectedcontent.ISelectedContent)2 ISelectedVuzeFileContent (com.biglybt.ui.selectedcontent.ISelectedVuzeFileContent)2 SWTSkinObject (com.biglybt.ui.swt.skin.SWTSkinObject)2 DiskManagerFileInfoSet (com.biglybt.core.disk.DiskManagerFileInfoSet)1 DownloadManagerListener (com.biglybt.core.download.DownloadManagerListener)1 MessageText (com.biglybt.core.internat.MessageText)1 LogEvent (com.biglybt.core.logging.LogEvent)1 SubscriptionListener (com.biglybt.core.subs.SubscriptionListener)1 SubscriptionResultFilter (com.biglybt.core.subs.SubscriptionResultFilter)1 TOTorrent (com.biglybt.core.torrent.TOTorrent)1