Package com.google.eclipse.javascript.jstestdriver.ui.view

Source Code of com.google.eclipse.javascript.jstestdriver.ui.view.BrowserButtonPanel

/*
* Copyright 2009 Google Inc.
*
* 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.google.eclipse.javascript.jstestdriver.ui.view;

import com.google.eclipse.javascript.jstestdriver.core.ServerController;
import com.google.eclipse.javascript.jstestdriver.core.ServiceLocator;
import com.google.eclipse.javascript.jstestdriver.core.model.Browser;
import com.google.eclipse.javascript.jstestdriver.core.model.JstdServerListener;
import com.google.eclipse.javascript.jstestdriver.ui.Activator;
import com.google.eclipse.javascript.jstestdriver.ui.Icons;
import com.google.eclipse.javascript.jstestdriver.ui.prefs.WorkbenchPreferencePage;
import com.google.eclipse.javascript.jstestdriver.ui.view.actions.BrowserLaunchCapableSelectionListener;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;

import java.util.Observable;
import java.util.Observer;

/**
* Shows a list of browser buttons, highlighted if captured.
*
* @author shyamseshadri@gmail.com (Shyam Seshadri)
*/
public class BrowserButtonPanel extends Composite implements Observer {

  private final Button safariIcon;
  private final Button chromeIcon;
  private final Button ieIcon;
  private final Button ffIcon;
  private final Button operaIcon;
  private final Icons icons;

  public BrowserButtonPanel(Composite parent, int style) {
    super(parent, style);
    icons = Activator.getDefault().getIcons();
    IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore();
    GridLayout gridLayout = new GridLayout(5, true);
    gridLayout.horizontalSpacing = 0;
    gridLayout.makeColumnsEqualWidth = true;
    gridLayout.marginWidth = 0;
    setLayout(gridLayout);
    GridData browserLayoutData = new GridData();
    browserLayoutData.grabExcessHorizontalSpace = true;
    browserLayoutData.horizontalAlignment = SWT.FILL;
    setLayoutData(browserLayoutData);

    GridData buttonGridData = new GridData();
    buttonGridData.horizontalAlignment = SWT.CENTER;
    buttonGridData.grabExcessHorizontalSpace = true;
    buttonGridData.minimumWidth = 42;
    ServerController controller = ServiceLocator.getService(ServerController.class);
    ffIcon = new Button(this, SWT.FLAT);
    ffIcon.setImage(icons.getFirefoxDisabledIcon());
    ffIcon.addSelectionListener(new BrowserLaunchCapableSelectionListener(
        preferenceStore, WorkbenchPreferencePage.FIREFOX_PATH, controller));
    ffIcon.setLayoutData(buttonGridData);

    chromeIcon = new Button(this, SWT.FLAT);
    chromeIcon.setImage(icons.getChromeDisabledIcon());
    chromeIcon.addSelectionListener(new BrowserLaunchCapableSelectionListener(
        preferenceStore, WorkbenchPreferencePage.CHROME_PATH, controller));
    chromeIcon.setLayoutData(buttonGridData);

    safariIcon = new Button(this, SWT.FLAT);
    safariIcon.setImage(icons.getSafariDisabledIcon());
    safariIcon.addSelectionListener(new BrowserLaunchCapableSelectionListener(
        preferenceStore, WorkbenchPreferencePage.SAFARI_PATH, controller));
    safariIcon.setLayoutData(buttonGridData);

    ieIcon = new Button(this, SWT.FLAT);
    ieIcon.setImage(icons.getIEDisabledIcon());
    ieIcon.addSelectionListener(new BrowserLaunchCapableSelectionListener(
        preferenceStore, WorkbenchPreferencePage.IE_PATH, controller));
    ieIcon.setLayoutData(buttonGridData);

    operaIcon = new Button(this, SWT.FLAT);
    operaIcon.setImage(icons.getOperaDisabledIcon());
    operaIcon.addSelectionListener(new BrowserLaunchCapableSelectionListener(
        preferenceStore, WorkbenchPreferencePage.OPERA_PATH, controller));
    operaIcon.setLayoutData(buttonGridData);
  }

  /**
   * Gets notified when the {@link JstdServerListener} changes. It is passed a reference of
   * the same, and is expected to update the images based on whether browsers are captured or not.
   */
  @Override
  public void update(Observable o, Object arg) {
    final JstdServerListener data = (JstdServerListener) arg;
    Display.getDefault().asyncExec(new Runnable() {
      @Override
      public void run() {
        if (!ffIcon.isDisposed()) {
          ffIcon.setImage(getImage(Browser.FIREFOX.getImagePath(),
              data.getSlaves(Browser.FIREFOX).isEmpty()));
          ffIcon.update();
          ffIcon.redraw();
        }
        if (!chromeIcon.isDisposed()) {
          chromeIcon.setImage(getImage(Browser.CHROME.getImagePath(),
              data.getSlaves(Browser.CHROME).isEmpty()));
          chromeIcon.update();
          chromeIcon.redraw();
        }
        if (!ieIcon.isDisposed()) {
          ieIcon.setImage(getImage(Browser.IE.getImagePath(),
              data.getSlaves(Browser.IE).isEmpty()));
        }
        if (!safariIcon.isDisposed()) {
          safariIcon.setImage(getImage(Browser.SAFARI.getImagePath(),
              data.getSlaves(Browser.SAFARI).isEmpty()));
        }
        if (!operaIcon.isDisposed()) {
          operaIcon.setImage(getImage(Browser.OPERA.getImagePath(),
              data.getSlaves(Browser.OPERA).isEmpty()));
        }
      }
    });
  }

  private Image getImage(String path, boolean empty) {
    return empty ? icons.getGrayedIcon(path) : icons.getImage(path);
  }
}
TOP

Related Classes of com.google.eclipse.javascript.jstestdriver.ui.view.BrowserButtonPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.