⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tab.java

📁 eclise rcp 项目,是非常好的学习源码
💻 JAVA
字号:
/*******************************************************************************
 * Copyright (c) 2007 Siemens AG
 * 
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Kai T鰀ter - initial API and implementation
 *******************************************************************************/


package com.siemens.ct.mp3m.ui.presentation;

import org.eclipse.swt.SWT;
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.Image;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.presentations.IPresentablePart;
import org.eclipse.ui.presentations.IStackPresentationSite;

public class Tab extends AbstractClosable implements PaintListener {

    private Presentation presentation;
    
    private IStackPresentationSite site;
    
    protected final Color unselectedTop = new Color(getDisplay(), 250, 250, 250);

    protected final Color unselectedBottom = new Color(getDisplay(), 200, 225, 255);

    protected final Color selectedTop = new Color(getDisplay(), 250, 230, 150);

    protected final Color selectedBottom = new Color(getDisplay(), 240, 155, 30);

    protected final Color mouseOverTop = new Color(getDisplay(), 255, 248, 223);

    protected final Color mouseOverBottom = new Color(getDisplay(), 255, 225, 120);

    protected Font font = new Font(getDisplay(), "Default", 10, SWT.NORMAL);

    private boolean isSelected;

    /**
     * This listener responds to selection events in all tabs.
     */
    private MouseListener mouseListener = new MouseAdapter() {
        public void mouseDown(MouseEvent e) {
            if (part != null) {
                 part.setFocus();
                 if (isCloseSelected()) {
                    site.close(new IPresentablePart[] { part });
                } else {
                    site.selectPart(part);
                    presentation.selectPart(part);
                }
            }
        }
    };


    public Tab(Composite parent, int style, Presentation presentation, IStackPresentationSite site) {
        super(parent, style | SWT.NO_BACKGROUND);
        this.presentation = presentation;
        this.site = site;
        
        setSected(false);
        addPaintListener(this);
        addMouseListener(mouseListener);
    }

    public void setPresentablePart(IPresentablePart part) {
        this.part = part;
        setToolTipText(part.getTitleToolTip());
        layout();
        redraw();
    }

    public boolean checkPart(IPresentablePart part) {
        return (this.part == part);
    }

    public void setSected(boolean selected) {
        isSelected = selected;
    }

    /**
     * Paint the title bar
     */
    public void paintControl(PaintEvent e) {
        Rectangle clientArea = getBounds();
        Image img = new Image(e.display, clientArea.width, clientArea.height);
        GC gc = new GC(img);

        gc.setForeground(presentation.getColorBorder());
        gc.drawRectangle(0, 0, clientArea.width - 1, clientArea.height - 1);

        Color colorTop;
        Color colorBottom;

        if (isMouseOver) {
            if (isSelected) {
                colorTop = selectedBottom;
                colorBottom = selectedTop;
            } else {
                colorTop = mouseOverTop;
                colorBottom = mouseOverBottom;
            }
        } else {
            if (isSelected) {
                colorTop = selectedTop;
                colorBottom = selectedBottom;
            } else {
                colorTop = unselectedTop;
                colorBottom = unselectedBottom;
            }
        }
        gc.setForeground(colorTop);
        gc.setBackground(colorBottom);
        gc.fillGradientRectangle(1, 1, clientArea.width - 2, clientArea.height - 2, true);

        if (part != null) {
            Image partImage = part.getTitleImage();
            gc.drawImage(partImage, 2, 2);

            Color colorText = new Color(getDisplay(), 0, 0, 0);
            // gc.setFont(font);
            gc.setForeground(colorText);
            String dirty = "";
            if(part.isDirty()) {
                dirty = "*";
            }
            int closeImageOffset = 0;
            if (part.isCloseable()) {
                closeImageOffset = 20;
            }
            String text = shortenText(gc,dirty + part.getTitle(), clientArea.width - 25 - closeImageOffset);
            gc.drawText(text, partImage.getBounds().width + 7, 3, true);
        }

        if (part.isCloseable()) {
            if (isCloseSelected) {
                gc.drawImage(closeSelectedImage, clientArea.width - 20, 3);
            } else {
                gc.drawImage(closeUnselectedImage, clientArea.width - 20, 3);
            }
        }

        e.gc.drawImage(img, 0, 0);
        gc.dispose();
        img.dispose();
    }

    public IPresentablePart getPart() {
        return part;
    }

    public boolean isCloseSelected() {
        return isCloseSelected;
    }

    /* (non-Javadoc)
     * @see org.eclipse.swt.widgets.Widget#dispose()
     */
    @Override
    public void dispose() {
        unselectedTop.dispose();
        unselectedBottom.dispose();
        selectedTop.dispose();
        selectedBottom.dispose();
        mouseOverTop.dispose();
        mouseOverBottom.dispose();
        font.dispose();
        super.dispose();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -