auto import from //depot/cupcake/@135843
diff --git a/simulator/app/PrefsDialog.cpp b/simulator/app/PrefsDialog.cpp
new file mode 100644
index 0000000..e146a56
--- /dev/null
+++ b/simulator/app/PrefsDialog.cpp
@@ -0,0 +1,292 @@
+//
+// Copyright 2005 The Android Open Source Project
+//
+// Preferences modal dialog.
+//
+
+// For compilers that support precompilation, include "wx/wx.h".
+#include "wx/wxprec.h"
+// Otherwise, include all standard headers
+#ifndef WX_PRECOMP
+# include "wx/wx.h"
+#endif
+
+#include "PrefsDialog.h"
+#include "Preferences.h"
+#include "MyApp.h"
+#include "Resource.h"
+
+BEGIN_EVENT_TABLE(PrefsDialog, wxDialog)
+END_EVENT_TABLE()
+
+/*
+ * Constructor.
+ */
+PrefsDialog::PrefsDialog(wxWindow* parent)
+ : wxDialog(parent, IDD_PREFS, wxT("Preferences"), wxDefaultPosition,
+ wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER ),
+ mAutoPowerOn(false),
+ mGammaCorrection(1.0),
+ mEnableSound(true),
+ mEnableFakeCamera(true),
+ mLogLevel(0)
+{
+ LoadPreferences();
+ CreateControls();
+}
+
+/*
+ * Destructor. Not much to do.
+ */
+PrefsDialog::~PrefsDialog()
+{
+}
+
+/*
+ * Create all of the pages and add them to the notebook.
+ */
+void PrefsDialog::CreateControls(void)
+{
+ wxBoxSizer* mainSizer = new wxBoxSizer(wxVERTICAL);
+ wxBoxSizer* okCancelSizer = new wxBoxSizer(wxHORIZONTAL);
+ mNotebook.Create(this, wxID_ANY);
+ wxPanel* page;
+
+ /* pages added to notebook are owned by notebook */
+ page = CreateSimulatorPage(&mNotebook);
+ mNotebook.AddPage(page, wxT("Simulator"), true); // selected page
+ page = CreateRuntimePage(&mNotebook);
+ mNotebook.AddPage(page, wxT("Runtime"), false);
+
+ wxButton* cancel = new wxButton(this, wxID_CANCEL, wxT("&Cancel"),
+ wxDefaultPosition, wxDefaultSize, 0);
+ okCancelSizer->Add(cancel, 0, wxALL | wxALIGN_RIGHT, kInterSpacing);
+
+ wxButton* ok = new wxButton(this, wxID_OK, wxT("&OK"),
+ wxDefaultPosition, wxDefaultSize, 0);
+ okCancelSizer->Add(ok, 0, wxALL | wxALIGN_RIGHT, kInterSpacing);
+
+ mainSizer->Add(&mNotebook, 1, wxEXPAND);
+ mainSizer->Add(okCancelSizer, 0, wxALIGN_RIGHT);
+
+ SetSizer(mainSizer);
+
+ mainSizer->Fit(this); // shrink-to-fit
+ mainSizer->SetSizeHints(this); // define minimum size
+}
+
+/*
+ * Load preferences from config file
+ */
+void PrefsDialog::LoadPreferences(void)
+{
+ Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
+ assert(pPrefs != NULL);
+
+ /*
+ * Load preferences.
+ */
+ mConfigFile = ((MyApp*)wxTheApp)->GetConfigFileName();
+
+ pPrefs->GetDouble("gamma", &mGammaCorrection);
+ pPrefs->GetString("debugger", /*ref*/ mDebugger);
+ pPrefs->GetString("valgrinder", /*ref*/ mValgrinder);
+ pPrefs->GetBool("auto-power-on", &mAutoPowerOn);
+ pPrefs->GetBool("enable-sound", &mEnableSound);
+ pPrefs->GetBool("enable-fake-camera", &mEnableFakeCamera);
+}
+
+/*
+ * Transfer data from our members to the window controls.
+ *
+ * First we have to pull the data out of the preferences database.
+ * Anything that hasn't already been added with a default value will
+ * be given a default here, which may or may not match the default
+ * behavior elsewhere. The best solution to this is to define the
+ * default when the preferences file is created or read, so that we're
+ * never left guessing here.
+ */
+bool PrefsDialog::TransferDataToWindow(void)
+{
+ /*
+ * Do standard dialog setup.
+ */
+ wxTextCtrl* configFileName = (wxTextCtrl*) FindWindow(IDC_SPREFS_CONFIG_NAME);
+ wxTextCtrl* debugger = (wxTextCtrl*) FindWindow(IDC_SPREFS_DEBUGGER);
+ wxTextCtrl* valgrinder = (wxTextCtrl*) FindWindow(IDC_SPREFS_VALGRINDER);
+ wxCheckBox* autoPowerOn = (wxCheckBox*) FindWindow(IDC_SPREFS_AUTO_POWER_ON);
+ wxCheckBox* enableSound = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_SOUND);
+ wxCheckBox* enableFakeCamera = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_FAKE_CAMERA);
+
+ wxTextCtrl* gamma = (wxTextCtrl*) FindWindow(IDC_RPREFS_GAMMA);
+
+ configFileName->SetValue(mConfigFile);
+ debugger->SetValue(mDebugger);
+ valgrinder->SetValue(mValgrinder);
+ autoPowerOn->SetValue(mAutoPowerOn);
+ enableSound->SetValue(mEnableSound);
+ enableFakeCamera->SetValue(mEnableFakeCamera);
+
+ wxString tmpStr;
+ tmpStr.Printf(wxT("%.3f"), mGammaCorrection);
+ gamma->SetValue(tmpStr);
+
+ return true;
+}
+
+/*
+ * Transfer and validate data from the window controls.
+ *
+ * This doesn't get called if the user cancels out of the dialog.
+ */
+bool PrefsDialog::TransferDataFromControls(void)
+{
+ /*
+ * Do standard dialog export.
+ *
+ * We should error-check all of these.
+ */
+ // configName is read-only, don't need it here
+ wxTextCtrl* debugger = (wxTextCtrl*) FindWindow(IDC_SPREFS_DEBUGGER);
+ wxTextCtrl* valgrinder = (wxTextCtrl*) FindWindow(IDC_SPREFS_VALGRINDER);
+ wxCheckBox* autoPowerOn = (wxCheckBox*) FindWindow(IDC_SPREFS_AUTO_POWER_ON);
+ wxCheckBox* enableSound = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_SOUND);
+ wxCheckBox* enableFakeCamera = (wxCheckBox*) FindWindow(IDC_RPREFS_ENABLE_FAKE_CAMERA);
+
+ wxTextCtrl* gamma = (wxTextCtrl*) FindWindow(IDC_RPREFS_GAMMA);
+
+ mDebugger = debugger->GetValue();
+ mValgrinder = valgrinder->GetValue();
+ mAutoPowerOn = autoPowerOn->GetValue();
+ mEnableSound = enableSound->GetValue();
+ mEnableFakeCamera = enableFakeCamera->GetValue();
+
+ wxString tmpStr;
+ tmpStr = gamma->GetValue();
+ bool toDouble = tmpStr.ToDouble(&mGammaCorrection); // returns 0.0 on err; use strtof()?
+
+ if (!toDouble || mGammaCorrection <= 0.0 || mGammaCorrection > 2.0) {
+ wxMessageBox(wxT("Bad value for gamma -- must be > 0.0 and <= 2.0"),
+ wxT("Hoser"), wxOK, this);
+ return false;
+ }
+
+ return true;
+}
+
+/*
+ * Transfer preferences to config file
+ */
+bool PrefsDialog::TransferDataFromWindow(void)
+{
+ Preferences* pPrefs = ((MyApp*)wxTheApp)->GetPrefs();
+ assert(pPrefs != NULL);
+
+ /*
+ * Grab the information from the controls and save in member field
+ */
+
+ if (!TransferDataFromControls())
+ return false;
+
+ pPrefs->SetString("debugger", mDebugger.ToAscii());
+ pPrefs->SetString("valgrinder", mValgrinder.ToAscii());
+ pPrefs->SetBool("auto-power-on", mAutoPowerOn);
+ pPrefs->SetBool("enable-sound", mEnableSound);
+ pPrefs->SetBool("enable-fake-camera", mEnableFakeCamera);
+
+ pPrefs->SetDouble("gamma", mGammaCorrection);
+
+ return true;
+}
+
+
+/*
+ * Create the Simulator Preferences page.
+ */
+wxPanel* PrefsDialog::CreateSimulatorPage(wxBookCtrlBase* parent)
+{
+ wxPanel* panel = new wxPanel(parent);
+
+ wxStaticText* configNameDescr = new wxStaticText(panel, wxID_STATIC,
+ wxT("Config file:"));
+ wxTextCtrl* configName = new wxTextCtrl(panel, IDC_SPREFS_CONFIG_NAME,
+ wxT(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
+ // make it visibly different; unfortunately this kills scroll, copy&paste
+ configName->Enable(false);
+
+ wxStaticText* debuggerDescr = new wxStaticText(panel, wxID_STATIC,
+ wxT("Debugger:"));
+ wxTextCtrl* debugger = new wxTextCtrl(panel, IDC_SPREFS_DEBUGGER);
+
+ wxStaticText* valgrinderDescr = new wxStaticText(panel, wxID_STATIC,
+ wxT("Valgrind:"));
+ wxTextCtrl* valgrinder = new wxTextCtrl(panel, IDC_SPREFS_VALGRINDER);
+
+ wxCheckBox* autoPowerOn = new wxCheckBox(panel, IDC_SPREFS_AUTO_POWER_ON,
+ wxT("Boot runtime when simulator starts"));
+
+ wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
+ sizerPanel->Add(kMinWidth, kEdgeSpacing); // forces minimum width
+ sizerPanel->Add(configNameDescr);
+ sizerPanel->Add(configName, 0, wxEXPAND);
+ sizerPanel->AddSpacer(kInterSpacing);
+ sizerPanel->AddSpacer(kInterSpacing);
+ sizerPanel->Add(debuggerDescr);
+ sizerPanel->Add(debugger, 0, wxEXPAND);
+ sizerPanel->AddSpacer(kInterSpacing);
+ sizerPanel->Add(valgrinderDescr);
+ sizerPanel->Add(valgrinder, 0, wxEXPAND);
+ sizerPanel->AddSpacer(kInterSpacing);
+ sizerPanel->Add(autoPowerOn);
+ sizerPanel->AddSpacer(kInterSpacing);
+
+ wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
+ horizIndent->AddSpacer(kEdgeSpacing);
+ horizIndent->Add(sizerPanel, wxSHAPED);
+ horizIndent->AddSpacer(kEdgeSpacing);
+ panel->SetSizer(horizIndent);
+
+ return panel;
+}
+
+/*
+ * Create the Runtime Preferences page.
+ */
+wxPanel* PrefsDialog::CreateRuntimePage(wxBookCtrlBase* parent)
+{
+ wxPanel* panel = new wxPanel(parent);
+
+ wxStaticText* gammaStrDescr = new wxStaticText(panel, wxID_STATIC,
+ wxT("Gamma correction:"));
+ wxTextCtrl* gammaStr = new wxTextCtrl(panel, IDC_RPREFS_GAMMA);
+
+ wxBoxSizer* gammaSizer = new wxBoxSizer(wxHORIZONTAL);
+ gammaSizer->Add(gammaStrDescr, 0, wxALIGN_CENTER_VERTICAL);
+ gammaSizer->AddSpacer(kInterSpacing);
+ gammaSizer->Add(gammaStr);
+
+ wxBoxSizer* sizerPanel = new wxBoxSizer(wxVERTICAL);
+ sizerPanel->Add(kMinWidth, kEdgeSpacing); // forces minimum width
+ sizerPanel->Add(gammaSizer);
+ sizerPanel->AddSpacer(kInterSpacing);
+
+ wxCheckBox* enableSound = new wxCheckBox(panel, IDC_RPREFS_ENABLE_SOUND,
+ wxT("Enable Sound"));
+ sizerPanel->AddSpacer(kInterSpacing);
+ sizerPanel->Add(enableSound);
+
+ wxCheckBox* enableFakeCamera = new wxCheckBox(panel, IDC_RPREFS_ENABLE_FAKE_CAMERA,
+ wxT("Enable Fake Camera"));
+ sizerPanel->AddSpacer(kInterSpacing);
+ sizerPanel->Add(enableFakeCamera);
+
+ wxBoxSizer* horizIndent = new wxBoxSizer(wxHORIZONTAL);
+ horizIndent->AddSpacer(kEdgeSpacing);
+ horizIndent->Add(sizerPanel, wxEXPAND);
+ horizIndent->AddSpacer(kEdgeSpacing);
+ panel->SetSizer(horizIndent);
+
+ return panel;
+}
+