/* * Copyright 2001-2014 Aspose Pty Ltd. All Rights Reserved. * * This file is part of Aspose.Words. The source code in this file * is only intended as a supplement to the documentation, and is provided * "as is", without warranty of any kind, either expressed or implied. */ package com.aspose.words.examples.viewers_visualizers.document_explorer; import com.aspose.words.FileFormatUtil; import com.aspose.words.SaveFormat; import javax.swing.*; import java.io.File; import java.text.MessageFormat; /** * Provides static methods for actions that involve dialogs. */ public class Dialogs { /** * Stores the last accessed file path, so that the next file dialog session * should start from that directory. */ private static String mDocumentPath = ""; /** * Stores the name of the currently loaded document. Name is stored without * extension to be used when saving in different file format. */ private static String mDocumentName; /** * Stores an instance of a file chooser dialog which allows the user to * choose a document to open from disk. */ private static JFileChooser mOpenDialog; /** * Stores an instance of a file chooser dialog which allows the user to save * a document to disk in a given format. */ private static JFileChooser mSaveDialog; /** * This class is purely static. */ private Dialogs() { } // Static ctor which sets up the open and save dialogs static { mOpenDialog = new JFileChooser(); mOpenDialog.setAcceptAllFileFilterUsed(false); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_DOC_FORMAT); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_DOCX_FORMAT); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_XML_FORMAT); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_RTF_FORMAT); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_ODT_FORMAT); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_HTML_FORMAT); mOpenDialog.setFileFilter(Globals.OPEN_FILE_FILTER_ALL_SUPPORTED_FORMATS); // This is last so it will appear by default. mOpenDialog.setMultiSelectionEnabled(false); mOpenDialog.setFileSelectionMode(JFileChooser.FILES_ONLY); mOpenDialog.setDialogTitle(Globals.OPEN_DOCUMENT_DIALOG_TITLE); mSaveDialog = new JFileChooser(); mSaveDialog.setMultiSelectionEnabled(false); mSaveDialog.setFileSelectionMode(JFileChooser.FILES_ONLY); mSaveDialog.setDialogTitle(Globals.SAVE_DOCUMENT_DIALOG_TITLE); mSaveDialog.setAcceptAllFileFilterUsed(false); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_DOCX); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_DOCM); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_PDF); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_XPS); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_PDT); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_HTML); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_MHT); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_RTF); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_XML); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_FOPC); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_TXT); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_EPUB); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_SWF); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_XAML); mSaveDialog.addChoosableFileFilter(Globals.SAVE_FILE_FILTER_DOC); // Add this last to make it the default format. // Corrects the behaviour of the "save as" dialog to be more like MS Word. Changing file filter // will automatically preserve file name and change to the appropriate extension. mSaveDialog.addPropertyChangeListener(new SaveDialogChangeListener(mSaveDialog)); } /** * Opens a chooser dialog and allows the user to pick a document to open. * * @return The file name of the selected document or an empty string if the * dialog was canceled. */ public static String openDocument() { mOpenDialog.setCurrentDirectory(new File(mDocumentPath)); if (mOpenDialog.showOpenDialog(Globals.mMainForm) == JFileChooser.APPROVE_OPTION) { File file = mOpenDialog.getSelectedFile(); String fileName = file.getAbsolutePath(); if (file.exists()) { mDocumentPath = file.getParent(); mDocumentName = file.getName(); return fileName; } else { JOptionPane.showMessageDialog(Globals.mMainForm, MessageFormat.format("File \"{0}\" doesn't exist.", fileName), Globals.APPLICATION_TITLE, JOptionPane.ERROR_MESSAGE); return ""; } } else { return ""; } } /** * Opens a chooser dialog and allows the user to pick a path on the disk and * format to save a document to. * * @return The path to save the document to or an empty string if the dialog * was canceled. */ public static String saveDocument() { mSaveDialog.setCurrentDirectory(new File(mDocumentPath)); File currentDocument = new File(mDocumentName); mSaveDialog.setSelectedFile(Utils.setExtension(currentDocument, getCurrentSaveFileFilterExtension())); if (mSaveDialog.showSaveDialog(Globals.mMainForm) == JFileChooser.APPROVE_OPTION) { File file = mSaveDialog.getSelectedFile(); // The format to save to is inferred from the extension of the file name. Check if this matches a valid Aspose.Words save format. // If the extension is unsupported or missing then add the extension of the current file filter and save in that format. if (FileFormatUtil.extensionToSaveFormat(Utils.getExtension(file.getName())) == SaveFormat.UNKNOWN) { String ext = getCurrentSaveFileFilterExtension(); file = Utils.setExtension(file, ext); } // If the file exists open a dialog asking if the existing file should be overridden. if (file.exists()) { String fileName = file.getAbsolutePath(); if (JOptionPane.showConfirmDialog(Globals.mMainForm, MessageFormat.format("File \"{0}\" already exists. Would you like to overwrite it ?", fileName), Globals.APPLICATION_TITLE, JOptionPane.YES_NO_OPTION) == JOptionPane.NO_OPTION) { return ""; } } mDocumentPath = file.getParent(); return file.getAbsolutePath(); } else { return ""; } } /** * Returns the extension of the current file filter selected in the Save As * dialog. */ private static String getCurrentSaveFileFilterExtension() { return ((SaveFileFilter) mSaveDialog.getFileFilter()).mExtension; } }