/* * * postfish * * Copyright (C) 2002-2005 Monty * * Postfish is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * Postfish is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Postfish; see the file COPYING. If not, write to the * Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. * * */ #include "postfish.h" #include #include #include "readout.h" #include "multibar.h" #include "mainpanel.h" #include "subpanel.h" #include "declip.h" #include "config.h" static GtkWidget **feedback_bars; static GtkWidget **trigger_bars; static GtkWidget *width_bar; static GtkWidget *samplereadout; static GtkWidget *msreadout; static GtkWidget *hzreadout; static GtkWidget *depth_bar; static GtkWidget *depth_readout; static GtkWidget *limit_bar; static GtkWidget *limit_readout; static GtkWidget *mainpanel_inbar; static subpanel_generic *panel; typedef struct { GtkWidget *slider; GtkWidget *readout; GtkWidget *readoutdB; int number; } clipslider; void clippanel_state_to_config(int bank){ config_set_vector("clippanel_active",bank,0,0,0,input_ch,declip_active); config_set_integer("clippanel_width",bank,0,0,0,0,declip_pending_blocksize); config_set_integer("clippanel_convergence",bank,0,0,0,0,declip_convergence); config_set_integer("clippanel_throttle",bank,0,0,0,0,declip_iterations); config_set_vector("clippanel_trigger",bank,0,0,0,input_ch,declip_chtrigger); } void clippanel_state_from_config(int bank){ int i; config_get_vector("clippanel_active",bank,0,0,0,input_ch,declip_active); config_get_sigat("clippanel_width",bank,0,0,0,0,&declip_pending_blocksize); config_get_sigat("clippanel_convergence",bank,0,0,0,0,&declip_convergence); config_get_sigat("clippanel_throttle",bank,0,0,0,0,&declip_iterations); config_get_vector("clippanel_trigger",bank,0,0,0,input_ch,declip_chtrigger); { int i=0,j=declip_pending_blocksize; while(j>64){j>>=1;i++;} multibar_thumb_set(MULTIBAR(width_bar),i,0); } multibar_thumb_set(MULTIBAR(depth_bar),declip_convergence*-.1,0); multibar_thumb_set(MULTIBAR(limit_bar),declip_iterations*.1,0); for(i=0;isubpanel_activebutton[i]), declip_active[i]); multibar_thumb_set(MULTIBAR(trigger_bars[i]),declip_chtrigger[i]*.0001,0); } } static void trigger_slider_change(GtkWidget *w,gpointer in){ char buffer[80]; clipslider *p=(clipslider *)in; float linear=multibar_get_value(MULTIBAR(p->slider),0); sprintf(buffer,"%1.2f",linear); readout_set(READOUT(p->readout),buffer); sprintf(buffer,"%3.0fdB",todB(linear)); readout_set(READOUT(p->readoutdB),buffer); declip_chtrigger[p->number]=rint(linear*10000.); } static void blocksize_slider_change(GtkWidget *w,gpointer in){ char buffer[80]; int choice=rint(multibar_get_value(MULTIBAR(w),0)); int blocksize=64<slider=slider; cs->readout=readout; cs->readoutdB=readoutdB; cs->number=i; feedback_bars[i]=bar; trigger_bars[i]=slider; gtk_widget_set_name(bar,"clipbar"); multibar_thumb_set(MULTIBAR(slider),1.,0); multibar_thumb_bounds(MULTIBAR(slider),.01,1.); switch(input_ch){ case 1: sprintf(buffer,"trigger level:"); break; case 2: switch(i){ case 0: sprintf(buffer,"left trigger level:"); break; case 1: sprintf(buffer,"right trigger level:"); break; } break; default: sprintf(buffer,"%d trigger level:",i+1); } label=gtk_label_new(buffer); gtk_misc_set_alignment(GTK_MISC(label),1,.5); gtk_table_attach(GTK_TABLE(channel_table),label,0,1,i,i+1,GTK_FILL,GTK_FILL,2,0); gtk_table_attach(GTK_TABLE(channel_table),readout,1,2,i,i+1,GTK_FILL,GTK_FILL,0,0); gtk_table_attach(GTK_TABLE(channel_table),readoutdB,2,3,i,i+1,GTK_FILL,GTK_FILL,0,0); gtk_table_attach(GTK_TABLE(channel_table),slider,3,4,i,i+1,GTK_FILL|GTK_EXPAND,GTK_FILL,0,0); gtk_table_attach(GTK_TABLE(channel_table),bar,4,5,i,i+1,GTK_FILL,GTK_FILL,0,0); multibar_callback(MULTIBAR(slider),trigger_slider_change,(gpointer)cs); trigger_slider_change(NULL,cs); active_callback(0,i); } gtk_container_add(GTK_CONTAINER(converge_frame),converge_box); gtk_container_add(GTK_CONTAINER(limit_frame),limit_box); gtk_box_pack_start(GTK_BOX(framebox),blocksize_frame,1,1,4); gtk_box_pack_start(GTK_BOX(framebox),framebox_right,1,1,4); gtk_box_pack_start(GTK_BOX(framebox_right),converge_frame,1,1,0); gtk_box_pack_start(GTK_BOX(framebox_right),limit_frame,1,1,0); gtk_box_pack_start(GTK_BOX(panel->subpanel_box),framebox,1,1,4); gtk_box_pack_start(GTK_BOX(panel->subpanel_box),channel_table,1,1,4); mainpanel_inbar=mp->inbar; subpanel_show_all_but_toplevel(panel); } void clippanel_feedback(int displayit){ int clip[input_ch],count[input_ch]; float peak[input_ch]; if(pull_declip_feedback(clip,peak,count)){ int i; for(i=0;i