From 0243fd2bea008cdc5a6aaf6a7a2ac4cc99517b96 Mon Sep 17 00:00:00 2001 From: Andreas Buchen Date: Sun, 10 Mar 2013 13:06:36 +0100 Subject: [PATCH] Display offset account in lists of transactions Issue: #22 --- .../name/abuchen/portfolio/ui/Messages.java | 1 + .../abuchen/portfolio/ui/messages.properties | 2 ++ .../portfolio/ui/messages_de.properties | 2 ++ .../ui/util/ShowHideColumnHelper.java | 24 ++++++++++++------- .../portfolio/ui/views/AccountListView.java | 21 ++++++++++++++++ .../portfolio/ui/views/PortfolioListView.java | 21 ++++++++++++++++ .../portfolio/model/AccountTransferEntry.java | 21 ++++++++++++++++ .../abuchen/portfolio/model/BuySellEntry.java | 21 ++++++++++++++++ .../abuchen/portfolio/model/CrossEntry.java | 4 ++++ .../model/PortfolioTransferEntry.java | 21 ++++++++++++++++ 10 files changed, 130 insertions(+), 8 deletions(-) diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/Messages.java b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/Messages.java index 36246d8690..d27c3e0419 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/Messages.java +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/Messages.java @@ -53,6 +53,7 @@ public class Messages extends NLS public static String ColumnMarketValue; public static String ColumnMonth; public static String ColumnName; + public static String ColumnOffsetAccount; public static String ColumnPortfolio; public static String ColumnPortfolioFrom; public static String ColumnPortfolioTo; diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties index 71bd217611..2ed5393be5 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties @@ -131,6 +131,8 @@ ColumnMonth = Month ColumnName = Name +ColumnOffsetAccount = Offset Account + ColumnPortfolio = Portfolio ColumnPortfolioFrom = From diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties index 356c25716e..00e56a6d09 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties @@ -131,6 +131,8 @@ ColumnMonth = Monat ColumnName = Name +ColumnOffsetAccount = Gegenkonto + ColumnPortfolio = Portfolio ColumnPortfolioFrom = Von diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/util/ShowHideColumnHelper.java b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/util/ShowHideColumnHelper.java index 77b1c0212a..57b3a8a18f 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/util/ShowHideColumnHelper.java +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/util/ShowHideColumnHelper.java @@ -84,7 +84,7 @@ public void setVisible(boolean isVisible) { this.isVisible = isVisible; } - + public void setMoveable(boolean isMoveable) { this.isMoveable = isMoveable; @@ -162,7 +162,7 @@ String getOptionsMenuLabel() { return optionsMenuLabel; } - + private void create(TableViewer viewer, TableColumnLayout layout, Object option) { create(viewer, layout, option, defaultSortDirection, getDefaultWidth()); @@ -216,6 +216,7 @@ public void destroy(TableViewer viewer, Object option) private String identifier; private boolean isUserConfigured = false; + private boolean doSaveState = true; private List columns = new ArrayList(); @@ -241,12 +242,18 @@ public void widgetDisposed(DisposeEvent e) private void widgetDisposed() { - persistColumnConfig(); + if (doSaveState) + persistColumnConfig(); if (contextMenu != null) contextMenu.dispose(); } + public void setDoSaveState(boolean doSaveState) + { + this.doSaveState = doSaveState; + } + public void showHideShowColumnsMenu(Shell shell) { if (contextMenu == null) @@ -372,7 +379,8 @@ public void addColumn(Column column) public void createColumns() { - createFromColumnConfig(); + if (doSaveState) + createFromColumnConfig(); if (viewer.getTable().getColumnCount() > 0) { @@ -402,21 +410,21 @@ private void createFromColumnConfig() Matcher matcher = CONFIG_PATTERN.matcher(tokens.nextToken()); if (!matcher.matches()) continue; - + // index Column col = columns.get(Integer.parseInt(matcher.group(1))); // option String o = matcher.group(2); Integer option = o != null ? Integer.parseInt(o) : null; - + // direction String d = matcher.group(3); Integer direction = d != null ? Integer.parseInt(d) : null; - + // width int width = Integer.parseInt(matcher.group(4)); - + col.create(viewer, layout, option, direction, width); } } diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/AccountListView.java b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/AccountListView.java index e76d7dea69..db2b02e6d6 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/AccountListView.java +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/AccountListView.java @@ -209,6 +209,7 @@ protected void createBottomTable(Composite parent) ShowHideColumnHelper support = new ShowHideColumnHelper(AccountListView.class.getSimpleName() + "@bottom", //$NON-NLS-1$ transactions, layout); + support.setDoSaveState(false); Column column = new Column(Messages.ColumnDate, SWT.None, 80); column.setLabelProvider(new ColumnLabelProvider() @@ -293,6 +294,25 @@ public Color getForeground(Object element) column.setMoveable(false); support.addColumn(column); + column = new Column(Messages.ColumnOffsetAccount, SWT.None, 120); + column.setLabelProvider(new ColumnLabelProvider() + { + @Override + public String getText(Object e) + { + AccountTransaction t = (AccountTransaction) e; + return t.getCrossEntry() != null ? t.getCrossEntry().getCrossEntity(t).toString() : null; + } + + @Override + public Color getForeground(Object element) + { + return colorFor((AccountTransaction) element); + } + }); + column.setMoveable(false); + support.addColumn(column); + support.createColumns(); transactions.getTable().setHeaderVisible(true); @@ -321,6 +341,7 @@ public void onModified(Object element, String property) .readonly("type") //$NON-NLS-1$ .amount("amount") //$NON-NLS-1$ .combobox("security", securities, true) //$NON-NLS-1$ + .readonly("crossentry") //$NON-NLS-1$ .apply(); hookContextMenu(transactions.getTable(), new IMenuListener() diff --git a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/PortfolioListView.java b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/PortfolioListView.java index a2309498dc..432b9139ab 100644 --- a/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/PortfolioListView.java +++ b/name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/PortfolioListView.java @@ -256,6 +256,7 @@ private Control createTransactionsTable(CTabFolder folder) ShowHideColumnHelper support = new ShowHideColumnHelper(PortfolioListView.class.getSimpleName() + "@bottom", //$NON-NLS-1$ transactions, layout); + support.setDoSaveState(false); Column column = new Column(Messages.ColumnDate, SWT.None, 80); column.setLabelProvider(new ColumnLabelProvider() @@ -392,6 +393,25 @@ public Color getForeground(Object element) column.setMoveable(false); support.addColumn(column); + column = new Column(Messages.ColumnOffsetAccount, SWT.None, 120); + column.setLabelProvider(new ColumnLabelProvider() + { + @Override + public String getText(Object e) + { + PortfolioTransaction t = (PortfolioTransaction) e; + return t.getCrossEntry() != null ? t.getCrossEntry().getCrossEntity(t).toString() : null; + } + + @Override + public Color getForeground(Object element) + { + return colorFor((PortfolioTransaction) element); + } + }); + column.setMoveable(false); + support.addColumn(column); + support.createColumns(); transactions.getTable().setHeaderVisible(true); @@ -425,6 +445,7 @@ public void onModified(Object element, String property) .shares("shares") // //$NON-NLS-1$ .amount("amount") // //$NON-NLS-1$ .amount("fees") // //$NON-NLS-1$ + .readonly("crossentry") //$NON-NLS-1$ .apply(); hookContextMenu(transactions.getTable(), new IMenuListener() diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/AccountTransferEntry.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/AccountTransferEntry.java index 85933637aa..cce5d13350 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/AccountTransferEntry.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/AccountTransferEntry.java @@ -66,4 +66,25 @@ else if (t == transactionTo) } } + @Override + public Transaction getCrossTransaction(Transaction t) + { + if (t.equals(transactionFrom)) + return transactionTo; + else if (t.equals(transactionTo)) + return transactionFrom; + else + throw new UnsupportedOperationException(); + } + + @Override + public Object getCrossEntity(Transaction t) + { + if (t.equals(transactionFrom)) + return accountTo; + else if (t.equals(transactionTo)) + return accountFrom; + else + throw new UnsupportedOperationException(); + } } diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/BuySellEntry.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/BuySellEntry.java index c387f0893b..847bc9c6ef 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/BuySellEntry.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/BuySellEntry.java @@ -92,4 +92,25 @@ else if (t == portfolioTransaction) } } + @Override + public Transaction getCrossTransaction(Transaction t) + { + if (t.equals(portfolioTransaction)) + return accountTransaction; + else if (t.equals(accountTransaction)) + return portfolioTransaction; + else + throw new UnsupportedOperationException(); + } + + @Override + public Object getCrossEntity(Transaction t) + { + if (t.equals(portfolioTransaction)) + return account; + else if (t.equals(accountTransaction)) + return portfolio; + else + throw new UnsupportedOperationException(); + } } diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/CrossEntry.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/CrossEntry.java index b35edd7012..4692f82c8e 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/CrossEntry.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/CrossEntry.java @@ -5,4 +5,8 @@ public interface CrossEntry public void updateFrom(Transaction t); public void delete(); + + public Transaction getCrossTransaction(Transaction t); + + public Object getCrossEntity(Transaction t); } diff --git a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/PortfolioTransferEntry.java b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/PortfolioTransferEntry.java index 18a86eda87..5664d9f396 100644 --- a/name.abuchen.portfolio/src/name/abuchen/portfolio/model/PortfolioTransferEntry.java +++ b/name.abuchen.portfolio/src/name/abuchen/portfolio/model/PortfolioTransferEntry.java @@ -87,4 +87,25 @@ else if (t.equals(transactionTo)) } } + @Override + public Transaction getCrossTransaction(Transaction t) + { + if (t.equals(transactionFrom)) + return transactionTo; + else if (t.equals(transactionTo)) + return transactionFrom; + else + throw new UnsupportedOperationException(); + } + + @Override + public Object getCrossEntity(Transaction t) + { + if (t.equals(transactionFrom)) + return portfolioTo; + else if (t.equals(transactionTo)) + return portfolioFrom; + else + throw new UnsupportedOperationException(); + } }