您的位置:首页 > 运维架构 > 网站架构

SWT美化开源控件网站

2013-05-31 14:39 330 查看
SWT Ribbon http://hexapixel.com/projects/ribbon




/*******************************************************************************

* Copyright (c) Emil Crumhorn - Hexapixel.com - emil.crumhorn@gmail.com

* 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:

* emil.crumhorn@gmail.com - initial API and implementation

*******************************************************************************/

import org.eclipse.swt.SWT;

import org.eclipse.swt.events.SelectionEvent;

import org.eclipse.swt.events.SelectionListener;

import org.eclipse.swt.layout.FillLayout;

import org.eclipse.swt.layout.GridLayout;

import org.eclipse.swt.widgets.Button;

import org.eclipse.swt.widgets.Combo;

import org.eclipse.swt.widgets.Composite;

import org.eclipse.swt.widgets.Display;

import org.eclipse.swt.widgets.Menu;

import org.eclipse.swt.widgets.MenuItem;

import org.eclipse.swt.widgets.Text;

import com.hexapixel.widgets.generic.ColorCache;

import com.hexapixel.widgets.generic.ImageCache;

import com.hexapixel.widgets.generic.Utils;

import com.hexapixel.widgets.ribbon.ButtonSelectGroup;

import com.hexapixel.widgets.ribbon.QuickAccessShellToolbar;

import com.hexapixel.widgets.ribbon.RibbonButton;

import com.hexapixel.widgets.ribbon.RibbonButtonGroup;

import com.hexapixel.widgets.ribbon.RibbonCheckbox;

import com.hexapixel.widgets.ribbon.RibbonGroup;

import com.hexapixel.widgets.ribbon.RibbonGroupSeparator;

import com.hexapixel.widgets.ribbon.RibbonShell;

import com.hexapixel.widgets.ribbon.RibbonTab;

import com.hexapixel.widgets.ribbon.RibbonTabFolder;

import com.hexapixel.widgets.ribbon.RibbonToolbar;

import com.hexapixel.widgets.ribbon.RibbonToolbarGrouping;

import com.hexapixel.widgets.ribbon.RibbonTooltip;

//DONE: Make tooltip pulling a callback if the set tooltip is null, much easier than defining one for each button (or change so only text/image is set and the class is created by us

//DONE: Toolbars can have 3 rows in compressed mode so we should support it

//DONE: Mouse resize cursor on left side in group area doesn't change past it's bounds

//DONE: [HIGH]: Maximized shell covers windows taskbar (get active display's bounds and set it to that and fake a maximized boolean?)

//DONE: [HIGH]: Tooltip on big button and toolbar and arrow button to the right of it

//DONE: [HIGH]: Doubleclicking the toolbar in the shell and some other stuff causes maximize events, which is wrong

//TODO [LOW]: Couldn't Toolbar extend what all others do? would save some code in the onMouseMove etc in RibbonGroup where it checks hover states etc

//TODO [LOW]: A lot of the getBounds() calculations in RibbonGroup could be moved to the respective "parent" of the buttons, such as the toolbar etc, less mess!

//TODO [MEDIUM]: Checkboxes only change checked state on mouse up, not mouse down

//TODO [LOW]: Auto-compress on not-enough-horizontal space (?)

//TODO [MEDIUM]: I don't think buttons on toolbars have centered images, try with something really small, like 4x4 and see where it ends up

//TODO [HIGH]: Action-callbacks on big button click, arrow, toolbar, help button and group buttons too?

//TODO [LOW]: Grayed out toolbar on menubar grays out too on shell-not-active state (ugh, new images?)

//TODO [LOW]: Tooltips don't dispose on "ALT" press, maybe listen in the tooltip?

//TODO [HIGH]: Button accelerators (also go into tooltips), we need a global key listener or something

// Also draw the same little cute boxes Office does to show them

//TODO [LOW]: Option to create a RibbonShell without a toolbar on the menu

//TODO [MEDIUM+]: Right click shell menu.. how how how? (fake shell off-screen and make ours a simple modal? hmm, weird probably)

//TODO [LOW]: Semi Fixed, redraws less. Resize shouldn't redraw the entire shell, just the new part (seems impossible to intercept)

//TODO [HIGH+]: Color schemes, also, images for toolbar corners on shell need to be drawn by hand I think...

public class RibbonTester {

/**

* @param args

*/

public static void main(String args []) {

Display display = new Display();

final RibbonShell shell = new RibbonShell(display);

shell.setButtonImage(ImageCache.getImage("selection_recycle_24.png"));

//Shell shell = new Shell(display);

shell.setText("SWT Ribbon Tester");

shell.setSize(714, 500);

Text text = new Text(shell.getShell(), SWT.TOP);

QuickAccessShellToolbar mtb = shell.getToolbar();

RibbonButton mtbtb1 = new RibbonButton(mtb, ImageCache.getImage("gear_ok_16.gif"), null, SWT.NONE);

RibbonButton mtbtb2 = new RibbonButton(mtb, ImageCache.getImage("gantt_16.gif"), null, SWT.NONE);

shell.setBigButtonTooltip(new RibbonTooltip("Big", "I'm the tooltip for the big button"));

mtb.setArrowTooltip(new RibbonTooltip("Oh", "Jeez"));

Menu shellMenu = shell.getBigButtonMenu();

MenuItem btest = new MenuItem(shellMenu, SWT.POP_UP);

btest.setText("Testing a menu");

shell.addBigButtonListener(new SelectionListener() {

public void widgetDefaultSelected(SelectionEvent e) {

}

public void widgetSelected(SelectionEvent e) {

System.err.println("Clicked big button");

shell.showBigButtonMenu();

}

});

// shell.setLayout(new FillLayout());

// Composite inner = new Composite(shell, SWT.None);

// inner.setLayout(new FillLayout(SWT.VERTICAL));

// inner.setBackground(ColorCache.getInstance().getColor(182, 206, 238));

// Tab folder

//final RibbonTabFolder ftf = new RibbonTabFolder(inner, SWT.NONE);

RibbonTabFolder ftf = shell.getRibbonTabFolder();

ftf.setHelpImage(ImageCache.getImage("questionmark.gif"));

ftf.getHelpButton().setToolTip(new RibbonTooltip("Title", "Get Help Using Whatever This Is"));

//ftf.setDrawEmptyTabs(false);

// Tabs

RibbonTab ft0 = new RibbonTab(ftf, "Home");

RibbonTab ft1 = new RibbonTab(ftf, "Insert");

new RibbonTab(ftf, "Page Layout");

new RibbonTab(ftf, "References");

new RibbonTab(ftf, "Empty");

// Tooltip

RibbonTooltip toolTip = new RibbonTooltip("Some Action Title", "This is content text that\nsplits over\nmore than one\nline\n\\b\\c255000000and \\xhas \\bdifferent \\c000000200look \\xand \\bfeel.", ImageCache.getImage("tooltip.jpg"), ImageCache.getImage("questionmark.gif"), "Press F1 for more help");

// Group

// toolbar group

RibbonGroup tbGroup = new RibbonGroup(ft0, "Toolbar Here");

RibbonToolbar toolbar = new RibbonToolbar(tbGroup, RibbonToolbar.STYLE_BORDERED, 2);

RibbonToolbarGrouping rtg = new RibbonToolbarGrouping(toolbar, 1);

RibbonToolbarGrouping rtg2 = new RibbonToolbarGrouping(toolbar, 1);

RibbonToolbarGrouping rtg3 = new RibbonToolbarGrouping(toolbar, 1);

RibbonToolbarGrouping rtg4 = new RibbonToolbarGrouping(toolbar, 2);

RibbonButton rbTb1 = new RibbonButton(rtg, ImageCache.getImage("books_16.gif"), null, RibbonButton.STYLE_ARROW_DOWN_SPLIT | RibbonButton.STYLE_TOGGLE);

RibbonButton rbTb2 = new RibbonButton(rtg2, ImageCache.getImage("gear_ok_16.gif"), null, SWT.NONE);

RibbonButton rbTb3 = new RibbonButton(rtg2, ImageCache.getImage("gantt_16.gif"), null, RibbonButton.STYLE_ARROW_DOWN);

RibbonButton rbTb4 = new RibbonButton(rtg3, ImageCache.getImage("gantt_16.gif"), null, RibbonButton.STYLE_ARROW_DOWN_SPLIT);

RibbonButton rbTb5 = new RibbonButton(rtg4, ImageCache.getImage("enabled_small.gif"), null, RibbonButton.STYLE_NO_DEPRESS);

RibbonButton rbTb6 = new RibbonButton(rtg4, ImageCache.getImage("selection_recycle_16.gif"), null, RibbonButton.STYLE_ARROW_DOWN_SPLIT);

rbTb4.setEnabled(false);

// end toolbar group

RibbonGroup ftg = new RibbonGroup(ft0, "Category Name", toolTip);

// Button

RibbonButton rb = new RibbonButton(ftg, ImageCache.getImage("olb_picture.gif"), "I have two\nrows", RibbonButton.STYLE_TWO_LINE_TEXT | RibbonButton.STYLE_ARROW_DOWN);//RibbonButton.STYLE_ARROW_DOWN_SPLIT);

RibbonButton rb2 = new RibbonButton(ftg, ImageCache.getImage("olb_picture.gif"), "I'm split\ntoggle", RibbonButton.STYLE_ARROW_DOWN_SPLIT | RibbonButton.STYLE_TOGGLE | RibbonButton.STYLE_TWO_LINE_TEXT);

rb2.setBottomOrRightToolTip(toolTip);

MenuItem test = new MenuItem(rb2.getMenu(), SWT.POP_UP);

test.setText("Testing a menu");

rb2.addSelectionListener(new SelectionListener() {

public void widgetDefaultSelected(SelectionEvent e) {

}

public void widgetSelected(SelectionEvent e) {

final RibbonButton rb = (RibbonButton) e.data;

if (rb.isTopSelected())

System.err.println("Top clicked");

else {

System.err.println("Bottom clicked");

rb.showMenu();

}

}

});

// Empty group

RibbonGroup cb = new RibbonGroup(ft1, "Checkboxes", toolTip);

RibbonButtonGroup cbg = new RibbonButtonGroup(cb);

RibbonCheckbox rc = new RibbonCheckbox(cbg, "I'm checked", SWT.NONE);

rc.setSelected(true);

new RibbonCheckbox(cbg, "I'm not", SWT.NONE);

RibbonCheckbox rc3 = new RibbonCheckbox(cbg, "I'm disabled", SWT.NONE);

new RibbonCheckbox(cbg, "Also a checkbox", SWT.NONE);

new RibbonCheckbox(cbg, "Many, aren't we?", SWT.NONE);

rc3.setEnabled(false);

RibbonTooltip cbTip = new RibbonTooltip("Title", "Checkbox description\n\\b\\c255000000Some bold and red \\xand\nSome not!", null, ImageCache.getImage("questionmark.gif"), "Press F1 for more help");

rc3.setToolTip(cbTip);

rb.setToolTip(toolTip);

//TODO: Check when a dialog opens as a result of clicking this to see if this button does not redraw for some reason or think it's still selected

new RibbonButton(ftg, ImageCache.getImage("olb_picture.gif"), "I am longer and do not depress", RibbonButton.STYLE_NO_DEPRESS);

RibbonGroup ftg2 = new RibbonGroup(ft1, "Group 1");

RibbonButton rb1 = new RibbonButton(ftg2, ImageCache.getImage("olb_picture2.gif"), "Button 1", SWT.NONE);

//RibbonButton rb2 = new RibbonButton(ftg2, ImageCache.getImage("olb_picture3.gif"), "Button 2", SWT.NONE);

RibbonGroup ftg3 = new RibbonGroup(ft1, "Group 2");

RibbonButton rb3 = new RibbonButton(ftg3, ImageCache.getImage("olb_picture4.gif"), "Button 3", SWT.NONE);

RibbonButton rb4 = new RibbonButton(ftg3, ImageCache.getImage("olb_picture6.gif"), "Button 4", SWT.NONE);

rb4.setToolTip(toolTip);

ButtonSelectGroup group = new ButtonSelectGroup();

// native controls example

RibbonGroup ftg4 = new RibbonGroup(ft1, "Native");

GridLayout gl = new GridLayout(1, false);

gl.marginHeight = 7;

gl.marginLeft = 0;

gl.marginRight = 0;

gl.verticalSpacing = 1;

gl.horizontalSpacing = 0;

gl.marginBottom = 7;

ftg4.setLayout(gl);

Combo foo = new Combo(ftg4, SWT.READ_ONLY);

foo.setText("Testing");

foo.add("Testing 2");

foo.add("Testing 3");

foo.add("Testing 4");

Button b = new Button(ftg4, SWT.PUSH);

b.setText("Test");

// create sub button containing 3 buttons inside it

new RibbonGroupSeparator(ftg);

RibbonButtonGroup sub = new RibbonButtonGroup(ftg);

RibbonButton sub1 = new RibbonButton(sub, ImageCache.getImage("enabled_small.gif"), ImageCache.getImage("disabled_small.gif"), "Disabled", SWT.NONE);

sub1.setEnabled(false);

new RibbonCheckbox(sub, "I'm mixed in", SWT.NONE);

// make arrow down

RibbonButton rb5 = new RibbonButton(sub, ImageCache.getImage("olb_small2.gif"), "I am toggle split", RibbonButton.STYLE_TOGGLE | RibbonButton.STYLE_ARROW_DOWN_SPLIT);

RibbonButton rb6 = new RibbonButton(sub, ImageCache.getImage("olb_small3.gif"), "I am a quite long button", SWT.NONE);

RibbonButton rb7 = new RibbonButton(sub, ImageCache.getImage("olb_small3.gif"), "I split normal", RibbonButton.STYLE_ARROW_DOWN_SPLIT);

RibbonButton rb8 = new RibbonButton(sub, ImageCache.getImage("olb_small3.gif"), "I am arrowed", RibbonButton.STYLE_ARROW_DOWN);

MenuItem test2 = new MenuItem(rb8.getMenu(), SWT.POP_UP);

test2.setText("Testing an arrow down menu");

rb8.addSelectionListener(new SelectionListener() {

public void widgetDefaultSelected(SelectionEvent e) {

}

public void widgetSelected(SelectionEvent e) {

final RibbonButton rb = (RibbonButton) e.data;

rb.showMenu();

}

});

rb1.setButtonSelectGroup(group);

rb2.setButtonSelectGroup(group);

rb3.setButtonSelectGroup(group);

rb4.setButtonSelectGroup(group);

rb5.setButtonSelectGroup(group);

rb6.setButtonSelectGroup(group);

Utils.centerDialogOnScreen(shell.getShell());

shell.open();

while (!shell.isDisposed ()) {

if (!display.readAndDispatch ()) display.sleep ();

}

display.dispose ();

}

}



http://tomsondev.bestsolution.at/2009/07/02/e4-a-new-area-for-rcpria-applications/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: