OSDN Git Service

flash memory device listup の対応を追加
authornaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sun, 17 Oct 2010 12:49:42 +0000 (12:49 +0000)
committernaruko <naruko@24ea1065-a21e-4ca1-99c9-f5125deb0858>
Sun, 17 Oct 2010 12:49:42 +0000 (12:49 +0000)
git-svn-id: svn+ssh://svn.osdn.net/svnroot/unagi@368 24ea1065-a21e-4ca1-99c9-f5125deb0858

client/trunk/anago/anago_wxframe_main.cpp
client/trunk/anago/flash_device.c
client/trunk/anago/flash_device.h
client/trunk/anago/flashdevice.nut
client/trunk/anago/wx.fbp

index 14d4786..9915c9a 100644 (file)
@@ -1,7 +1,7 @@
-#include <stdio.h>
 #include <wx/wx.h>
 #include <wx/log.h>
 #include <wx/dir.h>
+#include "wx.h"
 #include "widget.h"
 #include "anago_wxframe_main.h"
 #include "reader_master.h"
@@ -9,6 +9,7 @@
 extern const struct reader_driver DRIVER_KAZZO;
 extern "C"{
 #include "script_dump.h"
+#include "flash_device.h"
 }
 
 static void value_set(void *gauge, int value)
@@ -38,105 +39,175 @@ static void label_set(void *label, const char *str)
        l->SetLabel(str);
 }
 
-anago_wxframe_main::anago_wxframe_main( wxWindow* parent )
-  : frame_main( parent )
+static void choice_append(void *choice, const char *str)
 {
+       wxChoice *c = static_cast<wxChoice *>(choice);
+       c->Append(wxString(str));
+}
 
-       wxDir dir(wxGetCwd());
-       wxString filename;
-
+class anago_wxframe_main : public frame_main
+{
+private:
+       enum {
+               MODE_DUMP, MODE_PROGRAM
+       } m_mode;
+       void choise_script_init(wxString filespec)
+       {
+               wxDir dir(wxGetCwd());
+               wxString filename;
 
-       if ( !dir.IsOpened() ){
-               return;
+               m_choice_script->Clear();
+               if ( !dir.IsOpened() ){
+                       return;
+               }
+               bool cont = dir.GetFirst(&filename, filespec, wxDIR_FILES);
+               while ( cont ){
+                       m_choice_script->Append(filename);
+                       cont = dir.GetNext(&filename);
+               }
+               m_choice_script->Select(0);
        }
-       bool cont = dir.GetFirst(&filename, wxString("*.ad"), wxDIR_FILES);
-       while ( cont ){
-               m_combo_script->Append(filename);
-
-               cont = dir.GetNext(&filename);
+       void dump_form_init(void)
+       {
+               m_mode = MODE_DUMP;
+               this->choise_script_init(wxString("*.ad"));
+               m_check_battery->Show();
+               m_check_forcemapper->Show();
+               m_text_forcemapper->Show();
+               m_button_execute->SetLabel(wxString("&Dump"));
+               m_choice_cpu_trans->Hide();
+               m_choice_cpu_device->Hide();
+               m_choice_ppu_trans->Hide();
+               m_choice_ppu_device->Hide();
        }
-       m_combo_script->Select(0);
-}
+       void choise_trans_init(wxChoice *c)
+       {
+               c->Clear();
+               c->Append(wxString("full"));
+               c->Append(wxString("empty"));
+               c->Append(wxString("top"));
+               c->Append(wxString("bottom"));
+               c->Select(0);
+       }
+       void program_form_init(void)
+       {
+               m_mode = MODE_PROGRAM;
+               this->choise_script_init(wxString("*.af"));
+               m_check_battery->Hide();
+               m_check_forcemapper->Hide();
+               m_text_forcemapper->Hide();
+               m_button_execute->SetLabel(wxString("&Program"));
+               m_choice_cpu_trans->Show();
+               m_choice_cpu_device->Show();
+               m_choice_ppu_trans->Show();
+               m_choice_ppu_device->Show();
+       }
+       void dump_execute(void)
+       {
+               struct config_dump config;
+               config.gauge_cpu.bar = m_gauge_cpu;
+               config.gauge_cpu.label = m_label_cpu;
+               config.gauge_cpu.label_set = label_set;
+               config.gauge_cpu.range_set = range_set;
+               config.gauge_cpu.value_set = value_set;
+
+               config.gauge_ppu.bar = m_gauge_ppu;
+               config.gauge_ppu.label = m_label_ppu;
+               config.gauge_ppu.label_set = label_set;
+               config.gauge_ppu.range_set = range_set;
+               config.gauge_ppu.value_set = value_set;
+               
+               config.log.object = m_log;
+               config.log.append = text_append;
+               config.increase.cpu = 1;
+               config.increase.ppu = 1;
+               config.progress = true;
+               wxString str_script = m_choice_script->GetStringSelection();
+               config.script = str_script.fn_str();
+
+               {
+                       wxString str;
+                       config.mappernum = -1;
+                       if(m_check_forcemapper->GetValue() == true){
+                               str = m_text_forcemapper->GetValue();
+                               if(str.ToLong(&config.mappernum) == false){
+                                       *m_log << "bad mapper number\n";
+                                       return;
+                               }
+                       }
+               }
 
-void anago_wxframe_main::OnButtonClick(wxCommandEvent& event)
-{
-       struct config_dump config;
-       config.gauge_cpu.bar = m_gauge_cpu;
-       config.gauge_cpu.label = m_label_cpu;
-       config.gauge_cpu.label_set = label_set;
-       config.gauge_cpu.range_set = range_set;
-       config.gauge_cpu.value_set = value_set;
-
-       config.gauge_ppu.bar = m_gauge_ppu;
-       config.gauge_ppu.label = m_label_ppu;
-       config.gauge_ppu.label_set = label_set;
-       config.gauge_ppu.range_set = range_set;
-       config.gauge_ppu.value_set = value_set;
-       
-       config.log.object = m_log;
-       config.log.append = text_append;
-       config.increase.cpu = 1;
-       config.increase.ppu = 1;
-       config.progress = true;
-       wxString str_script = m_combo_script->GetValue();
-       config.script = str_script.fn_str();
+               wxTextCtrl *text = m_picker_romimage->GetTextCtrl();
+               wxString str_rom = text->GetValue();
+               if(text->IsEmpty() == true){
+                       *m_log << "Enter filename to ROM image\n";
+                       return;
+               }
+               config.target = str_rom.fn_str();
 
-       {
-               wxString str;
-               config.mappernum = -1;
+               config.reader = &DRIVER_KAZZO;
+               if(config.reader->open_or_close(READER_OPEN) == NG){
+                       *m_log << "reader open error\n";
+                       return;
+               }
+               m_choice_script->Disable();
+               m_picker_romimage->Disable();
+               m_check_battery->Disable();
+               m_check_forcemapper->Disable();
+               m_button_execute->Disable();
                if(m_check_forcemapper->GetValue() == true){
-                       str = m_text_forcemapper->GetValue();
-                       if(str.ToLong(&config.mappernum) == false){
-                               *m_log << "bad mapper number\n";
-                               return;
-                       }
+                       m_text_forcemapper->Disable();
                }
-       }
 
-       wxTextCtrl *text = m_picker_romimage->GetTextCtrl();
-       wxString str_rom = text->GetValue();
-       if(text->IsEmpty() == true){
-               *m_log << "Enter filename to ROM image\n";
-               return;
-       }
-       config.target = str_rom.fn_str();
+               config.reader->init();
+               script_dump_execute(&config);
+               config.reader->open_or_close(READER_CLOSE);
 
-       config.reader = &DRIVER_KAZZO;
-       if(config.reader->open_or_close(READER_OPEN) == NG){
-               *m_log << "reader open error\n";
-               return;
+               m_choice_script->Enable();
+               m_picker_romimage->Enable();
+               m_check_battery->Enable();
+               m_check_forcemapper->Enable();
+               m_button_execute->Enable();
+               if(m_check_forcemapper->GetValue() == true){
+                       m_text_forcemapper->Enable();
+               }
        }
-       m_combo_script->Disable();
-       m_picker_romimage->Disable();
-       m_check_battery->Disable();
-       m_check_forcemapper->Disable();
-       m_button_dump->Disable();
-       if(m_check_forcemapper->GetValue() == true){
-               m_text_forcemapper->Disable();
+protected:
+       // Handlers for frame_main events.
+       void OnButtonClick( wxCommandEvent& event )
+       {
+               this->dump_execute();
        }
 
-       config.reader->init();
-       script_dump_execute(&config);
-       config.reader->open_or_close(READER_CLOSE);
-
-       m_combo_script->Enable();
-       m_picker_romimage->Enable();
-       m_check_battery->Enable();
-       m_check_forcemapper->Enable();
-       m_button_dump->Enable();
-       if(m_check_forcemapper->GetValue() == true){
-               m_text_forcemapper->Enable();
+       void mapper_change_check(wxCommandEvent& event)
+       {
+               if(m_check_forcemapper->GetValue() == true){
+                       m_text_forcemapper->Enable();
+               }else{
+                       m_text_forcemapper->Disable();
+               }
        }
-}
-
-void anago_wxframe_main::mapper_change_check(wxCommandEvent& event)
-{
-       if(m_check_forcemapper->GetValue() == true){
-               m_text_forcemapper->Enable();
-       }else{
-               m_text_forcemapper->Disable();
+public:
+       /** Constructor */
+       anago_wxframe_main( wxWindow* parent ) : frame_main (parent)
+       {
+               //this->dump_form_init();
+               this->program_form_init();
+               this->choise_trans_init(m_choice_cpu_trans);
+               this->choise_trans_init(m_choice_ppu_trans);
+
+               struct flash_listup list;
+               list.obj_cpu = m_choice_cpu_device;
+               list.obj_ppu = m_choice_ppu_device;
+               list.append = choice_append;
+               flash_device_listup(&list);
+               m_choice_cpu_device->Select(0);
+               m_choice_ppu_device->Select(0);
        }
-}
+       
+};
+
+
 
 class MyApp : public wxApp
 {
@@ -150,12 +221,5 @@ public:
                
                return true;
        }
-/*     int OnExit()
-       {
-               delete m_frame;
-               m_frame = NULL;
-               
-               return 0;
-       }*/
 };
 IMPLEMENT_APP(MyApp)
index ce4c1dc..2246aea 100644 (file)
@@ -1,5 +1,6 @@
 #include <assert.h>
 #include <stdio.h>
+#include <string.h>
 #include <squirrel.h>
 #include <sqstdio.h>
 #include <sqstdaux.h>
@@ -112,3 +113,71 @@ field_error:
        qr_close(v);
        return false;
 }
+
+static int flash_device_number_get(HSQUIRRELVM v)
+{
+       sq_pushroottable(v);
+       sq_pushstring(v, _SC("flash_device_number_get"), -1);
+       if(SQ_SUCCEEDED(sq_get(v,-2))){
+               sq_pushroottable(v);
+               SQRESULT r = sq_call(v, 1, SQTrue, SQTrue);
+               assert(r == SQ_OK);
+               r++;
+       }
+       if(sq_gettype(v, -1) != OT_INTEGER){
+               return 0;
+       }
+       SQInteger i;
+       if(SQ_FAILED(sq_getinteger(v, -1, &i))){
+               return 0;
+       }
+       return i;
+}
+
+static int flash_device_name_get(HSQUIRRELVM v, int index, const char **str)
+{
+       sq_pushroottable(v);
+       sq_pushstring(v, _SC("flash_device_name_get"), -1);
+       if(SQ_SUCCEEDED(sq_get(v,-2))){
+               sq_pushroottable(v);
+               sq_pushinteger(v, index);
+               SQRESULT r = sq_call(v, 2, SQTrue, SQTrue);
+               assert(r == SQ_OK);
+               r++;
+       }
+       if(sq_gettype(v, -1) != OT_STRING){
+               return 0;
+       }
+       if(SQ_FAILED(sq_getstring(v, -1, str))){
+               return 0;
+       }
+       return 1;
+}
+
+void flash_device_listup(struct flash_listup *t)
+{
+       const char *str;
+       HSQUIRRELVM v = qr_open();
+       SQInteger top = sq_gettop(v);
+
+       if(SQ_FAILED(sqstd_dofile(v, _SC("flashdevice.nut"), SQFalse, SQTrue))){
+//             puts("flash device script error");
+               qr_close(v);
+       }
+
+       int i;
+       const int device_num = flash_device_number_get(v);
+       sq_settop(v, top);
+
+       for(i = 0; i < device_num; i++){
+               flash_device_name_get(v, i, &str);
+               if(strncmp(str, "dummy", 6) != 0){
+                       t->append(t->obj_cpu, str);
+                       t->append(t->obj_ppu, str);
+               }
+               sq_settop(v, top);
+       }
+
+       qr_close(v);
+       v = NULL;
+}
index ec54445..5861b9e 100644 (file)
@@ -15,4 +15,10 @@ enum{
        FLASH_ID_DEVICE_SRAM = 0xf0, 
        FLASH_ID_DEVICE_DUMMY
 };
+//for GUI device listup
+struct flash_listup{
+       void *obj_cpu, *obj_ppu;
+       void (*append)(void *obj, const char *str);
+};
+void flash_device_listup(struct flash_listup *t);
 #endif
index 5e19362..4d347a4 100644 (file)
@@ -4,84 +4,103 @@ function mask_get(bit)
        local t = 1 << (bit + 1);
        return t - 1;
 }
+local mega = 0x20000;
+local MASK_A14 = mask_get(14);
+local MASK_A10 = mask_get(10);
+device <- {
+       ["dummy"] = {
+               capacity = 16 * mega, pagesize = 1,
+               erase_wait = 0, erase_require = false,
+               retry = false,
+               id_manufacurer = 0xf1, id_device = 0xf1,
+               command_mask = 0
+       },
+       ["W29C020"] = {
+               capacity = 2 * mega, pagesize = 0x80,
+               erase_wait = 50, erase_require = false,
+               retry = false,
+               id_manufacurer = 0xda, id_device = 0x45,
+               command_mask = MASK_A14
+       },
+       ["W29C040"] = {
+               capacity = 4 * mega, pagesize = 0x100,
+               erase_wait = 50, erase_require = false,
+               retry = true,
+               id_manufacurer = 0xda, id_device = 0x46,
+               command_mask = MASK_A14
+       },
+       ["W49F002"] = {
+               capacity = 2 * mega, pagesize = 1,
+               erase_wait = 100, erase_require = true,
+               retry = false,
+               id_manufacurer = 0xda, id_device = 0xae,
+               command_mask = MASK_A14
+       },
+       ["AT49F002"] = {
+               capacity = 2 * mega, pagesize = 1,
+               erase_wait = 100, erase_require = true,
+               retry = true,
+               id_manufacurer = 0x1f, id_device = 0x08,
+               command_mask = MASK_A14
+       },
+       ["EN29F002T"] = {
+               capacity = 2 * mega, pagesize = 1,
+               erase_wait = 2000, erase_require = true,
+               retry = false,
+               id_manufacurer = 0x1c, id_device = 0x92,
+               command_mask = MASK_A14
+       },
+       ["AM29F040B"] = {
+               capacity = 4 * mega, pagesize = 1,
+               erase_wait = 8000, erase_require = true,
+               retry = false,
+               id_manufacurer = 0x01, id_device = 0xa4,
+               command_mask = MASK_A10
+       },
+       //command mask is not written in datasheet!
+       ["PM29F002T"] = {
+               capacity = 2 * mega, pagesize = 1,
+               erase_wait = 500, erase_require = true,
+               retry = false,
+               id_manufacurer = 0x9d, id_device = 0x1d,
+               command_mask = MASK_A10 //maybe A10-A0
+       },
+       //chip erase time is not written in datasheet!!
+       ["MBM29F080A"] = {
+               capacity = 8 * mega, pagesize = 1,
+               erase_wait = 8000, erase_require = true,
+               retry = false,
+               id_manufacurer = 0x04, id_device = 0xd5,
+               command_mask = MASK_A10
+       },
+       ["SST39SF040"] = {
+               capacity = 4 * mega, pagesize = 1,
+               erase_wait = 100, erase_require = true,
+               retry = false,
+               id_manufacurer = 0xbf, id_device = 0xb7,
+               command_mask = MASK_A14
+       }
+};
 function flash_device_get(name)
 {
-       local mega = 0x20000;
-       local MASK_A14 = mask_get(14);
-       local MASK_A10 = mask_get(10);
-       local device = {
-               ["dummy"] = {
-                       capacity = 16 * mega, pagesize = 1,
-                       erase_wait = 0, erase_require = false,
-                       retry = false,
-                       id_manufacurer = 0xf1, id_device = 0xf1,
-                       command_mask = 0
-               },
-               ["W29C020"] = {
-                       capacity = 2 * mega, pagesize = 0x80,
-                       erase_wait = 50, erase_require = false,
-                       retry = false,
-                       id_manufacurer = 0xda, id_device = 0x45,
-                       command_mask = MASK_A14
-               },
-               ["W29C040"] = {
-                       capacity = 4 * mega, pagesize = 0x100,
-                       erase_wait = 50, erase_require = false,
-                       retry = true,
-                       id_manufacurer = 0xda, id_device = 0x46,
-                       command_mask = MASK_A14
-               },
-               ["W49F002"] = {
-                       capacity = 2 * mega, pagesize = 1,
-                       erase_wait = 100, erase_require = true,
-                       retry = false,
-                       id_manufacurer = 0xda, id_device = 0xae,
-                       command_mask = MASK_A14
-               },
-               ["AT49F002"] = {
-                       capacity = 2 * mega, pagesize = 1,
-                       erase_wait = 100, erase_require = true,
-                       retry = true,
-                       id_manufacurer = 0x1f, id_device = 0x08,
-                       command_mask = MASK_A14
-               },
-               ["EN29F002T"] = {
-                       capacity = 2 * mega, pagesize = 1,
-                       erase_wait = 2000, erase_require = true,
-                       retry = false,
-                       id_manufacurer = 0x1c, id_device = 0x92,
-                       command_mask = MASK_A14
-               },
-               ["AM29F040B"] = {
-                       capacity = 4 * mega, pagesize = 1,
-                       erase_wait = 8000, erase_require = true,
-                       retry = false,
-                       id_manufacurer = 0x01, id_device = 0xa4,
-                       command_mask = MASK_A10
-               },
-               //command mask is not written in datasheet!
-               ["PM29F002T"] = {
-                       capacity = 2 * mega, pagesize = 1,
-                       erase_wait = 500, erase_require = true,
-                       retry = false,
-                       id_manufacurer = 0x9d, id_device = 0x1d,
-                       command_mask = MASK_A10 //maybe A10-A0
-               },
-               //chip erase time is not written in datasheet!!
-               ["MBM29F080A"] = {
-                       capacity = 8 * mega, pagesize = 1,
-                       erase_wait = 8000, erase_require = true,
-                       retry = false,
-                       id_manufacurer = 0x04, id_device = 0xd5,
-                       command_mask = MASK_A10
-               },
-               ["SST39SF040"] = {
-                       capacity = 4 * mega, pagesize = 1,
-                       erase_wait = 100, erase_require = true,
-                       retry = false,
-                       id_manufacurer = 0xbf, id_device = 0xb7,
-                       command_mask = MASK_A14
-               }
-       };
        return device[name];
 }
+
+//listup for GUI
+//device table -> device name list array
+{
+       device_list<-[];
+       foreach(v, i in device){
+               device_list.append(v);
+       }
+       device_list.sort();
+}
+
+function flash_device_number_get()
+{
+       return device_list.len();
+}
+function flash_device_name_get(i)
+{
+       return device_list[i];
+}
index aa81d81..0935913 100644 (file)
@@ -37,7 +37,7 @@
             <property name="minimum_size"></property>\r
             <property name="name">frame_main</property>\r
             <property name="pos">32,32</property>\r
-            <property name="size">360,360</property>\r
+            <property name="size">380,360</property>\r
             <property name="style">wxDEFAULT_FRAME_STYLE</property>\r
             <property name="subclass"></property>\r
             <property name="title">anago wx</property>\r
                         </object>\r
                         <object class="sizeritem" expanded="1">\r
                             <property name="border">5</property>\r
-                            <property name="flag">wxEXPAND</property>\r
+                            <property name="flag">wxALL|wxEXPAND</property>\r
                             <property name="proportion">0</property>\r
-                            <object class="wxComboBox" expanded="1">\r
+                            <object class="wxChoice" expanded="1">\r
                                 <property name="bg"></property>\r
                                 <property name="choices"></property>\r
                                 <property name="context_help"></property>\r
                                 <property name="id">wxID_ANY</property>\r
                                 <property name="maximum_size"></property>\r
                                 <property name="minimum_size"></property>\r
-                                <property name="name">m_combo_script</property>\r
+                                <property name="name">m_choice_script</property>\r
                                 <property name="permission">protected</property>\r
                                 <property name="pos"></property>\r
+                                <property name="selection">0</property>\r
                                 <property name="size"></property>\r
-                                <property name="style">wxCB_DROPDOWN|wxCB_READONLY|wxCB_SORT</property>\r
                                 <property name="subclass"></property>\r
                                 <property name="tooltip"></property>\r
                                 <property name="validator_data_type"></property>\r
                                 <property name="validator_style">wxFILTER_NONE</property>\r
                                 <property name="validator_type">wxDefaultValidator</property>\r
                                 <property name="validator_variable"></property>\r
-                                <property name="value"></property>\r
                                 <property name="window_extra_style"></property>\r
                                 <property name="window_name"></property>\r
                                 <property name="window_style"></property>\r
                                 <event name="OnChar"></event>\r
-                                <event name="OnCombobox"></event>\r
+                                <event name="OnChoice"></event>\r
                                 <event name="OnEnterWindow"></event>\r
                                 <event name="OnEraseBackground"></event>\r
                                 <event name="OnKeyDown"></event>\r
                                 <event name="OnRightUp"></event>\r
                                 <event name="OnSetFocus"></event>\r
                                 <event name="OnSize"></event>\r
-                                <event name="OnText"></event>\r
-                                <event name="OnTextEnter"></event>\r
                                 <event name="OnUpdateUI"></event>\r
                             </object>\r
                         </object>\r
                 </object>\r
                 <object class="sizeritem" expanded="1">\r
                     <property name="border">5</property>\r
-                    <property name="flag">wxEXPAND</property>\r
+                    <property name="flag">wxEXPAND|wxALIGN_RIGHT</property>\r
                     <property name="proportion">0</property>\r
                     <object class="wxBoxSizer" expanded="1">\r
                         <property name="minimum_size"></property>\r
                                 <property name="label">&amp;dump</property>\r
                                 <property name="maximum_size"></property>\r
                                 <property name="minimum_size"></property>\r
-                                <property name="name">m_button_dump</property>\r
+                                <property name="name">m_button_execute</property>\r
                                 <property name="permission">protected</property>\r
                                 <property name="pos"></property>\r
                                 <property name="size"></property>\r
                 </object>\r
                 <object class="sizeritem" expanded="1">\r
                     <property name="border">5</property>\r
-                    <property name="flag">wxALL</property>\r
+                    <property name="flag">wxEXPAND</property>\r
                     <property name="proportion">0</property>\r
-                    <object class="wxStaticText" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="context_menu">1</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="label">CPU</property>\r
-                        <property name="maximum_size"></property>\r
+                    <object class="wxBoxSizer" expanded="1">\r
                         <property name="minimum_size"></property>\r
-                        <property name="name">m_label_cpu</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <property name="wrap">-1</property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
+                        <property name="name">bSizer6</property>\r
+                        <property name="orient">wxHORIZONTAL</property>\r
+                        <property name="permission">none</property>\r
+                        <object class="sizeritem" expanded="1">\r
+                            <property name="border">5</property>\r
+                            <property name="flag">wxALL</property>\r
+                            <property name="proportion">0</property>\r
+                            <object class="wxStaticText" expanded="1">\r
+                                <property name="bg"></property>\r
+                                <property name="context_help"></property>\r
+                                <property name="context_menu">1</property>\r
+                                <property name="enabled">1</property>\r
+                                <property name="fg"></property>\r
+                                <property name="font"></property>\r
+                                <property name="hidden">0</property>\r
+                                <property name="id">wxID_ANY</property>\r
+                                <property name="label">CPU</property>\r
+                                <property name="maximum_size"></property>\r
+                                <property name="minimum_size"></property>\r
+                                <property name="name">m_label_cpu</property>\r
+                                <property name="permission">protected</property>\r
+                                <property name="pos"></property>\r
+                                <property name="size">150,-1</property>\r
+                                <property name="style"></property>\r
+                                <property name="subclass"></property>\r
+                                <property name="tooltip"></property>\r
+                                <property name="validator_data_type"></property>\r
+                                <property name="validator_style">wxFILTER_NONE</property>\r
+                                <property name="validator_type">wxDefaultValidator</property>\r
+                                <property name="validator_variable"></property>\r
+                                <property name="window_extra_style"></property>\r
+                                <property name="window_name"></property>\r
+                                <property name="window_style"></property>\r
+                                <property name="wrap">-1</property>\r
+                                <event name="OnChar"></event>\r
+                                <event name="OnEnterWindow"></event>\r
+                                <event name="OnEraseBackground"></event>\r
+                                <event name="OnKeyDown"></event>\r
+                                <event name="OnKeyUp"></event>\r
+                                <event name="OnKillFocus"></event>\r
+                                <event name="OnLeaveWindow"></event>\r
+                                <event name="OnLeftDClick"></event>\r
+                                <event name="OnLeftDown"></event>\r
+                                <event name="OnLeftUp"></event>\r
+                                <event name="OnMiddleDClick"></event>\r
+                                <event name="OnMiddleDown"></event>\r
+                                <event name="OnMiddleUp"></event>\r
+                                <event name="OnMotion"></event>\r
+                                <event name="OnMouseEvents"></event>\r
+                                <event name="OnMouseWheel"></event>\r
+                                <event name="OnPaint"></event>\r
+                                <event name="OnRightDClick"></event>\r
+                                <event name="OnRightDown"></event>\r
+                                <event name="OnRightUp"></event>\r
+                                <event name="OnSetFocus"></event>\r
+                                <event name="OnSize"></event>\r
+                                <event name="OnUpdateUI"></event>\r
+                            </object>\r
+                        </object>\r
+                        <object class="sizeritem" expanded="1">\r
+                            <property name="border">5</property>\r
+                            <property name="flag">wxALL</property>\r
+                            <property name="proportion">0</property>\r
+                            <object class="wxChoice" expanded="1">\r
+                                <property name="bg"></property>\r
+                                <property name="choices"></property>\r
+                                <property name="context_help"></property>\r
+                                <property name="context_menu">1</property>\r
+                                <property name="enabled">1</property>\r
+                                <property name="fg"></property>\r
+                                <property name="font"></property>\r
+                                <property name="hidden">0</property>\r
+                                <property name="id">wxID_ANY</property>\r
+                                <property name="maximum_size"></property>\r
+                                <property name="minimum_size">60,-1</property>\r
+                                <property name="name">m_choice_cpu_trans</property>\r
+                                <property name="permission">protected</property>\r
+                                <property name="pos"></property>\r
+                                <property name="selection">0</property>\r
+                                <property name="size"></property>\r
+                                <property name="subclass"></property>\r
+                                <property name="tooltip"></property>\r
+                                <property name="validator_data_type"></property>\r
+                                <property name="validator_style">wxFILTER_NONE</property>\r
+                                <property name="validator_type">wxDefaultValidator</property>\r
+                                <property name="validator_variable"></property>\r
+                                <property name="window_extra_style"></property>\r
+                                <property name="window_name"></property>\r
+                                <property name="window_style"></property>\r
+                                <event name="OnChar"></event>\r
+                                <event name="OnChoice"></event>\r
+                                <event name="OnEnterWindow"></event>\r
+                                <event name="OnEraseBackground"></event>\r
+                                <event name="OnKeyDown"></event>\r
+                                <event name="OnKeyUp"></event>\r
+                                <event name="OnKillFocus"></event>\r
+                                <event name="OnLeaveWindow"></event>\r
+                                <event name="OnLeftDClick"></event>\r
+                                <event name="OnLeftDown"></event>\r
+                                <event name="OnLeftUp"></event>\r
+                                <event name="OnMiddleDClick"></event>\r
+                                <event name="OnMiddleDown"></event>\r
+                                <event name="OnMiddleUp"></event>\r
+                                <event name="OnMotion"></event>\r
+                                <event name="OnMouseEvents"></event>\r
+                                <event name="OnMouseWheel"></event>\r
+                                <event name="OnPaint"></event>\r
+                                <event name="OnRightDClick"></event>\r
+                                <event name="OnRightDown"></event>\r
+                                <event name="OnRightUp"></event>\r
+                                <event name="OnSetFocus"></event>\r
+                                <event name="OnSize"></event>\r
+                                <event name="OnUpdateUI"></event>\r
+                            </object>\r
+                        </object>\r
+                        <object class="sizeritem" expanded="1">\r
+                            <property name="border">5</property>\r
+                            <property name="flag">wxALL</property>\r
+                            <property name="proportion">0</property>\r
+                            <object class="wxChoice" expanded="1">\r
+                                <property name="bg"></property>\r
+                                <property name="choices"></property>\r
+                                <property name="context_help"></property>\r
+                                <property name="context_menu">1</property>\r
+                                <property name="enabled">1</property>\r
+                                <property name="fg"></property>\r
+                                <property name="font"></property>\r
+                                <property name="hidden">0</property>\r
+                                <property name="id">wxID_ANY</property>\r
+                                <property name="maximum_size"></property>\r
+                                <property name="minimum_size"></property>\r
+                                <property name="name">m_choice_cpu_device</property>\r
+                                <property name="permission">protected</property>\r
+                                <property name="pos"></property>\r
+                                <property name="selection">0</property>\r
+                                <property name="size"></property>\r
+                                <property name="subclass"></property>\r
+                                <property name="tooltip"></property>\r
+                                <property name="validator_data_type"></property>\r
+                                <property name="validator_style">wxFILTER_NONE</property>\r
+                                <property name="validator_type">wxDefaultValidator</property>\r
+                                <property name="validator_variable"></property>\r
+                                <property name="window_extra_style"></property>\r
+                                <property name="window_name"></property>\r
+                                <property name="window_style"></property>\r
+                                <event name="OnChar"></event>\r
+                                <event name="OnChoice"></event>\r
+                                <event name="OnEnterWindow"></event>\r
+                                <event name="OnEraseBackground"></event>\r
+                                <event name="OnKeyDown"></event>\r
+                                <event name="OnKeyUp"></event>\r
+                                <event name="OnKillFocus"></event>\r
+                                <event name="OnLeaveWindow"></event>\r
+                                <event name="OnLeftDClick"></event>\r
+                                <event name="OnLeftDown"></event>\r
+                                <event name="OnLeftUp"></event>\r
+                                <event name="OnMiddleDClick"></event>\r
+                                <event name="OnMiddleDown"></event>\r
+                                <event name="OnMiddleUp"></event>\r
+                                <event name="OnMotion"></event>\r
+                                <event name="OnMouseEvents"></event>\r
+                                <event name="OnMouseWheel"></event>\r
+                                <event name="OnPaint"></event>\r
+                                <event name="OnRightDClick"></event>\r
+                                <event name="OnRightDown"></event>\r
+                                <event name="OnRightUp"></event>\r
+                                <event name="OnSetFocus"></event>\r
+                                <event name="OnSize"></event>\r
+                                <event name="OnUpdateUI"></event>\r
+                            </object>\r
+                        </object>\r
                     </object>\r
                 </object>\r
                 <object class="sizeritem" expanded="1">\r
                 </object>\r
                 <object class="sizeritem" expanded="1">\r
                     <property name="border">5</property>\r
-                    <property name="flag">wxALL</property>\r
+                    <property name="flag">wxEXPAND</property>\r
                     <property name="proportion">0</property>\r
-                    <object class="wxStaticText" expanded="1">\r
-                        <property name="bg"></property>\r
-                        <property name="context_help"></property>\r
-                        <property name="context_menu">1</property>\r
-                        <property name="enabled">1</property>\r
-                        <property name="fg"></property>\r
-                        <property name="font"></property>\r
-                        <property name="hidden">0</property>\r
-                        <property name="id">wxID_ANY</property>\r
-                        <property name="label">PPU</property>\r
-                        <property name="maximum_size"></property>\r
+                    <object class="wxBoxSizer" expanded="1">\r
                         <property name="minimum_size"></property>\r
-                        <property name="name">m_label_ppu</property>\r
-                        <property name="permission">protected</property>\r
-                        <property name="pos"></property>\r
-                        <property name="size"></property>\r
-                        <property name="style"></property>\r
-                        <property name="subclass"></property>\r
-                        <property name="tooltip"></property>\r
-                        <property name="validator_data_type"></property>\r
-                        <property name="validator_style">wxFILTER_NONE</property>\r
-                        <property name="validator_type">wxDefaultValidator</property>\r
-                        <property name="validator_variable"></property>\r
-                        <property name="window_extra_style"></property>\r
-                        <property name="window_name"></property>\r
-                        <property name="window_style"></property>\r
-                        <property name="wrap">-1</property>\r
-                        <event name="OnChar"></event>\r
-                        <event name="OnEnterWindow"></event>\r
-                        <event name="OnEraseBackground"></event>\r
-                        <event name="OnKeyDown"></event>\r
-                        <event name="OnKeyUp"></event>\r
-                        <event name="OnKillFocus"></event>\r
-                        <event name="OnLeaveWindow"></event>\r
-                        <event name="OnLeftDClick"></event>\r
-                        <event name="OnLeftDown"></event>\r
-                        <event name="OnLeftUp"></event>\r
-                        <event name="OnMiddleDClick"></event>\r
-                        <event name="OnMiddleDown"></event>\r
-                        <event name="OnMiddleUp"></event>\r
-                        <event name="OnMotion"></event>\r
-                        <event name="OnMouseEvents"></event>\r
-                        <event name="OnMouseWheel"></event>\r
-                        <event name="OnPaint"></event>\r
-                        <event name="OnRightDClick"></event>\r
-                        <event name="OnRightDown"></event>\r
-                        <event name="OnRightUp"></event>\r
-                        <event name="OnSetFocus"></event>\r
-                        <event name="OnSize"></event>\r
-                        <event name="OnUpdateUI"></event>\r
+                        <property name="name">bSizer7</property>\r
+                        <property name="orient">wxHORIZONTAL</property>\r
+                        <property name="permission">none</property>\r
+                        <object class="sizeritem" expanded="1">\r
+                            <property name="border">5</property>\r
+                            <property name="flag">wxALL</property>\r
+                            <property name="proportion">0</property>\r
+                            <object class="wxStaticText" expanded="1">\r
+                                <property name="bg"></property>\r
+                                <property name="context_help"></property>\r
+                                <property name="context_menu">1</property>\r
+                                <property name="enabled">1</property>\r
+                                <property name="fg"></property>\r
+                                <property name="font"></property>\r
+                                <property name="hidden">0</property>\r
+                                <property name="id">wxID_ANY</property>\r
+                                <property name="label">PPU</property>\r
+                                <property name="maximum_size"></property>\r
+                                <property name="minimum_size">150,-1</property>\r
+                                <property name="name">m_label_ppu</property>\r
+                                <property name="permission">protected</property>\r
+                                <property name="pos"></property>\r
+                                <property name="size"></property>\r
+                                <property name="style"></property>\r
+                                <property name="subclass"></property>\r
+                                <property name="tooltip"></property>\r
+                                <property name="validator_data_type"></property>\r
+                                <property name="validator_style">wxFILTER_NONE</property>\r
+                                <property name="validator_type">wxDefaultValidator</property>\r
+                                <property name="validator_variable"></property>\r
+                                <property name="window_extra_style"></property>\r
+                                <property name="window_name"></property>\r
+                                <property name="window_style"></property>\r
+                                <property name="wrap">-1</property>\r
+                                <event name="OnChar"></event>\r
+                                <event name="OnEnterWindow"></event>\r
+                                <event name="OnEraseBackground"></event>\r
+                                <event name="OnKeyDown"></event>\r
+                                <event name="OnKeyUp"></event>\r
+                                <event name="OnKillFocus"></event>\r
+                                <event name="OnLeaveWindow"></event>\r
+                                <event name="OnLeftDClick"></event>\r
+                                <event name="OnLeftDown"></event>\r
+                                <event name="OnLeftUp"></event>\r
+                                <event name="OnMiddleDClick"></event>\r
+                                <event name="OnMiddleDown"></event>\r
+                                <event name="OnMiddleUp"></event>\r
+                                <event name="OnMotion"></event>\r
+                                <event name="OnMouseEvents"></event>\r
+                                <event name="OnMouseWheel"></event>\r
+                                <event name="OnPaint"></event>\r
+                                <event name="OnRightDClick"></event>\r
+                                <event name="OnRightDown"></event>\r
+                                <event name="OnRightUp"></event>\r
+                                <event name="OnSetFocus"></event>\r
+                                <event name="OnSize"></event>\r
+                                <event name="OnUpdateUI"></event>\r
+                            </object>\r
+                        </object>\r
+                        <object class="sizeritem" expanded="1">\r
+                            <property name="border">5</property>\r
+                            <property name="flag">wxALL</property>\r
+                            <property name="proportion">0</property>\r
+                            <object class="wxChoice" expanded="1">\r
+                                <property name="bg"></property>\r
+                                <property name="choices"></property>\r
+                                <property name="context_help"></property>\r
+                                <property name="context_menu">1</property>\r
+                                <property name="enabled">1</property>\r
+                                <property name="fg"></property>\r
+                                <property name="font"></property>\r
+                                <property name="hidden">0</property>\r
+                                <property name="id">wxID_ANY</property>\r
+                                <property name="maximum_size"></property>\r
+                                <property name="minimum_size">60,-1</property>\r
+                                <property name="name">m_choice_ppu_trans</property>\r
+                                <property name="permission">protected</property>\r
+                                <property name="pos"></property>\r
+                                <property name="selection">0</property>\r
+                                <property name="size"></property>\r
+                                <property name="subclass"></property>\r
+                                <property name="tooltip"></property>\r
+                                <property name="validator_data_type"></property>\r
+                                <property name="validator_style">wxFILTER_NONE</property>\r
+                                <property name="validator_type">wxDefaultValidator</property>\r
+                                <property name="validator_variable"></property>\r
+                                <property name="window_extra_style"></property>\r
+                                <property name="window_name"></property>\r
+                                <property name="window_style"></property>\r
+                                <event name="OnChar"></event>\r
+                                <event name="OnChoice"></event>\r
+                                <event name="OnEnterWindow"></event>\r
+                                <event name="OnEraseBackground"></event>\r
+                                <event name="OnKeyDown"></event>\r
+                                <event name="OnKeyUp"></event>\r
+                                <event name="OnKillFocus"></event>\r
+                                <event name="OnLeaveWindow"></event>\r
+                                <event name="OnLeftDClick"></event>\r
+                                <event name="OnLeftDown"></event>\r
+                                <event name="OnLeftUp"></event>\r
+                                <event name="OnMiddleDClick"></event>\r
+                                <event name="OnMiddleDown"></event>\r
+                                <event name="OnMiddleUp"></event>\r
+                                <event name="OnMotion"></event>\r
+                                <event name="OnMouseEvents"></event>\r
+                                <event name="OnMouseWheel"></event>\r
+                                <event name="OnPaint"></event>\r
+                                <event name="OnRightDClick"></event>\r
+                                <event name="OnRightDown"></event>\r
+                                <event name="OnRightUp"></event>\r
+                                <event name="OnSetFocus"></event>\r
+                                <event name="OnSize"></event>\r
+                                <event name="OnUpdateUI"></event>\r
+                            </object>\r
+                        </object>\r
+                        <object class="sizeritem" expanded="1">\r
+                            <property name="border">5</property>\r
+                            <property name="flag">wxALL</property>\r
+                            <property name="proportion">0</property>\r
+                            <object class="wxChoice" expanded="1">\r
+                                <property name="bg"></property>\r
+                                <property name="choices"></property>\r
+                                <property name="context_help"></property>\r
+                                <property name="context_menu">1</property>\r
+                                <property name="enabled">1</property>\r
+                                <property name="fg"></property>\r
+                                <property name="font"></property>\r
+                                <property name="hidden">0</property>\r
+                                <property name="id">wxID_ANY</property>\r
+                                <property name="maximum_size"></property>\r
+                                <property name="minimum_size"></property>\r
+                                <property name="name">m_choice_ppu_device</property>\r
+                                <property name="permission">protected</property>\r
+                                <property name="pos"></property>\r
+                                <property name="selection">0</property>\r
+                                <property name="size"></property>\r
+                                <property name="subclass"></property>\r
+                                <property name="tooltip"></property>\r
+                                <property name="validator_data_type"></property>\r
+                                <property name="validator_style">wxFILTER_NONE</property>\r
+                                <property name="validator_type">wxDefaultValidator</property>\r
+                                <property name="validator_variable"></property>\r
+                                <property name="window_extra_style"></property>\r
+                                <property name="window_name"></property>\r
+                                <property name="window_style"></property>\r
+                                <event name="OnChar"></event>\r
+                                <event name="OnChoice"></event>\r
+                                <event name="OnEnterWindow"></event>\r
+                                <event name="OnEraseBackground"></event>\r
+                                <event name="OnKeyDown"></event>\r
+                                <event name="OnKeyUp"></event>\r
+                                <event name="OnKillFocus"></event>\r
+                                <event name="OnLeaveWindow"></event>\r
+                                <event name="OnLeftDClick"></event>\r
+                                <event name="OnLeftDown"></event>\r
+                                <event name="OnLeftUp"></event>\r
+                                <event name="OnMiddleDClick"></event>\r
+                                <event name="OnMiddleDown"></event>\r
+                                <event name="OnMiddleUp"></event>\r
+                                <event name="OnMotion"></event>\r
+                                <event name="OnMouseEvents"></event>\r
+                                <event name="OnMouseWheel"></event>\r
+                                <event name="OnPaint"></event>\r
+                                <event name="OnRightDClick"></event>\r
+                                <event name="OnRightDown"></event>\r
+                                <event name="OnRightUp"></event>\r
+                                <event name="OnSetFocus"></event>\r
+                                <event name="OnSize"></event>\r
+                                <event name="OnUpdateUI"></event>\r
+                            </object>\r
+                        </object>\r
                     </object>\r
                 </object>\r
                 <object class="sizeritem" expanded="1">\r