package com.frinika.sequencer.gui.partview;
import java.awt.BorderLayout;
import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import com.frinika.project.gui.ProjectFrame;
import com.frinika.sequencer.gui.selection.SelectionContainer;
import com.frinika.sequencer.gui.selection.SelectionListener;
import com.frinika.sequencer.model.Lane;
public class VoicePartViewSplitPane extends JPanel implements
SelectionListener<Lane> {
/**
*
*/
private static final long serialVersionUID = 1L;
LaneView laneView;
PartViewEditor partViewEditor;
ProjectFrame project;
JSplitPane splitPane=new JSplitPane();
LaneView nullView=new LaneView(null);
boolean showVoiceView=true;
public JComponent getLaneView()
{
return this;
}
public JComponent getPartViewEditor()
{
return partViewEditor;
}
boolean dockmode;
public VoicePartViewSplitPane(ProjectFrame project, boolean dockmode) {
this.project=project;
this.dockmode = dockmode;
setLayout(new BorderLayout());
partViewEditor = new PartViewEditor(project);
Lane lane=project.getProjectContainer().getProjectLane();
laneView = new LaneView(lane);
laneView.setEnabled(false);
if(dockmode)
{
add(laneView);
}
else
{
add(splitPane,BorderLayout.CENTER);
splitPane.add(partViewEditor,JSplitPane.RIGHT);
splitPane.setResizeWeight(0.0);
splitPane.add(laneView, JSplitPane.LEFT);
}
project.getProjectContainer().getLaneSelection().addSelectionListener(this);
// toggleVoiceView();
}
public void toggleVoiceView() {
if(dockmode) return;
showVoiceView = !showVoiceView;
if (showVoiceView ) {
remove(partViewEditor);
add(splitPane,BorderLayout.CENTER);
splitPane.add(partViewEditor,JSplitPane.RIGHT);
} else {
splitPane.remove(partViewEditor);
remove(splitPane);
add(partViewEditor,BorderLayout.CENTER);
}
validate();
}
void dispose() {
project.getProjectContainer().getLaneSelection().removeSelectionListener(this);
}
public void selectionChanged(SelectionContainer<? extends Lane> src) {
Lane lane = src.getFocus();
if (lane == null) return;
LaneHeaderItem header = null;
for (Component c : partViewEditor.laneHeaderPanel.getComponents()) {
if (c instanceof LaneHeaderItem) {
LaneHeaderItem h = (LaneHeaderItem) c;
Lane il = h.lane;
if (il == lane ) {
header = h;
break;
}
}
}
LaneView newVoiceView = nullView;
if (header != null) newVoiceView=header.voiceView;
if (laneView != newVoiceView) {
if(dockmode)
{
// PJL defensive programming to get rounf null pointers TODO
if (laneView !=null) remove(laneView);
laneView = newVoiceView;
if (laneView != null) {
add(laneView);
laneView.setEnabled(true);
}
validate();
repaint();
partViewEditor.repaint();
}
else
{
remove(laneView);
splitPane.setTopComponent(laneView = newVoiceView); //, BorderLayout.WEST);
laneView.setEnabled(true);
repaint();
}
}
}
public PartView getPartview() {
return partViewEditor.getPartView();
}
}