/* * HomeView.java 28 oct 2008 * * Sweet Home 3D, Copyright (c) 2008 Emmanuel PUYBARET / eTeks <info@eteks.com> * * This program 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 2 of the License, or * (at your option) any later version. * * This program 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package com.eteks.sweethome3d.viewcontroller; import java.util.List; import java.util.concurrent.Callable; import com.eteks.sweethome3d.model.Camera; import com.eteks.sweethome3d.model.InterruptedRecorderException; import com.eteks.sweethome3d.model.RecorderException; /** * The main view that displays a home. * @author Emmanuel Puybaret */ public interface HomeView extends View { /** * The actions proposed by the view to user. */ public enum ActionType { NEW_HOME, CLOSE, OPEN, DELETE_RECENT_HOMES, SAVE, SAVE_AS, SAVE_AND_COMPRESS, PAGE_SETUP, PRINT_PREVIEW, PRINT, PRINT_TO_PDF, PREFERENCES, EXIT, UNDO, REDO, CUT, COPY, PASTE, DELETE, SELECT_ALL, ADD_HOME_FURNITURE, DELETE_HOME_FURNITURE, MODIFY_FURNITURE, IMPORT_FURNITURE, IMPORT_FURNITURE_LIBRARY, IMPORT_TEXTURE, IMPORT_TEXTURES_LIBRARY, SORT_HOME_FURNITURE_BY_CATALOG_ID, SORT_HOME_FURNITURE_BY_NAME, SORT_HOME_FURNITURE_BY_WIDTH, SORT_HOME_FURNITURE_BY_DEPTH, SORT_HOME_FURNITURE_BY_HEIGHT, SORT_HOME_FURNITURE_BY_X, SORT_HOME_FURNITURE_BY_Y, SORT_HOME_FURNITURE_BY_ELEVATION, SORT_HOME_FURNITURE_BY_ANGLE, SORT_HOME_FURNITURE_BY_LEVEL, SORT_HOME_FURNITURE_BY_COLOR, SORT_HOME_FURNITURE_BY_TEXTURE, SORT_HOME_FURNITURE_BY_MOVABILITY, SORT_HOME_FURNITURE_BY_TYPE, SORT_HOME_FURNITURE_BY_VISIBILITY, SORT_HOME_FURNITURE_BY_PRICE, SORT_HOME_FURNITURE_BY_VALUE_ADDED_TAX_PERCENTAGE, SORT_HOME_FURNITURE_BY_VALUE_ADDED_TAX, SORT_HOME_FURNITURE_BY_PRICE_VALUE_ADDED_TAX_INCLUDED, SORT_HOME_FURNITURE_BY_DESCENDING_ORDER, DISPLAY_HOME_FURNITURE_CATALOG_ID, DISPLAY_HOME_FURNITURE_NAME, DISPLAY_HOME_FURNITURE_WIDTH, DISPLAY_HOME_FURNITURE_DEPTH, DISPLAY_HOME_FURNITURE_HEIGHT, DISPLAY_HOME_FURNITURE_X, DISPLAY_HOME_FURNITURE_Y, DISPLAY_HOME_FURNITURE_ELEVATION, DISPLAY_HOME_FURNITURE_ANGLE, DISPLAY_HOME_FURNITURE_COLOR, DISPLAY_HOME_FURNITURE_LEVEL, DISPLAY_HOME_FURNITURE_TEXTURE, DISPLAY_HOME_FURNITURE_MOVABLE, DISPLAY_HOME_FURNITURE_DOOR_OR_WINDOW, DISPLAY_HOME_FURNITURE_VISIBLE, DISPLAY_HOME_FURNITURE_PRICE, DISPLAY_HOME_FURNITURE_VALUE_ADDED_TAX_PERCENTAGE, DISPLAY_HOME_FURNITURE_VALUE_ADDED_TAX, DISPLAY_HOME_FURNITURE_PRICE_VALUE_ADDED_TAX_INCLUDED, ALIGN_FURNITURE_ON_TOP, ALIGN_FURNITURE_ON_BOTTOM, ALIGN_FURNITURE_ON_LEFT, ALIGN_FURNITURE_ON_RIGHT, ALIGN_FURNITURE_ON_FRONT_SIDE, ALIGN_FURNITURE_ON_BACK_SIDE, ALIGN_FURNITURE_ON_LEFT_SIDE, ALIGN_FURNITURE_ON_RIGHT_SIDE, ALIGN_FURNITURE_SIDE_BY_SIDE, DISTRIBUTE_FURNITURE_HORIZONTALLY, DISTRIBUTE_FURNITURE_VERTICALLY, GROUP_FURNITURE, UNGROUP_FURNITURE, EXPORT_TO_CSV, SELECT, PAN, CREATE_WALLS, CREATE_ROOMS, CREATE_DIMENSION_LINES, CREATE_LABELS, DELETE_SELECTION, LOCK_BASE_PLAN, UNLOCK_BASE_PLAN, MODIFY_COMPASS, MODIFY_WALL, REVERSE_WALL_DIRECTION, SPLIT_WALL, MODIFY_ROOM, MODIFY_LABEL, INCREASE_TEXT_SIZE, DECREASE_TEXT_SIZE, TOGGLE_BOLD_STYLE, TOGGLE_ITALIC_STYLE, IMPORT_BACKGROUND_IMAGE, MODIFY_BACKGROUND_IMAGE, HIDE_BACKGROUND_IMAGE, SHOW_BACKGROUND_IMAGE, DELETE_BACKGROUND_IMAGE, ADD_LEVEL, DELETE_LEVEL, MODIFY_LEVEL, ZOOM_OUT, ZOOM_IN, EXPORT_TO_SVG, VIEW_FROM_TOP, VIEW_FROM_OBSERVER, MODIFY_OBSERVER, STORE_POINT_OF_VIEW, DELETE_POINTS_OF_VIEW, CREATE_PHOTOS_AT_POINTS_OF_VIEW, DETACH_3D_VIEW, ATTACH_3D_VIEW, DISPLAY_ALL_LEVELS, DISPLAY_SELECTED_LEVEL, MODIFY_3D_ATTRIBUTES, CREATE_PHOTO, CREATE_VIDEO, EXPORT_TO_OBJ, HELP, ABOUT} public enum SaveAnswer {SAVE, CANCEL, DO_NOT_SAVE} /** * Enables or disables the action matching <code>actionType</code>. */ public abstract void setEnabled(ActionType actionType, boolean enabled); /** * Sets the name and tool tip of undo and redo actions. If a parameter is <code>null</code>, * the properties will be reset to their initial values. */ public abstract void setUndoRedoName(String undoText, String redoText); /** * Enables or disables transfer between components. */ public abstract void setTransferEnabled(boolean enabled); /** * Detaches the given <code>view</code> from home view. */ public abstract void detachView(View view); /** * Attaches the given <code>view</code> to home view. */ public abstract void attachView(View view); /** * Displays a content chooser open dialog to choose the name of a home. */ public abstract String showOpenDialog(); /** * Displays a content chooser open dialog to choose a language library. */ public abstract String showImportLanguageLibraryDialog(); /** * Displays a dialog that lets user choose whether he wants to overwrite * an existing language library or not. */ public abstract boolean confirmReplaceLanguageLibrary(String languageLibraryName); /** * Displays a content chooser open dialog to choose a furniture library. */ public abstract String showImportFurnitureLibraryDialog(); /** * Displays a dialog that lets user choose whether he wants to overwrite * an existing furniture library or not. */ public abstract boolean confirmReplaceFurnitureLibrary(String furnitureLibraryName); /** * Displays a content chooser open dialog to choose a textures library. */ public abstract String showImportTexturesLibraryDialog(); /** * Displays a dialog that lets user choose whether he wants to overwrite * an existing textures library or not. */ public abstract boolean confirmReplaceTexturesLibrary(String texturesLibraryName); /** * Displays a dialog that lets user choose whether he wants to overwrite * an existing plug-in or not. */ public abstract boolean confirmReplacePlugin(String pluginName); /** * Displays a content chooser save dialog to choose the name of a home. */ public abstract String showSaveDialog(String homeName); /** * Displays a dialog that lets user choose whether he wants to save * the current home or not. * @return {@link SaveAnswer#SAVE} if user chose to save home, * {@link SaveAnswer#DO_NOT_SAVE} if user don't want to save home, * or {@link SaveAnswer#CANCEL} if doesn't want to continue current operation. */ public abstract SaveAnswer confirmSave(String homeName); /** * Displays a dialog that let user choose whether he wants to save * a home that was created with a newer version of Sweet Home 3D. * @return <code>true</code> if user confirmed to save. */ public abstract boolean confirmSaveNewerHome(String homeName); /** * Displays a dialog that let user choose whether he wants to delete * the selected furniture from catalog or not. * @return <code>true</code> if user confirmed to delete. */ public abstract boolean confirmDeleteCatalogSelection(); /** * Displays a dialog that let user choose whether he wants to exit * application or not. * @return <code>true</code> if user confirmed to exit. */ public abstract boolean confirmExit(); /** * Displays <code>message</code> in an error message box. */ public abstract void showError(String message); /** * Displays <code>message</code> in a message box. */ public abstract void showMessage(String message); /** * Displays the tip matching <code>actionTipKey</code> and * returns <code>true</code> if the user chose not to display again the tip. */ public abstract boolean showActionTipMessage(String actionTipKey); /** * Displays an about dialog. */ public abstract void showAboutDialog(); /** * Shows a print dialog to print the home displayed by this pane. * @return a print task to execute or <code>null</code> if the user canceled print. * The <code>call<code> method of the returned task may throw a * {@link RecorderException RecorderException} exception if print failed * or an {@link InterruptedRecorderException InterruptedRecorderException} * exception if it was interrupted. */ public abstract Callable<Void> showPrintDialog(); /** * Shows a content chooser save dialog to print a home in a PDF file. */ public abstract String showPrintToPDFDialog(String homeName); /** * Prints a home to a given PDF file. This method may be overridden * to write to another kind of output stream. * Caution !!! This method may be called from a threaded task. */ public abstract void printToPDF(String pdfFile) throws RecorderException; /** * Shows a content chooser save dialog to export furniture list in a CSV file. */ public abstract String showExportToCSVDialog(String name); /** * Exports furniture list to a given SVG file. * Caution !!! This method may be called from a threaded task. */ public abstract void exportToCSV(String csvName) throws RecorderException; /** * Shows a content chooser save dialog to export a home plan in a SVG file. */ public abstract String showExportToSVGDialog(String name); /** * Exports the plan objects to a given SVG file. * Caution !!! This method may be called from a threaded task. */ public abstract void exportToSVG(String svgName) throws RecorderException; /** * Shows a content chooser save dialog to export a 3D home in a OBJ file. */ public abstract String showExportToOBJDialog(String homeName); /** * Exports the 3D home objects to a given OBJ file. * Caution !!! This method may be called from a threaded task. */ public abstract void exportToOBJ(String objFile) throws RecorderException; /** * Displays a dialog that lets the user choose a name for the current camera. */ public abstract String showStoreCameraDialog(String cameraName); /** * Displays a dialog showing the list of cameras stored in home * and returns the ones selected by the user to be deleted. */ public abstract List<Camera> showDeletedCamerasDialog(); /** * Returns <code>true</code> if clipboard contains data that * components are able to handle. */ public abstract boolean isClipboardEmpty(); /** * Displays the given message and returns <code>false</code> if the user * doesn't want to be informed of the displayed updates and <code>showOnlyMessage</code> is <code>false</code>. */ public abstract boolean showUpdatesMessage(String updatesMessage, boolean showOnlyMessage); /** * Execute <code>runnable</code> asynchronously in the thread * that manages toolkit events. */ public abstract void invokeLater(Runnable runnable); }