Coverage Report - org.jtheque.core.managers.view.impl.frame.MainView
 
Classes in this File Line Coverage Branch Coverage Complexity
MainView
0 %
0/72
0 %
0/12
1.316
MainView$1
0 %
0/7
N/A
1.316
MainView$TempWindowAdapter
0 %
0/3
N/A
1.316
 
 1  
 package org.jtheque.core.managers.view.impl.frame;
 2  
 
 3  
 /*
 4  
  * This file is part of JTheque.
 5  
  *
 6  
  * JTheque is free software: you can redistribute it and/or modify
 7  
  * it under the terms of the GNU General Public License as published by
 8  
  * the Free Software Foundation, either version 3 of the License.
 9  
  *
 10  
  * JTheque is distributed in the hope that it will be useful,
 11  
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 12  
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13  
  * GNU General Public License for more details.
 14  
  *
 15  
  * You should have received a copy of the GNU General Public License
 16  
  * along with JTheque.  If not, see <http://www.gnu.org/licenses/>.
 17  
  */
 18  
 
 19  
 import org.jdesktop.jxlayer.JXLayer;
 20  
 import org.jtheque.core.managers.Managers;
 21  
 import org.jtheque.core.managers.lifecycle.listeners.TitleEvent;
 22  
 import org.jtheque.core.managers.lifecycle.listeners.TitleListener;
 23  
 import org.jtheque.core.managers.view.MainController;
 24  
 import org.jtheque.core.managers.view.SplashManager;
 25  
 import org.jtheque.core.managers.view.able.IMainView;
 26  
 import org.jtheque.core.managers.view.able.IViewManager;
 27  
 import org.jtheque.core.managers.view.impl.components.InfiniteWaitUI;
 28  
 import org.jtheque.core.managers.view.impl.components.JThequeStateBar;
 29  
 import org.jtheque.core.managers.view.impl.components.LayerTabbedPane;
 30  
 import org.jtheque.core.managers.view.impl.components.MainTabbedPane;
 31  
 import org.jtheque.core.managers.view.impl.components.ViewContainer;
 32  
 import org.jtheque.core.managers.view.impl.components.menu.JMenuBarJTheque;
 33  
 import org.jtheque.core.managers.view.impl.frame.abstraction.SwingFrameView;
 34  
 import org.jtheque.core.utils.ui.Borders;
 35  
 import org.jtheque.core.utils.ui.PanelBuilder;
 36  
 import org.jtheque.utils.ui.GridBagUtils;
 37  
 import org.jtheque.utils.ui.SwingUtils;
 38  
 
 39  
 import javax.swing.JComponent;
 40  
 import javax.swing.JFrame;
 41  
 import javax.swing.JPanel;
 42  
 import java.awt.Color;
 43  
 import java.awt.Component;
 44  
 import java.awt.Cursor;
 45  
 import java.awt.Dimension;
 46  
 import java.awt.Insets;
 47  
 import java.awt.event.WindowAdapter;
 48  
 import java.awt.event.WindowEvent;
 49  
 import java.awt.event.WindowListener;
 50  
 
 51  
 /**
 52  
  * The main view of JTheque.
 53  
  *
 54  
  * @author Baptiste Wicht
 55  
  */
 56  0
 public final class MainView extends SwingFrameView implements TitleListener, IMainView {
 57  
     private LayerTabbedPane tab;
 58  
 
 59  
     private MainController controller;
 60  
 
 61  
     private static final int DEFAULT_WIDTH = 830;
 62  
     private static final int DEFAULT_HEIGHT = 645;
 63  
 
 64  
     private WindowListener tempListener;
 65  
     private IViewManager viewManager;
 66  
 
 67  
     private JXLayer<JComponent> content;
 68  
 
 69  
     private InfiniteWaitUI waitUI;
 70  
 
 71  
     /**
 72  
      * Construct a new MainView.
 73  
      */
 74  
     public MainView() {
 75  0
         super();
 76  
 
 77  0
         build();
 78  0
     }
 79  
 
 80  
     /**
 81  
      * Build the view.
 82  
      */
 83  
     private void build() {
 84  0
         setTitle(Managers.getCore().getLifeCycleManager().getTitle());
 85  0
         setResizable(false);
 86  0
         setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
 87  
 
 88  0
         tempListener = new TempWindowAdapter();
 89  
 
 90  0
         addWindowListener(tempListener);
 91  
 
 92  0
         JComponent background = new JPanel();
 93  0
         background.setBackground(Color.black);
 94  
 
 95  0
         content = new JXLayer<JComponent>(background);
 96  
 
 97  0
         setContentPane(content);
 98  
 
 99  0
         setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
 100  0
         setMinimumSize(new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT));
 101  
 
 102  0
         SwingUtils.centerFrame(this);
 103  
 
 104  0
         Managers.getCore().getLifeCycleManager().addTitleListener(this);
 105  0
     }
 106  
 
 107  
     /**
 108  
      * Return the content pane.
 109  
      *
 110  
      * @return the content pane.
 111  
      */
 112  
     public JXLayer<JComponent> getContent() {
 113  0
         return content;
 114  
     }
 115  
 
 116  
     @Override
 117  
     public void fill() {
 118  0
         viewManager = Managers.getManager(IViewManager.class);
 119  
 
 120  0
         setIconImage(getDefaultWindowIcon());
 121  0
         setResizable(true);
 122  0
         controller = new MainController();
 123  
 
 124  0
         content = buildContentPane();
 125  
 
 126  0
         SwingUtils.inEdt(new Runnable() {
 127  
             @Override
 128  
             public void run() {
 129  0
                 setContentPane(content);
 130  
 
 131  0
                 setJMenuBar(new JMenuBarJTheque());
 132  
 
 133  0
                 removeWindowListener(tempListener);
 134  
 
 135  0
                 addWindowListener(controller);
 136  
 
 137  0
                 viewManager.configureView(MainView.this, "main", DEFAULT_WIDTH, DEFAULT_HEIGHT);
 138  0
             }
 139  
         });
 140  0
     }
 141  
 
 142  
     @Override
 143  
     public void startWait() {
 144  0
         installWaitUIIfNecessary();
 145  0
         content.setUI(waitUI);
 146  0
         waitUI.start();
 147  0
         setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
 148  0
     }
 149  
 
 150  
     @Override
 151  
     public void stopWait() {
 152  0
         if (waitUI != null) {
 153  0
             waitUI.stop();
 154  0
             setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
 155  0
             content.setUI(null);
 156  
         }
 157  0
     }
 158  
 
 159  
     /**
 160  
      * Create the wait UI only if this has not been done before.
 161  
      */
 162  
     private void installWaitUIIfNecessary() {
 163  0
         if (waitUI == null) {
 164  0
             waitUI = new InfiniteWaitUI(content);
 165  
         }
 166  0
     }
 167  
 
 168  
     @Override
 169  
     public void setGlassPane(Component glassPane) {
 170  0
         if (glassPane == null) {
 171  0
             content.setGlassPane(content.createGlassPane());
 172  
         } else {
 173  0
             content.setGlassPane((JPanel) glassPane);
 174  
         }
 175  0
     }
 176  
 
 177  
     @Override
 178  
     public Component getGlassPane() {
 179  0
         return content.getGlassPane();
 180  
     }
 181  
 
 182  
     /**
 183  
      * Build the content pane.
 184  
      *
 185  
      * @return le contentPane
 186  
      */
 187  
     private JXLayer<JComponent> buildContentPane() {
 188  0
         PanelBuilder builder = new PanelBuilder();
 189  0
         builder.getPanel().setBorder(Borders.EMPTY_BORDER);
 190  
 
 191  0
         if (viewManager.isTabMainComponent()) {
 192  0
             if (Managers.getManager(IViewManager.class).getTabComponents().isEmpty()) {
 193  0
                 Component emptyPanel = new JPanel();
 194  0
                 emptyPanel.setBackground(viewManager.getViewDefaults().getBackgroundColor());
 195  
 
 196  0
                 viewManager.setMainComponent(new ViewContainer(emptyPanel));
 197  
 
 198  0
                 builder.add(emptyPanel, builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.FIRST_LINE_START, 1.0, 1.0));
 199  0
             } else {
 200  0
                 tab = new MainTabbedPane();
 201  0
                 tab.addChangeListener(controller);
 202  
 
 203  0
                 builder.add(tab, builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.FIRST_LINE_START, 1.0, 1.0));
 204  
             }
 205  
         } else {
 206  0
             builder.setDefaultInsets(new Insets(0, 0, 0, 0));
 207  0
             builder.add((Component) viewManager.getMainComponent().getImpl(), builder.gbcSet(0, 0, GridBagUtils.BOTH, GridBagUtils.FIRST_LINE_START, 1.0, 1.0));
 208  
         }
 209  
 
 210  0
         builder.add(new JThequeStateBar(), builder.gbcSet(0, 1, GridBagUtils.HORIZONTAL, GridBagUtils.LAST_LINE_START));
 211  
 
 212  0
         return new JXLayer<JComponent>(builder.getPanel());
 213  
     }
 214  
 
 215  
     @Override
 216  
     public LayerTabbedPane getTabbedPane() {
 217  0
         return tab;
 218  
     }
 219  
 
 220  
     @Override
 221  
     public void titleUpdated(TitleEvent event) {
 222  0
         setTitle(event.getTitle());
 223  0
     }
 224  
 
 225  
     @Override
 226  
     public void closeDown() {
 227  0
         if (viewManager != null) {
 228  0
             viewManager.saveState(this, "main");
 229  
         }
 230  
 
 231  0
         super.closeDown();
 232  0
     }
 233  
 
 234  
     @Override
 235  
     public boolean validateContent() {
 236  0
         return true;
 237  
     }
 238  
 
 239  
     @Override
 240  
     public void setSelectedComponent(Object component) {
 241  0
         tab.setSelectedComponent((Component) component);
 242  0
     }
 243  
 
 244  
     @Override
 245  
     public JComponent getSelectedComponent() {
 246  0
         return tab.getSelectedComponent();
 247  
     }
 248  
     
 249  
     /**
 250  
      * Return the instance of the main view.
 251  
      *
 252  
      * @return The instance of the main view.
 253  
      */
 254  
     public static MainView get() {
 255  0
         return SplashManager.getInstance().getMainView();
 256  
     }
 257  
 
 258  
     /**
 259  
      * The temporary window adapter.
 260  
      *
 261  
      * @author Baptiste Wicht
 262  
      */
 263  0
     private static final class TempWindowAdapter extends WindowAdapter {
 264  
         @Override
 265  
         public void windowClosing(WindowEvent e) {
 266  0
             Managers.getCore().getLifeCycleManager().exit();
 267  0
         }
 268  
     }
 269  
 }