void PreferencesModel::savePreferences(PreferencesModel *preferences)
{
	const QString appDir = x264_data_path();
	QSettings settings(QString("%1/preferences.ini").arg(appDir), QSettings::IniFormat);

	settings.beginGroup("preferences");
	settings.setValue("auto_run_next_job", preferences->m_autoRunNextJob);
	settings.setValue("shutdown_computer_on_completion", preferences->m_shutdownComputer);
	settings.setValue("max_running_job_count", preferences->m_maxRunningJobCount);
	settings.setValue("use_10bit_encoding", preferences->m_use10BitEncoding);
	settings.setValue("use_64bit_avisynth", preferences->m_useAvisyth64Bit);
	settings.setValue("save_log_files", preferences->m_saveLogFiles);
	settings.setValue("save_to_source_path", preferences->m_saveToSourcePath);
	settings.setValue("process_priority", preferences->m_processPriority);
	settings.setValue("enable_sounds", preferences->m_enableSounds);
	settings.setValue("disable_warnings", preferences->m_disableWarnings);
	settings.sync();
}
void PreferencesModel::loadPreferences(PreferencesModel *preferences)
{
	const QString appDir = x264_data_path();
	QSettings settings(QString("%1/preferences.ini").arg(appDir), QSettings::IniFormat);

	PreferencesModel defaults;

	settings.beginGroup("preferences");
	preferences->m_autoRunNextJob = settings.value("auto_run_next_job", QVariant(defaults.m_autoRunNextJob)).toBool();
	preferences->m_maxRunningJobCount = qBound(1U, settings.value("max_running_job_count", QVariant(defaults.m_maxRunningJobCount)).toUInt(), 16U);
	preferences->m_shutdownComputer = settings.value("shutdown_computer_on_completion", QVariant(defaults.m_shutdownComputer)).toBool();
	preferences->m_use10BitEncoding = settings.value("use_10bit_encoding", QVariant(defaults.m_use10BitEncoding)).toBool();
	preferences->m_useAvisyth64Bit = settings.value("use_64bit_avisynth", QVariant(defaults.m_useAvisyth64Bit)).toBool();
	preferences->m_saveLogFiles = settings.value("save_log_files", QVariant(defaults.m_saveLogFiles)).toBool();
	preferences->m_saveToSourcePath = settings.value("save_to_source_path", QVariant(defaults.m_saveToSourcePath)).toBool();
	preferences->m_processPriority = settings.value("process_priority", QVariant(defaults.m_processPriority)).toInt();
	preferences->m_enableSounds = settings.value("enable_sounds", QVariant(defaults.m_enableSounds)).toBool();
	preferences->m_disableWarnings = settings.value("disable_warnings", QVariant(defaults.m_disableWarnings)).toBool();
}
void PreferencesModel::savePreferences(PreferencesModel *preferences)
{
	const QString appDir = x264_data_path();
	QSettings settings(QString("%1/preferences.ini").arg(appDir), QSettings::IniFormat);
	settings.beginGroup("preferences");

	STORE_VALUE(AutoRunNextJob    );
	STORE_VALUE(MaxRunningJobCount);
	STORE_VALUE(ShutdownComputer  );
	STORE_VALUE(Prefer64BitSource );
	STORE_VALUE(SaveLogFiles      );
	STORE_VALUE(SaveToSourcePath  );
	STORE_VALUE(ProcessPriority   );
	STORE_VALUE(EnableSounds      );
	STORE_VALUE(DisableWarnings   );
	STORE_VALUE(NoUpdateReminder  );
	STORE_VALUE(NoSystrayWarning  );
	
	settings.sync();
}
void PreferencesModel::loadPreferences(PreferencesModel *preferences)
{
	const QString appDir = x264_data_path();
	PreferencesModel defaults;
	QSettings settings(QString("%1/preferences.ini").arg(appDir), QSettings::IniFormat);
	settings.beginGroup("preferences");

	LOAD_VALUE_B(AutoRunNextJob    );
	LOAD_VALUE_U(MaxRunningJobCount);
	LOAD_VALUE_B(ShutdownComputer  );
	LOAD_VALUE_B(Prefer64BitSource );
	LOAD_VALUE_B(SaveLogFiles      );
	LOAD_VALUE_B(SaveToSourcePath  );
	LOAD_VALUE_I(ProcessPriority   );
	LOAD_VALUE_B(EnableSounds      );
	LOAD_VALUE_B(DisableWarnings   );
	LOAD_VALUE_B(NoUpdateReminder  );
	LOAD_VALUE_B(NoSystrayWarning  );

	//Validation
	preferences->setProcessPriority(qBound(-2, preferences->getProcessPriority(), 2));
	preferences->setMaxRunningJobCount(qBound(1U, preferences->getMaxRunningJobCount(), 16U));
}