21
21
// USE OR OTHER DEALINGS IN THE SOFTWARE.
22
22
package phasereditor .scene .ui .editor .properties ;
23
23
24
+ import java .util .ArrayList ;
25
+
24
26
import org .eclipse .core .resources .IFile ;
27
+ import org .eclipse .jface .window .Window ;
25
28
import org .eclipse .swt .SWT ;
29
+ import org .eclipse .swt .events .SelectionListener ;
26
30
import org .eclipse .swt .layout .GridData ;
27
31
import org .eclipse .swt .layout .GridLayout ;
32
+ import org .eclipse .swt .widgets .Button ;
28
33
import org .eclipse .swt .widgets .Composite ;
29
34
import org .eclipse .swt .widgets .Control ;
30
35
import org .eclipse .swt .widgets .Label ;
31
36
37
+ import phasereditor .assetpack .core .AssetPackCore ;
38
+ import phasereditor .assetpack .core .AtlasAssetModel ;
32
39
import phasereditor .assetpack .core .IAssetFrameModel ;
33
40
import phasereditor .assetpack .core .ImageAssetModel ;
41
+ import phasereditor .assetpack .core .MultiAtlasAssetModel ;
34
42
import phasereditor .assetpack .ui .preview .SingleFrameCanvas ;
35
43
import phasereditor .scene .core .TextureComponent ;
36
44
@@ -42,6 +50,7 @@ public class TextureSection extends ScenePropertySection {
42
50
43
51
private SingleFrameCanvas _frameCanvas ;
44
52
private Label _frameLabel ;
53
+ private Button _frameBtn ;
45
54
46
55
public TextureSection (ScenePropertyPage page ) {
47
56
super ("Texture" , page );
@@ -66,6 +75,12 @@ public Control createContent(Composite parent) {
66
75
_frameCanvas .setLayoutData (gd );
67
76
}
68
77
78
+ {
79
+ _frameBtn = new Button (comp , 0 );
80
+ _frameBtn .addSelectionListener (SelectionListener .widgetSelectedAdapter (e -> selectFrame ()));
81
+ _frameBtn .setLayoutData (new GridData (GridData .FILL_HORIZONTAL ));
82
+ }
83
+
69
84
{
70
85
_frameLabel = new Label (comp , SWT .WRAP );
71
86
_frameLabel .setText ("Frame" );
@@ -76,6 +91,39 @@ public Control createContent(Composite parent) {
76
91
return comp ;
77
92
}
78
93
94
+ private void selectFrame () {
95
+
96
+ var list = new ArrayList <>();
97
+
98
+ for (var pack : AssetPackCore .getAssetPackModels (getEditor ().getProject ())) {
99
+ for (var asset : pack .getAssets ()) {
100
+ if (asset instanceof ImageAssetModel || asset instanceof AtlasAssetModel
101
+ || asset instanceof MultiAtlasAssetModel ) {
102
+ list .addAll (asset .getAllFrames ());
103
+ }
104
+ }
105
+ }
106
+
107
+ var dlg = new QuickSelectAssetDialog (getEditor ().getEditorSite ().getShell ());
108
+ dlg .setTitle ("Select Texture" );
109
+
110
+ dlg .setInput (list );
111
+
112
+ if (dlg .open () == Window .OK ) {
113
+ var frame = (IAssetFrameModel ) dlg .getResult ();
114
+
115
+ wrapOperation (() -> {
116
+ getModels ().forEach (model -> {
117
+ TextureComponent .set_frame (model , frame );
118
+ });
119
+ }, getModels (), true );
120
+
121
+ getEditor ().setDirty (true );
122
+
123
+ update_UI_from_Model ();
124
+ }
125
+ }
126
+
79
127
@ Override
80
128
public void update_UI_from_Model () {
81
129
var models = getModels ();
@@ -85,17 +133,23 @@ public void update_UI_from_Model() {
85
133
86
134
if (frame == null ) {
87
135
_frameLabel .setText ("Frame" );
136
+ _frameBtn .setText ("Select Texture" );
88
137
} else {
89
138
var sb = new StringBuilder ();
139
+
90
140
if (frame instanceof ImageAssetModel .Frame ) {
91
- sb .append ("key: " + frame .getKey ());
141
+ sb .append (frame .getKey ());
92
142
} else {
93
- sb .append ("key: " + frame .getAsset (). getKey () + " / frame: " + frame .getKey ());
143
+ sb .append (frame .getKey () + " @ " + frame . getAsset () .getKey ());
94
144
}
95
145
146
+ _frameBtn .setText (sb .toString ());
147
+
96
148
var fd = frame .getFrameData ();
97
149
98
- sb .append ("\n size: " + fd .srcSize .x + "x" + fd .srcSize .y );
150
+ sb .setLength (0 );
151
+
152
+ sb .append ("size: " + fd .srcSize .x + "x" + fd .srcSize .y );
99
153
100
154
IFile file = frame .getImageFile ();
101
155
@@ -104,6 +158,8 @@ public void update_UI_from_Model() {
104
158
}
105
159
106
160
_frameLabel .setText (sb .toString ());
161
+
162
+
107
163
}
108
164
109
165
_frameCanvas .setModel (frame );
0 commit comments