package org.limewire.ui.swing.options; import java.util.ArrayList; import java.util.List; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import net.miginfocom.swing.MigLayout; import org.limewire.ui.swing.util.I18n; import com.google.inject.Inject; import com.google.inject.Provider; /** * Advanced Option View. */ public class AdvancedOptionPanel extends OptionPanel { private OptionPanel[] list = new OptionPanel[4]; private List<Provider<? extends OptionPanel>> providerList = new ArrayList<Provider<? extends OptionPanel>>(4); private final JTabbedPane tabbedPane; @Inject public AdvancedOptionPanel(Provider<FilesOptionPanel> filesOptionPanel, Provider<ConnectionsOptionPanel> connectionsOptionPanel, Provider<SystemOptionPanel> systemOptionPanel, Provider<ReallyAdvancedOptionPanel> reallyAdvancedOptionPanel) { providerList.add(filesOptionPanel); providerList.add(connectionsOptionPanel); providerList.add(systemOptionPanel); providerList.add(reallyAdvancedOptionPanel); setLayout(new MigLayout("insets 12 12 8 12, fill")); tabbedPane = new JTabbedPane(); tabbedPane.addTab(I18n.tr("Files"), new JPanel()); tabbedPane.addTab(I18n.tr("Transfers"), new JPanel()); tabbedPane.addTab(I18n.tr("System"), new JPanel()); tabbedPane.addTab(I18n.tr("Super Really Advanced"), new JPanel()); add(tabbedPane, "grow"); } @Inject void register() { tabbedPane.addChangeListener(new ChangeListener(){ @Override public void stateChanged(ChangeEvent e) { createTab(tabbedPane.getSelectedIndex(), true); } }); } @Override boolean applyOptions() { boolean restartRequired = false; for(OptionPanel panel : list) { if(panel == null) continue; restartRequired |= panel.applyOptions(); } return restartRequired; } @Override boolean hasChanged() { for(OptionPanel panel : list) { if(panel == null) continue; if(panel.hasChanged()) return true; } return false; } @Override public void initOptions() { createTab(0, false); for(OptionPanel optionPanel : list) { if(optionPanel != null) { optionPanel.initOptions(); } } } private void createTab(int index, boolean init) { if(list[index] == null) { list[index] = providerList.get(index).get(); tabbedPane.setComponentAt(index, list[index]); if (init) { list[index].initOptions(); } } } }