Skip to content

Commit e82290e

Browse files
committed
реализация воркспейса
1 parent e00ad41 commit e82290e

37 files changed

+1084
-130
lines changed

libs/jfx-1.2.jar

616 Bytes
Binary file not shown.

resources/messages/messages.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
EditorBarComponent.asset=Asset
22
EditorBarComponent.asset.openAsset=Open Asset Folder
33
EditorBarComponent.asset.openAsset.DirectoryChooser=Choose Asset
4+
EditorBarComponent.asset.reopen=Reopen Asset Folder
5+
EditorBarComponent.asset.close=Close editor
46

57
AssetComponentResourceTreeContextMenuNewFile=New
68
AssetComponentResourceTreeContextMenuOpenFile=Open

resources/messages/messages_ru.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
EditorBarComponent.asset=Asset
22
EditorBarComponent.asset.openAsset=Открыть папку Asset
33
EditorBarComponent.asset.openAsset.DirectoryChooser=Выбор Asset
4+
EditorBarComponent.asset.reopen=Переоткрыть папку Asset
5+
EditorBarComponent.asset.close=Закрыть редактор
46

57
AssetComponentResourceTreeContextMenuNewFile=Создать
68
AssetComponentResourceTreeContextMenuOpenFile=Открыть

src/com/ss/editor/Editor.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.ss.editor.manager.FileIconManager;
3030
import com.ss.editor.manager.JavaFXImageManager;
3131
import com.ss.editor.manager.ResourceManager;
32+
import com.ss.editor.manager.WorkspaceManager;
3233
import com.ss.editor.ui.builder.EditorFXSceneBuilder;
3334
import com.ss.editor.ui.cursor.UbuntuCursorProvider;
3435
import com.ss.editor.ui.scene.EditorFXScene;
@@ -193,6 +194,10 @@ public final void asyncUnlock(final long stamp) {
193194
@Override
194195
public void destroy() {
195196
super.destroy();
197+
198+
final WorkspaceManager workspaceManager = WorkspaceManager.getInstance();
199+
workspaceManager.save();
200+
196201
System.exit(0);
197202
}
198203

@@ -272,6 +277,7 @@ public void simpleInitApp() {
272277
InitializeManager.register(ResourceManager.class);
273278
InitializeManager.register(JavaFXImageManager.class);
274279
InitializeManager.register(FileIconManager.class);
280+
InitializeManager.register(WorkspaceManager.class);
275281
InitializeManager.initialize();
276282

277283
if (Config.ENABLE_PBR) {
@@ -342,6 +348,8 @@ public void update() {
342348

343349
} catch (final AssetNotFoundException | ArrayIndexOutOfBoundsException | NullPointerException | IllegalStateException e) {
344350
LOGGER.warning(e);
351+
final WorkspaceManager workspaceManager = WorkspaceManager.getInstance();
352+
workspaceManager.save();
345353
System.exit(1);
346354
} finally {
347355
syncUnlock(stamp);

src/com/ss/editor/Messages.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ public class Messages {
1414
public static final String EDITOR_BAR_ASSET;
1515
public static final String EDITOR_BAR_ASSET_OPEN_ASSET;
1616
public static final String EDITOR_BAR_ASSET_OPEN_ASSET_DIRECTORY_CHOOSER;
17+
public static final String EDITOR_BAR_ASSET_REOPEN_ASSET_FOLDER;
18+
public static final String EDITOR_BAR_ASSET_CLOSE_EDITOR;
1719
public static final String EDITOR_BAR_SETTINGS;
1820
public static final String EDITOR_BAR_SETTINGS_GRAPHICS;
1921

@@ -162,6 +164,8 @@ public class Messages {
162164
EDITOR_BAR_ASSET = bundle.getString("EditorBarComponent.asset");
163165
EDITOR_BAR_ASSET_OPEN_ASSET = bundle.getString("EditorBarComponent.asset.openAsset");
164166
EDITOR_BAR_ASSET_OPEN_ASSET_DIRECTORY_CHOOSER = bundle.getString("EditorBarComponent.asset.openAsset.DirectoryChooser");
167+
EDITOR_BAR_ASSET_REOPEN_ASSET_FOLDER = bundle.getString("EditorBarComponent.asset.reopen");
168+
EDITOR_BAR_ASSET_CLOSE_EDITOR = bundle.getString("EditorBarComponent.asset.close");
165169

166170
EDITOR_BAR_SETTINGS = bundle.getString("EditorBarComponent.settings");
167171
EDITOR_BAR_SETTINGS_GRAPHICS = bundle.getString("EditorBarComponent.settings.graphics");

src/com/ss/editor/config/EditorConfig.java

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
66
import com.jme3.system.AppSettings;
77
import com.ss.editor.Editor;
88
import com.ss.editor.EditorContext;
9+
import com.ss.editor.util.EditorUtil;
910

1011
import java.awt.*;
12+
import java.io.Serializable;
1113
import java.net.URI;
1214
import java.net.URISyntaxException;
1315
import java.nio.file.Files;
1416
import java.nio.file.Path;
1517
import java.nio.file.Paths;
18+
import java.util.ArrayList;
19+
import java.util.List;
1620
import java.util.prefs.BackingStoreException;
1721
import java.util.prefs.Preferences;
1822

@@ -37,6 +41,7 @@ public final class EditorConfig implements AssetEventListener {
3741
public static final String PREF_GRAPHIC_FULLSCREEN = GRAPHICS_ALIAS + "." + "fullscreen";
3842

3943
public static final String PREF_CURRENT_ASSET = ASSET_ALIAS + "." + "currentAsset";
44+
public static final String PREF_LAST_OPENED_ASSETS = ASSET_ALIAS + "." + "lastOpenedAssets";
4045

4146
private static EditorConfig instance;
4247

@@ -53,6 +58,11 @@ public static EditorConfig getInstance() {
5358
return instance;
5459
}
5560

61+
/**
62+
* Список последних открываемых asset.
63+
*/
64+
private final List<String> lastOpenedAssets;
65+
5666
/**
5767
* Используемое разрешение экрана.
5868
*/
@@ -78,6 +88,33 @@ public static EditorConfig getInstance() {
7888
*/
7989
private volatile Path currentAsset;
8090

91+
public EditorConfig() {
92+
this.lastOpenedAssets = new ArrayList<>();
93+
}
94+
95+
/**
96+
* @return список последних открываемых asset.
97+
*/
98+
public List<String> getLastOpenedAssets() {
99+
return lastOpenedAssets;
100+
}
101+
102+
/**
103+
* Запоминание открытияуказанного Asset.
104+
*/
105+
public void addOpenedAsset(final Path currentAsset) {
106+
107+
final String filePath = currentAsset.toString();
108+
109+
final List<String> lastOpenedAssets = getLastOpenedAssets();
110+
lastOpenedAssets.remove(filePath);
111+
lastOpenedAssets.add(0, filePath);
112+
113+
if (lastOpenedAssets.size() > 10) {
114+
lastOpenedAssets.remove(lastOpenedAssets.size() - 1);
115+
}
116+
}
117+
81118
@Override
82119
public void assetDependencyNotFound(final AssetKey parentKey, final AssetKey dependentAssetKey) {
83120
}
@@ -145,7 +182,7 @@ public Path getCurrentAsset() {
145182
/**
146183
* @param currentAsset текущий выбранный Asset.
147184
*/
148-
public void setCurrentAsset(Path currentAsset) {
185+
public void setCurrentAsset(final Path currentAsset) {
149186
this.currentAsset = currentAsset;
150187
}
151188

@@ -205,6 +242,12 @@ private void init() {
205242
LOGGER.error(e);
206243
}
207244
}
245+
246+
final List<String> deserializeLastOpened = EditorUtil.deserialize(prefs.getByteArray(PREF_LAST_OPENED_ASSETS, null));
247+
248+
if (deserializeLastOpened != null) {
249+
getLastOpenedAssets().addAll(deserializeLastOpened);
250+
}
208251
}
209252

210253
/**
@@ -229,6 +272,10 @@ public void save() {
229272
currentAsset = null;
230273
}
231274

275+
final List<String> lastOpenedAssets = getLastOpenedAssets();
276+
277+
prefs.putByteArray(PREF_LAST_OPENED_ASSETS, EditorUtil.serialize((Serializable) lastOpenedAssets));
278+
232279
try {
233280
prefs.flush();
234281
} catch (final BackingStoreException e) {

src/com/ss/editor/manager/FileIconManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public class FileIconManager {
6464
EXTENSION_TO_CONTENT_TYPE.put(FileExtensions.JME_MATERIAL, "gnome-mime-text");
6565
EXTENSION_TO_CONTENT_TYPE.put(FileExtensions.JME_MATERIAL_DEFINITION, "gnome-mime-text");
6666

67-
EXTENSION_TO_CONTENT_TYPE.put("obj", "application/x-tgif");
67+
EXTENSION_TO_CONTENT_TYPE.put("obj", "application-x-tgif");
6868
EXTENSION_TO_CONTENT_TYPE.put("blend", "application-x-blender");
6969
EXTENSION_TO_CONTENT_TYPE.put("j3odata", "gnome-mime-text");
7070
EXTENSION_TO_CONTENT_TYPE.put("pfv", "gnome-mime-text");
@@ -109,7 +109,7 @@ public Image getIcon(final Path path, int size) {
109109
final String extension = FileUtils.getExtension(path);
110110
String contentType = EXTENSION_TO_CONTENT_TYPE.get(extension);
111111

112-
if(contentType == null) {
112+
if (contentType == null) {
113113
try {
114114
contentType = Files.probeContentType(path);
115115
} catch (IOException e) {
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.ss.editor.manager;
2+
3+
import com.ss.editor.config.EditorConfig;
4+
import com.ss.editor.model.workspace.Workspace;
5+
import com.ss.editor.util.EditorUtil;
6+
7+
import java.nio.file.Files;
8+
import java.nio.file.Path;
9+
10+
import rlib.manager.InitializeManager;
11+
import rlib.util.FileUtils;
12+
import rlib.util.dictionary.DictionaryFactory;
13+
import rlib.util.dictionary.ObjectDictionary;
14+
15+
/**
16+
* Реализация менеджера по работе с воркспейсом.
17+
*
18+
* @author Ronn
19+
*/
20+
public class WorkspaceManager {
21+
22+
public static final String FOLDER_EDITOR = ".jme3-spaceshift-editor";
23+
public static final String FILE_WORKSPACE = "workspace";
24+
25+
private static WorkspaceManager instance;
26+
27+
public static WorkspaceManager getInstance() {
28+
29+
if (instance == null) {
30+
instance = new WorkspaceManager();
31+
}
32+
33+
return instance;
34+
}
35+
36+
/**
37+
* Таблица воркспейсов.
38+
*/
39+
private final ObjectDictionary<Path, Workspace> workspaces;
40+
41+
public WorkspaceManager() {
42+
InitializeManager.valid(getClass());
43+
this.workspaces = DictionaryFactory.newObjectDictionary();
44+
}
45+
46+
/**
47+
* @return таблица воркспейсов.
48+
*/
49+
private ObjectDictionary<Path, Workspace> getWorkspaces() {
50+
return workspaces;
51+
}
52+
53+
/**
54+
* Получение текущего воркспейса.
55+
*/
56+
public Workspace getCurrentWorkspace() {
57+
final EditorConfig editorConfig = EditorConfig.getInstance();
58+
final Path currentAsset = editorConfig.getCurrentAsset();
59+
return getWorkspace(currentAsset);
60+
}
61+
62+
/**
63+
* Получение воркспейса для указанного asset папки.
64+
*/
65+
public synchronized Workspace getWorkspace(final Path assetFolder) {
66+
67+
final ObjectDictionary<Path, Workspace> workspaces = getWorkspaces();
68+
final Workspace exists = workspaces.get(assetFolder);
69+
70+
if (exists != null) {
71+
return exists;
72+
}
73+
74+
final Path workspaceFile = assetFolder.resolve(FOLDER_EDITOR).resolve(FILE_WORKSPACE);
75+
76+
if (!Files.exists(workspaceFile)) {
77+
78+
final Workspace workspace = new Workspace();
79+
workspace.setAssetFolder(assetFolder);
80+
81+
workspaces.put(assetFolder, workspace);
82+
83+
return workspace;
84+
}
85+
86+
final Workspace workspace = EditorUtil.deserialize(FileUtils.getContent(workspaceFile));
87+
workspace.setAssetFolder(assetFolder);
88+
89+
workspaces.put(assetFolder, workspace);
90+
91+
return workspace;
92+
}
93+
94+
/**
95+
* Сохранить воркспейсы.
96+
*/
97+
public synchronized void save() {
98+
final ObjectDictionary<Path, Workspace> workspaces = getWorkspaces();
99+
workspaces.forEach(Workspace::save);
100+
}
101+
}

0 commit comments

Comments
 (0)