| /* |
| * Copyright 2000-2009 JetBrains s.r.o. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.intellij.openapi.wm.impl; |
| |
| import com.intellij.openapi.diagnostic.Logger; |
| import com.intellij.openapi.wm.ToolWindowAnchor; |
| |
| import java.util.Iterator; |
| import java.util.Stack; |
| |
| /** |
| * This is stack of tool window that were replaced by another tool windows. |
| * |
| * @author Vladimir Kondratyev |
| */ |
| final class SideStack { |
| private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.wm.impl.SideStack"); |
| private final Stack myStack; |
| |
| SideStack() { |
| myStack = new Stack(); |
| } |
| |
| /** |
| * Pushes <code>info</code> into the stack. The method stores cloned copy of original <code>info</code>. |
| */ |
| void push(final WindowInfoImpl info) { |
| LOG.assertTrue(info.isDocked()); |
| LOG.assertTrue(!info.isAutoHide()); |
| myStack.push(info.copy()); |
| } |
| |
| WindowInfoImpl pop(final ToolWindowAnchor anchor) { |
| for (int i = myStack.size() - 1; true; i--) { |
| final WindowInfoImpl info = (WindowInfoImpl)myStack.get(i); |
| if (anchor == info.getAnchor()) { |
| myStack.remove(i); |
| return info; |
| } |
| } |
| } |
| |
| /** |
| * @return <code>true</code> if and only if there is window in the state with the same |
| * <code>anchor</code> as the specified <code>info</code>. |
| */ |
| boolean isEmpty(final ToolWindowAnchor anchor) { |
| for (int i = myStack.size() - 1; i > -1; i--) { |
| final WindowInfoImpl info = (WindowInfoImpl)myStack.get(i); |
| if (anchor == info.getAnchor()) { |
| return false; |
| } |
| } |
| return true; |
| } |
| |
| /** |
| * Removes all <code>WindowInfo</code>s with the specified <code>id</code>. |
| */ |
| void remove(final String id) { |
| for (Iterator i = myStack.iterator(); i.hasNext();) { |
| final WindowInfoImpl info = (WindowInfoImpl)i.next(); |
| if (id.equals(info.getId())) { |
| i.remove(); |
| } |
| } |
| } |
| |
| void clear() { |
| myStack.clear(); |
| } |
| } |