/projects/azureus-4.7.0.2/com/aelitis/azureus/ui/swt/views/TopBarView.java
Java | 433 lines | 337 code | 44 blank | 52 comment | 80 complexity | 5c3a5463cd29c054c8f0df569e4e0a46 MD5 | raw file
- /**
- * Created on Jun 27, 2008
- *
- * Copyright 2008 Vuze, Inc. All rights reserved.
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; version 2 of the License only.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
- package com.aelitis.azureus.ui.swt.views;
- import java.util.ArrayList;
- import java.util.List;
- import org.eclipse.swt.SWT;
- import org.eclipse.swt.events.*;
- import org.eclipse.swt.graphics.Point;
- import org.eclipse.swt.graphics.Rectangle;
- import org.eclipse.swt.graphics.Transform;
- import org.eclipse.swt.layout.*;
- import org.eclipse.swt.widgets.*;
- import org.gudy.azureus2.core3.config.COConfigurationManager;
- import org.gudy.azureus2.core3.internat.MessageText;
- import org.gudy.azureus2.core3.util.AERunnable;
- import org.gudy.azureus2.core3.util.Debug;
- import org.gudy.azureus2.ui.swt.Utils;
- import org.gudy.azureus2.ui.swt.plugins.UISWTInstance;
- import org.gudy.azureus2.ui.swt.plugins.UISWTViewEvent;
- import org.gudy.azureus2.ui.swt.pluginsimpl.*;
- import org.gudy.azureus2.ui.swt.views.stats.VivaldiView;
- import com.aelitis.azureus.core.AzureusCore;
- import com.aelitis.azureus.core.AzureusCoreFactory;
- import com.aelitis.azureus.core.AzureusCoreRunningListener;
- import com.aelitis.azureus.ui.UIFunctionsManager;
- import com.aelitis.azureus.ui.common.updater.UIUpdatable;
- import com.aelitis.azureus.ui.skin.SkinConstants;
- import com.aelitis.azureus.ui.swt.UIFunctionsManagerSWT;
- import com.aelitis.azureus.ui.swt.skin.*;
- import com.aelitis.azureus.ui.swt.skin.SWTSkinButtonUtility.ButtonListenerAdapter;
- import com.aelitis.azureus.ui.swt.views.skin.SkinView;
- /**
- * @author TuxPaper
- * @created Jun 27, 2008
- *
- */
- public class TopBarView
- extends SkinView
- {
- private List<UISWTViewCore> topbarViews = new ArrayList<UISWTViewCore>();
- private UISWTViewCore activeTopBar;
- private SWTSkin skin;
- private org.eclipse.swt.widgets.List listPlugins;
- private Composite cPluginArea;
- private static boolean registeredCoreSubViews = false;
-
- public Object skinObjectInitialShow(SWTSkinObject skinObject, Object params) {
- this.skin = skinObject.getSkin();
-
- skin.addListener("topbar-plugins", new SWTSkinObjectListener() {
- public Object eventOccured(SWTSkinObject skinObject, int eventType,
- Object params) {
- if (eventType == SWTSkinObjectListener.EVENT_SHOW) {
- skin.removeListener("topbar-plugins", this);
- // building needs UISWTInstance, which needs core.
- AzureusCoreFactory.addCoreRunningListener(new AzureusCoreRunningListener() {
- public void azureusCoreRunning(AzureusCore core) {
- Utils.execSWTThreadLater(0, new AERunnable() {
- public void runSupport() {
- buildTopBarViews();
- }
- });
- }
- });
- }
- return null;
- }
- });
- // trigger autobuild
- skin.getSkinObject("topbar-area-plugin");
- return null;
- }
- /**
- * @param skinObject
- *
- * @since 3.0.1.1
- */
- public void buildTopBarViews() {
- // TODO actually use plugins..
- SWTSkinObject skinObject = skin.getSkinObject("topbar-plugins");
- if (skinObject == null) {
- return;
- }
- try {
- cPluginArea = (Composite) skinObject.getControl();
- final UIUpdatable updatable = new UIUpdatable() {
- public void updateUI() {
- Object[] views = topbarViews.toArray();
- for (int i = 0; i < views.length; i++) {
- try {
- UISWTViewCore view = (UISWTViewCore) views[i];
- if (view.getComposite().isVisible()) {
- view.triggerEvent(UISWTViewEvent.TYPE_REFRESH, null);
- }
- } catch (Exception e) {
- Debug.out(e);
- }
- }
- }
- public String getUpdateUIName() {
- return "TopBar";
- }
- };
- try {
- UIFunctionsManager.getUIFunctions().getUIUpdater().addUpdater(updatable);
- } catch (Exception e) {
- Debug.out(e);
- }
- skinObject.getControl().addDisposeListener(new DisposeListener() {
- public void widgetDisposed(DisposeEvent e) {
- try {
- UIFunctionsManager.getUIFunctions().getUIUpdater().removeUpdater(
- updatable);
- } catch (Exception ex) {
- Debug.out(ex);
- }
- Object[] views = topbarViews.toArray();
- topbarViews.clear();
- for (int i = 0; i < views.length; i++) {
- UISWTViewCore view = (UISWTViewCore) views[i];
- if (view != null) {
- view.triggerEvent(UISWTViewEvent.TYPE_DESTROY, null);
- }
- }
- }
- });
- SWTSkinObject soPrev = skin.getSkinObject("topbar-plugin-prev");
- if (soPrev != null) {
- SWTSkinButtonUtility btnPrev = new SWTSkinButtonUtility(soPrev);
- btnPrev.addSelectionListener(new ButtonListenerAdapter() {
- public void pressed(SWTSkinButtonUtility buttonUtility,
- SWTSkinObject skinObject, int stateMask) {
- //System.out.println("prev click " + activeTopBar + " ; "
- // + topbarViews.size());
- if (activeTopBar == null || topbarViews.size() <= 1) {
- return;
- }
- int i = topbarViews.indexOf(activeTopBar) - 1;
- if (i < 0) {
- i = topbarViews.size() - 1;
- }
- activateTopBar((UISWTViewCore) topbarViews.get(i));
- }
- });
- }
- SWTSkinObject soNext = skin.getSkinObject("topbar-plugin-next");
- if (soNext != null) {
- SWTSkinButtonUtility btnNext = new SWTSkinButtonUtility(soNext);
- btnNext.addSelectionListener(new ButtonListenerAdapter() {
- public void pressed(SWTSkinButtonUtility buttonUtility,
- SWTSkinObject skinObject, int stateMask) {
- //System.out.println("next click");
- if (activeTopBar == null || topbarViews.size() <= 1) {
- return;
- }
- int i = topbarViews.indexOf(activeTopBar) + 1;
- if (i >= topbarViews.size()) {
- i = 0;
- }
- activateTopBar((UISWTViewCore) topbarViews.get(i));
- }
- });
- }
- SWTSkinObject soTitle = skin.getSkinObject("topbar-plugin-title");
- if (soTitle != null) {
- final Composite cTitle = (Composite) soTitle.getControl();
- cTitle.addPaintListener(new PaintListener() {
- public void paintControl(PaintEvent e) {
- e.gc.setAdvanced(true);
- //Font font = new Font(e.gc.getDevice(), "Sans", 8, SWT.NORMAL);
- //e.gc.setFont(font);
- if (e.gc.getAdvanced() && activeTopBar != null) {
- try {
- e.gc.setTextAntialias(SWT.ON);
- } catch (Exception ex) {
- // Ignore ERROR_NO_GRAPHICS_LIBRARY error or any others
- }
- try {
- Transform transform = new Transform(e.gc.getDevice());
- transform.rotate(270);
- e.gc.setTransform(transform);
- String s = activeTopBar.getFullTitle();
- Point size = e.gc.textExtent(s);
- e.gc.drawText(s, -size.x, 0, true);
- //e.gc.drawText(s, 0,0, true);
- transform.dispose();
- } catch (Exception ex) {
- // setTransform can trhow a ERROR_NO_GRAPHICS_LIBRARY error
- // no use trying to draw.. it would look weird
- }
- //font.dispose();
- }
- }
- });
- }
- SWTSkinObject soList = skin.getSkinObject("topbar-plugin-list");
- if (soList != null) {
- final Composite cList = (Composite) soList.getControl();
- listPlugins = new org.eclipse.swt.widgets.List(cList, SWT.None);
- listPlugins.setLayoutData(Utils.getFilledFormData());
- listPlugins.setBackground(cList.getBackground());
- listPlugins.setForeground(cList.getForeground());
- listPlugins.addSelectionListener(new SelectionListener() {
- public void widgetSelected(SelectionEvent e) {
- int i = listPlugins.getSelectionIndex();
- if (i >= 0 && i < topbarViews.size()) {
- activateTopBar((UISWTViewCore) topbarViews.get(i));
- COConfigurationManager.setParameter("topbar.viewindex", i);
- }
- }
- public void widgetDefaultSelected(SelectionEvent e) {
- }
- });
- }
- skinObject = skin.getSkinObject(SkinConstants.VIEWID_PLUGINBAR);
- if (skinObject != null) {
- Listener l = new Listener() {
- private int mouseDownAt = 0;
- public void handleEvent(Event event) {
- Composite c = (Composite) event.widget;
- if (event.type == SWT.MouseDown) {
- Rectangle clientArea = c.getClientArea();
- if (event.y > clientArea.height - 10) {
- mouseDownAt = event.y;
- }
- } else if (event.type == SWT.MouseUp && mouseDownAt > 0) {
- int diff = event.y - mouseDownAt;
- mouseDownAt = 0;
- FormData formData = (FormData) c.getLayoutData();
- formData.height += diff;
- if (formData.height < 50) {
- formData.height = 50;
- } else {
- Rectangle clientArea = c.getShell().getClientArea();
- int max = clientArea.height - 350;
- if (formData.height > max) {
- formData.height = max;
- }
- }
- COConfigurationManager.setParameter("v3.topbar.height",
- formData.height);
- Utils.relayout(c);
- } else if (event.type == SWT.MouseMove) {
- Rectangle clientArea = c.getClientArea();
- boolean draggable = (event.y > clientArea.height - 10);
- c.setCursor(draggable ? c.getDisplay().getSystemCursor(
- SWT.CURSOR_SIZENS) : null);
- } else if (event.type == SWT.MouseExit) {
- c.setCursor(null);
- }
- }
- };
- Control control = skinObject.getControl();
- control.addListener(SWT.MouseDown, l);
- control.addListener(SWT.MouseUp, l);
- control.addListener(SWT.MouseMove, l);
- control.addListener(SWT.MouseExit, l);
- skinObject.addListener(new SWTSkinObjectListener() {
- public Object eventOccured(SWTSkinObject skinObject, int eventType,
- Object params) {
- if (eventType == EVENT_SHOW) {
- int h = COConfigurationManager.getIntParameter("v3.topbar.height");
- Control control = skinObject.getControl();
- FormData formData = (FormData) control.getLayoutData();
- formData.height = h;
- control.setLayoutData(formData);
- Utils.relayout(control);
- }
- return null;
- }
- });
- }
- int toActiveView = COConfigurationManager.getIntParameter(
- "topbar.viewindex", 0);
- int viewIndex = toActiveView;
- UISWTInstanceImpl uiSWTinstance = (UISWTInstanceImpl) UIFunctionsManagerSWT.getUIFunctionsSWT().getUISWTInstance();
-
- if (uiSWTinstance != null && !registeredCoreSubViews ) {
- uiSWTinstance.addView(UISWTInstance.VIEW_TOPBAR, "ViewDownSpeedGraph",
- new ViewDownSpeedGraph());
- uiSWTinstance.addView(UISWTInstance.VIEW_TOPBAR, "ViewUpSpeedGraph",
- new ViewUpSpeedGraph());
- uiSWTinstance.addView(UISWTInstance.VIEW_TOPBAR, "ViewDownSpeedGraph",
- new VivaldiView(false));
- registeredCoreSubViews = true;
- }
- UISWTViewEventListenerHolder[] pluginViews = uiSWTinstance.getViewListeners(UISWTInstance.VIEW_TOPBAR);
- for (UISWTViewEventListenerHolder l : pluginViews) {
- if (l != null) {
- try {
- UISWTViewImpl view = new UISWTViewImpl(UISWTInstance.VIEW_TOPBAR,
- l.getViewID(), l, null);
- addTopBarView(view, cPluginArea);
- if (toActiveView-- == 0) {
- activateTopBar(view);
- if (listPlugins != null) {
- listPlugins.setSelection(viewIndex);
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- // skip, plugin probably specifically asked to not be added
- }
- }
- }
- if (toActiveView >= 0 && topbarViews.size() > 0) {
- activeTopBar = topbarViews.get(0);
- activeTopBar.getComposite().setVisible(true);
- }
- skinObject.getControl().getParent().layout(true);
- } catch (Exception e) {
- Debug.out(e);
- }
- }
- /**
- * @param view
- *
- * @since 3.0.1.1
- */
- protected void activateTopBar(UISWTViewCore view) {
- if (activeTopBar != null) {
- Composite c = activeTopBar.getComposite();
- while (c.getParent() != cPluginArea) {
- c = c.getParent();
- }
- c.setVisible(false);
- }
- activeTopBar = view;
- Composite c = activeTopBar.getComposite();
- while (c.getParent() != cPluginArea) {
- c = c.getParent();
- }
- c.setVisible(true);
- SWTSkinObject soTitle = skin.getSkinObject("topbar-plugin-title");
- //System.out.println("Hello" + soTitle);
- if (soTitle != null) {
- soTitle.getControl().redraw();
- }
- }
- /**
- * @param view
- *
- * @since 3.0.1.1
- */
- private void addTopBarView(UISWTViewCore view, Composite composite) {
- Composite parent = new Composite(composite, SWT.None);
- parent.setLayoutData(Utils.getFilledFormData());
- parent.setLayout(new FormLayout());
- view.initialize(parent);
- parent.setVisible(false);
- Control[] children = parent.getChildren();
- for (int i = 0; i < children.length; i++) {
- Control control = children[i];
- Object ld = control.getLayoutData();
- boolean useGridLayout = ld != null && (ld instanceof GridData);
- if (useGridLayout) {
- GridLayout gridLayout = new GridLayout();
- gridLayout.horizontalSpacing = 0;
- gridLayout.marginHeight = 0;
- gridLayout.marginWidth = 0;
- gridLayout.verticalSpacing = 0;
- parent.setLayout(gridLayout);
- break;
- } else if (ld == null) {
- control.setLayoutData(Utils.getFilledFormData());
- }
- }
- topbarViews.add(view);
- if (listPlugins != null) {
- String s = view.getFullTitle();
- if (MessageText.keyExists(s)) {
- s = MessageText.getString(s);
- }
- listPlugins.add(s);
- }
- }
- }