# This patch file was generated by NetBeans IDE
# Following Index: paths are relative to: D:\projects\nb
# This patch can be applied using context Tools: Patch action on respective folder.
# It uses platform neutral UTF-8 encoding and \n newlines.
# Above lines and this line are ignored by the patching process.
Index: debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/callstack.wstcref
*** D:\projects\nb\debuggercore\src\org\netbeans\modules\debugger\resources\modes\debugger\callstack.wstcref Base (1.5)
--- D:\projects\nb\debuggercore\src\org\netbeans\modules\debugger\resources\modes\debugger\callstack.wstcref Locally Modified (Based On 1.5)
***************
*** 2,14 ****
--- 2,15 ----
+
Index: core/windows/src/org/netbeans/core/windows/persistence/TCRefParser.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\TCRefParser.java Base (1.18)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\TCRefParser.java Locally Modified (Based On 1.18)
***************
*** 46,51 ****
--- 46,53 ----
= "-//NetBeans//DTD Top Component in Mode Properties 2.0//EN"; // NOI18N
public static final String INSTANCE_DTD_ID_2_1
= "-//NetBeans//DTD Top Component in Mode Properties 2.1//EN"; // NOI18N
+ public static final String INSTANCE_DTD_ID_2_2
+ = "-//NetBeans//DTD Top Component in Mode Properties 2.2//EN"; // NOI18N
private static final boolean DEBUG = Debug.isLoggable(TCRefParser.class);
***************
*** 254,264 ****
handleTcId(attrs);
} else if ("state".equals(qname)) { // NOI18N
handleState(attrs);
! } else if ("previousMode".equals(qname)) {
handlePreviousMode(attrs);
}
} else {
--- 256,267 ----
handleTcId(attrs);
} else if ("state".equals(qname)) { // NOI18N
handleState(attrs);
! } else if ("previousMode".equals(qname)) { // NOI18N
handlePreviousMode(attrs);
+ } else if ("dockingStatus".equals(qname)) { // NOI18N
+ handleDockingStatus(attrs);
+ } else if ("slideInStatus".equals(qname)) { // NOI18N
+ handleSlideInStatus(attrs);
}
} else {
log("-- TCRefParser.startElement PARSING OLD");
***************
*** 381,388 ****
--- 387,455 ----
+ " of element \"previousMode\"."); // NOI18N
tcRefConfig.previousMode = null;
}
+
+ String index = attrs.getValue("index"); // NOI18N;
+ if (index != null) {
+ try {
+ tcRefConfig.previousIndex = Integer.parseInt( index );
+ } catch( NumberFormatException nfE ) {
+ PersistenceManager.LOG.log(Level.WARNING,
+ "[WinSys.TCRefParser.handlePreviousMode]" // NOI18N
+ + " Warning: Invalid value of attribute \"index\"" // NOI18N
+ + " of element \"previousMode\"."); // NOI18N
+ tcRefConfig.previousIndex = -1;
}
+ }
+ }
+ private void handleDockingStatus (Attributes attrs) throws SAXException {
+ String status = attrs.getValue("maximizedMode"); // NOI18N;
+ if (status != null) {
+ if ("docked".equals(status)) { // NOI18N
+ tcRefConfig.dockedInMaximizedMode = true;
+ } else if ("slided".equals(status)) { // NOI18N
+ tcRefConfig.dockedInMaximizedMode = false;
+ } else {
+ PersistenceManager.LOG.log(Level.WARNING,
+ "[WinSys.TCRefParser.handleDockingStatus]" // NOI18N
+ + " Warning: Invalid value of attribute \"maximizedMode\"" // NOI18N
+ + " of element \"dockingStatus\"."); // NOI18N
+ tcRefConfig.dockedInMaximizedMode = false;
+ }
+ }
+ status = attrs.getValue("defaultMode"); // NOI18N;
+ if (status != null) {
+ if ("docked".equals(status)) { // NOI18N
+ tcRefConfig.dockedInDefaultMode = true;
+ } else if ("slided".equals(status)) { // NOI18N
+ tcRefConfig.dockedInDefaultMode = false;
+ } else {
+ PersistenceManager.LOG.log(Level.WARNING,
+ "[WinSys.TCRefParser.handleDockingStatus]" // NOI18N
+ + " Warning: Invalid value of attribute \"defaultMode\"" // NOI18N
+ + " of element \"dockingStatus\"."); // NOI18N
+ tcRefConfig.dockedInDefaultMode = true;
+ }
+ }
+ }
+
+ private void handleSlideInStatus (Attributes attrs) throws SAXException {
+ String status = attrs.getValue("maximized"); // NOI18N;
+ if (status != null) {
+ if ("true".equals(status)) { // NOI18N
+ tcRefConfig.slidedInMaximized = true;
+ } else if ("slided".equals(status)) { // NOI18N
+ tcRefConfig.slidedInMaximized = false;
+ } else {
+ PersistenceManager.LOG.log(Level.WARNING,
+ "[WinSys.TCRefParser.handleSlideInStatus]" // NOI18N
+ + " Warning: Invalid value of attribute \"maximized\"" // NOI18N
+ + " of element \"slideInStatus\"."); // NOI18N
+ tcRefConfig.slidedInMaximized = false;
+ }
+ }
+ }
+
/** Writes data from asociated tcRef to the xml representation */
void writeData (TCRefConfig tcRefCfg, InternalConfig ic) throws IOException {
final StringBuffer buff = fillBuffer(tcRefCfg, ic);
***************
*** 421,429 ****
// header
buff.append("\n\n"); // NOI18N
/*buff.append("\n\n"); // NOI18N*/
! buff.append("\n"); // NOI18N
appendModule(ic, buff);
appendTcId(tcRefCfg, buff);
--- 488,496 ----
// header
buff.append("\n\n"); // NOI18N
/*buff.append("\n\n"); // NOI18N*/
! buff.append("\n"); // NOI18N
appendModule(ic, buff);
appendTcId(tcRefCfg, buff);
***************
*** 431,436 ****
--- 498,505 ----
if (tcRefCfg.previousMode != null) {
appendPreviousMode(tcRefCfg, buff);
}
+ appendDockingStatus( tcRefCfg, buff );
+ appendSlideInStatus( tcRefCfg, buff );
buff.append("\n"); // NOI18N
return buff;
***************
*** 476,485 ****
buff.append(" />\n"); // NOI18N
}
private void appendPreviousMode(TCRefConfig tcRefCfg, StringBuffer buff) {
buff.append(" \n"); // NOI18N
}
}
--- 545,573 ----
buff.append(" />\n"); // NOI18N
}
+ private void appendDockingStatus (TCRefConfig tcRefCfg, StringBuffer buff) {
+ if( tcRefCfg.dockedInMaximizedMode || !tcRefCfg.dockedInDefaultMode ) {
+ buff.append(" \n"); // NOI18N
+ }
+ }
+
+ private void appendSlideInStatus (TCRefConfig tcRefCfg, StringBuffer buff) {
+ if( tcRefCfg.slidedInMaximized ) {
+ buff.append(" \n"); // NOI18N
+ }
+ }
+
private void appendPreviousMode(TCRefConfig tcRefCfg, StringBuffer buff) {
buff.append(" = 0 )
! buff.append( " index=\"" ).append( tcRefCfg.previousIndex ).append( "\" " );
! buff.append(" />\n"); // NOI18N
}
}
Index: core/windows/src/org/netbeans/core/windows/ConfigFactory.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\ConfigFactory.java Base (1.7)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\ConfigFactory.java Locally Modified (Based On 1.7)
***************
*** 70,76 ****
wmc.screenSize = new Dimension(1024, 750);
wmc.activeModeName = "editor"; // NOI18N
! wmc.maximizedModeName = null;
wmc.toolbarConfiguration = "Standard"; // NOI18N
wmc.preferredToolbarIconSize = 24;
wmc.modes = createDefaultModeConfigs();
--- 70,77 ----
wmc.screenSize = new Dimension(1024, 750);
wmc.activeModeName = "editor"; // NOI18N
! wmc.editorMaximizedModeName = "";
! wmc.viewMaximizedModeName = "";
wmc.toolbarConfiguration = "Standard"; // NOI18N
wmc.preferredToolbarIconSize = 24;
wmc.modes = createDefaultModeConfigs();
***************
*** 282,287 ****
--- 283,289 ----
TCRefConfig tcrc = new TCRefConfig();
tcrc.tc_id = "CommonPalette"; // NOI18N
tcrc.opened = true;
+ tcrc.dockedInMaximizedMode = true;
return tcrc;
}
Index: core/windows/src/org/netbeans/core/windows/ModeImpl.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\ModeImpl.java Base (1.25)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\ModeImpl.java Locally Modified (Based On 1.25)
***************
*** 24,39 ****
import org.openide.windows.TopComponent;
import org.openide.windows.Workspace;
- import javax.swing.*;
- import java.awt.*;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
--- 24,37 ----
import org.openide.windows.TopComponent;
import org.openide.windows.Workspace;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+ import javax.swing.SwingUtilities;
+ import java.awt.Image;
+ import java.awt.Rectangle;
/** This class is an implementation of Mode interface.
***************
*** 245,254 ****
--- 246,282 ----
return getCentral().getModeSelectedTopComponent(this);
}
+ /**
+ * Remember which top component was previously the selected one.
+ * Used when switching to/from maximized mode.
+ */
+ public void setPreviousSelectedTopComponent(TopComponent tc) {
+ TopComponent old = getPreviousSelectedTopComponent();
+ if(tc == old) {
+ return;
+ }
+
+ getCentral().setModePreviousSelectedTopComponent(this, tc);
+ }
+
+ /**
+ * @return The top component that was the selected one before switching to/from
+ * the maximized mode.
+ */
+ public TopComponent getPreviousSelectedTopComponent() {
+ WindowManagerImpl.assertEventDispatchThread();
+
+ return getCentral().getModePreviousSelectedTopComponent(this);
+ }
+
public void addOpenedTopComponent(TopComponent tc) {
getCentral().addModeOpenedTopComponent(this, tc);
}
+ public void addOpenedTopComponent(TopComponent tc, int index) {
+ getCentral().insertModeOpenedTopComponent( this, tc, index );
+ }
+
public void addClosedTopComponent(TopComponent tc) {
getCentral().addModeClosedTopComponent(this, tc);
}
***************
*** 261,266 ****
--- 289,298 ----
getCentral().setUnloadedSelectedTopComponent(this, tcID);
}
+ public void setUnloadedPreviousSelectedTopComponent(String tcID) {
+ getCentral().setUnloadedPreviousSelectedTopComponent(this, tcID);
+ }
+
// XXX
public List getOpenedTopComponentsIDs() {
return getCentral().getModeOpenedTopComponentsIDs(this);
Index: core/windows/src/org/netbeans/core/windows/view/SlidingView.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\SlidingView.java Base (1.6)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\SlidingView.java Locally Modified (Based On 1.6)
***************
*** 70,75 ****
--- 70,86 ----
TopComponent tc = getSelectedTopComponent();
//check if the slided-in TopComponent has a custom size defined
if( null != tc ) {
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
+ String tcID = wm.findTopComponentID( tc );
+ if( wm.isTopComponentMaximizedWhenSlidedIn( tcID ) ) {
+ //force maximum size when the slided-in window is maximized,
+ //the DesktopImpl will adjust the size to fit the main window
+ if( Constants.BOTTOM.equals( side ) ) {
+ res.height = Integer.MAX_VALUE;
+ } else {
+ res.width = Integer.MAX_VALUE;
+ }
+ } else {
Integer prevSlideSize = slideInSizes.get( tc );
if( null != prevSlideSize ) {
if( null == res )
***************
*** 81,86 ****
--- 92,98 ----
}
}
}
+ }
return res;
}
Index: core/windows/src/org/netbeans/core/windows/view/ui/slides/CommandManager.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\CommandManager.java Base (1.20)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\CommandManager.java Locally Modified (Based On 1.20)
***************
*** 194,205 ****
Utilities.actionsToPopup(actions, tc.getLookup()), tae.getMouseEvent().getPoint(), tae.getMouseEvent().getComponent());
}
! }
! else if (TabbedContainer.COMMAND_DISABLE_AUTO_HIDE.equals(e.getActionCommand())) {
slideIntoDesktop(curSlidedIndex, true);
} else {
// convert event - fix index, local tabbed container index isn't right in slide bar context
--- 194,204 ----
Utilities.actionsToPopup(actions, tc.getLookup()), tae.getMouseEvent().getPoint(), tae.getMouseEvent().getComponent());
}
! } else if (TabbedContainer.COMMAND_DISABLE_AUTO_HIDE.equals(e.getActionCommand())) {
slideIntoDesktop(curSlidedIndex, true);
+ } else if (TabbedContainer.COMMAND_MAXIMIZE.equals(e.getActionCommand())) {
+ //inform the window system that the slided window changes its maximized status
+ postEvent(new SlideBarActionEvent(slideBar, SlideBar.COMMAND_MAXIMIZE, null, null, curSlidedIndex));
} else {
// convert event - fix index, local tabbed container index isn't right in slide bar context
TabActionEvent tae = (TabActionEvent)e;
Index: core/windows/src/org/netbeans/core/windows/persistence/WindowManagerConfig.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\WindowManagerConfig.java Base (1.5)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\WindowManagerConfig.java Locally Modified (Based On 1.5)
***************
*** 166,173 ****
public Dimension screenSize;
/** Name of active mode. */
public String activeModeName;
! /** Name of maximized mode. */
! public String maximizedModeName;
/** Name of toolbar configuration. */
public String toolbarConfiguration;
/** Preferred size of toolbar icons. */
--- 166,175 ----
public Dimension screenSize;
/** Name of active mode. */
public String activeModeName;
! /** Name of maximized mode (editor). */
! public String editorMaximizedModeName;
! /** Name of maximized mode (view). */
! public String viewMaximizedModeName;
/** Name of toolbar configuration. */
public String toolbarConfiguration;
/** Preferred size of toolbar icons. */
***************
*** 183,189 ****
public WindowManagerConfig() {
editorAreaConstraints = new SplitConstraint[0];
activeModeName = ""; // NOI18N
! maximizedModeName = ""; // NOI18N
toolbarConfiguration = ""; // NOI18N
modes = new ModeConfig[0];
groups = new GroupConfig[0];
--- 185,192 ----
public WindowManagerConfig() {
editorAreaConstraints = new SplitConstraint[0];
activeModeName = ""; // NOI18N
! editorMaximizedModeName = ""; // NOI18N
! viewMaximizedModeName = ""; // NOI18N
toolbarConfiguration = ""; // NOI18N
modes = new ModeConfig[0];
groups = new GroupConfig[0];
***************
*** 285,296 ****
if (!activeModeName.equals(wmCfg.activeModeName)) {
return false;
}
! if (!maximizedModeName.equals(wmCfg.maximizedModeName)) {
return false;
}
if (!toolbarConfiguration.equals(wmCfg.toolbarConfiguration)) {
return false;
--- 288,299 ----
if (!activeModeName.equals(wmCfg.activeModeName)) {
return false;
}
! if (!editorMaximizedModeName.equals(wmCfg.editorMaximizedModeName)) {
return false;
}
+ if (!viewMaximizedModeName.equals(wmCfg.viewMaximizedModeName)) {
+ return false;
+ }
if (!toolbarConfiguration.equals(wmCfg.toolbarConfiguration)) {
return false;
}
***************
*** 388,394 ****
hash = 37 * hash + screenSize.hashCode();
}
hash = 37 * hash + activeModeName.hashCode();
! hash = 37 * hash + maximizedModeName.hashCode();
hash = 37 * hash + toolbarConfiguration.hashCode();
hash = 37 * hash + preferredToolbarIconSize;
for (int i = 0; i < modes.length; i++) {
--- 394,401 ----
hash = 37 * hash + screenSize.hashCode();
}
hash = 37 * hash + activeModeName.hashCode();
! hash = 37 * hash + editorMaximizedModeName.hashCode();
! hash = 37 * hash + viewMaximizedModeName.hashCode();
hash = 37 * hash + toolbarConfiguration.hashCode();
hash = 37 * hash + preferredToolbarIconSize;
for (int i = 0; i < modes.length; i++) {
Index: core/windows/src/org/netbeans/core/windows/model/DefaultModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\DefaultModel.java Base (1.23)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\DefaultModel.java Locally Modified (Based On 1.23)
***************
*** 84,91 ****
private int editorAreaFrameState = Frame.NORMAL;
/** Name of toolbars configuration. */
private String toolbarConfigName = "Standard"; // NOI18N
-
/** Modes structure. */
private ModesSubModel modesSubModel = new ModesSubModel(this);
--- 84,99 ----
private int editorAreaFrameState = Frame.NORMAL;
/** Name of toolbars configuration. */
private String toolbarConfigName = "Standard"; // NOI18N
+ /** The docking status (slided-out/docked) for TopComponents in maximized editor mode */
+ private DockingStatus maximizedDockingStatus = new DockingStatus( this );
+ /** The docking status (slided-out/docked) for TopComponents in the default mode (nothing is maximized)*/
+ private DockingStatus defaultDockingStatus = new DefaultDockingStatus( this );
+ /** TopComponents that are maximized when slided-in. */
+ private Set slideInMaximizedTopComponents = new HashSet( 3 );
/** Modes structure. */
private ModesSubModel modesSubModel = new ModesSubModel(this);
***************
*** 275,290 ****
}
}
! /** Sets maximized mode. */
! public void setMaximizedMode(ModeImpl maximizedMode) {
synchronized(LOCK_MODES) {
! modesSubModel.setMaximizedMode(maximizedMode);
}
}
/** Setter for toolbarConfigName property. */
public void setToolbarConfigName(String toolbarConfigName) {
--- 280,301 ----
}
}
! /** Sets editor mode that is currenlty maximized */
! public void setEditorMaximizedMode(ModeImpl maximizedMode) {
! assert null == maximizedMode || maximizedMode.getKind() == Constants.MODE_KIND_EDITOR;
synchronized(LOCK_MODES) {
! modesSubModel.setEditorMaximizedMode(maximizedMode);
}
}
+ /** Sets view mode that is currenlty maximized */
+ public void setViewMaximizedMode(ModeImpl maximizedMode) {
+ assert null == maximizedMode || maximizedMode.getKind() == Constants.MODE_KIND_VIEW;
+ synchronized(LOCK_MODES) {
+ modesSubModel.setViewMaximizedMode(maximizedMode);
+ }
+ }
+
/** Setter for toolbarConfigName property. */
public void setToolbarConfigName(String toolbarConfigName) {
synchronized(LOCK_TOOLBAR_CONFIG) {
***************
*** 312,318 ****
toolbarConfigName = "Standard"; // NOI18N
modesSubModel = new ModesSubModel(this);
topComponentGroups.clear();
!
}
/////////////////////////////////////
--- 326,334 ----
toolbarConfigName = "Standard"; // NOI18N
modesSubModel = new ModesSubModel(this);
topComponentGroups.clear();
! maximizedDockingStatus.clear();
! defaultDockingStatus.clear();
! slideInMaximizedTopComponents.clear();
}
/////////////////////////////////////
***************
*** 435,450 ****
}
}
! /** Gets maximized mode. */
! public ModeImpl getMaximizedMode() {
synchronized(LOCK_MODES) {
! return modesSubModel.getMaximizedMode();
}
}
/** Getter for toolbarConfigName property. */
public String getToolbarConfigName() {
--- 451,498 ----
}
}
! /**
! * @return The docking status (docked/slided) of TopComponents before the window system
! * switched to maximized mode.
! */
! public DockingStatus getDefaultDockingStatus() {
! return defaultDockingStatus;
! }
!
! /**
! * @return The docking status (docked/slided) of TopComponents in maximized editor mode.
! */
! public DockingStatus getMaximizedDockingStatus() {
! return maximizedDockingStatus;
! }
!
! /** Gets editor maximized mode. */
! public ModeImpl getEditorMaximizedMode() {
synchronized(LOCK_MODES) {
! return modesSubModel.getEditorMaximizedMode();
}
}
+ /** Gets view maximized mode. */
+ public ModeImpl getViewMaximizedMode() {
+ synchronized(LOCK_MODES) {
+ return modesSubModel.getViewMaximizedMode();
+ }
+ }
+
+ /**
+ * Find the side (LEFT/RIGHT/BOTTOM) where the TopComponent from the given
+ * mode should slide to.
+ *
+ * @param mode Mode
+ * @return The slide side for TopComponents from the given mode.
+ */
+ public String getSlideSideForMode( ModeImpl mode ) {
+ synchronized(LOCK_MODES) {
+ return modesSubModel.getSlideSideForMode( mode );
+ }
+ }
+
/** Getter for toolbarConfigName property. */
public String getToolbarConfigName() {
synchronized(LOCK_TOOLBAR_CONFIG) {
***************
*** 449,465 ****
--- 500,541 ----
}
}
+ /**
+ * Gets the sizes (width or height) of TopComponents in the given sliding
+ * side, the key in the Map is TopComponent's ID
+ */
public Map getSlideInSizes(String side) {
synchronized(LOCK_MODES) {
return modesSubModel.getSlideInSizes( side );
}
}
+ /** Set the size (width or height of the given TopComponent when it is slided in */
public void setSlideInSize(String side, TopComponent tc, int size) {
synchronized(LOCK_MODES) {
modesSubModel.setSlideInSize(side, tc, size);
}
}
+
+ /**
+ * @return True if the given TopComponent is maximized when it is slided-in.
+ */
+ public boolean isTopComponentMaximizedWhenSlidedIn( String tcid ) {
+ return null != tcid && slideInMaximizedTopComponents.contains( tcid );
+ }
+
+ /**
+ * Set whether the given TopComponent is maximized when it is slided-in.
+ */
+ public void setTopComponentMaximizedWhenSlidedIn( String tcid, boolean maximized ) {
+ if( null != tcid ) {
+ if( maximized )
+ slideInMaximizedTopComponents.add( tcid );
+ else
+ slideInMaximizedTopComponents.remove( tcid );
+ }
+ }
+
/////////////////////////////////////
// Accessor methods <<
/////////////////////////////////////
***************
*** 514,519 ****
--- 590,603 ----
}
}
+ /** Remember which top component was the selected one before switching to/from maximized mode */
+ public void setModePreviousSelectedTopComponent(ModeImpl mode, TopComponent prevSelected) {
+ ModeModel modeModel = getModelForMode(mode);
+ if(modeModel != null) {
+ modeModel.setPreviousSelectedTopComponent(prevSelected);
+ }
+ }
+
/** Adds opened TopComponent. */
public void addModeOpenedTopComponent(ModeImpl mode, TopComponent tc) {
ModeModel modeModel = getModelForMode(mode);
***************
*** 554,559 ****
--- 638,650 ----
}
}
+ public void setModeUnloadedPreviousSelectedTopComponent(ModeImpl mode, String tcID) {
+ ModeModel modeModel = getModelForMode(mode);
+ if(modeModel != null) {
+ modeModel.setUnloadedPreviousSelectedTopComponent(tcID);
+ }
+ }
+
/** */
public void removeModeTopComponent(ModeImpl mode, TopComponent tc) {
ModeModel modeModel = getModelForMode(mode);
***************
*** 584,594 ****
/**
* @param mode - sliding mode
* @param previousMode - the original mode.
*/
! public void setModeTopComponentPreviousMode(ModeImpl mode, String tcID, ModeImpl previousMode) {
ModeModel modeModel = getModelForMode(mode);
if(modeModel != null) {
! modeModel.setTopComponentPreviousMode(tcID, previousMode);
}
}
--- 675,686 ----
/**
* @param mode - sliding mode
* @param previousMode - the original mode.
+ * @param prevIndex - the tab index in the original mode
*/
! public void setModeTopComponentPreviousMode(ModeImpl mode, String tcID, ModeImpl previousMode, int prevIndex) {
ModeModel modeModel = getModelForMode(mode);
if(modeModel != null) {
! modeModel.setTopComponentPreviousMode(tcID, previousMode, prevIndex);
}
}
***************
*** 698,703 ****
--- 790,805 ----
}
}
+ /** Get the top component that had been the selected one before switching to/from maximzied mode */
+ public TopComponent getModePreviousSelectedTopComponent(ModeImpl mode) {
+ ModeModel modeModel = getModelForMode(mode);
+ if(modeModel != null) {
+ return modeModel.getPreviousSelectedTopComponent();
+ } else {
+ return null;
+ }
+ }
+
/** Gets list of top components. */
public List getModeTopComponents(ModeImpl mode) {
ModeModel modeModel = getModelForMode(mode);
***************
*** 756,761 ****
--- 858,869 ----
return modeModel == null ? null : modeModel.getTopComponentPreviousMode(tcID);
}
+ /** Gets the tab index of the given top component before it was moved to sliding/separate mode */
+ public int getModeTopComponentPreviousIndex(ModeImpl mode, String tcID) {
+ ModeModel modeModel = getModelForMode(mode);
+ return modeModel == null ? null : modeModel.getTopComponentPreviousIndex(tcID);
+ }
+
// End of mode specific.
***************
*** 1034,1039 ****
--- 1142,1148 ----
modesSubModel.setSplitWeights(snapshots, splitWeights);
}
}
+
// Controller updates <<
/////////////////////////
***************
*** 1048,1054 ****
ModeImpl activeMode = getActiveMode();
wsms.setActiveModeSnapshot(activeMode == null ? null : mss.findModeSnapshot(activeMode.getName()));
! ModeImpl maximizedMode = getMaximizedMode();
wsms.setMaximizedModeSnapshot(maximizedMode == null ? null : mss.findModeSnapshot(maximizedMode.getName()));
wsms.setMainWindowBoundsJoined(getMainWindowBoundsJoined());
--- 1157,1163 ----
ModeImpl activeMode = getActiveMode();
wsms.setActiveModeSnapshot(activeMode == null ? null : mss.findModeSnapshot(activeMode.getName()));
! ModeImpl maximizedMode = null != getViewMaximizedMode() ? getViewMaximizedMode() : null;
wsms.setMaximizedModeSnapshot(maximizedMode == null ? null : mss.findModeSnapshot(maximizedMode.getName()));
wsms.setMainWindowBoundsJoined(getMainWindowBoundsJoined());
***************
*** 1104,1112 ****
--- 1213,1257 ----
}
}
+ /**
+ * A special subclass of DockingStatus for default mode when no TopComponent is maximized.
+ */
+ private static class DefaultDockingStatus extends DockingStatus {
+ public DefaultDockingStatus( Model model ) {
+ super( model );
+ }
+ /**
+ * When switching back to default mode, only slide those TopComponents
+ * there were slided-out before.
+ */
+ public boolean shouldSlide( String tcID ) {
+ return null != tcID && slided.contains( tcID );
}
+ /**
+ * In default mode all TopComponents are docked by default.
+ */
+ public boolean shouldDock( String tcID ) {
+ return null != tcID && (docked.contains( tcID ) || (!docked.contains( tcID ) && !slided.contains( tcID )));
+ }
+
+ public void mark() {
+ super.mark();
+ Set modes = model.getModes();
+ for( Iterator i=modes.iterator(); i.hasNext(); ) {
+ ModeImpl modeImpl = i.next();
+ if( modeImpl.getState() != Constants.MODE_KIND_VIEW )
+ continue;
+
+ //also remember which top component is the selected one
+ modeImpl.setPreviousSelectedTopComponent( modeImpl.getSelectedTopComponent() );
+ }
+ }
+ }
+ }
+
Index: core/windows/src/org/netbeans/core/windows/view/ui/slides/SlideOperationFactory.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\SlideOperationFactory.java Base (1.3)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\SlideOperationFactory.java Locally Modified (Based On 1.3)
***************
*** 88,94 ****
--- 88,98 ----
return result;
}
+ public static SlideOperation createSlideResize(Component component, String side) {
+ return createSlideResize( component, SlideOperationImpl.side2Orientation( side ) );
}
+ }
Index: core/palette/src/org/netbeans/modules/palette/resources/CommonPalette.wstcref
*** D:\projects\nb\core\palette\src\org\netbeans\modules\palette\resources\CommonPalette.wstcref Base (1.2)
--- D:\projects\nb\core\palette\src\org\netbeans\modules\palette\resources\CommonPalette.wstcref Locally Modified (Based On 1.2)
***************
*** 2,15 ****
--- 2,16 ----
+
Index: openide/windows/manifest.mf
*** D:\projects\nb\openide\windows\manifest.mf Base (1.10)
--- D:\projects\nb\openide\windows\manifest.mf Locally Modified (Based On 1.10)
***************
*** 1,5 ****
Manifest-Version: 1.0
OpenIDE-Module: org.openide.windows
! OpenIDE-Module-Specification-Version: 6.9
OpenIDE-Module-Localizing-Bundle: org/openide/windows/Bundle.properties
--- 1,5 ----
Manifest-Version: 1.0
OpenIDE-Module: org.openide.windows
! OpenIDE-Module-Specification-Version: 6.11
OpenIDE-Module-Localizing-Bundle: org/openide/windows/Bundle.properties
Index: core/windows/src/org/netbeans/core/windows/view/ui/tabcontrol/TabbedAdapter.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\tabcontrol\TabbedAdapter.java Base (1.35)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\tabcontrol\TabbedAdapter.java Locally Modified (Based On 1.35)
***************
*** 461,467 ****
* false otherwise
*/
public static boolean isInMaximizedMode (Component comp) {
! ModeImpl maxMode = WindowManagerImpl.getInstance().getMaximizedMode();
if (maxMode == null) {
return false;
}
--- 461,467 ----
* false otherwise
*/
public static boolean isInMaximizedMode (Component comp) {
! ModeImpl maxMode = WindowManagerImpl.getInstance().getCurrentMaximizedMode();
if (maxMode == null) {
return false;
}
Index: core/windows/src/org/netbeans/core/windows/ModeStructureSnapshot.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\ModeStructureSnapshot.java Base (1.9)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\ModeStructureSnapshot.java Locally Modified (Based On 1.9)
***************
*** 334,339 ****
--- 334,345 ----
return false;
}
+ if(mode.getKind() == Constants.MODE_KIND_EDITOR ) {
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
+ if( null != wm.getEditorMaximizedMode() && wm.getEditorMaximizedMode() != mode )
+ return false;
+ }
+
return true;
}
Index: core/windows/src/org/netbeans/core/windows/resources/windowmanager-properties2_2.dtd
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\windowmanager-properties2_2.dtd No Base Revision
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\windowmanager-properties2_2.dtd Locally New
***************
*** 1,0 ****
--- 1,296 ----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: core/windows/src/org/netbeans/core/windows/actions/RecentViewListAction.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\actions\RecentViewListAction.java Base (1.15)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\actions\RecentViewListAction.java Locally Modified (Based On 1.15)
***************
*** 106,113 ****
// #37226 Unmaximized the other mode if needed.
WindowManagerImpl wm = WindowManagerImpl.getInstance();
ModeImpl mode = (ModeImpl) wm.findMode(tc);
! if(mode != null && mode != wm.getMaximizedMode()) {
! wm.setMaximizedMode(null);
}
tc.requestActive();
--- 106,113 ----
// #37226 Unmaximized the other mode if needed.
WindowManagerImpl wm = WindowManagerImpl.getInstance();
ModeImpl mode = (ModeImpl) wm.findMode(tc);
! if(mode != null && mode != wm.getCurrentMaximizedMode()) {
! wm.switchMaximizedMode(null);
}
tc.requestActive();
Index: core/windows/src/org/netbeans/core/windows/model/EditorSplitSubModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\EditorSplitSubModel.java Base (1.6)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\EditorSplitSubModel.java Locally Modified (Based On 1.6)
***************
*** 84,90 ****
/** Class which represents editor area position in EditorSplitSubModel. */
! private static class EditorNode extends SplitSubModel.Node {
/** Ref to editor area. */
private final SplitSubModel editorArea;
--- 84,90 ----
/** Class which represents editor area position in EditorSplitSubModel. */
! static class EditorNode extends SplitSubModel.Node {
/** Ref to editor area. */
private final SplitSubModel editorArea;
Index: core/windows/src/org/netbeans/core/windows/actions/MaximizeWindowAction.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\actions\MaximizeWindowAction.java Base (1.13)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\actions\MaximizeWindowAction.java Locally Modified (Based On 1.13)
***************
*** 89,109 ****
if(wm.isDocked(curTC)) {
// inside main window
! ModeImpl previousMax = wm.getMaximizedMode();
! if (previousMax == null) {
! // maximize, but only non-sliding windows..
! ModeImpl curMax = (ModeImpl)wm.findMode(curTC);
! if (curMax != null && curMax.getKind() != Constants.MODE_KIND_SLIDING) {
! wm.setMaximizedMode(curMax);
}
} else {
! // restore
! wm.setMaximizedMode(null);
}
} else {
// separate windows
ModeImpl curMax = (ModeImpl)wm.findMode(curTC);
--- 89,115 ----
if(wm.isDocked(curTC)) {
// inside main window
! ModeImpl mode = (ModeImpl)wm.findMode(curTC);
! String tcID = wm.findTopComponentID( curTC );
!
! if( mode.getKind() == Constants.MODE_KIND_SLIDING ) {
! //maximize/restore slided-in window
! wm.userToggledTopComponentSlideInMaximize( tcID );
! } else if( null != mode ) {
! ModeImpl previousMax = wm.getCurrentMaximizedMode();
! if( null != previousMax ) {
! if( previousMax.getKind() == Constants.MODE_KIND_EDITOR && mode.getKind() == Constants.MODE_KIND_VIEW ) {
! wm.switchMaximizedMode( mode );
! } else {
! wm.switchMaximizedMode( null );
}
} else {
! wm.switchMaximizedMode( mode );
}
} else {
+ wm.switchMaximizedMode( null );
+ }
+ } else {
// separate windows
ModeImpl curMax = (ModeImpl)wm.findMode(curTC);
if (curMax != null) {
***************
*** 143,156 ****
}
if (wm.isDocked(active)) {
! maximize = wm.getMaximizedMode() == null;
} else {
maximize = activeMode.getFrameState() == Frame.NORMAL;
}
String label;
if(maximize) {
--- 152,166 ----
}
if (wm.isDocked(active)) {
! maximize = wm.getCurrentMaximizedMode() == null;
} else {
maximize = activeMode.getFrameState() == Frame.NORMAL;
}
+ if (activeMode != null && activeMode.getKind() == Constants.MODE_KIND_SLIDING) {
+ maximize = null != active && !wm.isTopComponentMaximizedWhenSlidedIn( wm.findTopComponentID( active ) );
+ }
+
String label;
if(maximize) {
label = NbBundle.getMessage(MaximizeWindowAction.class, "CTL_MaximizeWindowAction", param);
***************
*** 155,165 ****
label = NbBundle.getMessage(MaximizeWindowAction.class, "CTL_UnmaximizeWindowAction", param);
}
putValue(Action.NAME, (isPopup ? Actions.cutAmpersand(label) : label));
! if (activeMode != null && activeMode.getKind() == Constants.MODE_KIND_SLIDING) {
! maximize = false;
}
- setEnabled(activeMode != null && activeMode.getKind() != Constants.MODE_KIND_SLIDING);
- }
private TopComponent getTCToWorkWith () {
if (topComponent != null) {
--- 168,179 ----
label = NbBundle.getMessage(MaximizeWindowAction.class, "CTL_UnmaximizeWindowAction", param);
}
putValue(Action.NAME, (isPopup ? Actions.cutAmpersand(label) : label));
!
! setEnabled(activeMode != null /*&& activeMode.getKind() != Constants.MODE_KIND_SLIDING*/);
}
private TopComponent getTCToWorkWith () {
Index: core/windows/src/org/netbeans/core/windows/persistence/ModeParser.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\ModeParser.java Base (1.30)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\ModeParser.java Locally Modified (Based On 1.30)
***************
*** 61,66 ****
--- 61,68 ----
= "-//NetBeans//DTD Mode Properties 2.1//EN"; // NOI18N
public static final String INSTANCE_DTD_ID_2_2
= "-//NetBeans//DTD Mode Properties 2.2//EN"; // NOI18N
+ public static final String INSTANCE_DTD_ID_2_3
+ = "-//NetBeans//DTD Mode Properties 2.3//EN"; // NOI18N
/** Name of extended attribute for order of children */
private static final String EA_ORDER = "WinSys-TCRef-Order"; // NOI18N
***************
*** 1406,1412 ****
--- 1408,1420 ----
} else {
modeConfig.selectedTopComponentID = ""; // NOI18N
}
+ String prevId = attrs.getValue("prev-id"); // NOI18N
+ if (prevId != null) {
+ modeConfig.previousSelectedTopComponentID = prevId;
+ } else {
+ modeConfig.previousSelectedTopComponentID = ""; // NOI18N
}
+ }
/** Reads element "empty-behavior" */
private void handleEmptyBehavior (Attributes attrs) {
***************
*** 1460,1468 ****
// header
buff.append("\n\n"). // NOI18N
/*buff.append("\n\n"); // NOI18N*/
! append("\n"); // NOI18N
appendModule(ic, buff);
appendName(mc, buff);
--- 1468,1476 ----
// header
buff.append("\n\n"). // NOI18N
/*buff.append("\n\n"); // NOI18N*/
! append("\n"); // NOI18N
appendModule(ic, buff);
appendName(mc, buff);
***************
*** 1598,1613 ****
}
private void appendActiveTC (ModeConfig mc, StringBuffer buff) {
! if ((mc.selectedTopComponentID != null) && !"".equals(mc.selectedTopComponentID)) {
String tcName = PersistenceManager.escapeTcId4XmlContent(mc.selectedTopComponentID);
! buff.append(" \n"); // NOI18N
}
}
private void appendEmptyBehavior (ModeConfig mc, StringBuffer buff) {
buff.append(" \n"); // NOI18N
}
-
}
}
--- 1606,1634 ----
}
private void appendActiveTC (ModeConfig mc, StringBuffer buff) {
! if ((mc.selectedTopComponentID != null && !"".equals(mc.selectedTopComponentID))
! || (mc.previousSelectedTopComponentID != null && !"".equals(mc.previousSelectedTopComponentID)) ) {
! buff.append(" \n"); // NOI18N
+ }
+ }
private void appendEmptyBehavior (ModeConfig mc, StringBuffer buff) {
buff.append(" \n"); // NOI18N
}
}
Index: core/windows/src/org/netbeans/core/windows/view/ui/slides/SlideOperationImpl.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\SlideOperationImpl.java Base (1.6)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\SlideOperationImpl.java Locally Modified (Based On 1.6)
***************
*** 163,171 ****
}
}
!
}
--- 163,181 ----
}
}
! static int side2Orientation(String side) {
! int orientation = SlideBarDataModel.WEST;
! if (Constants.LEFT.equals(side)) {
! orientation = SlideBarDataModel.WEST;
! } else if (Constants.RIGHT.equals(side)) {
! orientation = SlideBarDataModel.EAST;
! } else if (Constants.BOTTOM.equals(side)) {
! orientation = SlideBarDataModel.SOUTH;
}
+ return orientation;
+ }
+ }
Index: core/windows/src/org/netbeans/core/windows/persistence/TCRefConfig.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\TCRefConfig.java Base (1.5)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\TCRefConfig.java Locally Modified (Based On 1.5)
***************
*** 37,46 ****
--- 37,61 ----
public boolean opened;
public String previousMode;
+ /** tab index in the previous mode */
+ public int previousIndex;
+ /** True if this TopComponent is docked when the editor is maximized,
+ * false (default) if it should slide out */
+ public boolean dockedInMaximizedMode;
+ /** True (default) if this TopComponent is docked in the default mode,
+ * false if it is slided out */
+ public boolean dockedInDefaultMode;
+ /** True if this TopComponent is maximized when slided-in (covers the whole main window) */
+ public boolean slidedInMaximized;
+
/** Creates a new instance of TCRefConfig */
public TCRefConfig() {
tc_id = ""; // NOI18N
+ dockedInMaximizedMode = false;
+ dockedInDefaultMode = true;
+ slidedInMaximized = false;
+ previousIndex = -1;
}
public boolean equals (Object obj) {
***************
*** 49,56 ****
}
if (obj instanceof TCRefConfig) {
TCRefConfig tcRefCfg = (TCRefConfig) obj;
! return (tc_id.equals(tcRefCfg.tc_id) &&
! (opened == tcRefCfg.opened));
}
return false;
}
--- 64,75 ----
}
if (obj instanceof TCRefConfig) {
TCRefConfig tcRefCfg = (TCRefConfig) obj;
! return (tc_id.equals(tcRefCfg.tc_id)
! && (opened == tcRefCfg.opened)
! && (dockedInMaximizedMode == tcRefCfg.dockedInMaximizedMode)
! && (dockedInDefaultMode == tcRefCfg.dockedInDefaultMode)
! && (slidedInMaximized == tcRefCfg.slidedInMaximized)
! && (previousIndex == tcRefCfg.previousIndex));
}
return false;
}
***************
*** 59,69 ****
int hash = 17;
hash = 37 * hash + tc_id.hashCode();
hash = 37 * hash + (opened ? 0 : 1);
return hash;
}
public String toString () {
! return "TCRefConfig: tc_id=" + tc_id + ", opened=" + opened;
}
}
--- 78,95 ----
int hash = 17;
hash = 37 * hash + tc_id.hashCode();
hash = 37 * hash + (opened ? 0 : 1);
+ hash = 37 * hash + (dockedInMaximizedMode ? 0 : 1);
+ hash = 37 * hash + (dockedInDefaultMode ? 0 : 1);
+ hash = 37 * hash + (slidedInMaximized ? 0 : 1);
+ hash = 37 * hash + previousIndex;
return hash;
}
public String toString () {
! return "TCRefConfig: tc_id=" + tc_id + ", opened=" + opened
! + ", maximizedMode=" + dockedInMaximizedMode
! + ", defaultMode=" + dockedInDefaultMode
! + ", slidedInMaximized=" + slidedInMaximized;
}
}
Index: core/windows/src/org/netbeans/core/windows/view/ui/DesktopImpl.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\DesktopImpl.java Base (1.26)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\DesktopImpl.java Locally Modified (Based On 1.26)
***************
*** 37,42 ****
--- 37,44 ----
import org.netbeans.core.windows.view.SlidingView;
import org.netbeans.core.windows.view.ViewElement;
import org.netbeans.core.windows.view.ui.slides.SlideOperation;
+ import org.netbeans.core.windows.view.ui.slides.SlideOperationFactory;
+ import org.netbeans.swing.tabcontrol.TabbedContainer;
import org.openide.windows.TopComponent;
***************
*** 238,243 ****
--- 240,264 ----
performSlide(operation);
}
+ public void performSlideToggleMaximize( TopComponent tc, String side, Rectangle editorBounds ) {
+ Component tabbed = findTabbed( tc );
+ if( null != tabbed ) {
+ SlideOperation operation = SlideOperationFactory.createSlideResize( tabbed, side );
+ Rectangle slideInBounds = computeSlideInBounds(operation, editorBounds);
+ operation.setFinishBounds(slideInBounds);
+ performSlide(operation);
+ }
+ }
+
+ private Component findTabbed( Component comp ) {
+ while( comp.getParent() != null ) {
+ if( comp.getParent() instanceof TabbedContainer ) {
+ return comp.getParent();
+ }
+ comp = comp.getParent();
+ }
+ return null;
+ }
/************** private stuff ***********/
private void performSlide(SlideOperation operation) {
***************
*** 285,291 ****
}
if (result.width > splitRootRect.width) {
// make sure we are not bigger than the current window..
! result.width = splitRootRect.width - (splitRootRect.width / 10);
}
} else if (Constants.RIGHT.equals(side)) {
int rightLimit = /*layeredPane.getBounds().x + */ layeredPane.getBounds().width - Math.max(viewRect.width, viewPreferred.width);
--- 306,312 ----
}
if (result.width > splitRootRect.width) {
// make sure we are not bigger than the current window..
! result.width = splitRootRect.width;
}
} else if (Constants.RIGHT.equals(side)) {
int rightLimit = /*layeredPane.getBounds().x + */ layeredPane.getBounds().width - Math.max(viewRect.width, viewPreferred.width);
***************
*** 293,299 ****
? rightLimit - splitRootRect.width / 3 : rightLimit - view.getSlideBounds().width;
if (result.x < 0) {
// make sure we are not bigger than the current window..
! result.x = splitRootRect.width / 10;
}
result.y = 0;
result.height = splitRootRect.height;
--- 314,320 ----
? rightLimit - splitRootRect.width / 3 : rightLimit - view.getSlideBounds().width;
if (result.x < 0) {
// make sure we are not bigger than the current window..
! result.x = 0;
}
result.y = 0;
result.height = splitRootRect.height;
***************
*** 306,312 ****
? lowerLimit - splitRootRect.height / 3 : lowerLimit - view.getSlideBounds().height;
if (result.y < 0) {
// make sure we are not bigger than the current window..
! result.y = splitRootRect.width / 10;
}
result.height = lowerLimit - result.y;
result.width = splitRootRect.width;
--- 327,333 ----
? lowerLimit - splitRootRect.height / 3 : lowerLimit - view.getSlideBounds().height;
if (result.y < 0) {
// make sure we are not bigger than the current window..
! result.y = 0;
}
result.height = lowerLimit - result.y;
result.width = splitRootRect.width;
Index: core/windows/src/org/netbeans/core/windows/Central.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\Central.java Base (1.46)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\Central.java Locally Modified (Based On 1.46)
***************
*** 20,41 ****
package org.netbeans.core.windows;
import javax.swing.SwingUtilities;
import org.netbeans.core.windows.model.Model;
import org.netbeans.core.windows.model.ModelElement;
import org.netbeans.core.windows.model.ModelFactory;
import org.netbeans.core.windows.view.ControllerHandler;
- import org.netbeans.core.windows.view.ModeView;
import org.netbeans.core.windows.view.View;
- import org.openide.util.Utilities;
- import org.openide.windows.Mode;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
- import java.awt.*;
- import java.util.*;
- import java.util.List;
- import org.netbeans.core.windows.persistence.PersistenceManager;
/**
--- 20,52 ----
package org.netbeans.core.windows;
+ import java.awt.Dimension;
+ import java.awt.Frame;
+ import java.awt.Point;
+ import java.awt.Rectangle;
+ import java.util.ArrayList;
+ import java.util.Arrays;
+ import java.util.Collections;
+ import java.util.HashSet;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Map;
+ import java.util.Set;
import javax.swing.SwingUtilities;
+
+ import org.netbeans.core.windows.model.DockingStatus;
import org.netbeans.core.windows.model.Model;
import org.netbeans.core.windows.model.ModelElement;
import org.netbeans.core.windows.model.ModelFactory;
+ import org.netbeans.core.windows.persistence.PersistenceManager;
import org.netbeans.core.windows.view.ControllerHandler;
import org.netbeans.core.windows.view.View;
import org.openide.windows.TopComponent;
import org.openide.windows.WindowManager;
***************
*** 52,58 ****
/** Helper class for managing requests to view. */
private final ViewRequestor viewRequestor = new ViewRequestor(this);
-
/** Constructor. */
public Central() {
}
--- 60,65 ----
***************
*** 316,343 ****
}
}
! /** Sets maximized mode into model and requests view (if needed). */
! public void setMaximizedMode(ModeImpl maximizedMode) {
! ModeImpl old = getMaximizedMode();
! if(maximizedMode == old) {
return;
}
! model.setMaximizedMode(maximizedMode);
if(isVisible()) {
viewRequestor.scheduleRequest(
new ViewRequest(null, View.CHANGE_MAXIMIZED_MODE_CHANGED,
! old, maximizedMode));
}
WindowManagerImpl.getInstance().doFirePropertyChange(
! WindowManagerImpl.PROP_MAXIMIZED_MODE, old, maximizedMode);
}
/** Sets constraints for mode into model and requests view (if needed). */
public void setModeConstraints(ModeImpl mode, SplitConstraint[] modeConstraints) {
--- 323,464 ----
}
}
! /** Sets new maximized mode into model and requests view update (if needed). */
! void switchMaximizedMode(ModeImpl newMaximizedMode) {
! ModeImpl old = getCurrentMaximizedMode();
! if(newMaximizedMode == old) {
return;
}
! WindowManagerImpl wm = WindowManagerImpl.getInstance();
! if( null == newMaximizedMode ) {
! //cancel current maximized mode
! if( isViewMaximized() ) {
! //some non-editor TopComponent is currently maximized
+ //restore docking status of other components
+ if( isEditorMaximized() ) {
+ restoreViews( model.getMaximizedDockingStatus() );
+ } else {
+ restoreViews( model.getDefaultDockingStatus() );
+ }
+
+ //return the maximized TopComponent to its original mode
+ ModeImpl currentMaximizedMode = getViewMaximizedMode();
+ assert currentMaximizedMode.getTopComponents().length == 1;
+ TopComponent maximizedTC = currentMaximizedMode.getTopComponents()[0];
+ String tcID = wm.findTopComponentID( maximizedTC );
+ //find the mode where the TopComponent was before its maximization
+ ModeImpl prevMode = getModeTopComponentPreviousMode( tcID, currentMaximizedMode );
+ int prevIndex = model.getModeTopComponentPreviousIndex( currentMaximizedMode, tcID );
+ if( null == prevMode ) {
+ //TODO log a warning here because we somehow lost the previous mode
+ if ((prevMode == null) || !model.getModes().contains(prevMode)) {
+ // mode to return to isn't valid anymore, try constraints
+ SplitConstraint[] constraints = model.getModeTopComponentPreviousConstraints(currentMaximizedMode, tcID);
+ if (constraints != null) {
+ // create mode with the same constraints to dock topcomponent back into
+ prevMode = WindowManagerImpl.getInstance().createModeImpl(
+ ModeImpl.getUnusedModeName(), Constants.MODE_KIND_VIEW, false);
+ model.addMode(prevMode, constraints);
+ }
+ }
+
+ if (prevMode == null) {
+ // fallback, previous saved mode not found somehow, use default modes
+ prevMode = WindowManagerImpl.getInstance().getDefaultViewMode();
+ }
+ }
+ prevMode.addOpenedTopComponent( maximizedTC, prevIndex );
+ prevMode.setSelectedTopComponent( maximizedTC );
+ setActiveMode(prevMode);
+ model.removeMode( currentMaximizedMode );
+ //cancel the maximized mode
+ setViewMaximizedMode( null );
+
+ } else if( isEditorMaximized() ) {
+ //an editor TopComponent is maximized
+ model.getMaximizedDockingStatus().mark();
+ ModeImpl prevActiveMode = getActiveMode();
+ //restore the docking status of other components
+ restoreViews( model.getDefaultDockingStatus() );
+
+ //cancel the maximized mode
+ setEditorMaximizedMode( null );
+
+ setActiveMode( prevActiveMode );
+
+ }
+ } else {
+ assert !isViewMaximized();
+
+ //set new maximized mode
+ if( newMaximizedMode.getKind() == Constants.MODE_KIND_EDITOR ) {
+ //the new maximized mode is an editor TopComponent
+
+ //remember the current docking status of opened TopComponents
+ model.getDefaultDockingStatus().mark();
+ //slide-out/dock some TopComponents according to their previous state in maximized mode
+ restoreViews( model.getMaximizedDockingStatus() );
+
+ setEditorMaximizedMode( newMaximizedMode );
+
+ } else if( newMaximizedMode.getKind() == Constants.MODE_KIND_VIEW ) {
+ //the new maximized mode is non-editor TopComponent
+
+ //remember the docking status of opened components
+ if( isEditorMaximized() ) {
+ model.getMaximizedDockingStatus().mark();
+ } else {
+ model.getDefaultDockingStatus().mark();
+ }
+
+ //get the TopComponent that will be maximized
+ TopComponent tcToMaximize = newMaximizedMode.getSelectedTopComponent();
+ String tcID = wm.findTopComponentID( tcToMaximize );
+ int prevIndex = newMaximizedMode.getOpenedTopComponents().indexOf( tcToMaximize );
+
+ //create a new mode for the maximization
+ ModeImpl mode = WindowManagerImpl.getInstance().createModeImpl(ModeImpl.getUnusedModeName(), Constants.MODE_KIND_VIEW, true);
+ model.addMode(mode, new SplitConstraint[0]);
+ //the mode has just one TopComponent
+ mode.addOpenedTopComponent( tcToMaximize );
+ mode.setSelectedTopComponent( tcToMaximize );
+ //remember where to put the TopComponent back when un-maximizing
+ setModeTopComponentPreviousMode( tcID, mode, newMaximizedMode, prevIndex );
+
+ setViewMaximizedMode( mode );
+
+ //slide-out all other TopComponents (the editor area won't be visible)
+ slideAllViews();
+
+ setActiveMode( mode );
+
+ } else {
+ throw new IllegalArgumentException( "Cannot maximize a sliding view" );
+ }
+ }
+
if(isVisible()) {
viewRequestor.scheduleRequest(
new ViewRequest(null, View.CHANGE_MAXIMIZED_MODE_CHANGED,
! old, getCurrentMaximizedMode()));
}
WindowManagerImpl.getInstance().doFirePropertyChange(
! WindowManagerImpl.PROP_MAXIMIZED_MODE, old, getCurrentMaximizedMode());
}
+ /** Sets editor mode that is currenlty maximized (used when the window system loads) */
+ void setEditorMaximizedMode(ModeImpl editorMaximizedMode) {
+ model.setEditorMaximizedMode( editorMaximizedMode );
+ }
+
+ /** Sets view mode that is currenlty maximized (used when the window system loads) */
+ void setViewMaximizedMode(ModeImpl viewMaximizedMode) {
+ model.setViewMaximizedMode( viewMaximizedMode );
+ }
+
/** Sets constraints for mode into model and requests view (if needed). */
public void setModeConstraints(ModeImpl mode, SplitConstraint[] modeConstraints) {
SplitConstraint[] old = getModeConstraints(mode);
***************
*** 562,567 ****
--- 686,701 ----
}
}
+ /**
+ * Remember which TopComponent was previously the selected one, used when switching to/from maximized mode.
+ *
+ * @param mode
+ * @param tc TopComponent that was previously selected.
+ */
+ public void setModePreviousSelectedTopComponent(ModeImpl mode, TopComponent tc) {
+ model.setModePreviousSelectedTopComponent( mode, tc );
+ }
+
/** Adds opened TopComponent into model and requests view (if needed). */
public void addModeOpenedTopComponent(ModeImpl mode, TopComponent tc) {
if(getModeOpenedTopComponents(mode).contains(tc)) {
***************
*** 627,634 ****
}
// Unmaximize mode if necessary.
! if(model.getMaximizedMode() == mode && model.getModeOpenedTopComponents(mode).isEmpty()) {
! model.setMaximizedMode(null);
}
if(isVisible() && opened) {
--- 761,768 ----
}
// Unmaximize mode if necessary.
! if(getCurrentMaximizedMode() == mode && model.getModeOpenedTopComponents(mode).isEmpty()) {
! switchMaximizedMode(null);
}
if(isVisible() && opened) {
***************
*** 666,671 ****
--- 800,809 ----
model.setModeUnloadedSelectedTopComponent(mode, tcID);
}
+ public void setUnloadedPreviousSelectedTopComponent(ModeImpl mode, String tcID) {
+ model.setModeUnloadedPreviousSelectedTopComponent(mode, tcID);
+ }
+
// XXX
public List getModeOpenedTopComponentsIDs(ModeImpl mode) {
return model.getModeOpenedTopComponentsIDs(mode);
***************
*** 739,746 ****
}
// Unmaximize mode if necessary.
! if(model.getMaximizedMode() == mode && model.getModeOpenedTopComponents(mode).isEmpty()) {
! model.setMaximizedMode(null);
}
// debugLog("removeModeTopComponent()");
--- 877,884 ----
}
// Unmaximize mode if necessary.
! if(getCurrentMaximizedMode() == mode && model.getModeOpenedTopComponents(mode).isEmpty()) {
! switchMaximizedMode(null);
}
// debugLog("removeModeTopComponent()");
***************
*** 846,851 ****
--- 984,992 ----
return;
}
+ if( isEditorMaximized() && isViewMaximized() )
+ switchMaximizedMode( null );
+
Set openedBeforeTopComponents = new HashSet();
Set tcs = tcGroup.getTopComponents();
for(Iterator it = tcs.iterator(); it.hasNext(); ) {
***************
*** 867,872 ****
--- 1008,1021 ----
mode = wm.getDefaultViewMode();
}
model.addModeOpenedTopComponent(mode, tc);
+
+ if( isEditorMaximized() && mode.getState() != Constants.MODE_STATE_SEPARATED ) {
+ String tcID = wm.findTopComponentID( tc );
+ if( !isTopComponentDockedInMaximizedMode( tcID ) ) {
+ //slide the TopComponent to edgebar and slide it out
+ slide( tc, mode, getSlideSideForMode( mode ) );
+ }
+ }
openedTcs.add(tc);
}
}
***************
*** 1103,1117 ****
return model.getEditorAreaFrameState();
}
! /** Gets maximized mode from model. */
! public ModeImpl getMaximizedMode() {
! return model.getMaximizedMode();
}
/** Gets constraints for mode from model. */
public SplitConstraint[] getModeConstraints(ModeImpl mode) {
--- 1252,1276 ----
return model.getEditorAreaFrameState();
}
! /** Gets mode that is currently maximized (can be an editor or view component). */
! ModeImpl getCurrentMaximizedMode() {
! if( isViewMaximized() )
! return model.getViewMaximizedMode();
! if( isEditorMaximized() )
! return model.getEditorMaximizedMode();
! return null;
}
+ /** Gets editor maximized mode. */
+ ModeImpl getEditorMaximizedMode() {
+ return model.getEditorMaximizedMode();
+ }
+ /** Gets view maximized mode. */
+ ModeImpl getViewMaximizedMode() {
+ return model.getViewMaximizedMode();
+ }
+
/** Gets constraints for mode from model. */
public SplitConstraint[] getModeConstraints(ModeImpl mode) {
return model.getModeConstraints(mode);
***************
*** 1163,1168 ****
--- 1325,1336 ----
public TopComponent getModeSelectedTopComponent(ModeImpl mode) {
return model.getModeSelectedTopComponent(mode);
}
+ /**
+ * @return TopComponent that was previously selected in the given mode or null.
+ */
+ public TopComponent getModePreviousSelectedTopComponent(ModeImpl mode) {
+ return model.getModePreviousSelectedTopComponent( mode );
+ }
/** Gets list of top components in this workspace. */
public List getModeTopComponents(ModeImpl mode) {
return model.getModeTopComponents(mode);
***************
*** 1327,1340 ****
// needed for precise docking back
ModeImpl prevMode;
String tcID;
for (int i = 0; i < tcs.length; i++) {
prevMode = (ModeImpl) wmi.findMode(tcs[i]);
tcID = wmi.findTopComponentID(tcs[i]);
if (prevMode.getState() == Constants.MODE_STATE_SEPARATED) {
prevMode = model.getModeTopComponentPreviousMode(prevMode, tcID);
}
if (prevMode != null) {
! model.setModeTopComponentPreviousMode(newMode, tcID, prevMode);
model.setModeTopComponentPreviousConstraints(newMode, wmi.findTopComponentID(tcs[i]), prevMode.getConstraints());
}
}
--- 1495,1510 ----
// needed for precise docking back
ModeImpl prevMode;
String tcID;
+ int prevIndex;
for (int i = 0; i < tcs.length; i++) {
prevMode = (ModeImpl) wmi.findMode(tcs[i]);
tcID = wmi.findTopComponentID(tcs[i]);
if (prevMode.getState() == Constants.MODE_STATE_SEPARATED) {
prevMode = model.getModeTopComponentPreviousMode(prevMode, tcID);
}
+ prevIndex = prevMode.getOpenedTopComponentsIDs().indexOf( tcID );
if (prevMode != null) {
! model.setModeTopComponentPreviousMode(newMode, tcID, prevMode, prevIndex);
model.setModeTopComponentPreviousConstraints(newMode, wmi.findTopComponentID(tcs[i]), prevMode.getConstraints());
}
}
***************
*** 1428,1433 ****
--- 1598,1614 ----
return viewRequestor.guessSlideSide(tc);
}
+ /**
+ * Find the side (LEFT/RIGHT/BOTTOM) where the TopComponent from the given
+ * mode should slide to.
+ *
+ * @param mode Mode
+ * @return The slide side for TopComponents from the given mode.
+ */
+ String getSlideSideForMode(ModeImpl mode) {
+ return model.getSlideSideForMode( mode );
+ }
+
/** Tells whether given top component is inside joined mode (in main window)
* or inside separate mode (separate window).
*
***************
*** 1574,1581 ****
// Unmaximize if necessary.
if(mode.getOpenedTopComponents().isEmpty()
! && mode == getMaximizedMode()) {
! setMaximizedMode(null);
}
}
--- 1755,1762 ----
// Unmaximize if necessary.
if(mode.getOpenedTopComponents().isEmpty()
! && mode == getCurrentMaximizedMode()) {
! switchMaximizedMode(null);
}
}
***************
*** 1584,1592 ****
closeMode(mode);
// Unmaximize if necessary.
if(mode.getOpenedTopComponents().isEmpty()
! && mode == getMaximizedMode())
{
! setMaximizedMode(null);
}
}
--- 1765,1773 ----
closeMode(mode);
// Unmaximize if necessary.
if(mode.getOpenedTopComponents().isEmpty()
! && mode == getCurrentMaximizedMode())
{
! switchMaximizedMode(null);
}
}
***************
*** 1647,1652 ****
--- 1828,1834 ----
String tcID = WindowManagerImpl.getInstance().findTopComponentID(tc);
ModeImpl source = (ModeImpl) WindowManagerImpl.getInstance().findMode(tc);
dockTo = model.getModeTopComponentPreviousMode(source, tcID);
+ int dockIndex = model.getModeTopComponentPreviousIndex(source, tcID);
if ((dockTo == null) || !model.getModes().contains(dockTo)) {
// mode to dock to back isn't valid anymore, try constraints
SplitConstraint[] constraints = model.getModeTopComponentPreviousConstraints(source, tcID);
***************
*** 1664,1670 ****
: WindowManagerImpl.getInstance().getDefaultViewMode();
}
! updateViewAfterDnD(moveTopComponentsIntoMode(dockTo, new TopComponent[] { tc }));
}
private boolean moveTopComponentsIntoMode(ModeImpl mode, TopComponent[] tcs) {
--- 1846,1852 ----
: WindowManagerImpl.getInstance().getDefaultViewMode();
}
! updateViewAfterDnD(moveTopComponentsIntoMode(dockTo, new TopComponent[] { tc }, dockIndex));
}
private boolean moveTopComponentsIntoMode(ModeImpl mode, TopComponent[] tcs) {
***************
*** 1695,1700 ****
--- 1877,1883 ----
break;
}
}
+ int prevIndex = prevMode != null && (intoSliding || intoSeparate) ? prevMode.getOpenedTopComponentsIDs().indexOf( tcID ) : -1;
if(removeTopComponentFromOtherModes(mode, tc)) {
moved = true;
}
***************
*** 1705,1711 ****
}
if (prevMode != null && (intoSliding || intoSeparate)) {
// remember previous mode and constraints for precise de-auto-hide
! model.setModeTopComponentPreviousMode(mode, tcID, prevMode);
model.setModeTopComponentPreviousConstraints(mode, tcID, model.getModeConstraints(prevMode));
}
}
--- 1888,1894 ----
}
if (prevMode != null && (intoSliding || intoSeparate)) {
// remember previous mode and constraints for precise de-auto-hide
! model.setModeTopComponentPreviousMode(mode, tcID, prevMode, prevIndex);
model.setModeTopComponentPreviousConstraints(mode, tcID, model.getModeConstraints(prevMode));
}
}
***************
*** 1732,1739 ****
private void updateViewAfterDnD(boolean unmaximize) {
! if(unmaximize && getMaximizedMode() != null) {
! model.setMaximizedMode(null);
}
if(isVisible()) {
--- 1915,1922 ----
private void updateViewAfterDnD(boolean unmaximize) {
! if( unmaximize ) {
! switchMaximizedMode(null);
}
if(isVisible()) {
***************
*** 1767,1772 ****
--- 1950,1967 ----
}
public void userEnabledAutoHide(TopComponent tc, ModeImpl source, String targetSide) {
+
+ String tcID = WindowManagerImpl.getInstance().findTopComponentID(tc);
+ if( isEditorMaximized() )
+ setTopComponentDockedInMaximizedMode( tcID, false );
+
+ slide( tc, source, targetSide );
+ }
+
+ /**
+ * Slide out the given TopComponent
+ */
+ void slide(TopComponent tc, ModeImpl source, String targetSide) {
ModeImpl targetMode = model.getSlidingMode(targetSide);
if (targetMode == null) {
targetMode = WindowManagerImpl.getInstance().createModeImpl(
***************
*** 1797,1803 ****
} else {
WindowManagerImpl.notifyRegistryTopComponentActivated(null);
}
-
}
public void userResizedSlidingMode(ModeImpl mode, Rectangle rect) {
--- 1992,1997 ----
***************
*** 1807,1827 ****
model.setSlideInSize( side,
mode.getSelectedTopComponent(),
Constants.BOTTOM.equals( side ) ? rect.height : rect.width );
}
public void userDisabledAutoHide(TopComponent tc, ModeImpl source) {
// unmaximize if needed
! if(getMaximizedMode() != null) {
! model.setMaximizedMode(null);
}
String tcID = WindowManagerImpl.getInstance().findTopComponentID(tc);
ModeImpl targetMode = model.getModeTopComponentPreviousMode(source, tcID);
! // debugLog("userDisabledAutoHide()=" + targetMode);
if ((targetMode == null) || !model.getModes().contains(targetMode)) {
- // debugLog("userDisabledAutoHide- previous one doesn't exist");
// mode to return to isn't valid anymore, try constraints
SplitConstraint[] constraints = model.getModeTopComponentPreviousConstraints(source, tcID);
if (constraints != null) {
--- 2001,2039 ----
model.setSlideInSize( side,
mode.getSelectedTopComponent(),
Constants.BOTTOM.equals( side ) ? rect.height : rect.width );
+ if( null != mode.getSelectedTopComponent() ) {
+ String tcID = WindowManagerImpl.getInstance().findTopComponentID( mode.getSelectedTopComponent() );
+ model.setTopComponentMaximizedWhenSlidedIn( tcID, false );
}
+ }
public void userDisabledAutoHide(TopComponent tc, ModeImpl source) {
// unmaximize if needed
! if( isViewMaximized() ) {
! switchMaximizedMode(null);
}
String tcID = WindowManagerImpl.getInstance().findTopComponentID(tc);
+ if( isEditorMaximized() )
+ setTopComponentDockedInMaximizedMode( tcID, true );
+
+ unSlide( tc, source );
+ }
+
+ /**
+ * Cancel the sliding mode of the given TopComponent.
+ */
+ private void unSlide(TopComponent tc, ModeImpl source) {
+ String tcID = WindowManagerImpl.getInstance().findTopComponentID(tc);
+
ModeImpl targetMode = model.getModeTopComponentPreviousMode(source, tcID);
! int targetIndex = model.getModeTopComponentPreviousIndex(source, tcID);
if ((targetMode == null) || !model.getModes().contains(targetMode)) {
// mode to return to isn't valid anymore, try constraints
SplitConstraint[] constraints = model.getModeTopComponentPreviousConstraints(source, tcID);
***************
*** 1839,1848 ****
: WindowManagerImpl.getInstance().getDefaultViewMode();
}
! moveTopComponentsIntoMode(targetMode, new TopComponent[] { tc } );
if (source.isEmpty()) {
- // debugLog("userDisabledAutoHide- removing " + source.getDisplayName());
model.removeMode(source);
}
--- 2048,2059 ----
: WindowManagerImpl.getInstance().getDefaultViewMode();
}
! moveTopComponentsIntoMode(targetMode, new TopComponent[] { tc }, targetIndex);
if (source.isEmpty()) {
model.removeMode(source);
}
***************
*** 1855,1886 ****
}
public ModeImpl getModeTopComponentPreviousMode(String tcID, ModeImpl currentSlidingMode) {
return model.getModeTopComponentPreviousMode(currentSlidingMode, tcID);
}
! public void setModeTopComponentPreviousMode(String tcID, ModeImpl currentSlidingMode, ModeImpl prevMode) {
! model.setModeTopComponentPreviousMode(currentSlidingMode, tcID, prevMode);
}
! public Map getSlideInSizes( String side ) {
return model.getSlideInSizes( side );
}
! public void setSlideInSize( String side, TopComponent tc, int size ) {
! model.setSlideInSize( side, tc, size );
}
// ControllerHandler <<
////////////////////////////
private static void debugLog(String message) {
Debug.log(Central.class, message);
}
-
-
}
--- 2063,2256 ----
}
+ /**
+ * @return The mode where the given TopComponent had been before it was moved to sliding or separate mode.
+ */
public ModeImpl getModeTopComponentPreviousMode(String tcID, ModeImpl currentSlidingMode) {
return model.getModeTopComponentPreviousMode(currentSlidingMode, tcID);
}
! /**
! * @return The position (tab index) of the given TopComponent before it was moved to sliding or separate mode.
! */
! public int getModeTopComponentPreviousIndex(String tcID, ModeImpl currentSlidingMode) {
! return model.getModeTopComponentPreviousIndex(currentSlidingMode, tcID);
}
! /**
! * Remember the mode and position where the given TopComponent was before moving into sliding or separate mode.
! *
! * @param tcID TopComponent's id
! * @param currentSlidingMode The mode where the TopComponent is at the moment.
! * @param prevMode The mode where the TopComponent had been before it was moved to the sliding mode.
! * @param prevIndex Tab index of the TopComponent before it was moved to the new mode.
! */
! public void setModeTopComponentPreviousMode(String tcID, ModeImpl currentSlidingMode, ModeImpl prevMode, int prevIndex) {
! model.setModeTopComponentPreviousMode(currentSlidingMode, tcID, prevMode, prevIndex);
! }
!
! Map getSlideInSizes( String side ) {
return model.getSlideInSizes( side );
}
! /**
! * Set the state of the TopComponent when the editor is maximized.
! *
! * @param tcID TopComponent id
! * @param docked True if the TopComponent should stay docked in maximized editor mode,
! * false if it should slide out when the editor is maximized.
! */
! void setTopComponentDockedInMaximizedMode( String tcID, boolean docked ) {
! if( docked )
! model.getMaximizedDockingStatus().addDocked( tcID );
! else
! model.getMaximizedDockingStatus().addSlided( tcID );
}
+ /**
+ * Get the state of the TopComponent when the editor is maximized.
+ *
+ * @param tcID TopComponent id.
+ * @return True if the TopComponent should stay docked in maximized editor mode,
+ * false if it should slide out when the editor is maximized.
+ */
+ boolean isTopComponentDockedInMaximizedMode( String tcID ) {
+ return model.getMaximizedDockingStatus().isDocked( tcID );
+ }
+
+ /**
+ * Set the state of the TopComponent when no mode is maximized.
+ *
+ * @param tcID TopComponent id
+ * @param slided True if the TopComponent is slided in the default mode,
+ * false if it is docked.
+ */
+ void setTopComponentSlidedInDefaultMode( String tcID, boolean slided ) {
+ if( slided )
+ model.getDefaultDockingStatus().addSlided( tcID );
+ else
+ model.getDefaultDockingStatus().addDocked( tcID );
+ }
+
+ /**
+ * Get the state of the TopComponent when it is slided-in.
+ *
+ * @param tcID TopComponent id.
+ * @return true if the TopComponent is maximized when slided-in.
+ */
+ boolean isTopComponentMaximizedWhenSlidedIn( String tcID ) {
+ return model.isTopComponentMaximizedWhenSlidedIn( tcID );
+ }
+
+ /**
+ * Set the state of the TopComponent when it is slided-in.
+ *
+ * @param tcID TopComponent id.
+ * @param maximized true if the TopComponent is maximized when slided-in.
+ */
+ void setTopComponentMaximizedWhenSlidedIn( String tcID, boolean maximized ) {
+ model.setTopComponentMaximizedWhenSlidedIn( tcID, maximized );
+ }
+
+ void userToggledTopComponentSlideInMaximize( String tcID ) {
+ setTopComponentMaximizedWhenSlidedIn( tcID, !isTopComponentMaximizedWhenSlidedIn( tcID ) );
+ if( isVisible() ) {
+ TopComponent tc = WindowManagerImpl.getInstance().findTopComponent( tcID );
+ ModeImpl mode = WindowManagerImpl.getInstance().findModeForOpenedID( tcID );
+ if( null != tc && null != mode && null != mode.getSide() ) {
+ viewRequestor.scheduleRequest (
+ new ViewRequest(tc, View.CHANGE_MAXIMIZE_TOPCOMPONENT_SLIDE_IN, null, mode.getSide()));
+ }
+ }
+ }
+
+ /**
+ * Get the state of the TopComponent when no mode is maximized.
+ *
+ * @param tcID TopComponent id.
+ * @return True if the TopComponent is slided in the default mode,
+ * false if it is docked.
+ */
+ boolean isTopComponentSlidedInDefaultMode( String tcID ) {
+ return model.getDefaultDockingStatus().isSlided( tcID );
+ }
+
+ boolean isEditorMaximized() {
+ return null != model.getEditorMaximizedMode();
+ }
+
+ boolean isViewMaximized() {
+ return null != model.getViewMaximizedMode();
+ }
+
+ /**
+ * Slide-out or dock opened TopComponent according to their previous state.
+ */
+ private void restoreViews( DockingStatus viewStatus ) {
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
+ Set modes = getModes();
+ for( Iterator i=modes.iterator(); i.hasNext(); ) {
+ ModeImpl modeImpl = i.next();
+ if( modeImpl.getState() == Constants.MODE_STATE_SEPARATED )
+ continue;
+
+ if( modeImpl.getKind() == Constants.MODE_KIND_VIEW ) {
+ List views = getModeOpenedTopComponents( modeImpl );
+ Collections.reverse( views );
+ for( Iterator j=views.iterator(); j.hasNext(); ) {
+ TopComponent tc = j.next();
+ String tcID = wm.findTopComponentID( tc );
+ if( viewStatus.shouldSlide( tcID ) ) {
+ slide( tc, modeImpl, guessSlideSide( tc ) );
+ }
+ }
+ //make sure that the same view is selected as before
+ TopComponent prevActiveTc = modeImpl.getPreviousSelectedTopComponent();
+ if( null != prevActiveTc ) {
+ setModeSelectedTopComponent( modeImpl, prevActiveTc );
+ }
+ } else if( modeImpl.getKind() == Constants.MODE_KIND_SLIDING ) {
+ List views = getModeOpenedTopComponents( modeImpl );
+ Collections.reverse( views );
+ for( Iterator j=views.iterator(); j.hasNext(); ) {
+ TopComponent tc = j.next();
+ String tcID = wm.findTopComponentID( tc );
+ if( viewStatus.shouldDock( tcID ) ) {
+ unSlide( tc, modeImpl );
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Slide out all non-editor TopComponents.
+ */
+ private void slideAllViews() {
+ Set modes = getModes();
+ for( Iterator i=modes.iterator(); i.hasNext(); ) {
+ ModeImpl modeImpl = i.next();;
+ if( modeImpl.getKind() == Constants.MODE_KIND_VIEW
+ && modeImpl != getViewMaximizedMode()
+ && modeImpl.getState() != Constants.MODE_STATE_SEPARATED ) {
+ List views = getModeOpenedTopComponents( modeImpl );
+ Collections.reverse( views );
+ for( Iterator j=views.iterator(); j.hasNext(); ) {
+ TopComponent tc = j.next();
+ slide( tc, modeImpl, guessSlideSide( tc ) );
+ }
+ }
+ }
+ }
+
// ControllerHandler <<
////////////////////////////
private static void debugLog(String message) {
Debug.log(Central.class, message);
}
}
Index: openide/windows/apichanges.xml
*** D:\projects\nb\openide\windows\apichanges.xml Base (1.8)
--- D:\projects\nb\openide\windows\apichanges.xml Locally Modified (Based On 1.8)
***************
*** 24,29 ****
--- 24,59 ----
+
+
+ Enhanced logic for maximized mode
+
+
+
+
+
+ When switching an editor TopComponent to maximized mode other components slide out while
+ some components (e.g. palette) stay docked. It's also possible to maximize
+ slided-in windows. Full description in http://ui.netbeans.org/docs/ui/fullscreen/fullscreen.html
+
+
+
+
+
+
+ Slided-in windows remember their size
+
+
+
+
+
+ Each TopComponent in a sliding mode (left/right/bottom) can now have a different width/height when slided-in. These user defined sizes are
+ stored in sliding mode's properties.
+
+
+
+
+
New constants PROP_TC_OPENED and PROP_TC_CLOSED in TopComponent.Registry
Index: core/windows/src/org/netbeans/core/windows/resources/layer.xml
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\layer.xml Base (1.47)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\layer.xml Locally Modified (Based On 1.47)
***************
*** 239,244 ****
--- 239,247 ----
+
+
+
***************
*** 257,262 ****
--- 260,268 ----
+
+
+
Index: core/windows/src/org/netbeans/core/windows/model/ModesSubModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\ModesSubModel.java Base (1.12)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\ModesSubModel.java Locally Modified (Based On 1.12)
***************
*** 63,69 ****
/** Active mode. */
private ModeImpl activeMode;
/** Maximized mode. */
! private ModeImpl maximizedMode;
// (sliding side + TopComponent ID) -> size in pixels (width or height
//depending on the sliding side)
private final Map slideInSizes = new HashMap(15);
--- 63,71 ----
/** Active mode. */
private ModeImpl activeMode;
/** Maximized mode. */
! private ModeImpl editorMaximizedMode;
! private ModeImpl viewMaximizedMode;
!
// (sliding side + TopComponent ID) -> size in pixels (width or height
//depending on the sliding side)
private final Map slideInSizes = new HashMap(15);
***************
*** 97,102 ****
--- 99,115 ----
}
}
+ /**
+ * Find the side (LEFT/RIGHT/BOTTOM) where the TopComponent from the given
+ * mode should slide to.
+ *
+ * @param mode Mode
+ * @return The slide side for TopComponents from the given mode.
+ */
+ public String getSlideSideForMode( ModeImpl mode ) {
+ return editorSplitSubModel.getSlideSideForMode( mode );
+ }
+
public String getSlidingModeConstraints(ModeImpl mode) {
return slidingModes2Sides.get(mode);
}
***************
*** 273,282 ****
return this.activeMode;
}
! /** Sets maximized mode. */
! public boolean setMaximizedMode(ModeImpl maximizedMode) {
if(maximizedMode == null || modes.contains(maximizedMode)) {
! this.maximizedMode = maximizedMode;
return true;
}
--- 286,295 ----
return this.activeMode;
}
! /** Sets maximized mode for editor components. */
! public boolean setEditorMaximizedMode(ModeImpl maximizedMode) {
if(maximizedMode == null || modes.contains(maximizedMode)) {
! this.editorMaximizedMode = maximizedMode;
return true;
}
***************
*** 283,296 ****
return false;
}
! /** Gets maximized mode. */
! public ModeImpl getMaximizedMode() {
! return this.maximizedMode;
}
public Set getModes() {
return new HashSet(modes);
--- 296,321 ----
return false;
}
! /** Gets maximized mode for editor components. */
! public ModeImpl getEditorMaximizedMode() {
! return this.editorMaximizedMode;
}
+ /** Sets maximized mode for non-editor components. */
+ public boolean setViewMaximizedMode(ModeImpl maximizedMode) {
+ if(maximizedMode == null || modes.contains(maximizedMode)) {
+ this.viewMaximizedMode = maximizedMode;
+ return true;
+ }
+
+ return false;
+ }
+
+ /** Gets maximized mode for non-editor components. */
+ public ModeImpl getViewMaximizedMode() {
+ return this.viewMaximizedMode;
+ }
+
public Set getModes() {
return new HashSet(modes);
}
Index: core/windows/src/org/netbeans/core/windows/view/ui/DocumentsDlg.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\DocumentsDlg.java Base (1.25)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\DocumentsDlg.java Locally Modified (Based On 1.25)
***************
*** 319,326 ****
// #37226-41075 Unmaximized the other mode if needed.
WindowManagerImpl wm = WindowManagerImpl.getInstance();
ModeImpl mode = (ModeImpl)wm.findMode(tc);
! if(mode != null && mode != wm.getMaximizedMode()) {
! wm.setMaximizedMode(null);
}
tc.requestActive();
}
--- 319,326 ----
// #37226-41075 Unmaximized the other mode if needed.
WindowManagerImpl wm = WindowManagerImpl.getInstance();
ModeImpl mode = (ModeImpl)wm.findMode(tc);
! if(mode != null && mode != wm.getCurrentMaximizedMode()) {
! wm.switchMaximizedMode(null);
}
tc.requestActive();
}
Index: core/windows/src/org/netbeans/core/windows/model/Model.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\Model.java Base (1.17)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\Model.java Locally Modified (Based On 1.17)
***************
*** 66,73 ****
public void setToolbarConfigName(String toolbarConfigName);
/** Sets active mode. */
public void setActiveMode(ModeImpl mode);
! /** Sets maximized mode. */
! public void setMaximizedMode(ModeImpl maximizedMode);
/** Adds mode. */
public void addMode(ModeImpl mode, SplitConstraint[] constraints);
/** Adds mode. */
--- 66,75 ----
public void setToolbarConfigName(String toolbarConfigName);
/** Sets active mode. */
public void setActiveMode(ModeImpl mode);
! /** Sets editor mode that is currenlty maximized */
! public void setEditorMaximizedMode(ModeImpl maximizedMode);
! /** Sets view mode that is currenlty maximized */
! public void setViewMaximizedMode(ModeImpl maximizedMode);
/** Adds mode. */
public void addMode(ModeImpl mode, SplitConstraint[] constraints);
/** Adds mode. */
***************
*** 93,98 ****
--- 95,105 ----
public void reset();
/** Set the size (width or height of the given TopComponent when it is slided in */
public void setSlideInSize(String side, TopComponent tc, int size);
+ /**
+ * Set whether the given TopComponent is maximized when it is slided-in.
+ */
+ public void setTopComponentMaximizedWhenSlidedIn( String tcid, boolean maximized );
+
// Mutators (global level) <<
/////////////////////////////
***************
*** 124,131 ****
public String getToolbarConfigName();
/** Gets active mode. */
public ModeImpl getActiveMode();
! /** Gets maximized mode. */
! public ModeImpl getMaximizedMode();
/** Gets set of modes. */
public Set getModes();
/** Gets mode constraints. */
--- 131,140 ----
public String getToolbarConfigName();
/** Gets active mode. */
public ModeImpl getActiveMode();
! /** Gets editor maximized mode. */
! public ModeImpl getEditorMaximizedMode();
! /** Gets view maximized mode. */
! public ModeImpl getViewMaximizedMode();
/** Gets set of modes. */
public Set getModes();
/** Gets mode constraints. */
***************
*** 142,147 ****
--- 151,177 ----
* side, the key in the Map is TopComponent's ID
*/
public Map getSlideInSizes(String side);
+ /**
+ * @return The docking status (docked/slided) of TopComponents before the window system
+ * switched to maximized mode.
+ */
+ public DockingStatus getDefaultDockingStatus();
+ /**
+ * @return The docking status (docked/slided) of TopComponents in maximized editor mode.
+ */
+ public DockingStatus getMaximizedDockingStatus();
+ /**
+ * Find the side (LEFT/RIGHT/BOTTOM) where the TopComponent from the given
+ * mode should slide to.
+ *
+ * @param mode Mode
+ * @return The slide side for TopComponents from the given mode.
+ */
+ public String getSlideSideForMode( ModeImpl mode );
+ /**
+ * @return True if the given TopComponent is maximized when it is slided-in.
+ */
+ public boolean isTopComponentMaximizedWhenSlidedIn( String tcid );
// Accessors (global level) >>
//////////////////////////////
***************
*** 161,166 ****
--- 191,198 ----
public void setModeFrameState(ModeImpl mode, int frameState);
/** Sets selected TopComponent. */
public void setModeSelectedTopComponent(ModeImpl mode, TopComponent selected);
+ /** Remember which top component was the selected one before switching to/from maximized mode */
+ public void setModePreviousSelectedTopComponent(ModeImpl mode, TopComponent prevSelected);
/** Adds opened TopComponent. */
public void addModeOpenedTopComponent(ModeImpl mode, TopComponent tc);
/** Inserts opened TopComponent. */
***************
*** 172,177 ****
--- 204,211 ----
public void addModeUnloadedTopComponent(ModeImpl mode, String tcID);
// XXX
public void setModeUnloadedSelectedTopComponent(ModeImpl mode, String tcID);
+ /** Remember which top component was the selected one before switching to/from maximized mode */
+ public void setModeUnloadedPreviousSelectedTopComponent(ModeImpl mode, String tcID);
/** */
public void removeModeTopComponent(ModeImpl mode, TopComponent tc);
// XXX
***************
*** 180,186 ****
// Info about previous top component context, used by sliding kind of modes
/** Sets information of previous mode top component was in. */
! public void setModeTopComponentPreviousMode(ModeImpl mode, String tcID, ModeImpl previousMode);
/** Sets information of previous constraints of mode top component was in. */
public void setModeTopComponentPreviousConstraints(ModeImpl mode, String tcID, SplitConstraint[] constraints);
--- 214,220 ----
// Info about previous top component context, used by sliding kind of modes
/** Sets information of previous mode top component was in. */
! public void setModeTopComponentPreviousMode(ModeImpl mode, String tcID, ModeImpl previousMode, int previousIndex);
/** Sets information of previous constraints of mode top component was in. */
public void setModeTopComponentPreviousConstraints(ModeImpl mode, String tcID, SplitConstraint[] constraints);
***************
*** 212,217 ****
--- 246,253 ----
public boolean containsModeTopComponent(ModeImpl mode, TopComponent tc);
/** Gets selected TopComponent. */
public TopComponent getModeSelectedTopComponent(ModeImpl mode);
+ /** Get the top component that had been the selected one before switching to/from maximzied mode */
+ public TopComponent getModePreviousSelectedTopComponent(ModeImpl mode);
/** Gets list of top components in this workspace. */
public List getModeTopComponents(ModeImpl mode);
/** Gets list of top components in this workspace. */
***************
*** 225,230 ****
--- 261,268 ----
public ModeImpl getModeTopComponentPreviousMode(ModeImpl mode, String tcID);
public SplitConstraint[] getModeTopComponentPreviousConstraints(ModeImpl mode, String tcID);
+ /** Gets the tab index of the given top component before it was moved to sliding/separate mode */
+ public int getModeTopComponentPreviousIndex(ModeImpl mode, String tcID);
// Accessors (mode level) <<
////////////////////////////
Index: debuggercore/src/org/netbeans/modules/debugger/resources/modes/debugger/watches.wstcref
*** D:\projects\nb\debuggercore\src\org\netbeans\modules\debugger\resources\modes\debugger\watches.wstcref Base (1.5)
--- D:\projects\nb\debuggercore\src\org\netbeans\modules\debugger\resources\modes\debugger\watches.wstcref Locally Modified (Based On 1.5)
***************
*** 2,14 ****
--- 2,15 ----
+
Index: core/windows/src/org/netbeans/core/windows/model/ModeModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\ModeModel.java Base (1.10)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\ModeModel.java Locally Modified (Based On 1.10)
***************
*** 46,56 ****
public void setBoundsSeparatedHelp(Rectangle bounds);
/** Sets frame state. */
public void setFrameState(int frameState);
! /** Sets seleted TopComponent. */
public void setSelectedTopComponent(TopComponent selected);
/** Adds opened TopComponent. */
public void addOpenedTopComponent(TopComponent tc);
--- 46,55 ----
public void setBoundsSeparatedHelp(Rectangle bounds);
/** Sets frame state. */
public void setFrameState(int frameState);
! /** Sets selected TopComponent. */
public void setSelectedTopComponent(TopComponent selected);
+ /** Set top component that was selected before switching to/from maximized mode */
+ public void setPreviousSelectedTopComponent(TopComponent prevSelected);
/** Adds opened TopComponent. */
public void addOpenedTopComponent(TopComponent tc);
/** Inserts opened TopComponent. */
***************
*** 58,63 ****
--- 60,67 ----
public void addUnloadedTopComponent(String tcID);
// XXX
public void setUnloadedSelectedTopComponent(String tcID);
+ /** Set top component that was selected before switching to/from maximized mode */
+ public void setUnloadedPreviousSelectedTopComponent(String tcID);
/** Removes TopComponent from mode. */
public void removeTopComponent(TopComponent tc);
// XXX
***************
*** 66,72 ****
// Info about previous top component context, used by sliding kind of modes
/** Sets information of previous mode top component was in. */
! public void setTopComponentPreviousMode(String tcID, ModeImpl mode);
/** Sets information of previous constraints of mode top component was in. */
public void setTopComponentPreviousConstraints(String tcID, SplitConstraint[] constraints);
--- 70,76 ----
// Info about previous top component context, used by sliding kind of modes
/** Sets information of previous mode top component was in. */
! public void setTopComponentPreviousMode(String tcID, ModeImpl mode, int prevIndex);
/** Sets information of previous constraints of mode top component was in. */
public void setTopComponentPreviousConstraints(String tcID, SplitConstraint[] constraints);
***************
*** 91,96 ****
--- 95,102 ----
public boolean containsTopComponent(TopComponent tc);
/** Gets selected TopComponent. */
public TopComponent getSelectedTopComponent();
+ /** Gets the top component that was selected before switching to/from maximized mode */
+ public TopComponent getPreviousSelectedTopComponent();
/** Gets list of top components in mode. */
public List getTopComponents();
/** Gets list of top components in mode. */
***************
*** 103,108 ****
--- 109,116 ----
// Info about previous top component context, used by sliding kind of modes
public ModeImpl getTopComponentPreviousMode(String tcID);
+ /** Gets the tab index of the top component in its previous mode */
+ public int getTopComponentPreviousIndex(String tcID);
public SplitConstraint[] getTopComponentPreviousConstraints(String tcID);
Index: core/windows/src/org/netbeans/core/windows/persistence/WindowManagerParser.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\WindowManagerParser.java Base (1.25)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\WindowManagerParser.java Locally Modified (Based On 1.25)
***************
*** 1553,1568 ****
/** Reads element "maximized-mode" and updates window manager config content */
private void handleMaximizedMode (Attributes attrs) {
! String name = attrs.getValue("name"); // NOI18N
if (name != null) {
! winMgrConfig.maximizedModeName = name;
} else {
! winMgrConfig.maximizedModeName = ""; // NOI18N
}
}
/** Reads element "toolbar" and updates window manager config content */
--- 1553,1572 ----
/** Reads element "maximized-mode" and updates window manager config content */
private void handleMaximizedMode (Attributes attrs) {
! String name = attrs.getValue("editor"); // NOI18N
if (name != null) {
! winMgrConfig.editorMaximizedModeName = name;
} else {
! winMgrConfig.editorMaximizedModeName = ""; // NOI18N
}
+
+ name = attrs.getValue("view"); // NOI18N
+ if (name != null) {
+ winMgrConfig.viewMaximizedModeName = name;
+ } else {
+ winMgrConfig.viewMaximizedModeName = ""; // NOI18N
}
+ }
/** Reads element "toolbar" and updates window manager config content */
private void handleToolbar (Attributes attrs) {
***************
*** 1800,1807 ****
}
private void appendMaximizedMode (WindowManagerConfig wmc, StringBuffer buff) {
! if ((wmc.maximizedModeName != null) && !"".equals(wmc.maximizedModeName)) {
! buff.append(" \n"); // NOI18N
}
}
--- 1807,1820 ----
}
private void appendMaximizedMode (WindowManagerConfig wmc, StringBuffer buff) {
! if ((wmc.editorMaximizedModeName != null && !"".equals(wmc.editorMaximizedModeName))
! || (wmc.viewMaximizedModeName != null && !"".equals(wmc.viewMaximizedModeName))) {
! buff.append(" \n"); // NOI18N
}
}
Index: core/windows/src/org/netbeans/core/windows/view/ViewHierarchy.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ViewHierarchy.java Base (1.46)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ViewHierarchy.java Locally Modified (Based On 1.46)
***************
*** 744,749 ****
--- 744,753 ----
desktop.performSlideResize(operation);
}
+ public void performSlideToggleMaximize( TopComponent tc, String side ) {
+ desktop.performSlideToggleMaximize( tc, side, getPureEditorAreaBounds());
+ }
+
private void setMainWindowDesktop(Component component) {
setDesktop(component, true);
}
Index: core/windows/src/org/netbeans/core/windows/view/View.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\View.java Base (1.8)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\View.java Locally Modified (Based On 1.8)
***************
*** 81,86 ****
--- 81,87 ----
public int TOPCOMPONENT_REQUEST_ATTENTION = 63;
public int TOPCOMPONENT_CANCEL_REQUEST_ATTENTION = 64;
+ public int CHANGE_MAXIMIZE_TOPCOMPONENT_SLIDE_IN = 65;
/** Provides GUI changes to manifest model changes to user. */
public void changeGUI(ViewEvent[] viewEvents, WindowSystemSnapshot snapshot);
Index: core/windows/src/org/netbeans/core/windows/model/DefaultModeModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\DefaultModeModel.java Base (1.11)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\DefaultModeModel.java Locally Modified (Based On 1.11)
***************
*** 137,142 ****
--- 137,148 ----
}
}
+ public void setUnloadedPreviousSelectedTopComponent(String tcID) {
+ synchronized(LOCK_TOPCOMPONENTS) {
+ topComponentSubModel.setUnloadedPreviousSelectedTopComponent(tcID);
+ }
+ }
+
/** Sets seleted TopComponent. */
public void setSelectedTopComponent(TopComponent selected) {
synchronized(LOCK_TOPCOMPONENTS) {
***************
*** 144,149 ****
--- 150,161 ----
}
}
+ public void setPreviousSelectedTopComponent(TopComponent prevSelected) {
+ synchronized(LOCK_TOPCOMPONENTS) {
+ topComponentSubModel.setPreviousSelectedTopComponent(prevSelected);
+ }
+ }
+
/** Sets frame state */
public void setFrameState(int frameState) {
synchronized(LOCK_FRAMESTATE) {
***************
*** 241,246 ****
--- 253,264 ----
return topComponentSubModel.getSelectedTopComponent();
}
}
+ /** Gets the top component that was selected before switching to/from maximized mode */
+ public TopComponent getPreviousSelectedTopComponent() {
+ synchronized(LOCK_TOPCOMPONENTS) {
+ return topComponentSubModel.getPreviousSelectedTopComponent();
+ }
+ }
/** Gets list of top components. */
public List getOpenedTopComponents() {
***************
*** 279,284 ****
--- 297,308 ----
return getContextSubModel().getTopComponentPreviousMode(tcID);
}
}
+ /** Gets the tab index of the top component in its previous mode */
+ public int getTopComponentPreviousIndex(String tcID) {
+ synchronized(LOCK_TC_CONTEXTS) {
+ return getContextSubModel().getTopComponentPreviousIndex(tcID);
+ }
+ }
public void setTopComponentPreviousConstraints(String tcID, SplitConstraint[] constraints) {
synchronized(LOCK_TC_CONTEXTS) {
***************
*** 286,294 ****
}
}
! public void setTopComponentPreviousMode(String tcID, ModeImpl mode) {
synchronized(LOCK_TC_CONTEXTS) {
! getContextSubModel().setTopComponentPreviousMode(tcID, mode);
}
}
--- 310,318 ----
}
}
! public void setTopComponentPreviousMode(String tcID, ModeImpl mode, int prevIndex) {
synchronized(LOCK_TC_CONTEXTS) {
! getContextSubModel().setTopComponentPreviousMode(tcID, mode, prevIndex);
}
}
Index: core/windows/src/org/netbeans/core/windows/model/TopComponentSubModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\TopComponentSubModel.java Base (1.13)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\TopComponentSubModel.java Locally Modified (Based On 1.13)
***************
*** 47,52 ****
--- 47,54 ----
private final int kind;
/** Selected TopComponent ID. Has to be present in openedTopComponenets. */
private String selectedTopComponentID;
+ /** ID of top component that was the selected one before switching to/from maximized mode */
+ private String previousSelectedTopComponentID;
public TopComponentSubModel(int kind) {
this.kind = kind;
***************
*** 264,269 ****
--- 266,278 ----
}
}
+ public void setPreviousSelectedTopComponent(TopComponent tc) {
+ if(tc != null )
+ previousSelectedTopComponentID = getID(tc);
+ else
+ previousSelectedTopComponentID = null;
+ }
+
public void setUnloadedSelectedTopComponent(String tcID) {
if(tcID != null && !getOpenedTopComponentsIDs().contains(tcID)) {
return;
***************
*** 272,277 ****
--- 281,290 ----
selectedTopComponentID = tcID;
}
+ public void setUnloadedPreviousSelectedTopComponent(String tcID) {
+ previousSelectedTopComponentID = tcID;
+ }
+
public List getOpenedTopComponentsIDs() {
List l = new ArrayList(openedTopComponents.size());
for(Iterator it = openedTopComponents.iterator(); it.hasNext(); ) {
***************
*** 301,306 ****
--- 314,325 ----
return getTopComponent(selectedTopComponentID);
}
+ public TopComponent getPreviousSelectedTopComponent() {
+ if( null != previousSelectedTopComponentID )
+ return getTopComponent(previousSelectedTopComponentID);
+ return null;
+ }
+
private static TopComponent getTopComponent(String tcID) {
return WindowManagerImpl.getInstance().getTopComponentForID(tcID);
}
Index: core/windows/src/org/netbeans/core/windows/PersistenceHandler.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\PersistenceHandler.java Base (1.44)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\PersistenceHandler.java Locally Modified (Based On 1.44)
***************
*** 139,145 ****
}
ModeImpl activeMode = null;
! ModeImpl maximizedMode = null;
// First create empty modes.
Map mode2config = new HashMap();
--- 139,146 ----
}
ModeImpl activeMode = null;
! ModeImpl editorMaximizedMode = null;
! ModeImpl viewMaximizedMode = null;
// First create empty modes.
Map mode2config = new HashMap();
***************
*** 154,161 ****
if(mc.name.equals(wmc.activeModeName)) {
activeMode = mode;
}
! if(mc.name.equals(wmc.maximizedModeName)) {
! maximizedMode = mode;
}
}
--- 155,164 ----
if(mc.name.equals(wmc.activeModeName)) {
activeMode = mode;
}
! if(mc.name.equals(wmc.editorMaximizedModeName)) {
! editorMaximizedMode = mode;
! } else if(mc.name.equals(wmc.viewMaximizedModeName)) {
! viewMaximizedMode = mode;
}
}
***************
*** 170,176 ****
--- 173,182 ----
if(mc.selectedTopComponentID != null) {
mode.setUnloadedSelectedTopComponent(mc.selectedTopComponentID);
}
+ if(mc.previousSelectedTopComponentID != null) {
+ mode.setUnloadedPreviousSelectedTopComponent(mc.previousSelectedTopComponentID);
}
+ }
//Initialize top component groups
for (int i = 0; i < wmc.groups.length; i++) {
***************
*** 190,196 ****
// project layer, that can cause out of synch state when switching projects...
// setting null is however considered a valid state.
wm.setActiveMode(activeMode);
! wm.setMaximizedMode(maximizedMode);
Rectangle joinedBounds = computeBounds(
wmc.centeredHorizontallyJoined,
--- 196,203 ----
// project layer, that can cause out of synch state when switching projects...
// setting null is however considered a valid state.
wm.setActiveMode(activeMode);
! wm.setEditorMaximizedMode(editorMaximizedMode);
! wm.setViewMaximizedMode(viewMaximizedMode);
Rectangle joinedBounds = computeBounds(
wmc.centeredHorizontallyJoined,
***************
*** 307,313 ****
}
}
if (previous != null) {
! WindowManagerImpl.getInstance().setPreviousModeForTopComponent(tcRefConfig.tc_id, mode, previous);
} else {
Logger.getLogger(PersistenceHandler.class.getName()).log(Level.WARNING, null,
new java.lang.NullPointerException("Cannot find previous mode named \'" +
--- 314,320 ----
}
}
if (previous != null) {
! WindowManagerImpl.getInstance().setPreviousModeForTopComponent(tcRefConfig.tc_id, mode, previous, tcRefConfig.previousIndex);
} else {
Logger.getLogger(PersistenceHandler.class.getName()).log(Level.WARNING, null,
new java.lang.NullPointerException("Cannot find previous mode named \'" +
***************
*** 320,325 ****
--- 327,333 ----
}
private ModeImpl initModeFromConfig(ModeImpl mode, ModeConfig mc) {
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
for (int j = 0; j < mc.tcRefConfigs.length; j++) {
TCRefConfig tcRefConfig = (TCRefConfig) mc.tcRefConfigs[j];
if(DEBUG) {
***************
*** 336,341 ****
--- 344,352 ----
} else {
mode.addUnloadedTopComponent(tcRefConfig.tc_id);
}
+ wm.setTopComponentDockedInMaximizedMode( tcRefConfig.tc_id, tcRefConfig.dockedInMaximizedMode );
+ wm.setTopComponentSlidedInDefaultMode( tcRefConfig.tc_id, !tcRefConfig.dockedInDefaultMode );
+ wm.setTopComponentMaximizedWhenSlidedIn( tcRefConfig.tc_id, tcRefConfig.slidedInMaximized );
}
// PENDING Refine the unneded computing.
***************
*** 478,494 ****
wmc.activeModeName = mo.getName();
}
! mo = wmi.getMaximizedMode();
if(DEBUG) {
! debugLog("maximized mode=" + mo); // NOI18N
}
if (mo != null) {
! wmc.maximizedModeName = mo.getName();
}
wmc.toolbarConfiguration = wmi.getToolbarConfigName();
if(DEBUG) {
--- 489,510 ----
wmc.activeModeName = mo.getName();
}
! mo = wmi.getEditorMaximizedMode();
if(DEBUG) {
! debugLog("editor maximized mode=" + mo); // NOI18N
}
if (mo != null) {
! wmc.editorMaximizedModeName = mo.getName();
}
+ mo = wmi.getViewMaximizedMode();
+ if(DEBUG) {
+ debugLog("view maximized mode=" + mo); // NOI18N
+ }
+ if (mo != null) {
+ wmc.viewMaximizedModeName = mo.getName();
+ }
+
wmc.toolbarConfiguration = wmi.getToolbarConfigName();
if(DEBUG) {
debugLog("toolbarConfiguration=" + wmc.toolbarConfiguration); // NOI18N
***************
*** 586,591 ****
--- 605,621 ----
debugLog("mode permanent=" + modeCfg.permanent); // NOI18N
}
+ TopComponent prevSelectedTC = mode.getPreviousSelectedTopComponent();
+ if(prevSelectedTC != null) {
+ if (pm.isTopComponentPersistent(prevSelectedTC)) {
+ String tc_id = wm.findTopComponentID(prevSelectedTC);
+ if(DEBUG) {
+ debugLog("previous selected tc=" + selectedTC.getName()); // NOI18N
+ }
+ modeCfg.previousSelectedTopComponentID = tc_id;
+ }
+ }
+
// TopComponents:
List tcRefCfgList = new ArrayList();
List openedTcIDs = mode.getOpenedTopComponentsIDs();
***************
*** 593,603 ****
String tcID = (String)it.next();
boolean opened = openedTcIDs.contains(tcID);
- if(opened) {
TopComponent tc = wm.findTopComponent(tcID);
if(tc == null || !pm.isTopComponentPersistent(tc)) {
continue;
--- 623,630 ----
String tcID = (String)it.next();
boolean opened = openedTcIDs.contains(tcID);
TopComponent tc = wm.findTopComponent(tcID);
+ if(opened) {
if(tc == null || !pm.isTopComponentPersistent(tc)) {
continue;
}
***************
*** 602,614 ****
// #45981: save previous mode even for closed tcs
String modeName = null;
! if (mode.getKind() == Constants.MODE_KIND_SLIDING) {
ModeImpl prev = wm.getPreviousModeForTopComponent(tcID, mode);
if (prev != null) {
modeName = prev.getName();
}
}
--- 632,643 ----
// #45981: save previous mode even for closed tcs
String modeName = null;
! int prevIndex = -1;
! if (mode.getKind() == Constants.MODE_KIND_SLIDING || mode.getState() == Constants.MODE_STATE_SEPARATED) {
ModeImpl prev = wm.getPreviousModeForTopComponent(tcID, mode);
if (prev != null) {
modeName = prev.getName();
+ prevIndex = wm.getPreviousIndexForTopComponent(tcID, mode);
}
}
***************
*** 616,621 ****
--- 648,657 ----
tcRefCfg.tc_id = tcID;
tcRefCfg.opened = opened;
tcRefCfg.previousMode = modeName;
+ tcRefCfg.previousIndex = prevIndex;
+ tcRefCfg.dockedInMaximizedMode = wm.isTopComponentDockedInMaximizedMode( tcID );
+ tcRefCfg.dockedInDefaultMode = !wm.isTopComponentSlidedInDefaultMode( tcID );
+ tcRefCfg.slidedInMaximized = wm.isTopComponentMaximizedWhenSlidedIn( tcID );
tcRefCfgList.add(tcRefCfg);
}
***************
*** 707,712 ****
--- 743,753 ----
debugLog("WMI.topComponentRefConfigAdded mo:" + modeName + " tcRef:" + tcRefConfig.tc_id); // NOI18N
}
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
+ wm.setTopComponentDockedInMaximizedMode( tcRefConfig.tc_id, tcRefConfig.dockedInMaximizedMode );
+ wm.setTopComponentSlidedInDefaultMode( tcRefConfig.tc_id, !tcRefConfig.dockedInDefaultMode );
+ wm.setTopComponentMaximizedWhenSlidedIn( tcRefConfig.tc_id, tcRefConfig.slidedInMaximized );
+
TopComponent tc = getTopComponentForID(tcRefConfig.tc_id);
if(tc != null) {
ModeImpl mode = (ModeImpl)name2mode.get(modeName);
***************
*** 848,854 ****
buffer.append("\n-- screenSize: " + wmc.screenSize);
buffer.append("\n-- activeModeName: " + wmc.activeModeName);
! buffer.append("\n-- maximizedModeName: " + wmc.maximizedModeName);
buffer.append("\n-- toolbarconfig: " + wmc.toolbarConfiguration);
buffer.append("\n-- modes: " + Arrays.toString(wmc.modes) + " size " + (wmc.modes == null ? -1 : wmc.modes.length));
for (int i = 0; i < wmc.modes.length; i++) {
--- 889,896 ----
buffer.append("\n-- screenSize: " + wmc.screenSize);
buffer.append("\n-- activeModeName: " + wmc.activeModeName);
! buffer.append("\n-- editorMaximizedModeName: " + wmc.editorMaximizedModeName);
! buffer.append("\n-- viewMaximizedModeName: " + wmc.viewMaximizedModeName);
buffer.append("\n-- toolbarconfig: " + wmc.toolbarConfiguration);
buffer.append("\n-- modes: " + Arrays.toString(wmc.modes) + " size " + (wmc.modes == null ? -1 : wmc.modes.length));
for (int i = 0; i < wmc.modes.length; i++) {
Index: core/windows/src/org/netbeans/core/windows/view/DefaultView.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\DefaultView.java Base (1.57)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\DefaultView.java Locally Modified (Based On 1.57)
***************
*** 88,94 ****
toReturn = Constants.LEFT;
}
} else {
- Rectangle compb = comp.getBounds();
Rectangle editorb = hierarchy.getPureEditorAreaBounds();
Point leftTop = new Point(0, 0);
SwingUtilities.convertPointToScreen(leftTop, comp);
--- 88,93 ----
***************
*** 106,112 ****
return toReturn;
}
-
public void changeGUI(ViewEvent[] viewEvents, WindowSystemSnapshot snapshot) {
// Change to view understandable-convenient structure.
--- 105,110 ----
***************
*** 446,457 ****
Logger.getLogger(DefaultView.class.getName()).fine(
"Could not find mode " + viewEvent.getSource());
}
!
}
}
Set toHide = new HashSet(oldShowing);
--- 444,458 ----
Logger.getLogger(DefaultView.class.getName()).fine(
"Could not find mode " + viewEvent.getSource());
}
! } else if (changeType == View.CHANGE_MAXIMIZE_TOPCOMPONENT_SLIDE_IN) {
! if (DEBUG) {
! debugLog("Slided-in top component toggle maximize"); //NOI18N
}
+ TopComponent tc = (TopComponent)viewEvent.getSource();
+ String side = (String)viewEvent.getNewValue();
+ hierarchy.performSlideToggleMaximize( tc, side );
}
+ }
Set toHide = new HashSet(oldShowing);
toHide.removeAll(newShowing);
Index: core/windows/src/org/netbeans/core/windows/resources/tc-ref2_2.dtd
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\tc-ref2_2.dtd No Base Revision
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\tc-ref2_2.dtd Locally New
***************
*** 1,0 ****
--- 1,102 ----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: core/windows/src/org/netbeans/core/windows/view/ui/slides/SlideBar.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\SlideBar.java Base (1.25)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\slides\SlideBar.java Locally Modified (Based On 1.25)
***************
*** 90,95 ****
--- 90,98 ----
/** Action command indicating that component is going from auto-hide state to regular */
public static final String COMMAND_DISABLE_AUTO_HIDE = "disableAutoHide"; //NOI18N
+ /** Action command indicating that component is going from regular to maximized size and vice versa */
+ public static final String COMMAND_MAXIMIZE = "slideMaximize"; //NOI18N
+
/** Asociation with Tabbed implementation */
private final TabbedSlideAdapter tabbed;
/** Holds all data of slide bar */
Index: core/windows/src/org/netbeans/core/windows/resources/mode-properties2_3.dtd
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\mode-properties2_3.dtd No Base Revision
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\mode-properties2_3.dtd Locally New
***************
*** 1,0 ****
--- 1,193 ----
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: core/windows/src/org/netbeans/core/windows/model/TopComponentContextSubModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\TopComponentContextSubModel.java Base (1.5)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\TopComponentContextSubModel.java Locally Modified (Based On 1.5)
***************
*** 40,45 ****
--- 40,47 ----
private static final class Context {
// XXX we should use weak reference for holding mode, to let it vanish
ModeImpl mode;
+ //tab index
+ int index = -1;
SplitConstraint[] constraints;
} // end of Context
***************
*** 59,74 ****
context.constraints = constraints;
}
! public void setTopComponentPreviousMode(String tcID, ModeImpl mode) {
Context context = tcID2Contexts.get(tcID);
if (context == null) {
context = new Context();
tcID2Contexts.put(tcID, context);
}
context.mode = mode;
}
--- 61,74 ----
context.constraints = constraints;
}
! public void setTopComponentPreviousMode(String tcID, ModeImpl mode, int index) {
Context context = tcID2Contexts.get(tcID);
if (context == null) {
context = new Context();
tcID2Contexts.put(tcID, context);
}
context.mode = mode;
+ context.index = index;
}
public SplitConstraint[] getTopComponentPreviousConstraints(String tcID) {
***************
*** 78,84 ****
--- 81,92 ----
return context == null ? null : context.mode;
}
+ public int getTopComponentPreviousIndex(String tcID) {
+ Context context = tcID2Contexts.get(tcID);
+ return context == null ? -1 : context.index;
}
+ }
Index: core/windows/src/org/netbeans/core/windows/view/ui/TabbedHandler.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\TabbedHandler.java Base (1.25)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\view\ui\TabbedHandler.java Locally Modified (Based On 1.25)
***************
*** 341,346 ****
--- 341,350 ----
} else if (SlideBar.COMMAND_DISABLE_AUTO_HIDE.equals(cmd)) {
TopComponent tc = (TopComponent) tabbed.getTopComponentAt(sbe.getTabIndex());
modeView.getController().userDisabledAutoHide(modeView, tc);
+ } else if( SlideBar.COMMAND_MAXIMIZE == cmd ) {
+ TopComponent tc = (TopComponent) tabbed.getTopComponentAt(sbe.getTabIndex());
+ MaximizeWindowAction mwa = new MaximizeWindowAction(tc);
+ mwa.actionPerformed(e);
}
}
}
***************
*** 518,524 ****
public void setStartBounds(Rectangle bounds) {
original.setStartBounds(bounds);
}
-
}
}
--- 522,527 ----
Index: core/windows/src/org/netbeans/core/windows/WindowManagerImpl.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\WindowManagerImpl.java Base (1.50)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\WindowManagerImpl.java Locally Modified (Based On 1.50)
***************
*** 19,26 ****
package org.netbeans.core.windows;
- import java.util.ArrayList;
-
import java.awt.*;
import java.beans.*;
import java.net.URL;
--- 19,24 ----
***************
*** 657,673 ****
return central.getEditorAreaFrameState();
}
! public void setMaximizedMode(ModeImpl maximizedMode) {
! central.setMaximizedMode(maximizedMode);
}
! public ModeImpl getMaximizedMode() {
! return central.getMaximizedMode();
}
/** Sets constraints, delegates from ModeImpl. */
public void setModeConstraints(ModeImpl mode, SplitConstraint[] modeConstraints) {
--- 655,693 ----
return central.getEditorAreaFrameState();
}
! /**
! * Sets new maximized mode or cancels the current one.
! * @param newMaximizedMode Mode to set as the maximized one or null to cancel the current one.
! */
! public void switchMaximizedMode(ModeImpl newMaximizedMode) {
! central.switchMaximizedMode(newMaximizedMode);
}
! /** Sets editor mode that is currenlty maximized (used when the window system loads) */
! public void setEditorMaximizedMode(ModeImpl editorMaximizedMode) {
! central.setEditorMaximizedMode(editorMaximizedMode);
}
+ /** Sets view mode that is currenlty maximized (used when the window system loads) */
+ public void setViewMaximizedMode(ModeImpl viewMaximizedMode) {
+ central.setViewMaximizedMode(viewMaximizedMode);
+ }
+
+ /** Gets mode that is currently maximized. */
+ public ModeImpl getCurrentMaximizedMode() {
+ return central.getCurrentMaximizedMode();
+ }
+
+ /** Gets editor maximized mode. */
+ public ModeImpl getEditorMaximizedMode() {
+ return central.getEditorMaximizedMode();
+ }
+
+ /** Gets view maximized mode. */
+ public ModeImpl getViewMaximizedMode() {
+ return central.getViewMaximizedMode();
+ }
+
/** Sets constraints, delegates from ModeImpl. */
public void setModeConstraints(ModeImpl mode, SplitConstraint[] modeConstraints) {
central.setModeConstraints(mode, modeConstraints);
***************
*** 1011,1016 ****
--- 1034,1040 ----
"TopComponent"); //NOI18N
}
+
ModeImpl mode = getMode(tc);
if(mode == null) {
***************
*** 1019,1038 ****
tc.putClientProperty (Constants.TOPCOMPONENT_ALLOW_DOCK_ANYWHERE, Boolean.TRUE);
}
}
// XXX PENDING If necessary, unmaximize the state, but exclude sliding modes
// Consider to put it in addOpenedTopComponent, to do it in one step.
! ModeImpl maximizedMode = getMaximizedMode();
! if(maximizedMode != null && mode != maximizedMode &&
! mode.getKind() != Constants.MODE_KIND_SLIDING) {
! setMaximizedMode(null);
}
mode.addOpenedTopComponent(tc);
}
protected void topComponentClose(TopComponent tc) {
--- 1043,1074 ----
tc.putClientProperty (Constants.TOPCOMPONENT_ALLOW_DOCK_ANYWHERE, Boolean.TRUE);
}
}
+ boolean alreadyOpened = mode.getOpenedTopComponents().contains( tc );
// XXX PENDING If necessary, unmaximize the state, but exclude sliding modes
// Consider to put it in addOpenedTopComponent, to do it in one step.
! ModeImpl maximizedMode = getCurrentMaximizedMode();
! if(maximizedMode != null && mode != maximizedMode
! && mode.getKind() != Constants.MODE_KIND_SLIDING
! && central.isViewMaximized() ) {
! switchMaximizedMode(null);
}
mode.addOpenedTopComponent(tc);
+
+ if( central.isEditorMaximized()
+ && !alreadyOpened
+ && mode.getState() != Constants.MODE_STATE_SEPARATED ) {
+ //the editor is maximized so the newly opened TopComponent should slide out
+ String tcID = findTopComponentID( tc );
+ if( !isTopComponentDockedInMaximizedMode( tcID ) ) {
+ //slide the TopComponent to edgebar and slide it out
+ central.slide( tc, mode, central.getSlideSideForMode( mode ) );
+
+ topComponentRequestActive( tc );
}
+ }
+ }
protected void topComponentClose(TopComponent tc) {
assertEventDispatchThreadWeak();
***************
*** 1204,1221 ****
return null;
}
!
public ModeImpl getPreviousModeForTopComponent(String tcID, ModeImpl slidingMode) {
return getCentral().getModeTopComponentPreviousMode(tcID, slidingMode);
}
! public void setPreviousModeForTopComponent(String tcID, ModeImpl slidingMode, ModeImpl prevMode) {
! getCentral().setModeTopComponentPreviousMode(tcID, slidingMode, prevMode);
}
/** Finds out if given Window is used as separate floating window or not.
*
--- 1243,1343 ----
return null;
}
! /**
! * @return The mode where the given TopComponent had been before it was moved to sliding or separate mode.
! */
public ModeImpl getPreviousModeForTopComponent(String tcID, ModeImpl slidingMode) {
return getCentral().getModeTopComponentPreviousMode(tcID, slidingMode);
}
! /**
! * @return The position (tab index) of the given TopComponent before it was moved to sliding or separate mode.
! */
! public int getPreviousIndexForTopComponent(String tcID, ModeImpl slidingMode) {
! return getCentral().getModeTopComponentPreviousIndex(tcID, slidingMode);
!
}
+ /**
+ * Remember the mode and position where the given TopComponent was before moving into sliding or separate mode.
+ *
+ * @param tcID TopComponent's id
+ * @param currentSlidingMode The mode where the TopComponent is at the moment.
+ * @param prevMode The mode where the TopComponent had been before it was moved to the sliding mode.
+ * @param prevIndex Tab index of the TopComponent before it was moved to the new mode.
+ */
+ public void setPreviousModeForTopComponent(String tcID, ModeImpl slidingMode, ModeImpl prevMode, int prevIndex) {
+ getCentral().setModeTopComponentPreviousMode(tcID, slidingMode, prevMode, prevIndex);
+ }
+
+ /**
+ * Set the state of the TopComponent when the editor is maximized.
+ *
+ * @param tcID TopComponent id
+ * @param docked True if the TopComponent should stay docked in maximized editor mode,
+ * false if it should slide out when the editor is maximized.
+ */
+ public void setTopComponentDockedInMaximizedMode( String tcID, boolean docked ) {
+ getCentral().setTopComponentDockedInMaximizedMode( tcID, docked );
+ }
+
+ /**
+ * Get the state of the TopComponent when the editor is maximized.
+ *
+ * @param tcID TopComponent id.
+ * @return True if the TopComponent should stay docked in maximized editor mode,
+ * false if it should slide out when the editor is maximized.
+ */
+ public boolean isTopComponentDockedInMaximizedMode( String tcID ) {
+ return getCentral().isTopComponentDockedInMaximizedMode( tcID );
+ }
+
+ /**
+ * Set the state of the TopComponent when no mode is maximized.
+ *
+ * @param tcID TopComponent id
+ * @param slided True if the TopComponent is slided in the default mode,
+ * false if it is docked.
+ */
+ public void setTopComponentSlidedInDefaultMode( String tcID, boolean slided ) {
+ getCentral().setTopComponentSlidedInDefaultMode( tcID, slided );
+ }
+
+ /**
+ * Get the state of the TopComponent when no mode is maximized.
+ *
+ * @param tcID TopComponent id.
+ * @return True if the TopComponent is slided in the default mode,
+ * false if it is docked.
+ */
+ public boolean isTopComponentSlidedInDefaultMode( String tcID ) {
+ return getCentral().isTopComponentSlidedInDefaultMode( tcID );
+ }
+
+ /**
+ * Get the state of the TopComponent when it is slided-in.
+ *
+ * @param tcID TopComponent id.
+ * @return true if the TopComponent is maximized when slided-in.
+ */
+ public boolean isTopComponentMaximizedWhenSlidedIn( String tcID ) {
+ return getCentral().isTopComponentMaximizedWhenSlidedIn( tcID );
+ }
+
+ /**
+ * Set the state of the TopComponent when it is slided-in.
+ *
+ * @param tcID TopComponent id.
+ * @param maximized true if the TopComponent is maximized when slided-in.
+ */
+ public void setTopComponentMaximizedWhenSlidedIn( String tcID, boolean maximized ) {
+ getCentral().setTopComponentMaximizedWhenSlidedIn( tcID, maximized );
+ }
+
+ public void userToggledTopComponentSlideInMaximize( String tcID ) {
+ getCentral().userToggledTopComponentSlideInMaximize( tcID );
+ }
+
/** Finds out if given Window is used as separate floating window or not.
*
* @return true if Window is separate floating window, false if window
Index: core/windows/src/org/netbeans/core/windows/persistence/PersistenceManager.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\PersistenceManager.java Base (1.39)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\PersistenceManager.java Locally Modified (Based On 1.39)
***************
*** 943,953 ****
--- 943,955 ----
|| ModeParser.INSTANCE_DTD_ID_2_0.equals(publicId)
|| ModeParser.INSTANCE_DTD_ID_2_1.equals(publicId)
|| ModeParser.INSTANCE_DTD_ID_2_2.equals(publicId)
+ || ModeParser.INSTANCE_DTD_ID_2_3.equals(publicId)
|| GroupParser.INSTANCE_DTD_ID_2_0.equals(publicId)
|| TCGroupParser.INSTANCE_DTD_ID_2_0.equals(publicId)
|| TCRefParser.INSTANCE_DTD_ID_1_0.equals(publicId)
|| TCRefParser.INSTANCE_DTD_ID_2_0.equals(publicId)
|| TCRefParser.INSTANCE_DTD_ID_2_1.equals(publicId)
+ || TCRefParser.INSTANCE_DTD_ID_2_2.equals(publicId)
|| WindowManagerParser.INSTANCE_DTD_ID_1_0.equals(publicId)
|| WindowManagerParser.INSTANCE_DTD_ID_1_1.equals(publicId)
|| WindowManagerParser.INSTANCE_DTD_ID_2_0.equals(publicId)
***************
*** 1103,1108 ****
--- 1105,1113 ----
if (id.equals(mc.selectedTopComponentID)) {
mc.selectedTopComponentID = "";
}
+ if (id.equals(mc.previousSelectedTopComponentID)) {
+ mc.previousSelectedTopComponentID = "";
+ }
boolean removeFromMode = false;
for (int j = 0; j < mc.tcRefConfigs.length; j++) {
if (id.equals(mc.tcRefConfigs[j].tc_id)) {
Index: core/windows/src/org/netbeans/core/windows/actions/SwitchToRecentDocumentAction.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\actions\SwitchToRecentDocumentAction.java Base (1.5)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\actions\SwitchToRecentDocumentAction.java Locally Modified (Based On 1.5)
***************
*** 66,73 ****
if(mode.getKind() == Constants.MODE_KIND_EDITOR) {
// #37030 Unmaximize other mode if needed.
! if(mode != wm.getMaximizedMode()) {
! wm.setMaximizedMode(null);
}
tc.requestActive();
break;
--- 66,73 ----
if(mode.getKind() == Constants.MODE_KIND_EDITOR) {
// #37030 Unmaximize other mode if needed.
! if(mode != wm.getCurrentMaximizedMode()) {
! wm.switchMaximizedMode(null);
}
tc.requestActive();
break;
Index: core/windows/src/org/netbeans/core/windows/persistence/ModeConfig.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\ModeConfig.java Base (1.8)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\persistence\ModeConfig.java Locally Modified (Based On 1.8)
***************
*** 69,80 ****
--- 69,84 ----
/** TopComponent ID -> slided-in size (width or height) - applies to sliding modes only*/
public Map slideInSizes;
+ /** ID of top component that was selected before switching to/from maximized mode */
+ public String previousSelectedTopComponentID;
+
/** Creates a new instance of ModeConfig */
public ModeConfig() {
name = ""; // NOI18N
constraints = new SplitConstraint[0];
selectedTopComponentID = ""; // NOI18N
tcRefConfigs = new TCRefConfig[0];
+ previousSelectedTopComponentID = ""; // NOI18N
}
public boolean equals (Object obj) {
***************
*** 148,153 ****
--- 152,160 ----
} else if( null != slideInSizes || null != modeCfg.slideInSizes ) {
return false;
}
+ if (!previousSelectedTopComponentID.equals(modeCfg.previousSelectedTopComponentID)) {
+ return false;
+ }
return true;
}
***************
*** 181,186 ****
--- 188,194 ----
hash = 37 * hash + slideInSizes.get(key).hashCode();
}
}
+ hash = 37 * hash + previousSelectedTopComponentID.hashCode();
return hash;
}
Index: core/windows/src/org/netbeans/core/windows/model/SplitSubModel.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\SplitSubModel.java Base (1.16)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\SplitSubModel.java Locally Modified (Based On 1.16)
***************
*** 87,92 ****
--- 87,158 ----
return modeNode.getNodeConstraints();
}
+ /**
+ * Find the side (LEFT/RIGHT/BOTTOM) where the TopComponent from the given
+ * mode should slide to. The position is deducted from mode's position relative
+ * to the editor mode in the split hierarchy.
+ *
+ * @param mode Mode
+ * @return The slide side for TopComponents from the given mode.
+ */
+ public String getSlideSideForMode( ModeImpl mode ) {
+ ModeNode modeNode = getModeNode( mode );
+ return getPositionRelativeToEditor( modeNode, modeNode.getParent() );
+ }
+
+ /**
+ * Find recursively the position of the given Node relative to editor node.
+ *
+ * @param node The Node who's position is being compared with editor node's position.
+ * @param parent Node's split parent.
+ * @return LEFT/RIGHT/BOTTOM/TOP according to Node's position in the hierarchy.
+ */
+ private String getPositionRelativeToEditor( Node node, SplitNode parent ) {
+ if( null == parent )
+ return Constants.LEFT; //fallback - we're at the top level of the hierarchy
+
+ Node editorNode = getEditorChildNode( parent );
+ if( null != editorNode ) {
+ //the split parent contains a node or sub-tree with editor node
+ //so let's compare their positions
+ int orientation = parent.getOrientation();
+ int nodeIndex = parent.getChildIndex( node );
+ int editorIndex = parent.getChildIndex( editorNode );
+ if( orientation == Constants.VERTICAL ) {
+ if( nodeIndex > editorIndex )
+ return Constants.BOTTOM;
+ return Constants.TOP; //TODO: is this really OK?
+ } else {
+ if( nodeIndex < editorIndex )
+ return Constants.LEFT;
+ return Constants.RIGHT;
+ }
+ }
+ //try one level up in the tree hierarchy
+ return getPositionRelativeToEditor( parent, parent.getParent() );
+ }
+
+ /**
+ * Find the child node that contains the editor node or the child that has the editor
+ * node in its sub-tree.
+ *
+ * @param split SplitNode searched for editor node.
+ * @return Node which is the editor node or which has the editor node in its sub-tree.
+ */
+ private Node getEditorChildNode( SplitNode split ) {
+ List children = split.getChildren();
+ for( Iterator i=children.iterator(); i.hasNext(); ) {
+ Node node = i.next();
+ if( node instanceof EditorSplitSubModel.EditorNode
+ ||
+ node instanceof SplitNode && null != getEditorChildNode( (SplitNode)node ) ) {
+ return node;
+ }
+ }
+ return null;
+ }
+
+
/** Adds mode which is Node
* with specified constraints designating the path in model.
* Note: It is important to know that adding of mode can affect the structure
***************
*** 1020,1025 ****
--- 1086,1097 ----
return false;
}
+ if(mode.getKind() == Constants.MODE_KIND_EDITOR ) {
+ WindowManagerImpl wm = WindowManagerImpl.getInstance();
+ if( null != wm.getEditorMaximizedMode() && wm.getEditorMaximizedMode() != mode )
+ return false;
+ }
+
return true;
}
Index: core/windows/src/org/netbeans/core/windows/model/DockingStatus.java
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\DockingStatus.java No Base Revision
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\model\DockingStatus.java Locally New
***************
*** 1,0 ****
--- 1,129 ----
+ /*
+ * The contents of this file are subject to the terms of the Common Development
+ * and Distribution License (the License). You may not use this file except in
+ * compliance with the License.
+ *
+ * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
+ * or http://www.netbeans.org/cddl.txt.
+ *
+ * When distributing Covered Code, include this CDDL Header Notice in each file
+ * and include the License file at http://www.netbeans.org/cddl.txt.
+ * If applicable, add the following below the CDDL Header, with the fields
+ * enclosed by brackets [] replaced by your own identifying information:
+ * "Portions Copyrighted [year] [name of copyright owner]"
+ *
+ * The Original Software is NetBeans. The Initial Developer of the Original
+ * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
+ * Microsystems, Inc. All Rights Reserved.
+ */
+
+ package org.netbeans.core.windows.model;
+
+ import java.util.ArrayList;
+ import java.util.Iterator;
+ import java.util.List;
+ import java.util.Set;
+ import org.netbeans.core.windows.Constants;
+ import org.netbeans.core.windows.ModeImpl;
+ import org.netbeans.core.windows.WindowManagerImpl;
+ import org.openide.windows.Mode;
+ import org.openide.windows.TopComponent;
+
+ /**
+ * This class stores the snapshot of the docking status (docked/slided-out) of TopComponents
+ * when switching to or from maximized mode.
+ *
+ * @author S. Aubrecht
+ */
+ public class DockingStatus {
+
+ protected Model model;
+ protected List docked = new ArrayList(10);
+ protected List slided = new ArrayList(10);
+
+ /** Creates a new instance of DockingStatus */
+ DockingStatus( Model model ) {
+ this.model = model;
+ }
+
+ /**
+ * Remember which TopComponents are docked and which are slided.
+ */
+ public void mark() {
+ Set modes = model.getModes();
+ for( Iterator i=modes.iterator(); i.hasNext(); ) {
+ ModeImpl modeImpl = i.next();
+ if( modeImpl.getState() == Constants.MODE_STATE_SEPARATED )
+ continue;
+
+ List views = model.getModeOpenedTopComponentsIDs( modeImpl );
+ if( modeImpl.getKind() == Constants.MODE_KIND_VIEW ) {
+ docked.addAll( views );
+ slided.removeAll( views );
+ } else if( modeImpl.getKind() == Constants.MODE_KIND_SLIDING ) {
+ docked.removeAll( views );
+ slided.addAll( views );
+ }
+ }
+ }
+
+ /**
+ * @return True if the TopComponent should switch to docked status
+ * (Used when switching to/from maximized mode)
+ */
+ public boolean shouldDock( String tcID ) {
+ return null != tcID && docked.contains( tcID );
+ }
+
+ /**
+ * @return True if the TopComponent should slide-out
+ * (Used when switching to/from maximized mode)
+ */
+ public boolean shouldSlide( String tcID ) {
+ return null != tcID && slided.contains( tcID );
+ }
+
+ /**
+ * Adds 'docked' TopComponent (used when the window system loads)
+ */
+ public void addDocked( String tcID ) {
+ if( null != tcID ) {
+ docked.add( tcID );
+ slided.remove( tcID );
+ }
+ }
+
+ /**
+ * Adds 'slided-out' TopComponent (used when the window system loads)
+ */
+ public void addSlided( String tcID ) {
+ if( null != tcID ) {
+ slided.add( tcID );
+ docked.remove( tcID );
+ }
+ }
+
+ /**
+ * (Used when the window system gets stored)
+ * @return True if the given TopComponent was docked when its snapshot was taken.
+ */
+ public boolean isDocked( String tcID ) {
+ return null != tcID && docked.contains( tcID );
+ }
+
+ /**
+ * (Used when the window system gets stored)
+ * @return True if the given TopComponent was slided when its snapshot was taken.
+ */
+ public boolean isSlided( String tcID ) {
+ return null != tcID && slided.contains( tcID );
+ }
+
+ /**
+ * Reset to defaults
+ */
+ void clear() {
+ docked.clear();
+ slided.clear();
+ }
+ }
Index: core/windows/src/org/netbeans/core/windows/resources/mode-properties2_2.dtd
*** D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\mode-properties2_2.dtd Base (1.1)
--- D:\projects\nb\core\windows\src\org\netbeans\core\windows\resources\mode-properties2_2.dtd Locally Modified (Based On 1.1)
***************
*** 75,82 ****
>
!
!
--- 2,15 ----
+