#include #include #include #include "tracktime.h" #include "globals.h" #include "tocedit.h" #include "support.h" gint gdrdao_set_ttimemmssff(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt, GtkSignalFunc _sigf) { GtkWidget *wmm, *wss, *wff, *wtt; float q; gint tmp, mm, ss, ff; if(_wmm==NULL||_wss==NULL||_wff==NULL||_wtt==NULL||_sigf==NULL) return 1; wmm=lookup_widget(gdrdao_mainwindow,_wmm); wss=lookup_widget(gdrdao_mainwindow,_wss); wff=lookup_widget(gdrdao_mainwindow,_wff); wtt=lookup_widget(gdrdao_mainwindow,_wtt); if(wmm==NULL||wss==NULL||wff==NULL||wtt==NULL) return 1; q=gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(wtt)); tmp=floorf(q); /* contains the seconds */ mm=tmp/60; ss=tmp%60; q-=(float)tmp; q*=100; tmp=(gint)q; /* percentage of a second */ ff=(3*q)/4; /* 75 equals 100 */ gtk_signal_handler_block_by_func(GTK_OBJECT(wmm), GTK_SIGNAL_FUNC(_sigf), NULL); gtk_spin_button_set_value(GTK_SPIN_BUTTON(wmm),mm); gtk_signal_handler_unblock_by_func(GTK_OBJECT(wmm), GTK_SIGNAL_FUNC(_sigf), NULL); gtk_signal_handler_block_by_func(GTK_OBJECT(wss), GTK_SIGNAL_FUNC(_sigf), NULL); gtk_spin_button_set_value(GTK_SPIN_BUTTON(wss),ss); gtk_signal_handler_unblock_by_func(GTK_OBJECT(wss), GTK_SIGNAL_FUNC(_sigf), NULL); gtk_signal_handler_block_by_func(GTK_OBJECT(wff), GTK_SIGNAL_FUNC(_sigf), NULL); gtk_spin_button_set_value(GTK_SPIN_BUTTON(wff),ff); gtk_signal_handler_unblock_by_func(GTK_OBJECT(wff), GTK_SIGNAL_FUNC(_sigf), NULL); return 0; }; gint gdrdao_set_ttimetotal(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt, GtkSignalFunc _sigf) { gint mm, ss, ff; gfloat tt; GtkWidget *tmp; if(_wmm==NULL||_wss==NULL||_wff==NULL||_wtt==NULL||_sigf==NULL) return 1; tmp=lookup_widget(gdrdao_mainwindow,_wmm); mm=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(tmp)); tmp=lookup_widget(gdrdao_mainwindow,_wss); ss=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(tmp)); tmp=lookup_widget(gdrdao_mainwindow,_wff); ff=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(tmp)); tt=gdrdao_conv_mmssff(mm,ss,ff); tmp=lookup_widget(gdrdao_mainwindow,_wtt); gtk_signal_handler_block_by_func(GTK_OBJECT(tmp), _sigf, NULL); gtk_spin_button_set_value(GTK_SPIN_BUTTON(tmp),tt); gtk_signal_handler_unblock_by_func(GTK_OBJECT(tmp), _sigf, NULL); return 0; }; gint gdrdao_set_ttime_maxmmssff(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt) { GtkWidget* wtmp; GtkAdjustment* adj; float q; gint mm,ss,ff,tmp; if(_wmm==NULL||_wss==NULL||_wff==NULL||_wtt==NULL) return 1; wtmp=lookup_widget(gdrdao_mainwindow,_wtt); q=gtk_spin_button_get_value_as_float(GTK_SPIN_BUTTON(wtmp)); tmp=floorf(q); /* contains the seconds */ mm=tmp/60; ss=tmp%60; q-=(float)tmp; q*=100; tmp=(gint)q; /* percentage of a second */ ff=(3*q)/4; /* 75 equals 100 */ wtmp=lookup_widget(gdrdao_mainwindow,_wmm); adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=mm; gtk_spin_button_set_adjustment( GTK_SPIN_BUTTON(wtmp), adj); wtmp=lookup_widget(gdrdao_mainwindow,_wss); adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=ss; gtk_spin_button_set_adjustment( GTK_SPIN_BUTTON(wtmp), adj); wtmp=lookup_widget(gdrdao_mainwindow,_wff); adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=ff; gtk_spin_button_set_adjustment( GTK_SPIN_BUTTON(wtmp), adj); return 0; }; gint gdrdao_set_ttime_maxtotal(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt) { #ifndef GDRDAO_DISABLE_MAXTIMESUPPORT GtkWidget* wtmp; GtkAdjustment* adj; gint mm, ss, ff; float q; if(_wmm==NULL||_wss==NULL||_wff==NULL||_wtt==NULL) return 1; wtmp=lookup_widget(gdrdao_mainwindow,_wmm); mm=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); wtmp=lookup_widget(gdrdao_mainwindow,_wss); ss=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); wtmp=lookup_widget(gdrdao_mainwindow,_wff); ff=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); q=gdrdao_conv_mmssff(mm,ss,ff); wtmp=lookup_widget(gdrdao_mainwindow,_wtt); adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=q; gtk_spin_button_set_adjustment( GTK_SPIN_BUTTON(wtmp), adj); #endif return 0; }; gint gdrdao_set_ttime_max(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt, gint _mm, gint _ss, gint _ff) { #ifndef GDRDAO_DISABLE_MAXTIMESUPPORT GtkWidget* wtmp; GtkAdjustment* adj; float q; gint w,e,r; if(_wmm==NULL||_wff==NULL||_wtt==NULL||_wss==NULL) return 1; wtmp=lookup_widget(gdrdao_mainwindow,_wmm); w=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); if(w>=_mm) { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=_mm; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); } else { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=GDRDAO_MAX_MINUTES; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); }; wtmp=lookup_widget(gdrdao_mainwindow,_wss); e=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); if(e>=_ss&&w>=_mm) { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=_ss; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); } else { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=GDRDAO_MAX_SECONDS; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); }; wtmp=lookup_widget(gdrdao_mainwindow,_wff); r=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); if(r>=_ff&&e>=_ss&&w>=_mm) { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=_ff; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); } else { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=GDRDAO_MAX_FRAMES; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); }; q=gdrdao_conv_mmssff(_mm,_ss,_ff); wtmp=lookup_widget(gdrdao_mainwindow,_wtt); adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->upper=q; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); #endif return 0; }; gint gdrdao_add_ttime(gint* _smm, gint* _sss, gint* _sff, gint _mm, gint _ss, gint _ff) { gint mm, ss, ff; if(_smm==NULL||_sss==NULL||_sff==NULL) return 1; ss=_ss%60; ff=_ff%75; ss+=_ff/75; mm=_mm+(_ss/60); *_sff+=ff; if(*_sff>74) {*_sss+=*_sff/75; *_sff%=75;}; *_sss+=ss; if(*_sss>59) {*_smm+=*_sss/60; *_sss%=60;}; return 0; }; gint gdrdao_sub_ttime(gint* _smm, gint* _sss, gint* _sff, gint _mm, gint _ss, gint _ff) { gint tmp; if(_smm==NULL||_sss==NULL||_sff==NULL) return 1; if(*_sff-_ff<0) { tmp=*_sff-_ff; tmp/=75; *_sss-=tmp+1; /* negative value! */ tmp=*_sff-_ff; tmp%=75; *_sff=tmp+75; /* negative value! */ } else { *_sff-=_ff; }; if(*_sss-_ss<0) { tmp=*_sss-_ss; tmp/=60; *_smm-=tmp+1; tmp=*_sss-_ss; tmp%=60; *_sss=tmp+60; } else { *_sss-=_ss; }; *_smm-=_mm; if(*_smm<0) return 1; return 0; }; gint gdrdao_get_ttime(struct gdrdao_trackentry* _use, gint* _mm, gint* _ss, gint* _ff) { struct gdrdao_trackentry* tmp; gint mm,ss,ff; if(_use==NULL||_mm==NULL||_ss==NULL||_ff==NULL) return 1; mm=0; ss=0; ff=0; *_mm=0; *_ss=0; *_ff=0; tmp=_use; while(tmp!=NULL) { gdrdao_add_ttime(&mm,&ss,&ff,tmp->lmin,tmp->lsec,tmp->lfrm); tmp=tmp->next; }; *_mm=mm; *_ss=ss; *_ff=ff; return 0; }; gint gdrdao_set_ttime(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt, gint _mm, gint _ss, gint _ff) { GtkWidget* tmp; tmp=lookup_widget(gdrdao_mainwindow,_wmm); gtk_spin_button_set_value(GTK_SPIN_BUTTON(tmp),_mm); tmp=lookup_widget(gdrdao_mainwindow,_wss); gtk_spin_button_set_value(GTK_SPIN_BUTTON(tmp),_ss); tmp=lookup_widget(gdrdao_mainwindow,_wff); gtk_spin_button_set_value(GTK_SPIN_BUTTON(tmp),_ff); return 0; }; gint gdrdao_set_ttime_min(gchar* _wmm, gchar* _wss, gchar* _wff, gchar* _wtt, gint _mm, gint _ss, gint _ff) { #ifndef GDRDAO_DISABLE_MAXTIMESUPPORT GtkWidget* wtmp; GtkAdjustment* adj; float q; gint w,e,r; if(_wmm==NULL||_wff==NULL||_wtt==NULL||_wss==NULL) return 1; wtmp=lookup_widget(gdrdao_mainwindow,_wmm); w=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); if(w<=_mm) { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=_mm; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); } else { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=GDRDAO_MAX_MINUTES; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); }; wtmp=lookup_widget(gdrdao_mainwindow,_wss); e=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); if(e>=_ss&&w>=_mm) { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=_ss; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); } else { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=GDRDAO_MAX_SECONDS; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); }; wtmp=lookup_widget(gdrdao_mainwindow,_wff); r=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(wtmp)); if(r>=_ff&&e>=_ss&&w>=_mm) { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=_ff; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); } else { adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=GDRDAO_MAX_FRAMES; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); }; q=gdrdao_conv_mmssff(_mm,_ss,_ff); wtmp=lookup_widget(gdrdao_mainwindow,_wtt); adj=gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(wtmp)); adj->lower=q; gtk_spin_button_set_adjustment(GTK_SPIN_BUTTON(wtmp),adj); #endif return 0; }; gint gdrdao_get_dtime(struct gdrdao_toceditor* _toc, gint* _mm, gint* _ss, gint* _ff) { struct gdrdao_trackentry* tmp; gint mm,ss,ff, tmm, tss, tff; if(_toc==NULL||_mm==NULL||_ss==NULL||_ff==NULL) return 1; mm=0; ss=0; ff=0; tmp=_toc->track; while(tmp!=NULL) { tmm=0; tss=0; tff=0; if(tmp->pregap==NULL) { gdrdao_add_ttime(&tmm,&tss,&tff, tmp->premin,tmp->presec,tmp->prefrm); gdrdao_add_ttime(&tmm,&tss,&tff,tmp->lmin,tmp->lsec,tmp->lfrm); } else { if(gdrdao_get_ttime(tmp->pregap->track,&tmm, &tss, &tff)==0) { gdrdao_add_ttime(&tmm,&tss,&tff, tmp->lmin,tmp->lsec,tmp->lfrm); } else { gdrdao_add_ttime(&tmm,&tss,&tff, tmp->premin,tmp->presec,tmp->prefrm); gdrdao_add_ttime(&tmm,&tss,&tff,tmp->lmin,tmp->lsec,tmp->lfrm); }; }; gdrdao_add_ttime(&mm,&ss,&ff,tmm,tss,tff); tmp=tmp->next; }; *_mm=mm; *_ss=ss; *_ff=ff; return 0; };