FilterBankPluginUI::FilterBankPluginUI(QWidget *p_parent,FilterBankPlugin *p_filterbank) : SoundPluginUI(p_parent,p_filterbank) {
	
	CHBox *hb = generate_default_layout();
	
	CVBox *fb_vb = new CVBox(hb);
	
	new PixmapLabel( fb_vb, GET_QPIXMAP(THEME_FILTERBANK__TOP));
	
	CHBox *fb_hb = new CHBox(fb_vb);
	
	new PixmapLabel( fb_hb, GET_QPIXMAP(THEME_FILTERBANK__LEFT));
		
	CVBox *fb_ctrls = new CVBox(fb_hb);
	
	static const PixmapsList ctrl_separators[4]={THEME_FILTERBANK__CONTROLS_TOP,THEME_FILTERBANK__SEPARATOR_1,THEME_FILTERBANK__SEPARATOR_2,THEME_FILTERBANK__SEPARATOR_3};
	
	for (int i=0;i<4;i++) {
		String n_prefix=String("filter_")+String::num(i+1)+"_";
		new PixmapLabel( fb_ctrls, GET_QPIXMAP(ctrl_separators[i]) );		
		CHBox *ctrl_hb = new CHBox(fb_ctrls);
		PropertyEditor *combo = new PropertyEditCombo(ctrl_hb,GET_QPIXMAP( THEME_FILTERBANK__COMBO ) );
		combo->set_property( &p_filterbank->get_port_by_name( n_prefix+"mode" ));
		register_property_editor( combo );
		
		new PixmapLabel( ctrl_hb, GET_QPIXMAP( THEME_FILTERBANK__COMBO_STR_SEPARATOR ) );		
		
		PropertyEditor *str = new PropertyEditLabel(ctrl_hb,GET_QPIXMAP( THEME_FILTERBANK__STR_DISPLAY ) );
		str->set_property( &p_filterbank->get_port_by_name( n_prefix+"stages" ));
		register_property_editor( str );
		PropertyEditor *str_ud = new PropertyEditUpDown(ctrl_hb,PixmapUpDown::Skin( GET_QPIXMAP( THEME_FILTERBANK__STR_UPDOWN ) ) );
		str_ud->set_property( &p_filterbank->get_port_by_name( n_prefix+"stages" ));
		str_ud->add_to_group(str);
		register_property_editor( str_ud );
		
	}
	
	new PixmapLabel( fb_hb, GET_QPIXMAP(THEME_FILTERBANK__CONTROLS_DISPLAY_SEPARATOR));
	
	CVBox *fb_disp_vb = new CVBox(fb_hb);
	
	FilterBankEditor::Skin fbe_sk( GET_QPIXMAP(THEME_FILTERBANK__DISPLAY), QColor(210,220,240), 2 );
	
	FilterBankEditor *fbe = new FilterBankEditor( fb_disp_vb, 4, fbe_sk );
	
	for (int i=0;i<4;i++) {
		String n_prefix=String("filter_")+String::num(i+1)+"_";
		
		fbe->set_cutoff_property( i, &p_filterbank->get_port_by_name( n_prefix+"cutoff" ) );
		fbe->set_resonance_property( i, &p_filterbank->get_port_by_name( n_prefix+"resonance" ) );
		fbe->set_stages_property( i, &p_filterbank->get_port_by_name( n_prefix+"stages" ) );
		fbe->set_mode_property( i, &p_filterbank->get_port_by_name( n_prefix+"mode" ) );
	}
	
	fbe->set_cutoff_offset_property( &p_filterbank->get_port_by_name( "global_cutoff" ) );
	register_property_editor( fbe );
	new PixmapLabel( fb_disp_vb, GET_QPIXMAP(THEME_FILTERBANK__DISPLAY_OCTAVE_SEPARATOR));
	
	CHBox *octave_hb = new CHBox(fb_disp_vb);
	
	PixmapSlider::Skin sl_sk = PixmapSlider::Skin( GET_QPIXMAP(THEME_FILTERBANK__OCTAVE_SLIDER),GET_QPIXMAP(THEME_FILTERBANK__OCTAVE_SLIDER),GET_QPIXMAP(THEME_FILTERBANK__OCTAVE_SLIDER_GRABBER) );
	
	PropertyEditor *octave_sl = new PropertyEditSlider(octave_hb,sl_sk,PixmapSlider::TYPE_HORIZONTAL,0,0);
	octave_sl->set_property( &p_filterbank->get_port_by_name( "global_cutoff" ) );
	register_property_editor( octave_sl );
	
	new PixmapLabel( octave_hb, GET_QPIXMAP(THEME_FILTERBANK__OCTAVE_SEPARATOR));
	
	PropertyEditLabel *octave_label = new PropertyEditLabel(octave_hb,GET_QPIXMAP(THEME_FILTERBANK__OCTAVE_DISPLAY));
	octave_label->set_property( &p_filterbank->get_port_by_name( "global_cutoff" ) );
	register_property_editor( octave_label );
	octave_label->add_to_group(octave_sl);
	octave_label->set_suffix_visible( false );
	
	new PixmapLabel( fb_hb, GET_QPIXMAP(THEME_FILTERBANK__RIGHT));
	
	new PixmapLabel( fb_vb, GET_QPIXMAP(THEME_FILTERBANK__BOTTOM));
	
	
}