/* * This file is part of muCommander, http://www.mucommander.com * Copyright (C) 2002-2016 Maxence Bernard * * muCommander 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. * * muCommander 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 this program. If not, see <http://www.gnu.org/licenses/>. */ package com.mucommander.ui.dialog.pref.theme; import com.mucommander.text.Translator; import com.mucommander.ui.dialog.InformationDialog; import com.mucommander.ui.dialog.QuestionDialog; import com.mucommander.ui.dialog.pref.PreferencesDialog; import com.mucommander.ui.dialog.pref.component.PrefComponent; import com.mucommander.ui.theme.Theme; import com.mucommander.ui.theme.ThemeData; import com.mucommander.ui.theme.ThemeManager; import java.awt.*; /** * Main dialog for the theme editor. * @author Nicolas Rinaudo */ public class ThemeEditorDialog extends PreferencesDialog { // - Action listening ------------------------------------------------------- // -------------------------------------------------------------------------- private final static Dimension MINIMUM_DIALOG_DIMENSION = new Dimension(580,0); private final static Dimension MAXIMUM_DIALOG_DIMENSION = new Dimension(620,500); private ThemeData data; private Theme theme; private boolean wasThemeModified; /** * Creates a new theme editor dialog. * @param parent parent of the dialog. * @param theme theme to edit. */ public ThemeEditorDialog(Dialog parent, Theme theme) { super(parent, createTitle(theme)); initUI(theme); } /** * Creates a new theme editor dialog. * @param parent parent of the dialog. * @param theme theme to edit. */ public ThemeEditorDialog(Frame parent, Theme theme) { super(parent, createTitle(theme)); initUI(theme); } private static String createTitle(Theme theme) {return Translator.get("theme_editor.title") + ": " + theme.getName();} private void initUI(Theme theme) { this.theme = theme; data = theme.cloneData(); wasThemeModified = false; addPreferencesPanel(new FolderPanePanel(this, data), false); addPreferencesPanel(new LocationBarPanel(this, data)); addPreferencesPanel(new StatusBarPanel(this, data)); addPreferencesPanel(new ShellPanel(this, data)); addPreferencesPanel(new FileEditorPanel(this, data)); addPreferencesPanel(new QuickListPanel(this, data)); // Sets the dialog's size. setMinimumSize(MINIMUM_DIALOG_DIMENSION); setMaximumSize(MAXIMUM_DIALOG_DIMENSION); } /** * Edits the theme specified at creation time and returns <code>true</code> if it was modified. * @return <code>true</code> if the theme was modified by the user, <code>false</code> otherwise. */ public boolean editTheme() { showDialog(); return wasThemeModified; } @Override public boolean checkCommit() { super.checkCommit(); // If the theme has been modified and is not the user theme, asks the user to confirm // whether it's ok to overwrite his user theme. if(!theme.isIdentical(data) && !theme.canModify()) if(new QuestionDialog(this, Translator.get("warning"), Translator.get("theme_editor.theme_warning"), this, new String[]{Translator.get("yes"), Translator.get("no")}, new int[]{0,1}, 0).getActionValue() != 0) return false; return true; } @Override public void commit() { super.commit(); if(!theme.isIdentical(data)) { wasThemeModified = true; try { // If the theme cannot be modified, overwrites the user theme with the new data. if(!theme.canModify()) { boolean updateCurrentTheme; updateCurrentTheme = ThemeManager.isCurrentTheme(theme); // Overwrites the user theme and changes the dialog's title to reflect the change. theme = ThemeManager.overwriteUserTheme(data); setTitle(createTitle(theme)); // If the old theme was the current one, switch to 'user theme'. if(updateCurrentTheme) ThemeManager.setCurrentTheme(theme); } // Otherwise, imports the new data in the user theme and saves it. else { theme.importData(data); ThemeManager.writeTheme(theme); } } catch(Exception exception) { try { InformationDialog.showErrorDialog(this, Translator.get("write_error"), Translator.get("cannot_write_file", ThemeManager.getUserThemeFile().getAbsolutePath())); } catch(Exception e) {} } } } @Override public void componentChanged(PrefComponent component) { setCommitButtonsEnabled(!theme.isIdentical(data)); } }