Package com.mucommander.ui.main.frame

Source Code of com.mucommander.ui.main.frame.MainFrameBuilder

/*
* This file is part of muCommander, http://www.mucommander.com
* Copyright (C) 2002-2012 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.main.frame;

import java.util.LinkedList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.mucommander.commons.conf.Configuration;
import com.mucommander.commons.file.AbstractFile;
import com.mucommander.commons.file.FileFactory;
import com.mucommander.commons.file.FileURL;
import com.mucommander.conf.MuConfigurations;
import com.mucommander.conf.MuPreference;
import com.mucommander.conf.MuPreferences;
import com.mucommander.conf.MuPreferencesAPI;
import com.mucommander.conf.MuSnapshot;
import com.mucommander.ui.main.FolderPanel.FolderPanelType;
import com.mucommander.ui.main.MainFrame;
import com.mucommander.ui.main.table.Column;
import com.mucommander.ui.main.table.FileTableConfiguration;

/**
*
* @author Arik Hadas
*/
public abstract class MainFrameBuilder {
  private static final Logger LOGGER = LoggerFactory.getLogger(MainFrameBuilder.class);

  public abstract MainFrame[] build();
 
  public int getSelectedFrame() { return 0; }
 
  /**
     * Retrieves the user's initial path for the specified frame.
     * <p>
     * If the path found in preferences is either illegal or does not exist, this method will
     * return the user's home directory - we assume this will always exist, which might be a bit
     * of a leap of faith.
     * </p>
     * @param  folderPanelType panel for which the initial path should be returned (either {@link com.mucommander.ui.main.FolderPanel.FolderPanelType.LEFT} or
     *               {@link #@link com.mucommander.ui.main.FolderPanel.FolderPanelType.RIGHT}).
     * @return       the user's initial path for the specified frame.
     */
    protected AbstractFile[] getInitialPaths(FolderPanelType folderPanelType, int window) {
        boolean       isCustom;    // Whether the initial path is a custom one or the last used folder.
        String[]      folderPaths; // Paths to the initial folders.
       
        // Snapshot configuration
        Configuration snapshot = MuConfigurations.getSnapshot();
        // Preferences configuration
        MuPreferencesAPI preferences = MuConfigurations.getPreferences();
       
        // Checks which kind of initial path we're dealing with.
        isCustom = preferences.getVariable(MuPreference.STARTUP_FOLDERS, MuPreferences.DEFAULT_STARTUP_FOLDERS).equals(MuPreferences.STARTUP_FOLDERS_CUSTOM);

        // Handles custom initial paths.
        if (isCustom) {
          folderPaths = new String[] {(folderPanelType == FolderPanelType.LEFT ? preferences.getVariable(MuPreference.LEFT_CUSTOM_FOLDER) :
            preferences.getVariable(MuPreference.RIGHT_CUSTOM_FOLDER))};
        }
        // Handles "last folder" initial paths.
        else {
          // Set initial path to each tab
          int nbFolderPaths = snapshot.getIntegerVariable(MuSnapshot.getTabsCountVariable(window, folderPanelType == FolderPanelType.LEFT));
          folderPaths = new String[nbFolderPaths];
          for (int i=0; i<nbFolderPaths;++i)
            folderPaths[i] = snapshot.getVariable(MuSnapshot.getTabLocationVariable(window, folderPanelType == FolderPanelType.LEFT, i));
        }

        List<AbstractFile> initialFolders = new LinkedList<AbstractFile>(); // Initial folders
        AbstractFile folder;
       
        for (String folderPath : folderPaths) {
          // TODO: consider whether to search for workable path in case the folder doesn't exist
          if (folderPath != null && (folder = FileFactory.getFile(folderPath)) != null && folder.exists())
            initialFolders.add(folder);
        }
       
        // If the initial path is not legal or does not exist, defaults to the user's home.
        AbstractFile[] results = initialFolders.size() == 0 ?
            new AbstractFile[] {FileFactory.getFile(System.getProperty("user.home"))} :
            initialFolders.toArray(new AbstractFile[0]);

         LOGGER.debug("initial folders:");
         for (AbstractFile result:results)
           LOGGER.debug("\t"+result);
       
        return results;
    }

    /**
     * Retrieves the user's initial path for the specified frame.
     * <p>
     * If the path found in preferences is either illegal or does not exist, this method will
     * return the user's home directory - we assume this will always exist, which might be a bit
     * of a leap of faith.
     * </p>
     * @param  folderPanelType panel for which the initial path should be returned (either {@link com.mucommander.ui.main.FolderPanel.FolderPanelType.LEFT} or
     *               {@link #@link com.mucommander.ui.main.FolderPanel.FolderPanelType.RIGHT}).
     * @return       the user's initial path for the specified frame.
     */
    protected FileURL getInitialPath(FolderPanelType folderPanelType) {
        // Preferences configuration
        MuPreferencesAPI preferences = MuConfigurations.getPreferences();
       
        // Checks which kind of initial path we're dealing with.
        boolean isCustom = preferences.getVariable(MuPreference.STARTUP_FOLDERS, MuPreferences.DEFAULT_STARTUP_FOLDERS).equals(MuPreferences.STARTUP_FOLDERS_CUSTOM);

        String customPath = null;
        // Handles custom initial paths.
        if (isCustom) {
          customPath = (folderPanelType == FolderPanelType.LEFT ?
              preferences.getVariable(MuPreference.LEFT_CUSTOM_FOLDER)
              : preferences.getVariable(MuPreference.RIGHT_CUSTOM_FOLDER));
        }

        AbstractFile result = null;
        if (customPath == null || (result = FileFactory.getFile(customPath)) == null || !result.exists())
          result = getHomeFolder();
       
        LOGGER.debug("initial folder: " + result);
       
        return result.getURL();
    }

    protected FileTableConfiguration getFileTableConfiguration(FolderPanelType folderPanelType, int window) {
        FileTableConfiguration conf;

        conf = new FileTableConfiguration();

        // Loop on columns
        for(Column c  : Column.values()) {
            if(c!=Column.NAME) {       // Skip the special name column (always visible, width automatically calculated)
              // Sets the column's initial visibility.
              conf.setEnabled(c,
                  MuConfigurations.getSnapshot().getVariable(
                      MuSnapshot.getShowColumnVariable(window, c, folderPanelType == FolderPanelType.LEFT),
                      c.showByDefault()
              )
          );

                // Sets the column's initial width.
                conf.setWidth(c, MuConfigurations.getSnapshot().getIntegerVariable(MuSnapshot.getColumnWidthVariable(window, c, folderPanelType == FolderPanelType.LEFT)));
            }

            // Sets the column's initial order
            conf.setPosition(c, MuConfigurations.getSnapshot().getVariable(
                                    MuSnapshot.getColumnPositionVariable(window, c, folderPanelType == FolderPanelType.LEFT),
                                    c.ordinal())
            );
        }

        return conf;
    }
   
    protected AbstractFile getHomeFolder() {
      return FileFactory.getFile(System.getProperty("user.home"));
    }
}
TOP

Related Classes of com.mucommander.ui.main.frame.MainFrameBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.