// callback.cxx // // callback functions for the Glaum project // #include "defines.h" #include "prototype.h" #include #include "global.h" #include #include void convert_action(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; if(global->getSourceEntry().empty()) { global->message("Choose an MP3 source file first!"); return; } if(global->getDestEntry().empty()) { global->message("Specify a destination for the CDDA track first!"); return; } gtk_notebook_set_page(GTK_NOTEBOOK(global->getNotebookWidget()), 1); fileConvert(global, global->getSourceEntry(), global->getDestEntry()); global->appendTextWidget("\n\n<<< CONVERSION DONE! >>>\n\n"); } void src_file(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->makeFileDialog("Select MPEG 1.0 Layer 3 Source"); } void store_src(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->setSourceEntry(gtk_file_selection_get_filename(GTK_FILE_SELECTION(global->getFileDialog()))); } void close_fileopen(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; GtkWidget *dialog = global->getFileDialog(); if(global->dialogIsLocked()) { gtk_grab_remove(dialog); } gtk_widget_destroy(dialog); } void clear_status(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->resetTextWidget(); } void clear_convert(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->setSourceEntry(""); global->setDestEntry(""); } void batch_src(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->makeFileDialog("Select MPEG 1.0 Layer 3 Source", false); } void batch_store(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->batchAppend(gtk_file_selection_get_filename(GTK_FILE_SELECTION(global->getFileDialog()))); } void batch_clear(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->batchClear(); } void clear_selected(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; if(global->getLastBatchRowSelected() > -1) { global->batchRemove(global->getLastBatchRowSelected()); global->setLastBatchRowSelected(-1); } } void batch_row_selected(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->setLastBatchRowSelected(row); } void batch_move_up(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; if(global->getBatchRowCount() == 0) { global->message("Add files first!"); return; } if(global->getLastBatchRowSelected() < 1) { // can't move up if we're 0! global->message("Already at the top!"); return; } global->batchSwapUp(); } void batch_move_down(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; if(global->getBatchRowCount() == 0) { global->message("Add files first!"); return; } if(global->getLastBatchRowSelected() == (global->getBatchRowCount() - 1) ) { // can't move down if last row! global->message("Already at the bottom!"); return; } global->batchSwapDown(); } void start_batch_conversion(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; if(global->getBatchRowCount() < 1) { global->message("Add files to convert first!"); return; } global->resetTextWidget(); gtk_notebook_set_page(GTK_NOTEBOOK(global->getNotebookWidget()), 1); for(int i=0; igetBatchRowCount(); i++) { std::stringstream s; std::string src; s << global->getWorkingEntry() << i+1; // create simple filename starting with '1' src = global->getBatchCurrentFile(i); fileConvert(global, src, s.str()); } global->appendTextWidget("\n\n<<< CONVERSION DONE! >>>\n\n"); } void settings_dialog(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; makePreferencesDialogBox(global); global->showPreferencesDialog(); gtk_grab_add(global->getPreferencesDialogWidget()); } void about_dialog(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; makeAboutDialogBox(global); global->showAboutDialog(); gtk_grab_add(global->getAboutDialogWidget()); } void about_close(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->hideAboutDialog(); gtk_grab_remove(global->getAboutDialogWidget()); } void dialog_close(GtkWidget *widget, gpointer data) { assert(data != NULL); GtkWidget *dialog = (GtkWidget *)data; gtk_grab_remove(dialog); gtk_widget_destroy(dialog); } void cancel_settings(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->hidePreferencesDialog(); syncPreferences(global); gtk_grab_remove(global->getPreferencesDialogWidget()); } void apply_settings(GtkWidget *widget,gpointer data) { assert(data != NULL); Global *global = (Global *)data; global->hidePreferencesDialog(); global->setSudo(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(global->getSudoCheckbox())) ? true : false); global->setDialogLock(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(global->getDialogLockCheckbox())) ? true : false); global->setCdrecordVerboseOutput(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(global->getCdrecordVerboseCheckbox())) ? true : false); global->setCdrecordSpeed(global->getCdrecordSpeedEntry()); global->setCdrecordDevice(global->getCdrecordDeviceEntry()); syncPreferences(global); gtk_grab_remove(global->getPreferencesDialogWidget()); } void convert_and_burn(GtkWidget *widget, gpointer data) { assert(data != NULL); Global *global = (Global *)data; // call our already-present batch convert routine start_batch_conversion(widget, data); std::stringstream s; if(!(global->getWorkingEntry().empty())) { s << "cd " << global->getWorkingEntry() << " && "; } if(global->useSudo()) { s << "sudo "; } s << "cdrecord "; if(global->useVerboseCdrecordOutput()) { s << "-v "; } s << "-dev=" << global->getCdrecordDevice() << " -speed=" << global->getCdrecordSpeed() << " -pad -audio "; for(int i = 0; igetBatchRowCount(); i++) { s << i+1 << " "; } getShellOutput(global, s.str()); global->appendTextWidget("\n\n<<< BURNING DONE! >>>\n\n"); }