skinaction.java

来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 130 行

JAVA
130
字号
/************************************************************
 *
 * Copyright (c) 2003 Chemi. All rights reserved.
 * 
 * This program and the accompanying materials
 * are made available under the terms of the MIT License
 * which accompanies this distribution, and is available at
 * http://www.opensource.org/licenses/mit-license.html
 *
 ************************************************************/

package es.org.chemi.games.sokoban.actions;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.window.ApplicationWindow;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowPulldownDelegate;

import es.org.chemi.games.sokoban.SokobanMessages;
import es.org.chemi.games.sokoban.SokobanPlugin;
import es.org.chemi.games.sokoban.ui.MainView;
import es.org.chemi.games.sokoban.util.Constants;
import es.org.chemi.games.util.Timer;

/**
 * 换肤的按钮
 */
public class SkinAction extends Action implements IWorkbenchWindowPulldownDelegate
{
	private MainView view = null;
	private Menu toolbarMenu;
	
	public SkinAction(MainView view) 
	{
		super("");
		this.view = view;
	}

	public void run() 
	{
		getMenu(((ApplicationWindow) view.getSite().getWorkbenchWindow()).getCoolBarManager().getControl()).setVisible(true);	
	}

	private void changeSkin(int skin) {
		if(view.getPreferences().getSkinMode() == skin)
			return ;
		SokobanPlugin.trace(this.getClass().getName(),"Change of skin."); //$NON-NLS-1$
		view.getPreferences().setSkinMode(skin);
		
		// Reset the game.
		try
		{
			view.reloadSkinImage();
			view.getMap().setIsNewLevel(true);
			view.getMap().loadMap();
			view.getMap().redraw();
			view.getMap().setFocus();
			((Timer)view.getCounters().get(Constants.COUNTER_TIME)).stop();
			((Timer)view.getCounters().get(Constants.COUNTER_TIME)).resetStopped();
			view.getMap().getUndoAction().setEnabled(false);

			// Play sound.
			if(view.getMap().getPreferences().isSoundEnabled())
				SokobanPlugin.getResourceManager().getSound(Constants.SOUND_START).play();
		}
		catch (Exception ex)
		{
			SokobanPlugin.getDefault().getLog().log(new Status(IStatus.ERROR,SokobanPlugin.getDefault().getBundle().getSymbolicName(),IStatus.ERROR,ex.toString(),null));		
		}
	}

	@Override
	public Menu getMenu(Control parent) {
		if (toolbarMenu == null) {
			toolbarMenu = new Menu(parent);
			fillMenu(toolbarMenu);
		}
		return toolbarMenu;
	}
	
	private void fillMenu(Menu menu) {
		for(int i=0;i<SokobanMessages.getInt("MainView.skin");i++){
			MenuItem choice = new MenuItem(menu,SWT.RADIO);
			if(i == view.getPreferences().getSkinMode())
				choice.setSelection(true);
			else
				choice.setSelection(false);
			choice.setText(SokobanMessages.getString("MainView.skin."+i));
			choice.setData(i);
			choice.addSelectionListener(new SelectionAdapter(){
				@Override
				public void widgetSelected(SelectionEvent se) {
					int mode=(Integer) ((MenuItem)(se.getSource())).getData();
					changeSkin(mode);
				}});
		}
	}	
	@Override
	public void dispose() {
		if (toolbarMenu != null) {
			toolbarMenu.dispose();
			toolbarMenu = null;
		}		
	}

	@Override
	public void init(IWorkbenchWindow window) {
		
	}

	@Override
	public void run(IAction action) {
		
	}

	@Override
	public void selectionChanged(IAction action, ISelection selection) {
		
	}
}

⌨️ 快捷键说明

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