levelsetaction.java

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

JAVA
126
字号
/************************************************************
 *
 * 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 java.io.IOException;

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 LevelsetAction extends Action implements IWorkbenchWindowPulldownDelegate
{
	private MainView view = null;
	private Menu toolbarMenu;
	
	public LevelsetAction(MainView view) 
	{
		super("");
		this.view = view;
	}

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

	private void changeMode(int mode) {
		if(view.getPreferences().getMode() == mode)
			return ;
		SokobanPlugin.trace(this.getClass().getName(),"Change of level group solicited."); //$NON-NLS-1$
		view.getPreferences().setMode(mode);
		view.getPreferences().setLevel(view.getPreferences().getLevel(mode));
		
		// Reset the game.
		try
		{
			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 (IOException 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.levelset");i++){
			MenuItem choice = new MenuItem(menu,SWT.RADIO);
			if(i == view.getPreferences().getMode())
				choice.setSelection(true);
			else
				choice.setSelection(false);			
			choice.setText(SokobanMessages.getString("MainView.levelset."+i).replace("%1", SokobanMessages.getString("MainView.levelset."+i+".maxlevel")));
			choice.setData(i);
			choice.addSelectionListener(new SelectionAdapter(){
				@Override
				public void widgetSelected(SelectionEvent se) {
					int mode=(Integer) ((MenuItem)(se.getSource())).getData();
					changeMode(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 + -
显示快捷键?