use of com.biglybt.core.tag.TaggableLifecycleAdapter in project BiglyBT by BiglySoftware.
the class BuddyPluginView method addBetaSubviews.
private void addBetaSubviews(boolean enable) {
String[] views = { TableManager.TABLE_MYTORRENTS_ALL_BIG, TableManager.TABLE_MYTORRENTS_INCOMPLETE, TableManager.TABLE_MYTORRENTS_INCOMPLETE_BIG, TableManager.TABLE_MYTORRENTS_COMPLETE, "TagsView" };
if (enable) {
taggableLifecycleAdapter = new TaggableLifecycleAdapter() {
@Override
public void taggableTagged(TagType tag_type, Tag tag, Taggable taggable) {
if (tag_type.getTagType() == TagType.TT_DOWNLOAD_MANUAL) {
DownloadManager dm = (DownloadManager) taggable;
for (BetaSubViewHolder h : beta_subviews.values()) {
h.tagsUpdated(dm);
}
}
}
@Override
public void taggableUntagged(TagType tag_type, Tag tag, Taggable taggable) {
if (tag_type.getTagType() == TagType.TT_DOWNLOAD_MANUAL) {
DownloadManager dm = (DownloadManager) taggable;
for (BetaSubViewHolder h : beta_subviews.values()) {
h.tagsUpdated(dm);
}
}
}
};
TagManagerFactory.getTagManager().addTaggableLifecycleListener(Taggable.TT_DOWNLOAD, taggableLifecycleAdapter);
UISWTViewEventListener listener = new UISWTViewEventListener() {
@Override
public boolean eventOccurred(UISWTViewEvent event) {
UISWTView currentView = event.getView();
switch(event.getType()) {
case UISWTViewEvent.TYPE_CREATE:
{
beta_subviews.put(currentView, new BetaSubViewHolder());
currentView.setDestroyOnDeactivate(false);
break;
}
case UISWTViewEvent.TYPE_INITIALIZE:
{
BetaSubViewHolder subview = beta_subviews.get(currentView);
if (subview != null) {
subview.initialise(event.getView(), (Composite) event.getData());
}
break;
}
case UISWTViewEvent.TYPE_DATASOURCE_CHANGED:
{
BetaSubViewHolder subview = beta_subviews.get(currentView);
if (subview != null) {
subview.setDataSource(event.getData());
}
break;
}
case UISWTViewEvent.TYPE_FOCUSGAINED:
{
BetaSubViewHolder subview = beta_subviews.get(currentView);
if (subview != null) {
subview.gotFocus();
}
break;
}
case UISWTViewEvent.TYPE_FOCUSLOST:
{
BetaSubViewHolder subview = beta_subviews.get(currentView);
if (subview != null) {
subview.lostFocus();
}
break;
}
case UISWTViewEvent.TYPE_DESTROY:
{
BetaSubViewHolder subview = beta_subviews.remove(currentView);
if (subview != null) {
subview.destroy();
}
break;
}
}
return true;
}
};
for (String table_id : views) {
ui_instance.addView(table_id, "azbuddy.ui.menu.chat", listener);
}
TableManager table_manager = plugin.getPluginInterface().getUIManager().getTableManager();
TableCellRefreshListener msg_refresh_listener = new TableCellRefreshListener() {
@Override
public void refresh(TableCell _cell) {
TableCellSWT cell = (TableCellSWT) _cell;
Download dl = (Download) cell.getDataSource();
if (dl == null) {
return;
}
List<ChatInstance> instances = BuddyPluginUtils.peekChatInstances(dl);
boolean is_pending = false;
for (ChatInstance instance : instances) {
if (instance.getMessageOutstanding()) {
is_pending = true;
}
}
Image graphic;
String tooltip;
int sort_order;
if (is_pending) {
graphic = bs_chat_gray_text;
tooltip = MessageText.getString("TableColumn.header.chat.msg.out");
sort_order = 1;
} else {
graphic = null;
tooltip = MessageText.getString("label.no.messages");
sort_order = 0;
}
cell.setMarginHeight(0);
cell.setGraphic(graphic);
cell.setToolTip(tooltip);
cell.setSortValue(sort_order);
cell.setCursorID(graphic == null ? SWT.CURSOR_ARROW : SWT.CURSOR_HAND);
}
};
TableCellMouseListener msg_mouse_listener = new TableCellMouseListener() {
@Override
public void cellMouseTrigger(TableCellMouseEvent event) {
if (event.eventType == TableCellMouseEvent.EVENT_MOUSEUP) {
TableCell cell = event.cell;
Download dl = (Download) cell.getDataSource();
if (dl != null) {
List<ChatInstance> instances = BuddyPluginUtils.peekChatInstances(dl);
for (ChatInstance instance : instances) {
if (instance.getMessageOutstanding()) {
try {
BuddyPluginUtils.getBetaPlugin().showChat(instance);
} catch (Throwable e) {
Debug.out(e);
}
}
}
}
}
}
};
columnMessagePending = new TableColumnCreationListener() {
@Override
public void tableColumnCreated(TableColumn result) {
result.setAlignment(TableColumn.ALIGN_CENTER);
result.setPosition(TableColumn.POSITION_LAST);
result.setWidth(32);
result.setRefreshInterval(TableColumn.INTERVAL_INVALID_ONLY);
result.setType(TableColumn.TYPE_GRAPHIC);
result.addCellRefreshListener(msg_refresh_listener);
result.addCellMouseListener(msg_mouse_listener);
result.setIconReference("dchat_gray", true);
synchronized (columns) {
columns.add(result);
}
}
};
table_manager.registerColumn(Download.class, "azbuddy.ui.column.msgpending", columnMessagePending);
} else {
for (String table_id : views) {
ui_instance.removeViews(table_id, "azbuddy.ui.menu.chat");
}
for (UISWTView entry : new ArrayList<>(beta_subviews.keySet())) {
entry.closeView();
}
if (taggableLifecycleAdapter != null) {
TagManagerFactory.getTagManager().removeTaggableLifecycleListener(Taggable.TT_DOWNLOAD, taggableLifecycleAdapter);
taggableLifecycleAdapter = null;
}
beta_subviews.clear();
if (columnMessagePending != null) {
TableManager table_manager = plugin.getPluginInterface().getUIManager().getTableManager();
table_manager.unregisterColumn(Download.class, "azbuddy.ui.column.msgpending", columnMessagePending);
columnMessagePending = null;
synchronized (columns) {
columns.clear();
}
}
}
}
Aggregations