public boolean nextStep() {
		if (!done())
			return false;

		step++;

		switch (step) {
		case FIRST_SETS:
			parseAction.setEnabled(false);
			firstFollow.getFFModel().setCanEditFirst(true);
			firstFollow.getFFModel().setCanEditFollow(false);
			directions
					.setText("Define FIRST sets.  ! is the lambda character.");
			break;
		case FOLLOW_SETS:
			firstFollow.getFFModel().setCanEditFirst(false);
			firstFollow.getFFModel().setCanEditFollow(true);
			directions
					.setText("Define FOLLOW sets.  $ is the end of string character.");
			break;
		case PARSE_TABLE:
			firstFollow.getFFModel().setCanEditFollow(false);
			directions
					.setText("Fill entries in parse table.  Use ! for a lambda entry.");
			break;
		case FINISHED:
			try {
				parseTable.getCellEditor().stopCellEditing();
			} catch (NullPointerException e) {
			}

			doSelectedAction.setEnabled(false);
			doStepAction.setEnabled(false);
			doAllAction.setEnabled(false);
			nextAction.setEnabled(false);
			if (isLL1()) {
				parseAction.setEnabled(true);
				directions
						.setText("Parse table complete.  Press \"parse\" to use it.");
			} else {
				directions.setText("Parse table complete, but has ambiguity.");
			}
			break;
		}
		return true;
	}