void UIYabause::closeEvent( QCloseEvent* e ) { aEmulationPause->trigger(); LogStop(); if (isFullScreen()) // Need to switch out of full screen or the geometry settings get saved fullscreenRequested( false ); Settings* vs = QtYabause::settings(); vs->setValue( "General/Geometry", saveGeometry() ); vs->sync(); QMainWindow::closeEvent( e ); }
int main (int argc, char *argv[]) { int i; const char *commandLine_File = NULL; GtkWidget *pVBox; GtkWidget *pMenuBar; GtkWidget *pMenu, *pSubMenu; GtkWidget *pMenuItem, *pSubMenuItem; GtkAccelGroup * accel_group; if(argc == 2) commandLine_File = argv[1]; #ifdef DEBUG LogStart(); #endif gtk_init(&argc, &argv); SDL_Init(SDL_INIT_VIDEO); desmume_init(); dTools_running = (BOOL*)malloc(sizeof(BOOL) * dTools_list_size); for(i=0; i<dTools_list_size; i++) dTools_running[i]=FALSE; CONFIG_FILE = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL); Read_ConfigFile(); /* Creation de la fenetre */ pWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(pWindow), "Desmume"); gtk_window_set_policy (GTK_WINDOW (pWindow), FALSE, FALSE, FALSE); gtk_window_set_icon(GTK_WINDOW (pWindow), gdk_pixbuf_new_from_xpm_data(DeSmuME_xpm)); g_signal_connect(G_OBJECT(pWindow), "destroy", G_CALLBACK(gtk_main_quit), NULL); g_signal_connect(G_OBJECT(pWindow), "key_press_event", G_CALLBACK(Key_Press), NULL); g_signal_connect(G_OBJECT(pWindow), "key_release_event", G_CALLBACK(Key_Release), NULL); /* Creation de la GtkVBox */ pVBox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(pWindow), pVBox); accel_group = gtk_accel_group_new(); action_group = gtk_action_group_new("dui"); gtk_action_group_add_actions(action_group, action_entries, sizeof(action_entries) / sizeof(GtkActionEntry), pWindow); { GList * list = gtk_action_group_list_actions(action_group); g_list_foreach(list, dui_set_accel_group, accel_group); } gtk_window_add_accel_group(GTK_WINDOW(pWindow), accel_group); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "pause"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "run"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "reset"), FALSE); gtk_action_set_sensitive(gtk_action_group_get_action(action_group, "printscreen"), FALSE); /**** Creation du menu ****/ pMenuBar = gtk_menu_bar_new(); /** Menu "Fichier" **/ pMenu = gtk_menu_new(); gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "open"))); gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "printscreen"))); gtk_container_add(GTK_CONTAINER(pMenu), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "quit"))); pMenuItem = gtk_menu_item_new_with_label("File"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); /** Menu "Emulation" **/ GtkWidget *mEmulation; GtkWidget *mFrameskip; GtkWidget *mFrameskip_Radio[MAX_FRAMESKIP]; GtkWidget *mGraphics; GtkWidget *mSize; GtkWidget *mSize_Radio[MAX_SCREENCOEFF]; GtkWidget *mLayers; GtkWidget *mLayers_Radio[10]; mEmulation = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Emulation"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mEmulation); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); gtk_container_add(GTK_CONTAINER(mEmulation), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "run"))); gtk_container_add(GTK_CONTAINER(mEmulation), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "pause"))); gtk_container_add(GTK_CONTAINER(mEmulation), gtk_action_create_menu_item(gtk_action_group_get_action(action_group, "reset"))); mFrameskip = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Frameskip"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mFrameskip); gtk_menu_shell_append(GTK_MENU_SHELL(mEmulation), pMenuItem); for(i = 0; i < MAX_FRAMESKIP; i++) { char frameskipRadio_buf[16]; sprintf(frameskipRadio_buf, "%d", i); if(i>0) mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mFrameskip_Radio[i-1]), frameskipRadio_buf); else mFrameskip_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, frameskipRadio_buf); g_signal_connect(G_OBJECT(mFrameskip_Radio[i]), "activate", G_CALLBACK(Modify_Frameskip), GINT_TO_POINTER(i)); gtk_menu_shell_append(GTK_MENU_SHELL(mFrameskip), mFrameskip_Radio[i]); } gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE); mGraphics = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Graphics"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mGraphics); gtk_menu_shell_append(GTK_MENU_SHELL(mEmulation), pMenuItem); // TODO: Un jour, peut être... >< mSize = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Size"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mSize); gtk_menu_shell_append(GTK_MENU_SHELL(mGraphics), pMenuItem); for(i = 1; i < MAX_SCREENCOEFF; i++) { char sizeRadio_buf[16]; sprintf(sizeRadio_buf, "x%d", i); if(i>1) mSize_Radio[i] = gtk_radio_menu_item_new_with_label_from_widget(GTK_RADIO_MENU_ITEM(mSize_Radio[i-1]), sizeRadio_buf); else mSize_Radio[i] = gtk_radio_menu_item_new_with_label(NULL, sizeRadio_buf); g_signal_connect(G_OBJECT(mSize_Radio[i]), "activate", G_CALLBACK(Modify_ScreenCoeff), GINT_TO_POINTER(i)); gtk_menu_shell_append(GTK_MENU_SHELL(mSize), mSize_Radio[i]); } gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mFrameskip_Radio[0]), TRUE); mLayers = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Layers"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mLayers); gtk_menu_shell_append(GTK_MENU_SHELL(mGraphics), pMenuItem); for(i = 0; i < 10; i++) { mLayers_Radio[i] = gtk_check_menu_item_new_with_label(Layers_Menu[i]); g_signal_connect(G_OBJECT(mLayers_Radio[i]), "activate", G_CALLBACK(Modify_Layer), (void*)Layers_Menu[i]); gtk_menu_shell_append(GTK_MENU_SHELL(mLayers), mLayers_Radio[i]); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(mLayers_Radio[i]), TRUE); } /** Menu "Options" **/ GtkWidget *mConfig = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Config"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mConfig); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Edit controls"); g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Edit_Controls), (GtkWidget*) pWindow); gtk_menu_shell_append(GTK_MENU_SHELL(mConfig), pMenuItem); #if 0 GtkWidget *mFirmware; mFirmware = gtk_menu_new(); pMenuItem = gtk_menu_item_new_with_label("Firmware"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mFirmware); gtk_menu_shell_append(GTK_MENU_SHELL(mConfig), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Select..."); g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(SelectFirmwareFile), (gpointer)0); gtk_menu_shell_append(GTK_MENU_SHELL(mFirmware), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("Config"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), mConfig); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); #endif /** Menu "Outils" **/ pMenu = gtk_menu_new(); for(i = 0; i < dTools_list_size; i++) { pMenuItem = gtk_menu_item_new_with_label(dTools_list[i]->name); g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(Start_dTool), GINT_TO_POINTER(i)); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); } pMenuItem = gtk_menu_item_new_with_label("Tools"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); /** Menu "?" **/ pMenu = gtk_menu_new(); #if ((GTK_MAJOR_VERSION >= 2) && (GTK_MINOR_VERSION >= 6)) pMenuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_ABOUT,NULL); #else pMenuItem = gtk_menu_item_new_with_label("About"); #endif g_signal_connect(G_OBJECT(pMenuItem), "activate", G_CALLBACK(About), (GtkWidget*) pWindow); gtk_menu_shell_append(GTK_MENU_SHELL(pMenu), pMenuItem); pMenuItem = gtk_menu_item_new_with_label("?"); gtk_menu_item_set_submenu(GTK_MENU_ITEM(pMenuItem), pMenu); gtk_menu_shell_append(GTK_MENU_SHELL(pMenuBar), pMenuItem); /* Ajout du menu a la fenetre */ gtk_box_pack_start(GTK_BOX(pVBox), pMenuBar, FALSE, FALSE, 0); /* Création de la Toolbar */ pToolbar = gtk_toolbar_new(); gtk_box_pack_start(GTK_BOX(pVBox), pToolbar, FALSE, FALSE, 0); gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "open"))), -1); gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "run"))), -1); gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "pause"))), -1); gtk_toolbar_insert(GTK_TOOLBAR(pToolbar), GTK_TOOL_ITEM(gtk_action_create_tool_item(gtk_action_group_get_action(action_group, "quit"))), -1); /* Création de l'endroit pour l'affichage des écrans */ pDrawingArea= gtk_drawing_area_new(); gtk_drawing_area_size(GTK_DRAWING_AREA(pDrawingArea), 256, 384); gtk_widget_set_usize (pDrawingArea, 256, 384); gtk_widget_set_events(pDrawingArea, GDK_EXPOSURE_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_KEY_PRESS_MASK ); g_signal_connect(G_OBJECT(pDrawingArea), "button_press_event", G_CALLBACK(Stylus_Press), NULL); g_signal_connect(G_OBJECT(pDrawingArea), "button_release_event", G_CALLBACK(Stylus_Release), NULL); g_signal_connect(G_OBJECT(pDrawingArea), "motion_notify_event", G_CALLBACK(Stylus_Move), NULL); g_signal_connect( G_OBJECT(pDrawingArea), "realize", G_CALLBACK(Draw), NULL ) ; g_signal_connect( G_OBJECT(pDrawingArea), "expose_event", G_CALLBACK(gtkFloatExposeEvent), NULL ) ; gtk_box_pack_start(GTK_BOX(pVBox), pDrawingArea, FALSE, FALSE, 0); /* Création de la barre d'état */ pStatusBar = gtk_statusbar_new(); pStatusBar_Ctx = gtk_statusbar_get_context_id(GTK_STATUSBAR(pStatusBar), "Global"); pStatusBar_Change("Desmume"); gtk_box_pack_end(GTK_BOX(pVBox), pStatusBar, FALSE, FALSE, 0); gtk_widget_show_all(pWindow); //LoadFirmware("fw.bin"); /* Vérifie la ligne de commandes */ if(commandLine_File) { if(Open(commandLine_File) >= 0) { Launch(); } else { GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Unable to load :\n%s", commandLine_File); gtk_dialog_run(GTK_DIALOG(pDialog)); gtk_widget_destroy(pDialog); } } /* Boucle principale */ // gtk_idle_add(&EmuLoop, pWindow); // g_idle_add(&EmuLoop, pWindow); gtk_main(); desmume_free(); #ifdef DEBUG LogStop(); #endif SDL_Quit(); Write_ConfigFile(); return EXIT_SUCCESS; }
TestHarness::TestHarness(QWidget *parent) : QWidget(parent) { QGroupBox *ecu_box = new QGroupBox("Engine Control Unit"); QGroupBox *gps_box = new QGroupBox("GPS"); QGroupBox *imu_box = new QGroupBox("Inertial Measurement Unit"); QGroupBox *lts_box = new QGroupBox("Lighting System"); QGroupBox *wls_box = new QGroupBox("Wireless Radio"); QGroupBox *tmr_box = new QGroupBox("Timer/Logger"); QGridLayout *ecu_layout = new QGridLayout(); QGridLayout *gps_layout = new QGridLayout(); QGridLayout *imu_layout = new QGridLayout(); QGridLayout *lts_layout = new QGridLayout(); QGridLayout *wls_layout = new QGridLayout(); QGridLayout *tmr_layout = new QGridLayout(); QGridLayout *layout = new QGridLayout(); // ecu box ecu_rpm_label = new QLabel("RPM:"); ecu_rpm_edit = new QLineEdit("2000"); ecu_spark_label = new QLabel("Spark Advance:"); ecu_spark_edit = new QLineEdit("15.0"); ecu_cranking_label = new QLabel("Cranking:"); ecu_cranking_edit = new QCheckBox("Yes"); ecu_map_label = new QLabel("Manifold Air Pres:"); ecu_map_edit = new QLineEdit("1500.0"); ecu_mat_label = new QLabel("Manifold Air Temp:"); ecu_mat_edit = new QLineEdit("15.0"); ecu_clt_label = new QLabel("Coolant Temp:"); ecu_clt_edit = new QLineEdit("90.0"); ecu_tps_label = new QLabel("Throttle Position:"); ecu_tps_edit = new QLineEdit("50.0"); ecu_batt_label = new QLabel("Battery:"); ecu_batt_edit = new QLineEdit("11.9"); ecu_maf_label = new QLabel("Mass Airflow:"); ecu_maf_edit = new QLineEdit("900.0"); ecu_tc_label = new QLabel("Tach Count:"); ecu_tc_edit = new QLineEdit("100"); ecu_update_button = new QPushButton("Update"); ecu_layout->addWidget(ecu_rpm_label, 0, 0); ecu_layout->addWidget(ecu_rpm_edit, 0, 1); ecu_layout->addWidget(ecu_spark_label, 1, 0); ecu_layout->addWidget(ecu_spark_edit, 1, 1); ecu_layout->addWidget(ecu_cranking_label, 2, 0); ecu_layout->addWidget(ecu_cranking_edit, 2, 1); ecu_layout->addWidget(ecu_map_label, 3, 0); ecu_layout->addWidget(ecu_map_edit, 3, 1); ecu_layout->addWidget(ecu_mat_label, 4, 0); ecu_layout->addWidget(ecu_mat_edit, 4, 1); ecu_layout->addWidget(ecu_clt_label, 5, 0); ecu_layout->addWidget(ecu_clt_edit, 5, 1); ecu_layout->addWidget(ecu_tps_label, 6, 0); ecu_layout->addWidget(ecu_tps_edit, 6, 1); ecu_layout->addWidget(ecu_batt_label, 7, 0); ecu_layout->addWidget(ecu_batt_edit, 7, 1); ecu_layout->addWidget(ecu_maf_label, 8, 0); ecu_layout->addWidget(ecu_maf_edit, 8, 1); ecu_layout->addWidget(ecu_tc_label, 9, 0); ecu_layout->addWidget(ecu_tc_edit, 9, 1); ecu_layout->addWidget(ecu_update_button, 10, 0, 1, 2); ecu_layout->setRowStretch(11, 1); // gps box gps_time_label = new QLabel("UTC Time:"); gps_colon1_label = new QLabel(":"); gps_colon2_label = new QLabel(":"); gps_hrs_edit = new QLineEdit("12"); gps_mins_edit = new QLineEdit("01"); gps_secs_edit = new QLineEdit("01.001"); gps_lat_label = new QLabel("Latitude:"); gps_deg1_label = new QLabel("deg"); gps_min1_label = new QLabel("min"); gps_latdeg_edit = new QLineEdit("35"); gps_latmin_edit = new QLineEdit("15.653229"); gps_latdir_edit = new QLineEdit("N"); gps_long_label = new QLabel("Longitude:"); gps_deg2_label = new QLabel("deg"); gps_min2_label = new QLabel("min"); gps_longdeg_edit = new QLineEdit("120"); gps_longmin_edit = new QLineEdit("39.2362974"); gps_longdir_edit = new QLineEdit("W"); gps_alt_label = new QLabel("Altitude:"); gps_alt_edit = new QLineEdit("500.0"); gps_speed_label = new QLabel("Speed:"); gps_speed_edit = new QLineEdit("25.0"); gps_heading_label = new QLabel("Heading:"); gps_heading_edit = new QLineEdit("187.5"); gps_update_button = new QPushButton("Update"); gps_layout->addWidget(gps_time_label, 0, 0); gps_layout->addWidget(gps_hrs_edit, 0, 1); gps_layout->addWidget(gps_colon1_label, 0, 2); gps_layout->addWidget(gps_mins_edit, 0, 3); gps_layout->addWidget(gps_colon2_label, 0, 4); gps_layout->addWidget(gps_secs_edit, 0, 5); gps_layout->addWidget(gps_lat_label, 1, 0); gps_layout->addWidget(gps_latdeg_edit, 1, 1); gps_layout->addWidget(gps_deg1_label, 1, 2); gps_layout->addWidget(gps_latmin_edit, 1, 3); gps_layout->addWidget(gps_min1_label, 1, 4); gps_layout->addWidget(gps_latdir_edit, 1, 5); gps_layout->addWidget(gps_long_label, 2, 0); gps_layout->addWidget(gps_longdeg_edit, 2, 1); gps_layout->addWidget(gps_deg2_label, 2, 2); gps_layout->addWidget(gps_longmin_edit, 2, 3); gps_layout->addWidget(gps_min2_label, 2, 4); gps_layout->addWidget(gps_longdir_edit, 2, 5); gps_layout->addWidget(gps_alt_label, 3, 0); gps_layout->addWidget(gps_alt_edit, 3, 1, 1, 5); gps_layout->addWidget(gps_speed_label, 4, 0); gps_layout->addWidget(gps_speed_edit, 4, 1, 1, 5); gps_layout->addWidget(gps_heading_label, 5, 0); gps_layout->addWidget(gps_heading_edit, 5, 1, 1, 5); gps_layout->addWidget(gps_update_button, 6, 0, 1, 6); gps_layout->setRowStretch(7, 1); // imu box imu_ax_label = new QLabel("Accel X:"); imu_ax_edit = new QLineEdit("0.0"); imu_ay_label = new QLabel("Accel Y:"); imu_ay_edit = new QLineEdit("1.0"); imu_az_label = new QLabel("Accel Z:"); imu_az_edit = new QLineEdit("0.0"); imu_gx_label = new QLabel("Gyro X:"); imu_gx_edit = new QLineEdit("0.0"); imu_gy_label = new QLabel("Gyro Y:"); imu_gy_edit = new QLineEdit("0.0"); imu_gz_label = new QLabel("Gyro Z:"); imu_gz_edit = new QLineEdit("0.0"); imu_update_button = new QPushButton("Update"); imu_layout->addWidget(imu_ax_label, 0, 0); imu_layout->addWidget(imu_ax_edit, 0, 1); imu_layout->addWidget(imu_ay_label, 1, 0); imu_layout->addWidget(imu_ay_edit, 1, 1); imu_layout->addWidget(imu_az_label, 2, 0); imu_layout->addWidget(imu_az_edit, 2, 1); imu_layout->addWidget(imu_gx_label, 3, 0); imu_layout->addWidget(imu_gx_edit, 3, 1); imu_layout->addWidget(imu_gy_label, 4, 0); imu_layout->addWidget(imu_gy_edit, 4, 1); imu_layout->addWidget(imu_gz_label, 5, 0); imu_layout->addWidget(imu_gz_edit, 5, 1); imu_layout->addWidget(imu_update_button, 6, 0, 1, 2); imu_layout->setRowStretch(7, 1); // lights box lts_head_label = new QLabel("Headlights:"); lts_head_edit = new QCheckBox("On"); lts_brake_label = new QLabel("Brakelights:"); lts_brake_edit = new QCheckBox("On"); lts_left_label = new QLabel("Left Turn Signal:"); lts_left_edit = new QCheckBox("On"); lts_right_label = new QLabel("Right Turn Signal:"); lts_right_edit = new QCheckBox("On"); lts_hazards_label = new QLabel("Hazards:"); lts_hazards_edit = new QCheckBox("On"); lts_update_button = new QPushButton("Update"); lts_layout->addWidget(lts_head_label, 0, 0); lts_layout->addWidget(lts_head_edit, 0, 1); lts_layout->addWidget(lts_brake_label, 1, 0); lts_layout->addWidget(lts_brake_edit, 1, 1); lts_layout->addWidget(lts_left_label, 2, 0); lts_layout->addWidget(lts_left_edit, 2, 1); lts_layout->addWidget(lts_right_label, 3, 0); lts_layout->addWidget(lts_right_edit, 3, 1); lts_layout->addWidget(lts_hazards_label, 4, 0); lts_layout->addWidget(lts_hazards_edit, 4, 1); lts_layout->addWidget(lts_update_button, 5, 0, 1, 2); lts_layout->setRowStretch(6, 1); // wireless box wls_rx_label = new QLabel("Received from the radio:"); wls_rx_edit = new QTextEdit(); wls_tx_label = new QLabel("Transmit to the radio:"); wls_tx_edit = new QTextEdit(); wls_update_button = new QPushButton("Update"); wls_layout->addWidget(wls_rx_label, 0, 0); wls_layout->addWidget(wls_rx_edit, 1, 0); wls_layout->addWidget(wls_tx_label, 2, 0); wls_layout->addWidget(wls_tx_edit, 3, 0); wls_layout->addWidget(wls_update_button, 4, 0); wls_layout->setRowStretch(5, 1); // timer box tmr_time_display = new QLCDNumber(8); tmr_time_display->setSegmentStyle(QLCDNumber::Flat); tmr_start_button = new QPushButton("Start Timer"); tmr_stop_button = new QPushButton("Stop Timer"); log_start_button = new QPushButton("Start Data Logger"); log_stop_button = new QPushButton("Stop Data Logger"); tmr_layout->addWidget(tmr_time_display, 0, 0); tmr_layout->addWidget(tmr_start_button, 1, 0); tmr_layout->addWidget(tmr_stop_button, 2, 0); tmr_layout->addWidget(log_start_button, 3, 0); tmr_layout->addWidget(log_stop_button, 4, 0); tmr_layout->setRowStretch(5, 1); // master layout ecu_box->setLayout(ecu_layout); gps_box->setLayout(gps_layout); imu_box->setLayout(imu_layout); lts_box->setLayout(lts_layout); wls_box->setLayout(wls_layout); tmr_box->setLayout(tmr_layout); layout->addWidget(ecu_box, 0, 0); layout->addWidget(gps_box, 0, 1); layout->addWidget(imu_box, 0, 2); layout->addWidget(lts_box, 1, 0); layout->addWidget(wls_box, 1, 1); layout->addWidget(tmr_box, 1, 2); setLayout(layout); setWindowTitle("Hardware Interface Test Harness"); // connect up the ui to internal slots connect(tmr_start_button, SIGNAL(clicked()), this, SLOT(TmrStart())); connect(tmr_stop_button, SIGNAL(clicked()), this, SLOT(TmrStop())); connect(this, SIGNAL(TmrTick(int)), tmr_time_display, SLOT(display(int))); connect(ecu_update_button, SIGNAL(clicked()), this, SLOT(UpdateEcu())); connect(gps_update_button, SIGNAL(clicked()), this, SLOT(UpdateGps())); connect(imu_update_button, SIGNAL(clicked()), this, SLOT(UpdateImu())); connect(lts_update_button, SIGNAL(clicked()), this, SLOT(UpdateLts())); connect(wls_update_button, SIGNAL(clicked()), this, SLOT(UpdateWls())); // done initializing ui, set up some internal stuff timer_running = false; time = new QTime(); timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(TimerTick())); // debug logger = new DataLogger(); dashboard = new Dashboard(); dashboard->show(); // connect up the test harness to the data logger connect(log_start_button, SIGNAL(clicked()), logger, SLOT(LogStart())); connect(log_stop_button, SIGNAL(clicked()), logger, SLOT(LogStop())); connect(this, SIGNAL(EcuStateChanged(ecustate_t)), logger, SLOT(EcuUpdate(ecustate_t))); connect(this, SIGNAL(GpsStateChanged(gpsstate_t)), logger, SLOT(GpsUpdate(gpsstate_t))); connect(this, SIGNAL(ImuStateChanged(imustate_t)), logger, SLOT(ImuUpdate(imustate_t))); connect(this, SIGNAL(LtsStateChanged(ltsstate_t)), logger, SLOT(LtsUpdate(ltsstate_t))); connect(this, SIGNAL(TmrTick(int)), logger, SLOT(TmrUpdate(int))); // connect up the test harness to the dashboard connect(this, SIGNAL(TmrTick(int)), dashboard, SLOT(TmrUpdate(int))); connect(this, SIGNAL(EcuStateChanged(ecustate_t)), dashboard, SLOT(EcuUpdate(ecustate_t))); connect(this, SIGNAL(GpsStateChanged(gpsstate_t)), dashboard, SLOT(GpsUpdate(gpsstate_t))); connect(this, SIGNAL(ImuStateChanged(imustate_t)), dashboard, SLOT(ImuUpdate(imustate_t))); connect(this, SIGNAL(LtsStateChanged(ltsstate_t)), dashboard, SLOT(LtsUpdate(ltsstate_t))); }
int main(int argc, char ** argv) { static unsigned short keypad = 0; u32 last_cycle; #ifdef DEBUG LogStart(); #endif NDS_Init(); SPU_ChangeSoundCore(SNDCORE_SDL, 735 * 4); if (argc < 2) { fprintf(stderr, "usage: %s filename\n", argv[0]); return 1; } if (NDS_LoadROM(argv[1], MC_TYPE_AUTODETECT, 1) < 0) { fprintf(stderr, "error while loading %s\n", argv[1]); return 2; } /* // This has to get fixed yet strcpy(szRomPath, dirname(argv[1])); cflash_close(); cflash_init(); */ execute = TRUE; if(SDL_Init(SDL_INIT_VIDEO) == -1) { fprintf(stderr, "Error trying to initialize SDL: %s\n", SDL_GetError()); return 1; } SDL_WM_SetCaption("Desmume SDL", NULL); /* Initialize joysticks */ if(!init_joy()) return 1; /* Load our own keyboard configuration */ set_kb_keys(cli_kb_cfg); surface = SDL_SetVideoMode(256, 384, 32, SDL_SWSURFACE); while(!sdl_quit) { /* Look for queued events and update keypad status */ keypad = process_ctrls_events(keypad); /* Update mouse position and click */ if(mouse.down) NDS_setTouchPos(mouse.x, mouse.y); if(mouse.click) { NDS_releasTouch(); mouse.click = FALSE; } update_keypad(keypad); /* Update keypad */ last_cycle = NDS_exec((560190 << 1) - last_cycle, FALSE); SPU_Emulate(); Draw(); } /* Unload joystick */ uninit_joy(); SDL_Quit(); NDS_DeInit(); #ifdef DEBUG LogStop(); #endif return 0; }
static int common_gtk_glade_main( struct configured_features *my_config) { SDL_TimerID limiter_timer; gdbstub_handle_t arm9_gdb_stub; gdbstub_handle_t arm7_gdb_stub; struct armcpu_memory_iface *arm9_memio = &arm9_base_memory_iface; struct armcpu_memory_iface *arm7_memio = &arm7_base_memory_iface; struct armcpu_ctrl_iface *arm9_ctrl_iface; struct armcpu_ctrl_iface *arm7_ctrl_iface; #ifdef GTKGLEXT_AVAILABLE // check if you have GTHREAD when running configure script //g_thread_init(NULL); register_gl_fun(my_gl_Begin,my_gl_End); #endif #ifdef DEBUG LogStart(); #endif init_keyvals(); if ( my_config->arm9_gdb_port != 0) { arm9_gdb_stub = createStub_gdb( my_config->arm9_gdb_port, &arm9_memio, &arm9_base_memory_iface); if ( arm9_gdb_stub == NULL) { g_print( "Failed to create ARM9 gdbstub on port %d\n", my_config->arm9_gdb_port); return -1; } } if ( my_config->arm7_gdb_port != 0) { arm7_gdb_stub = createStub_gdb( my_config->arm7_gdb_port, &arm7_memio, &arm7_base_memory_iface); if ( arm7_gdb_stub == NULL) { g_print( "Failed to create ARM7 gdbstub on port %d\n", my_config->arm7_gdb_port); return -1; } } if(SDL_Init( SDL_INIT_TIMER | SDL_INIT_VIDEO) == -1) { fprintf(stderr, "Error trying to initialize SDL: %s\n", SDL_GetError()); return 1; } desmume_init( arm9_memio, &arm9_ctrl_iface, arm7_memio, &arm7_ctrl_iface); /* * Activate the GDB stubs * This has to come after the NDS_Init (called in desmume_init) * where the cpus are set up. */ if ( my_config->arm9_gdb_port != 0) { activateStub_gdb( arm9_gdb_stub, arm9_ctrl_iface); } if ( my_config->arm7_gdb_port != 0) { activateStub_gdb( arm7_gdb_stub, arm7_ctrl_iface); } /* Initialize joysticks */ if(!init_joy()) return 1; CONFIG_FILE = g_build_filename(g_get_home_dir(), ".desmume.ini", NULL); Read_ConfigFile(); /* load the interface */ xml = glade_xml_new(get_ui_file("DeSmuMe.glade"), NULL, NULL); xml_tools = glade_xml_new(get_ui_file("DeSmuMe_Dtools.glade"), NULL, NULL); pWindow = glade_xml_get_widget(xml, "wMainW"); pDrawingArea = glade_xml_get_widget(xml, "wDraw_Main"); pDrawingArea2 = glade_xml_get_widget(xml, "wDraw_Sub"); /* connect the signals in the interface */ glade_xml_signal_autoconnect_StringObject(xml); glade_xml_signal_autoconnect_StringObject(xml_tools); init_GL_capabilities( my_config->software_colour_convert); /* check command line file */ if( my_config->nds_file) { if(desmume_open( my_config->nds_file) >= 0) { desmume_resume(); enable_rom_features(); } else { GtkWidget *pDialog = gtk_message_dialog_new(GTK_WINDOW(pWindow), GTK_DIALOG_MODAL, GTK_MESSAGE_INFO, GTK_BUTTONS_OK, "Unable to load :\n%s", my_config->nds_file); gtk_dialog_run(GTK_DIALOG(pDialog)); gtk_widget_destroy(pDialog); } } gtk_widget_show(pDrawingArea); gtk_widget_show(pDrawingArea2); { int use_null_3d = my_config->disable_3d; #ifdef GTKGLEXT_AVAILABLE if ( !use_null_3d) { /* setup the gdk 3D emulation */ if ( init_opengl_gdk_3Demu()) { NDS_3D_SetDriver(1); if (!gpu3D->NDS_3D_Init()) { fprintf( stderr, "Failed to initialise openGL 3D emulation; " "removing 3D support\n"); use_null_3d = 1; } } else { fprintf( stderr, "Failed to setup openGL 3D emulation; " "removing 3D support\n"); use_null_3d = 1; } } #endif if ( use_null_3d) { NDS_3D_SetDriver ( 0); gpu3D->NDS_3D_Init(); } } // on_menu_tileview_activate(NULL,NULL); /* setup the frame limiter and indicate if it is disabled */ glade_fps_limiter_disabled = my_config->disable_limiter; if ( !glade_fps_limiter_disabled) { /* create the semaphore used for fps limiting */ glade_fps_limiter_semaphore = SDL_CreateSemaphore( 1); /* start a SDL timer for every FPS_LIMITER_FRAME_PERIOD * frames to keep us at 60 fps */ limiter_timer = SDL_AddTimer( 16 * FPS_LIMITER_FRAME_PERIOD, glade_fps_limiter_fn, glade_fps_limiter_semaphore); if ( limiter_timer == NULL) { fprintf( stderr, "Error trying to start FPS limiter timer: %s\n", SDL_GetError()); SDL_DestroySemaphore( glade_fps_limiter_semaphore); glade_fps_limiter_disabled = 1; } } /* start event loop */ gtk_main(); desmume_free(); if ( !glade_fps_limiter_disabled) { /* tidy up the FPS limiter timer and semaphore */ SDL_RemoveTimer( limiter_timer); SDL_DestroySemaphore( glade_fps_limiter_semaphore); } #ifdef DEBUG LogStop(); #endif /* Unload joystick */ uninit_joy(); SDL_Quit(); Write_ConfigFile(); return EXIT_SUCCESS; }