/* GanttProject is an opensource project management tool. License: GPL3 Copyright (C) 2011 Dmitry Barashev This program 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 3 of the License, or (at your option) any later version. This program 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 this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package net.sourceforge.ganttproject.gui.options; import java.awt.Container; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sourceforge.ganttproject.IGanttProject; import net.sourceforge.ganttproject.gui.AbstractPagesDialog; import net.sourceforge.ganttproject.gui.UIFacade; import net.sourceforge.ganttproject.gui.options.model.OptionPageProvider; import net.sourceforge.ganttproject.language.GanttLanguage; import net.sourceforge.ganttproject.plugins.PluginManager; public class SettingsDialog2 extends AbstractPagesDialog { private static List<OptionPageProvider> ourProviders; private final List<OptionPageProvider> myProviders = new ArrayList<OptionPageProvider>(); static { ourProviders = PluginManager.getExtensions("net.sourceforge.ganttproject.OptionPageProvider", OptionPageProvider.class); } public SettingsDialog2(IGanttProject project, UIFacade uifacade, String pageOrderKey) { super("settings.app", uifacade, getPages(pageOrderKey, project, uifacade)); for (OptionPageProvider p : ourProviders) { if (isPageVisible(p.getPageID())) { p.init(project, uifacade); myProviders.add(p); } } } @Override protected void onOk() { for (OptionPageProvider p : myProviders) { p.commit(); } } private static List<ListItem> getPages(String pageOrderKey, IGanttProject project, UIFacade uiFacade) { return getListItems(ourProviders, pageOrderKey, project, uiFacade); } private static List<ListItem> getListItems(List<OptionPageProvider> providers, String pageOrderKey, IGanttProject project, UIFacade uiFacade) { Map<String, OptionPageProvider> pageId_provider = new HashMap<String, OptionPageProvider>(); for (OptionPageProvider p : providers) { pageId_provider.put(p.getPageID(), p); } List<ListItem> items = new ArrayList<ListItem>(); String[] listConfig = GanttLanguage.getInstance().getText(pageOrderKey).split(","); for (String pageName : listConfig) { ListItem li; if (pageName.startsWith("pageGroup.")) { li = new ListItem(true, pageName, GanttLanguage.getInstance().correctLabel( GanttLanguage.getInstance().getText(pageName)), null); } else { OptionPageProvider p = pageId_provider.get(pageName); assert p != null : "OptionPageProvider with pageID=" + pageName + " not found"; li = new ListItem(false, p.getPageID(), p.toString(), (Container) new OptionPageProviderPanel(p, project, uiFacade).getComponent()); } items.add(li); } return items; } }