mainview.java

来自「mywork是rcp开发的很好的例子」· Java 代码 · 共 459 行 · 第 1/2 页

JAVA
459
字号
	}
	
	private LevelInformation parse(String token)
	{
		int level = 0;
		boolean completed = false;
		String player = null;
		int moves = 0;
		int pushes = 0;
		int time = 0;
		
		StringTokenizer st = new StringTokenizer(token,"|");
		level = Integer.parseInt(st.nextToken());
		if(st.nextToken().equals("true"))
			completed = true;
		player = st.nextToken();
		moves = Integer.parseInt(st.nextToken());
		pushes = Integer.parseInt(st.nextToken());
		time = Integer.parseInt(st.nextToken());
				
		return new LevelInformation(level,completed,player,moves,pushes,time);
	}

	private void open(Composite parent) 
	{
		// Setting Composite Layout.
		SokobanPlugin.trace(this.getClass().getName(),"Setting layout."); //$NON-NLS-1$
		GridLayout gridLayout = new GridLayout(); 
		gridLayout.numColumns = 1;
		gridLayout.marginWidth = 0;		
		gridLayout.marginHeight = 0;
		gridLayout.horizontalSpacing = 0;
		gridLayout.verticalSpacing = 0;
		parent.setLayout(gridLayout);
		
		// Creating Panels.
		createView(parent);
		
		// Creating Actions.
		createActions();
	}
	
	private void createView(Composite parent)
	{
		// Create a composite with counters and map.
		SokobanPlugin.trace(this.getClass().getName(),"Adding the counters."); //$NON-NLS-1$
		counters = new HashMap();
		//往状态栏上增加
		WorkbenchWindow window=(WorkbenchWindow) PlatformUI.getWorkbench().getActiveWorkbenchWindow();
		final IStatusLineManager statusLineManager = window.getActionBars().getStatusLineManager();
		counterStatus = new CounterStatus("Counter",this);
		statusLineManager.insertBefore(StatusLineManager.END_GROUP,counterStatus);
		this.getSite().getPage().addPartListener(new IPartListener(){
			public void partActivated(IWorkbenchPart part) {
				if(part != null && part.equals(MainView.this)){
					statusLineManager.remove(counterStatus);
					statusLineManager.insertBefore(StatusLineManager.END_GROUP,counterStatus);
				}
			}
			public void partBroughtToTop(IWorkbenchPart part) {
			}
			public void partClosed(IWorkbenchPart part) {
			}
			public void partDeactivated(IWorkbenchPart part) {
				if(part != null && part.equals(MainView.this)){
					statusLineManager.remove(counterStatus);
				}
			}
			public void partOpened(IWorkbenchPart part) {
			}
		});
		
		map = new TileMap(parent,SWT.BORDER | SWT.NO_BACKGROUND,preferences,counters);
		GridData gridData = new GridData();
		gridData.horizontalAlignment = GridData.FILL;
		gridData.verticalAlignment = GridData.FILL;
		gridData.grabExcessHorizontalSpace = true;
		gridData.grabExcessVerticalSpace = true;
		gridData.verticalSpan = 0;
		gridData.horizontalSpan = 0;
		map.setLayoutData(gridData);
		// Load the map.
		try
		{
			map.loadMap();
			map.redraw();
			map.hookListener();
		}
		catch(IOException ex)
		{
			SokobanPlugin.getDefault().getLog().log(new Status(IStatus.ERROR,SokobanPlugin.getDefault().getBundle().getSymbolicName(),IStatus.ERROR,ex.toString(),null));
		}
	}
	
	private void createActions()
	{
		// Creating the Menu
		SokobanPlugin.trace(this.getClass().getName(),"Adding the actions menu."); //$NON-NLS-1$

		Action action = new LevelsetAction(this); //$NON-NLS-1$
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.levelset",action);
		
		action=new SkinAction(this);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.skin",action);

		action=new BackgroundAction(this);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.background",action);
		
		action=new DemoAction(SokobanMessages.getString("MainView.demo"),map);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.demo",action);

		action=new CheckLevelsAction(SokobanMessages.getString("MainView.check"),this);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.best",action);
		
		action=new ChangeLevelAction(SokobanMessages.getString("MainView.change"),this);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.choose",action);
		
		action=new ExitAction(SokobanMessages.getString("MainView.exit"));
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.quit",action);
		
		undoAction = new UndoAction(SokobanMessages.getString("MainView.undo"),this);
		undoAction.setEnabled(false);
		map.setUndoAction(undoAction);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.undo",undoAction);  

		action = new NextLevelAction(-1,map);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.pre",action);
		
		action = new NextLevelAction(0,map);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.reset",action);
		
		action = new NextLevelAction(1,map);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.next",action);
		
		action=new SoundAction(SokobanMessages.getString("MainView.sound"),this);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.sound",action);

		action=new KeyAction(SokobanMessages.getString("MainView.key"),this);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.3dkey",action);

		action=new HelpAction(map);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.help",action);
		
		action=new AboutAction(map);
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.about",action);
		
		pauseAction = new PauseAction(SokobanMessages.getString("MainView.pause"),this); //$NON-NLS-1$
		getViewSite().getActionBars().setGlobalActionHandler("MyWork-Sokoban.pause",pauseAction);
		map.setPauseAction(pauseAction);
	}
	
	public void saveState(IPreferenceStore store)
	{
		// Save state.
		SokobanPlugin.trace(this.getClass().getName(),"Saving persistent state."); //$NON-NLS-1$
		
		// Save mode.
		store.setValue("mode",preferences.getMode()); //$NON-NLS-1$
			
		// Save level.
		store.setValue(Constants.LEVEL_ORIGINAL,preferences.getLevel(Constants.MODE_ORIGINAL));
		store.setValue(Constants.LEVEL_EXTRA,preferences.getLevel(Constants.MODE_EXTRA));
		store.setValue(Constants.LEVEL_OTHER,preferences.getLevel(Constants.MODE_OTHER));
		
		// Save level information.
		ArrayList tmp = (ArrayList)preferences.getLevelsInfo().get(Constants.INFO_ORIGINAL);
		StringBuffer aux = new StringBuffer();
		for(int i=0; i<tmp.size(); i++)
		{
			aux.append(tmp.get(i).toString());
			aux.append("#");
		}
		store.setValue(Constants.INFO_ORIGINAL,aux.toString());

		tmp = (ArrayList)preferences.getLevelsInfo().get(Constants.INFO_EXTRA);
		aux = new StringBuffer();
		for(int i=0; i<tmp.size(); i++)
		{
			aux.append(tmp.get(i).toString());
			aux.append("#");
		}
		store.setValue(Constants.INFO_EXTRA,aux.toString());

		tmp = (ArrayList)preferences.getLevelsInfo().get(Constants.INFO_OTHER);
		aux = new StringBuffer();
		for(int i=0; i<tmp.size(); i++)
		{
			aux.append(tmp.get(i).toString());
			aux.append("#");
		}
		store.setValue(Constants.INFO_OTHER,aux.toString());
		
		// Save sound mode.
		store.setValue(Constants.SOUND_MODE,preferences.isSoundEnabled());
		store.setValue(Constants.SKIN_MODE, preferences.getSkinMode());
		store.setValue(Constants.KEY_MODE, preferences.isKey3DEnabled());
		store.setValue(Constants.BACKGROUND_MODE, preferences.getBackgroundMode());
	}

	public void dispose()
	{
		SokobanPlugin.trace(this.getClass().getName(),"Disposing Sokoban main view."); //$NON-NLS-1$
		
		// Save persistent state.
		saveState(SokobanPlugin.getDefault().getPreferenceStore());
		
		// Dispose resources.
		SokobanPlugin.getResourceManager().dispose();
		
		super.dispose();		
	}

	// Getters
	public Preferences getPreferences() {
		return preferences;
	}

	public TileMap getMap() {
		return map;
	}

	public HashMap getCounters() {
		return counters;
	}

	public PauseAction getPauseAction() {
		return pauseAction;
	}
}

⌨️ 快捷键说明

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