/* * * 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 "feedback.h" #include "freq.h" #include "eq.h" #include "config.h" typedef struct { GtkWidget *slider; GtkWidget *readout; struct eps *p; int number; } bar; typedef struct eps { subpanel_generic *panel; bar *bars; eq_settings *s; int av_callback_enter; } eq_panel_state; static eq_panel_state *master_panel; static eq_panel_state **channel_panel; static void eqpanel_state_to_config_helper(int bank,eq_settings *s,int A){ config_set_integer("eq_active",bank,A,0,0,0,s->panel_active); config_set_vector("eq_settings",bank,A,0,0,eq_freqs,s->settings); } void eqpanel_state_to_config(int bank){ int i; eqpanel_state_to_config_helper(bank,&eq_master_set,0); for(i=0;ipanel_active); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(p->panel->subpanel_activebutton[0]),s->panel_active); config_get_vector("eq_settings",bank,A,0,0,eq_freqs,s->settings); for(i=0;ibars[i].slider),s->settings[i]*.1,0); } void eqpanel_state_from_config(int bank){ int i; eqpanel_state_from_config_helper(bank,&eq_master_set,master_panel,0); for(i=0;ibars; int i; float acc=0; for(i=0;iav_callback_enter){ float av=multibar_get_value(MULTIBAR(p->bars[eq_freqs].slider),0); float actual=determine_average(p); int i; p->av_callback_enter=1; for(i=0;ibars[i].slider),0) + av - actual; multibar_thumb_set(MULTIBAR(p->bars[i].slider),val,0); } p->av_callback_enter=0; } } static void slider_change(GtkWidget *w,gpointer in){ char buffer[80]; bar *b=(bar *)in; float val=multibar_get_value(MULTIBAR(b->slider),0); sprintf(buffer,"%+3.0fdB",val); readout_set(READOUT(b->readout),buffer); eq_set(b->p->s,b->number,val); if(!b->p->av_callback_enter){ b->p->av_callback_enter=1; float actual=determine_average(b->p); multibar_thumb_set(MULTIBAR(b->p->bars[eq_freqs].slider),actual,0); b->p->av_callback_enter=0; } } static eq_panel_state *eqpanel_create_helper(postfish_mainpanel *mp, subpanel_generic *panel, eq_settings *es){ int i; char *labels[16]={"","110","100","90","80","70","60","50","40", "30","20","10","0","+10","+20","+30"}; char *labels2[16]={"","","","","","","60","50","40", "30","20","10","0","+10","+20","+30"}; float levels[16]={-120,-110,-100,-90,-80,-70,-60,-50,-40, -30,-20,-10,0,10,20,30}; GtkWidget *slidertable=gtk_table_new(eq_freqs+1,3,0); bar *bars=calloc(eq_freqs+1,sizeof(*bars)); eq_panel_state *p=calloc(1,sizeof(*p)); p->bars=bars; p->s=es; p->panel=panel; p->av_callback_enter=1; for(i=0;isubpanel_box),slidertable,1,1,4); subpanel_show_all_but_toplevel(panel); p->av_callback_enter=0; return p; } void eqpanel_create_master(postfish_mainpanel *mp, GtkWidget *windowbutton, GtkWidget *activebutton){ char *shortcut[]={" e "}; subpanel_generic *panel=subpanel_create(mp,windowbutton,&activebutton, &eq_master_set.panel_active, &eq_master_set.panel_visible, "_Equalizer (master)",shortcut, 0,1); master_panel=eqpanel_create_helper(mp,panel,&eq_master_set); } void eqpanel_create_channel(postfish_mainpanel *mp, GtkWidget **windowbutton, GtkWidget **activebutton){ int i; channel_panel=malloc(input_ch*sizeof(*channel_panel)); /* a panel for each channel */ for(i=0;ibars[i].slider),rmsfeed[i],peakfeed[i], OUTPUT_CHANNELS,(displayit && eq_master_set.panel_visible)); if(pull_eq_feedback_channel(peakfeed,rmsfeed)==1){ for(j=0;jbars[i].slider),rms,peak, input_ch,(displayit && eq_channel_set[j].panel_visible)); } } } } void eqpanel_reset(void){ int i,j; for(i=0;ibars[i].slider)); for(i=0;ibars[i].slider)); }