/******************************************************************************* * See the NOTICE file distributed with this work for additional information * regarding copyright ownership. * * 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 hr.fer.zemris.vhdllab.platform.support; import hr.fer.zemris.vhdllab.view.TabbedEditorsView; import hr.fer.zemris.vhdllab.view.explorer.ProjectExplorerView; import java.awt.BorderLayout; import java.awt.event.ComponentAdapter; import java.awt.event.ComponentEvent; import java.util.ArrayList; import java.util.List; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.apache.log4j.AppenderSkeleton; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.spi.LoggingEvent; import org.springframework.richclient.application.PageComponent; import org.springframework.richclient.application.PageLayoutBuilder; import org.springframework.richclient.application.support.AbstractApplicationPage; public class SimplisticEclipseBasedApplicationPage extends AbstractApplicationPage implements PageLayoutBuilder { private final List<PageComponent> views = new ArrayList<PageComponent>(); boolean addingView; private JPanel projectExplorerPane; private JPanel editorsPane; private JTabbedPane viewsTabbedPane; @Override protected JComponent createControl() { projectExplorerPane = new JPanel(new BorderLayout()); editorsPane = new JPanel(new BorderLayout()); viewsTabbedPane = new JTabbedPane(JTabbedPane.TOP, JTabbedPane.WRAP_TAB_LAYOUT); viewsTabbedPane.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { // if we're adding a component, ignore change of active // component if (!addingView && getViewsTabbedPane().getSelectedIndex() >= 0) { setActiveComponent(getComponent(getViewsTabbedPane() .getSelectedIndex())); } } }); final double horizontalLocation = 0.15; final double verticalLocation = 0.75; final JSplitPane horizontalPane = new JSplitPane( JSplitPane.HORIZONTAL_SPLIT, projectExplorerPane, editorsPane); horizontalPane.setDividerLocation(horizontalLocation); final JSplitPane verticalPane = new JSplitPane( JSplitPane.VERTICAL_SPLIT, horizontalPane, viewsTabbedPane); verticalPane.setDividerLocation(verticalLocation); JPanel maximizedPanel = new JPanel(new BorderLayout()); maximizedPanel.add(verticalPane, BorderLayout.CENTER); JPanel control = new JPanel(new BorderLayout()); control.add(maximizedPanel, BorderLayout.CENTER); control.addComponentListener(new ComponentAdapter() { @Override public void componentResized(ComponentEvent e) { horizontalPane.setDividerLocation(horizontalLocation); verticalPane.setDividerLocation(verticalLocation); } }); this.getPageDescriptor().buildInitialLayout(this); if (viewsTabbedPane.getTabCount() > 0) { viewsTabbedPane.setSelectedIndex(0); } Logger.getRootLogger().addAppender(new AppenderSkeleton() { @Override public boolean requiresLayout() { return false; } @Override public void close() { } @SuppressWarnings("synthetic-access") @Override protected void append(LoggingEvent event) { if (event.getLevel().equals(Level.INFO)) { Object message = event.getMessage(); if (message != null) { getActiveWindow().getStatusBar().setMessage( message.toString()); } } } }); return control; } @Override public void addView(String viewDescriptorId) { showView(viewDescriptorId); } @Override protected void doAddPageComponent(PageComponent pageComponent) { if (pageComponent instanceof ProjectExplorerView) { projectExplorerPane.add(pageComponent.getContext().getPane() .getControl(), BorderLayout.CENTER); projectExplorerPane.revalidate(); projectExplorerPane.repaint(); } else if (pageComponent instanceof TabbedEditorsView) { editorsPane.add(pageComponent.getContext().getPane().getControl(), BorderLayout.CENTER); editorsPane.revalidate(); editorsPane.repaint(); } else { try { addingView = true; views.add(pageComponent); Icon viewIcon = getIconSource().getIcon("view.icon"); viewsTabbedPane.addTab(pageComponent.getDisplayName(), viewIcon, pageComponent.getContext().getPane() .getControl(), pageComponent.getCaption()); } finally { addingView = false; } } } @Override protected void doRemovePageComponent(PageComponent pageComponent) { if (pageComponent instanceof ProjectExplorerView) { projectExplorerPane.removeAll(); projectExplorerPane.revalidate(); projectExplorerPane.repaint(); } else if (pageComponent instanceof TabbedEditorsView) { editorsPane.removeAll(); editorsPane.revalidate(); editorsPane.repaint(); } else { viewsTabbedPane.removeTabAt(indexOf(pageComponent)); views.remove(pageComponent); } } @Override protected boolean giveFocusTo(PageComponent pageComponent) { if (pageComponent instanceof ProjectExplorerView) { projectExplorerPane.requestFocusInWindow(); } else if (pageComponent instanceof TabbedEditorsView) { editorsPane.requestFocusInWindow(); } else { if (!views.contains(pageComponent)) { return false; } viewsTabbedPane.setSelectedIndex(indexOf(pageComponent)); } return true; } private int indexOf(PageComponent component) { return views.indexOf(component); } PageComponent getComponent(int index) { return views.get(index); } public JTabbedPane getViewsTabbedPane() { return viewsTabbedPane; } }