/******************************************************************************* * Copyright (c) 2011, 2014 Wind River Systems, Inc. and others. All rights reserved. * This program and the accompanying materials are made available under the terms * of the Eclipse Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Wind River Systems - initial API and implementation *******************************************************************************/ package org.eclipse.tcf.te.ui.trees; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.Assert; import org.eclipse.ui.IMemento; /** * The class to describe the tree viewer's action including the visiblity of the * tree columns and the enablement of the viewer filters. */ class TreeViewerState { // The action of the column's visibility. private List<ColumnState> columns; // The action of the filter's enablement. private List<FilterState> filters; /** * Create an instance. */ public TreeViewerState() { columns = Collections.synchronizedList(new ArrayList<ColumnState>()); filters = Collections.synchronizedList(new ArrayList<FilterState>()); } /** * Restore the viewer's action using the specified memento. * * @param aMemento The memento to restore the viewer's action. */ public void restoreState(IMemento aMemento) { IMemento[] mColumns = aMemento.getChildren("column"); //$NON-NLS-1$ if (mColumns != null && mColumns.length > 0) { for (IMemento mColumn : mColumns) { String columnId = mColumn.getString("id"); //$NON-NLS-1$ Assert.isNotNull(columnId); Boolean value = mColumn.getBoolean("visible"); //$NON-NLS-1$ boolean visible = value != null && value.booleanValue(); Integer integer = mColumn.getInteger("width"); //$NON-NLS-1$ int width = integer.intValue(); integer = mColumn.getInteger("order"); //$NON-NLS-1$ int order = integer.intValue(); ColumnState column = new ColumnState(); column.setColumnId(columnId); column.setVisible(visible); column.setWidth(width); column.setOrder(order); columns.add(column); } } IMemento[] mFilters = aMemento.getChildren("filter"); //$NON-NLS-1$ if (mFilters != null && mFilters.length > 0) { for (IMemento mFilter : mFilters) { String filterId = mFilter.getString("id"); //$NON-NLS-1$ Assert.isNotNull(filterId); Boolean value = mFilter.getBoolean("enabled"); //$NON-NLS-1$ boolean enabled = value != null && value.booleanValue(); FilterState filter = new FilterState(); filter.setFilterId(filterId); filter.setEnabled(enabled); filters.add(filter); } } } /** * Save the viewer's action to the specified memento. * * @param aMemento The memento to save the viewer's action to. */ public void saveState(IMemento aMemento) { if (columns != null) { for (ColumnState column : columns) { String columnId = column.getColumnId(); IMemento mColumn = aMemento.createChild("column"); //$NON-NLS-1$ mColumn.putString("id", columnId); //$NON-NLS-1$ boolean visible = column.isVisible(); mColumn.putBoolean("visible", visible); //$NON-NLS-1$ int width = column.getWidth(); mColumn.putInteger("width", width); //$NON-NLS-1$ int order = column.getOrder(); mColumn.putInteger("order", order); //$NON-NLS-1$ } } if (filters != null) { for (FilterState filter : filters) { IMemento mFilter = aMemento.createChild("filter"); //$NON-NLS-1$ mFilter.putString("id", filter.getFilterId()); //$NON-NLS-1$ boolean enabled = filter.isEnabled(); mFilter.putBoolean("enabled", enabled); //$NON-NLS-1$ } } } /** * Add a column action based on the specified column descriptor. * * @param column The column's descriptor. */ public void addColumn(ColumnDescriptor column) { ColumnState state = new ColumnState(); state.setColumnId(column.getId()); state.setVisible(column.isVisible()); state.setWidth(column.getWidth()); state.setOrder(column.getOrder()); columns.add(state); } /** * Add a filter action based on the specified filter descriptor. * * @param filter The filter's action. */ public void addFilter(FilterDescriptor filter) { FilterState state = new FilterState(); state.setFilterId(filter.getId()); state.setEnabled(filter.isEnabled()); filters.add(state); } /** * Get the column's action in a list. * * @return The column's action list. */ public List<ColumnState> getColumnStates() { return columns; } /** * Update the column descriptors using the current column states. * * @param columnDescriptors The column descriptors to be updated. */ public void updateColumnDescriptor(ColumnDescriptor[] columnDescriptors) { if (columnDescriptors != null) { for(int i=0;i<columns.size();i++) { ColumnDescriptor columnDescriptor = columnDescriptors[i]; ColumnState columnState = columns.get(i); columnDescriptor.setVisible(columnState.isVisible()); columnDescriptor.setWidth(columnState.getWidth()); columnDescriptor.setOrder(columnState.getOrder()); } } } /** * Update the filter descriptors using the current filter states. * * @param filterDescriptors The filter descriptors to be updated. */ public void updateFilterDescriptor(FilterDescriptor[] filterDescriptors) { if (filterDescriptors != null) { for (int i=0;i<filters.size();i++) { FilterDescriptor filterDescriptor = filterDescriptors[i]; FilterState filterState = filters.get(i); filterDescriptor.setEnabled(filterState.isEnabled()); } } } /** * Update the current column states using the specified column descriptors. * * @param columnDescriptors The column descriptors which are used to update the column states. */ public void updateColumnState(ColumnDescriptor[] columnDescriptors) { if(columnDescriptors != null) { for(int i=0;i<columns.size();i++) { ColumnDescriptor columnDescriptor = columnDescriptors[i]; ColumnState columnState = columns.get(i); columnState.setVisible(columnDescriptor.isVisible()); columnState.setWidth(columnDescriptor.getWidth()); columnState.setOrder(columnDescriptor.getOrder()); } } } /** * Update the current filter states using the specified filter descriptors. * * @param filterDescriptors The filter descriptors which are used to update the filter states. */ public void updateFilterState(FilterDescriptor[] filterDescriptors) { if (filterDescriptors != null) { for(int i=0;i<filters.size();i++) { FilterDescriptor filterDescriptor = filterDescriptors[i]; FilterState filterState = filters.get(i); filterState.setEnabled(filterDescriptor.isEnabled()); } } } }