Skip to content

Commit 2922a80

Browse files
committed
EDITOR: Text filter for scenes and actors.
1 parent c1cddd3 commit 2922a80

File tree

3 files changed

+127
-54
lines changed

3 files changed

+127
-54
lines changed

adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/ActorList.java

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,16 @@
1818
import java.beans.PropertyChangeEvent;
1919
import java.beans.PropertyChangeListener;
2020
import java.text.MessageFormat;
21-
import java.util.Arrays;
21+
import java.util.ArrayList;
22+
import java.util.List;
2223

2324
import com.badlogic.gdx.graphics.g2d.TextureRegion;
2425
import com.badlogic.gdx.scenes.scene2d.Actor;
26+
import com.badlogic.gdx.scenes.scene2d.Event;
27+
import com.badlogic.gdx.scenes.scene2d.EventListener;
2528
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
2629
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
30+
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
2731
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
2832
import com.bladecoder.engine.assets.EngineAssetManager;
2933
import com.bladecoder.engine.model.ActorRenderer;
@@ -53,6 +57,7 @@ public class ActorList extends ModelList<Scene, BaseActor> {
5357

5458
private ImageButton playerBtn;
5559
private ImageButton visibilityBtn;
60+
private String filterText;
5661

5762
public ActorList(Skin skin) {
5863
super(skin, true);
@@ -79,6 +84,21 @@ public void changed(ChangeEvent event, Actor actor) {
7984
}
8085
});
8186

87+
toolbar.addFilterBox(new EventListener() {
88+
89+
@Override
90+
public boolean handle(Event e) {
91+
if (((TextField) e.getTarget()).getText() != filterText) {
92+
filterText = ((TextField) e.getTarget()).getText();
93+
94+
addFilteredElements();
95+
}
96+
97+
return false;
98+
}
99+
100+
});
101+
82102
list.addListener(new ChangeListener() {
83103

84104
@Override
@@ -135,19 +155,31 @@ public void propertyChange(PropertyChangeEvent evt) {
135155

136156
if (evt.getPropertyName().equals(Project.NOTIFY_ELEMENT_DELETED)) {
137157
if (evt.getNewValue() instanceof BaseActor) {
138-
addElements(Ctx.project.getSelectedScene(), Arrays
139-
.asList(Ctx.project.getSelectedScene().getActors().values().toArray(new BaseActor[0])));
158+
addFilteredElements();
140159
}
141160
} else if (evt.getPropertyName().equals(Project.NOTIFY_ELEMENT_CREATED)) {
142161
if (evt.getNewValue() instanceof BaseActor && !(evt.getSource() instanceof EditActorDialog)) {
143-
addElements(Ctx.project.getSelectedScene(), Arrays
144-
.asList(Ctx.project.getSelectedScene().getActors().values().toArray(new BaseActor[0])));
162+
addFilteredElements();
145163
}
146164
}
147165
}
148166
});
149167
}
150168

169+
private void addFilteredElements() {
170+
171+
List<BaseActor> filtered = new ArrayList<>();
172+
173+
for (BaseActor a : Ctx.project.getSelectedScene().getActors().values()) {
174+
if (filterText == null || filterText.isEmpty() || a.getId().contains(filterText)) {
175+
filtered.add(a);
176+
}
177+
}
178+
179+
addElements(Ctx.project.getSelectedScene(), filtered);
180+
181+
}
182+
151183
private void toggleVisibility() {
152184

153185
BaseActor e = list.getSelected();

adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/SceneList.java

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,9 @@
1818
import java.beans.PropertyChangeEvent;
1919
import java.beans.PropertyChangeListener;
2020
import java.io.IOException;
21-
import java.util.Arrays;
21+
import java.util.ArrayList;
2222
import java.util.HashMap;
23+
import java.util.List;
2324

2425
import com.badlogic.gdx.Gdx;
2526
import com.badlogic.gdx.graphics.Color;
@@ -34,13 +35,16 @@
3435
import com.badlogic.gdx.graphics.glutils.FrameBuffer;
3536
import com.badlogic.gdx.graphics.glutils.GLFrameBuffer;
3637
import com.badlogic.gdx.scenes.scene2d.Actor;
38+
import com.badlogic.gdx.scenes.scene2d.Event;
39+
import com.badlogic.gdx.scenes.scene2d.EventListener;
3740
import com.badlogic.gdx.scenes.scene2d.InputEvent;
3841
import com.badlogic.gdx.scenes.scene2d.ui.HorizontalGroup;
3942
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
4043
import com.badlogic.gdx.scenes.scene2d.ui.Label;
4144
import com.badlogic.gdx.scenes.scene2d.ui.SelectBox;
4245
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
4346
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
47+
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
4448
import com.badlogic.gdx.scenes.scene2d.ui.TextTooltip;
4549
import com.badlogic.gdx.scenes.scene2d.utils.ChangeListener;
4650
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
@@ -67,6 +71,7 @@ public class SceneList extends ModelList<World, Scene> {
6771
private SelectBox<String> chapters;
6872
private HashMap<String, TextureRegion> bgIconCache = new HashMap<>();
6973
private boolean disposeBgCache = false;
74+
private String filterText;
7075

7176
public SceneList(final Skin skin) {
7277
super(skin, true);
@@ -111,6 +116,21 @@ public void clicked(InputEvent event, float x, float y) {
111116

112117
reloadBtn.setDisabled(true);
113118

119+
toolbar.addFilterBox(new EventListener() {
120+
121+
@Override
122+
public boolean handle(Event e) {
123+
if (((TextField) e.getTarget()).getText() != filterText) {
124+
filterText = ((TextField) e.getTarget()).getText();
125+
126+
addFilteredElements();
127+
}
128+
129+
return false;
130+
}
131+
132+
});
133+
114134
list.addListener(new ChangeListener() {
115135
@Override
116136
public void changed(ChangeEvent event, Actor actor) {
@@ -163,8 +183,7 @@ public void propertyChange(PropertyChangeEvent evt) {
163183
if (evt.getNewValue() instanceof World) {
164184
addChapters();
165185
} else if (evt.getNewValue() instanceof Scene) {
166-
addElements(Ctx.project.getWorld(),
167-
Arrays.asList(Ctx.project.getWorld().getScenes().values().toArray(new Scene[0])));
186+
addFilteredElements();
168187
}
169188
} else if (evt.getPropertyName().equals(Project.NOTIFY_PROJECT_LOADED)) {
170189
toolbar.disableCreate(!Ctx.project.isLoaded());
@@ -173,8 +192,7 @@ public void propertyChange(PropertyChangeEvent evt) {
173192
addChapters();
174193
} else if (evt.getPropertyName().equals(Project.NOTIFY_ELEMENT_CREATED)) {
175194
if (evt.getNewValue() instanceof Scene && !(evt.getSource() instanceof EditSceneDialog)) {
176-
addElements(Ctx.project.getWorld(),
177-
Arrays.asList(Ctx.project.getWorld().getScenes().values().toArray(new Scene[0])));
195+
addFilteredElements();
178196
}
179197
}
180198
}
@@ -208,8 +226,7 @@ public void changed(ChangeEvent event, Actor actor) {
208226
String init = Ctx.project.getEditorConfig().getProperty("project.selectedScene",
209227
Ctx.project.getWorld().getInitScene());
210228

211-
addElements(Ctx.project.getWorld(),
212-
Arrays.asList(Ctx.project.getWorld().getScenes().values().toArray(new Scene[0])));
229+
addFilteredElements();
213230

214231
if (init != null) {
215232
Scene s = Ctx.project.getWorld().getScenes().get(init);
@@ -263,6 +280,20 @@ public void addChapters() {
263280
invalidate();
264281
}
265282

283+
private void addFilteredElements() {
284+
285+
List<Scene> filtered = new ArrayList<>();
286+
287+
for (Scene s : Ctx.project.getWorld().getScenes().values()) {
288+
if (filterText == null || filterText.isEmpty() || s.getId().contains(filterText)) {
289+
filtered.add(s);
290+
}
291+
}
292+
293+
addElements(Ctx.project.getWorld(), filtered);
294+
295+
}
296+
266297
private void setDefault() {
267298

268299
int pos = list.getSelectedIndex();

adventure-editor/src/main/java/com/bladecoder/engineeditor/ui/panels/EditToolbar.java

Lines changed: 52 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -22,93 +22,103 @@
2222
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton;
2323
import com.badlogic.gdx.scenes.scene2d.ui.ImageButton.ImageButtonStyle;
2424
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
25+
import com.badlogic.gdx.scenes.scene2d.ui.TextField;
2526
import com.badlogic.gdx.scenes.scene2d.ui.TextTooltip;
2627
import com.badlogic.gdx.scenes.scene2d.utils.TextureRegionDrawable;
2728
import com.bladecoder.engineeditor.Ctx;
2829

2930
public class EditToolbar extends HorizontalGroup {
30-
31-
private ImageButton createBtn;
32-
private ImageButton deleteBtn;
33-
private ImageButton editBtn;
34-
private ImageButton copyBtn;
35-
private ImageButton pasteBtn;
36-
37-
private Skin skin;
38-
31+
32+
private ImageButton createBtn;
33+
private ImageButton deleteBtn;
34+
private ImageButton editBtn;
35+
private ImageButton copyBtn;
36+
private ImageButton pasteBtn;
37+
38+
private Skin skin;
39+
3940
public EditToolbar(Skin skin) {
4041
super();
41-
42+
4243
this.skin = skin;
4344
pad(0);
44-
45-
createBtn = new ImageButton(skin);
46-
editBtn = new ImageButton(skin);
47-
deleteBtn = new ImageButton(skin);
48-
copyBtn = new ImageButton(skin);
49-
pasteBtn = new ImageButton(skin);
50-
51-
addToolBarButton(createBtn, "ic_add","New", "Create a new Element");
52-
addToolBarButton(editBtn, "ic_edit","Edit", "Edit the selected Element");
53-
addToolBarButton(deleteBtn, "ic_delete","Delete", "Delete and put in the clipboard");
54-
addToolBarButton(copyBtn, "ic_copy","Copy", "Copy to the clipboard");
55-
addToolBarButton(pasteBtn, "ic_paste","Paste", "Paste from the clipboard");
56-
}
57-
45+
46+
createBtn = new ImageButton(skin);
47+
editBtn = new ImageButton(skin);
48+
deleteBtn = new ImageButton(skin);
49+
copyBtn = new ImageButton(skin);
50+
pasteBtn = new ImageButton(skin);
51+
52+
addToolBarButton(createBtn, "ic_add", "New", "Create a new Element");
53+
addToolBarButton(editBtn, "ic_edit", "Edit", "Edit the selected Element");
54+
addToolBarButton(deleteBtn, "ic_delete", "Delete", "Delete and put in the clipboard");
55+
addToolBarButton(copyBtn, "ic_copy", "Copy", "Copy to the clipboard");
56+
addToolBarButton(pasteBtn, "ic_paste", "Paste", "Paste from the clipboard");
57+
}
58+
5859
public void hideCopyPaste() {
5960
copyBtn.setVisible(false);
6061
pasteBtn.setVisible(false);
6162
}
62-
63+
6364
public void disableCreate(boolean v) {
6465
createBtn.setDisabled(v);
6566
}
66-
67+
6768
public void disableEdit(boolean v) {
6869
deleteBtn.setDisabled(v);
6970
editBtn.setDisabled(v);
7071
copyBtn.setDisabled(v);
7172
}
72-
73+
7374
public void disablePaste(boolean v) {
7475
pasteBtn.setDisabled(v);
7576
}
76-
77+
7778
public void addToolBarButton(ImageButton button, String icon, String text, String tooltip) {
78-
79+
7980
TextureRegion image = Ctx.assetManager.getIcon(icon);
8081
TextureRegion imageDisabled = Ctx.assetManager.getIcon(icon + "_disabled");
81-
82+
8283
ImageButtonStyle style = new ImageButtonStyle(skin.get("plain", ButtonStyle.class));
8384
style.imageUp = new TextureRegionDrawable(image);
84-
85-
if(imageDisabled != null)
85+
86+
if (imageDisabled != null)
8687
style.imageDisabled = new TextureRegionDrawable(imageDisabled);
8788
button.setStyle(style);
88-
button.pad(6,3,6,3);
89-
addActor(button);
90-
button.setDisabled(true);
91-
TextTooltip t = new TextTooltip(tooltip, skin);
89+
button.pad(6, 3, 6, 3);
90+
addActor(button);
91+
button.setDisabled(true);
92+
TextTooltip t = new TextTooltip(tooltip, skin);
9293
button.addListener(t);
9394
}
94-
95-
95+
96+
public void addFilterBox(EventListener e) {
97+
TextField tf = new TextField("", skin);
98+
addActor(tf);
99+
100+
TextTooltip t = new TextTooltip("Filter list", skin);
101+
tf.addListener(t);
102+
103+
tf.addListener(e);
104+
}
105+
96106
public void addCreateListener(EventListener e) {
97107
createBtn.addListener(e);
98-
}
99-
108+
}
109+
100110
public void addEditListener(EventListener e) {
101111
editBtn.addListener(e);
102112
}
103-
113+
104114
public void addDeleteListener(EventListener e) {
105115
deleteBtn.addListener(e);
106116
}
107117

108118
public void addCopyListener(EventListener e) {
109119
copyBtn.addListener(e);
110120
}
111-
121+
112122
public void addPasteListener(EventListener e) {
113123
pasteBtn.addListener(e);
114124
}

0 commit comments

Comments
 (0)