/*
* 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.
*
* SnapShot.java
*
* Created on 8. November 2004, 08:01
*/
package interactive;
/**
* Snapshot of the client situation in an interactive session.
*
* @author Alfons Wirtz
*/
public class SnapShot implements java.io.Serializable
{
/**
* Returns a new snapshot or null, if the current interactive state
* is not suitable to generate a snapshot.
*/
public static SnapShot get_instance(String p_name, BoardHandling p_board_handling)
{
InteractiveState interactive_state = p_board_handling.interactive_state;
if (!(interactive_state instanceof MenuState))
{
return null;
}
return new SnapShot(p_name, p_board_handling);
}
/** Creates a SnapShot of the display region and the interactive settings */
private SnapShot(String p_name, BoardHandling p_board_handling)
{
this.name = p_name;
this.settings = new Settings(p_board_handling.settings);
this.interactive_state_no = get_no(p_board_handling.interactive_state);
this.graphics_context = new boardgraphics.GraphicsContext(p_board_handling.graphics_context);
this.viewport_position = new java.awt.Point(p_board_handling.get_panel().get_viewport_position());
this.subwindow_filters = p_board_handling.get_panel().board_frame.get_snapshot_subwindow_selections();
}
public String toString()
{
return this.name;
}
public java.awt.Point copy_viewport_position()
{
if (this.viewport_position == null)
{
return null;
}
return new java.awt.Point(this.viewport_position);
}
/**
* Goes to this shnapshot in interactive board etiting.
*/
public void go_to(interactive.BoardHandling p_board_handling)
{
interactive.SnapShot.Attributes snapshot_attributes = this.settings.snapshot_attributes;
if (snapshot_attributes.object_visibility)
{
p_board_handling.graphics_context.color_intensity_table =
new boardgraphics.ColorIntensityTable(this.graphics_context.color_intensity_table);
}
if (snapshot_attributes.layer_visibility)
{
p_board_handling.graphics_context.set_layer_visibility_arr(this.graphics_context.copy_layer_visibility_arr());
}
if (snapshot_attributes.interactive_state)
{
p_board_handling.set_interactive_state(this.get_interactive_state(p_board_handling, p_board_handling.logfile));
}
if (snapshot_attributes.selection_layers)
{
p_board_handling.settings.select_on_all_visible_layers = this.settings.select_on_all_visible_layers;
}
if (snapshot_attributes.selectable_items)
{
p_board_handling.settings.item_selection_filter = new board.ItemSelectionFilter(this.settings.item_selection_filter);
}
if (snapshot_attributes.current_layer)
{
p_board_handling.settings.layer = this.settings.layer;
}
if (snapshot_attributes.rule_selection)
{
p_board_handling.settings.manual_rule_selection = this.settings.manual_rule_selection;
}
if (snapshot_attributes.manual_rule_settings)
{
p_board_handling.settings.manual_trace_clearance_class = this.settings.manual_trace_clearance_class;
p_board_handling.settings.manual_via_rule_index = this.settings.manual_via_rule_index;
System.arraycopy(this.settings.manual_trace_half_width_arr, 0,
p_board_handling.settings.manual_trace_half_width_arr, 0,
p_board_handling.settings.manual_trace_half_width_arr.length);
}
if (snapshot_attributes.push_and_shove_enabled)
{
p_board_handling.settings.push_enabled = this.settings.push_enabled;
}
if (snapshot_attributes.drag_components_enabled)
{
p_board_handling.settings.drag_components_enabled = this.settings.drag_components_enabled;
}
if (snapshot_attributes.pull_tight_region)
{
p_board_handling.settings.trace_pull_tight_region_width = this.settings.trace_pull_tight_region_width;
}
if (snapshot_attributes.component_grid)
{
p_board_handling.settings.horizontal_component_grid = this.settings.horizontal_component_grid;
p_board_handling.settings.vertical_component_grid = this.settings.vertical_component_grid;
}
if (snapshot_attributes.info_list_selections)
{
p_board_handling.get_panel().board_frame.set_snapshot_subwindow_selections(this.subwindow_filters);
}
}
/**
* Returns a new InterativeState from the data of this instance.
*/
public InteractiveState get_interactive_state(BoardHandling p_board_handling, Logfile p_logfile)
{
InteractiveState result;
if (this.interactive_state_no == 1)
{
result = RouteMenuState.get_instance(p_board_handling, p_logfile);
}
else if (this.interactive_state_no == 2)
{
result = DragMenuState.get_instance(p_board_handling, p_logfile);
}
else
{
result = SelectMenuState.get_instance(p_board_handling, p_logfile);
}
return result;
}
/**
* Create a number for writing an interactive state to disk.
* Only MenuStates are saved. The default is SelectState.
*/
private static int get_no(InteractiveState p_interactive_state)
{
int result;
if (p_interactive_state instanceof RouteMenuState)
{
result = 1;
}
else if (p_interactive_state instanceof DragMenuState)
{
result = 2;
}
else
{
result = 0;
}
return result;
}
private final String name;
public final Settings settings;
private final int interactive_state_no;
public final boardgraphics.GraphicsContext graphics_context;
private final java.awt.Point viewport_position;
public final gui.BoardFrame.SubwindowSelections subwindow_filters;
/**
* Defines the data of the snapshot selected for restoring.
*/
public static class Attributes implements java.io.Serializable
{
Attributes()
{
object_colors = true;
object_visibility = true;
layer_visibility = true;
display_region = true;
interactive_state = true;
selection_layers = true;
selectable_items = true;
current_layer = true;
rule_selection = true;
manual_rule_settings = true;
push_and_shove_enabled = true;
drag_components_enabled = true;
pull_tight_region = true;
component_grid = true;
info_list_selections = true;
}
/** Copy constructor */
Attributes(Attributes p_attributes)
{
object_colors = p_attributes.object_colors;
object_visibility = p_attributes.object_visibility;
layer_visibility = p_attributes.layer_visibility;
display_region = p_attributes.display_region;
interactive_state = p_attributes.interactive_state;
selection_layers = p_attributes.selection_layers;
selectable_items = p_attributes.selectable_items;
current_layer = p_attributes.current_layer;
rule_selection = p_attributes.rule_selection;
manual_rule_settings = p_attributes.manual_rule_settings;
push_and_shove_enabled = p_attributes.push_and_shove_enabled;
drag_components_enabled = p_attributes.drag_components_enabled;
pull_tight_region = p_attributes.pull_tight_region;
component_grid = p_attributes.component_grid;
info_list_selections = p_attributes.info_list_selections;
}
public boolean object_colors;
public boolean object_visibility;
public boolean layer_visibility;
public boolean display_region;
public boolean interactive_state;
public boolean selection_layers;
public boolean selectable_items;
public boolean current_layer;
public boolean rule_selection;
public boolean manual_rule_settings;
public boolean push_and_shove_enabled;
public boolean drag_components_enabled;
public boolean pull_tight_region;
public boolean component_grid;
public boolean info_list_selections;
}
}