spu2-x: Advanced dialog box implemented in Linux.

git-svn-id: http://pcsx2.googlecode.com/svn/trunk@2644 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
arcum42 2010-02-26 07:39:08 +00:00
parent 1b21deafcd
commit d3311db6df
3 changed files with 87 additions and 73 deletions

View File

@ -18,7 +18,6 @@
#include "Global.h" #include "Global.h"
#include "Dialogs.h" #include "Dialogs.h"
#include "Config.h" #include "Config.h"
#include <gtk/gtk.h>
#ifdef PCSX2_DEVBUILD #ifdef PCSX2_DEVBUILD
static const int LATENCY_MAX = 3000; static const int LATENCY_MAX = 3000;
@ -30,10 +29,6 @@ static const int LATENCY_MIN = 40;
int AutoDMAPlayRate[2] = {0,0}; int AutoDMAPlayRate[2] = {0,0};
CONFIG_DSOUNDOUT Config_DSoundOut;
CONFIG_WAVEOUT Config_WaveOut;
CONFIG_XAUDIO2 Config_XAudio2;
// Default settings. // Default settings.
// MIXING // MIXING
@ -95,16 +90,12 @@ void WriteSettings()
//DebugConfig::WriteSettings(); //DebugConfig::WriteSettings();
} }
void displayDialog(); void advanced_dialog()
void configure()
{ {
ReadSettings(); SoundtouchCfg::DisplayDialog();
displayDialog();
WriteSettings();
} }
void displayDialog() void DisplayDialog()
{ {
GtkWidget *dialog, *main_label; GtkWidget *dialog, *main_label;
int return_value; int return_value;
@ -170,14 +161,12 @@ void displayDialog()
else else
gtk_combo_box_set_active(GTK_COMBO_BOX(mod_box), 1); gtk_combo_box_set_active(GTK_COMBO_BOX(mod_box), 1);
// latency slider
latency_slide = gtk_hscale_new_with_range(LATENCY_MIN, LATENCY_MAX, 5); latency_slide = gtk_hscale_new_with_range(LATENCY_MIN, LATENCY_MAX, 5);
gtk_range_set_value(GTK_RANGE(latency_slide), SndOutLatencyMS); gtk_range_set_value(GTK_RANGE(latency_slide), SndOutLatencyMS);
time_check = gtk_check_button_new_with_label("Disable Time Stretch"); time_check = gtk_check_button_new_with_label("Disable Time Stretch");
// Advanced button advanced_button = gtk_button_new_with_label("Advanced...");
mixing_vbox = gtk_vbox_new(false, 5); mixing_vbox = gtk_vbox_new(false, 5);
output_vbox = gtk_vbox_new(false, 5); output_vbox = gtk_vbox_new(false, 5);
@ -194,6 +183,7 @@ void displayDialog()
gtk_container_add(GTK_CONTAINER(output_vbox), mod_label); gtk_container_add(GTK_CONTAINER(output_vbox), mod_label);
gtk_container_add(GTK_CONTAINER(output_vbox), mod_box); gtk_container_add(GTK_CONTAINER(output_vbox), mod_box);
gtk_container_add(GTK_CONTAINER(output_vbox), latency_slide); gtk_container_add(GTK_CONTAINER(output_vbox), latency_slide);
gtk_container_add(GTK_CONTAINER(output_vbox), advanced_button);
gtk_container_add(GTK_CONTAINER(output_vbox), time_check); gtk_container_add(GTK_CONTAINER(output_vbox), time_check);
gtk_container_add(GTK_CONTAINER(main_hbox), mixing_vbox); gtk_container_add(GTK_CONTAINER(main_hbox), mixing_vbox);
@ -207,6 +197,8 @@ void displayDialog()
gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), main_hbox); gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), main_hbox);
gtk_widget_show_all (dialog); gtk_widget_show_all (dialog);
g_signal_connect_swapped(GTK_OBJECT (advanced_button), "clicked", G_CALLBACK(advanced_dialog), advanced_button);
return_value = gtk_dialog_run (GTK_DIALOG (dialog)); return_value = gtk_dialog_run (GTK_DIALOG (dialog));
if (return_value == GTK_RESPONSE_ACCEPT) if (return_value == GTK_RESPONSE_ACCEPT)
@ -231,3 +223,10 @@ void displayDialog()
gtk_widget_destroy (dialog); gtk_widget_destroy (dialog);
} }
void configure()
{
ReadSettings();
DisplayDialog();
WriteSettings();
}

View File

@ -18,6 +18,7 @@
#ifndef CONFIG_H_INCLUDED #ifndef CONFIG_H_INCLUDED
#define CONFIG_H_INCLUDED #define CONFIG_H_INCLUDED
#include <gtk/gtk.h>
#include <string> #include <string>
extern bool DebugEnabled; extern bool DebugEnabled;
@ -96,66 +97,18 @@ namespace SoundtouchCfg
static int SeekWindowMS = 16; static int SeekWindowMS = 16;
static int OverlapMS = 7; static int OverlapMS = 7;
/*static*/ void ReadSettings(); void ReadSettings();
/*static*/ void WriteSettings(); void WriteSettings();
/*static*/ void OpenDialog( uptr hWnd ); void DisplayDialog();
static void ClampValues(); static void ClampValues();
}; };
// *** BEGIN DRIVER-SPECIFIC CONFIGURATION ***
// -------------------------------------------
// DSOUND
struct CONFIG_XAUDIO2
{
std::wstring Device;
s8 NumBuffers;
CONFIG_XAUDIO2() :
Device(),
NumBuffers( 2 )
{
}
};
// DSOUND
struct CONFIG_DSOUNDOUT
{
std::wstring Device;
s8 NumBuffers;
CONFIG_DSOUNDOUT() :
Device(),
NumBuffers( 3 )
{
}
};
// WAVEOUT
struct CONFIG_WAVEOUT
{
std::wstring Device;
s8 NumBuffers;
CONFIG_WAVEOUT() :
Device(),
NumBuffers( 4 )
{
}
};
/*extern CONFIG_DSOUNDOUT Config_DSoundOut;
extern CONFIG_WAVEOUT Config_WaveOut;
extern CONFIG_XAUDIO2 Config_XAudio2;*/
//////
void ReadSettings(); void ReadSettings();
void WriteSettings(); void WriteSettings();
void configure(); void configure();
void AboutBox(); void AboutBox();
extern void advanced_dialog();
#endif // CONFIG_H_INCLUDED #endif // CONFIG_H_INCLUDED

View File

@ -57,13 +57,75 @@ void WriteSettings()
CfgWriteInt( L"SOUNDTOUCH", L"OverlapMS", OverlapMS ); CfgWriteInt( L"SOUNDTOUCH", L"OverlapMS", OverlapMS );
} }
/*bool CALLBACK SoundtouchCfg::DialogProc(uptr hWnd,u32 uMsg,uptr wParam,uptr lParam) static GtkWidget *seq_label, *seek_label, *over_label;
{ static GtkWidget *seq_slide, *seek_slide, *over_slide;
}*/
void OpenDialog( uptr hWnd ) void restore_defaults()
{ {
gtk_range_set_value(GTK_RANGE(seq_slide), 63);
gtk_range_set_value(GTK_RANGE(seek_slide), 16);
gtk_range_set_value(GTK_RANGE(over_slide), 7);
}
void DisplayDialog()
{
int return_value;
GtkWidget *dialog, *main_label;
GtkWidget *default_button;
ReadSettings(); ReadSettings();
/* Create the widgets */
dialog = gtk_dialog_new_with_buttons (
"Advanced Settings",
NULL, /* parent window*/
(GtkDialogFlags)(GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT),
GTK_STOCK_OK,
GTK_RESPONSE_ACCEPT,
GTK_STOCK_CANCEL,
GTK_RESPONSE_REJECT,
NULL);
main_label = gtk_label_new ("These are advanced configuration options fine tuning time stretching behavior. Larger values are better for slowdown, while smaller values are better for speedup (more then 60 fps.). All options are in microseconds.");
gtk_label_set_line_wrap (GTK_LABEL(main_label), true);
default_button = gtk_button_new_with_label("Reset to Defaults");
seq_label = gtk_label_new("Sequence Length");
seq_slide = gtk_hscale_new_with_range(SequenceLen_Min, SequenceLen_Max, 2);
gtk_range_set_value(GTK_RANGE(seq_slide), SequenceLenMS);
seek_label = gtk_label_new("Seek Window Size");
seek_slide = gtk_hscale_new_with_range(SeekWindow_Min, SeekWindow_Max, 1);
gtk_range_set_value(GTK_RANGE(seek_slide), SeekWindowMS);
over_label = gtk_label_new("Overlap");
over_slide = gtk_hscale_new_with_range(Overlap_Min, Overlap_Max, 1);
gtk_range_set_value(GTK_RANGE(over_slide), OverlapMS);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), main_label);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), default_button);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), seq_label);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), seq_slide);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), seek_label);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), seek_slide);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), over_label);
gtk_container_add(GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), over_slide);
gtk_widget_show_all (dialog);
g_signal_connect_swapped(GTK_OBJECT (default_button), "clicked", G_CALLBACK(restore_defaults), default_button);
return_value = gtk_dialog_run (GTK_DIALOG (dialog));
if (return_value == GTK_RESPONSE_ACCEPT)
{
SequenceLenMS = gtk_range_get_value(GTK_RANGE(seq_slide));;
SeekWindowMS = gtk_range_get_value(GTK_RANGE(seek_slide));;
OverlapMS = gtk_range_get_value(GTK_RANGE(over_slide));;
}
gtk_widget_destroy (dialog);
WriteSettings(); WriteSettings();
} }
} }