Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Drag'n'Drop support for 'All securities' sidebar item #3187

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -21,6 +21,7 @@
import name.abuchen.portfolio.ui.dnd.ImportFromFileDropAdapter;
import name.abuchen.portfolio.ui.dnd.ImportFromURLDropAdapter;
import name.abuchen.portfolio.ui.dnd.SecurityTransfer;
import name.abuchen.portfolio.ui.editor.Navigation.AllSecuritiesParameter;
import name.abuchen.portfolio.ui.editor.Navigation.Item;
import name.abuchen.portfolio.ui.editor.Navigation.Tag;

Expand Down Expand Up @@ -87,8 +88,10 @@ public IMenuListener getContextMenu(Navigation.Item item)

sidebar = new Sidebar<>(scrolledComposite, model);

editor.getClientInput().getNavigation().findAll(item -> item.getParameter() instanceof Watchlist)
.forEach(this::setupWatchlistDnD);
editor.getClientInput().getNavigation()
.findAll(item -> item.getParameter() instanceof AllSecuritiesParameter
|| item.getParameter() instanceof Watchlist)
.forEach(this::setupAllSecuritesAndWatchlistDnD);

scrolledComposite.setContent(sidebar);
scrolledComposite.setExpandVertical(true);
Expand All @@ -99,8 +102,10 @@ public IMenuListener getContextMenu(Navigation.Item item)

Navigation.Listener listener = item -> {
sidebar.rebuild();
editor.getClientInput().getNavigation().findAll(i -> i.getParameter() instanceof Watchlist)
.forEach(this::setupWatchlistDnD);
editor.getClientInput().getNavigation()
.findAll(i -> i.getParameter() instanceof AllSecuritiesParameter
|| i.getParameter() instanceof Watchlist)
.forEach(this::setupAllSecuritesAndWatchlistDnD);

scrolledComposite.setMinSize(sidebar.computeSize(SWT.DEFAULT, SWT.DEFAULT));
sidebar.layout(true);
Expand All @@ -122,37 +127,37 @@ public void select(Item item)
sidebar.select(item);
}

private void setupWatchlistDnD(Navigation.Item item)
private void setupAllSecuritesAndWatchlistDnD(Navigation.Item item)
{
Watchlist watchlist = (Watchlist) item.getParameter();

DropTargetAdapter dropTargetListener = new DropTargetAdapter()
{
@Override
public void drop(DropTargetEvent event)
{
if (SecurityTransfer.getTransfer().isSupportedType(event.currentDataType))
if (!SecurityTransfer.getTransfer().isSupportedType(event.currentDataType))
return;

List<Security> securities = SecurityTransfer.getTransfer().getSecurities();
if (securities == null)
return;

for (Security security : securities)
{
List<Security> securities = SecurityTransfer.getTransfer().getSecurities();
if (securities != null)
// if the security is dragged from another file, add
// a deep copy to the client's securities list
if (!editor.getClient().getSecurities().contains(security))
{
for (Security security : securities)
{
// if the security is dragged from another file, add
// a deep copy to the client's securities list
if (!editor.getClient().getSecurities().contains(security))
{
security = security.deepCopy();
editor.getClient().addSecurity(security);
}

if (!watchlist.getSecurities().contains(security))
watchlist.addSecurity(security);
}

editor.getClient().touch();
security = security.deepCopy();
editor.getClient().addSecurity(security);
}

// if drop target is a watchlist, add
if (item.getParameter() instanceof Watchlist watchlist
&& !watchlist.getSecurities().contains(security))
watchlist.addSecurity(security);
}

editor.getClient().touch();
}
};

Expand Down
Expand Up @@ -63,6 +63,11 @@ public enum Tag
DEFAULT_VIEW;
}

public class AllSecuritiesParameter
{
// empty class at the moment. Only needed to flag the navigation item
}

public static class Item
{
private String label;
Expand Down Expand Up @@ -338,7 +343,9 @@ private void createGeneralDataSection(Client client)

roots.add(generalData);

generalData.add(new Item(Messages.LabelAllSecurities, Images.SECURITY, SecurityListView.class));
Item allSecuritesItem = new Item(Messages.LabelAllSecurities, Images.SECURITY, SecurityListView.class);
allSecuritesItem.setParameter(new AllSecuritiesParameter());
generalData.add(allSecuritesItem);

for (Watchlist watchlist : client.getWatchlists())
{
Expand Down