org.dafoe.application.presentations.baretitle.BareTitleStackPresentation.java Source code

Java tutorial

Introduction

Here is the source code for org.dafoe.application.presentations.baretitle.BareTitleStackPresentation.java

Source

/*******************************************************************************
 * Copyright (c) 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.dafoe.application.presentations.baretitle;

import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ViewForm;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.MouseAdapter;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPartReference;
import org.eclipse.ui.internal.presentations.PresentablePart;
import org.eclipse.ui.presentations.IPresentablePart;
import org.eclipse.ui.presentations.IStackPresentationSite;
import org.eclipse.ui.presentations.PresentationUtil;
import org.eclipse.ui.presentations.StackDropResult;
import org.eclipse.ui.presentations.StackPresentation;
import org.eclipse.ui.themes.IThemeManager;

public class BareTitleStackPresentation extends StackPresentation {

    //private static final String PART_DATA = "part";

    private static final int TITLE_HEIGHT = 22;

    private boolean activeFocus = false;

    /**
     * Main widget for the presentation
     */
    private Composite presentationControl;
    private Composite titleArea;
    private ViewForm contentArea;
    private Composite clientArea;
    /**
     * Currently selected part
     */
    private IPresentablePart current;

    Color backColor;
    Color foreColor;

    /**
     * close button
     */
    private ToolItem close;

    /**
     * View menu button
     */
    private ToolItem viewMenu;

    /**
     * Minimize button
     */
    private ToolItem minView;

    void GetColors() {

        IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();

        PresentablePart toto = (PresentablePart) current;
        if (toto != null) {
            WorkbenchPartReference coco = (WorkbenchPartReference) toto.getPane().getPartReference();
            IWorkbenchPart part = coco.getPart(true);
            String le_theme = "org.dafoe.application.themeId";
            if (coco.getId().contains("corpus")) {
                le_theme = "org.dafoe.corpuslevel.themeId";
            } else {
                if (coco.getId().contains("terminologic") || coco.getId().contains("saillance")
                        || coco.getId().contains("terminologycard") || coco.getId().contains("terminology")) {
                    le_theme = "org.dafoe.terminologiclevel.themeId";
                } else {
                    if (coco.getId().contains("terminoontologic")) {
                        le_theme = "org.dafoe.terminoontologiclevel.themeId";
                    } else {
                        if (coco.getId().contains("ontologic")) {

                            le_theme = "org.dafoe.ontologiclevel.themeId";

                        }
                    }
                }
            }

            backColor = themeManager.getTheme(le_theme).getColorRegistry().get("org.dafoe.application.backcolor");
            foreColor = themeManager.getTheme(le_theme).getColorRegistry().get("org.dafoe.application.forecolor");
        }
    }

    private MouseListener mouseListener = new MouseAdapter() {
        // If we single-click on an empty space on the toolbar, move focus to the
        // active control
        public void mouseDown(MouseEvent e) {
            if (current != null) {
                current.setFocus();
            }
        }
    };

    /** 
     * Drag listener for regions outside the toolbar
     */
    Listener dragListener = new Listener() {
        public void handleEvent(Event event) {
            Point loc = new Point(event.x, event.y);
            Control ctrl = (Control) event.widget;

            getSite().dragStart(ctrl.toDisplay(loc), false);
        }
    };

    public BareTitleStackPresentation(Composite parent, IStackPresentationSite stackSite) {
        super(stackSite);

        // Create a top-level control for the presentation.
        presentationControl = new Composite(parent, SWT.NONE);
        titleArea = new Composite(presentationControl, SWT.NONE);
        contentArea = new ViewForm(presentationControl, SWT.NONE);
        titleArea.addMouseListener(mouseListener);
        PresentationUtil.addDragListener(titleArea, dragListener);

        clientArea = new Composite(contentArea, SWT.NONE);
        clientArea.setVisible(false);

        contentArea.setContent(clientArea);

        // Add a dispose listener. This will call the presentationDisposed()
        // method when the widget is destroyed.
        presentationControl.addDisposeListener(new DisposeListener() {
            public void widgetDisposed(DisposeEvent e) {
                presentationDisposed();
            }
        });

        presentationControl.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
                Rectangle clientArea = presentationControl.getClientArea();
                e.gc.setLineWidth(1);
                e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_DARK_GRAY));
                e.gc.drawRectangle(clientArea.x, clientArea.y, clientArea.width - 1, clientArea.height - 1);
                Rectangle contentAreaBounds = contentArea.getBounds();
                int ypos = contentAreaBounds.y - 1;
                e.gc.drawLine(clientArea.x, ypos, clientArea.x + clientArea.width - 1, ypos);
            }
        });

        titleArea.addPaintListener(new PaintListener() {
            public void paintControl(PaintEvent e) {
                GetColors();

                Rectangle titleRect = titleArea.getClientArea();
                GC gc = e.gc;
                //e.gc.setBackground(e.display.getSystemColor(SWT.COLOR_GRAY));
                e.gc.setBackground(backColor);
                if (activeFocus)
                    e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_BLUE));
                else
                    e.gc.setForeground(e.display.getSystemColor(SWT.COLOR_WHITE));
                e.gc.fillGradientRectangle(titleRect.x, titleRect.y, titleRect.x + titleRect.width,
                        titleRect.y + titleRect.height, true);

                if (current != null) {
                    int textWidth = titleRect.width - 1;
                    if (textWidth > 0) {
                        Font gcFont = gc.getFont();
                        gc.setFont(presentationControl.getFont());
                        String text = current.getTitle();

                        Point extent = gc.textExtent(text, SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC);
                        int textY = titleRect.y + (titleRect.height - extent.y) / 2;

                        if (activeFocus)
                            gc.setForeground(e.display.getSystemColor(SWT.COLOR_WHITE));
                        else
                            gc.setForeground(e.display.getSystemColor(SWT.COLOR_BLACK));
                        gc.setFont(JFaceResources.getBannerFont());
                        gc.drawText(text, titleRect.x + 3, textY, SWT.DRAW_TRANSPARENT | SWT.DRAW_MNEMONIC);
                    }
                }
            }
        });
        layout();
    }

    protected void presentationDisposed() {
        // Remove any listeners that were attached to any
        // global Eclipse resources. This is necessary in order to prevent
        // memory leaks.
    }

    protected int getBorderWidth() {
        return 1;
    }

    public void layout() {
        // Determine the inner bounds of the presentation

        Rectangle presentationClientArea = presentationControl.getClientArea();
        presentationClientArea.x += getBorderWidth();
        presentationClientArea.width -= getBorderWidth() * 2;
        presentationClientArea.y += getBorderWidth();
        presentationClientArea.height -= getBorderWidth() * 2;
        titleArea.setBounds(presentationClientArea.x, presentationClientArea.y, presentationClientArea.width,
                presentationClientArea.y + TITLE_HEIGHT);
        int yy = TITLE_HEIGHT + 2;
        contentArea.setBounds(presentationClientArea.x, presentationClientArea.y + yy, presentationClientArea.width,
                presentationClientArea.height - yy);

        titleArea.setBackground(titleArea.getDisplay().getSystemColor(SWT.COLOR_DARK_GREEN));
        //contentArea.setBackground(titleArea.getDisplay().getSystemColor(SWT.COLOR_DARK_RED));

        // Position the view's widgets
        if (current != null) {
            Rectangle clientRectangle = contentArea.getBounds();
            Point clientAreaStart = presentationControl.getParent()
                    .toControl(presentationControl.toDisplay(clientRectangle.x, clientRectangle.y));
            // current isn't parented by this widget hierarchy, the coordinates must be
            // relative to the workbench window. The workbench window parents every
            // part.
            /*current.setBounds(new Rectangle(clientAreaStart.x, 
                  clientAreaStart.y,
                  clientRectangle.width, 
                  clientRectangle.height));*/

            if (current != null) {
                Control toolbar = current.getToolBar();

                contentArea.layout();

                Rectangle clientRectangle2 = clientArea.getBounds();
                Point clientAreaStart2 = presentationControl.getParent()
                        .toControl(contentArea.toDisplay(clientRectangle.x, clientRectangle.y));
                // current isn't parented by this widget hierarchy, the coordinates must be
                // relative to the workbench window. The workbench window parents every
                // part.
                current.setBounds(new Rectangle(clientAreaStart2.x, clientAreaStart2.y, clientRectangle2.width,
                        clientRectangle2.height));
            }
        }

    }

    public void setBounds(Rectangle bounds) {
        presentationControl.setBounds(bounds);
        layout();
    }

    public void dispose() {
    }

    public void setActive(int newState) {
        activeFocus = (newState == AS_ACTIVE_FOCUS);
        titleArea.redraw();
    }

    public void setVisible(boolean isVisible) {
    }

    public void setState(int state) {
    }

    public Control getControl() {
        return presentationControl;
    }

    public void addPart(IPresentablePart newPart, Object cookie) {
        newPart.setBounds(contentArea.getBounds());
        this.current = newPart;
        layout();
    }

    public void removePart(IPresentablePart oldPart) {
    }

    public void selectPart(IPresentablePart toSelect) {
    }

    public StackDropResult dragOver(Control currentControl, Point location) {
        return null;
    }

    public void showSystemMenu() {
    }

    public void showPaneMenu() {
    }

    public Control[] getTabList(IPresentablePart part) {
        if (current != null) {
            return new Control[] { current.getControl() };
        } else {
            return new Control[0];
        }
    }
}