Class AbstractGameComponentEditor<G extends GameComponent>

  • Type Parameters:
    G - the type of game component to be edited
    All Implemented Interfaces:
    Commandable, StrangeEonsEditor, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.RootPaneContainer, javax.swing.WindowConstants
    Direct Known Subclasses:
    DeckEditor, DIYEditor, MarkerEditor

    public abstract class AbstractGameComponentEditor<G extends GameComponent>
    extends AbstractStrangeEonsEditor
    The abstract base class for GameComponent editors. Editors for components based on compiled code will typically be a direct subclass of AbstractGameComponentEditor. Editors for components based on DIY scripts use DIYEditors.
    Since:
    3.0
    Author:
    Chris Jennings
    See Also:
    Serialized Form
    • Nested Class Summary

      • Nested classes/interfaces inherited from class javax.swing.JInternalFrame

        javax.swing.JInternalFrame.AccessibleJInternalFrame, javax.swing.JInternalFrame.JDesktopIcon
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      protected javax.swing.JSplitPane previewSplitPane  
      protected Sheet<G>[] sheets  
      protected SheetViewer[] viewers  
      • Fields inherited from class javax.swing.JInternalFrame

        closable, CONTENT_PANE_PROPERTY, desktopIcon, FRAME_ICON_PROPERTY, frameIcon, GLASS_PANE_PROPERTY, iconable, IS_CLOSED_PROPERTY, IS_ICON_PROPERTY, IS_MAXIMUM_PROPERTY, IS_SELECTED_PROPERTY, isClosed, isIcon, isMaximum, isSelected, LAYERED_PANE_PROPERTY, maximizable, MENU_BAR_PROPERTY, resizable, ROOT_PANE_PROPERTY, rootPane, rootPaneCheckingEnabled, title, TITLE_PROPERTY
      • Fields inherited from class javax.swing.JComponent

        listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
      • Fields inherited from class java.awt.Component

        accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
      • Fields inherited from interface java.awt.image.ImageObserver

        ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
      • Fields inherited from interface javax.swing.WindowConstants

        DISPOSE_ON_CLOSE, DO_NOTHING_ON_CLOSE, EXIT_ON_CLOSE, HIDE_ON_CLOSE
    • Method Summary

      All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      void addFieldPopulationListener​(StrangeEonsEditor.FieldPopulationListener fpl)
      Adds a new FieldPopulationListener to this game component editor.
      boolean canPerformCommand​(AbstractCommand command)
      Returns true if the commandable wishes to handle the given command.
      protected void clearImpl()
      Clears the component by calling its GameComponent.clearAll() method, then repopulating the editor controls.
      void dispose()
      Releases resources when the editor will no longer be used.
      void export()
      Exports the editor content as a different file format.
      protected void exportImpl()
      The default export implementation for game components.
      protected void fireFieldPopulationEvent()
      Called to fire a field population event when the editor's controls are filled in to match the edited game component.
      void forceRerender()
      Deprecated.
      Replaced by redrawPreview().
      javax.swing.border.Border getBorder()  
      protected java.lang.String getDefaultFileName()
      Returns a default file name for a game component that hasn't been saved.
      java.lang.String getFileNameExtension()
      Returns the standard file extension for the type of content displayed in this editor.
      java.lang.String getFileTypeDescription()
      Returns a description of the content displayed in this editor.
      javax.swing.Icon getFrameIcon()
      Returns the editor window icon.
      G getGameComponent()
      Returns the edited game component.
      Sheet<G> getSelectedSheet()
      Returns the sheet displayed by the currently selected previewer.
      int getSelectedSheetIndex()
      Returns the index of the sheet displayed by the currently selected previewer.
      Sheet<G> getSheet​(int index)
      Returns the sheet being displayed by the sheet viewer with the specified index.
      int getSheetCount()
      Returns the number of Sheets being previewed by this editor (may be 0).
      java.lang.String[] getSheetLabels()
      Returns an array of labels that can be used to describe the component's sheets.
      void handleOpenRequest​(G newComponent, java.io.File path)
      After installing the component, make sure you update the component object.
      boolean hasUnsavedChanges()
      Returns true if the edited game component has unsaved changes.
      protected void initializeSheetViewers​(javax.swing.JTabbedPane container)
      Initializes the sheet viewers for an editor.
      boolean isAttached()
      Returns true if this editor is currently attached to the document tab strip.
      boolean isCommandApplicable​(AbstractCommand command)
      Returns true if the command can be performed by this commandable in its current state.
      static void localizeComboBoxLabels​(javax.swing.JComboBox<java.lang.String> box, java.lang.String prefix)
      Iterates over the items in a combo box, replacing any whose toString() value begins with the prefix string with a localized string.
      static void localizeComboBoxLabels​(Language lang, javax.swing.JComboBox<java.lang.String> box, java.lang.String prefix)
      toString() value begins with the prefix string with a localized string.
      static void localizeComponentTree​(javax.swing.JComponent root)
      Recursively adjust a tree of components in this editor for the host platform.
      protected void localizeForPlatform()
      Make any special changes needed to localize this editor for the host platform.
      protected void onHeartbeat()
      This method is called once for each tick of the heartbeat timer.
      void performCommand​(AbstractCommand command)
      Performs the command.
      protected abstract void populateComponentFromDelayedFields()
      This method is called during heartbeats to allow the editor to update properties of the game component that either cannot be updated in response to events or that are more efficient when updated periodically instead of immediately.
      void populateFieldsFromComponent()
      Updates the editor with the current contents of the game component.
      protected void printImpl​(java.awt.print.PrinterJob job)
      Implementation of the print command for standard game components.
      void redrawPreview()
      Forces the editor to redraw its component preview.
      void removeFieldPopulationListener​(StrangeEonsEditor.FieldPopulationListener fpl)
      Removes a FieldPopulationListener from this game component editor.
      void replaceEditedComponent​(G newComponent)
      Replace the currently edited component.
      void save()
      Saves this editor's content to its current save location.
      void saveAs()
      Saves this editor's content to a file selected by the user.
      protected void saveImpl​(java.io.File f)
      Saves the editor content to the specified file.
      void setAttached​(boolean attach)
      Sets whether this editor is attached to the document tab strip.
      void setDesignSupport​(DesignSupport<G> ds)
      Sets the design support for this editor.
      void setFrameIcon​(javax.swing.Icon icon)
      Sets the preferred icon to use for this editor window.
      void setGameComponent​(G component)
      Sets the edited game component.
      void setSelectedSheetIndex​(int index)
      Selects the previewer for the sheet with the specified index.
      void setUnsavedChanges​(boolean isDirty)
      Marks whether the game component has unsaved changes.
      StrangeEonsEditor spinOff()
      Creates a duplicate of this editor.
      protected StrangeEonsEditor spinOffImpl()
      Subclasses should override this to clone the edited document if SPIN_OFF is a supported command.
      protected void updateSheetViewers()
      Refreshes the sheets being displayed by the sheet viewers within the container most recently passed to initializeSheetViewers(javax.swing.JTabbedPane).
      • Methods inherited from class javax.swing.JInternalFrame

        addImpl, addInternalFrameListener, createRootPane, fireInternalFrameEvent, getAccessibleContext, getContentPane, getDefaultCloseOperation, getDesktopIcon, getDesktopPane, getFocusCycleRootAncestor, getFocusOwner, getGlassPane, getInternalFrameListeners, getJMenuBar, getLastCursor, getLayer, getLayeredPane, getMenuBar, getMostRecentFocusOwner, getNormalBounds, getRootPane, getUI, getUIClassID, getWarningString, hide, isClosable, isClosed, isFocusCycleRoot, isIcon, isIconifiable, isMaximizable, isMaximum, isResizable, isRootPaneCheckingEnabled, isSelected, moveToBack, moveToFront, pack, paintComponent, paramString, remove, removeInternalFrameListener, reshape, restoreSubcomponentFocus, setClosable, setClosed, setContentPane, setCursor, setDefaultCloseOperation, setDesktopIcon, setFocusCycleRoot, setGlassPane, setIcon, setIconifiable, setJMenuBar, setLayer, setLayer, setLayeredPane, setLayout, setMaximizable, setMaximum, setMenuBar, setNormalBounds, setResizable, setRootPane, setRootPaneCheckingEnabled, setSelected, setUI, show, toBack, toFront, updateUI
      • Methods inherited from class javax.swing.JComponent

        addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
      • Methods inherited from class java.awt.Container

        add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, transferFocusDownCycle, validate, validateTree
      • Methods inherited from class java.awt.Component

        action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • previewSplitPane

        protected javax.swing.JSplitPane previewSplitPane
    • Constructor Detail

      • AbstractGameComponentEditor

        public AbstractGameComponentEditor()
        Creates a new abstract game component editor.
    • Method Detail

      • localizeForPlatform

        protected void localizeForPlatform()
        Make any special changes needed to localize this editor for the host platform. The base implementation is intended for game component editors.
      • localizeComponentTree

        public static void localizeComponentTree​(javax.swing.JComponent root)
        Recursively adjust a tree of components in this editor for the host platform.
        Parameters:
        root - the root of the tree to localize
        See Also:
        localizeForPlatform()
      • setDesignSupport

        public void setDesignSupport​(DesignSupport<G> ds)
        Sets the design support for this editor. A design support provides feedback on the state of the design as the user edits it. Design supports provide a view component that is displayed below the standard editing tabs.
        Parameters:
        ds - the design support for this editor
      • replaceEditedComponent

        public void replaceEditedComponent​(G newComponent)
        Replace the currently edited component. This consists of the following steps:
        1. if newComponent has an on-install event in its private settings, then the on-install event is called
        2. the editor is updated to point to newComponent and it creates a new set of sheets from newComponent and installs them in the preview window
        3. the current state of newComponent is copied from the component to the editor controls
        Parameters:
        newComponent - the new component to edit with this editor
      • handleOpenRequest

        public void handleOpenRequest​(G newComponent,
                                      java.io.File path)
        After installing the component, make sure you update the component object.
        Parameters:
        newComponent - the new component being opened
        path - the file path from which the component was loaded
      • saveImpl

        protected void saveImpl​(java.io.File f)
                         throws java.io.IOException
        Description copied from class: AbstractStrangeEonsEditor
        Saves the editor content to the specified file. This method is called by {link #save} in response to save requests. Subclasses must override it to write an appropriate file for the document if the editor supports saving.
        Overrides:
        saveImpl in class AbstractStrangeEonsEditor
        Parameters:
        f - the file to write content to
        Throws:
        java.io.IOException - if the save fails
      • getDefaultFileName

        protected java.lang.String getDefaultFileName()
        Returns a default file name for a game component that hasn't been saved.
        Returns:
        a default file name, including extension, based on the name of the installed component
      • getSheetLabels

        public java.lang.String[] getSheetLabels()
        Returns an array of labels that can be used to describe the component's sheets. The returned array uses the same order as GameComponent.getSheets(). The base class implementation is equivalent to calling getGameComponent().getSheetTitles().

        Note that the returned array is shared. If you need to modify its contents, clone the array first and modify the clone.

        Returns:
        a shared array of sheet labels
      • getSelectedSheet

        public Sheet<G> getSelectedSheet()
        Returns the sheet displayed by the currently selected previewer.
        Returns:
        the selected sheet
      • getSelectedSheetIndex

        public int getSelectedSheetIndex()
        Returns the index of the sheet displayed by the currently selected previewer.
        Returns:
        the selected sheet index, or -1
      • setSelectedSheetIndex

        public void setSelectedSheetIndex​(int index)
        Selects the previewer for the sheet with the specified index. The selected previewer will be made visible.
        Parameters:
        index - the index of the sheet to select
      • exportImpl

        protected void exportImpl()
        The default export implementation for game components. This implementation displays an export dialog that allows selecting an ExportContainer, image file format, and other options, and then writes the game component's sheet images as image files to the export container.
        See Also:
        ImageExporter, ExportContainer
      • populateFieldsFromComponent

        public void populateFieldsFromComponent()
        Updates the editor with the current contents of the game component. Subclasses should call the super implementation last to ensure that field population events are fired to any listeners.
      • populateComponentFromDelayedFields

        protected abstract void populateComponentFromDelayedFields()
        This method is called during heartbeats to allow the editor to update properties of the game component that either cannot be updated in response to events or that are more efficient when updated periodically instead of immediately. If a component has no properties that fit this description, then subclasses can provide an empty implementation.
      • onHeartbeat

        protected void onHeartbeat()
        This method is called once for each tick of the heartbeat timer. It the game component is currently null, it returns immediately. Otherwise, it calls populateComponentFromDelayedFields() and then determines if it the previews should be updated. The procedure for determining if previews should be updated is as follows:
        1. If the component has changed since the last heartbeat, then there is an update pending and the previews are known to be out of date.
        2. If the component has not changed since the last heartbeat, and there is an update pending, then an update is performed as follows:
        3. If there is a design support attached to the editor, the design support is asked to update the support view
        4. If the component has any sheets, the preview components for all sheets that are out of date are told to update their sheet images. (They do not update right away unless they are currently visible.)

        Note that this means that if the user is making a series of rapid changes, as might happen while typing in a text field, then the preview is not actually updated until there is a pause in editing of at least one heartbeat's duration.

        If the editor is using the default label and tool tip for text for its document tab, these are also updated if they have changed.

        Overrides:
        onHeartbeat in class AbstractStrangeEonsEditor
        See Also:
        populateComponentFromDelayedFields(), setDesignSupport(ca.cgjennings.apps.arkham.component.design.DesignSupport), initializeSheetViewers(javax.swing.JTabbedPane), AbstractStrangeEonsEditor.createTimer()
      • redrawPreview

        public void redrawPreview()
        Forces the editor to redraw its component preview. Editors normally manage this redrawing automatically. However, if you make an indirect change to a component, such as changing a setting that affects how the card is drawn, the editor will have no way of knowing about this change and the preview will not reflect the change. Calling this method forces all editors to redraw their previews from scratch.
        See Also:
        StrangeEonsAppWindow.redrawPreviews()
      • forceRerender

        @Deprecated
        public void forceRerender()
        Deprecated.
        Replaced by redrawPreview().
      • initializeSheetViewers

        protected void initializeSheetViewers​(javax.swing.JTabbedPane container)
        Initializes the sheet viewers for an editor. Editors for components that use sheets must call this method with the tabbed pane that will be used to display previewers for the sheets. A default set of sheets will be created for the component, and then the container's children will be replaced by previewers for those sheets. The supplied container will be remembered so that methods such as getSelectedSheetIndex() work correctly.
        Parameters:
        container - the control that will house previewers for the sheets
      • updateSheetViewers

        protected void updateSheetViewers()
        Refreshes the sheets being displayed by the sheet viewers within the container most recently passed to initializeSheetViewers(javax.swing.JTabbedPane). This can be called if the sheets set on the edited component are changed. Depending on how the sheet configuration changes, the existing sheet viewers may be updated to display the new sheets, or they may be replaced altogether as if by calling initializeSheetViewers(javax.swing.JTabbedPane).
      • getSheetCount

        public int getSheetCount()
        Returns the number of Sheets being previewed by this editor (may be 0).
        Returns:
        the number of sheet viewer tabs
      • getSheet

        public Sheet<G> getSheet​(int index)
        Returns the sheet being displayed by the sheet viewer with the specified index. Note that since the sheet is being displayed, you should not request sheet images from the sheet yourself. If you wish to create an image of one or more sheets, the safest procedure is to clone the game component, request that it create a set of default sheets, and then use those to draw sheet images as desired.
        Parameters:
        index - the index of the desired sheet
        Returns:
        the sheet at the requested index
        Throws:
        java.lang.IndexOutOfBoundsException - if the index does not fall in 0 ... {@link #getSheetCount()}-1, inclusive
      • dispose

        public void dispose()
        Description copied from class: AbstractStrangeEonsEditor
        Releases resources when the editor will no longer be used. Note that although windows can typically be redisplayed after being disposed of by simply making them visible, editors are not designed to be used after this method is called.

        Note: This method should not typically be called by plug-in code. If you wish to close an open editor, call its AbstractStrangeEonsEditor.close() method instead.

        Overrides:
        dispose in class AbstractStrangeEonsEditor
      • localizeComboBoxLabels

        public static void localizeComboBoxLabels​(javax.swing.JComboBox<java.lang.String> box,
                                                  java.lang.String prefix)
        Iterates over the items in a combo box, replacing any whose toString() value begins with the prefix string with a localized string. The value of the string is determined by using the existing item's toString() value as a key. This makes it easy to create localized combo boxes with fixed entries in the form editor. If prefix is null, all items in the list will be localized.
        Parameters:
        box - the combo box whose labels should be localized
        prefix - a prefix string that will identify labels that are string table keys
      • localizeComboBoxLabels

        public static void localizeComboBoxLabels​(Language lang,
                                                  javax.swing.JComboBox<java.lang.String> box,
                                                  java.lang.String prefix)
        toString() value begins with the prefix string with a localized string. The value of the string is determined by using the existing item's toString() value as a key. This makes it easy to create localized combo boxes with fixed entries in the form editor. If prefix is null, all items in the list will be localized.
        Parameters:
        lang - the language to use, or null for the interface language
        box - the combo box whose labels should be localized
        prefix - a prefix string that will identify labels that are string table keys
      • setUnsavedChanges

        public void setUnsavedChanges​(boolean isDirty)
        Marks whether the game component has unsaved changes. This flag is cleared whenever the file is saved successfully.

        Note: The game component is updated to reflect this change so that it stays in synch with the editor. (The values of hasUnsavedChanges() and the game component's GameComponent.hasUnsavedChanges() will match.)

        Overrides:
        setUnsavedChanges in class AbstractStrangeEonsEditor
        Parameters:
        isDirty - true if this game component has unsaved changes
      • printImpl

        protected void printImpl​(java.awt.print.PrinterJob job)
                          throws javax.print.PrintException,
                                 java.awt.print.PrinterException
        Implementation of the print command for standard game components. Lays out the sheets to be printed on one or more pages and then prints the layout.
        Overrides:
        printImpl in class AbstractStrangeEonsEditor
        Parameters:
        job - a printer job; this value is ignored as this implementation will create its own printer job
        Throws:
        javax.print.PrintException - if an error occurs during printing
        java.awt.print.PrinterException - if a printer error occurs during printing
      • setGameComponent

        public void setGameComponent​(G component)
        Sets the edited game component. If the game component is not appropriate for the editor, the result is undefined.
        Parameters:
        component - the new game component
      • getFileNameExtension

        public java.lang.String getFileNameExtension()
        Description copied from interface: StrangeEonsEditor
        Returns the standard file extension for the type of content displayed in this editor.
        Returns:
        a file extension, such as "txt"
        See Also:
        StrangeEonsEditor.getFileTypeDescription()
      • getFileTypeDescription

        public java.lang.String getFileTypeDescription()
        Description copied from interface: StrangeEonsEditor
        Returns a description of the content displayed in this editor. For English descriptions, this should be plural as it is used to describe the file type in save dialogs.
        Returns:
        a human-friendly description of the content associated with the editor, such as "Text Files"
        See Also:
        StrangeEonsEditor.getFileNameExtension()
      • getBorder

        public final javax.swing.border.Border getBorder()
        Overrides:
        getBorder in class javax.swing.JComponent
      • setFrameIcon

        public void setFrameIcon​(javax.swing.Icon icon)
        Sets the preferred icon to use for this editor window. This icon may be used to represent the window in various parts of the application interface. Possible example uses include the following: the document tab, the editor's item in the Window menu, and the frame icon of the editor's detached window. Note, however, that there is no guarantee that the icon will be used, or how. Furthermore, the icon may be used in modified form.
        Overrides:
        setFrameIcon in class javax.swing.JInternalFrame
        Parameters:
        icon - the preferred icon for the editor window
        See Also:
        JInternalFrame.getFrameIcon()
      • getFrameIcon

        public javax.swing.Icon getFrameIcon()
        Returns the editor window icon.
        Overrides:
        getFrameIcon in class javax.swing.JInternalFrame
        Returns:
        the icon for the editor, or null if no icon is set
      • setAttached

        public void setAttached​(boolean attach)
        Sets whether this editor is attached to the document tab strip. If true, the editor is attached; this is the default state for new editors. If false, the editor is detached from the tab strip. When detached, the editor appears in its own floating window separate from the main application window. The editor reattaches when the window is closed.
        Parameters:
        attach - if true, attaches the window to the tab strip
      • isAttached

        public boolean isAttached()
        Returns true if this editor is currently attached to the document tab strip.
        Returns:
        true if the editor is attached
        See Also:
        setAttached(boolean)