package com.view;
import mobilebasic.Main;
import com.view.AuxList;
import java.io.DataInput;
import java.io.DataInputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.List;
import mobilebasic.BASIC;
import mobilebasic.RandomAccessFile;
/**
*
* @author kiriman
*/
public class LoadScreen extends AuxList implements CommandListener, PathListener {
private Main main;
public LoadScreen() {
super("Загрузить из:");
this.main = Main.mdl;
list.addCommand(main.cancelCMD);
list.setCommandListener(this);
}
public void showOpenList() {
main.display.setCurrent(list);
}
private boolean isBasFile(String path) {
return path.endsWith(".bas");
}
public void commandAction(Command command, Displayable disp) {
if (command == main.cancelCMD) {
main.display.setCurrent(main.menuList);
} else {
FileManager fm;
int index;
if ((index = list.getSelectedIndex()) == 0) {
fm = new FileManager(Settings.path, List.IMPLICIT);
fm.setSystem(FileManager.FS);
fm.setCurrentDir(Settings.path);
} else {
fm = new FileManager(list.getString(index), List.IMPLICIT);
fm.setSystem(FileManager.RMS);
}
fm.setPathListener(this);
fm.showCurrentDir();
}
}
public void pathAction(Object object, boolean isCancel) {
if (isCancel) {
main.display.setCurrent(list);
} else {
try {
String path = (String) object;
Object dis = null;
if (path.startsWith("file:")) {
FileConnection fc = (FileConnection) Connector.open(path, Connector.READ);
dis = fc.openDataInputStream();
} else {
dis = new RandomAccessFile(path, true);
}
loadSource(path, (DataInput) dis);
if (dis instanceof RandomAccessFile) {
((RandomAccessFile) dis).close();
} else {
((DataInputStream) dis).close();
}
main.nameProgram = path.substring(path.lastIndexOf('/') + 1, path.length());
main.nameProgram = main.nameProgram.substring(0, main.nameProgram.indexOf('.'));
main.menuList.addCommand(main.editorCMD);
main.editor = new EditorScreen(main);
main.editor.autoNumb = false;
main.var_1064 = 0;
main.offsetLine = 0;
main.listInCanvas();
main.display.setCurrent(main.canvas);
} catch (Throwable ex) {
ex.printStackTrace();
String err = ex.getMessage();
Alert alert = new Alert("Ошибка", err == null ? ex.toString() : err, null, AlertType.ERROR);
alert.setTimeout(-2);
main.display.setCurrent(alert);
}
}
}
private void loadSource(String path, DataInput dis) {
if (isBasFile(path)) {
BASIC.LoadFrom(dis);
} else { // .lis
BASIC.New();
BASIC.Enter(dis);
}
}
}