portfolio-performance / portfolio

Track and evaluate the performance of your investment portfolio across stocks, cryptocurrencies, and other assets.
http://www.portfolio-performance.info
Eclipse Public License 1.0
2.94k stars 602 forks source link

Tastaturkürzel um das erste Bookmark für das aktuelle Wertpapier im Browser zu öffnen #850

Open buchen opened 7 years ago

buchen commented 7 years ago

Wie hier im Forum diskutiert ein Bookmark zu implementieren: https://forum.portfolio-performance.info/t/tastaturkuerzel-fuer-im-browser-oeffnen/1607?source_topic_id=1612

Ich denke man müsste

buchen commented 7 years ago

@Ragas13: Ich habe mal rumgespielt wie das mit dem SelectionService funktionieren könnte: siehe den patch.txt

Im Prinzip im SecurityListView einen neuen Listener hinzufügen:

@@ -180,6 +184,9 @@ public class SecurityListView extends AbstractListView implements ModificationLi
     @Inject
     private ExchangeRateProviderFactory factory;

+    @Inject
+    private ESelectionService selectionService;
+
     private SecuritiesTable securities;
     private TableViewer prices;
     private TableViewer transactions;
@@ -365,6 +372,13 @@ public class SecurityListView extends AbstractListView implements ModificationLi

         securities.addSelectionChangedListener(event -> onSecurityChanged(
                         (Security) ((IStructuredSelection) event.getSelection()).getFirstElement()));
+        
+        securities.addSelectionChangedListener(event -> {
+            Map<Class<?>, Object> selection = new HashMap<>();
+            selection.put(Client.class, getClient());
+            selection.put(Security.class, ((IStructuredSelection) event.getSelection()).getFirstElement());
+            selectionService.setSelection(selection);
+        });

Damit die Injection funktioniert, muss man wohl noch im PortfolioPart den Selektion Service durchreichen:

+    
+    @Inject
+    ESelectionService selectionService;

     @PostConstruct
     public void createComposite(Composite parent, MPart part)
@@ -527,6 +531,7 @@ public class PortfolioPart implements LoadClientThread.Callback
         viewContext.set(Client.class, this.client);
         viewContext.set(IPreferenceStore.class, this.preferenceStore);
         viewContext.set(PortfolioPart.class, this);
+        viewContext.set(ESelectionService.class, selectionService);

Und dann konnte ich das in einem Handler auslesen:

     @Execute
     public void execute(@Named(IServiceConstants.ACTIVE_PART) MPart part,
-                    @Named(IServiceConstants.ACTIVE_SHELL) Shell shell)
+                    @Named(IServiceConstants.ACTIVE_SHELL) Shell shell, ESelectionService selectionService)
     {
         Client client = MenuHelper.getActiveClient(part);
         if (client == null)
             return;
+        
+        
+        System.out.println(selectionService.getSelection());
+