1 /* grip.h 2 * 3 * Copyright (c) 1998-2002 Mike Oliphant <oliphant@gtk.org> 4 * 5 * http://www.nostatic.org/grip 6 * 7 * This program is free software; you can redistribute it and/or 8 * modify it under the terms of the GNU General Public License as 9 * published by the Free Software Foundation; either version 2 of the 10 * License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 20 * USA 21 * 22 */ 23 24 #ifndef GRIP_H 25 #define GRIP_H 26 27 #include "config.h" 28 #include <gtk/gtk.h> 29 #include "cddev.h" 30 #include "discdb.h" 31 #include "pthread.h" 32 #include "launch.h" 33 34 #if defined(HAVE_CDDA_INTERFACE_H) || defined(HAVE_CDDA_CDDA_INTERFACE_H) 35 #define CDPAR 36 #endif 37 38 #define WINWIDTH 600 39 #define WINHEIGHT 450 40 41 #define WINHEIGHTEDIT 600 42 43 #define MIN_WINWIDTH 200 44 #define MIN_WINHEIGHT 80 45 46 #define MAX_NUM_CPU 16 47 48 #define RRand(range) (random()%(range)) 49 50 #if defined(__linux__) || defined(__FreeBSD__) || defined(__GLIBC__) || defined(__NetBSD__) || defined(__osf__) /* __osf__ ?? */ 51 52 #define MAILER "/usr/sbin/sendmail -i -t" 53 54 #elif defined(__sparc__) 55 56 #define MAILER "/usr/lib/sendmail -i -t" 57 58 #endif 59 60 typedef struct _grip_gui { 61 GtkWidget *app; 62 GtkWidget *winbox; 63 GtkWidget *notebook; 64 gboolean minimized; 65 int win_width; 66 int win_height; 67 int win_height_edit; 68 int win_width_min; 69 int win_height_min; 70 int x; 71 int y; 72 GtkStyle *style_wb; 73 GtkStyle *style_LCD; 74 GtkStyle *style_dark_grey; 75 76 GtkWidget *disc_name_label; 77 GtkWidget *disc_artist_label; 78 79 GtkWidget *dbinfo_hbox; 80 GtkWidget *dbinfo_back_button; 81 GtkWidget *dbinfo_forward_button; 82 83 GtkListStore *track_list_store; 84 GtkWidget *track_list; 85 86 GtkWidget *current_track_label; 87 int time_display_mode; 88 GtkWidget *play_time_label; 89 GtkWidget *rip_indicator; 90 GtkWidget *lcd_smile_indicator; 91 GtkWidget *mp3_indicator[MAX_NUM_CPU]; 92 GtkWidget *discdb_indicator; 93 GtkWidget *control_button_box; 94 GtkWidget *controls; 95 gboolean control_buttons_visible; 96 GdkCursor *wait_cursor; 97 98 gboolean track_edit_visible; 99 GtkWidget *track_edit_box; 100 GtkWidget *artist_edit_entry; 101 GtkWidget *title_edit_entry; 102 GtkWidget *id3_genre_combo; 103 GList *id3_genre_item_list; 104 GtkWidget *year_spin_button; 105 GtkWidget *track_edit_entry; 106 GtkWidget *multi_artist_box; 107 GtkWidget *track_artist_edit_entry; 108 GtkWidget *split_chars_entry; 109 GtkWidget *multi_artist_button; 110 GtkWidget *playopts; 111 GtkWidget *playlist_entry; 112 GtkWidget *play_indicator; 113 GtkWidget *loop_indicator; 114 gboolean track_prog_visible; 115 116 GtkWidget *volume_control; 117 gboolean volvis; 118 119 GtkWidget *play_sector_label; 120 121 GtkWidget *partial_rip_box; 122 GtkWidget *rip_prog_label; 123 GtkWidget *ripprogbar; 124 GtkWidget *smile_indicator; 125 GtkWidget *mp3_prog_label[MAX_NUM_CPU]; 126 GtkWidget *mp3progbar[MAX_NUM_CPU]; 127 128 GtkWidget *start_sector_entry; 129 GtkWidget *end_sector_entry; 130 131 GtkWidget *rip_exe_box; 132 GtkWidget *rip_builtin_box; 133 GtkWidget *ripexename_entry; 134 GtkWidget *ripcmdline_entry; 135 GtkWidget *mp3exename_entry; 136 GtkWidget *mp3cmdline_entry; 137 GtkWidget *mp3extension_entry; 138 139 /* Overall prgress */ 140 GtkWidget *all_label; 141 GtkWidget *all_rip_label; 142 GtkWidget *all_enc_label; 143 GtkWidget *all_ripprogbar; 144 GtkWidget *all_encprogbar; 145 146 /* Images */ 147 GtkWidget *check_image; 148 GtkWidget *eject_image; 149 GtkWidget *cdscan_image; 150 GtkWidget *ff_image; 151 GtkWidget *lowleft_image; 152 GtkWidget *lowright_image; 153 GtkWidget *minmax_image; 154 GtkWidget *nexttrk_image; 155 GtkWidget *playpaus_image; 156 GtkWidget *prevtrk_image; 157 GtkWidget *loop_image; 158 GtkWidget *noloop_image; 159 GtkWidget *random_image; 160 GtkWidget *playlist_image; 161 GtkWidget *playnorm_image; 162 GtkWidget *quit_image; 163 GtkWidget *rew_image; 164 GtkWidget *stop_image; 165 GtkWidget *upleft_image; 166 GtkWidget *upright_image; 167 GtkWidget *vol_image; 168 GtkWidget *discdbwht_image; 169 GtkWidget *rotate_image; 170 GtkWidget *edit_image; 171 GtkWidget *progtrack_image; 172 GtkWidget *mail_image; 173 GtkWidget *save_image; 174 GtkWidget *empty_image; 175 176 GtkWidget *discdb_pix[2]; 177 GtkWidget *rip_pix[4]; 178 GtkWidget *mp3_pix[4]; 179 GtkWidget *smile_pix[8]; 180 181 GtkWidget *play_pix[3]; 182 183 /* notification area widgets */ 184 GtkStatusIcon *tray_icon; 185 GtkWidget *tray_menu; 186 GtkWidget *tray_menu_play; 187 GtkWidget *tray_menu_pause; 188 } GripGUI; 189 190 struct _encode_track; 191 192 typedef struct _grip_info { 193 char version[256]; 194 DiscInfo disc; 195 DiscData ddata; 196 gboolean use_proxy; 197 gboolean use_proxy_env; 198 ProxyServer proxy_server; 199 DiscDBServer dbserver; 200 DiscDBServer dbserver2; 201 char config_filename[256]; 202 char cd_device[256]; 203 char force_scsi[256]; 204 char discdb_submit_email[256]; 205 char discdb_encoding[16]; 206 char id3_encoding[16]; 207 char id3v2_encoding[16]; 208 gboolean db_use_freedb; 209 char user_email[256]; 210 gboolean local_mode; 211 gboolean update_required; 212 gboolean have_disc; 213 gboolean tray_open; 214 gboolean faulty_eject; 215 gboolean looking_up; 216 gboolean ask_submit; 217 gboolean is_new_disc; 218 gboolean first_time; 219 gboolean play_first; 220 gboolean play_on_insert; 221 gboolean stop_first; 222 gboolean no_interrupt; 223 gboolean automatic_discdb; 224 gboolean poll_drive; 225 int poll_interval; 226 int auto_eject_countdown; 227 int current_discid; 228 pthread_t discdb_thread; 229 int volume; 230 231 int current_disc; 232 int changer_slots; 233 234 gboolean playing; 235 gboolean stopped; 236 gboolean ffwding; 237 gboolean rewinding; 238 int play_mode; 239 gboolean playloop; 240 int current_track_index; 241 int tracks_prog[MAX_TRACKS]; 242 int prog_totaltracks; 243 gboolean automatic_reshuffle; 244 245 char title_split_chars[6]; 246 247 GripGUI gui_info; 248 249 int curr_pipe_fd; 250 251 int num_cpu; 252 gboolean ripping; 253 gboolean encoding; 254 gboolean stop_rip; 255 gboolean stop_encode; 256 gboolean ripping_a_disc; 257 time_t rip_finished; 258 int rippid; 259 int num_wavs; 260 int rip_track; 261 time_t rip_started; 262 int ripsize; 263 char ripfile[PATH_MAX]; 264 int start_sector; 265 int end_sector; 266 gboolean doencode; 267 int mp3pid[MAX_NUM_CPU]; 268 char mp3file[MAX_NUM_CPU][PATH_MAX]; 269 int mp3size[MAX_NUM_CPU]; 270 int mp3_started[MAX_NUM_CPU]; 271 int mp3_enc_track[MAX_NUM_CPU]; 272 char rip_delete_file[MAX_NUM_CPU][PATH_MAX]; 273 double track_gain_adjustment; 274 double disc_gain_adjustment; 275 struct _encode_track *encoded_track[MAX_NUM_CPU]; 276 GList *encode_list; 277 GList *pending_list; 278 gboolean delayed_encoding; 279 int selected_ripper; 280 gboolean using_builtin_cdp; 281 gboolean in_rip_thread; 282 gboolean do_redirect; 283 #ifdef CDPAR 284 pthread_t cdp_thread; 285 gboolean stop_thread_rip_now; 286 gboolean disable_paranoia; 287 gboolean disable_extra_paranoia; 288 gboolean disable_scratch_detect; 289 gboolean disable_scratch_repair; 290 gboolean calc_gain; 291 int rip_smile_level; 292 gfloat rip_percent_done; 293 #endif 294 char ripexename[256]; 295 char ripfileformat[256]; 296 char ripfileformat_multi[256]; 297 char ripcmdline[256]; 298 int ripnice; 299 int max_wavs; 300 gboolean auto_rip; 301 gboolean beep_after_rip; 302 gboolean eject_after_rip; 303 gboolean rip_partial; 304 int eject_delay; 305 gboolean delay_before_rip; 306 gboolean stop_between_tracks; 307 char wav_filter_cmd[256]; 308 char disc_filter_cmd[256]; 309 int selected_encoder; 310 char mp3cmdline[256]; 311 char mp3extension[10]; 312 char mp3fileformat[256]; 313 char mp3fileformat_multi[256]; 314 char mp3exename[256]; 315 gboolean delete_wavs; 316 gboolean add_to_db; 317 gboolean add_m3u; 318 gboolean rel_m3u; 319 char m3ufileformat[256]; 320 int kbits_per_sec; 321 int edit_num_cpu; 322 int mp3nice; 323 char mp3_filter_cmd[256]; 324 char execute_after_encode_cmd[256]; 325 gboolean doid3; 326 gboolean doid3v2; 327 gboolean tag_mp3_only; 328 char id3_comment[30]; 329 char cdupdate[256]; 330 StrTransPrefs sprefs; 331 gboolean keep_min_size; 332 333 /* some vars for use in TrayIconUpdate */ 334 gfloat rip_percent; 335 gfloat enc_percent; 336 337 gfloat rip_tot_percent; 338 gfloat enc_tot_percent; 339 340 gboolean app_visible; 341 342 gboolean show_tray_icon; 343 gboolean tray_icon_made; 344 gboolean tray_menu_sensitive; 345 346 /* these are for calculating ripping progress */ 347 size_t all_ripsize; 348 size_t all_ripdone; 349 size_t all_riplast; 350 size_t all_encsize; 351 size_t all_encdone; 352 size_t all_enclast[MAX_NUM_CPU]; 353 } GripInfo; 354 355 GtkWidget *GripNew(char *device,char *scsi_device, 356 char *config_filename, gboolean force_small, 357 gboolean local_mode,gboolean no_redirect); 358 void GripDie(GtkWidget *widget,gpointer data); 359 void GripUpdate(GtkWidget *app); 360 GtkWidget *MakeNewPage(GtkWidget *notebook,char *name); 361 void Busy(GripGUI *uinfo); 362 void UnBusy(GripGUI *uinfo); 363 void CloseStuff(void *user_data); 364 365 #endif /* ifndef GRIP_H */ 366 367