/* * Copyright (C) 2014 Alfons Wirtz * website www.freerouting.net * * 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 at <http://www.gnu.org/licenses/> * for more details. * * WindowNetDemonstration.java * * Created on 14. November 2006, 12:20 * */ package gui; import java.util.zip.ZipInputStream; /** * Window with a list for selecting router demonstrations in the net. * * @author Alfons Wirtz */ public class WindowNetDemonstrations extends WindowNetSamples { /** Creates a new instance of WindowNetDemonstration */ public WindowNetDemonstrations(java.util.Locale p_locale) { super(p_locale, "router_demonstrations", "replay_example", 7); } /** * To be edited when the demonstration examples change. * For every String in the second column a String has to be added to the resource file WindowNetSamples. */ protected void fill_list() { add("sample_45.dsn", "45_degree_logfile", AdditionalAction.READ_LOGFILE); add("int_ar.dsn", "drag_component_logfile", AdditionalAction.READ_LOGFILE); add("single_layer.dsn", "any_angle_logfile", AdditionalAction.READ_LOGFILE); add("hexapod_empty.dsn", "autorouter_example_1", AdditionalAction.AUTOROUTE); add("at14_empty.dsn", "autorouter_example_2", AdditionalAction.AUTOROUTE); add("sharp_empty.dsn", "autorouter_example_3", AdditionalAction.AUTOROUTE); } protected void button_pushed() { int index = list.getSelectedIndex(); if (index < 0 || index >= list_model.getSize()) { return; } ListElement selected_element = (ListElement) list_model.elementAt(index); String[] name_parts = selected_element.design_name.split("\\."); String archive_name = name_parts[0]; BoardFrame new_frame = open_design(archive_name, selected_element.design_name, this.locale); if (new_frame != null) { selected_element.additional_action.perform(new_frame, archive_name); } } /** * Adds an element to the list. */ private void add(String p_design_name, String p_message_name, AdditionalAction p_additional_action) { list_model.addElement(new ListElement(p_design_name, resources.getString(p_message_name), p_additional_action)); } /** * Replays a zipped logfile from an URL in the net. */ private static void read_zipped_logfile(BoardFrame p_board_frame, String p_archive_name, String p_logfile_name) { if (p_board_frame == null) { return; } ZipInputStream zip_input_stream = WindowNetSamples.open_zipped_file(p_archive_name, p_logfile_name); if (zip_input_stream == null) { return; } p_board_frame.read_logfile(zip_input_stream); } /** * Additional Acction to be performed after opening the board. */ private enum AdditionalAction { READ_LOGFILE { void perform(BoardFrame p_board_frame, String p_archive_name) { String logfile_archive_name = "route_" + p_archive_name; read_zipped_logfile(p_board_frame, logfile_archive_name, logfile_archive_name + ".log"); } }, AUTOROUTE { void perform(BoardFrame p_board_frame, String p_archive_name) { p_board_frame.board_panel.board_handling.start_batch_autorouter(); } }, NONE { void perform(BoardFrame p_board_frame, String p_archive_name) { } }; abstract void perform(BoardFrame p_board_frame, String p_archive_name); } /** * Structure of the elements in the list * For every instance in a String has to be added to the resource file WindowNetSamples fo the * String in the field message_name. */ private static class ListElement { ListElement(String p_design_name, String p_message_name, AdditionalAction p_additional_action) { design_name = p_design_name; message_name = p_message_name; additional_action = p_additional_action; } public String toString() { return message_name; } final String design_name; final String message_name; final AdditionalAction additional_action; } }