void PatternEditorTop::set_in_window() {

	popup = new Window(get_window(),Window::MODE_POPUP);
	VBoxContainer *vbc = new VBoxContainer;
	popup->set_root_frame( vbc );

	MarginGroup *mg;

	mg=vbc->add( new MarginGroup("Initial Volume"), 0 );
	HBoxContainer *vol_hb = mg->add( new HBoxContainer, 0 );
	mute_button=mg->add( new CheckButton("Mute"),0 );
	

	default_vol_slider=vol_hb->add( new HSlider, 1 );
	vol_hb->add( new ValueLabel, 0)->set_range( default_vol_slider->get_range() );
	
	mg=vbc->add( new MarginGroup("Initial Pan"), 0 );
	HBoxContainer *pan_hb = mg->add( new HBoxContainer, 0 );
	surround_button=mg->add( new CheckButton("Surround"),0 );
	
	default_pan_slider=pan_hb->add( new HSlider, 1 );
	pan_hb->add( new ValueLabel, 0)->set_range( default_pan_slider->get_range() );

	//vbc->set_stylebox_override( stylebox( SB_POPUP_BG ) );

	mute_button->toggled_signal.connect( this, &PatternEditorTop::track_mute_toggled );
	surround_button->toggled_signal.connect( this, &PatternEditorTop::track_surround_toggled );
	default_pan_slider->get_range()->set_min(-32);
	default_pan_slider->get_range()->set_max(32);
	default_pan_slider->get_range()->value_changed_signal.connect( this, &PatternEditorTop::track_pan_changed );
	default_vol_slider->get_range()->value_changed_signal.connect( this, 	&PatternEditorTop::track_volume_changed );
	default_vol_slider->get_range()->set_max(64);

	mg=vbc->add( new MarginGroup("Initial Chorus"), 0 );
	HBoxContainer *chorus_hb = mg->add( new HBoxContainer, 0 );
	default_chorus_slider=chorus_hb->add( new HSlider, 1 );
	chorus_hb->add( new ValueLabel, 0)->set_range( default_chorus_slider->get_range() );
	default_chorus_slider->get_range()->value_changed_signal.connect( this, 	&PatternEditorTop::track_chorus_changed );
	default_chorus_slider->get_range()->set_max( Song::CHANNEL_MAX_CHORUS );
	
	mg=vbc->add( new MarginGroup("Initial Reverb"), 0 );
	HBoxContainer *reverb_hb = mg->add( new HBoxContainer, 0 );
	default_reverb_slider=reverb_hb->add( new HSlider, 1 );
	reverb_hb->add( new ValueLabel, 0)->set_range( default_reverb_slider->get_range() );
	default_reverb_slider->get_range()->set_max( Song::CHANNEL_MAX_REVERB );
	default_reverb_slider->get_range()->value_changed_signal.connect( this, 	&PatternEditorTop::track_reverb_changed );
	
	

}
PatternTranspose::PatternTranspose(Window *p_parent,Editor *p_editor) : Window(p_parent,Window::MODE_POPUP,Window::SIZE_CENTER) {

	editor=p_editor;
	
	VBoxContainer *vb = new VBoxContainer;
	set_root_frame( vb );
	
	MarginGroup *mg=vb->add(new MarginGroup("Note Relationship"));
	
	for (int i=0;i<12;i++) {
		
		static const char* notes[12]={"C","C#","D","D#","E","F","F#","G","G#","A","A#","B"};
		
		HBoxContainer *hb=mg->add(new HBoxContainer);
		
		LineEdit *le=hb->add(new LineEdit,1);
		le->set_text(notes[i]);
		le->set_editable( false );
		
		hb->add(new HSeparator,2);
		
		trans[i]=hb->add(new ComboBox,2);
		
		for (int j=0;j<12;j++) {
			
			trans[i]->add_string(notes[j]);
		}
		
		trans[i]->select(i);
	}
	
	mg=vb->add(new MarginGroup("Actions"));
	
	HBoxContainer *hb = mg->add(new CenterContainer)->set(new HBoxContainer);
		
	hb->add(new Button("Clear"))->pressed_signal.connect(this,&PatternTranspose::reset);
	hb->add(new VSeparator);
	hb->add(new Button("Lower"))->pressed_signal.connect(this,&PatternTranspose::lower);
	hb->add(new Button("Raise"))->pressed_signal.connect(this,&PatternTranspose::raise);
	hb->add(new VSeparator);
	apply_b=hb->add(new 	Button("Apply"));
	apply_b->pressed_signal.connect(this,&PatternTranspose::apply);

	
	
}
InterfaceMini::InterfaceMini(Window *p_window,Mixer *p_mixer,ConfigApi *p_config) : tracker(p_mixer) {

	config=p_config;

	window=p_window;
	//window->set_large_dialogs(true);
	
	MiniTheme::create(window->get_skin(),window->get_painter());
	
	VBoxContainer *vbc = new VBoxContainer;

	window->set_root_frame(vbc);
	window->key_unhandled_signal.connect( this, &InterfaceMini::main_key );
	vbc->set_separation( 0 );
	
	top=vbc->add( new VBoxContainer);
	
	top_bar=top->add( new HBoxContainer, 0 );

	
	file = top_bar->add( new MenuBox("Song.."), 0);
	file->add_item("New");
	file->add_item("Open..");
	file->add_item("Save");
	file->add_item("Save As..");
	file->add_separator();
	file->add_item("Export WAV");
	file->add_separator();
	file->add_item("Clean Up");
	file->add_separator();
	file->add_item("Quit");
	file->item_selected_signal.connect(this, &InterfaceMini::song_menu_selected );
	file->set_focus_mode( FOCUS_NONE );
	top_bar->add( new VSeparator,0);
	
	/* Tab Bar */
	
	tabs=top_bar->add( new TabBar, 0 );
	tabs->add_tab("Pat");
	tabs->add_tab("Smp");
	tabs->add_tab("Ins");
	tabs->add_tab("Var");
	tabs->set_focus_mode( FOCUS_NONE );
	tabs->set_tab_visible( 2, false );
	

//	top_bar->add( new Widget,1);
	
	top_bar->add( new VSeparator,0);
	settings=top_bar->add(new MenuBox("Setup"),0);
	settings->add_item("Audio Driver");
	settings->add_item("Software Mixer");
	settings->add_item("Keyboard");
	settings->add_item("InterfaceMini");
	settings->add_item("Default Paths");
	settings->item_selected_signal.connect( this, &InterfaceMini::config_menu_selected );
	settings->set_focus_mode( FOCUS_NONE );
	top_bar->add( new VSeparator );
	help=top_bar->add(new MenuBox("Help"),0);
	help->add_item("Command List");
	help->add_item("Skins");
	help->add_item("About");
	help->set_focus_mode( FOCUS_NONE );
	help->item_selected_signal.connect( this, &InterfaceMini::help_menu_selected );
	
	/*
	HBoxContainer *status_hb = top->add( new HBoxContainer, 0);
	status_label = status_hb->add(new Label("Stopped"),1);
	status_hb->add( new Label("Memory:  "), 0);
	memory_label=status_hb->add( new Label("0kb"), 0); */

	
	top->set_stylebox_override( window->get_skin()->get_stylebox(SB_TOP_STACK_FRAME) );
	
	
	main_stack=vbc->add( new StackContainer,1);
	
	
	tabs->tab_changed_signal.connect( main_stack, &StackContainer::raise );
	tabs->tab_changed_signal.connect( this, &InterfaceMini::screen_changed_to );
	tabs->pre_tab_changed_signal.connect( this, &InterfaceMini::pre_screen_changed_from );
	
	pattern_screen=main_stack->add( new PatternScreen(&tracker,true) );
	
	sample_screen=main_stack->add( new SampleScreen(&tracker,true) );
	
	instrument_screen = main_stack->add(new InstrumentScreen(&tracker,true));
	instrument_screen->sample_list_changed_signal.connect( sample_screen, &SampleScreen::update_components );
	
	
	variables_screen = main_stack->add(new VariablesScreen(&tracker,true));
	variables_screen->song_name_changed_signal.connect(this, &InterfaceMini::update_title_bar);
	
	variables_screen->instrument_mode_changed.connect( this, &InterfaceMini::check_instrument_visibility );
	
	set_default_keybinds();
	
	main_stack->set_stylebox_override(window->get_skin()->get_stylebox(SB_MAIN_STACK_FRAME));

/*	default_octave->get_range()->set( (int)tracker.editor->get_default_octave() ); */
	
	for (int i=0;i<SCREEN_MAX;i++)
		old_focus[i]=0;		
	
	
	file_dialog = new FileDialog(window);
	file_dialog->file_activated_signal.connect( this, &InterfaceMini::song_file_callback );
	
	/* New Song Dialog */
	
	new_song.window=new Window(window,Window::MODE_POPUP,Window::SIZE_CENTER);
	
	WindowBox *new_song_vb = new WindowBox("New Song");
	new_song.window->set_root_frame( new_song_vb );
	MarginGroup *new_song_mg = new_song_vb->add(new MarginGroup("New Song"),0);
	
	new_song.patterns = new_song_vb->add( new CheckButton("Keep Patterns"),0);
	new_song.instruments = new_song_vb->add( new CheckButton("Keep Instruments"),0);
	new_song.samples = new_song_vb->add( new CheckButton("Keep Samples"),0);
	new_song.variables = new_song_vb->add( new CheckButton("Keep Variables"),0);
	
	
	new_song_vb->add( new CenterContainer, 0 )->set( new Button("Proceed"))->pressed_signal.connect(this,&InterfaceMini::new_song_accept);
	
	/* CleanUp Dialog */
	
	cleanup.window=new Window(window,Window::MODE_POPUP,Window::SIZE_CENTER);
	
	WindowBox *cleanup_vb = new WindowBox("Clean Up");
	cleanup.window->set_root_frame( cleanup_vb );
	
	cleanup.patterns = cleanup_vb->add( new CheckButton("Unused Patterns"),0);
	cleanup.instruments = cleanup_vb->add( new CheckButton("Unused Instruments"),0);
	cleanup.samples = cleanup_vb->add( new CheckButton("Unused Samples"),0);
	cleanup.orders = cleanup_vb->add( new CheckButton("Unused Orders"),0);
	cleanup_vb->add( new HSeparator,0);
	cleanup.def_vol = cleanup_vb->add( new CheckButton("Reset Default Volumes"),0);
	cleanup.def_pan = cleanup_vb->add( new CheckButton("Reset Default Pannings"),0);
	
	cleanup_vb->add( new CenterContainer, 0 )->set( new Button("Remove"))->pressed_signal.connect(this,&InterfaceMini::cleanup_accept);
	
	
	/* Quit Menu */
	quit=false;
	
	confirm_quit_window=new Window(window,Window::MODE_POPUP,Window::SIZE_CENTER);
	WindowBox *quit_vb = new WindowBox("Quit");
	
	confirm_quit_window->set_root_frame( quit_vb );
	quit_vb->add( new Label("Really Quit?"),0);
	quit_vb->add( new CenterContainer, 0)->set( new Button("Exit") )->pressed_signal.connect( this, &InterfaceMini::quit_accept );
	
	sound_driver_dialog = new SoundDriverDialog(window,config);	
	mixer_dialog = new MixerDialog(window,config);
	kb_dialog = new KeyboardDialog(window,config);
	ui_dialog = new InterfaceSettingsDialog(window,config);
	ui_dialog->repaint_interval_changed_signal.connect(this, &InterfaceMini::ui_repaint_interval_changed );
	uihelp_dialog = new InterfaceHelp(window,HELP_PATTERN_KEYS);
	skins_dialog = new InterfaceHelp(window,HELP_SKINS);
	wav_saver = new WavSaverDialog(window,&tracker);
	path_dialog = new PathsDialog(window,&paths,config);
	path_dialog->paths_changed_signal.connect( this, &InterfaceMini::paths_changed );
	
	
	window->get_timer()->create_timer( Method(this, &InterfaceMini::interface_update_timer_callback ),60 );
	pattern_screen->get_pattern_editor()->instrument_changed_signal.connect(this, &InterfaceMini::instrument_mask_changed );
	sample_screen->instrument_changed_signal.connect(this, &InterfaceMini::instrument_mask_changed );
	
	error_msg = new MessageBox(window);
	about_msg = new MessageBox(window);
	
	window->skin_changed_signal.connect(this,&InterfaceMini::skin_changed);
	update_title_bar();
	setup_logos();
	
	sample_screen->instrument_list_changed_signal.connect( instrument_screen, &InstrumentScreen::update_components );
	status_override_time=0;

}