public int enableRecorder(final boolean b) {
		if (!EventQueue.isDispatchThread())
			throw new RuntimeException("must be called in the EDT thread.");
		model.stopImmediately();
		if (b) {
			/* IMPORTANT!!! we should turn the recorder on */
			if (!model.hasEmbeddedMovie()) {
				model.activateEmbeddedMovie(true);
				/*
				 * activate embedded movie will automatically turn the recorder on at the end of array initialization
				 */
			}
			else {
				/*
				 * if there is no embedded movie, we should compulsorily turn on the recorder mode, otherwise the
				 * recording process will not be added to the task pool upon job initialization.
				 */
				model.setRecorderDisabled(false);
			}
			if (runPanel != null)
				remove(runPanel);
			if (bottomBarShown) {
				add(moviePanel, BorderLayout.SOUTH);
				repaint();
				getParent().validate();
			}
		}
		else {
			model.activateEmbeddedMovie(false);
			remove(moviePanel);
			if (bottomBarShown) {
				if (runPanel == null)
					createRunPanel();
				add(runPanel, BorderLayout.SOUTH);
				repaint();
				getParent().validate();
			}
		}
		return JOptionPane.YES_OPTION;
	}