2016-05-09 11 views
0

Plattform: Windows 8.1 Pro, E4 mit e (fx) clipseprüfen, ob ein Teil innerhalb eines PartStack durch Drücken der Schließen-Symbol auf der entsprechenden Registerkarte geschlossen wurde

arbeite ich zur Zeit auf Caching geöffneten Teile wieder zu öffnen dann beim Nachladen des PartStacks. Diese Methode zum erneuten Laden verwendet EPartService.hidePart(), um alle Teile im PartStack zu schließen. Da ich auch Teile aus dem Cache entfernen muss, muss ich zwischen dem Neuladen und dem tatsächlichen Schließen eines Tabs/Teils unterscheiden.

Ich habe bereits versucht, das Teil ein zweites Mal zum Cache hinzuzufügen, bevor ich es wieder entferne, indem ich ein Ereignis von der preDestroy() Methode des Teils sende. Aber das ist weniger als ideal.

Gibt es ein besonderes Ereignis, das ich beim Klicken auf das Schließen-Symbol oder auf eine andere Weise, die ich überprüfen könnte, erhalte?

Danke für Ihre Hilfe.

+0

Ich verstehe nicht, was Sie meinen, indem Sie hier 'neu laden'. 'hidePart' zerstört das MPart-Objekt, so dass Sie es nicht speichern können. –

+0

@ greg-449 Mit "neu laden" meine ich, dass ich den PartStack mit Parts neu bevölkere. Ich habe ein "OverviewPart", das im Grunde eine Tabelle enthält, die mit Daten aus einer Datenbank gefüllt ist. Ich kann zusätzliche "DetailParts" öffnen, mit denen der Benutzer die Daten ändern kann. Diese DetailParts werden zwischengespeichert. Der Benutzer kann zwischen verschiedenen Datensätzen navigieren, mit denen er die Übersichtstabelle füllen soll. Wenn Sie ein Dataset auswählen, von dem DetailParts bereits geöffnet, aber nicht geschlossen waren, sollten die zwischengespeicherten Teile geöffnet werden. – Hobbit9797

+0

Wie gesagt, hidePart zerstört das Objekt, so dass Sie es nicht zwischenspeichern können. Sie sollten die Daten in einem anderen Objekt speichern, das Sie zwischenspeichern können. –

Antwort

1

Es stellte sich heraus, dass der einfachste Weg, um das zu tun, was ich tun wollte, die Verwendung von Tags war. Da ich nur auf den Code zugreifen konnte, als das Part vom Programm geschlossen wurde, musste ich ein Tag auf dem Teil setzen.

if (part.isDirty()) { 
    if(!partService.savePart(part, true)) { 
     return; 
    } 
    part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM); 
    partService.hidePart(part); 
    } else if (part.isCloseable()) { 
     part.getTags().add(Tag.PART_CLOSED_BY_PROGRAM); 
     partService.hidePart(part); 
    } 
} 

Jetzt kann ich überprüfen, gerade in der preDestroy() -Methode, wenn das Teil durch das Programm oder durch den Benutzer geschlossen wird.

@PreDestroy 
protected void preDestroy() { 
    if (part.getTags().contains(Tag.PART_CLOSED_BY_PROGRAM)) { 
     part.getTags().remove(Tag.PART_CLOSED_BY_PROGRAM); 
    } else { 
     try { 
      //remove "Part" from cache 
     } catch (IllegalAccessException e) { 
     } catch (InvocationTargetException e) { 
     } catch (NoSuchMethodException e) { 
     } 
    } 
}