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;
}
}
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;
}
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);
}
}
}
}
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);
}
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;
}
Aggregations