/* * Copyright (c) 1998-2017 by Richard A. Wilkes. All rights reserved. * * This Source Code Form is subject to the terms of the Mozilla Public * License, version 2.0. If a copy of the MPL was not distributed with * this file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This Source Code Form is "Incompatible With Secondary Licenses", as * defined by the Mozilla Public License, version 2.0. */ package com.trollworks.gcs.common; import com.trollworks.gcs.app.GCSImages; import com.trollworks.gcs.library.LibraryExplorerDockable; import com.trollworks.toolkit.annotation.Localize; import com.trollworks.toolkit.ui.GraphicsUtilities; import com.trollworks.toolkit.ui.menu.edit.JumpToSearchTarget; import com.trollworks.toolkit.ui.menu.file.SignificantFrame; import com.trollworks.toolkit.ui.widget.AppWindow; import com.trollworks.toolkit.ui.widget.BaseWindow; import com.trollworks.toolkit.ui.widget.Toolbar; import com.trollworks.toolkit.ui.widget.dock.Dock; import com.trollworks.toolkit.ui.widget.dock.DockContainer; import com.trollworks.toolkit.ui.widget.dock.DockLocation; import com.trollworks.toolkit.ui.widget.dock.Dockable; import com.trollworks.toolkit.utility.Geometry; import com.trollworks.toolkit.utility.Localization; import java.awt.BorderLayout; import java.awt.Container; import java.awt.KeyboardFocusManager; import java.awt.Rectangle; import java.awt.Window; import java.util.ArrayList; /** The workspace, where all files can be viewed and edited. */ public class Workspace extends AppWindow implements SignificantFrame, JumpToSearchTarget { @Localize("GURPS Workspace") private static String TITLE; static { Localization.initialize(); } private Toolbar mToolbar; private Dock mDock; /** @return The {@link Workspace}. */ public static Workspace get() { Window window = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow(); if (window == null || !(window instanceof Workspace)) { ArrayList<Workspace> windows = BaseWindow.getWindows(Workspace.class); if (!windows.isEmpty()) { window = windows.get(0); } } if (window == null) { window = new Workspace(); } return (Workspace) window; } private Workspace() { super(TITLE, GCSImages.getAppIcons()); Container content = getContentPane(); mToolbar = new Toolbar(); content.add(mToolbar, BorderLayout.NORTH); mDock = new Dock(); content.add(mDock, BorderLayout.CENTER); LibraryExplorerDockable libraryExplorer = new LibraryExplorerDockable(); mDock.dock(libraryExplorer, DockLocation.WEST); mDock.getLayout().findLayout(libraryExplorer.getDockContainer()).setDividerPosition(200); restoreBounds(); setVisible(true); } @Override public void pack() { super.pack(); setBounds(Geometry.inset(20, new Rectangle(GraphicsUtilities.getMaximumWindowBounds()))); } @Override public String getWindowPrefsPrefix() { return "workspace."; //$NON-NLS-1$ } /** @return The {@link Dock}. */ public Dock getDock() { return mDock; } @Override public boolean isJumpToSearchAvailable() { DockContainer dc = mDock.getFocusedDockContainer(); if (dc != null) { Dockable dockable = dc.getCurrentDockable(); if (dockable instanceof JumpToSearchTarget) { return ((JumpToSearchTarget) dockable).isJumpToSearchAvailable(); } } return false; } @Override public void jumpToSearchField() { DockContainer dc = mDock.getFocusedDockContainer(); if (dc != null) { Dockable dockable = dc.getCurrentDockable(); if (dockable instanceof JumpToSearchTarget) { ((JumpToSearchTarget) dockable).jumpToSearchField(); } } } }