use of aero.minova.rcp.rcp.accessor.DetailAccessor in project aero.minova.rcp by minova-afis.
the class WFCDetailPart method postConstruct.
@PostConstruct
public void postConstruct(Composite parent, MWindow window, MApplication mApp) {
resManager = new LocalResourceManager(JFaceResources.getResources(), parent);
composite = parent;
formToolkit = new FormToolkit(parent.getDisplay());
appContext = mApp.getContext();
mApplication = mApp;
getForm();
if (form.getDetail() == null) {
mPart.setVisible(false);
return;
}
layoutForm(parent);
mDetail.setDetailAccessor(new DetailAccessor(mDetail));
mDetail.setClearAfterSave(form.getDetail().isClearAfterSave());
// Label und Icon aus Maske setzten
mPart.setIconURI(ImageUtil.retrieveIcon(form.getIcon(), false));
mPart.setLabel(form.getTitle());
mPart.updateLocalization();
// Erstellen der Util-Klasse, welche sämtliche funktionen der Detailansicht steuert
casRequestsUtil = ContextInjectionFactory.make(WFCDetailCASRequestsUtil.class, mPerspective.getContext());
casRequestsUtil.initializeCasRequestUtil(getDetail(), mPerspective, this);
mPerspective.getContext().set(WFCDetailCASRequestsUtil.class, casRequestsUtil);
mPerspective.getContext().set(Constants.DETAIL_WIDTH, detailWidth);
TranslateUtil.translate(composite, translationService, locale);
// Helper erst initialisieren, wenn casRequestsUtil erstellt wurde
if (mDetail.getHelper() != null) {
mDetail.getHelper().setControls(mDetail);
}
// Handler, der Dialog anzeigt wenn versucht wird, die Anwendung mit ungespeicherten Änderungen zu schließen. Außerdem wird
// "RESTORING_UI_MESSAGE_SHOWN_THIS_SESSION" wieder auf false gesetzt, damit die Nachricht beim nächsten Starten wieder angezeigt wird
IWindowCloseHandler handler = mWindow -> {
@SuppressWarnings("unchecked") List<MPerspective> pList = (List<MPerspective>) appContext.get(Constants.DIRTY_PERSPECTIVES);
if (pList != null && !pList.isEmpty()) {
StringBuilder listString = new StringBuilder();
for (MPerspective mPerspective : pList) {
listString.append(" - " + translationService.translate(mPerspective.getLabel(), null) + "\n");
}
MessageDialog dialog = new MessageDialog(Display.getDefault().getActiveShell(), translationService.translate("@msg.ChangesDialog", null), null, translationService.translate("@msg.Close.DirtyMessage", null) + listString, MessageDialog.CONFIRM, new String[] { translationService.translate("@Action.Discard", null), translationService.translate("@Abort", null) }, 0);
boolean res = dialog.open() == 0;
if (res) {
prefs.put(Constants.RESTORING_UI_MESSAGE_SHOWN_THIS_SESSION, "false");
}
return res;
}
prefs.put(Constants.RESTORING_UI_MESSAGE_SHOWN_THIS_SESSION, "false");
return true;
};
window.getContext().set(IWindowCloseHandler.class, handler);
openRestoringUIDialog();
}
use of aero.minova.rcp.rcp.accessor.DetailAccessor in project aero.minova.rcp by minova-afis.
the class WFCStatisticDetailPart method postConstruct.
@PostConstruct
public void postConstruct(Composite parent) {
this.parent = parent;
formToolkit = new FormToolkit(parent.getDisplay());
resManager = new LocalResourceManager(JFaceResources.getResources(), parent);
mDetail = new MDetail();
mDetail.setDetailAccessor(new DetailAccessor(mDetail));
DetailLayout detailLayout = new DetailLayout();
parent.setLayout(detailLayout);
mPerspective.getContext().set(Constants.DETAIL_LAYOUT, detailLayout);
layoutSection();
}
use of aero.minova.rcp.rcp.accessor.DetailAccessor in project aero.minova.rcp by minova-afis.
the class TraverseEnterHandler method execute.
@Execute
public void execute() {
MPart part = partService.getActivePart();
boolean popupOpen = false;
if (part.getObject() instanceof WFCDetailPart) {
MDetail mDetail = ((WFCDetailPart) part.getObject()).getDetail();
if (((DetailAccessor) mDetail.getDetailAccessor()).getSelectedControl() != null) {
// aktuell selektiertes Feld holen
Control focussedControl = ((DetailAccessor) mDetail.getDetailAccessor()).getSelectedControl();
// Ist ein Popup offen?
if (focussedControl instanceof LookupComposite) {
LookupComposite lookup = (LookupComposite) focussedControl;
// Wir holen uns den Status des Popup des Lookup
popupOpen = lookup.popupIsOpen();
}
// nächstes Pflichtfeld suchen und fokussieren
getNextRequired(focussedControl, mDetail, popupOpen);
}
}
// Bei offenem Lookup-Popup wollen wir nicht speichern
if (!popupOpen) {
// ParameterizedCommand des SaveDetailsHandlers erstellen und ausführen
ParameterizedCommand cmd = commandService.createCommand(Constants.AERO_MINOVA_RCP_RCP_COMMAND_SAVEDETAIL, null);
handlerService.executeHandler(cmd);
}
}
use of aero.minova.rcp.rcp.accessor.DetailAccessor in project aero.minova.rcp by minova-afis.
the class TraverseEnterHandler method getNextRequired.
/**
* Diese Methode ermittelt das nächste leere Pflichtfeld nach folgendem Muster: <br>
* <br>
* 1. Prüfen, ob LookupEnterSelectsNextRequired gesetzt ist und ein Lookup mit offenen Popup selektiert ist:<br>
* <br>
* LookupEnterSelectsNextRequired ist nicht gesetzt: <br>
* Bei einem Lookup mit offenen Popup wird der ausgewählte Wert festgesetzt und das Lookup bleibt selektiert. <br>
* <br>
* LookupEnterSelectsNextRequired ist gesetzt:<br>
* Bei einem Lookup mit offenen Popup wird der ausgewählte Wert festgesetzt und das nächste leere Pflichtfeld selektiert. <br>
* <br>
* 2. Prüfen, ob EnterSelectsFirstRequired gesetzt ist und kein Lookup mit offenem Popup selektiert ist: <br>
* <br>
* EnterSelectsFirstRequired ist gesetzt: <br>
* Begonnen mit der ersten Section, wird das erste leere Pflichtfeld ermittelt und selektiert. <br>
* <br>
* EnterSelectsFirstRequired ist nicht gesetzt und es ist kein Lookup mit offenem Popup selektiert: <br>
* - Beginnend mit der Section, in der das aktuell selektierte Control sich befindet, wird das nächste leere Pflichtfeld ermittelt. Dabei werden nur die
* Controls nach dem aktuell selektiertem geprüft.<br>
* - Wenn kein Pflichtfeld gefunden wurde, werden die Sections, die nach der Section des selektierten Controls kommen, durchsucht.<br>
* - Falls am Ende des Parts angekommen und immer noch kein Pflichtfeld selektiert wurde, wird mit den Sections vor dem des selektierten Control weiter
* gemacht. Beginnend mit der ersten section <br>
* - Bei der Section des aktuell selektierten Controls angekommen ohne ein Pflichtfeld selktiert zu haben, werden nun die Controls in der Section und vor
* dem selktierten Control durchsucht. <br>
* <br>
* Wenn kein Pflichtfeld gefunden wird, bleibt das aktuelle Pflichtfeld selektiert.
*
* @param control
* fokussiertes Control
* @param mDetail
* @param popupOpen
*/
private void getNextRequired(Control control, MDetail mDetail, boolean popupOpen) {
Preferences preferences = InstanceScope.INSTANCE.getNode(ApplicationPreferences.PREFERENCES_NODE);
boolean lookupEnterSelectsNextRequired = (boolean) InstancePreferenceAccessor.getValue(preferences, ApplicationPreferences.LOOKUP_ENTER_SELECTS_NEXT_REQUIRED, DisplayType.CHECK, true, locale);
boolean enterSelectsFirstRequired = (boolean) InstancePreferenceAccessor.getValue(preferences, ApplicationPreferences.ENTER_SELECTS_FIRST_REQUIRED, DisplayType.CHECK, true, locale);
Control focussedControl = null;
if (control.getParent() instanceof TextAssist || control.getParent() instanceof LookupComposite) {
focussedControl = control.getParent();
} else {
focussedControl = control;
}
// Wir holen uns das MField des selektierten Felds.
Control fc = null;
Composite comp = null;
Section fcSection = null;
if (focussedControl instanceof NatTable) {
fcSection = (Section) focussedControl.getData(Constants.GRID_DATA_SECTION);
((NatTable) focussedControl).commitAndCloseActiveCellEditor();
} else {
fcSection = ((SectionAccessor) ((MField) control.getData(Constants.CONTROL_FIELD)).getmSection().getSectionAccessor()).getSection();
}
if (focussedControl instanceof LookupComposite) {
LookupComposite lookup = (LookupComposite) focussedControl;
// Wir holen uns den Status des Popup des Lookup
popupOpen = lookup.popupIsOpen();
}
for (Control children : fcSection.getChildren()) {
if (children instanceof Composite && !(children instanceof ToolBar) && !(children instanceof ImageHyperlink) && !(children instanceof Twistie)) {
comp = (Composite) children;
break;
}
}
// Wir prüfen ob die Preference LookupEnterSelectsNextRequired nicht gesetzt ist und das Lookup offen ist.
if (!lookupEnterSelectsNextRequired && popupOpen) {
focussedControl.setFocus();
if (focussedControl instanceof LookupComposite) {
LookupComposite lookup = (LookupComposite) focussedControl;
lookup.closePopup();
MField field = (MField) focussedControl.getData(Constants.CONTROL_FIELD);
setLookupValue(field, lookup);
}
return;
}
if (!enterSelectsFirstRequired || popupOpen) {
boolean cellSelected = false;
if (focussedControl instanceof NatTable) {
cellSelected = getNextRequiredNatTableCell(focussedControl, true);
}
LookupComposite lookup = null;
if (focussedControl instanceof LookupComposite) {
MField selectedField = (MField) focussedControl.getData(Constants.CONTROL_FIELD);
lookup = (LookupComposite) focussedControl;
if (popupOpen) {
setLookupValue(selectedField, lookup);
} else {
selectedField.setValue(selectedField.getValue(), false);
}
}
if (!cellSelected && focussedControl instanceof NatTable) {
NatTable natTable = (NatTable) focussedControl;
((SelectionLayer) natTable.getData(Constants.GRID_DATA_SELECTIONLAYER)).clear();
}
if (!cellSelected) {
Control[] tabListArrayFromFocussedControlSection = comp.getTabList();
List<Control> tabListFromFocussedControlSection = arrayToList(tabListArrayFromFocussedControlSection);
List<Section> sectionList = ((DetailAccessor) mDetail.getDetailAccessor()).getSectionList();
// [0,1,2,3,4,5,6,7,8,9] --> sublist(0,5) = [0,1,2,3,4]
int indexFocussedControl = tabListFromFocussedControlSection.indexOf(focussedControl);
fc = getNextRequiredControl(tabListFromFocussedControlSection.subList(indexFocussedControl + 1, tabListFromFocussedControlSection.size()));
if (fc != null) {
return;
}
int indexFocussedControlSection = sectionList.indexOf(fcSection);
fc = getNextRequiredControlOtherSection(focussedControl, sectionList.subList(indexFocussedControlSection + 1, sectionList.size()));
if (fc != null) {
return;
}
fc = getNextRequiredControlOtherSection(focussedControl, sectionList.subList(0, indexFocussedControlSection + 1));
if (fc != null) {
return;
}
fc = getNextRequiredControl(tabListFromFocussedControlSection.subList(0, indexFocussedControl + 1));
if (fc == null) {
if (focussedControl instanceof LookupComposite) {
lookup = (LookupComposite) focussedControl;
lookup.closePopup();
}
return;
}
}
} else {
LookupComposite lookup = null;
if (focussedControl instanceof LookupComposite) {
MField selectedField = (MField) focussedControl.getData(Constants.CONTROL_FIELD);
lookup = (LookupComposite) focussedControl;
if (popupOpen) {
setLookupValue(selectedField, lookup);
} else {
selectedField.setValue(selectedField.getValue(), false);
}
}
for (MSection mSection : mDetail.getMSectionList()) {
Composite compo = null;
Section section = ((SectionAccessor) mSection.getSectionAccessor()).getSection();
for (Control children : section.getChildren()) {
if (children instanceof Composite && !(children instanceof ToolBar || children instanceof Twistie || children instanceof ImageHyperlink)) {
compo = (Composite) children;
break;
}
}
List<Control> tabList = arrayToList(compo.getTabList());
fc = getNextRequiredControl(tabList);
if (fc != null) {
if (focussedControl instanceof LookupComposite) {
lookup = (LookupComposite) focussedControl;
lookup.closePopup();
}
return;
} else {
continue;
}
}
}
}
Aggregations