1
0
Fork 0
forked from len0rd/rockbox

Implementation of Bootloader installation/uninstallation for all Targets in rbUtil. Needs testing. FS#6643

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12439 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Wenger 2007-02-21 20:27:14 +00:00
parent a5e0380d90
commit e863d595b5
23 changed files with 5564 additions and 210 deletions

View file

@ -19,6 +19,85 @@
****************************************************************************/
#include "wizard_pages.h"
#include "bootloaders.h"
wxBootPlatformPage::wxBootPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent)
{
wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
wxStaticText* WxStaticText1 = new wxStaticText(this, wxID_ANY,
_("Please select the model of audio device that you would like to"
"\ninstall the Rockbox Bootloader on from the list below:"));
WxBoxSizer1->Add(WxStaticText1,0,wxGROW | wxALL,5);
wxArrayString arrayStringFor_WxListBox1;
for (unsigned int i=0; i< gv->plat_name.GetCount(); i++) {
if (gv->plat_needsbootloader[i])
{
if(gv->plat_autodetect[i])
{
if(arrayStringFor_WxListBox1.Index(gv->plat_combinedname[i]) == wxNOT_FOUND)
arrayStringFor_WxListBox1.Add(gv->plat_combinedname[i]);
}
else
{
arrayStringFor_WxListBox1.Add(gv->plat_name[i]);
}
}
}
BootPlatformListBox = new wxListBox(this, wxID_ANY, wxDefaultPosition,
wxDefaultSize, arrayStringFor_WxListBox1, wxLB_SINGLE);
WxBoxSizer1->Add(BootPlatformListBox,0,wxGROW | wxALL,5);
SetSizer(WxBoxSizer1);
WxBoxSizer1->Fit(this);
for (unsigned int i=0; i< gv->plat_id.GetCount(); i++) {
if (gv->plat_id[i] == gv->curplat) BootPlatformListBox->SetSelection(i);
}
}
wxWizardPage * wxBootPlatformPage::GetNext() const
{
if(gv->curbootloadermethod != "fwpatcher"&& gv->curbootloadermethod != "ipodpatcher")
{
if(wxWizardPageSimple::GetNext()->GetNext() != NULL) // not iriver hx0 and ipod, skip one page
return wxWizardPageSimple::GetNext()->GetNext();
}
else if(gv->curbootloadermethod == "ipodpatcher")
{
if(wxWizardPageSimple::GetNext()->GetNext() != NULL)
if(wxWizardPageSimple::GetNext()->GetNext()->GetNext() != NULL)
return wxWizardPageSimple::GetNext()->GetNext()->GetNext(); //ipod, skip 2 pages
else
return wxWizardPageSimple::GetNext()->GetNext(); //ipod, skip 1 page (for uninstallation)
}
// all others , no skip
return wxWizardPageSimple::GetNext();
}
bool wxBootPlatformPage::TransferDataFromWindow()
{
if (BootPlatformListBox->GetSelection() == wxNOT_FOUND )
{
WARN_DIALOG(_("You must select an audio device type before proceeding"),
_("Select Platform"));
return false;
} else
{
int idx = gv->plat_name.Index(BootPlatformListBox->GetStringSelection());
if(idx == wxNOT_FOUND) idx =gv->plat_combinedname.Index(BootPlatformListBox->GetStringSelection());
gv->curplatnum = idx;
gv->curplat = gv->plat_id[gv->curplatnum];
gv->curbootloadermethod = gv->plat_bootloadermethod[gv->curplatnum];
gv->curbootloader = gv->plat_bootloadername[gv->curplatnum];
return true;
}
}
wxPlatformPage::wxPlatformPage(wxWizard *parent) : wxWizardPageSimple(parent)
{
@ -56,8 +135,265 @@ bool wxPlatformPage::TransferDataFromWindow()
}
}
BEGIN_EVENT_TABLE(wxIpodLocationPage,wxWizardPageSimple)
EVT_BUTTON (ID_IPODLOCATION_BTN, wxIpodLocationPage::OnIpodLocationBtn)
EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxIpodLocationPage::OnWizardPageChanging)
END_EVENT_TABLE();
wxIpodLocationPage::wxIpodLocationPage(wxWizard* parent) : wxWizardPageSimple(parent)
{
wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
// Header text
IpodLocationLabel = new wxStaticText(this, wxID_ANY,
wxT("Rockbox utility needs to know the device where your ipod\n"
"device is located on your computer. Rockbox utility\n"
"has detected the following location:"));
WxBoxSizer1->Add(IpodLocationLabel,0,wxGROW | wxALL, 5);
// device location
wxBoxSizer* WxBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
WxBoxSizer1->Add(WxBoxSizer3,0,
wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
IpodLocationText = new wxStaticText(this, wxID_ANY, "",
wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
WxBoxSizer3->Add(IpodLocationText,1,
wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
IpodLocationBtn = new wxButton(this, ID_IPODLOCATION_BTN, wxT("Scan"),
wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator,
wxT("IpodLocationBtn"));
IpodLocationBtn->SetToolTip(wxT("Scan for your Ipod"));
WxBoxSizer3->Add(IpodLocationBtn,0,wxALIGN_CENTER_VERTICAL | wxALL, 5);
// Extra text
IpodLocationExtraText = new wxStaticText(this,wxID_ANY, wxT(""));
WxBoxSizer1->Add(IpodLocationExtraText,0,wxGROW | wxALL, 5);
SetSizer(WxBoxSizer1);
WxBoxSizer1->Fit(this);
}
wxWizardPage* wxIpodLocationPage::GetPrev() const
{
if(gv->curbootloadermethod == "ipodpatcher") //if ipod, skip previous
{
if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL)
return wxWizardPageSimple::GetPrev()->GetPrev();
}
}
void wxIpodLocationPage::OnWizardPageChanging(wxWizardEvent& event)
{
if(event.GetDirection()) // going forwards in the Wizard
{
if(gv->curbootloadermethod=="ipodpatcher")
{
if(IpodLocationText->GetLabel() == "no Ipod found" ||
IpodLocationText->GetLabel() =="More than 1 Ipod found" ||
IpodLocationText->GetLabel() =="")
{
WARN_DIALOG(_("No valid ipod found!"), _("Select Location"));
event.Veto(); //stop pagechanging
}
}
}
}
void wxIpodLocationPage::OnIpodLocationBtn(wxCommandEvent& event)
{
wxLogVerbose("=== begin wxIpodLocationPage::OnIpodLocationBtn");
struct ipod_t ipod;
int n = ipod_scan(&ipod);
gv->curbootloader="bootloader-";
gv->curbootloader.Append(ipod.targetname);
if(n == 0)
IpodLocationText->SetLabel("no Ipod found");
else if( n==1)
IpodLocationText->SetLabel(ipod.modelstr);
else
IpodLocationText->SetLabel("More than 1 Ipod found");
if(ipod.macpod)
IpodLocationExtraText->SetLabel("This Ipod is a Mac formated Ipod\n"
"Rockbox will not work on this.\n"
"You have to convert it first to Fat32");
wxLogVerbose("=== end wxIpodLocationPage::OnIpodLocationBtn");
}
BEGIN_EVENT_TABLE(wxBootLocationPage,wxWizardPageSimple)
EVT_BUTTON (ID_BOOTLOCATION_BTN, wxBootLocationPage::OnBootLocationBtn)
EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxBootLocationPage::OnWizardPageChanging)
END_EVENT_TABLE();
wxBootLocationPage::wxBootLocationPage(wxWizard* parent) : wxWizardPageSimple(parent)
{
wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
// Header text
BootLocationLabel = new wxStaticText(this, wxID_ANY,
wxT("Rockbox utility needs to know the folder where your audio\n"
"device is located on your computer. Currently Rockbox utility\n"
"is configured to use the following location:"));
WxBoxSizer1->Add(BootLocationLabel,0,wxGROW | wxALL, 5);
// device location
wxBoxSizer* WxBoxSizer3 = new wxBoxSizer(wxHORIZONTAL);
WxBoxSizer1->Add(WxBoxSizer3,0,
wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
if (gv->curdestdir == wxT("")) gv->curdestdir = _("<none>");
BootLocationText = new wxStaticText(this, wxID_ANY, gv->curdestdir,
wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
WxBoxSizer3->Add(BootLocationText,1,
wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
BootLocationBtn = new wxButton(this, ID_BOOTLOCATION_BTN, wxT("Change"),
wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator,
wxT("BootLocationBtn"));
BootLocationBtn->SetToolTip(wxT("Select the location of your audio device"));
WxBoxSizer3->Add(BootLocationBtn,0,wxALIGN_CENTER_VERTICAL | wxALL, 5);
SetSizer(WxBoxSizer1);
WxBoxSizer1->Fit(this);
}
wxWizardPage* wxBootLocationPage::GetPrev() const
{
if(gv->curbootloadermethod != "fwpatcher")
{
if(wxWizardPageSimple::GetPrev()->GetPrev() != NULL)
return wxWizardPageSimple::GetPrev()->GetPrev();
}
return wxWizardPageSimple::GetPrev();
}
wxWizardPage* wxBootLocationPage::GetNext() const
{
if(gv->curbootloadermethod == "ipodpatcher")
{
return wxWizardPageSimple::GetNext(); // if ipod then this is not the last page
}
else return NULL; // else this is the last page
}
void wxBootLocationPage::OnWizardPageChanging(wxWizardEvent& event)
{
if(event.GetDirection()) // going forwards in the Wizard
{
if(!wxDirExists(BootLocationText->GetLabel()))
{
WARN_DIALOG(_("You have not selected a valid location for your audio "
"device"), _("Select Location"));
event.Veto();
}
}
}
bool wxBootLocationPage::TransferDataFromWindow()
{
gv->curdestdir = BootLocationText->GetLabel();
return true;
}
void wxBootLocationPage::OnBootLocationBtn(wxCommandEvent& event)
{
const wxString& temp = wxDirSelector(
_("Please select the location of your audio device"), gv->curdestdir);
wxLogVerbose("=== begin wxBootLocationPage::OnBootLocationBtn(event)");
if (!temp.empty())
{
BootLocationText->SetLabel(temp);
}
wxLogVerbose("=== end wxBootLocationPage::OnBootLocationBtn");
}
BEGIN_EVENT_TABLE(wxFirmwareLocationPage,wxWizardPageSimple)
EVT_BUTTON (ID_FIRMWARELOCATION_BTN, wxFirmwareLocationPage::OnFirmwareFilenameBtn)
EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxFirmwareLocationPage::OnWizardPageChanging)
END_EVENT_TABLE();
wxFirmwareLocationPage::wxFirmwareLocationPage(wxWizard* parent) : wxWizardPageSimple(parent)
{
wxBoxSizer* WxBoxSizer1 = new wxBoxSizer(wxVERTICAL);
// Header text
FirmwareLocationText = new wxStaticText(this, wxID_ANY,
wxT("For this step Rockbox Utility needs an original Firmware.\n"
"You can download this from the Manufacturers Website."));
WxBoxSizer1->Add(FirmwareLocationText,0,wxGROW | wxALL, 5);
// Filename text
wxBoxSizer* WxBoxSizer4 = new wxBoxSizer(wxHORIZONTAL);
WxBoxSizer1->Add(WxBoxSizer4,0,
wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
FirmwareLocationFilename = new wxStaticText(this, wxID_ANY, gv->curfirmware,
wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT);
WxBoxSizer4->Add(FirmwareLocationFilename,1,
wxGROW | wxALIGN_CENTER_VERTICAL | wxALL, 5);
// Button
FirmwareLocationBtn = new wxButton(this, ID_FIRMWARELOCATION_BTN, wxT("Explore"),
wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator,
wxT("FirmwareLocationBtn"));
FirmwareLocationBtn->SetToolTip(wxT("Select the location of the downloaded Firmware"));
WxBoxSizer4->Add(FirmwareLocationBtn,0,wxALIGN_CENTER_VERTICAL | wxALL, 5);
SetSizer(WxBoxSizer1);
WxBoxSizer1->Fit(this);
}
void wxFirmwareLocationPage::OnWizardPageChanging(wxWizardEvent& event)
{
if(event.GetDirection()) // going forwards in the Wizard
{
if( !wxFileExists(gv->curfirmware))
{
WARN_DIALOG(_("You have not selected a valid location for the firmware "
"file"), _("Select File"));
event.Veto();
}
}
}
void wxFirmwareLocationPage::OnFirmwareFilenameBtn(wxCommandEvent& event)
{
wxString temp = wxFileSelector(
_("Please select the location of the original Firmware"), gv->curdestdir,"","","*.hex");
wxLogVerbose("=== begin wxFirmwareLocationPage::OnFirmwareFilenameBtn(event)");
if (!temp.empty())
{
gv->curfirmware=temp;
if(temp.Length() > 30)
{
temp.Remove(0, temp.Length()-30);
temp.Prepend("...");
}
FirmwareLocationFilename->SetLabel(temp);
}
wxLogVerbose("=== end wxFirmwareLocationPage::OnFirmwareFilenameBtn");
}
BEGIN_EVENT_TABLE(wxLocationPage,wxWizardPageSimple)
EVT_BUTTON (ID_LOCATION_BTN, wxLocationPage::OnLocationBtn)
EVT_WIZARD_PAGE_CHANGING(wxID_ANY, wxLocationPage::OnWizardPageChanging)
END_EVENT_TABLE();
wxLocationPage::wxLocationPage(wxWizard* parent) : wxWizardPageSimple(parent)
@ -90,18 +426,24 @@ wxLocationPage::wxLocationPage(wxWizard* parent) : wxWizardPageSimple(parent)
WxBoxSizer1->Fit(this);
}
void wxLocationPage::OnWizardPageChanging(wxWizardEvent& event)
{
if(event.GetDirection()) // going forwards in the Wizard
{
if(!wxDirExists(LocationText->GetLabel()))
{
WARN_DIALOG(_("You have not selected a valid location for your audio "
"device"), _("Select Location"));
event.Veto();
}
}
}
bool wxLocationPage::TransferDataFromWindow()
{
if ( wxDirExists(LocationText->GetLabel() ) )
{
gv->curdestdir = LocationText->GetLabel();
return true;
} else
{
WARN_DIALOG(_("You have not selected a valid location for your audio "
"device"), _("Select Location"));
return false;
}
gv->curdestdir = LocationText->GetLabel();
return true;
}
void wxLocationPage::OnLocationBtn(wxCommandEvent& event)