/* Copywrite 2017 Will Winder This file is part of Universal Gcode Sender (UGS). UGS is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. UGS is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with UGS. If not, see <http://www.gnu.org/licenses/>. */ package com.willwinder.ugs.nbp.core.services; import com.willwinder.ugs.nbp.lib.lookup.CentralLookup; import com.willwinder.universalgcodesender.i18n.Localization; import com.willwinder.universalgcodesender.model.BackendAPI; import com.willwinder.universalgcodesender.model.UGSEvent; import org.apache.commons.lang3.StringUtils; import org.openide.LifecycleManager; import org.openide.awt.Notification; import org.openide.awt.NotificationDisplayer; import org.openide.util.ImageUtilities; import org.openide.util.lookup.ServiceProvider; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** * A service that will listen for setting changes that requires a restart and notifies the user. * * @author Joacim Breiler */ @ServiceProvider(service = SettingsChangedNotificationService.class) public class SettingsChangedNotificationService { private static final String RESTART_ICON = "org/netbeans/core/windows/resources/restart.png"; private final BackendAPI backend; private Notification restartNotification; private String lastSelectedLanguage; public SettingsChangedNotificationService() { backend = CentralLookup.getDefault().lookup(BackendAPI.class); backend.addUGSEventListener(this::checkForLanguageChangeAndAskForRestart); lastSelectedLanguage = backend.getSettings().getLanguage(); } private void checkForLanguageChangeAndAskForRestart(UGSEvent ugsEvent) { if (ugsEvent.isSettingChangeEvent() && !StringUtils.equalsIgnoreCase(lastSelectedLanguage, backend.getSettings().getLanguage())) { if (null != restartNotification) { restartNotification.clear(); } lastSelectedLanguage = backend.getSettings().getLanguage(); Localization.initialize(backend.getSettings().getLanguage()); restartNotification = NotificationDisplayer.getDefault().notify(Localization.getString("restart"), ImageUtilities.loadImageIcon(RESTART_ICON, false), //NOI18N createRestartNotificationDetails(), createRestartNotificationDetails(), NotificationDisplayer.Priority.HIGH, NotificationDisplayer.Category.INFO); } } private JComponent createRestartNotificationDetails() { JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setOpaque(false); JLabel label = new JLabel(Localization.getString("platform.window.restart.changed.settings")); //NOI18N label.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); panel.add(label, BorderLayout.CENTER); label.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (null != restartNotification) { restartNotification.clear(); restartNotification = null; } LifecycleManager.getDefault().markForRestart(); LifecycleManager.getDefault().exit(); } }); return panel; } }