Ordinare le voci di menu alimentate da più moduli.

2

Ho un'applicazione principale che può caricare moduli (o plugin). Ogni modulo può definire uno o più collegamenti (o elementi) che verranno visualizzati in un menu laterale definito nell'applicazione principale.

In questo momento, la mia applicazione principale esegue un elenco di ItemProvider che vengono caricati dai moduli. Questi ItemProvider restituiscono un elenco di elementi da visualizzare nel menu laterale.

La mia domanda ora è come dovrei ordinare questi articoli dal momento che non sono a conoscenza dei loro fratelli nel menu? Tieni presente che non esiste una particolare logica nell'ordine, dipende da ciò che il cliente desidera.

La mia soluzione principale era di dare loro un numero d'ordine (un indice). Il problema con questo approccio è che i miei moduli non sarebbero più completamente indipendenti, il "numero di ordine" dipenderebbe dal numero di altri moduli.

Quale sarebbe il modo corretto di gestire questo caso particolare?

    
posta Jean-Philippe Leclerc 31.12.2013 - 17:00
fonte

3 risposte

2

Usa riferimento al menu dell'applicazione

L'applicazione principale ha già una serie di menu per il menu laterale. Per ogni voce di menu associare un id-chiave leggibile per ogni voce. È quindi possibile utilizzare questo ID chiave in seguito nei moduli per fare riferimento a dove posizionare le nuove voci di menu.

Durante il caricamento dei moduli le loro voci di menu possono avere un parametro facoltativo chiamato after che indica quale voce di menu dall'applicazione principale dovrebbe apparire sotto.

Se l'id chiave nell'applicazione non esiste. Puoi aggiungere la voce di menu in fondo alla barra laterale.

Puoi ancora utilizzare un valore numerico order per ordinare le voci di menu, ma rispettare prima il parametro after .

I dati potrebbero essere raggruppati per titolo e ordine.

 Application Menu
      "File", 0
      "Edit", 1
      "View", 2
      "Tools", 3

Un modulo potrebbe avere un menu definito in questo modo.

 Module Menu
      after:"File"
         "Window", 0
         "Help", 1
      after:"Tools"
         "Features",0
         "Navigate",1
         "Program",2

Potresti avere altri parametri come insert o child per i sottomenu. La chiave è usare un punto di riferimento leggibile dall'uomo per tornare al menu dell'applicazione principale. Questo facilita l'estensione del menu.

    
risposta data 31.12.2013 - 17:34
fonte
0

Se l'utente è consapevole che queste voci di menu sono fornite da più plug-in, vorrei assegnare a ciascun plug-in un sottomenu da compilare oppure inserire separatori nel menu per separare le voci dei diversi plug-in. ins.

All'interno del set di voci da un plug-in, il plug-in è responsabile per l'ordine delle voci del menu.

    
risposta data 31.12.2013 - 17:16
fonte
0

Precondizione: sai quali moduli / plug-in sono caricati.

Crea un altro modulo che ha l'unica responsabilità di gestire / ordinare le voci del menu.

Poiché questa è la responsabilità del modulo, è consentito conoscere le voci di menu fornite dagli altri moduli. Questo modulo legge le voci di menu fornite dagli altri moduli (ad esempio IMenuItem ) e li ordina in base alle preferenze dei tuoi o dei tuoi clienti.

Sì, questo modulo è completamente a conoscenza delle voci di menu e le ordina con hard-coded o lascia le voci di menu ordinate per es. tramite un xml (che consente di modificare l'ordine dopo il tempo di compilazione). L'uso di un xml può evitare la conoscenza delle voci di menu all'interno del codice, rendendo il modulo menu stesso più flessibile e indipendente.

Questo modulo può essere scambiato per applicazioni che utilizzano moduli diversi, quindi l'applicazione, il modulo menu e gli altri moduli sono accoppiati liberamente.

Il modulo implementa IMenuItemProvider che viene quindi utilizzato dall'applicazione principale e restituisce% istanze diIMenuItem nell'ordine corretto.

Come detto sopra, per questa soluzione devi avere conoscenza dei moduli caricati altrimenti c'è solo la possibilità di ordinare alfabeticamente o qualche altro ordinamento generico.

@ La risposta di cgTag è anche una possibilità, ma la conoscenza dell'ordine è all'interno dei moduli stessi, che è ciò che volevi evitare.

    
risposta data 10.06.2018 - 23:16
fonte

Leggi altre domande sui tag