package com.dgex.offspring.ui;
import org.apache.log4j.Logger;
import org.eclipse.e4.ui.di.UISynchronize;
import org.eclipse.e4.ui.services.IStylingEngine;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import com.dgex.offspring.config.IContactsService;
import com.dgex.offspring.nxtCore.service.INxtService;
import com.dgex.offspring.ui.controls.AliasControl;
import com.dgex.offspring.ui.controls.AssetsControl;
import com.dgex.offspring.ui.controls.GeneratedBlocksControl;
import com.dgex.offspring.ui.controls.TransactionsControl;
import com.dgex.offspring.ui.messaging.MessagingControl;
import com.dgex.offspring.user.service.IUserService;
public class AccountTabFolder extends Composite {
static Logger logger = Logger.getLogger(AccountTabFolder.class);
private final Long accountId;
private final TabFolder tabFolder;
private final IUserService userService;
private final IContactsService contactsService;
private final INxtService nxt;
private final IStylingEngine engine;
private final UISynchronize sync;
private final TabItem transactionsTab;
private final TabItem generatedBlocksTab;
private final TabItem aliasesTab;
private final TabItem assetsTab;
private final TabItem messagesTab;
private TabItem selectedTab = null;
private TransactionsControl transactionsControl = null;
private GeneratedBlocksControl generatedBlocksControl = null;
private AliasControl aliasesControl = null;
private AssetsControl assetsControl = null;
private MessagingControl messagesControl = null;
private final Runnable lazyRefresh = new Runnable() {
@Override
public void run() {
if (!isDisposed() && !getDisplay().isDisposed()) {
refresh();
}
}
};
public AccountTabFolder(Composite parent, int style, final Long accountId,
final INxtService nxt, final IStylingEngine engine,
final IUserService userService, final UISynchronize sync,
final IContactsService contactsService) {
super(parent, style);
this.accountId = accountId;
this.userService = userService;
this.contactsService = contactsService;
this.nxt = nxt;
this.engine = engine;
this.sync = sync;
setLayout(new FillLayout());
tabFolder = new TabFolder(this, SWT.NONE);
transactionsTab = new TabItem(tabFolder, SWT.NONE);
transactionsTab.setText("Transactions");
generatedBlocksTab = new TabItem(tabFolder, SWT.NONE);
generatedBlocksTab.setText("Blocks");
aliasesTab = new TabItem(tabFolder, SWT.NONE);
aliasesTab.setText("Aliases");
assetsTab = new TabItem(tabFolder, SWT.NONE);
assetsTab.setText("Assets");
messagesTab = new TabItem(tabFolder, SWT.NONE);
messagesTab.setText("Messages");
tabFolder.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
TabItem[] items = tabFolder.getSelection();
if (items != null && items.length > 0) {
TabItem tab = items[0];
if (selectedTab == null || !selectedTab.equals(tab)) {
selectedTab = tab;
refresh();
}
}
}
});
}
private void createTabContents(TabItem tab) {
if (tab.equals(transactionsTab) && transactionsControl == null) {
transactionsControl = new TransactionsControl(tabFolder, SWT.NONE,
accountId, nxt, engine, userService, sync);
transactionsTab.setControl(transactionsControl);
}
else if (tab.equals(generatedBlocksTab) && generatedBlocksControl == null) {
generatedBlocksControl = new GeneratedBlocksControl(tabFolder, SWT.NONE,
accountId, engine, nxt, userService, sync, contactsService);
generatedBlocksTab.setControl(generatedBlocksControl);
}
else if (tab.equals(aliasesTab) && aliasesControl == null) {
aliasesControl = new AliasControl(tabFolder, SWT.NONE, accountId, nxt,
engine, userService, sync, contactsService);
aliasesTab.setControl(aliasesControl);
}
else if (tab.equals(messagesTab) && messagesControl == null) {
messagesControl = new MessagingControl(tabFolder, SWT.NONE, accountId,
nxt, engine, userService, sync);
messagesTab.setControl(messagesControl);
}
else if (tab.equals(assetsTab) && assetsControl == null) {
assetsControl = new AssetsControl(tabFolder, SWT.NONE, accountId, nxt,
userService, contactsService, sync, engine);
assetsTab.setControl(assetsControl);
}
}
public Long getAccountId() {
return accountId;
}
public void refresh() {
if (tabFolder == null || tabFolder.isDisposed())
return;
TabItem[] items = tabFolder.getSelection();
if (items == null || items.length == 0)
return;
TabItem tab = items[0];
createTabContents(tab);
if (tab.equals(transactionsTab) && transactionsControl != null) {
transactionsControl.refresh();
}
else if (tab.equals(generatedBlocksTab) && generatedBlocksControl != null) {
generatedBlocksControl.refresh();
}
else if (tab.equals(aliasesTab) && aliasesControl != null) {
aliasesControl.refresh();
}
else if (tab.equals(messagesTab) && messagesControl != null) {
messagesControl.refresh();
}
else if (tab.equals(assetsTab) && assetsControl != null) {
assetsControl.refresh();
}
}
public void lazyRefresh() {
// logger.info("lazyRefresh");
getDisplay().timerExec(-1, lazyRefresh);
getDisplay().timerExec(3000, lazyRefresh);
}
public void showMessagesTab() {
if (tabFolder != null && messagesTab != null) {
tabFolder.setSelection(messagesTab);
refresh();
}
}
}