rockbox/rbutil/install_dialogs.cpp
Dominik Wenger 19cc9d063a fix Tab navigation in rbutil, and make it also look at other places for rbutil.ini.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13603 a1c6a512-1295-4272-9138-f99709370657
2007-06-09 20:34:00 +00:00

671 lines
18 KiB
C++

#include "install_dialogs.h"
#include "wizard.xpm"
////////////////////////////////////////////////
//// Bootloader Installation
/////////////////////////////////////////////////
IMPLEMENT_CLASS( bootloaderInstallDlg, wxDialog )
BEGIN_EVENT_TABLE( bootloaderInstallDlg, wxDialog )
END_EVENT_TABLE()
bootloaderInstallDlg::bootloaderInstallDlg( )
{
Init();
}
bootloaderInstallDlg::bootloaderInstallDlg( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
Init();
Create(parent, id, caption, pos, size, style);
}
void bootloaderInstallDlg::CreateControls()
{
// A top-level sizer
wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
this->SetSizer(topSizer);
wxBoxSizer* wxBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
topSizer->Add(wxBoxSizer2, 0, wxALIGN_LEFT|wxALL, 5);
// bitmap
wxBitmap sidebmp(wizard_xpm);
ImageCtrl* sideimage = new ImageCtrl(this,wxID_ANY);
sideimage->SetBitmap(sidebmp);
wxBoxSizer2->Add(sideimage,0,wxALIGN_LEFT | wxALL,5);
wxBoxSizer* wxBoxSizer3 = new wxBoxSizer(wxVERTICAL);
wxBoxSizer2->Add(wxBoxSizer3, 0, wxALIGN_LEFT|wxALL, 5);
m_devicepos = new DevicePositionCtrl(this,ID_DEVICEPOS);
wxBoxSizer3->Add(m_devicepos, 0, wxALIGN_LEFT|wxALL, 5);
m_firmwarepos = new FirmwarePositionCtrl(this,ID_FIRMWARE);
wxBoxSizer3->Add(m_firmwarepos, 0, wxALIGN_LEFT|wxALL, 5);
OkCancelCtrl* okCancel = new OkCancelCtrl(this,wxID_ANY);
topSizer->Add(okCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
}
//init the local variables
void bootloaderInstallDlg::Init()
{
}
// create the window
bool bootloaderInstallDlg::Create( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
if (!wxDialog::Create( parent, id, caption, pos, size, style ))
return false;
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
return true;
}
// tranver data from the controls
bool bootloaderInstallDlg::TransferDataFromWindow()
{
if( m_devicepos->IsShown())
{
gv->curdestdir = m_devicepos->getDevicePos();
if(!wxDirExists(gv->curdestdir))
{
WARN_DIALOG(wxT("The Devicepostion is not valid"),
wxT("Select a Deviceposition"));
gv->curdestdir = wxT("");
return false;
}
}
if(m_firmwarepos->IsShown())
{
gv->curfirmware = m_firmwarepos->getFirmwarePos();
if(!wxFileExists(gv->curfirmware))
{
WARN_DIALOG(wxT("The Firmware position is not valid"),
wxT("Select a original Firmware"));
gv->curfirmware = wxT("");
return false;
}
}
return true;
}
// tranver data to the controls
bool bootloaderInstallDlg::TransferDataToWindow()
{
if(gv->curplat == wxT(""))
{
WARN_DIALOG(wxT("You have not selected a audio device"),
wxT("Select a Device"));
return false;
}
int index = gv->plat_id.Index(gv->curplat);
if(!gv->plat_needsbootloader[index])
{
WARN_DIALOG(wxT("This Device doesnt need a Bootloader"),
wxT("Bootloader"));
return false;
}
if(gv->plat_bootloadermethod[index] != wxT("ipodpatcher") && gv->plat_bootloadermethod[index] != wxT("sansapatcher"))
{
m_devicepos->Show(true);
}else
{
m_devicepos->Show(false);
}
if(gv->plat_bootloadermethod[index] == wxT("fwpatcher"))
{
m_firmwarepos->Show(true);
}else
{
m_firmwarepos->Show(false);
}
m_devicepos->setDefault();
m_firmwarepos->setDefault();
return true;
}
////////////////////////////////////////////////
//// Font Installation
/////////////////////////////////////////////////
IMPLEMENT_CLASS( fontInstallDlg, wxDialog )
BEGIN_EVENT_TABLE( fontInstallDlg, wxDialog )
END_EVENT_TABLE()
fontInstallDlg::fontInstallDlg( )
{
Init();
}
fontInstallDlg::fontInstallDlg( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
Init();
Create(parent, id, caption, pos, size, style);
}
void fontInstallDlg::CreateControls()
{
// A top-level sizer
wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
this->SetSizer(topSizer);
wxBoxSizer* wxBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
topSizer->Add(wxBoxSizer2, 0, wxALIGN_LEFT|wxALL, 5);
// bitmap
wxBitmap sidebmp(wizard_xpm);
ImageCtrl* sideimage = new ImageCtrl(this,wxID_ANY);
sideimage->SetBitmap(sidebmp);
wxBoxSizer2->Add(sideimage,0,wxALIGN_LEFT | wxALL,5);
wxBoxSizer* wxBoxSizer3 = new wxBoxSizer(wxVERTICAL);
wxBoxSizer2->Add(wxBoxSizer3, 0, wxALIGN_LEFT|wxALL, 5);
m_devicepos = new DevicePositionCtrl(this,ID_DEVICEPOS);
wxBoxSizer3->Add(m_devicepos, 0, wxALIGN_LEFT|wxALL, 5);
OkCancelCtrl* okCancel = new OkCancelCtrl(this,wxID_ANY);
topSizer->Add(okCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
// controls at the bottom
wxBoxSizer* wxBoxSizer7 = new wxBoxSizer(wxVERTICAL);
topSizer->Add(wxBoxSizer7, 0, wxGROW | wxALL, 5);
}
//init the local variables
void fontInstallDlg::Init()
{
}
// create the window
bool fontInstallDlg::Create( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
if (!wxDialog::Create( parent, id, caption, pos, size, style ))
return false;
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
return true;
}
// tranver data from the controls
bool fontInstallDlg::TransferDataFromWindow()
{
gv->curdestdir = m_devicepos->getDevicePos();
if(!wxDirExists(gv->curdestdir))
{
WARN_DIALOG(wxT("The Devicepostion is not valid"),
wxT("Select a Deviceposition"));
gv->curdestdir = wxT("");
return false;
}
return true;
}
// tranver data to the controls
bool fontInstallDlg::TransferDataToWindow()
{
m_devicepos->setDefault();
return true;
}
////////////////////////////////////////////////
//// Rockbox DeInstallation
/////////////////////////////////////////////////
IMPLEMENT_CLASS( rockboxDeInstallDlg, wxDialog )
BEGIN_EVENT_TABLE( rockboxDeInstallDlg, wxDialog )
END_EVENT_TABLE()
rockboxDeInstallDlg::rockboxDeInstallDlg( )
{
Init();
}
rockboxDeInstallDlg::rockboxDeInstallDlg( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
Init();
Create(parent, id, caption, pos, size, style);
}
void rockboxDeInstallDlg::CreateControls()
{
// A top-level sizer
wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
this->SetSizer(topSizer);
wxBoxSizer* wxBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
topSizer->Add(wxBoxSizer2, 0, wxALIGN_LEFT|wxALL, 5);
// bitmap
wxBitmap sidebmp(wizard_xpm);
ImageCtrl* sideimage = new ImageCtrl(this,wxID_ANY);
sideimage->SetBitmap(sidebmp);
wxBoxSizer2->Add(sideimage,0,wxALIGN_LEFT | wxALL,5);
wxBoxSizer* wxBoxSizer3 = new wxBoxSizer(wxVERTICAL);
wxBoxSizer2->Add(wxBoxSizer3, 0, wxALIGN_LEFT|wxALL, 5);
m_devicepos = new DevicePositionCtrl(this,ID_DEVICEPOS);
wxBoxSizer3->Add(m_devicepos, 0, wxALIGN_LEFT|wxALL, 5);
// Full deinstallation ?
wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
wxT("Rockbox Utility normally uninstalls Rockbox using an uninstall\n"
"file created during installation. This means that when Rockbox is\n"
"uninstalled all your configuration files are preserved. However,\n"
"you can also perform a full uninstall, which will completely\n"
"remove all traces of Rockbox from your system, and can be used\n"
"even if Rockbox was previously installed manually."));
wxBoxSizer3->Add(WxStaticText1,0,wxGROW | wxALL,5);
wxCheckBox* FullCheckBox = new wxCheckBox(this, ID_FULL_CHCKBX,
wxT("Perform a full uninstall"));
wxBoxSizer3->Add(FullCheckBox, 0, wxALL, 5);
// controls at the bottom
OkCancelCtrl* okCancel = new OkCancelCtrl(this,wxID_ANY);
topSizer->Add(okCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
}
//init the local variables
void rockboxDeInstallDlg::Init()
{
}
// create the window
bool rockboxDeInstallDlg::Create( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
if (!wxDialog::Create( parent, id, caption, pos, size, style ))
return false;
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
return true;
}
// tranver data from the controls
bool rockboxDeInstallDlg::TransferDataFromWindow()
{
gv->curdestdir = m_devicepos->getDevicePos();
if(!wxDirExists(gv->curdestdir))
{
WARN_DIALOG(wxT("The Devicepostion is not valid"),
wxT("Select a Deviceposition"));
gv->curdestdir = wxT("");
return false;
}
wxCheckBox* fullchkbx = (wxCheckBox*) FindWindow(ID_FULL_CHCKBX);
gv->curisfull = fullchkbx->IsChecked();
return true;
}
// tranver data to the controls
bool rockboxDeInstallDlg::TransferDataToWindow()
{
m_devicepos->setDefault();
return true;
}
////////////////////////////////////////////////
//// Themes Installation
/////////////////////////////////////////////////
IMPLEMENT_CLASS( themesInstallDlg, wxDialog )
BEGIN_EVENT_TABLE( themesInstallDlg, wxDialog )
END_EVENT_TABLE()
themesInstallDlg::themesInstallDlg( )
{
}
themesInstallDlg::themesInstallDlg( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
Create(parent, id, caption, pos, size, style);
}
void themesInstallDlg::CreateControls()
{
// A top-level sizer
wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
this->SetSizer(topSizer);
wxBoxSizer* topHoriSizer = new wxBoxSizer(wxHORIZONTAL);
topSizer->Add(topHoriSizer, 0, wxALIGN_LEFT|wxALL, 5);
// bitmap
wxBitmap sidebmp(wizard_xpm);
ImageCtrl* sideimage = new ImageCtrl(this,wxID_ANY);
sideimage->SetBitmap(sidebmp);
topHoriSizer->Add(sideimage,0,wxALIGN_LEFT | wxALL,5);
wxBoxSizer* mainVertiSizer = new wxBoxSizer(wxVERTICAL);
topHoriSizer->Add(mainVertiSizer, 0, wxGROW|wxALL, 5);
wxBoxSizer* wxBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
mainVertiSizer->Add(wxBoxSizer4, 0, wxGROW|wxALL, 0);
wxBoxSizer* wxBoxSizer5 = new wxBoxSizer(wxVERTICAL);
wxBoxSizer4->Add(wxBoxSizer5, 0, wxGROW|wxALL, 0);
m_devicepos = new DevicePositionCtrl(this,ID_DEVICEPOS);
wxBoxSizer5->Add(m_devicepos, 0, wxALIGN_LEFT|wxALL, 5);
m_theme = new ThemeCtrl(this,ID_THEME);
wxBoxSizer5->Add(m_theme, 0, wxALIGN_LEFT|wxALL, 5);
// controls at the bottom
OkCancelCtrl* okCancel = new OkCancelCtrl(this,wxID_ANY);
topSizer->Add(okCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
}
// create the window
bool themesInstallDlg::Create( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
if (!wxDialog::Create( parent, id, caption, pos, size, style ))
return false;
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
return true;
}
// tranver data from the controls
bool themesInstallDlg::TransferDataFromWindow()
{
gv->curdestdir = m_devicepos->getDevicePos();
if(!wxDirExists(gv->curdestdir))
{
WARN_DIALOG(wxT("The Devicepostion is not valid"),
wxT("Select a Deviceposition"));
gv->curdestdir = wxT("");
return false;
}
gv->themesToInstall.Clear();
gv->themesToInstall = m_theme->getThemesToInstall();
if(gv->themesToInstall.GetCount() == 0)
{
WARN_DIALOG(wxT("You have not selected a Theme to Install"), wxT("Select a Theme"));
return false;
}
return true;
}
// tranver data to the controls
bool themesInstallDlg::TransferDataToWindow()
{
if(gv->curplat == wxT(""))
{
WARN_DIALOG(wxT("You have not selected a audio device"),
wxT("Select a Device"));
return false;
}
m_devicepos->setDefault();
m_theme->setDevice(gv->curplat);
return true;
}
////////////////////////////////////////////////
//// Rockbox Installation
/////////////////////////////////////////////////
IMPLEMENT_CLASS( rockboxInstallDlg, wxDialog )
BEGIN_EVENT_TABLE( rockboxInstallDlg, wxDialog )
EVT_RADIOBOX(ID_BUILD_BOX, rockboxInstallDlg::OnBuildBox)
END_EVENT_TABLE()
rockboxInstallDlg::rockboxInstallDlg( )
{
}
rockboxInstallDlg::rockboxInstallDlg( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
Create(parent, id, caption, pos, size, style);
}
void rockboxInstallDlg::CreateControls()
{
// A top-level sizer
wxBoxSizer* topSizer = new wxBoxSizer(wxVERTICAL);
this->SetSizer(topSizer);
wxBoxSizer* wxBoxSizer2 = new wxBoxSizer(wxHORIZONTAL);
topSizer->Add(wxBoxSizer2, 0, wxALIGN_LEFT|wxALL, 5);
// bitmap
wxBitmap sidebmp(wizard_xpm);
ImageCtrl* sideimage = new ImageCtrl(this,wxID_ANY);
sideimage->SetBitmap(sidebmp);
wxBoxSizer2->Add(sideimage,0,wxALIGN_LEFT | wxALL,5);
wxBoxSizer* wxBoxSizer3 = new wxBoxSizer(wxVERTICAL);
wxBoxSizer2->Add(wxBoxSizer3, 0, wxALIGN_LEFT|wxALL, 5);
m_devicepos = new DevicePositionCtrl(this,ID_DEVICEPOS);
wxBoxSizer3->Add(m_devicepos, 0, wxALIGN_LEFT|wxALL, 5);
// Build information
wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
wxT("Please select the Rockbox version you would like "
"to install on your audio\ndevice:"));
wxBoxSizer3->Add(WxStaticText1,0,wxGROW | wxALL,5);
wxArrayString array;
wxString buf;
buf.Printf(wxT("Rockbox stable version (%s)") , gv->last_release.c_str());
array.Add(buf);
array.Add(wxT("Archived Build"));
array.Add(wxT("Current Build "));
wxRadioBox* BuildRadioBox = new wxRadioBox(this, ID_BUILD_BOX, wxT("Version"),
wxDefaultPosition, wxDefaultSize, array, 0, wxRA_SPECIFY_ROWS);
wxBoxSizer3->Add(BuildRadioBox, 0, wxGROW | wxALL, 5);
wxStaticBox* WxStaticBox1 = new wxStaticBox(this, wxID_ANY, wxT("Details:"));
wxStaticBoxSizer* WxStaticBoxSizer2 = new wxStaticBoxSizer(WxStaticBox1,
wxVERTICAL);
wxStaticText* DetailText = new wxStaticText(this, ID_DETAIL_TXT, wxT(""));
wxBoxSizer3->Add(WxStaticBoxSizer2, 1, wxGROW | wxALL, 5);
WxStaticBoxSizer2->Add(DetailText, 1, wxGROW | wxALL, 5);
wxStaticText* WxStaticText2 = new wxStaticText(this, wxID_ANY,
wxT("Rockbox Utility stores copies of Rockbox it has downloaded on the\n"
"local hard disk to save network traffic. If your local copy is\n"
"no longer working, tick this box to download a fresh copy.") );
wxBoxSizer3->Add(WxStaticText2, 0 , wxALL, 5);
wxCheckBox* NoCacheCheckBox = new wxCheckBox(this, ID_NOCACHE_CHCKBX,
wxT("Don't use locally cached copies of Rockbox") );
wxBoxSizer3->Add(NoCacheCheckBox, 0, wxALL, 5);
// controls at the bottom
OkCancelCtrl* okCancel = new OkCancelCtrl(this,wxID_ANY);
topSizer->Add(okCancel, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5);
}
// create the window
bool rockboxInstallDlg::Create( wxWindow* parent,
wxWindowID id, const wxString& caption,
const wxPoint& pos, const wxSize& size, long style )
{
if (!wxDialog::Create( parent, id, caption, pos, size, style ))
return false;
CreateControls();
GetSizer()->Fit(this);
GetSizer()->SetSizeHints(this);
Centre();
return true;
}
void rockboxInstallDlg::OnBuildBox(wxCommandEvent& event)
{
wxString str;
wxRadioBox* BuildRadioBox = (wxRadioBox*) FindWindow(ID_BUILD_BOX);
wxCheckBox* NoCacheCheckBox = (wxCheckBox*) FindWindow(ID_NOCACHE_CHCKBX);
wxStaticText* DetailText = (wxStaticText*)FindWindow(ID_DETAIL_TXT);
switch(BuildRadioBox->GetSelection() )
{
case BUILD_RELEASE:
str = _("This is the last released version of Rockbox, and is the\n"
"recommended version to install.");
NoCacheCheckBox->Enable();
break;
case BUILD_DAILY:
str = _("These are automatically built each day from the current\n"
"development source code. This generally has more features\n"
"than the last release but may be much less stable. Features\n"
"may change regularly.");
NoCacheCheckBox->Enable();
break;
case BUILD_BLEEDING:
str = _("This is the absolute up to the minute Rockbox built after\n"
"the last change was made.\n\n"
"Note: This option will always download a fresh copy from the\n"
"web server.\n");
NoCacheCheckBox->Enable(false);
break;
default:
break;
}
DetailText->SetLabel(str);
this->GetSizer()->Layout();
this->GetSizer()->Fit(this);
this->GetSizer()->SetSizeHints(this);
Refresh();
}
// tranver data from the controls
bool rockboxInstallDlg::TransferDataFromWindow()
{
wxRadioBox* BuildRadioBox = (wxRadioBox*) FindWindow(ID_BUILD_BOX);
wxCheckBox* NoCacheCheckBox = (wxCheckBox*) FindWindow(ID_NOCACHE_CHCKBX);
gv->curdestdir = m_devicepos->getDevicePos();
if(!wxDirExists(gv->curdestdir))
{
WARN_DIALOG(wxT("The Devicepostion is not valid"),
wxT("Select a Deviceposition"));
gv->curdestdir = wxT("");
return false;
}
gv->curbuild = BuildRadioBox->GetSelection();
gv->nocache = (gv->curbuild == BUILD_BLEEDING) ? true :
NoCacheCheckBox->IsChecked();
return true;
}
// tranver data to the controls
bool rockboxInstallDlg::TransferDataToWindow()
{
m_devicepos->setDefault();
if(gv->curplat == wxT(""))
{
WARN_DIALOG(wxT("You have not selected a audio device"),
wxT("Select a Device"));
return false;
}
wxRadioBox* BuildRadioBox = (wxRadioBox*) FindWindow(ID_BUILD_BOX);
int index =gv->plat_id.Index(gv->curplat);
wxCommandEvent updateradiobox(wxEVT_COMMAND_RADIOBOX_SELECTED,
ID_BUILD_BOX);
if (gv->plat_released[index] )
{
BuildRadioBox->Enable(BUILD_RELEASE, true);
BuildRadioBox->SetSelection(BUILD_RELEASE);
} else {
BuildRadioBox->Enable(BUILD_RELEASE, false);
BuildRadioBox->SetSelection(BUILD_BLEEDING);
}
wxPostEvent(this, updateradiobox);
return true;
}