/* * Copyright (C) 2015 Patryk Strach * * This file is part of Virtual Slide Viewer. * * Virtual Slide Viewer 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. * * Virtual Slide Viewer 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 Virtual Slide Viewer. * If not, see <http://www.gnu.org/licenses/>. */ package virtualslideviewer.ui; import java.nio.file.Path; import javax.swing.SwingUtilities; import virtualslideviewer.config.ApplicationConfiguration; import virtualslideviewer.core.VirtualSlide; import virtualslideviewer.core.persistence.VirtualSlidePersistenceService; import virtualslideviewer.ui.MainView.Listener; import virtualslideviewer.ui.about.AboutView; import virtualslideviewer.ui.config.ConfigView; import virtualslideviewer.undo.UndoableAction; import virtualslideviewer.undo.UndoableActionSystem; import virtualslideviewer.undo.UndoableActionSystemListener; import virtualslideviewer.util.ParameterValidator; public class MainPresenter implements UndoableActionSystemListener, VirtualSlidePersistenceService.Listener { private final MainView mView; private final ConfigView mPreferencesView; private final AboutView mAboutView; private final UndoableActionSystem mUndoSystem; private final ApplicationConfiguration mUserConfiguration; public MainPresenter(MainView view, ConfigView preferencesView, AboutView aboutView, VirtualSlidePersistenceService slideLoadingService, UndoableActionSystem undoSystem, ApplicationConfiguration userConfiguration) { ParameterValidator.throwIfNull(view, "view"); ParameterValidator.throwIfNull(preferencesView, "preferencesView"); ParameterValidator.throwIfNull(aboutView, "aboutView"); ParameterValidator.throwIfNull(slideLoadingService, "slideLoadingService"); ParameterValidator.throwIfNull(undoSystem, "undoSystem"); ParameterValidator.throwIfNull(userConfiguration, "userConfiguration"); mView = view; mPreferencesView = preferencesView; mAboutView = aboutView; mUndoSystem = undoSystem; mUserConfiguration = userConfiguration; slideLoadingService.addListener(this); mUndoSystem.addListener(this); mView.addListener(new Listener() { @Override public void onUndo() { undo(); } @Override public void onRedo() { redo(); } @Override public void onOpenPreferences() { openPreferencesDialog(); } @Override public void onAboutClick() { openAboutDialog(); } @Override public void onViewClosing() { saveWindowLayout(); } }); initializeView(); } private void initializeView() { mView.restoreLayoutFromConfiguration(mUserConfiguration); mView.setUndoEnabled(false); mView.setRedoEnabled(false); } @Override public void onVirtualSlideLoaded(VirtualSlide loadedSlide, Path loadedFilePath) { SwingUtilities.invokeLater(() -> mView.setTitle("Virtual Slide Viewer - " + loadedFilePath.getFileName())); } /** * Undoes last action executed by a user. */ public void undo() { mUndoSystem.undo(); } /** * Redoes recently undone action. */ public void redo() { mUndoSystem.redo(); } /** * Activates / deactives the entries related to undo functionality depending on its availability. */ public void updateUndoRedoAvailability() { mView.setUndoEnabled(mUndoSystem.canUndo()); mView.setRedoEnabled(mUndoSystem.canRedo()); } @Override public void onExecute(UndoableAction executedAction) { updateUndoRedoAvailability(); mView.setStatusMessage(executedAction.getExecuteMessage()); } @Override public void onRedo(UndoableAction redoneAction) { updateUndoRedoAvailability(); mView.setStatusMessage(redoneAction.getExecuteMessage()); } @Override public void onUndo(UndoableAction undoneAction) { updateUndoRedoAvailability(); mView.setStatusMessage(undoneAction.getUndoMessage()); } @Override public void onHistoryCleared() { updateUndoRedoAvailability(); mView.setStatusMessage(""); } private void openPreferencesDialog() { mPreferencesView.show(); } private void openAboutDialog() { mAboutView.show(); } private void saveWindowLayout() { mView.saveLayoutToConfiguration(mUserConfiguration); } }