use of org.eclipse.nebula.widgets.opal.preferencewindow.PWTab in project aero.minova.rcp by minova-afis.
the class ApplicationPreferenceWindowHandler method execute.
@Execute
public void execute(IThemeEngine themeEngine, IWorkbench workbench, IEclipseContext context) {
pwm = new PreferenceWindowModel(s);
// In Context injected, damit TranslationService genutzt werden kann
ContextInjectionFactory.inject(pwm, application.getContext());
this.workbench = workbench;
// Shell des Windows der Application finden
MWindow appWindow = application.getChildren().get(0);
Shell shell = (Shell) appWindow.getWidget();
// Die Shell des Windows deaktivieren
shell.setEnabled(false);
String currentTheme = (String) InstancePreferenceAccessor.getValue(preferences, ApplicationPreferences.FONT_ICON_SIZE, DisplayType.COMBO, "M", s);
boolean curentSelectAllControls = (boolean) InstancePreferenceAccessor.getValue(preferences, ApplicationPreferences.SELECT_ALL_CONTROLS, DisplayType.CHECK, true, s);
List<PreferenceTabDescriptor> preferenceTabs = pwm.createModel(context);
Map<String, Object> data = fillData(preferenceTabs);
PreferenceWindow window = PreferenceWindow.create(shell, data);
for (PreferenceTabDescriptor tabDescriptor : preferenceTabs) {
// Tab erstellen und hinzufügen
PWTab newTab = window.addTab(tabDescriptor.getImage(), tabDescriptor.getLabel());
for (PreferenceSectionDescriptor section : tabDescriptor.getSections()) {
// Section hinzufügen
newTab.add(new PWSeparator(section.getLabel()));
for (PreferenceDescriptor pref : section.getPreferences()) {
// Preference hinzufügen
Object[] values = pref.getPossibleValues();
String key = pref.getKey();
createWidgets(newTab, pref, key, translationService, values);
}
}
}
// Preference Handler finden
List<MHandler> preferenceHandlers = modelService.findElements(application, "aero.minova.rcp.rcp.handler.preferencehandler", MHandler.class);
MHandler preferenceHandler = preferenceHandlers.get(0);
// Preference Handler deaktivieren
handlerService.deactivateHandler("org.eclipse.ui.window.preferences", preferenceHandler.getObject());
window.setSelectedTab(0);
if (window.open()) {
InstancePreferenceAccessor.putValue(preferences, ApplicationPreferences.TIMEZONE, DisplayType.ZONEID, window.getValueFor(ApplicationPreferences.TIMEZONE), s);
InstancePreferenceAccessor.putValue(preferences, ApplicationPreferences.LOCALE_LANGUAGE, DisplayType.LOCALE, window.getValueFor(ApplicationPreferences.LOCALE_LANGUAGE), s);
InstancePreferenceAccessor.putValue(preferences, ApplicationPreferences.COUNTRY, DisplayType.LOCALE, window.getValueFor(ApplicationPreferences.COUNTRY), s);
for (PreferenceTabDescriptor tab : preferenceTabs) {
for (PreferenceSectionDescriptor section : tab.getSections()) {
for (PreferenceDescriptor pref : section.getPreferences()) {
if (pref.getDisplayType() != DisplayType.ZONEID && pref.getDisplayType() != DisplayType.CUSTOMCHECK) {
InstancePreferenceAccessor.putValue(preferences, pref.getKey(), pref.getDisplayType(), window.getValueFor(pref.getKey()), s);
}
}
}
}
try {
preferences.flush();
lcs.changeApplicationLocale(CustomLocale.getLocale());
} catch (BackingStoreException | NullPointerException e) {
e.printStackTrace();
}
}
if (Util.isValid(shell)) {
// Die Shell des Windows aktivieren
shell.setEnabled(true);
// Preference Handler wieder aktivieren
handlerService.activateHandler("org.eclipse.ui.window.preferences", preferenceHandler.getObject());
}
boolean newSelectAllControls = (boolean) InstancePreferenceAccessor.getValue(preferences, ApplicationPreferences.SELECT_ALL_CONTROLS, DisplayType.CHECK, true, s);
String newTheme = (String) InstancePreferenceAccessor.getValue(preferences, ApplicationPreferences.FONT_ICON_SIZE, DisplayType.COMBO, "M", s);
if (!currentTheme.equals(newTheme) || !curentSelectAllControls == newSelectAllControls) {
Shell activeShell = Display.getCurrent().getActiveShell();
PlainMessageDialog confirmRestart = getBuilder(activeShell, translationService.translate("@Action.Restart", null)).buttonLabels(List.of(translationService.translate("@Action.Restart", null), translationService.translate("@Abort", null))).message(translationService.translate("@Preferences.RestartMessage", null)).build();
int openConfirm = confirmRestart.open();
if (openConfirm == 0) {
if (!currentTheme.equals(newTheme)) {
updateTheme(newTheme, themeEngine, workbench);
} else {
workbench.restart();
}
}
}
}
Aggregations