This commit is contained in:
Victor 2018-11-14 19:46:26 +02:00
parent 79af0bb07a
commit bd3ac77767
26 changed files with 454 additions and 533 deletions

View File

@ -56,12 +56,12 @@ Meter
Play
Play origin
Ok
Up one level
Language (need to restart)
Delete
Choose folder
Open file
Instruments language
Note width
Please wait
Updating list
Note height
Save in this folder
Insert tempo
Delete tempo
@ -91,4 +91,6 @@ Key map
Quick commands
Navigation
Nums, otherwise keypad, when edit notes
Name
Name
Temp directory
New folder

View File

@ -56,12 +56,12 @@
Играть
Играть оригинал
Ok
Назад
Язык (необходим рестарт)
Удалить
Выбрать папку
Открытый файл
Язык инструментов
Ширина ноты
Пожалуйста, подождите
Обновление списка
Высота ноты
Сохранить здесь
Вставить Темп
Удалить Темп
@ -91,4 +91,6 @@ Ok
Быстрые команды
Навигация
Цифрами, иначе джойстиком, при редактировании нот
Имя
Имя
Временная папка
Новая папка

View File

@ -70,12 +70,12 @@ public class L {
play = 55,
playOrigin = 56,
ok = 57,
upOneLevel = 58,
language = 58,
delete = 59,
chooseFolder = 60,
openFile = 61,
instrlang = 60,
noteWidth = 61,
pleaseWait = 62,
updatingList = 63,
noteHeight = 63,
saveInThisFolder = 64,
insertTempo = 65,
deleteTempo = 66,
@ -105,7 +105,9 @@ public class L {
quickCommands = 90,
navigation = 91,
numkeysOptionString = 92,
midiName = 93;
midiName = 93,
tempDir = 94,
newFolder = 95;
/** Ìàññèâ òåêñòîâûõ ìåòîê */

View File

@ -31,8 +31,8 @@ public class P {
//ñêèíû
//title and soft
public static int colup = 0xD0604080;
public static int coldn = 0xD0754E9C;
public static int colup = 0x593C77;
public static int coldn = 0x926DB6;
//çàäíèé ôîí
public static int backgrnd = 0xFFFFFF;
// ôîí êóðñîðà

View File

@ -5,10 +5,11 @@ MIDedit 2.1 / 3.0
- Сохранение в .mid, а не в .MID
- Исправления в локализации.
- Новое графическое меню. Убраны лишние пункты при запуске.
- Добавлен графический файловый менеджер, показывающий только те файлы, с которыми работает программа.
- Добавлена возможность прослушивания мелодии и создания новой папки в файлменеджере.
- Некоторые экраны (в основном помощи) изменены на графические.
********
Добавить украинский язык.
При первом запуске - настройки
Help в aNMPWR
player.realize

View File

@ -358,7 +358,6 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
} else if (command == addInstrument) {
isAdd = true;
display.setCurrent(getListOfInstruments());
System.out.println("displayable = " + displayable);
} else if (command == setInstrument) {
isAdd = false;
display.setCurrent(getListOfInstruments());
@ -467,7 +466,6 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
return null;
}*/
private Form getListOfInstruments() {
System.out.println("in getListInstruments");
if (listInstrumentsForm == null) {
ChoiceGroup[] groupsChoiseGroup = new ChoiceGroup[16];
for (int i = 0; i < 16; i++) {

View File

@ -1,7 +1,6 @@
package midedit;
import java.util.Vector;
import main.Rms;
import main.L;
//import java.util.*;
@ -56,37 +55,7 @@ public class Constants {
*
*/
public static final int MAX_NOTE_LENGTH = 8; // min == 1/(2^5)
/**
*
*/
public final static String[] KEY_MAP = {
"<LeftSoftKey>", L.str[L.menu],
"<RightSoftKey>", L.str[L.back],
"<Fire>,<5>", L.str[L.insertNoteWithCurrentAttributes] + "\n" + L.str[L.noteAttributeHelp],
"<9>,<Clear>", L.str[L.deleteNote],
"<Red Phone>", L.str[L.undo],
"<Volume +'\'->", L.str[L.noteVolume],
"<1>", L.str[L.playFromCurrent],
"<3>", L.str[L.playNoteOnCursor],
"<7>,<Green Phone>", L.str[L.selectNoteAttribute],
"<*>,<#>,<0>", L.str[L.changeNoteAttribute],
Rms.numKeysEdit ? "<4>,<6>,<2>,<8>" : "<up>,<down>,<left>,<right>", L.str[L.navigationOnComposition],
Rms.numKeysEdit ? "<up>,<down>,<left>,<right>" : "<4>,<6>,<2>,<8>", L.str[L.quicknav],};
public final static String[] QUICK_COMMANDS = {
"<1> ", L.str[L.markBegin],
"<2> ", L.str[L.markEnd],
"<3> ", L.str[L.copy],
"<4> ", L.str[L.pasteInsert],
"<5> ", L.str[L.pasteReplace],
"<6> ", L.str[L.pasteOverwrite],
"<7> ", L.str[L.shiftDelete],
"<8> ", L.str[L.clean],
"<9> ", L.str[L.playChannelOnScreen],
"<*> ", L.str[L.undo],
"<0> ", L.str[L.playChannelAll],
"<#> ", L.str[L.redo]};
static VectorArr instrVectorArr = new VectorArr(L.instr, 1, 128);

View File

@ -85,13 +85,7 @@ protected void doSmallDown (){
for(int i=0; i<Constants.NCHANNEL; ++i)
drumsTableInverse[drumsTable[i]]=(byte)i;
}
/**
*
* @return
*/
public byte[] getDrumsTable()
{ return drumsTable; }
/**
*
* @param g

View File

@ -373,7 +373,6 @@ public class MidiFile implements Waitable {
}
return /*numBytesToWrite*/;
}
// private byte getVolume
public byte[] writeNote(byte instr, byte nn)//+
{

View File

@ -8,12 +8,13 @@ import main.L;
import main.P;
import main.Main;
import main.Rms;
import ui.TextView;
/**
*
* @author user
*/
abstract public class MixerCanvas extends Canvas implements Runnable {
public abstract class MixerCanvas extends Canvas implements Runnable {
private static final Font defFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
protected Composition composition;
@ -32,8 +33,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable {
private final Runnable playingRunnable = new Runnable() {
public void run() {
System.out.println("getTimeToCanvasConct() = " + composition.getTime2CanvasConst());
System.out.println("Thread.currentThread = " + Thread.currentThread());
//System.out.println("getTimeToCanvasConct() = " + composition.getTime2CanvasConst());
//System.out.println("Thread.currentThread = " + Thread.currentThread());
while (CompositionForm.isPlaying) {
try {
doSmallRight();
@ -381,7 +382,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable {
model.playMix(composition, xBase * Constants.timeConst);
playingThread = new Thread(playingRunnable);
playingThread.start();
System.out.println("CompositionForm.isPlaying = " + CompositionForm.isPlaying);
//System.out.println("CompositionForm.isPlaying = " + CompositionForm.isPlaying);
}
} catch (Exception e) {
System.out.println("Exception = " + e);
@ -1411,13 +1412,26 @@ abstract public class MixerCanvas extends Canvas implements Runnable {
mainMenu.addItem(undoMenu);
Menu helpMenu = new Menu(L.str[L.help], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem mapItem = new MenuItem(L.str[L.keymap], 0) {
public boolean actionPerformed() {
Form form = new Form(L.str[L.quickCommands], createStringItems(Constants.KEY_MAP));
form.addCommand(CompositionForm.ok);
form.setCommandListener(Options.this);
MixerCanvas.this.display.setCurrent(form);
String[] KEY_MAP = {
"<LeftSoftKey>", L.str[L.menu],
"<RightSoftKey>", L.str[L.back],
"<Fire>,<5>", L.str[L.insertNoteWithCurrentAttributes] + "\n" + L.str[L.noteAttributeHelp],
"<9>,<Clear>", L.str[L.deleteNote],
"<Red Phone>", L.str[L.undo],
"<Volume +'\'->", L.str[L.noteVolume],
"<1>", L.str[L.playFromCurrent],
"<3>", L.str[L.playNoteOnCursor],
"<7>,<Green Phone>", L.str[L.selectNoteAttribute],
"<*>,<#>,<0>", L.str[L.changeNoteAttribute],
Rms.numKeysEdit ? "<4>,<6>,<2>,<8>" : "<up>,<down>,<left>,<right>", L.str[L.navigationOnComposition],
Rms.numKeysEdit ? "<up>,<down>,<left>,<right>" : "<4>,<6>,<2>,<8>", L.str[L.quicknav]
};
TextView tv = new TextView(createString(KEY_MAP), L.str[L.keymap], MixerCanvas.this);
MixerCanvas.this.display.setCurrent(tv);
return true;
}
};
@ -1425,10 +1439,22 @@ abstract public class MixerCanvas extends Canvas implements Runnable {
MenuItem quickItem = new MenuItem(L.str[L.quickCommands], 0) {
public boolean actionPerformed() {
Form form = new Form(L.str[L.quickCommands], createStringItems(Constants.QUICK_COMMANDS));
form.addCommand(CompositionForm.ok);
form.setCommandListener(Options.this);
MixerCanvas.this.display.setCurrent(form);
String[] QUICK_COMMANDS = {
"<1> ", L.str[L.markBegin],
"<2> ", L.str[L.markEnd],
"<3> ", L.str[L.copy],
"<4> ", L.str[L.pasteInsert],
"<5> ", L.str[L.pasteReplace],
"<6> ", L.str[L.pasteOverwrite],
"<7> ", L.str[L.shiftDelete],
"<8> ", L.str[L.clean],
"<9> ", L.str[L.playChannelOnScreen],
"<*> ", L.str[L.undo],
"<0> ", L.str[L.playChannelAll],
"<#> ", L.str[L.redo]
};
TextView tv = new TextView(createString(QUICK_COMMANDS), L.str[L.quickCommands], MixerCanvas.this);
MixerCanvas.this.display.setCurrent(tv);
return true;
}
};
@ -1447,13 +1473,12 @@ abstract public class MixerCanvas extends Canvas implements Runnable {
}
private Item[] createStringItems(String strings[]) {
StringItem[] strItem = new StringItem[strings.length / 2];
private String createString(String[] strings) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < strings.length / 2; i++) {
strItem[i] = new StringItem(strings[i * 2], strings[i * 2 + 1], 1);
strItem[i].setFont(P.smPlain);
sb.append(strings[i * 2]).append(" - ").append(strings[i * 2 + 1]).append('\n');
}
return strItem;
return sb.toString();
}
public void commandAction(Command c, Displayable displayable) {

View File

@ -31,7 +31,7 @@ public class MixerModel extends Thread {
static AbstractFile rmsFile = new RMSFile(),
//localFile,//=rmsFile,
jsr75File;//=rmsFile;// = new JSR75File();
AbstractPlayer crossPlayer = null;
public AbstractPlayer crossPlayer = null;
public MixerModel() {
try {

View File

@ -31,14 +31,6 @@ public class NotesCanvas extends MixerCanvas {
channel = ch;
}
/**
*
* @return
*/
public int getChannel() {
return channel;
}
/**
*
* @return
@ -55,14 +47,6 @@ public class NotesCanvas extends MixerCanvas {
return true;
}
/**
*
* @return
*/
protected String getCurTuneString() {
return "none";
}
/**
*
* @param g

View File

@ -1,7 +1,5 @@
package midedit;
import midedit.media.Composition;
import javax.microedition.lcdui.*;
import java.util.*;
@ -9,165 +7,150 @@ import javax.microedition.lcdui.List;
import main.L;
import main.P;
/**
*
* @author user
*/
public class TempoList extends List implements CommandListener
{
private Composition composition;
private MixerModel model;
private Displayable backForm;
private Vector tempNotes;
static private Command instempo = new Command(L.str[L.insertTempo],Command.ITEM, 1);
static private Command deltempo = new Command(L.str[L.deleteTempo],Command.ITEM, 1);
private int tick = 0;
private int meterNom=4,meterDenom=4;
private int editNum = -1;
public class TempoList extends List implements CommandListener {
/**
*
* @param c
* @param m
* @param back
*/
public TempoList(Composition c,MixerModel m,Displayable back)
{
super(L.str[L.tempo],IMPLICIT);
composition = c;
model = m;
backForm = back;
tempNotes = new Vector();
meterNom = composition.getNom();
meterDenom = 1<<composition.getDenomE();
tick = composition.getTicksPer4() * 4 * meterNom/meterDenom;
private Composition composition;
private MixerModel model;
private Displayable backForm;
private Vector tempNotes;
static private Command instempo = new Command(L.str[L.insertTempo], Command.ITEM, 1);
static private Command deltempo = new Command(L.str[L.deleteTempo], Command.ITEM, 1);
private int tick = 0;
private int meterNom = 4, meterDenom = 4;
private int editNum = -1;
/**
*
* @param c
* @param m
* @param back
*/
public TempoList(Composition c, MixerModel m, Displayable back) {
super(L.str[L.tempo], IMPLICIT);
composition = c;
model = m;
backForm = back;
tempNotes = new Vector();
meterNom = composition.getNom();
meterDenom = 1 << composition.getDenomE();
tick = composition.getTicksPer4() * 4 * meterNom / meterDenom;
System.out.println("tick = " + tick);
this.addCommand(instempo);
this.addCommand(deltempo);
this.addCommand(CompositionForm.back);
this.setCommandListener(this);
int
tmp;
NoteLong notelong;
for(Note note = c.getNoteListByChannel(Composition.DEFAULT_CHANNEL).getFirst(); note != null ; note = note.next)
{
if(note instanceof NoteLong)
{
notelong = (NoteLong)note;
if(notelong.dat[0] == (byte)0xff && notelong.dat[1] == (byte)0x51)
{
tmp = 0;
for (int i = 3; i <= 5; ++i) {
tmp = (tmp << 8) | 0xff & notelong.dat[i];
}
this.addCommand(instempo);
this.addCommand(deltempo);
this.addCommand(CompositionForm.back);
this.setCommandListener(this);
int tmp;
NoteLong notelong;
for (Note note = c.getNoteListByChannel(Composition.DEFAULT_CHANNEL).getFirst(); note != null; note = note.next) {
if (note instanceof NoteLong) {
notelong = (NoteLong) note;
if (notelong.dat[0] == (byte) 0xff && notelong.dat[1] == (byte) 0x51) {
tmp = 0;
for (int i = 3; i <= 5; ++i) {
tmp = (tmp << 8) | 0xff & notelong.dat[i];
}
tempNotes.addElement(notelong);
this.append(getTempoString(note, tmp), null);
}
}
}
tempNotes.addElement(notelong);
this.append(getTempoString(note, tmp), null);
}
}
}
}
private String getTempoString(Note note,int tempMsPer4)
{
int tempBPM;
int mod = (composition.getTicksPer4()<<2)>>(composition.getDenomE());
tempBPM = Composition.getTempBeatPerMin(tempMsPer4);
return ""+note.t/tick+":"+(note.t*meterNom/tick)%meterNom+":"+
note.t%mod+" - "+ tempBPM;
}
private void viewInsertForm(int time,int tempo)
{
Form textBoxTemp = new Form(L.str[L.insertTempo]);
final TextField timeField = new TextField(L.str[L.time], ""+time, 4, TextField.NUMERIC);
textBoxTemp.append(timeField);
final TextField tempoField = new TextField(L.str[L.tempo], "" + tempo, 4, TextField.NUMERIC);
textBoxTemp.append(tempoField);
textBoxTemp.addCommand(CompositionForm.ok);
textBoxTemp.addCommand(P.comCancel);
textBoxTemp.setCommandListener(new CommandListener()
{
public void commandAction(Command command, Displayable displayable)
{
if (command == CompositionForm.ok)
{
if(editNum>=0)
delTemp(editNum);
editNum = -1;
int tempMsPer4 = Composition.getMsPer4(Integer.parseInt(tempoField.getString(),
10));
int time = tick * Integer.parseInt(timeField.getString(), 10);
NoteLong noteTemp = composition.addTemp(time, tempMsPer4);
Note note;
int ind;
for (ind = 0; ind < tempNotes.size(); ++ind) {
note = (NoteLong) tempNotes.elementAt(ind);
if (note.t > time)
break;
}
tempNotes.insertElementAt(noteTemp, ind);
TempoList.this.insert(ind, getTempoString(noteTemp, tempMsPer4), null);
private String getTempoString(Note note, int tempMsPer4) {
int tempBPM;
int mod = (composition.getTicksPer4() << 2) >> (composition.getDenomE());
tempBPM = Composition.getTempBeatPerMin(tempMsPer4);
return "" + note.t / tick + ":" + (note.t * meterNom / tick) % meterNom + ":"
+ note.t % mod + " - " + tempBPM;
}
model.display.setCurrent(TempoList.this);
}
});
model.display.setCurrent(textBoxTemp);
}
private void delTemp(int ind)
{
composition.delTemp( (NoteLong) tempNotes.elementAt(ind));
tempNotes.removeElementAt(ind);
this.delete(ind);
}
private void viewInsertForm(int time, int tempo) {
Form textBoxTemp = new Form(L.str[L.insertTempo]);
final TextField timeField = new TextField(L.str[L.time], "" + time, 4, TextField.NUMERIC);
textBoxTemp.append(timeField);
final TextField tempoField = new TextField(L.str[L.tempo], "" + tempo, 4, TextField.NUMERIC);
textBoxTemp.append(tempoField);
textBoxTemp.addCommand(CompositionForm.ok);
textBoxTemp.addCommand(P.comCancel);
textBoxTemp.setCommandListener(new CommandListener() {
/**
*
* @param command
* @param displayable
*/
public void commandAction(Command command, Displayable displayable)
{
if(command == instempo)
{
editNum = -1;
viewInsertForm(0,120);
public void commandAction(Command command, Displayable displayable) {
if (command == CompositionForm.ok) {
if (editNum >= 0) {
delTemp(editNum);
}
editNum = -1;
}
else if(command == deltempo)
{
int tempMsPer4 = Composition.getMsPer4(Integer.parseInt(tempoField.getString(),
10));
int time = tick * Integer.parseInt(timeField.getString(), 10);
NoteLong noteTemp = composition.addTemp(time, tempMsPer4);
Note note;
int ind;
for (ind = 0; ind < tempNotes.size(); ++ind) {
note = (NoteLong) tempNotes.elementAt(ind);
if (note.t > time) {
break;
}
}
tempNotes.insertElementAt(noteTemp, ind);
TempoList.this.insert(ind, getTempoString(noteTemp, tempMsPer4), null);
if(tempNotes.size()>1)
{
delTemp(this.getSelectedIndex());
}
}
else if(command == CompositionForm.back)
{
model.display.setCurrent(backForm);
}
else
{
int ind = this.getSelectedIndex();
}
model.display.setCurrent(TempoList.this);
}
});
model.display.setCurrent(textBoxTemp);
NoteLong notelong = (NoteLong)tempNotes.elementAt(ind);
int tmp = 0;
for (int i = 3; i <= 5; ++i) {
tmp = (tmp << 8) | 0xff & notelong.dat[i];
}
}
int mod = (composition.getTicksPer4() << 2) >> (composition.getDenomE());
int tempBPM =Composition.getTempBeatPerMin(tmp);
int time = notelong.t/tick;
private void delTemp(int ind) {
composition.delTemp((NoteLong) tempNotes.elementAt(ind));
tempNotes.removeElementAt(ind);
this.delete(ind);
}
editNum = ind;
/**
*
* @param command
* @param displayable
*/
public void commandAction(Command command, Displayable displayable) {
if (command == instempo) {
editNum = -1;
viewInsertForm(0, 120);
viewInsertForm(time,tempBPM);
} else if (command == deltempo) {
}
}
if (tempNotes.size() > 1) {
delTemp(this.getSelectedIndex());
}
} else if (command == CompositionForm.back) {
model.display.setCurrent(backForm);
} else {
int ind = this.getSelectedIndex();
NoteLong notelong = (NoteLong) tempNotes.elementAt(ind);
int tmp = 0;
for (int i = 3; i <= 5; ++i) {
tmp = (tmp << 8) | 0xff & notelong.dat[i];
}
int mod = (composition.getTicksPer4() << 2) >> (composition.getDenomE());
int tempBPM = Composition.getTempBeatPerMin(tmp);
int time = notelong.t / tick;
editNum = ind;
viewInsertForm(time, tempBPM);
}
}
}

View File

@ -1,6 +1,7 @@
package midedit.io;
import java.io.*;
import java.util.Vector;
/**
*
@ -8,6 +9,7 @@ import java.io.*;
*/
public abstract class AbstractFile {
public static final String[] types = {"mid", "midi"};
/**
*
*/
@ -21,22 +23,6 @@ public abstract class AbstractFile {
*/
public abstract String[] list(String pathName);
/**
*
* @return
*/
public final String getLastListPath() {
return lastPath;
}
/**
*
* @param pathName
* @return
* @throws IOException
*/
public abstract boolean isDirectory(String pathName) throws IOException;
/**
*
* @param fileDescriptor
@ -125,7 +111,7 @@ public abstract class AbstractFile {
*
* @return
*/
protected abstract String getPrefix();
public abstract String getPrefix();
/**
*
@ -138,4 +124,50 @@ public abstract class AbstractFile {
* @return
*/
public abstract String getAns();
/**
* Ïóçûðüêîâàÿ ñîðòèðîâêà.
* Ñîðòèðóåò ïî èìåíè, à ïîòîì ïîäûìàåò ïàïêè â íà÷àëî
* @param files âåêòîð ñî ñïèñêîì èì¸í ôàéëîâ è ïàïîê
* @param reverse true - ñîðòèðîâêà ïî óáûâàíèþ
* @return
*/
protected static String[] bubbleSort(Vector files) {
String tmp;
for (int i = files.size() - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if ((tmp = (String) files.elementAt(j)).toLowerCase().compareTo(((String) files.elementAt(j + 1)).toLowerCase()) > 0) {
files.setElementAt((String) files.elementAt(j + 1), j);
files.setElementAt(tmp, j + 1);
}
}
}
String[] arr = sortFiles(files);
return arr;
}
/**
* Ñîðòèðîâêà ôàéëîâ.
* Ïàïêè ïîäíèìàþòñÿ â íà÷àëî ñïèñêà, îñòàëüíûå ôàéëû íå òðîãàþòñÿ.
* @param files âåêòîð ñî ñïèñêîì èì¸í ôàéëîâ è ïàïîê
* @return ìàññèâ ñ îòñîðòèðîâàííûì ñïèñêîì
*/
private static String[] sortFiles(Vector files) {
int length = files.size();
String[] out = new String[length];
int i = 0;
for (int j = 0; j < length; j++) {
if (((String)files.elementAt(j)).indexOf("/") != -1) {
out[i] = ((String)files.elementAt(j));
i++;
}
}
for (int k = 0; k < length; k++) {
if (((String)files.elementAt(k)).indexOf("/") == -1) {
out[i] = ((String)files.elementAt(k));
i++;
}
}
return out;
}
}

View File

@ -35,10 +35,16 @@ public class JSR75File extends AbstractFile {
currDir = (FileConnection) Connector.open("file://" + pathName, Connector.READ);
en = currDir.list();
}
// Ïåðåìåùàåì ñïèñîê â âåêòîð
// Ïåðåìåùàåì ñïèñîê ìèäèøåê â âåêòîð
while(en.hasMoreElements()) {
String s1 = (String) en.nextElement();
vector.addElement(s1);
for(int i=0; i<types.length; i++) {
if ((s1.toLowerCase().endsWith("."+types[i])) || s1.endsWith("/")) {
vector.addElement(s1);
break;
}
}
//vector.addElement(s1);
}
if (currDir != null) currDir.close();
} catch (IOException ion) {
@ -48,29 +54,6 @@ public class JSR75File extends AbstractFile {
return bubbleSort(vector);
}
/**
*
* @param pathName
* @return
* @throws IOException
*/
public boolean isDirectory(String pathName) throws IOException {
FileConnection currDir = null;
if (pathName == null) {
throw new IOException("step -4: pathName==null");
}
currDir = (FileConnection) Connector.open(getPrefix() + pathName);
if (currDir == null) {
throw new IOException("step -3:" + getPrefix() + pathName);
}
return (currDir.exists() && currDir.isDirectory());
}
/**
*
* @param fileDescriptor
@ -248,7 +231,7 @@ public class JSR75File extends AbstractFile {
*
* @return
*/
protected String getPrefix() {
public String getPrefix() {
return "file://";
}
@ -268,49 +251,4 @@ public class JSR75File extends AbstractFile {
return "save ok";
}
/**
* Ïóçûðüêîâàÿ ñîðòèðîâêà.
* Ñîðòèðóåò ïî èìåíè, à ïîòîì ïîäûìàåò ïàïêè â íà÷àëî
* @param files âåêòîð ñî ñïèñêîì èì¸í ôàéëîâ è ïàïîê
* @param reverse true - ñîðòèðîâêà ïî óáûâàíèþ
* @return
*/
private static String[] bubbleSort(Vector files) {
String tmp;
for (int i = files.size() - 1; i >= 0; i--) {
for (int j = 0; j < i; j++) {
if ((tmp = (String) files.elementAt(j)).toLowerCase().compareTo(((String) files.elementAt(j + 1)).toLowerCase()) > 0) {
files.setElementAt((String) files.elementAt(j + 1), j);
files.setElementAt(tmp, j + 1);
}
}
}
String[] arr = sortFiles(files);
return arr;
}
/**
* Ñîðòèðîâêà ôàéëîâ.
* Ïàïêè ïîäíèìàþòñÿ â íà÷àëî ñïèñêà, îñòàëüíûå ôàéëû íå òðîãàþòñÿ.
* @param files âåêòîð ñî ñïèñêîì èì¸í ôàéëîâ è ïàïîê
* @return ìàññèâ ñ îòñîðòèðîâàííûì ñïèñêîì
*/
private static String[] sortFiles(Vector files) {
int length = files.size();
String[] out = new String[length];
int i = 0;
for (int j = 0; j < length; j++) {
if (((String)files.elementAt(j)).indexOf("/") != -1) {
out[i] = ((String)files.elementAt(j));
i++;
}
}
for (int k = 0; k < length; k++) {
if (((String)files.elementAt(k)).indexOf("/") == -1) {
out[i] = ((String)files.elementAt(k));
i++;
}
}
return out;
}
}

View File

@ -1,6 +1,7 @@
package midedit.io;
import java.io.*;
import java.util.Vector;
import javax.microedition.rms.*;
/**
@ -17,8 +18,19 @@ public class RMSFile extends AbstractFile {
private int recordID = 0;
public String[] list(String pathName) {
Vector vector = new Vector();
String[] fileList = RecordStore.listRecordStores();
return fileList;
for (int idx = 0; idx < fileList.length; idx++) {
String s1 = fileList[idx];
for(int i=0; i<types.length; i++) {
if (s1.toLowerCase().endsWith("."+types[i])) {
vector.addElement(s1);
break;
}
}
}
// Ñîðòèðóåì è âîçâðàùàåì ñïèñîê
return bubbleSort(vector);
}
public int write(int fileDescriptor,
@ -193,11 +205,7 @@ public class RMSFile extends AbstractFile {
return isLocal;
}
public boolean isDirectory(String pathName) throws IOException {
return false;
}
protected String getPrefix() {
public String getPrefix() {
return "";
}
}

View File

@ -20,7 +20,6 @@ public class Composition {
*/
public static final int DEFAULT_CHANNEL = 0;
private int timeNoteOff;
private int volume;
private int ticksPer4;
/**
*
@ -63,7 +62,6 @@ public class Composition {
instruments[Constants.DRUMS_CHANNEL] = -1;
isSoloMode = false;
volume = 60;
setTicksPer4(240);
undoableAction = new UndoableAction(this);
@ -408,22 +406,6 @@ public class Composition {
return ticksPer4 / 8;
}
/**
*
* @param v
*/
public void setVolume(int v) {
volume = v;
}
/**
*
* @return
*/
public int getVolume() {
return volume;
}
/**
*
* @param ch

View File

@ -0,0 +1,56 @@
package midedit.media;
import midedit.MixerModel;
import javax.microedition.media.*;
import java.io.*;
/**
*
* @author user
*/
public class PreviewPlayer implements PlayerListener {
private boolean isPlaying = false;
private Player player;
public void playerUpdate(Player player, java.lang.String event, java.lang.Object eventData) {
if (event.equals(STARTED)) {
isPlaying = true;
return;
}
if (event.equals(STOPPED) || event.equals(CLOSED) || event.equals(END_OF_MEDIA)) {
isPlaying = false;
}
return;
}
public void play(String path) throws Exception {
if (player != null) {
player.close();
}
InputStream is = MixerModel.getLocalFile().getInputStreambyURL(path);
player = Manager.createPlayer(is, "audio/midi");
player.addPlayerListener(this);
player.realize();
player.start();
}
public void stop() throws Exception {
if (player != null) {
player.stop();
}
}
public void close() {
if (player != null) {
player.close();
}
player = null;
}
public boolean isPlaying() {
return isPlaying;
}
}

View File

@ -1,5 +1,6 @@
package ui;
import java.io.IOException;
import util.FWCashe;
import main.P;
import main.Main;
@ -9,6 +10,7 @@ import java.util.*;
import javax.microedition.lcdui.*;
import midedit.CompositionForm;
import midedit.io.AbstractFile;
import midedit.media.PreviewPlayer;
/**
* Ôàéëîâûé ìåíåäæåð
@ -45,6 +47,9 @@ public class FileManager extends Canvas {
/** Ôàéëîâàÿ ñèñòåìà */
private AbstractFile file;
/** Ïðåäïðîñëóøèâàíèå */
private PreviewPlayer pw;
/** Èçîáðàæåíèÿ è èêîíêè ãðóïï ôàéëîâ */
//private Image folderIcon, imageIcon, fileIcon, fontIcon, videoIcon;
@ -77,6 +82,7 @@ public class FileManager extends Canvas {
pathFile = s;
file = aFile;
pw = new PreviewPlayer();
fontCashe = FWCashe.getCache(P.smBold);
CursorY = startPrintFile = curFiles = numFiles = 0;
@ -86,10 +92,10 @@ public class FileManager extends Canvas {
// Ñïèñîê ïóíêòîâ ìåíþ
menu = new String[] {
L.str[L.open],
L.str[L.play],
L.str[L.playStop],
L.str[L.delete],
L.str[L.cancel]
};
update();
}
@ -105,7 +111,8 @@ public class FileManager extends Canvas {
// ìåíþ ñîõðàíåíèÿ
menu = new String[] {
L.str[L.saveInThisFolder],
// L.str[L.newFolder],
L.str[L.newFolder],
L.str[L.delete],
L.str[L.cancel]
};
}
@ -125,15 +132,18 @@ public class FileManager extends Canvas {
if (menu[0].equals(L.str[L.saveInThisFolder])) {
// Ïóíêòû ïðè ñîõðàíåíèè
vt.addElement(L.str[L.saveInThisFolder]);
//vt.addElement(L.str[L.newFolder]);
if(!P.isRMSMode) vt.addElement(L.str[L.newFolder]);
} else {
// Ïóíêòû ïðè îòêðûòèè
vt.addElement(L.str[L.open]);
if (getType(TypeMid, data[curFiles])) {
vt.addElement(L.str[L.play]);
//vt.addElement(L.str[L.openToBuffer]);
if (numFiles > 0) {
// Ïóíêòû ïðè îòêðûòèè
vt.addElement(L.str[L.open]);
if (getType(TypeMid, data[curFiles])) {
vt.addElement(L.str[L.playStop]);
//vt.addElement(L.str[L.openToBuffer]);
}
}
}
if((numFiles > 0) && !data[curFiles].endsWith("/")) vt.addElement(L.str[L.delete]);
vt.addElement(L.str[L.cancel]);
menu = new String[vt.size()];
vt.copyInto(menu);
@ -254,17 +264,39 @@ public class FileManager extends Canvas {
nextDir(fileSelected);
P.path = pathFile;
}
else if (cur.equals(L.str[L.play])) {
else if (cur.equals(L.str[L.playStop])) {
// Ïðîèãðûâàíèå
/*if (getType(TypeMid, fileSelected)) {
Image img = JSR75.getImage(pathFile, fileSelected);
PPM.midlet.imgname = fileSelected.substring(0, fileSelected.lastIndexOf('.'));
PPM.dsp.setCurrent(new Viewer(img, this));
} else if (getType(TypePpf, fileSelected)) {
Image img = JSR75.getPPFImage(pathFile, fileSelected);
PPM.dsp.setCurrent(new Viewer(img, this));
if (getType(TypeMid, fileSelected)) {
if(pw.isPlaying()) {
// Îñòàíîâêà ïðîèãðûâàíèÿ
try {
pw.stop();
pw.close();
} catch (Exception ex) {
ex.printStackTrace();
}
} else {
String openPath = fileSelected;
if(!P.isRMSMode) openPath = file.getPrefix() + pathFile + fileSelected;
try {
pw.play(openPath);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
else if (cur.equals(L.str[L.delete])) {
if(!fileSelected.endsWith("/")) {
String fileToDelete = fileSelected;
if(!P.isRMSMode) fileToDelete = pathFile + fileSelected;
try {
file.delete(fileToDelete);
update();
} catch (IOException ex) {
ex.printStackTrace();
}
}
P.path = pathFile;*/
}
else if (cur.equals( L.str[L.cancel])) {
// Îòìåíà
@ -289,11 +321,11 @@ public class FileManager extends Canvas {
Main.dsp.setCurrent(new SaveName_frm(this, pathFile));
}
/*else if (cur.equals(L.str[L.newFolder])) {
else if (cur.equals(L.str[L.newFolder])) {
// Íîâàÿ ïàïêà
NewFolderForm newFolder = new NewFolderForm(L.str[L.newFolder], this, pathFile);
PPM.dsp.setCurrent(newFolder);
}*/
Main.dsp.setCurrent(newFolder);
}
}
/** Çàãðóçêà èçîáðàæåíèé */
@ -365,7 +397,7 @@ public class FileManager extends Canvas {
}
public void keyPressed(int i) {
super.keyPressed(i);
int ga = getGameAction(i);
if (showMenu) {
// Îòêðûòî ìåíþ - ïåðåìåùàåìñÿ ïî íåìó

View File

@ -216,7 +216,7 @@ public class Menu extends Canvas {
}
// Íàñòðîéêè
else if(v.equals(L.str[L.options])) {
Main.dsp.setCurrent(new SettingsUI(this));
Main.dsp.setCurrent(new SettingsForm(this));
}
// Ïîìîùü
else if(v.equals(L.str[L.help])) {

60
src/ui/NewFolderForm.java Normal file
View File

@ -0,0 +1,60 @@
package ui;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import javax.microedition.lcdui.*;
import main.L;
import main.P;
/**
* Ñîçäàíèå íîâîé ïàïêè
* @author aNNiMON
*/
public class NewFolderForm extends Form implements CommandListener {
private Command ok, back;
private FileManager fm;
private String basePath;
private TextField newFolderTF;
public NewFolderForm(String title, FileManager prev, String p) {
super(title);
basePath = p;
fm = prev;
newFolderTF = new TextField("", "NewFolder", 60, TextField.ANY);
ok = new Command(L.str[L.ok], Command.OK, 1);
back = new Command(L.str[L.back], Command.BACK, 3);
append(newFolderTF);
addCommand(back);
addCommand(ok);
setCommandListener(NewFolderForm.this);
}
public void commandAction(Command c, Displayable d) {
if (c == back) {
fm.setCurrent(false);
} else if ((c == ok || c == List.SELECT_COMMAND)) {
makeFile(basePath, newFolderTF.getString());
basePath = null;
newFolderTF = null;
fm.pathFile = P.path;
fm.setCurrent(true);
}
}
/**
* Ñîçäàòü ôàéë èëè ïàïêó
* @param path ïóòü
* @param name èìÿ ñîçäàâàåìîãî ôàéëà èëè ïàïêè
*/
private void makeFile(String path, String name) {
try {
FileConnection fc = (FileConnection) Connector.open("file://" + path + name);
fc.mkdir();
P.path += name + "/";
fc.close();
} catch (IOException io) {
}
}
}

View File

@ -7,7 +7,7 @@ import main.*;
* Êëàññ íàñòðîåê
* @author aNNiMON
*/
public class SettingsUI extends Form implements CommandListener {
public class SettingsForm extends Form implements CommandListener {
private static final String[] langAppList = {"English", "Ðóññêèé"};
private static final String[] langInstrList = {"English", "Ðóññêèé"};
@ -21,7 +21,7 @@ public class SettingsUI extends Form implements CommandListener {
private Gauge noteWidthGauge;
private TextField tempDirField;
public SettingsUI(Displayable prev) {
public SettingsForm(Displayable prev) {
super(L.str[L.options]);
previousScreen = prev;
initComponents();
@ -35,7 +35,7 @@ public class SettingsUI extends Form implements CommandListener {
append(tempDirField);
addCommand(ok);
addCommand(back);
setCommandListener(SettingsUI.this);
setCommandListener(SettingsForm.this);
}
private void initComponents() {
@ -44,18 +44,18 @@ public class SettingsUI extends Form implements CommandListener {
back = new Command(L.str[L.back], Command.BACK, 3);
// ßçûê
langChoice = new ChoiceGroup("Language", ChoiceGroup.EXCLUSIVE, langAppList, null);
langInstr = new ChoiceGroup("Instruments Language", ChoiceGroup.EXCLUSIVE, langInstrList, null);
langChoice = new ChoiceGroup(L.str[L.language], ChoiceGroup.EXCLUSIVE, langAppList, null);
langInstr = new ChoiceGroup(L.str[L.instrlang], ChoiceGroup.EXCLUSIVE, langInstrList, null);
// Íàñòðîéêè ðàçìåðà íîò
noteHeightGauge = new Gauge("Note Height", true, 10, Rms.noteHeight);
noteWidthGauge = new Gauge("Note Length", true, 10, Rms.noteWidth);
noteWidthGauge = new Gauge(L.str[L.noteWidth], true, 10, Rms.noteWidth);
noteHeightGauge = new Gauge(L.str[L.noteHeight], true, 10, Rms.noteHeight);
// Óïðàâëåíèå
controlChoice = new ChoiceGroup(L.str[L.navigation], ChoiceGroup.MULTIPLE);
// Âðåìåííàÿ ïàïêà
tempDirField = new TextField("Temp Dir", Rms.tempDir, 64, 4);
tempDirField = new TextField(L.str[L.tempDir], Rms.tempDir, 64, 4);
}
private void setComponentsParameters() {

View File

@ -123,6 +123,12 @@ public class TextView extends Canvas {
protected void keyRepeated(int key) {
keyPressed(key);
}
protected void pointerPressed(int pix, int piy) {
int q = UI.getSoftBarHeight();
if(pix>w-2*q && piy>h-q) Main.dsp.setCurrent(dspl);
repaint();
}
/**
* Óñòàíîâêà íåîáõîäèìûõ ïàðàìåòðîâ äëÿ òåêñòà

View File

@ -56,34 +56,13 @@ public class UI {
g.drawString(title, w / 2, softBarHeight, Graphics.HCENTER | Graphics.BOTTOM);
}
/**
* Îòðèñîâêà èíòåðôåéñà îêíà
* @param g êîíòåêñò ãðàôèêè
* @param title íàäïèñü çàãîëîâêà
* @param rightsoft íàäïèñü íà ïðàâîì ñîôòå
*/
public static void drawMenuInterface(Graphics g, String title, String rightsoft) {
drawTitle(g, title);
drawSoftBar(g, "", rightsoft);
}
/**
* Îòðèñîâêà ñîñòîÿíèÿ ïî ìàññèâó (â ýôôåòêàõ)
* @param g êîíòåêñò ãðàôèêè
* @param dd ìàññèâ ñî çíà÷åíèÿìè
*/
public static void drawStatusBar(Graphics g, int[] dd) {
drawStatusBar(g, Math.abs(dd[0]) + dd[1], Math.abs(dd[2]) + Math.abs(dd[0]));
}
/**
* Отрисовка состояния по массиву (в эффетках)
* @param g контекст графики
* @param cur текущее состояние
* @param all всего
*/
private static void drawStatusBar(Graphics g, int cur, int all) {
public static void drawStatusBar(Graphics g, int cur, int all) {
int w = g.getClipWidth();
int h = g.getClipHeight();
int sw = w / 20;
@ -141,53 +120,6 @@ public class UI {
}
}
/**
* Îðòèñîâêà ïðîçðà÷íîãî ãðàäèåíòà
* @param g êîíòåêñò ãðàôèêè
* @param color1 âåðõíèé öâåò ãðàäèåíòà
* @param color2 íèæíèé öâåò ãðàäèåíòà
* @param x1 X
* @param y1 Y
* @param w øèðèíà
* @param h âûñîòà
*/
private static void drawRGB(Graphics g, int color1, int color2, int x1, int y1, int w, int h) {
int a1 = (color1 >> 24) & 0xff;
int a2 = (color2 >> 24) & 0xff;
if(a1>253 && a2>253) {
drawRect(g, color1, color2, x1, y1, w, h);
return;
}
int r1 = (color1 >> 16) & 0xff;
int g1 = (color1 >> 8) & 0xff;
int b1 = color1 & 0xff;
int r2 = (color2 >> 16) & 0xff;
int g2 = (color2 >> 8) & 0xff;
int b2 = color2 & 0xff;
int count = h/3;
if (count<0) count=-count;
if (count<8) count = 8;
int crd1, crd2;
for (int i = count - 1; i >= 0; i--) {
crd1 = i * h / count + y1;
crd2 = (i + 1) * h / count + y1;
if (crd1 == crd2) continue;
int[] pixelArray = new int[w * (crd2 - crd1)];
int color = (i * (a2 - a1) / (count - 1) + a1) << 24 |
((i * (r2 - r1) / (count - 1) + r1) << 16) |
((i * (g2 - g1) / (count - 1) + g1) << 8) |
(i * (b2 - b1) / (count - 1) + b1);
for (int zi = 0; zi < pixelArray.length; zi++) {
pixelArray[zi] = color;
}
g.drawRGB(pixelArray, 0, w, x1, crd1, w, crd2 - crd1, true);
}
}
/**
* Отрисовка вертикального градиента
* @param graphics контекст графики

View File

@ -27,18 +27,6 @@ public class BufDataInputStream extends InputStream implements DataInput {
return blen - bpos + is_available;
}
public int getCapacity() {
return capacity;
}
public void seek(int pos) {
bpos = pos;
}
public int tell() throws IOException {
return capacity - available();
}
public int read() throws IOException {
if (bpos > buffer.length) {
return -1;
@ -46,15 +34,6 @@ public class BufDataInputStream extends InputStream implements DataInput {
return ((int) buffer[bpos++]) & 0xFF;
}
public int readBack() throws IOException {
if (bpos == 0) {
if (available() == capacity) return -1;
int old = tell();
bpos = old;
}
return ((int) buffer[--bpos]) & 0xFF;
}
public boolean readBoolean() throws IOException {
int r = read();
if (r == -1) {
@ -151,27 +130,6 @@ public class BufDataInputStream extends InputStream implements DataInput {
throw new UTFDataFormatException();
}
public char readCharBackUTF() throws IOException, UTFDataFormatException {
int b, c, d;
d = readBack();
c = readBack();
b = readBack();
if (d == -1) {
return (char) -1;
}
if ((d & 0x80) == 0) {
read();
read();
return (char) d;
} else if ((c & 0xE0) == 0xC0 && (d & 0xC0) == 0x80) {
read();
return (char) (((c & 0x1F) << 6) | (d & 0x3F));
} else if ((b & 0xF0) == 0xE0 && (c & 0xC0) == 0x80 && (d & 0xC0) == 0x80) {
return (char) (((b & 0x0F) << 12) | ((c & 0x3F) << 6) | (d & 0x3F));
}
throw new UTFDataFormatException();
}
public boolean checkBOM() {
try {
if (available() < 3 ||
@ -185,24 +143,4 @@ public class BufDataInputStream extends InputStream implements DataInput {
}
return true;
}
public boolean find(byte[] b) {
if (b == null) return false;
int po = 0;
for (int i = bpos + 1; i < buffer.length; i++) {
po = 0;
if (buffer[i] == b[0]) {
for (int j = 0; j < b.length; j++) { //System.out.println("b "+b[j]);
if (buffer[i + j] == b[j]) {
po += 1;
} else break;
}
}
if (po == b.length) {
bpos = i;
break;
}
}
return (po > 0);
}
}

View File

@ -1,10 +1,8 @@
package util;
public class StringEncoder {
protected static char cp1251[] = {
protected static char[] cp1251 = {
'\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415', '\u0416',
'\u0417', '\u0418', '\u0419', '\u041A', '\u041B', '\u041C', '\u041D',
'\u041E', '\u041F', '\u0420', '\u0421', '\u0422', '\u0423', '\u0424',
@ -30,24 +28,4 @@ public class StringEncoder {
}
return (char) ich;
}
/** Êîäèðîâàòü ñèìâîë â windows-1251 */
public static byte encodeCharCP1251(char ch) {
if (ch > 0 && ch < 128) {
return (byte) ch;
} else if (ch == 0x401) {
return -88; // ¨
} else if (ch == 0x404) {
return -86; // ª
} else if (ch == 0x407) {
return -81; // ¯
} else if (ch == 0x451) {
return -72; // ¸
} else if (ch == 0x454) {
return -70; // º
} else if (ch == 0x457) {
return -65; // ¿
}
return (byte) ((byte) (ch) + 176);
}
}