Gridarta Editor
DefaultFilterControl.java
Go to the documentation of this file.
1 /*
2  * Gridarta MMORPG map editor for Crossfire, Daimonin and similar games.
3  * Copyright (C) 2000-2015 The Gridarta Developers.
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 
20 package net.sf.gridarta.gui.filter;
21 
22 import java.util.Collection;
23 import java.util.concurrent.CopyOnWriteArrayList;
24 import javax.swing.JMenu;
25 import javax.swing.JMenuItem;
40 import net.sf.japi.swing.action.ActionBuilder;
41 import net.sf.japi.swing.action.ActionBuilderFactory;
42 import org.apache.log4j.Category;
43 import org.apache.log4j.Logger;
44 import org.jetbrains.annotations.NotNull;
45 import org.jetbrains.annotations.Nullable;
46 
63 //TODO allow implementation of own filter
64 public class DefaultFilterControl<G extends GameObject<G, A, R>, A extends MapArchObject<A>, R extends Archetype<G, A, R>> implements FilterControl<G, A, R> {
65 
69  @NotNull
70  private static final Category LOG = Logger.getLogger(DefaultFilterControl.class);
71 
75  @NotNull
76  private static final ActionBuilder ACTION_BUILDER = ActionBuilderFactory.getInstance().getActionBuilder("net.sf.gridarta");
77 
78  @NotNull
79  private final NamedFilter filterList;
80 
81  @NotNull
83 
87  @NotNull
89 
90  @NotNull
91  private final NamedFilterConfig @NotNull [] highlightConfig;
92 
96  @NotNull
97  private final Collection<FilterConfigListener> configListeners = new CopyOnWriteArrayList<>();
98 
99  @NotNull
101 
102  @Override
103  public void configChanged(@NotNull final FilterConfigChangeType filterConfigChangeType, @NotNull final FilterConfig<?, ?> filterConfig) {
104  @Nullable final EditorSettingsKey key;
105  @Nullable final FilterConfig<?, ?> valueFilterConfig;
106  if (isFilterConfig(filterConfig, filterOutConfig)) {
108  valueFilterConfig = filterOutConfig;
109  } else if (isFilterConfig(filterConfig, highlightConfig[0])) {
111  valueFilterConfig = highlightConfig[0];
112  } else if (isFilterConfig(filterConfig, highlightConfig[1])) {
114  valueFilterConfig = highlightConfig[1];
115  } else if (isFilterConfig(filterConfig, highlightConfig[2])) {
117  valueFilterConfig = highlightConfig[2];
118  } else {
119  LOG.warn("filter config " + filterConfig + " not found");
120  key = null;
121  valueFilterConfig = null;
122  }
123  if (key != null && valueFilterConfig != null) {
124  editorSettings.setKey(key, new FilterConfigEncoder().encode(valueFilterConfig));
125  }
126  for (final FilterConfigListener listener : configListeners) {
127  listener.configChanged(filterConfigChangeType, filterConfig);
128  }
129  }
130 
131  };
132 
140  this.filterList = filterList;
142  this.editorSettings = editorSettings;
144  for (int i = 0; i < MAX_HIGHLIGHT; i++) {
146  }
148  for (int i = 0; i < MAX_HIGHLIGHT; i++) {
150  }
151 
152  final FilterConfigDecoder decoder = new FilterConfigDecoder();
157  }
158 
159  @Override
160  public void addConfigListener(@NotNull final FilterConfigListener listener) {
161  configListeners.add(listener);
162  }
163 
164  @Override
165  public void removeConfigListener(@NotNull final FilterConfigListener listener) {
166  configListeners.remove(listener);
167  }
168 
169  @Override
170  public void createMenuEntries(@NotNull final JMenu menu) {
171  final JMenuItem menuItem = new MenuItemCreator(filterOutConfig).getMenuItem();
172  menuItem.setText(ActionBuilderUtils.getString(ACTION_BUILDER, "filterView.text"));
173  menu.add(menuItem);
174  menu.addSeparator();
175  for (int i = 0; i < MAX_HIGHLIGHT; i++) {
176  final JMenuItem menuItem2 = new MenuItemCreator(highlightConfig[i]).getMenuItem();
177  menuItem2.setText(ActionBuilderUtils.format(ACTION_BUILDER, "filterViewHighlight.text", i));
178  menu.add(menuItem2);
179  }
180  }
181 
182  @Override
183  public void newSquare(@NotNull final FilterState filterState) {
184  for (int i = 0; i < MAX_HIGHLIGHT; i++) {
185  if (highlightConfig[i].isEnabled()) {
187  }
188  }
189  filterState.reset();
190  }
191 
192  @Override
193  public boolean isHighlightedSquare(@NotNull final FilterState filterState, final int path) {
194  return highlightConfig[path].isEnabled() && filterState.isHighlightedSquare(path);
195  }
196 
197  @Override
198  public void objectInSquare(@NotNull final FilterState filterState, @NotNull final G gameObject) {
199  for (int i = 0; i < MAX_HIGHLIGHT; i++) {
200  if (highlightConfig[i].isEnabled()) {
201  if (!filterState.isHighlightedSquare(i)) {
202  filterState.setHighlightedSquare(i, filterList.match(highlightConfig[i], gameObject));
203  }
204  }
205  }
206  }
207 
208  @Override
209  public boolean canShow(@NotNull final G gameObject) {
210  return !filterOutConfig.isEnabled() || filterList.canShow(gameObject, filterOutConfig);
211  }
212 
213  @Override
214  public void addFilter(@NotNull final String name, @NotNull final Filter<?, ?> filter) {
215  filterList.addFilter(name, filter);
216  }
217 
218  @Override
219  public void removeFilter(@NotNull final String name) {
220  filterList.removeFilter(name);
221  }
222 
230  private static boolean isFilterConfig(@NotNull final FilterConfig<?, ?> filterConfig, @NotNull final NamedFilterConfig expectedFilterConfig) {
231  if (filterConfig == expectedFilterConfig) {
232  return true;
233  }
234  for (final FilterConfig<?, ?> subFilterConfig : expectedFilterConfig.getEntries().values()) {
235  if (filterConfig == subFilterConfig) {
236  return true;
237  }
238  }
239  return false;
240  }
241 
242 }
net.sf.gridarta.gui.filter.MenuItemCreator.getMenuItem
JMenuItem getMenuItem()
Definition: MenuItemCreator.java:87
net.sf.gridarta.gui.filter.DefaultFilterControl.configListeners
final Collection< FilterConfigListener > configListeners
Definition: DefaultFilterControl.java:97
net.sf.gridarta.gui.filter.DefaultFilterControl.canShow
boolean canShow(@NotNull final G gameObject)
Definition: DefaultFilterControl.java:209
net.sf.gridarta.model.filter.NamedFilter.removeFilter
void removeFilter(@NotNull final String name)
Definition: NamedFilter.java:164
net.sf.gridarta.model.filter.Filter
Definition: Filter.java:33
net.sf.gridarta
net.sf.gridarta.gui.filter.FilterState
Definition: FilterState.java:29
net.sf.gridarta.gui.filter.DefaultFilterControl.addConfigListener
void addConfigListener(@NotNull final FilterConfigListener listener)
Definition: DefaultFilterControl.java:160
net.sf.gridarta.gui.filter.DefaultFilterControl.createMenuEntries
void createMenuEntries(@NotNull final JMenu menu)
Definition: DefaultFilterControl.java:170
net.sf.gridarta.gui.filter.DefaultFilterControl.removeFilter
void removeFilter(@NotNull final String name)
Definition: DefaultFilterControl.java:219
net.sf.gridarta.gui.filter.DefaultFilterControl.removeConfigListener
void removeConfigListener(@NotNull final FilterConfigListener listener)
Definition: DefaultFilterControl.java:165
net.sf
net.sf.gridarta.gui.filter.DefaultFilterControl.objectInSquare
void objectInSquare(@NotNull final FilterState filterState, @NotNull final G gameObject)
Definition: DefaultFilterControl.java:198
net.sf.gridarta.model.filter.NamedFilterConfig
Definition: NamedFilterConfig.java:34
net.sf.gridarta.model.filter.FilterConfigChangeType
Definition: FilterConfigChangeType.java:26
net.sf.gridarta.model.archetype
Definition: AbstractArchetype.java:20
net.sf.gridarta.model.gameobject.GameObject
Definition: GameObject.java:36
net.sf.gridarta.model.settings.EditorSettingsKey.ANALYZE_HIGHLIGHT2
ANALYZE_HIGHLIGHT2
Definition: EditorSettingsKey.java:23
net.sf.gridarta.model.settings.EditorSettingsKey
Definition: EditorSettingsKey.java:8
net.sf.gridarta.gui.filter.DefaultFilterControl.filterOutConfig
final NamedFilterConfig filterOutConfig
Definition: DefaultFilterControl.java:82
net.sf.gridarta.model.filter.NamedFilter.match
boolean match(@NotNull final NamedFilterConfig config, @NotNull final GameObject<?, ?, ?> gameObject)
Definition: NamedFilter.java:84
net.sf.gridarta.model.filter.FilterConfigListener
Definition: FilterConfigListener.java:30
net.sf.gridarta.model.filter.FilterConfigEncoder
Definition: FilterConfigEncoder.java:32
net.sf.gridarta.model.settings.EditorSettingsKey.ANALYZE_FILTER_OUT
ANALYZE_FILTER_OUT
Definition: EditorSettingsKey.java:28
net.sf.gridarta.model.filter.FilterConfig
Definition: FilterConfig.java:29
net.sf.gridarta.gui.filter.DefaultFilterControl.ACTION_BUILDER
static final ActionBuilder ACTION_BUILDER
Definition: DefaultFilterControl.java:76
net.sf.gridarta.model.settings.EditorSettings
Definition: EditorSettings.java:29
net.sf.gridarta.model.gameobject
Definition: AbstractGameObject.java:20
net
net.sf.gridarta.model.filter.NamedFilter.canShow
boolean canShow(@NotNull final GameObject<?, ?, ?> gameObject, @NotNull final NamedFilterConfig filterOutConfig)
Definition: NamedFilter.java:207
net.sf.gridarta.gui.filter.DefaultFilterControl.editorSettings
final EditorSettings editorSettings
Definition: DefaultFilterControl.java:88
net.sf.gridarta.model.settings.EditorSettings.setKey
void setKey(@NotNull EditorSettingsKey key, @NotNull String value)
net.sf.gridarta.gui.filter.MenuItemCreator
Definition: MenuItemCreator.java:39
net.sf.gridarta.model.settings.EditorSettings.getKey
String getKey(@NotNull EditorSettingsKey key, @NotNull String defaultValue)
net.sf.gridarta.gui.filter.DefaultFilterControl.highlightConfig
final NamedFilterConfig[] highlightConfig
Definition: DefaultFilterControl.java:91
net.sf.gridarta.model.maparchobject.MapArchObject
Definition: MapArchObject.java:40
net.sf.gridarta.model.filter.NamedFilter.reset
boolean reset(@NotNull final NamedFilterConfig config)
Definition: NamedFilter.java:115
net.sf.gridarta.model.filter.AbstractFilterConfig.addConfigChangeListener
void addConfigChangeListener(@NotNull final FilterConfigListener listener)
Definition: AbstractFilterConfig.java:102
net.sf.gridarta.model.filter
Definition: AbstractFilterConfig.java:20
net.sf.gridarta.gui.filter.DefaultFilterControl.isHighlightedSquare
boolean isHighlightedSquare(@NotNull final FilterState filterState, final int path)
Definition: DefaultFilterControl.java:193
net.sf.gridarta.gui.filter.DefaultFilterControl.newSquare
void newSquare(@NotNull final FilterState filterState)
Definition: DefaultFilterControl.java:183
net.sf.gridarta.utils.ActionBuilderUtils.format
static String format(@NotNull final ActionBuilder actionBuilder, @NotNull final String key, @NotNull final Object... args)
Definition: ActionBuilderUtils.java:101
net.sf.gridarta.gui.filter.DefaultFilterControl.DefaultFilterControl
DefaultFilterControl(@NotNull final NamedFilter filterList, @NotNull final EditorSettings editorSettings)
Definition: DefaultFilterControl.java:139
net.sf.gridarta.utils.ActionBuilderUtils.getString
static String getString(@NotNull final ActionBuilder actionBuilder, @NotNull final String key, @NotNull final String defaultValue)
Definition: ActionBuilderUtils.java:71
net.sf.gridarta.model.settings.EditorSettingsKey.ANALYZE_HIGHLIGHT1
ANALYZE_HIGHLIGHT1
Definition: EditorSettingsKey.java:18
net.sf.gridarta.gui.filter.FilterControl
Definition: FilterControl.java:33
net.sf.gridarta.model.filter.NamedFilter.createConfig
NamedFilterConfig createConfig()
Definition: NamedFilter.java:137
net.sf.gridarta.model.filter.NamedFilter.addFilter
void addFilter(@NotNull final String name, @NotNull final Filter<?, ?> filter)
Definition: NamedFilter.java:151
net.sf.gridarta.model
net.sf.gridarta.model.archetype.Archetype
Definition: Archetype.java:41
net.sf.gridarta.gui.filter.FilterControl< G, A, R >::MAX_HIGHLIGHT
int MAX_HIGHLIGHT
Definition: FilterControl.java:35
net.sf.gridarta.gui.filter.DefaultFilterControl.filterConfigListener
final FilterConfigListener filterConfigListener
Definition: DefaultFilterControl.java:100
net.sf.gridarta.gui.filter.DefaultFilterControl.isFilterConfig
static boolean isFilterConfig(@NotNull final FilterConfig<?, ?> filterConfig, @NotNull final NamedFilterConfig expectedFilterConfig)
Definition: DefaultFilterControl.java:230
net.sf.gridarta.model.settings.EditorSettingsKey.ANALYZE_HIGHLIGHT0
ANALYZE_HIGHLIGHT0
Definition: EditorSettingsKey.java:13
net.sf.gridarta.gui.filter.DefaultFilterControl
Definition: DefaultFilterControl.java:64
net.sf.gridarta.utils.ActionBuilderUtils
Definition: ActionBuilderUtils.java:31
net.sf.gridarta.model.filter.FilterConfigDecoder.decode
boolean decode(@NotNull final String string, @NotNull final FilterConfig<?, ?> filterConfig)
Definition: FilterConfigDecoder.java:142
net.sf.gridarta.gui.filter.DefaultFilterControl.addFilter
void addFilter(@NotNull final String name, @NotNull final Filter<?, ?> filter)
Definition: DefaultFilterControl.java:214
net.sf.gridarta.model.maparchobject
Definition: AbstractMapArchObject.java:20
net.sf.gridarta.model.filter.AbstractFilterConfig.isEnabled
boolean isEnabled()
Definition: AbstractFilterConfig.java:86
net.sf.gridarta.model.filter.NamedFilter
Definition: NamedFilter.java:41
net.sf.gridarta.model.filter.FilterConfigDecoder
Definition: FilterConfigDecoder.java:29
net.sf.gridarta.gui.filter.DefaultFilterControl.filterList
final NamedFilter filterList
Definition: DefaultFilterControl.java:79
net.sf.gridarta.utils
Definition: ActionBuilderUtils.java:20
net.sf.gridarta.model.settings
Definition: AbstractDefaultProjectSettings.java:20
net.sf.gridarta.gui.filter.DefaultFilterControl.LOG
static final Category LOG
Definition: DefaultFilterControl.java:70