This commit is contained in:
Victor 2018-11-14 19:46:08 +02:00
parent fb2e469b6d
commit 79af0bb07a
72 changed files with 2579 additions and 1873 deletions

208
res/bin/en.instr Normal file
View File

@ -0,0 +1,208 @@
Drums
Acoustic Grand
Bright Acoustic
Electric Grand
Honky-Tonk
Electric Piano 1
Electric Piano 2
Harpsichord
Clav
Celesta
Glockenspiel
Music Box
Vibraphone
Marimba
Xylophone
Tubular Bells
Dulcimer
Drawbar Organ
Percussive Organ
Rock Organ
Church Organ
Reed Organ
Accoridan
Harmonica
Tango Accordian
Acoustic Guitar(nylon)
Acoustic Guitar(steel)
Electric Guitar(jazz)
Electric Guitar(clean)
Electric Guitar(muted)
Overdriven Guitar
Distortion Guitar
Guitar Harmonics
Acoustic Bass
Electric Bass(finger)
Electric Bass(pick)
Fretless Bass
Slap Bass 1
Slap Bass 2
Synth Bass 1
Synth Bass 2
Violin
Viola
Cello
Contrabass
Tremolo Strings
Pizzicato Strings
Orchestral Strings
Timpani
String Ensemble 1
String Ensemble 2
SynthStrings 1
SynthStrings 2
Choir Aahs
Voice Oohs
Synth Voice
Orchestra Hit
Trumpet
Trombone
Tuba
Muted Trumpet
French Horn
Brass Section
SynthBrass 1
SynthBrass 2
Soprano Sax
Alto Sax
Tenor Sax
Baritone Sax
Oboe
English Horn
Bassoon
Clarinet
Piccolo
Flute
Recorder
Pan Flute
Blown Bottle
Skakuhachi
Whistle
Ocarina
Lead 1 (square)
Lead 2 (sawtooth)
Lead 3 (calliope)
Lead 4 (chiff)
Lead 5 (charang)
Lead 6 (voice)
Lead 7 (fifths)
Lead 8 (bass+lead)
Pad 1 (new age)
Pad 2 (warm)
Pad 3 (polysynth)
Pad 4 (choir)
Pad 5 (bowed)
Pad 6 (metallic)
Pad 7 (halo)
Pad 8 (sweep)
FX 1 (rain)
FX 2 (soundtrack)
FX 3 (crystal)
FX 4 (atmosphere)
FX 5 (brightness)
FX 6 (goblins)
FX 7 (echoes)
FX 8 (sci-fi)
Sitar
Banjo
Shamisen
Koto
Kalimba
Bagpipe
Fiddle
Shanai
Tinkle Bell
Agogo
Steel Drums
Woodblock
Taiko Drum
Melodic Tom
Synth Drum
Reverse Cymbal
Guitar Fret Noise
Breath Noise
Seashore
Bird Tweet
Telephone Ring
Helicopter
Applause
Gunshot
Piano
Chromatic Percussion
Organ
Guitar
Bass
Strings & Orchestral instruments
Ensemble
Brass
Reed
Pipe
Synth Lead
Synth Pad
Synth SFX
Ethnic Misc
Percussive
SFX
HighQ
Slap
Scratch Push
Scratch Pull
Sticks
Square Click
Metronome Click
Metronome bell
Acoustic Bass Drum
Bass Drum 1
Side Stick
Acoustic Snare
Hand Clap
Electric Snare
Low Floor Tom
Closed Hi-Hat
High Floor Tom
Pedal Hi-Hat
Low Tom
Open Hi-Hat
Low-Mid Tom
Hi-Mid Tom
Crash Cymbal 1
High Tom
Ride Cymbal 1
Chinese Cymbal
Ride Bell
Tambourine
Splash Cymbal
Cowbell
Crash Cymbal 2
Vibraslap
Ride Cymbal 2
Hi Bongo
Low Bongo
Mute Hi Conga
Open Hi Conga
Low Conga
High Timbale
Low Timbale
High Agogo
Low Agogo
Cabasa
Maracas
Short Whistle
Long Whistle
Short Guiro
Long Guiro
Claves
Hi Wood Block
Low Wood Block
Mute Cuica
Open Cuica
Mute Triangle
Open Triangle
Shaker
Jingle Bells
Belltree
Castanets
Mute Surdo
Open Surdo

103
res/bin/en.lang Normal file
View File

@ -0,0 +1,103 @@
New
Resume
About
Open
Save
Save As
File
Tools
Exit
RMS
Cancel
Save
Error
Opening Error
ListInstruments
Impossible
Saved
Saving Error
Saving
Opening
Chooser error
Update error
Api error
Instruments
Menu
Back
Insert note with current attributes
To change note's attribute (e.g. lenght) delete note, if already insert,choose attribute (<7>), change it (<0>,<*>,<#>) and insert a new note
Delete note
Undo
Note Volume '+'\'-'
Play from current position/Stop
Play note on cursor
Select note's attribute
Change selected note's attribute
Stop play
Navigation on composition
Quick navigation
Mark Begin
Mark End
Copy
Paste Insert
Paste Replace
Paste Overwrite
Delete&Shift
Clean
Play Channel On Screen
Undo
Play Channel All
Redo
Add Instrument
Edit
Set Instrument
Del Instrument
Tempo Box
Volume Box
Meter
Play
Play origin
Ok
Up One Level
Delete
Choose folder
Open file
Please, wait
Updating list
Save in this Folder
Insert Tempo
Delete Tempo
Temp
Time(Measure)
Seek
Meter
numerator
denominator(negative power of two)
Instruments
Meter = numerator/ (2^denominator). For example, use 4/4 (numerator=4; denominator=2) or 6/8 (numerator=6; denominator=3)
Delta
Play/Stop
Play all
Play screen
Track all
Track screen
Mark
Mark Begin
Mark End
UnMark
Modify block
Modify Mode
Copy
Paste
Insert
Replace
Blend
Clean Sel
Redo
Help
Key Map
Quick Commands
Navigation
Nums, otherWise KeyPad, when edit notes:
Icons otherWise List, inMain Menu
*****

208
res/bin/ru.instr Normal file
View File

@ -0,0 +1,208 @@
Ударные
Рояль
Концертный(осветленный) рояль
Электронный рояль
Расстроенное(таперское) пианино
Электропиано
Электропиано 2
Клавесин
Клавинет (клавесин 2)
Челеста
Колокольчики (бутылки)
'Музыкальная шкатулка'
Вибрафон
Маримба
Ксилофон
Колокола (трубчатые)
Цимбалы (сантур)
Электронный орган
Орган с перкуссией (с ударной атакой)
Рок-орган
Церковный орган
Деревянный (язычковый) органчик
Аккордеон
Гармоника
'Танго'-аккордеон
Гитара-нейлон
Гитара-сталь
Джазовая электрогитара
Акустическая электрогитара
Засурдиненная (приглушенная) электрогитара
Овердрайв (перегруз)
Дисторшн (исказитель)
Флажолет
Контрабас-пицикато
Бас-гитара пальцевым щипком
Бас-гитара медиатором
Бездадовый бас
Бас-слэп 1
Бас-слэп 2
Синт-бас 1
Синт-бас 2
Скрипка
Альт
Виолончель
Контрабас
Тремоло струнных
Пицикато струнных
Арфа
Литавры
Струнная группа 1
Струнная группа 2
Синтетические струнные 1
Синтетические струнные 2
Хор на слог 'а'
Голос на слог 'о'
Синтетический голос
'Удар' (весь оркестр)
Труба
Тромбон
Туба
Труба с сурдиной
Валторна
Медная группа
Синтетические медные 1
Синтетические медные 2
Сопрано-саксофон
Альт-саксофон
Тенор-саксофон
Баритон-саксофон
Гобой
Английский рожок
Фагот
Кларнет
Флейта-пикколо
Флейта
Блокфлейта
Пан-флейта
Дуновение в бутылки
Шакухачи
Свисток
Окарина
Соло-гитара (прямоугольная волна)
Соло-гитара (синусоидальная волна)
Calliope-гитара
Chiff-гитара
Charang-гитара
Соло-гитара (голосовой тембр)
Соло-гитара (с квинтовым обертоном)
Бас и соло-гитара
Синтезаторный звук нью-эйдж
Теплый синт-звук
Полисинтезатор
Синт-'хор'
Воздушный (смычковый синт-звук)
Металлический синт
Ореол
Развертывающийся(качающийся) звук
Дождь
Звуковая дорожка
Хрусталь (кристалл)
Атмосфера
Яркость
Гоблины
(Качающееся) эхо
Звездный (SciFi)
Ситар
Банджо
Шамисен
Кото
Калимба
Волынка (Bagpipe)
Уличная скрипка
Санаи (Shanai)
Колокольчик
Агого
Стальные барабаны
Гольцтон (деревянные коробочки)
Таико
Мелодик том
Электронные барабаны
Тарелка 'задом наперед'(реверс)
Свист гитарной струны (шум ладов)
Придыхание
Прибой
Птицы
Телефонный звонок
Вертолет
Алодисменты
Выстрел
Фортепиано
Хроматиккаа и Перкуссия
Орган
Гитара
Бас
Струнные и Оркестровые
Ансамбль
Медные
Тростник
Труба
Ведущий синтезатор
Ситезатор 2-й голос
Синт-эффекты
Народные
Перкуссия
Звуковые эффекты
Высокое Q
Слэп
Царапанье (от себя)
Царапанье (к себе)
Барабанные палочки
Электронный метроном
Метроном
Звенящий метроном
Акустический большой барабан
Большой барабан
Удар по ободу
Акустический малый барабан
Хлопок в ладоши
Электрический малый барабан
Низкий напольный томтом
Закрытый хэт
Высокий напольный томтом
Хэт (педалью)
Низкий томтом
Открытый хэт
Низкий средний томтом
Высокий средний томтом
Крэш-тарелка
Высокий томтом
Райд-тарелка
Китайская тарелка
Райд-тарелка (по центральной части)
Бубен
Сплэш-тарелка
Коровий (альпийский) колокольчик
Крэш-тарелка 2
Вибрирующий слэп
Райд-тарелка 2
Высокий бонго
Низкий бонго
Закрытый высокий бонго
Открытый высокий бонго
Низкая конга
Высокий тимбал
Низкий тимбал
Высокий агого
Низкий агого
Cabasa Кабаса
Маракас
Короткий свисток
Длинный свисток
Короткое гуиро
Длинное гуиро
Клавес
Высокая коробочка
Низкая коробочка
Закрытая куика
Открытая куика
Закрытый треугольник
Открытый треугольник
Шейкер
Бубенцы
Бунчук
Кастаньеты
Закрытый сурдо
Открытый сурдо

103
res/bin/ru.lang Normal file
View File

@ -0,0 +1,103 @@
Новый
Продолжить
О программе
Открыть
Сохранить
Сохранить как
Файл
Настройки
Выход
РМС
Отмена
Сохранить
Ошибка
Ошибка открытия
Список инструментов
Невозможно
Сохранено
Ошибка сохранения
Сохранение
Открытие
Ошибка выбора файла
Ошибка обновления
Ваш телефон не поддерживает необходимые Api
Инструменты
Меню
Назад
Поставить ноту с текущими атрибутами
Для того, чтобы изменить атрибут ноты (напр длину), удалите ноту, если уже поставлена, выберите атрибут (<7>), измените его (<0>,<*>,<#>) и ставьте ноту
Удалить ноту
Откат
Громкость ноты '+'\'-'
Играть с текущей позиции/Стоп
Играть ноту под курсором
Выбрать атрибут ноты
Изменение атрибута
Стоп
Навигация по композиции
Быстрая навигация
Начало выделения
Конец выделения
Копировать
Вставить (раздвинуть)
Вставить (наложить)
Вставить (перезаписать)
Удалить и сдвинуть
Очистить
Играть канал с экрана
Отмена действия
Играть канал
Вернуть дейсвие
Добавить инструмент
Редактировать
Установить инструмент
Удалить инструмент
Темп-бокс
Громкость
Размер
Играть
Играть оригинал
Ok
Назад
Удалить
Выбрать папку
Открытый файл
Пожалуйста, подождите
Обновление списка
Сохранить здесь
Вставить Темп
Удалить Темп
Темп
Время(Мера)
Поиск
Размер
числитель
знаменатель(2 в степени)
Инструменты
Метр = числитель/ (2^знаменатель). Например, используйте 4/4 (numerator=4; denominator=2) или 6/8 (numerator=6; denominator=3)
Дельта-смещение
Воспроизведение
Играть все
Играть с экрана
Весь трэк
Трэк с экрана
Отметить
Конец Отметки
Начало отметки
Снять отметку
Изменение блока
Режим модификации
Копия
Вставить
Раздвинуть
Заменить
Наложить
Очистить буфер
Вернуть
Подсказка
Клавиши
Быстрые Команды
Навигация
Цифрами, иначе джойстиком, при редактировании нот
Иконки, иначе список, в главном меню
****

BIN
res/bin/test.mid Normal file

Binary file not shown.

BIN
res/img/attr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 B

BIN
res/img/attractive.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

BIN
res/img/attrcur.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 165 B

BIN
res/img/attrdata.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

BIN
res/img/attrdatacur.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 B

BIN
res/img/dot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 B

BIN
res/img/en_GB.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 588 B

BIN
res/img/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

BIN
res/img/keyPad.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 B

BIN
res/img/main/0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
res/img/main/1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
res/img/main/2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
res/img/main/3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
res/img/main/4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
res/img/main/5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
res/img/main/6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
res/img/main/7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
res/img/main/8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
res/img/notes0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

BIN
res/img/notes1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

BIN
res/img/nums0m.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

BIN
res/img/nums1m.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 B

BIN
res/img/ru_RU.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 543 B

BIN
res/img/triplet.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 B

11
res/lang/about_en Normal file
View File

@ -0,0 +1,11 @@
MidEdit - mobile midi editor.
Author: Bingo (http://bing.at.tut.by)
Modifications:
Cryingangel (http://midedit.wen.ru)
aNNiMON (http://annimon.com)
Thanks to:
Cyber_PUNK - adapted for Nokia
maxtr86 - adapted for Sony Ericsson
Helion810, Dark_Dancer - ideas, beta-testing
segOro - graphics

11
res/lang/about_ru Normal file
View File

@ -0,0 +1,11 @@
MidEdit - ìîáèëüíûé ðåäàêòîð midi.
Àâòîð: Bingo (http://bing.at.tut.by)
Ìîäèôèêàöèè:
Cryingangel (http://midedit.wen.ru)
aNNiMON (http://annimon.com)
Áëàãîäàðíîñòè:
Cyber_PUNK - àäàïòèðîâàë äëÿ Nokia
maxtr86 - àäàïòèðîâàë äëÿ Sony Ericsson
Helion810, Dark_Dancer - èäåè è áåòà-òåñòèðîâàíèå
segOro - ãðàôèêà

361
res/lang/help Normal file
View File

@ -0,0 +1,361 @@
#blue ProPaintMobile Help
#green
Автор: aNNiMON
Благодарности: ExploZeR и Бойко Егореоkill)
#red
-= Общие положения =- #def
ProPaintMobile - функциональный и мощный графический редактор.
Позволяет как создавать свои рисунки, так и редактировать существующие. Также есть возможность, не выходя из приложения, получать фотографии с камеры, захватывать кадры из видео, собирать анимацию из картинок любого формата, разбирать gif, psd и swf файлы, запускать aps-скрипты и т.д.
#red
-= Содержание =- #def
1. История версий.
- 2.3
- 2.2
- 2.1
- 2.0
2. Управление.
- Рабочая область.
- Выбор инструментов, курсора, отмена.
- Применение эффектов, эффектор шрифтов.
- Выбор цвета.
- Помощь, Text2Image.
3. Описание инструментов.
4. Описание пунктов меню.
5. Прочие функции и хитрости.
- Сборка GIF анимации
- Сжатие PNG
- Добавление шрифтов и кистей
- Настройка эффектов
- Шрифты
- Эффектор шрифтов
- Выделение произвольной области
- Захват кадра
- Режим мультицветного градиента
- Режим Text2Image
- Галерея
- Дополнительная информация и уроки
#red
-= Нововведения версии 2.3 =- #def
- Оптимизировано больше половины эффектов в целях увеличения быстродействия. Добавлены новые. Исправлены недоработки в некоторых эффектах.
- Смена фона при рисовании прозрачных изображений перекочевала с кнопки ## на горячую клавишу ##+9
- Ускорена работа масштабирования во всех модулях программы.
- Окно зума теперь показывает текущее применение инструмента.
- В "Размер растра" добавлена новая интерполяция - Bresenham.
- Добавлен инструмент "Ластик". Остальные инструменты теперь микшируют прозрачность.
- Изменён Ночной скин. В остальных скинах также немного подобраны цвета.
- Добавил настройку клавиши для создания скриншота экрана. Если не планируете использовать, поставьте значение 999. Идею подал black609angel.
- В меню "Правка" добавил пункт "Мозайка", которая заполняет изображение картинкой из буфера.
- Если при вставке изображения войти в "Размер растра", то можно будет изменить размер вставляемой картинки. За идею благодарим Fever Frei.
- Навёл порядок в кистях: добавил новые, убрал лишние.
- Исправлено сохранение в GIF89. Теперь поддерживается прозрачность как при сборке, так и при разборке анимаций, к тому же не искажаются цвета.
- Мелкие исправления {
автоматический переход в созданную папку,
не бралось имя картинки при открытии через "Просмотр",
убраны черные полосы в мультицветном градиенте,
мультиэкран в меню "Правка"
}
- Исправления, связанные с прозрачностью {
замена цвета на гор. и верт. градиент не учитывала прозрачность,
"Правка -> Очистить" не очищала до прозрачности,
невозможно было нарисовать полупрозрачную окружность, текст и закрашенный треугольник
}
#red
-= Нововведения версии 2.2 =- #def
- Вставка с заменой цвета теперь не зависит от размера изображений. Можно вставлять большой кусок в меньший, чего раньше сделать было нельзя.
- Добавлена работа с прозрачными изображениями. Для включения прозрачного режима войдите в Меню->Файл->Создать и включите параметр "Прозрачность".
- В просмотрщике, по нажатию ## меняется задний фон под картинкой. Это сделано для удобства просмотра прозрачных картинок.
- Добавил гор.клавишу ##+Центр_Джоя - устанавливает курсор в центр картинки.
- Добавил информацию о размере области при выделении.
- Добавил эффект "Радиальное размытие" и изменил эффект "Генерация текстур" (добавил к нему настройку режим наложения)
- Сделал возможность подключения дополнительных эффектов и изменение порядка следования существующих. Подробнее в графе -= Настройка эффектов =-
- К инструменту "Заливка" добавлен параметр "Допуск", позволяющий изменять чувствительность при заливке.
#red
-= Нововведения версии 2.1 =- #def
- Добавлен пункт меню "Инфо" в файловом менеджере. В нём показывается путь к файлу, размер файлов, разрешение изображений и комментарий (если есть).
- Обработка зажатия клавиши в эффектах, инструментах и в распылителе. Теперь не нужно каждый раз нажимать клавишу, чтобы выполнить действие.
- Быстрое листание и сортировка в файл-менеджере. При нажатии кнопок 3 или 9, курсор сдвинется вверх или вниз на 10 позиций. Также добавлена сортировка файлов по алфавиту.
- Обновлён интерфейс программы. Сменены иконки, добавлен новый скин. Добавлены часы на софт-бар.
- Переписано сохранение в JPEG. Значительно увеличена скорость и уменьшено потребление памяти. Исправлена мелкая ошибка в кодировщике.
- Переписан выбор цвета RGB. Подробнее в графе -= Выбор цвета =-
- Изменён интерфейс применения эффектов. Подробнее в графе -= Эффекты =- и -= Управление =-
- Регистриция CHAPI доступна только для Sony Ericsson. В других телефонах она работала некорректно, к тому же возникали ошибки при удалении. Именно в связи с этим пришлось переименовать версию, чтобы она не заменяла предыдущую.
- Новый формат шрифтов - ProPaintFont. Эффектор шрифтов. Подробнее в графе -= Шрифты =-
#red
-= Нововведения версии 2.0 =- #def
- Обновлена функция Text2Image по движку aNMPWR2.0. Текст движется плавно и быстрее выводится на экран.
- Обзор всей картинки. В меню "Просмотр", если нажать *, то изображение уменьшится до размеров экрана. При этом, если нажать кн.5, то в картинка в таком виде попадёт в редактор. Повторное нажатие * снова возвратит прежний вид.
- Убрана поддержка Siemens. Появилось больше возможностей работы на других марках телефонов.
- При открытии GIF и SWF (JP-8) можно выбирать необходимый кадр, причем в SWF его размер зависит от размера редактируемого в данный момент изображения.
- В настройки добавлена опция рисования от центра. Для кисти, этот режим работает весьма интересным образом - то что рисуется в одной половине экрана, дублируется в другой. В этом режиме, распылитель работает как кисть.
#red
-= Управление =- #def
Рабочая область:
2,Joy UP - сдвинуть курсор вверх
4,Joy LF - сдвинуть курсор влево
6,Joy RT - сдвинуть курсор вправо
8,Joy DN - сдвинуть курсор вниз
1 - сдвинуть курсор по диагонали вверх/влево
3 - сдвинуть курсор по диагонали вверх/вправо
7 - сдвинуть курсор по диагонали вниз/влево
9 - сдвинуть курсор по диагонали вниз/вправо
5, Центр джоя - применить инструмент/действие
* - Выбор цвета.
*(удерж) - Выбор цвета из палитры.
Открытие камеры - режим фотографирования.
Кнопка фокусировки - переход в экран сохранения.
##,Правый софт - Меню
##+0 - переместить курсор в начало координат.
##+1 - взять цвет под курсором (пипетка).
##+2 - поменять местами передний и задний цвета.
##+3 - замена цвета в картинке между передними и задними цветами.
##+5 - вставка с прозрачностью.
##+9 - смена цвета фона для прозрачности.
##+Joy(UP,DN,LF,RT) - быстрая навигация по изображению.
Левый софт - Выбор инструмента
0 - Показать окно увеличения/увеличить
C - отмена последнего действия (если не отключено)
1,3,7,9 могут принимать дополнительные значения в зависимости от выбранного инструмента.
Кн. Возврат (стрелочка) и кнопка Вызова - прервать действие инструмента.
Также можно управлять курсором стилусом при поддержке TouchScreen.
Выбор инструментов, курсора, отмена:
4/6,Джой влево/вправо - предыдущий/следующий элемент
Джой вверх - переместить курсор на строку выше
Джой вниз - переместить курсор на строку ниже
7,9 - смена параметров инструмента/курсора
Левый софт - выбрать
Правый софт - назад
Применение эффектов, эффектор шрифтов:
4/6,Джой влево/вправо - предыдущий/следующий эффект
5 - предпросмотр эффекта
* - применить просматриваемый эффект к картинке/шрифту
## - выбрать изображение из редактора или буфера обмена
1,3 - переключение между параметрами
0 - обзор картинки
2/8,Джой вверх/вниз - изменение значения параметра.
Выбор цвета:
5 - Переключение режима RGB/HSV
1,2,3 - Регулировка красного/оттенка (-,0,+)
4,6 - Регулировка зеленого/насыщенности (-,+)
7,8,9 - Регулировка синего/яркости (-,0,+)
*,## - Регулировка альфа канала (прозрачность)
0 - Переключение переднего и заднего цвета.
Левый софт - выбрать
Правый софт - назад
Помощь, Text2Image:
2/8,Джой вверх/вниз - прокрутить текст на несколько точек вверх/вниз
4/6,Джой влево/вправо - предыдущая/следующая страница
1,7 - начало/конец файла
3,9 - изменение шрифта
5 - передать текущее изображение в редактор
#red
-= Интерфейс. Рабочая область =- #def
При работе с изображениями, в верхнем правом углу показывается статус-бар, в котором видны текущие координаты курсора, инструмент и цвет. Передний цвет (цвет инструмента) показывается справа, там где координаты, задний цвет (цвет фона) слева, там где текущий инструмент.
#red
-= Инструменты =- #def
В PPM доступны такие инструменты:
Точка - по нажатии кн.5 рисуется точка или кисть (если загружена)
Линия - при первом нажатии кн.5 ставится начало линии, при следующем - линия зафиксируется
Полилиния - нажимаем кн.5, и затем еще раз в тех точках где хотим провести линию. По окончании нажмите кнопку сброса инструмента (кн. Вызова)
Кисть - нажмите кн.5 для установки или поднятия пера.
Прямоугольник, Закрашенный прямоугольник - нажимаем кн.5, где хотим провести рамку. Нажимаем еще раз кн.5 - рамка зафиксируется. Параметр скругление отвечает за округлость углов рамки. Регулировать можно кнопками 7 и 9.
Эллипс, Закрашенный эллипс - принцип такой как и в рамке. Параметр "Скругление" отвечает за начальный и конечный угол отрисовки окружности в градусах. Регулируется кнопками 1,7 и 3,9.
Треугольник, Закрашенный треугольник - ставим кнопкой 5 первую точку, затем вторую, треугольник потянется к курсору. Устанавливаем в нужное место и нажимаем 5.
Заливка - заливается область под курсором передним цветом. При Фоновой заливке передним цветом заливается всё, что не входит в область окрашенную задним цветом. Область должна быть непрерывной, то есть не иметь дырок. Параметр "Допуск" управляет чувствительностью к заливке. Чем больше значение допуска, тем больше различных цветов зальются.
Эффектор - к области под курсором применяется выбранный эффект. Первый параметр устанавливает размер курсора, второй - эффект.
Пипетка - Нажимаем 5 в том месте, откуда хотим взять цвет. Комбинация клавиш ##+1 делает то же самое.
Распылитель - в области курсора (чем больше курсор тем больше область) ставятся передним цветом столько точек, сколько указано в параметре "Распыление". Размер курсора выставляется в настройках курсора в меню!
Градиент - подобен прямоугольнику, но рисуется плавный переход от переднего цвета к заднему. Можно выставить множество градиентов (8 штук): горизонтальный, вертикальный, радиальный, радиальный в прямоугольнике и т.д.. Также имеется мультицветный режим, в котором можно выбрать до 10 цветов.
Текст - нажимаем кн.5 и попадаем в окно ввода текста и параметров шрифта. Можно выбрать стандартные и PPF шрифты. Вводим текст и выставляем необходимые параметры шрифта и нажимаем Ok. Текст появится возле курсора. Можно передвигать его и менять цвет. Нажатие кн. 5 фиксирует текст.
Выделение - подобен прямоугольнику, но в отличие от него не рисует ничего на рисунке, а просто выделяет необходимую область, которую потом можно копировать, применять эффекты и вставлять.
Масштабирование - растягивает выбранную вами область. Ставим одну точку - начало выделения, ставим вторую - конец выделения, теперь тянем курсор и выделенная нами область будет растягиваться.
Сетка - рисует прямоугольник, заполненный клеточками переднего и заднего цветов в шахматном порядке с заданным при выборе инструмента размером.
Кривая Безье - рисует кривые по четырем точкам. Для установки точки жмите кн.5.
Метки - служат для облегчения рисования, чтобы, например, не выйти за пределы какой-либо границы. Чтобы поставить метку нажимаем кн.5. Чтобы убрать снова нажимаем кн.5, предварительно подведя курсор к пересечению метки. Цвет метки зависит от выбранного переднего цвета.
Линза - искривляет изображение линзой. Если в параметрах "Размер" указать положительное значение, то будет увеличение, иначе уменьшение. Ставим точку - центр окружности, затем вторую - радиус.
Искажение - растягивает изображение. Первый параметр влияет на качество искажения, второй на силу.
Замена цвета - заменяет передний цвет на задний с параметрами.
Ластик - в непрозрачном режиме работает также как и кисть, только закрашивает задним цветом. В прозрачном режиме позволяет стирать изображение до прозрачности.
#red
-= Главное Меню =- #def
В этом меню можно создать новую картинку, открыть существующую, просмотреть информацию о программе и выйти.
#green
-= Файл =- #def
#red
-= Создать =- #def
Здесь указываете размер создаваемого изображения. Параметр "Прозрачность" устанавливает режим работы программы с прозрачностью. Если вам нужно отредактировать фотографию или создать какой-то рисунок, то этот параметр можно не включать. А если вы хотите отредактировать или создать какую-то полупрозрачную иконку, то этот прозрачный режим поможет вам в этом деле.
#red
-= Открыть =- #def
Появится файл-менеджер, из которого можно открыть изображение, видео или шрифт.
В Меню (Левый софт) доступны такие функции:
Открыть - открывает картинку для редактирования.
Просмотр - можно просмотреть картинку перед открытием.
Миникопия - доступна для фотографий из камеры. В редактор помещается уменьшенная копия фотографии.
Новая папка - можно создать новую папку.
Собрать анимацию - этот пункт появляется когда наводите курсор на файл с именем "1" (Напр. 1.gif или 1.png). Эта опция собирает GIF анимацию из всех идущих по порядку файлов.
AniGif->Png разбивает анимацию на отдельные кадры и записывает их в png-файл по порядку.
Открыть в буфер - открывает картинку в буфер обмена (максимальный размер буфера - 10 картинок).
Инфо - здесь показывается путь к файлу, размер файла, разрешение изображений и комментарий (если есть).
Отмена - вернуться в редактор или предыдущее меню.
#red
-= Сохранить=- #def
Здесь можно сохранить изображение. Сначала будет предложено выбрать формат сохранения (png, jpg, gif, bmp, ppm) и настроить некоторые параметры (качество изображения, количество бит на один пиксель информации и так далее). После этого, если выбран формат, поддерживающий прозрачность, вы попадаете на экран установки прозрачности, где можно регулировать как прозрачность отдельного цвета, так и всей картинки в целом.
Для установки прозрачности на все изображение используются кнопки 1 и 3, степень будет будет показана в верхнем правом углу, изначально там установлено значение 255 - это непрозрачное изображение.
Для выбора прозрачности отдельного цвета, выберите степень клавишами 7 и 9, значение будет показано в верхнем правом углу рядом со степенью прозрачности всей картинки, изначально стоит 255. Затем выберите нужный цвет и нажмите на нём кн. 5. Кнопкой * можно изменить цвет фона, для того, чтобы просмотреть картинку на различном фоне.
Далее выбирается папка сохранения. При сохранении в PNG, JPG, GIF будет доступна опция "В галерею", о ней позже. Потом выбираете имя. Менять регистр и язык можно кнопкой ##. После этого начнётся сохранение, по окончании которого вы вновь попадете на экран редактирования.
#green
-= Правка=- #def
В меню правка доступны такие пункты:
Очистить: данная функция закрашивает задним цветом выделенную область (или всё изображение, если ничего не выделено). В режиме прозрачности, вместо заднего цвета будет применён прозрачный цвет.
Выделить всё: выделяет всё изображение.
Отмена: здесь можно отменить ранее примененные изменения в картинке.
Копировать: копирует выделенный фрагмент в буфер обмена. Буфер вмещает до 10 изображений.
Вырезать: аналогично копированию, только выделенная область после копирования очищается.
Обрезка: передаёт выделенный фрагмент на редактирование.
Снять выделение: снимает выделение.
Мозайка: размещает изображение из буфера обмена на всей редактируемой картинке.
Вставка: вставляет изображение из буфера обмена в изображение.
Вставка с заменой цвета: аналогична простой вставке, только кнопками 1 и 3 можно регулировать режим наложения.
Вставка с прозрачностью: позволяет вставлять изображение с прозрачностью. Подробнее об установке прозрачности в графе -= Сохранить =-
Очистить буфер: очищает буфер обмена и освобождает память.
#green
-= Настройки =- #def
Тип линий: Непрерывная - обычная линия, Штриховая линия - линия рисуется отрывисто по штрихам.
Размер окна зума - размер окна увеличения в пикселах.
Прозрачность зума - непрозрачность этого окна (чем меньше значение, тем окно прозрачней)
Цвет курсора HEX - цвет курсора в формате RRGGBB (Например 003377).
Автоочистка heap - время в секундах, по истечении которыхого будет происходить очистка ненужных объектов в оперативной памяти.
Клавиша скриншота - сюда вписываем код клавиши, по нажатии которой будет выполнен захват текущего экрана.
Изменять цвет красного курсора - если включить, то значение цвета, указанное выше, будет применяться и к курсору-точке.
Показывать изображение при сохранении - если отключить, то изображение не будет выводится в окне сохранения.
Разрешить отмену - если отключить, то функция отмены последних действий будет недоступна. Это уменьшит потребляемость ресурсов.
Легкая версия интерфейса - включив эту опцию, в интерфейсе отключатся прозрачность и анимация, это приведет к ускорению прорисовки меню и компонентов программы.
Начало координат с 1:1 - некоторым людям очень трудно привыкнуть вести отсчет с нуля, для них и была сделана эта опция.
Кол-во отмен - количество возможных отменяемых действий. Чем больше число, тем больше отмен можно сделать, но тем больше будет расходоваться память.
#red
-= Язык =- #def
Здесь можно сменить язык программы. Внимание, все изменения применяются после перезапуска.
#red
-= Вид курсора =- #def
Здесь можно выбрать вид курсора, а также установить его размер кнопками 7 и 9.
#red
-= Толщина линий =- #def
Здесь можно выбрать размер рисуемых линий инструментом "Линия".
#green
-= Инструменты =- #def
#red
-= Выбор цвета =- #def
RGB/HSV:
Первый три рамки указывают на степенть красного, зелёного, синего каналов цвета, а в режиме HSV на степень оттенка, насыщенности и яркости соответственно. Четвертая рамка указывает на степень прозрачности цвета.
Нижняя служит для просмотра текущего цвета на различных фонах.
Палитра:
Передвигаем курсор в то место откуда хотим взять цвет. И нажимаем Ok. При нажатии кн.0, текущий цвет под курсором поставится в задний цвет.
#red
-= Эффекты =- #def
Эффекты существенно могут помочь при рисовании и обработке изображений. Кнопками влево/вправо листаем список эффектов. Если хотите просмотреть эффект, нажмите кн.5. Для примения эффекта нажимаем *. При нажатии кн.0 можно переместить изображение, если оно не помещается в экран. Кн.## передаёт в эффекты изображение из текущего буфера обмена. Кнопкой 1,3 перемещаемся по параметрам. Текущий параметр выделен угловыми скобками. Для изменения значения параметра используйте кн.2 и 8 или джойстик.
Первые 8 эффектов - простые эффекты для применения в повседневной жизни. Здесь можно инвертировать картинку, сделать её черно-белой и т.д.
Эффекты с 9 по 13 включительно предназначены для коррекции фотографий. Регулировкой RGB можно усилить какой-либо оттенок, регулировка HSB позволяет изменить оттенок/насыщенность/яркость или тонировать картинку (последний параметр). Насыщенность регулирует цветность изображения - можно "оживить" фото или сделать монохромным. Контрастность регулирует степень серого, что позволяет подчеркнуть какие-либо объекты на фоне или наоборот ослабить их вид. Гамма позволяет увеличить или уменьшить цветовую гамму. Отлично работает с засвеченными и с затемнёнными изображениями.
Эффекты 14 - 22 - спец эффекты. Можно размыть изображение, или применить эффект рисования маслом или карандашом.
Эффект 23 - квантизация. Предназначен для уменьшения количества цветов. Пригодится для сжатия изображения при сохранении в png 8 бит.
Эффекты 24 - 27 - эффекты трансформации. Можно повернуть, отразить, наклонить изображение.
Эффекты 28 - 30 - эффекты, не зависящие от исходного изображения. Здесь можно сгенерировать узоры(фракталы), текстуры или добавить шум. Генерация текстур (28) с первым параметром 10 - генерирует облако.
Эффекты 31, 32 - добавляют шум к изображению.
Эффекты 33 - 35 - эффекты искажения картинок.
#red
-= Камера =- #def
Можно делать фотографии для дальнейшего редактирования не выходя из программы.
Появится окно с изображением. А ниже параметры фотографии: качество и размер, а также тип (для каждого телефона параметры могут быть разные). Выбрав нужный момент нажмите Фото. Сфотографированная картинка появится в окне. Доступны команды:
Принять (картинка передастся в редактор),
Назад (Перейти в редактор без сохранения фото),
Фото - сфотографировать еще.
#red
-= Размер растра =- #def
Можно изменить размер изображения. Перемещение между пунктами осуществляется джойстиком, а цифры вводятся в соответствии со значением клавиш. Так же можно поставить пропорции и выбрать интерполяцию. Интерполяция Bilinear качественней, но дольше применяется. Если во время вставки изображения из буфера зайти в этот пункт меню, то можно будет изменить размер вставляемого изображения.
#green
-= Прочие функции и хитрости =- #def
#red
-= Сборка GIF анимации =- #def
Чтобы собрать анимацию, нам нужно для начала подготовить все кадры. Для этого просто переименовываем их в порядке следования, начиная с первого. Формат изображений не важен - они все приведутся к нужному типу, поэтому используйте наиболее удобные для вас форматы файлов. После того как мы подготовили все кадры, заходим в PPM, и нажимаем "Открыть" выделяем курсором файл "1.*" (* - расширение изображения, например 1.png, 1.bmp, 1.jpg и так далее), теперь открываем меню и видим там пункт "Собрать GIF анимацию". При нажатии на него, попадаем в экран настроек анимации. Здесь можно выставить задержку между кадрами и название gif-анимации. После этого нажимайте Ok и ждите окончания процесса.
#red
-= Сжатие PNG =- #def
ProPaintMobile позволяет сжать PNG-картинки. Как это сделать? Откройте любое изображение, потом перейдите в "Инструменты -> Эффекты" и найди там эффект "Квантизация". Теперь изменяйте значение этого эффекта (чем меньше значение, тем меньше цветов на картинке и тем сильнее будет сжата PNG картинка). После того, как подобрали нужное значение перейдите к сохранению ("Файл -> Сохранить") и выберите формат PNG и его тип "PNG 8bit". Сохраняйте.
#red
-= Добавление шрифтов и кистей =- #def
Чтобы добавить свой набор шрифтов или кистей, откройте ProPaintMobile в любом файл-менеджере или архиваторе, увидите там папки "fonts" и "brushes". В каждой папке файлы идут по порядку от 1 и до некоторого значения. Чтобы добавить свои кисти или шрифты, переименуйте их в порядке возрастания и киньте в соответсвующую папку. Теперь устанавливайте приложение в телефон и у вас будет расширенный набор кистей и шрифтов. Таким же образом можно и удалить ненужные вам файлы.
#red
-= Настройка эффектов =- #def
В PPM 2.2 сделал возможность изменения порядка следования эффектов, отключение эффектов и добавление пользовательских.
В папке Effects в архиве программы есть файл effects.txt. В нём расположены числа от 0 до 34. Это порядок следования стандартных эффектов.
Чтобы поменять местами первый и второй эффекты (Обесцвечивание и Соляризацию) необходимо изменить в текстовом файле 0 на 1, а в следующей строке 1 на 0. Получится последовательность 1, 0, 2, 3, 4...
Чтобы отключить эффект, просто поставьте в его индексе "-1" без кавычек. Например 0, -1, -1, 3, 4... отключит эффекты Соляризация и Черно-белый.
Чтобы добавить свой эффект, необходимо добавить класс эффекта в папку Effects в архив программы и прописать #red в конец #def файла effects.txt название этого класса. Например 33, 34, UserEffect, MyEffect.
#red
-= Шрифты =- #def
Новые PPF шрифты уже не ограничены размером, как предыдущие FNT. К тому же их тип существенно отличается. PPF-шрифты построены на принципе PPB-кистей. Это позволяет им сильнее сжиматься в архивах, а также дало толчок к созданию эффектора шрифтов.
#red
-= Эффектор шрифтов =- #def
Аналогичен обычным эффектам, только при нажатии кн.* или применении эффекта, он применяется для текущего шрифта. Перед использованием выбираем шрифт, и только потом можно вызывать эффектор шрифтов.
Можно любой шрифт сделать курсивным, для этого используйте эффект "Наклон горизонтальный/вертикальный".
#red
-= Выделение произвольной области =- #def
В PPM это возможно. Только придётся применить хитрость. Итак, допустим нам нужно выделить Луну на звёздном небе. Первое что нужно сделать - аккуратно обвести полилинией по контуру каким-нибудь сиреневым цветом. Нужно внимательно следить, чтобы не было "дырок". После этого выбираем другой цвет, например зелёный, а сиреневый переставляем в задний цвет. Выбираем инструмент "Заливка" с параметром "Фоновая заливка". И нажимаем кн.5 где-нибудь вне выделенной области. Теперь берём инструмент выделение и выделяем всё в границах оставшейся области. Нажимаем копировать. Готово. Чтобы вставить этот произвольно выделенный фрагмент (Луну) идём в Правка->Вставить с прозрачностью. И устанавливаем ненужным цветам прозрачность 0. Нажимаем ok.
#red
-= Захват кадра =- #def
Эта опция появляется когда в файловом менеджере выбираем видео. После нажатия начнётся воспроизведение, кн.0 можно включить или выключить полноэкранный режим просмотра. Кн. 5 можно захватить кадр. Он покажется на экране. Для продолжения воспроизведения нажмите правый софт. Чтобы передать картинку в редактор - нажмите 5 или левый софт.
#red
-= Режим мультицветного градиента =- #def
С версии 1.5 добавлен режим мультицветного градиента. Он позволяет рисовать многоцветные (до 10 цветов) градиенты. Чтобы включить этот режим необходимо в экране выбора инструментов навести курсор на инструмент "Градиент", выбрать тип градиента и нажать кн.3. Попадаем в экран установки цветов. Для начала включите режим (включенный режим - закрашенный квадрат, выключенный - не закрашенный). Теперь наводите курсор на первый квадрат и нажмите кн.5. Попадете в знакомый вам экран выбора цвета из палитры, выбрав цвет нажмите лев. или прав. софт - вернетесь в предыдущий экран. Так же заполните остальные цвета. ВАЖНО: Если вы хотите использовать например 5 цветов, а не все 10, то просто устанавливайте цвета по-порядку слева направо. Например у вас заполнены все 10 квадратов, и если вы последним выставляли 5-ый слева квадрат, то градиент будет пятицветным, если 3-ий квадрат, то трехцветным. Не забывайте учитывать это.
#red
-= Режим Text2Image =- #def
В файловом менеджере открываем абсолютно любой не графический файл (текст), его содержимое показывается в просмотрщике текста. Доступна прокрутка и изменение шрифта. Возможен парсинг текста по структуре aNMPWR, то есть по структуре этого хелпа. Нажатием кн.5 можно передать содержимое окна в редактор картинок.
#red
-= Галерея =- #def
Появилась возможность выгрузки своих изображений в альбомы ProPaintMobile непосредственно из приложения. Перед использованием этой функции вы должны зарегистрироваться на сайте annimon.com и создать альбом. Только после этого вам будет доступна эта функция. Чтобы выгрузить изображение, необходимо его открыть, затем перейдите в режим сохранения и выберите один из подходящих форматов: jpg, gif, png. Потом, в файловом менеджере, в меню выбрать пункт "В галерею". После этого появится экран, где вводим логин и пароль. По нажатию ok, если всё нормально - появится список альбомов, куда будет выгружена картинка. Также заполните поля "Имя файла" и "Описание", нажмите ok. При успешной отправке в окне появится ссылка на вашу картинку. При нажатии пункта меню "Сайт" эта ссылка откроется в браузере.
#red
-= Дополнительная информация и уроки =- #def
Дополнительную информацию вы всегда можете найти сайте разработчика: http://annimon.com/ На форуме спросить по поводу программы или что-либо предложить, в Wiki посмотреть предоставленные уроки по ProPaintMobile, и в фотоальбомах посмотреть творчество других пользователей или выложить свои картинки.
Help by aNNiMON 10.08.2011

208
res/lang/instr_en.loc Normal file
View File

@ -0,0 +1,208 @@
Drums
Acoustic grand
Bright acoustic
Electric grand
Honky-tonk
Electric piano 1
Electric piano 2
Harpsichord
Clav
Celesta
Glockenspiel
Music box
Vibraphone
Marimba
Xylophone
Tubular bells
Dulcimer
Drawbar organ
Percussive organ
Rock organ
Church organ
Reed organ
Accoridan
Harmonica
Tango accordian
Acoustic guitar(nylon)
Acoustic guitar(steel)
Electric guitar(jazz)
Electric guitar(clean)
Electric guitar(muted)
Overdriven guitar
Distortion guitar
Guitar harmonics
Acoustic bass
Electric bass(finger)
Electric bass(pick)
Fretless bass
Slap bass 1
Slap bass 2
Synth bass 1
Synth bass 2
Violin
Viola
Cello
Contrabass
Tremolo strings
Pizzicato strings
Orchestral strings
Timpani
String ensemble 1
String ensemble 2
Synthstrings 1
Synthstrings 2
Choir aahs
Voice oohs
Synth voice
Orchestra hit
Trumpet
Trombone
Tuba
Muted trumpet
French horn
Brass section
Synthbrass 1
Synthbrass 2
Soprano sax
Alto sax
Tenor sax
Baritone sax
Oboe
English horn
Bassoon
Clarinet
Piccolo
Flute
Recorder
Pan flute
Blown bottle
Skakuhachi
Whistle
Ocarina
Lead 1 (square)
Lead 2 (sawtooth)
Lead 3 (calliope)
Lead 4 (chiff)
Lead 5 (charang)
Lead 6 (voice)
Lead 7 (fifths)
Lead 8 (bass+lead)
Pad 1 (new age)
Pad 2 (warm)
Pad 3 (polysynth)
Pad 4 (choir)
Pad 5 (bowed)
Pad 6 (metallic)
Pad 7 (halo)
Pad 8 (sweep)
Fx 1 (rain)
Fx 2 (soundtrack)
Fx 3 (crystal)
Fx 4 (atmosphere)
Fx 5 (brightness)
Fx 6 (goblins)
Fx 7 (echoes)
Fx 8 (sci-fi)
Sitar
Banjo
Shamisen
Koto
Kalimba
Bagpipe
Fiddle
Shanai
Tinkle bell
Agogo
Steel drums
Woodblock
Taiko drum
Melodic tom
Synth drum
Reverse cymbal
Guitar fret noise
Breath noise
Seashore
Bird tweet
Telephone ring
Helicopter
Applause
Gunshot
Piano
Chromatic percussion
Organ
Guitar
Bass
Strings & orchestral instruments
Ensemble
Brass
Reed
Pipe
Synth lead
Synth pad
Synth sfx
Ethnic misc
Percussive
Sfx
Highq
Slap
Scratch push
Scratch pull
Sticks
Square click
Metronome click
Metronome bell
Acoustic bass drum
Bass drum 1
Side stick
Acoustic snare
Hand clap
Electric snare
Low floor tom
Closed hi-hat
High floor tom
Pedal hi-hat
Low tom
Open hi-hat
Low-mid tom
Hi-mid tom
Crash cymbal 1
High tom
Ride cymbal 1
Chinese cymbal
Ride bell
Tambourine
Splash cymbal
Cowbell
Crash cymbal 2
Vibraslap
Ride cymbal 2
Hi bongo
Low bongo
Mute hi conga
Open hi conga
Low conga
High timbale
Low timbale
High agogo
Low agogo
Cabasa
Maracas
Short whistle
Long whistle
Short guiro
Long guiro
Claves
Hi wood block
Low wood block
Mute cuica
Open cuica
Mute triangle
Open triangle
Shaker
Jingle bells
Belltree
Castanets
Mute surdo
Open surdo

208
res/lang/instr_ru.loc Normal file
View File

@ -0,0 +1,208 @@
Ударные
Рояль
Концертный(осветленный) рояль
Электронный рояль
Расстроенное(таперское) пианино
Электропиано
Электропиано 2
Клавесин
Клавинет (клавесин 2)
Челеста
Колокольчики (бутылки)
'Музыкальная шкатулка'
Вибрафон
Маримба
Ксилофон
Колокола (трубчатые)
Цимбалы (сантур)
Электронный орган
Орган с перкуссией (с ударной атакой)
Рок-орган
Церковный орган
Деревянный (язычковый) органчик
Аккордеон
Гармоника
'Танго'-аккордеон
Гитара-нейлон
Гитара-сталь
Джазовая электрогитара
Акустическая электрогитара
Засурдиненная (приглушенная) электрогитара
Овердрайв (перегруз)
Дисторшн (исказитель)
Флажолет
Контрабас-пицикато
Бас-гитара пальцевым щипком
Бас-гитара медиатором
Бездадовый бас
Бас-слэп 1
Бас-слэп 2
Синт-бас 1
Синт-бас 2
Скрипка
Альт
Виолончель
Контрабас
Тремоло струнных
Пицикато струнных
Арфа
Литавры
Струнная группа 1
Струнная группа 2
Синтетические струнные 1
Синтетические струнные 2
Хор на слог 'а'
Голос на слог 'о'
Синтетический голос
'Удар' (весь оркестр)
Труба
Тромбон
Туба
Труба с сурдиной
Валторна
Медная группа
Синтетические медные 1
Синтетические медные 2
Сопрано-саксофон
Альт-саксофон
Тенор-саксофон
Баритон-саксофон
Гобой
Английский рожок
Фагот
Кларнет
Флейта-пикколо
Флейта
Блокфлейта
Пан-флейта
Дуновение в бутылки
Шакухачи
Свисток
Окарина
Соло-гитара (прямоугольная волна)
Соло-гитара (синусоидальная волна)
Calliope-гитара
Chiff-гитара
Charang-гитара
Соло-гитара (голосовой тембр)
Соло-гитара (с квинтовым обертоном)
Бас и соло-гитара
Синтезаторный звук нью-эйдж
Теплый синт-звук
Полисинтезатор
Синт-'хор'
Воздушный (смычковый синт-звук)
Металлический синт
Ореол
Развертывающийся(качающийся) звук
Дождь
Звуковая дорожка
Хрусталь (кристалл)
Атмосфера
Яркость
Гоблины
(Качающееся) эхо
Звездный (SciFi)
Ситар
Банджо
Шамисен
Кото
Калимба
Волынка (Bagpipe)
Уличная скрипка
Санаи (Shanai)
Колокольчик
Агого
Стальные барабаны
Гольцтон (деревянные коробочки)
Таико
Мелодик том
Электронные барабаны
Тарелка 'задом наперед'(реверс)
Свист гитарной струны (шум ладов)
Придыхание
Прибой
Птицы
Телефонный звонок
Вертолет
Алодисменты
Выстрел
Фортепиано
Хроматиккаа и Перкуссия
Орган
Гитара
Бас
Струнные и Оркестровые
Ансамбль
Медные
Тростник
Труба
Ведущий синтезатор
Ситезатор 2-й голос
Синт-эффекты
Народные
Перкуссия
Звуковые эффекты
Высокое Q
Слэп
Царапанье (от себя)
Царапанье (к себе)
Барабанные палочки
Электронный метроном
Метроном
Звенящий метроном
Акустический большой барабан
Большой барабан
Удар по ободу
Акустический малый барабан
Хлопок в ладоши
Электрический малый барабан
Низкий напольный томтом
Закрытый хэт
Высокий напольный томтом
Хэт (педалью)
Низкий томтом
Открытый хэт
Низкий средний томтом
Высокий средний томтом
Крэш-тарелка
Высокий томтом
Райд-тарелка
Китайская тарелка
Райд-тарелка (по центральной части)
Бубен
Сплэш-тарелка
Коровий (альпийский) колокольчик
Крэш-тарелка 2
Вибрирующий слэп
Райд-тарелка 2
Высокий бонго
Низкий бонго
Закрытый высокий бонго
Открытый высокий бонго
Низкая конга
Высокий тимбал
Низкий тимбал
Высокий агого
Низкий агого
Cabasa Кабаса
Маракас
Короткий свисток
Длинный свисток
Короткое гуиро
Длинное гуиро
Клавес
Высокая коробочка
Низкая коробочка
Закрытая куика
Открытая куика
Закрытый треугольник
Открытый треугольник
Шейкер
Бубенцы
Бунчук
Кастаньеты
Закрытый сурдо
Открытый сурдо

94
res/lang/strings_en.loc Normal file
View File

@ -0,0 +1,94 @@
Create
Resume
About
Open
Save
Save as
File
Options
Exit
Rms
Cancel
Error
Opening error
List instruments
Impossible
Saved
Saving error
Saving
Opening
Chooser error
Update error
Your device don't support required API
Instruments
Menu
Back
Insert note with current attributes
To change note's attribute (e.g. length) delete note. If already insert, choose attribute (<7>), change it (<0>,<*>,<#>) and insert a new note
Delete note
Undo
Note volume '+'\'-'
Play from current position/stop
Play note on cursor
Select note's attribute
Change selected note's attribute
Stop play
Navigation on composition
Quick navigation
Mark begin
Mark end
Copy
Paste insert
Paste replace
Paste overwrite
Delete&shift
Clean
Play channel on screen
Play channel all
Redo
Add instrument
Edit
Set instrument
Delete instr
Tempo box
Volume box
Meter
Play
Play origin
Ok
Up one level
Delete
Choose folder
Open file
Please wait
Updating list
Save in this folder
Insert tempo
Delete tempo
Tempo
Time(measure)
Seek
Numerator
Denominator(negative power of two)
Meter = numerator/ (2^denominator). For example, use 4/4 (numerator=4; denominator=2) or 6/8 (numerator=6; denominator=3)
Delta
Play/stop
Play all
Play screen
Track all
Track screen
Mark
Unmark
Modify block
Modify mode
Paste
Insert
Replace
Blend
Remove selection
Help
Key map
Quick commands
Navigation
Nums, otherwise keypad, when edit notes
Name

94
res/lang/strings_ru.loc Normal file
View File

@ -0,0 +1,94 @@
Создать
Продолжить
О программе
Открыть
Сохранить
Сохранить как
Файл
Настройки
Выход
РМС
Отмена
Ошибка
Ошибка открытия
Список инструментов
Невозможно
Сохранено
Ошибка сохранения
Сохранение
Открытие
Ошибка выбора файла
Ошибка обновления
Ваш телефон не поддерживает необходимые API
Инструменты
Меню
Назад
Поставить ноту с текущими атрибутами
Для того, чтобы изменить атрибут ноты (напр длину), удалите ноту. Если уже поставлена, выберите атрибут (<7>), измените его (<0>,<*>,<#>) и ставьте ноту
Удалить ноту
Отмена действия
Громкость ноты '+'\'-'
Играть с текущей позиции/Стоп
Играть ноту под курсором
Выбрать атрибут ноты
Изменение атрибута
Стоп
Навигация по композиции
Быстрая навигация
Начало выделения
Конец выделения
Копировать
Вставить (раздвинуть)
Вставить (наложить)
Вставить (перезаписать)
Удалить и сдвинуть
Очистить
Играть канал с экрана
Играть канал
Вернуть дейсвие
Добавить инструмент
Редактировать
Установить инструмент
Удалить инструмент
Темп-бокс
Громкость
Размер
Играть
Играть оригинал
Ok
Назад
Удалить
Выбрать папку
Открытый файл
Пожалуйста, подождите
Обновление списка
Сохранить здесь
Вставить Темп
Удалить Темп
Темп
Время(Мера)
Поиск
числитель
знаменатель(2 в степени)
Метр = числитель/ (2^знаменатель). Например, используйте 4/4 (numerator=4; denominator=2) или 6/8 (numerator=6; denominator=3)
Дельта-смещение
Воспроизведение
Играть все
Играть с экрана
Весь трэк
Трэк с экрана
Отметить
Снять отметку
Изменение блока
Режим модификации
Вставить
Раздвинуть
Заменить
Наложить
Очистить буфер
Подсказка
Клавиши
Быстрые команды
Навигация
Цифрами, иначе джойстиком, при редактировании нот
Имя

View File

@ -1,153 +0,0 @@
import java.io.*;
import java.util.Vector;
import midedit.BufDataInputStream;
/**
* Êëàññ òåêñòîâûõ ìåòîê
* @author aNNiMON
*/
public class L {
/** Íîìåðà ñòðîê òåêñòîâûõ ìåòîê */
public static final byte
create = 0,
resume = 1,
about = 2,
open = 3,
save = 4,
saveAs = 5,
file = 6,
options = 7,
exit = 8,
RMS = 9,
cancel = 10,
error = 11,
openError = 12,
toolsList = 13,
impossible = 14,
saved = 15,
savingError = 16,
saving = 17,
opening = 18,
chooserError = 19,
updateError = 20,
apiError = 21,
instruments = 22,
menu = 23,
back = 24,
insertNoteWithCurrentAttributes = 25,
noteAttributeHelp = 26,
deleteNote = 27,
undo = 28,
noteVolume = 29,
playFromCurrent = 30,
playNoteOnCursor = 31,
selectNoteAttribute = 32,
changeNoteAttribute = 33,
stop = 34,
navigationOnComposition = 35,
quicknav = 36,
markBegin = 37,
markEnd = 38,
copy = 39,
pasteInsert = 40,
pasteReplace = 41,
pasteOverwrite = 42,
shiftDelete = 43,
clean = 44,
playChannelOnScreen = 45,
playChannelAll = 46,
redo = 47,
addInstrument = 48,
edit = 49,
setInstrument = 50,
delInstrument = 51,
tempoBox = 52,
volumeBox = 53,
meter = 54,
play = 55,
playOrigin = 56,
ok = 57,
upOneLevel = 58,
delete = 59,
chooseFolder = 60,
openFile = 61,
pleaseWait = 62,
updatingList = 63,
saveInThisFolder = 64,
insertTempo = 65,
deleteTempo = 66,
tempo = 67,
time = 68,
seek = 69,
numerator = 70,
denominator = 71,
meterInfo = 72,
delta = 73,
playStop = 74,
playAll = 75,
playScreen = 76,
trackAll = 77,
trackScreen = 78,
mark = 79,
unmark = 80,
modifyBlock = 81,
modifyMode = 82,
paste = 83,
insert = 84,
replace = 85,
blend = 86,
removeSelection = 87,
help = 88,
keymap = 89,
quickCommands = 90,
navigation = 91,
numkeysOptionString = 92,
iconsOptionString = 93;
/** Ìàññèâ òåêñòîâûõ ìåòîê */
public static String[] str, instr;
/**
* Ïðî÷èòàòü ÿçûêîâîé ðåñóðñ
* @param lang èìÿ ëîêàëèçàöèè (en, ru)
* @param appLang ÷èòàòü ÿçûêîâîé ðåñóðñ ïðèëîæåíèÿ (true), èíñòðóìåíòîâ (false)
*/
public static void readLang(String lang, boolean appLang) {
try {
final String path = (appLang ? "strings" : "instr") + "_";
System.out.println("/lang/" + path + lang + ".loc");
BufDataInputStream bdis = new BufDataInputStream(Runtime.getRuntime().getClass().getResourceAsStream("/lang/" + path + lang + ".loc"));
if (!bdis.checkBOM()) {
bdis.close();
}
char c = ' ';
Vector v = new Vector();
StringBuffer s;
while (bdis.available() > 0) {
s = new StringBuffer();
do {
c = bdis.readCharUTF();
if (c == '\n') {
break;
}
s.append(c);
} while (bdis.available() > 0);
v.addElement(s.toString());
}
if(appLang) {
str = new String[v.size()];
v.copyInto(str);
} else {
instr = new String[v.size()];
v.copyInto(instr);
}
bdis.close();
v = null;
} catch (IOException ex) {
ex.printStackTrace();
}
}
}

View File

@ -1,44 +0,0 @@
/*
* aNNiMON 2011
* For more info visit http://annimon.com/
*/
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import midedit.CompositionForm;
import midedit.MixerModel;
/**
* @author aNNiMON
*/
public class Main extends MIDlet {
public static Display dsp;
public static Main midlet;
public Menu menu;
public MixerModel model;
public CompositionForm compositionForm;
public Main() {
midlet = Main.this;
dsp = Display.getDisplay(Main.this);
}
public void startApp() {
Rms.restoreOptions();
L.readLang(Rms.languageApp, true);
menu = new Menu();
model = new MixerModel();
dsp.setCurrent(menu);
}
public void pauseApp() {
}
public void destroyApp(boolean ex) {
if(Rms.firstStart) Rms.firstStart = false;
Rms.saveOptions();
notifyDestroyed();
}
}

View File

@ -1,3 +1,5 @@
package main;
/*

View File

@ -1,7 +1,8 @@
package midedit;
package main;
import java.io.*;
import java.util.Vector;
import util.BufDataInputStream;
/**
* Êëàññ òåêñòîâûõ ìåòîê
@ -24,7 +25,7 @@ public class L {
cancel = 10,
error = 11,
openError = 12,
toolsList = 13,
listInstruments = 13,
impossible = 14,
saved = 15,
savingError = 16,
@ -104,7 +105,7 @@ public class L {
quickCommands = 90,
navigation = 91,
numkeysOptionString = 92,
iconsOptionString = 93;
midiName = 93;
/** Ìàññèâ òåêñòîâûõ ìåòîê */
@ -118,7 +119,6 @@ public class L {
public static void readLang(String lang, boolean appLang) {
try {
final String path = (appLang ? "strings" : "instr") + "_";
System.out.println("/lang/" + path + lang + ".loc");
BufDataInputStream bdis = new BufDataInputStream(Runtime.getRuntime().getClass().getResourceAsStream("/lang/" + path + lang + ".loc"));
if (!bdis.checkBOM()) {
bdis.close();

97
src/main/Main.java Normal file
View File

@ -0,0 +1,97 @@
package main;
/*
* aNNiMON 2011
* For more info visit http://annimon.com/
*/
import midedit.Constants;
import midedit.CompositionForm;
import midedit.MixerModel;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import ui.Menu;
/**
* @author aNNiMON
*/
public class Main extends MIDlet {
public static Display dsp;
public static Main midlet;
public Menu menu;
public MixerModel model;
public CompositionForm compositionForm;
public Main() {
midlet = Main.this;
dsp = Display.getDisplay(Main.this);
}
public void startApp() {
Rms.restoreOptions();
L.readLang(Rms.languageApp, true);
L.readLang(Rms.languageInstr, false);
Constants.setTimeConst(0);
P.comCancel = new Command(L.str[L.cancel], Command.BACK, 10);
menu = new Menu();
model = new MixerModel();
dsp.setCurrent(menu);
}
public void pauseApp() {
}
public void destroyApp(boolean ex) {
if(Rms.firstStart) Rms.firstStart = false;
Rms.saveOptions();
notifyDestroyed();
}
/**
*
* @param text
* @param appearanceMode
* @return
*/
public static Item createStringItem(String text, int appearanceMode) {
StringItem strItem = new StringItem(null, text, appearanceMode);
strItem.setFont(P.smPlain);
return strItem;
}
public MixerModel getModel() {
return model;
}
/**
*
*/
public void comBack() {
P.extMenu = true;
P.isRMSMode = false;
menu.addNewItems();
setCurrentlistMenu(null);
}
/**
*
* @param a
*/
public void setCurrentlistMenu(Alert a) {
if (a != null) {
dsp.setCurrent(a, menu);
} else {
dsp.setCurrent(menu);
}
}
/**
*
* @return
*/
public Displayable getCurrentlistMenu() {
return menu;
}
}

View File

@ -1,4 +1,5 @@
import java.util.Random;
package main;
import javax.microedition.lcdui.*;
/**
@ -16,30 +17,30 @@ public class P {
/** Æèðíûé ñðåäíèé øðèôò */
public static final Font medBold = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
/** Êîìàíäà îòìåíû */
public static Command comCancel;
/** Ïóòü â ôàéë-ìåíåäæåðå */
public static String path = "/";
public static Random rnd = new Random();
/** Èìÿ ôàéëà */
public static String openSaveString = "newmix";
/** Ðåæèì ðàáîòû ñ RMS */
public static boolean isRMSMode = false;
/** Ðàñøèðåíîå ìåíþ (ïðîäîëæèòü, ñîõðàíèòü è ò.ä) */
public static boolean extMenu = false;
//ñêèíû
//title and soft
public static int colup = 0xD01C712F;
public static int coldn = 0xD0093A14;
//selection (lang)
public static int selup = 0x1B991B;
public static int seldn = 0x646464;
public static int colup = 0xD0604080;
public static int coldn = 0xD0754E9C;
//çàäíèé ôîí
public static int backgrnd = 0xEEEEEE;
//îáâîäêà
public static int obv = 0x005804;
public static int backgrnd = 0xFFFFFF;
// ôîí êóðñîðà
public static int obv = 0xA0A0E0;
// ôì
public static int fmback1 = 0x222222;
public static int fmtextcur = 0xD8C922;
public static int fmtextnc = 0x296321;
public static int fmbord = 0x008909;
public static int fmshadow = 0x282828;
public static int fmcurbord = 0xA89C1A;
public static int fmtextuppan = 0xE0FFFA;
public static int fmback1 = 0xEEEEEE;
public static int fmtextcur = 0x31316C;
public static int fmtextnc = 0x2B174A;
public static int fmbord = 0x9C80FD;
}

View File

@ -1,3 +1,5 @@
package main;
@ -17,6 +19,10 @@ public class Rms {
public static boolean firstStart = true; // ïåðâûé ñòàðò
public static String languageApp = "en"; // ÿçûê ïðîãðàììû
public static String languageInstr = "en"; // ÿçûê èíñòðóìåíòîâ
public static String tempDir = "/e:/other/"; // âðåìåííàÿ ïàïêà
public static int noteWidth = 6; // øèðèíà íîòû
public static int noteHeight = 5; // âûñîòà íîòû
public static boolean numKeysEdit = false; // ðåäàêòèðîâàíèå íîò êëàâèàòóðîé (true) èëè äæîéñòèêîì (false)
/**
* Ñîõðàíåíèå íàñòðîåê
@ -30,6 +36,10 @@ public class Rms {
dos.writeBoolean(firstStart);
dos.writeUTF(languageApp);
dos.writeUTF(languageInstr);
dos.writeUTF(tempDir);
dos.writeInt(noteWidth);
dos.writeInt(noteHeight);
dos.writeBoolean(numKeysEdit);
dos.flush();
options = baos.toByteArray();
dos.close();
@ -67,6 +77,10 @@ public class Rms {
firstStart = dis.readBoolean(); // ïåðâûé ðàç çàïóùåí
languageApp = dis.readUTF();
languageInstr = dis.readUTF();
tempDir = dis.readUTF();
noteWidth = dis.readInt();
noteHeight = dis.readInt();
numKeysEdit = dis.readBoolean();
dis.close();
} catch (Exception ex) {
}

View File

@ -3,10 +3,12 @@ MIDedit 2.1 / 3.0
По просьбе одного человека, на основе исходников MidEdit 2.0.5 (http://sunet.dl.sourceforge.net/project/midedit/MideditProject.tgz) начал делать модификацию.
Изменения:
- Сохранение в .mid, а не в .MID
- Исправления в локализации. Добавлен украинский язык.
- Исправления в локализации.
- Новое графическое меню. Убраны лишние пункты при запуске.
******
********
Добавить украинский язык.
При первом запуске - настройки
Help в aNMPWR
player.realize

View File

@ -4,6 +4,9 @@ package midedit;
import midedit.media.Composition;
import java.util.*;
import javax.microedition.lcdui.*;
import main.L;
import main.P;
import main.Main;
/**
*
@ -17,7 +20,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
public static CompositionForm curForm;
private static final byte SEEK_GAUGE_MAX = 10;
private byte seekGaugeCur = 0;
private MixerMain control;
private Main control;
private MixerModel model;
private Display display;
private NotesCanvas notesCanvas;
@ -32,48 +35,32 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
isWorking,
isNew = false,
isAdd;
private Command addInstrument = new Command(Constants.getStringName(50), Command.HELP, 3),
edit = new Command(Constants.getStringName(51), Command.HELP, 1),
setInstrument = new Command(Constants.getStringName(52), Command.ITEM, 1),
delInstrument = new Command(Constants.getStringName(53), Command.ITEM, 2),
temp = new Command(Constants.getStringName(54), Command.ITEM, 3),
volume = new Command(Constants.getStringName(55), Command.ITEM, 4),
meter = new Command(Constants.getStringName(56), Command.ITEM, 5),
rmsMode = new Command(Constants.getStringName(9), Command.ITEM, 6),
jsr75Mode = new Command(Constants.getStringName(6), Command.ITEM, 7);
private Command addInstrument = new Command(L.str[L.addInstrument], Command.HELP, 3),
edit = new Command(L.str[L.edit], Command.HELP, 1),
setInstrument = new Command(L.str[L.setInstrument], Command.ITEM, 1),
delInstrument = new Command(L.str[L.delInstrument], Command.ITEM, 2),
temp = new Command(L.str[L.tempoBox], Command.ITEM, 3),
volume = new Command(L.str[L.volumeBox], Command.ITEM, 4),
meter = new Command(L.str[L.meter], Command.ITEM, 5),
rmsMode = new Command(L.str[L.RMS], Command.ITEM, 6),
jsr75Mode = new Command(L.str[L.file], Command.ITEM, 7);
;
/**
*
*/
/**
*
*/
/**
*
*/
/**
*
*/
/**
*
*/
/**
*
*/
public static Command play = new Command(Constants.getStringName(57), Command.ITEM, 1),
playOrig = new Command(Constants.getStringName(58), Command.ITEM, 1),
stop = new Command(Constants.getStringName(35), Command.BACK, 0),
back = new Command(Constants.getStringName(25), Command.BACK, 2),
public static Command play = new Command(L.str[L.play], Command.ITEM, 1),
playOrig = new Command(L.str[L.playOrigin], Command.ITEM, 1),
stop = new Command(L.str[L.stop], Command.BACK, 0),
back = new Command(L.str[L.back], Command.BACK, 2),
//cancel = new Command("Cancel",Command.BACK,1),
ok = new Command(Constants.getStringName(59), Command.ITEM, 1);
ok = new Command(L.str[L.ok], Command.ITEM, 1);
/**
*
* @param ctrl
* @throws Exception
*/
public CompositionForm(MixerMain ctrl) throws Exception {
public CompositionForm(Main ctrl) throws Exception {
this(ctrl, null);
isNew = true;
@ -87,7 +74,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
* @param fName
* @throws Exception
*/
public CompositionForm(MixerMain ctrl, String fName) throws Exception {
public CompositionForm(Main ctrl, String fName) throws Exception {
super((fName != null) ? fName : "New");
control = ctrl;
model = control.getModel();
@ -133,9 +120,9 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
*
*/
public void run() {
display = Display.getDisplay(MixerMain.curMIDlet);
display = main.Main.dsp;
WaitForm waitForm = new WaitForm(Constants.getStringName(19),//@@@
WaitForm waitForm = new WaitForm(L.str[L.opening],//@@@
model.getWaitableFile(),
control.getCurrentlistMenu(),
model);
@ -154,7 +141,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
isWorking = true;
} catch (Exception ex) {
Alert a = new Alert(Constants.getStringName(12), Constants.getStringName(13) + "\n" + ex, null, null);//@@@
Alert a = new Alert(L.str[L.error], L.str[L.openError] + "\n" + ex, null, null);//@@@
a.setTimeout(Alert.FOREVER);
waitForm.cancel();
isWorking = false;
@ -185,12 +172,12 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
throw new Exception("instruments==null");
}
choiseInstrument = new ChannelChoiceGroup(Constants.getStringName(23), instrumentsStrings, this.buildChansList());
choiseInstrument = new ChannelChoiceGroup(L.str[L.menu], instrumentsStrings, this.buildChansList());
if (choiseInstrument == null) {
throw new Exception("choiseInstrument==null");
}
this.append(choiseInstrument);
seekingGauge = new Gauge(Constants.getStringName(71), true, SEEK_GAUGE_MAX, 0);
seekingGauge = new Gauge(L.str[L.seek], true, SEEK_GAUGE_MAX, 0);
this.append(seekingGauge);
this.addCommand(edit);
this.addCommand(play);
@ -204,7 +191,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
this.addCommand(back);
//this.addCommand(rmsMode);
this.setCommandListener(this);
MixerModel.isRMSMode = true;
P.isRMSMode = true;
}
private byte[] buildChansList() {
@ -246,7 +233,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
}
else {
instrName = ((ChoiceGroup) i).getString(((ChoiceGroup) i).getSelectedIndex());
instrumNum =Constants.instrVectorArr.indexOf(instrName)+1;
instrumNum = Constants.instrVectorArr.indexOf(instrName)+1;
}
// System.out.println("instrName = " + instrName);
// System.out.println("instrumNum = " + instrumNum);
@ -281,7 +268,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
if (channel != -1) {
choiseInstrument.appendChannel(instrName, channel);
} else {
Alert a = new Alert(Constants.getStringName(14), Constants.getStringName(15), null, null);
Alert a = new Alert(L.str[L.listInstruments], L.str[L.impossible], null, null);
display.setCurrent(a);
try {
Thread.sleep(1000);
@ -334,7 +321,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
} catch (Exception e) {
msg("" + e);
}
} else if (command == Settings.comCancel) {
} else if (command == P.comCancel) {
model.stopPlay();
display.setCurrent(CompositionForm.this);
} else if (command == stop) {
@ -393,13 +380,13 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
display.setCurrent(volForm);
} else if (command == meter) {
Form textBoxTemp = new Form(Constants.getInstrName(72));
final TextField nomField = new TextField(Constants.getStringName(73), "" + composition.getNom(), 2, TextField.NUMERIC);
final TextField nomField = new TextField(L.str[L.numerator], "" + composition.getNom(), 2, TextField.NUMERIC);
textBoxTemp.append(nomField);
final TextField denomField = new TextField(Constants.getStringName(74), "" + composition.getDenomE(), 1, TextField.NUMERIC);
final TextField denomField = new TextField(L.str[L.denominator], "" + composition.getDenomE(), 1, TextField.NUMERIC);
textBoxTemp.append(denomField);
textBoxTemp.append(MixerMain.createStringItem(Constants.getStringName(76), 2));
textBoxTemp.append(Main.createStringItem(L.str[L.meterInfo], 2));
textBoxTemp.addCommand(CompositionForm.ok);
textBoxTemp.addCommand(Settings.comCancel);
textBoxTemp.addCommand(P.comCancel);
textBoxTemp.setCommandListener(new CommandListener() {
public void commandAction(Command command, Displayable displayable) {
@ -412,18 +399,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
});
model.display.setCurrent(textBoxTemp);
} //else if(command == rmsMode)
//{
//MixerModel.isRMSMode=true;
//this.removeCommand (rmsMode);
//this.addCommand (jsr75Mode);
//}
//else if(command == jsr75Mode)
//{
//MixerModel.isRMSMode=false;
//this.removeCommand (jsr75Mode);
//this.addCommand (rmsMode);
//}
}
else if (command == back) {
control.comBack();
}
@ -440,7 +416,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
Thread runner = new Thread() {
public void run() {
WaitForm waitForm = new WaitForm(Constants.getStringName(18) + "...",
WaitForm waitForm = new WaitForm(L.str[L.saving] + "...",
model.getWaitableFile(),
control.getCurrentlistMenu(),
model);
@ -450,12 +426,11 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
composition.setName(nameFinal);
try {
String ans = model.saveMix(composition, nameFinal);
Alert a = new Alert(Constants.getStringName(16), ans, null, null);
Alert a = new Alert(L.str[L.saved], ans, null, null);
a.setTimeout(Alert.FOREVER);
control.setCurrentlistMenu(a);
} catch (Exception ex) {
Alert a = new Alert(Constants.getStringName(12),
Constants.getStringName(17) + "\n" + ex.getMessage(), null, null);
Alert a = new Alert(L.str[L.error], L.str[L.savingError] + "\n" + ex.getMessage(), null, null);
a.setTimeout(Alert.FOREVER);
waitForm.cancel();
control.setCurrentlistMenu(a);
@ -480,8 +455,8 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
* @param s
*/
public static void msg(String s) {
Alert a = new Alert(Constants.getStringName(12), Constants.getStringName(12) + "\n" + s, null, null);
MixerMain.display.setCurrent(a);
Alert a = new Alert(L.str[L.error], L.str[L.error] + "\n" + s, null, AlertType.ERROR);
Main.dsp.setCurrent(a);
}
/*Form tabsInstruments (){
MyItem []groupsOfElements = new MyItem [16];
@ -500,20 +475,20 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
// listOfElements[j] = j + i * 8 + 1 + ' ' + Constants.getInstrName(j + i * 8 + 1);
// }
String[] listOfElements = new String[8];
System.arraycopy(Settings.parserInstr.stringResourses, i*8+1, listOfElements,0, 8);
System.arraycopy(L.instr, i*8+1, listOfElements,0, 8);
groupsChoiseGroup[i] = new ChoiceGroup(Constants.getInstrName(129 + i), 4, listOfElements, null);
//for (int j=0; j<8; j++)
//groupsOfElements[i].setFont(j,MixerMain.SMALL_FONT);
//groupsOfElements[i].setFont(j,Main.SMALL_FONT);
groupsChoiseGroup[i].addCommand(play);
groupsChoiseGroup[i].addCommand(ok);
groupsChoiseGroup[i].setItemCommandListener(this);
}
listInstrumentsForm = new Form(Constants.getStringName(75), groupsChoiseGroup);
listInstrumentsForm = new Form(L.str[L.instruments], groupsChoiseGroup);
Item drums = new StringItem(Constants.getInstrName(0), null);
drums.addCommand(ok);
drums.setItemCommandListener(this);
listInstrumentsForm.append(drums);
listInstrumentsForm.addCommand(Settings.comCancel);
listInstrumentsForm.addCommand(P.comCancel);
listInstrumentsForm.setCommandListener(this);
}
//form.setItemStateListener(this);

View File

@ -1,35 +1,22 @@
package midedit;
import java.util.Vector;
import main.Rms;
import main.L;
//import java.util.*;
//import java.lang.*;
/**
*
* @author user
*/
public class Constants
{
public class Constants {
/**
*
* @param index
* @param t
*/
public static String getStringName (int index){
return Settings.parserLang.getStringResourses(index);
public static String getInstrName(int index) {
return L.instr[index];
}
public static String getInstrName (int index){
return Settings.parserInstr.getStringResourses(index);
}
public static void setTimeConst(int t)
{
public static void setTimeConst(int t) {
timeConst = t;
}
/**
@ -55,7 +42,7 @@ public class Constants
*
*/
public final static int N_INSTR = 127,
DRUMS_LENGTH=61,//27__87
DRUMS_LENGTH = 61,//27__87
DRUMS_SHIFT = 27;
/**
*
@ -65,11 +52,6 @@ public class Constants
*
*/
public static final int NCHANNEL = 16;
// /**
// *
// */
// public static final String[] noteNames = {"C","C#","D","D#","E",
// "F","F#","G","G#","A","A#","B"};
/**
*
*/
@ -77,47 +59,43 @@ public class Constants
/**
*
*/
public final static String[]KEY_MAP = {
"<LeftSoftKey>", getStringName(24),
"<RightSoftKey>", getStringName(25),
"<Fire>,<5>", getStringName(26)+"\n"+
getStringName(27),
"<9>,<Clear>", getStringName(28),
"<Red Phone>", getStringName(29),
"<Volume +'\'->", getStringName(30),
"<1>", getStringName(31),
"<3>", getStringName(32),
"<7>,<Green Phone>", getStringName(33),
"<*>,<#>,<0>", getStringName(34),
//Settings.settingsIndex[4]==0? "<5>": "<Fire>",getStringName(35),
Settings.settingsIndex[4]==0? "<up>,<down>,<left>,<right>": "<4>,<6>,<2>,<8> ",getStringName(36),
Settings.settingsIndex[4]==0? "<4>,<6>,<2>,<8>":"<up>,<down>,<left>,<right>", getStringName(37),
};
/**
*
*/
public final static String[]QUICK_COMMANDS = {
"<1> ",getStringName(38),
"<2> ",getStringName(39),
"<3> ",getStringName(40),
"<4> ",getStringName(41),
"<5> ",getStringName(42),
"<6> ",getStringName(43),
"<7> ",getStringName(44),
"<8> ",getStringName(45),
"<9> ",getStringName(46),
"<*> ",getStringName(29),
"<0> ",getStringName(48),
"<#> ",getStringName(49),
};
static VectorArr instrVectorArr=new VectorArr(Settings.parserInstr.stringResourses, 1, 128);
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],
static class VectorArr extends Vector {
public VectorArr(Object src, int beg, int length) {
"<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);
static class VectorArr extends Vector {
public VectorArr(String[] src, int beg, int length) {
super(length);
setSize(length);
System.arraycopy(src, beg, elementData, 0, size());
System.arraycopy(src, beg, super.elementData, 0, size());
}
}
}
}

View File

@ -1,7 +1,7 @@
package midedit;
import midedit.media.Composition;
import main.Main;
/**
@ -21,7 +21,7 @@ public class DrumsCanvas extends MixerCanvas
* @param ctrl
* @param c
*/
public DrumsCanvas(MixerMain ctrl, Composition c)
public DrumsCanvas(Main ctrl, Composition c)
{
super(ctrl,c,Constants.DRUMS_CHANNEL);
prepareConstants();

View File

@ -1,233 +0,0 @@
package midedit;
import midedit.io.AbstractFile;
import javax.microedition.lcdui.*;
/**
*
* @author user
*/
public class FileChooser extends List implements CommandListener, Runnable {
private AbstractFile file;
private String path;
private String selectedFileName;
private AbstractListener listener = null;
private String[] fileNames;
private Displayable prevDisplay;
private Command up = new Command(Constants.getStringName(60), Command.BACK, 1),
delete = new Command(Constants.getStringName(61), Command.ITEM, 1),
saveThis;
private Form waitForm;
private boolean isSave;
/**
*
*/
public final static char FILE_DELIMITER = Constants.FILE_DELIM;
private String defaultPath;
/**
*
* @param prev
* @param pathStr
* @param save
* @param aFile
*/
public FileChooser(Displayable prev, String pathStr, boolean save, AbstractFile aFile) {
super((save) ?Constants.getStringName(62) : Constants.getStringName(63), List.IMPLICIT);
file = aFile;
isSave = save;
prevDisplay = prev;
path = pathStr;
defaultPath = pathStr;
selectedFileName = "";
waitForm = new Form(Constants.getStringName(64));
waitForm.append("\n\n"+Constants.getStringName(65)+"..");
if (!MixerModel.isRMSMode) {
this.addCommand(up);
}
if (isSave) {
saveThis = new Command(Constants.getStringName(66), Command.SCREEN, 0);
this.addCommand(saveThis);
} else if (MixerModel.isRMSMode)
this.addCommand(delete);
this.addCommand(Settings.comCancel);
this.setCommandListener(this);
updateView();
}
/**
*
* @param aListener
*/
public void setAbstractListener(AbstractListener aListener) {
listener = aListener;
}
/**
*
* @param command
* @param displayable
*/
public void commandAction(Command command, Displayable displayable) {
try {
if (command == up) {
int ind;
if (path.length() >= 3)
{
ind = path.lastIndexOf(FILE_DELIMITER, path.length() - 2);
String newPath;
if (ind >= 0) {
newPath = path.substring(0, ind + 1);
} else {
newPath = "" + FILE_DELIMITER;
}
path = newPath;
}
updateView();
} else if (command == delete) {
int ind = this.getSelectedIndex();
if (path.length() > 0) {
char ch = path.charAt(path.length() - 1);
if (ch != '/' && ch != '\\') {
path += FILE_DELIMITER;
}
}
selectedFileName = fileNames[ind];
if (listener != null) {
file.delete(selectedFileName);
}
} else if (command == Settings.comCancel) {
path = null;
if (listener != null) {
listener.actionPerformed(0);
}
} else if (command == saveThis) {
if (listener != null) {
try{
listener.actionPerformed(0);
}
catch (Exception e){
Alert a = new Alert(Constants.getStringName(12),Constants.getStringName(20)+":\nlistener.actionPerformed "+ e.getMessage(), null, null);
MixerMain.display.setCurrent(a, prevDisplay);
}
}
}
else
{
int ind = this.getSelectedIndex();
String fullName;
if (path.length() > 0) {
char ch = path.charAt(path.length() - 1);
if (ch != '/' && ch != '\\') {
path += FILE_DELIMITER;
}
}
fullName = path;
fullName += fileNames[ind];
if (file.isDirectory(
fullName)) {
selectedFileName = "";
path = fullName;
if (path.charAt(path.length() - 1) != '/') {
path += FILE_DELIMITER;
}
updateView();
} else if (!isSave)
{
selectedFileName = fileNames[ind];
{
if (listener != null) {
listener.actionPerformed(0);
}
}
}
}
} catch (Exception e) {
Alert a = new Alert(Constants.getStringName(12),Constants.getStringName(20)+":\nFileChooser "+ e.getMessage(), null, null);
MixerMain.display.setCurrent(a, prevDisplay);
}
}
/**
*
*/
public void update() {
MixerMain.display.callSerially(new Runnable() {
public void run() {
updateView();
}
});
}
private void updateView() {
MixerMain.display.setCurrent(waitForm);
new Thread(this).start();
}
/**
*
*/
public void run()
{
try {
if (path == null) {
path = defaultPath;
}
fileNames = file.list(
path);
path = file.getLastListPath();
for (int i = this.size() - 1; i >= 0; --i) {
this.delete(i);
}
if (fileNames != null) {
for (int i = 0; i < fileNames.length; ++i) {
this.insert(i, fileNames[i], null);
}
}
this.setTicker(new Ticker(path));
MixerMain.display.setCurrent(this);
} catch (Exception e) {
Alert a = new Alert(Constants.getStringName(21),Constants.getStringName(21)+ ":\n" + e.getMessage() + "\npath=" + path, null, null);
MixerMain.display.setCurrent(a, prevDisplay);
path = null;
selectedFileName = "";
}
}
/**
*
* @return
*/
public String getSelectedFilePath() {
if (path == null) {
return null;
}
return path + selectedFileName;
}
/**
*
* @return
*/
public String getSelectedFolderPath() {
return path;
}
}

View File

@ -1,219 +0,0 @@
package midedit;
import java.io.*;
public class LangParser {
/**
<p>Эта версия также демонстрирует простой способ определения
локализованных ресурсов. Она считывает файл, который является
частью файла JAR приложения (не файла JAD)
для загрузки локализованных ресурсов. Файл
состоит из набора пар «ключ-значение», одной на строку,
которые представляют локализованные строки.
MID-лет должен затем проанализировать содержимое файла
и создать внутреннюю хэшированную таблицу для поиска.
<p>Этот подход требует слишком много усилий по обработке
потока, который содержит файл
локализованных ресурсов. Более того, этот подход
не отвечает за локализацию ресурсов, которые
не являются строками.
*/
/** Региональная настройка, указанная для выполнения данного
MID-лета.
* Извлекает региональную настройку из программного
обеспечения AMS. Региональная настройка должна быть
установлена до выполнения данного MID-лета.
*/
int isSupported=1;
private int maxSize;
String locale,extension;// = System.getProperty("microedition.locale");
/** Файл, который содержит ресурсы для
активной локальной настройки.
* Названия файлов локализованных ресурсов, соответствующих
форме: <язык>_<страна>.txt.
Создает строку имени файла и передает ее в
метод, который открывает файл и извлекает
содержимое.
*/
String resourceFile;// ="bin/"+locale + ".lang";
/* Символьная кодировка, установленная по умолчанию,
используемая данной платформой.
* В данном случае не используется
*/
//private String encoding;
/** HashTable, которая содержит локализованные
ресурсы.
*/
String [] stringResourses;
/**
Конструктор No-arg.
Получает текущее название
региональной настройки. Использует его для создания
имени файла, который содержит локализованные
ресурсы региональной настройки. Файл ресурса
находится в файле JAR приложения.
*/
public LangParser(String newLocale,String newExtension, int parSize) {
/**
*/
extension=newExtension;
maxSize=parSize;
stringResourses = new String [maxSize];
setLocale(newLocale,extension);
if (isSupported == 0) {
//do something, eg. throws Exception or generate Alert;
return;
}
}
/**
Выдает значение, связанное с указанным
ключом из пакета ресурсов приложения.
Если ресурс не найден возвращает указанный ключ
@param key - ключ пары «ключ-значение».
@ выдает значение, связанное с
указанным ключом.
*/
public String getStringResourses (int number){
if (stringResourses[number] == null || number<0 || number>stringResourses.length) {
return "*******";
}
return stringResourses[number];
}
private void setLocale (String newLocale,String newExtension){
locale=newLocale;
resourceFile ="/bin/"+locale + "."+newExtension;
loadResources(resourceFile);
}
/**
Загружает определенные пользователем ресурсы приложения
из указанного файла. Файл является частью файла JAR
приложения, расположенного на реальном устройстве.
J2MEWTK хранит файл в файле JAR приложения, расположенном
в директории приложения bin/.
@param file - имя определенного пользователем файла
ресурса приложения.
*/
private void loadResources(String file) {
Class с = getClass();
if (file == null) {
isSupported=0;
file=("/bin/en."+extension);
}
InputStream is = null;
is = с.getResourceAsStream(file);
if (is == null) {
isSupported=0;
file=("/bin/en."+extension);
}
if (is == null){
for (int i=0;i<maxSize;i++)
stringResourses[i]="******";
return;}
Reader reader;
try{
reader = new InputStreamReader(is,"UTF-8");
} catch (UnsupportedEncodingException unEncExc){
reader = new InputStreamReader(is);
}
processStream(reader);
}
/**
*/
private void processStream(Reader stream) {
if (stream == null) {
return;
}
int number=0;
StringBuffer value = new StringBuffer();
for ( ;number<maxSize;number++) {
// Считываем строку. Предполагается, что каждая строка
// содержит ключ и значение,
// отделенные двоеточием. Если -1, значит
// мы достигли конца файла.
value.delete(0, value.length());
int status = readLine(value, stream);
if (status == -1){
break;
}
// Вставляем этот ресурс в хэшированную таблицу
// ресурсов приложения.
try {
stringResourses[number]=value.toString();
}
catch (NullPointerException npe){
}
}
for ( ;number<maxSize;number++) {
stringResourses[number]="***";
}
}
/**
* Считывает и обрабатывает следующую не пустую строку
из потока. Формат строки ожидается следующий
<ключ>[ \t]*:[ и]*<значение>, где
<ключ> and <значение> являются метками, состоящими
из буквенных символов или знаков пунктуации, но не
из пустых знаков пробела.
*/
private int readLine(
StringBuffer value,
Reader stream) {
if (value == null ||
stream == null) {
return -1;
}
try {
char c=0;
try{
while (true){
c=(char)stream.read();
if (c==0x0D||c==0x0A){
continue;
}
break;
}
while (true) {
if (c==0x0D||c==0x0A||c==-1||c==0xffff){
break;
}
value.append (c);
//System.out.println (value.toString()+" "+locale+"."+extension+" c="+(int)c);
c=(char)stream.read();
}
} catch (OutOfMemoryError ome){
//System.out.println ("OutOfMemoryError "+locale+"."+extension);
}
} catch (IOException ioe) {
//ioe.printStackTrace();
return -1;
}
if (value==null)
return -1;
return 0;
}
/**
*/
/**
*/
}

View File

@ -3,6 +3,7 @@ package midedit;
import midedit.media.Composition;
import midedit.io.AbstractFile;
import java.io.*;
import main.P;
//import com.siemens.mp.io.File;
public class MidiFile implements Waitable {
@ -72,7 +73,7 @@ public class MidiFile implements Waitable {
}
public void setFile() {
file = MixerModel.isRMSMode ? MixerModel.rmsFile : MixerModel.jsr75File;
file = P.isRMSMode ? MixerModel.rmsFile : MixerModel.jsr75File;
}

View File

@ -1,20 +1,21 @@
package midedit;
import midedit.media.Composition;
import java.util.*;
import java.io.*;
import javax.microedition.lcdui.*;
import main.L;
import main.P;
import main.Main;
import main.Rms;
/**
*
* @author user
*/
abstract public class MixerCanvas extends Canvas implements Runnable
{
abstract public 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;
protected int channel;
private Options options;
@ -22,13 +23,13 @@ abstract public class MixerCanvas extends Canvas implements Runnable
isMarkMode = false,
isMoveMode = false,
isModeDesc = false,
isNumsControl = (Settings.settingsIndex[4] == 1) ? true : false;
isNumsControl = Rms.numKeysEdit;
private Status status;
private MixerMain control;
private Main control;
private MixerModel model;
private Display display = MixerMain.display;
private Thread playingThread ;
private final Runnable playingRunnable= new Runnable() {
private Display display = Main.dsp;
private Thread playingThread;
private final Runnable playingRunnable = new Runnable() {
public void run() {
System.out.println("getTimeToCanvasConct() = " + composition.getTime2CanvasConst());
@ -42,8 +43,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
}
}
} ;
};
/**
*
@ -51,14 +51,14 @@ abstract public class MixerCanvas extends Canvas implements Runnable
* @param c
* @param ch
*/
public MixerCanvas(MixerMain ctrl, Composition c, int ch) {
//if (MixerMain.IS_MIDP2)
public MixerCanvas(Main ctrl, Composition c, int ch) {
//if (Main.IS_MIDP2)
setFullScreenMode(true);
control = ctrl;
composition = c;
channel = ch;
wOne = Settings.settingsIndex[1];
hOne = Settings.settingsIndex[0];
wOne = Rms.noteWidth;
hOne = Rms.noteHeight;
screenHeight = getHeight();
screenWidth = getWidth();
statusBegY = screenHeight - statusHeight;
@ -102,46 +102,46 @@ abstract public class MixerCanvas extends Canvas implements Runnable
if (keyPressedCount == 0) {
keyPressedCount = 1;
}
int gameAction=0;
try{
gameAction = getGameAction(keyCodePressed);
}
catch (IllegalArgumentException illegArg){
}
if ((gameAction == FIRE)&(keyCodePressed!=-1)&(keyCodePressed!=-4)) {
int ga = getGameAction(keyCodePressed);
if (ga == FIRE) {
doKEY_NUM5();
needPaint = true;
needPaintStatus = true;
return/*break*/;
} else if (gameAction == LEFT||keyCodePressed==KEY_NUM4) {
if (isNumsControl^(keyCodePressed==KEY_NUM4))
} else if (ga == LEFT || keyCodePressed == KEY_NUM4) {
if (isNumsControl ^ (keyCodePressed == KEY_NUM4)) {
doBigLeft();
else
} else {
doSmallLeft();
}
status.resetTimeTune();
return;
} else if (gameAction == RIGHT||keyCodePressed==KEY_NUM6) {
if (isNumsControl^(keyCodePressed==KEY_NUM6))
} else if (ga == RIGHT || keyCodePressed == KEY_NUM6) {
if (isNumsControl ^ (keyCodePressed == KEY_NUM6)) {
doBigRight();
else
} else {
doSmallRight();
}
status.resetTimeTune();
return;
} else if (gameAction == UP||keyCodePressed==KEY_NUM2) {
if (isNumsControl^(keyCodePressed==KEY_NUM2))
} else if (ga == UP || keyCodePressed == KEY_NUM2) {
if (isNumsControl ^ (keyCodePressed == KEY_NUM2)) {
doBigUp();
else
} else {
doSmallUp();
}
status.resetTimeTune();
return;
} else if (gameAction == DOWN||keyCodePressed==KEY_NUM8) {
if (isNumsControl^(keyCodePressed==KEY_NUM8))
} else if (ga == DOWN || keyCodePressed == KEY_NUM8) {
if (isNumsControl ^ (keyCodePressed == KEY_NUM8)) {
doBigDown();
else
} else {
doSmallDown();
}
status.resetTimeTune();
return;
}
switch (keyCodePressed) {
case KEY_NUM1:
playFromCurrentPosition();
@ -152,7 +152,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
break;
case KEY_NUM7:
case -10: case -4:
case -10:
case -4:
status.nextView();
needPaintStatus = true;
break;
@ -174,11 +175,13 @@ abstract public class MixerCanvas extends Canvas implements Runnable
status.curParamPlus();
needPaintStatus = true;
break;
case -6: case -1:
case -6:
case -1:
isOptionsView = true;
options.resetMenu();
break;
case -7: case -12:
case -7:
case -12:
CompositionForm.curForm.setComposForm();
break;
case -11:
@ -308,16 +311,14 @@ abstract public class MixerCanvas extends Canvas implements Runnable
*
* @return
*/
protected boolean doKEY_NUM5()
{
protected boolean doKEY_NUM5() {
if (isMoveMode == false && isMarkMode == false && curNote != null) {
timeMarkBeg = getCurTime();
timeMarkEnd = getCurTime();
setMarkModeOn();
}
if (isMoveMode)
{
if (isMoveMode) {
int noteShift = getCurNote() - OrigNote;
if (this instanceof DrumsCanvas) {
noteShift = -noteShift;
@ -333,8 +334,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
if (curNote.len > 0) {
Note noteTmp;
for (noteTmp = curNote.next; noteTmp != null &&
(noteTmp.c != curNote.c || noteTmp.n != curNote.n || noteTmp.v != 0);
for (noteTmp = curNote.next; noteTmp != null
&& (noteTmp.c != curNote.c || noteTmp.n != curNote.n || noteTmp.v != 0);
noteTmp = noteTmp.next);
if (noteTmp != null && noteTmp.c == note.c && noteTmp.n == note.n) {
@ -373,13 +374,12 @@ abstract public class MixerCanvas extends Canvas implements Runnable
private void playFromCurrentPosition() {
try {
if (CompositionForm.isPlaying){
if (CompositionForm.isPlaying) {
model.stopPlay();
playingThread.join();
}
else{
} else {
model.playMix(composition, xBase * Constants.timeConst);
playingThread=new Thread(playingRunnable);
playingThread = new Thread(playingRunnable);
playingThread.start();
System.out.println("CompositionForm.isPlaying = " + CompositionForm.isPlaying);
}
@ -394,16 +394,16 @@ abstract public class MixerCanvas extends Canvas implements Runnable
* @param keyCode
*/
protected void keyReleased(int keyCode) {
if (keyPressedCount > 0) {int gameAction=0;
try{
if (keyPressedCount > 0) {
int gameAction = 0;
try {
gameAction = getGameAction(keyCodePressed);
} catch (IllegalArgumentException illegArg) {
}
catch (IllegalArgumentException illegArg){
}
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6 ||
keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8 ||
keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR||
gameAction==LEFT||gameAction==RIGHT||gameAction==UP||gameAction==DOWN) {
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6
|| keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8
|| keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR
|| gameAction == LEFT || gameAction == RIGHT || gameAction == UP || gameAction == DOWN) {
setNeedPaint();
}
}
@ -425,26 +425,25 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
if (keyPressedCount > 0) {
if (keyPressedCount < 25)
{
if (keyPressedCount < 25) {
keyPressedCount++;
} else{
int gameAction=0;
try{
} else {
int gameAction = 0;
try {
gameAction = getGameAction(keyCodePressed);
} catch (IllegalArgumentException illegArg) {
}
catch (IllegalArgumentException illegArg){
}
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6 ||
gameAction==LEFT||gameAction==RIGHT||gameAction==UP||gameAction==DOWN||
keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8 ||
keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR) {
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6
|| gameAction == LEFT || gameAction == RIGHT || gameAction == UP || gameAction == DOWN
|| keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8
|| keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR) {
isblack = true;
keyPressed(keyCodePressed);
}}
}
}
}
paintUniEditor(g);
@ -457,7 +456,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
private void paintUniEditor(Graphics g) {
g.setColor(224, 192, 224);
g.setGrayScale(0);
g.setFont(MixerMain.SMALL_FONT);
g.setFont(P.smPlain);
if (needPaint == true) {
int tmpN = getNoteFromLine(curY);
if (tmpN < 0 || tmpN > 127) {
@ -504,7 +503,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
g.drawLine(0, yt, rollWidth - 1, yt);
}
g.setColor(192, 160, 160);
yt = curY * hOne + 1 ;
yt = curY * hOne + 1;
g.fillRect(0, yt, rollWidth - 1, hOne - 1);
g.setGrayScale(96);
int vLineStep = 32 >> composition.getDenomE();
@ -531,8 +530,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
for (note = composition.getFirstNote(tBeg, channel);
note != null && note.t <= tMax; note = note.next) {
if (note.c == channel && note.v != 0) {
if (note.t <= curTimePlus && note.n == curN &&
(curTime < note.t + (note.len == 0 ? 1 : note.len))) {
if (note.t <= curTimePlus && note.n == curN
&& (curTime < note.t + (note.len == 0 ? 1 : note.len))) {
curNote = note;
if (!isMarkMode) {
g.setColor(150, 0, 0);
@ -554,8 +553,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
}
}
if (isMoveMode)
{
if (isMoveMode) {
int shiftTime = getCurTime() - OrigTime;
int shiftNote = getCurNote() - OrigNote;
@ -641,7 +639,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
yt = nH;
}
g.fillRect(xt + 1 , yt * hOne + 1 , 2, hOne - 1);
g.fillRect(xt + 1, yt * hOne + 1, 2, hOne - 1);
}
}
@ -842,16 +840,15 @@ abstract public class MixerCanvas extends Canvas implements Runnable
statusBegY,
nW,
keyCodePressed = KEY_NUM1;
protected int
curY,
protected int curY,
hMin,
hMax = 15,
hBase,
hStep = 12,
wBeg = 16,
hBeg = 5,
wOne = Settings.settingsIndex[1],
hOne = Settings.settingsIndex[0],
wOne = Rms.noteWidth,
hOne = Rms.noteHeight,
nH,
rollWidth,
rollHeight;
@ -896,7 +893,6 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
}
private class Status {
private int statusMode;
@ -1089,8 +1085,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
return params[MODE_LEN];
}
private void action()
{
private void action() {
if (statusMode == MODE_LEN) {
extLen = (extLen + 1) % 3;
calcLen();
@ -1255,8 +1250,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
PrintSmallFont.print(g, note.n, 0, m4 - xIndent - 12, yIndent, color);
} else if (MixerCanvas.this instanceof DrumsCanvas) {
m1 = 2;
g.setFont(MixerMain.SMALL_FONT);
g.drawString(getNoteFromLine(curY)+" "+Constants.getInstrName(getNoteFromLine(curY) - DrumsCanvas.drumsShift+145),
g.setFont(P.smPlain);
g.drawString(getNoteFromLine(curY) + " " + Constants.getInstrName(getNoteFromLine(curY) - DrumsCanvas.drumsShift + 145),
m1, yIndent + 3, Graphics.BOTTOM | Graphics.LEFT);
}
@ -1265,8 +1260,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
m4 = 55;
if (isMoveMode) {
g.drawString(Constants.getStringName(77), m4 - 18, yIndent + 3, Graphics.BOTTOM | Graphics.RIGHT);
g.drawString(L.str[L.delta], m4 - 18, yIndent + 3, Graphics.BOTTOM | Graphics.RIGHT);
}
PrintSmallFont.print(g, note.v, 0, m4 - xIndent, yIndent, color);
@ -1292,17 +1286,17 @@ abstract public class MixerCanvas extends Canvas implements Runnable
//System.out.println(this.toString() + " created");
if (screenHeight > 240) {
ONE_LINE_HEIGHT = 22;
MENU_WIDTH = 120;
MENU_WIDTH = 140;
}
MENU_BEGX = (screenWidth - MENU_WIDTH) / 2;
MENU_BEGY = (screenHeight - menuNumLines * ONE_LINE_HEIGHT) / 4;
mainMenu = new Menu(Constants.getStringName(24), null, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
mainMenu = new Menu(L.str[L.menu], null, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
Menu playMenu = new Menu(Constants.getStringName(78), mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem playAllItem = new MenuItem(Constants.getStringName(79), 0) {
Menu playMenu = new Menu(L.str[L.playStop], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem playAllItem = new MenuItem(L.str[L.playAll], 0) {
public boolean actionPerformed() {
try {
@ -1313,7 +1307,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
};
playMenu.addItem(playAllItem);
MenuItem playItem = new MenuItem(Constants.getStringName(80), 0) {
MenuItem playItem = new MenuItem(L.str[L.playScreen], 0) {
public boolean actionPerformed() {
try {
@ -1325,7 +1319,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
};
playMenu.addItem(playItem);
MenuItem playTrackAllItem = new MenuItem(Constants.getStringName(81), 0) {
MenuItem playTrackAllItem = new MenuItem(L.str[L.trackAll], 0) {
public boolean actionPerformed() {
try {
@ -1337,7 +1331,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
};
playMenu.addItem(playTrackAllItem);
MenuItem playTrackItem = new MenuItem(Constants.getStringName(82), 0) {
MenuItem playTrackItem = new MenuItem(L.str[L.trackScreen], 0) {
public boolean actionPerformed() {
try {
@ -1349,7 +1343,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
};
playMenu.addItem(playTrackItem);
MenuItem stopItem = new MenuItem(Constants.getStringName(35), 0) {
MenuItem stopItem = new MenuItem(L.str[L.stop], 0) {
public boolean actionPerformed() {
model.stopPlay();
@ -1361,14 +1355,14 @@ abstract public class MixerCanvas extends Canvas implements Runnable
mainMenu.addItem(playMenu);
Menu editMenu = new Menu(Constants.getStringName(51), mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
Menu editMenu = new Menu(L.str[L.edit], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
Menu markMenu = new Menu(Constants.getStringName(83), editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem item1 = new MenuItem(Constants.getStringName(84), KEY_NUM1);
Menu markMenu = new Menu(L.str[L.mark], editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem item1 = new MenuItem(L.str[L.markBegin], KEY_NUM1);
markMenu.addItem(item1);
MenuItem item2 = new MenuItem(Constants.getStringName(85), KEY_NUM2);
MenuItem item2 = new MenuItem(L.str[L.markEnd], KEY_NUM2);
markMenu.addItem(item2);
MenuItem item21 = new MenuItem(Constants.getStringName(86), 0) {
MenuItem item21 = new MenuItem(L.str[L.unmark], 0) {
public boolean actionPerformed() {
setMarkModeOff();
@ -1378,49 +1372,49 @@ abstract public class MixerCanvas extends Canvas implements Runnable
markMenu.addItem(item21);
editMenu.addItem(markMenu);
MenuItem item22 = new MenuItem(Constants.getStringName(87), 0) {
MenuItem item22 = new MenuItem(L.str[L.modifyBlock], 0) {
public boolean actionPerformed() {
isMoveMode = true;
NoteListUtils.deleteSelected(composition, (byte) channel);
OrigTime = getCurTime();
OrigNote = getCurNote();
viewModeDesc(Constants.getStringName(88));
viewModeDesc(L.str[L.modifyMode]);
return true;
}
};
editMenu.addItem(item22);
MenuItem item3 = new MenuItem(Constants.getStringName(89), KEY_NUM3);
MenuItem item3 = new MenuItem(L.str[L.copy], KEY_NUM3);
editMenu.addItem(item3);
Menu menuPaste = new Menu(Constants.getStringName(90), editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem item4 = new MenuItem(Constants.getStringName(91), KEY_NUM4);
Menu menuPaste = new Menu(L.str[L.paste], editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem item4 = new MenuItem(L.str[L.insert], KEY_NUM4);
menuPaste.addItem(item4);
MenuItem item5 = new MenuItem(Constants.getStringName(92), KEY_NUM5);
MenuItem item5 = new MenuItem(L.str[L.replace], KEY_NUM5);
menuPaste.addItem(item5);
MenuItem item6 = new MenuItem(Constants.getStringName(93), KEY_NUM6);
MenuItem item6 = new MenuItem(L.str[L.blend], KEY_NUM6);
menuPaste.addItem(item6);
editMenu.addItem(menuPaste);
MenuItem item8 = new MenuItem(Constants.getStringName(94), KEY_NUM8);
MenuItem item8 = new MenuItem(L.str[L.removeSelection], KEY_NUM8);
editMenu.addItem(item8);
MenuItem item7 = new MenuItem(Constants.getStringName(61), KEY_NUM7);
MenuItem item7 = new MenuItem(L.str[L.delete], KEY_NUM7);
editMenu.addItem(item7);
mainMenu.addItem(editMenu);
Menu undoMenu = new Menu(Constants.getStringName(29), mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem itemStar = new MenuItem(Constants.getStringName(29), KEY_STAR);
Menu undoMenu = new Menu(L.str[L.undo], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem itemStar = new MenuItem(L.str[L.undo], KEY_STAR);
undoMenu.addItem(itemStar);
MenuItem itemPound = new MenuItem(Constants.getStringName(95), KEY_POUND);
MenuItem itemPound = new MenuItem(L.str[L.redo], KEY_POUND);
undoMenu.addItem(itemPound);
mainMenu.addItem(undoMenu);
Menu helpMenu = new Menu(Constants.getStringName(96), mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
MenuItem mapItem = new MenuItem(Constants.getStringName(97), 0) {
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(Constants.getStringName(97), createStringItems(Constants.KEY_MAP));
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);
@ -1428,10 +1422,10 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
};
helpMenu.addItem(mapItem);
MenuItem quickItem = new MenuItem(Constants.getStringName(98), 0) {
MenuItem quickItem = new MenuItem(L.str[L.quickCommands], 0) {
public boolean actionPerformed() {
Form form = new Form(Constants.getStringName(98), createStringItems(Constants.QUICK_COMMANDS));
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);
@ -1440,7 +1434,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
};
helpMenu.addItem(quickItem);
mainMenu.addItem(helpMenu);
MenuItem exitItem = new MenuItem(Constants.getStringName(25), 0) {
MenuItem exitItem = new MenuItem(L.str[L.back], 0) {
public boolean actionPerformed() {
CompositionForm.curForm.setComposForm();
@ -1457,7 +1451,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
StringItem[] strItem = new StringItem[strings.length / 2];
for (int i = 0; i < strings.length / 2; i++) {
strItem[i] = new StringItem(strings[i * 2], strings[i * 2 + 1], 1);
strItem[i].setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL));
strItem[i].setFont(P.smPlain);
}
return strItem;
}
@ -1541,11 +1535,11 @@ abstract public class MixerCanvas extends Canvas implements Runnable
}
break;
default:
int dir=0;
try{
dir=getGameAction(keyCode);
int dir = 0;
try {
dir = getGameAction(keyCode);
} catch (IllegalArgumentException illegArg) {
}
catch (IllegalArgumentException illegArg){}
switch (dir) {
case Canvas.UP:
menu.up();
@ -1631,16 +1625,15 @@ abstract public class MixerCanvas extends Canvas implements Runnable
protected void paint(Graphics g) {
g.translate(x, y);
g.setColor(96, 64, 128);
g.setColor(P.colup);
g.fillRect(0, 1, w, LINE_HEIGHT - 1);
g.setColor(0);
g.drawRect(0, 1, w - 1, LINE_HEIGHT - 1);
g.setClip(0, 1, w - 1, LINE_HEIGHT - 1);
g.setColor(255, 255, 255);
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
g.drawString(this.getName(), (w - 4) / 2, 3,
Graphics.TOP | Graphics.HCENTER);
g.setFont(P.medBold);
g.drawString(this.getName(), (w - 4) / 2, 3, Graphics.TOP | Graphics.HCENTER);
g.setFont(Font.getDefaultFont());
g.setClip(0, 0, getWidth(), getHeight());
@ -1651,7 +1644,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
g.setClip(1, 1, w - 1, hMax - 1);
MenuItem item;
int i;
for (i = 0; i < numLinesMaxVisible ; i++) {
for (i = 0; i < numLinesMaxVisible; i++) {
if (i == curLine) {
g.setColor(160, 160, 224);
@ -1719,8 +1712,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
private void down() {
if (lineBase + curLine < items.size() - 1) {
if (isScroll && curLine >= numLines - 2 &&
lineBase + numLines < items.size()) {
if (isScroll && curLine >= numLines - 2
&& lineBase + numLines < items.size()) {
lineBase++;
} else {
curLine++;
@ -1748,7 +1741,6 @@ abstract public class MixerCanvas extends Canvas implements Runnable
// public MenuItem() {
// }
private MenuItem(String str, int key) {
name = str;
keyCode = key;

View File

@ -1,404 +0,0 @@
package midedit;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.IOException;
/**
*
* @author user
*/
public class MixerMain extends MIDlet implements CommandListener, AbstractListener {
/**
* Ìàëåíüêèé øðèôò
*/
public static final Font SMALL_FONT = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
static MIDlet curMIDlet;
static Display display;
private static final int CREATE_NEW = 0;
private static final int RESUME = 1;
private static final int OPEN = 2;
private static final int SAVE = 3;
private static final int SAVE_AS = 4;
private static final int RMS_FS = 5;
private static final int OPTIONS = 6;
private static final int ABOUT = 7;
private static final int EXIT = 8;
private Item[] items;
private Item itemsRMS;
private Image[] iconsImgs;
private TextBox textBoxSave;
private String openSaveString;
private MixerModel model;
private Settings settings;
/**
*/
private CompositionForm compositionForm;
private FileChooser chooser;
//static boolean isRMSMode = false;
private static Form aboutForm;
private static Screen iconsMenu;
/**
*
*/
private static int ifFirstReturn = 0;
public MixerMain() {
curMIDlet = MixerMain.this;
display = Display.getDisplay(MixerMain.this);
}
/**
*
*/
public void startApp() {
Rms.restoreOptions();
L.readLang(Rms.languageApp, true);
//L.readLang(Rms.languageInstr, false);
settings = new Settings(MixerMain.this);
model = new MixerModel();
readImages();
createMenu();
display.setCurrent(iconsMenu);
}
/**
*
*/
public void pauseApp() {}
/**
*
* @param unconditional
*/
public void destroyApp(boolean unconditional) {
if(Rms.firstStart) Rms.firstStart = false;
Rms.saveOptions();
notifyDestroyed();
}
/**
* Ïîëó÷èòü èçîáðàæåíèÿ èêîíîê ìåíþ
*/
private void readImages() {
iconsImgs = new Image[9];
for (int i = 0; i < iconsImgs.length; i++) {
try {
iconsImgs[i] = Image.createImage("/img/main/"+i+".png");
} catch (IOException ioe) {
iconsImgs[i] = Image.createImage(1, 1);
}
}
}
/**
* Ñîçäàòü ìåíþ (èêîíêè, List ñ èêîíêàìè, List áåç èêîíîê)
*/
private void createMenu() {
try {
iconsMenu = createListMenu(true);
} catch (Throwable ex) {
iconsMenu = createListMenu(false);
}
}
/**
*
* @param names
* @param cl
* @return
*/
private List createListMenu(boolean withImgs) {
String[] menuNames = {
L.str[L.create],
L.str[L.resume],
L.str[L.open],
L.str[L.save],
L.str[L.saveAs],
L.str[L.file],
L.str[L.options],
L.str[L.about]
/*Constants.getStringName(1),
Constants.getStringName(2),
Constants.getStringName(3),
Constants.getStringName(4),
Constants.getStringName(5),
Constants.getStringName(6),
Constants.getStringName(7),
Constants.getStringName(8),*/
};
List list = new List("MIDEdit", 3, menuNames, withImgs ? iconsImgs : null);
list.setCommandListener(this);
return list;
}
/**
*
* @param text
* @param appearanceMode
* @return
*/
public static Item createStringItem(String text, int appearanceMode) {
StringItem strItem = new StringItem(null, text, appearanceMode);
strItem.setFont(SMALL_FONT);
return strItem;
}
/**
*
* @param c
* @param d
*/
public void commandAction(Command c, Displayable d) {
if (d == iconsMenu) {
try {
actionPerformed(((List) iconsMenu).getSelectedIndex());
return;
} catch (ClassCastException clasCastE) {
}
}
actionPerformed(c.getPriority());
}
/**
*
* @param itemNum
*/
public void actionPerformed(int itemNum) {
switch (itemNum) {
case CREATE_NEW:
try {
model.newMix();
if (compositionForm != null) {
compositionForm.releaseMem();
}
compositionForm = null;
System.gc();
openSaveString = "newmix";
MixerModel.isRMSMode = true;
compositionForm = new CompositionForm(this);
if (compositionForm == null) {
throw new Exception("compositionForm == null");
}
display.setCurrent(compositionForm);
new Thread(compositionForm).start();
} catch (Exception e) {
e.printStackTrace();
Alert a = new Alert(Constants.getStringName(12), e.getMessage(), null, null);
display.setCurrent(a);
}
break;
case RESUME:
if (ifFirstReturn == 0) {
return;
}
MixerModel.isRMSMode = true;
display.setCurrent(compositionForm);
break;
case ABOUT:
Item aboutItems[] = {createStringItem("Midedit - mobile midi editor\nAuthor - Bingo\n", 0),
createStringItem("http://bing.at.tut.by\n", 2),
createStringItem("Mods - Cryingangel\n", 0),
createStringItem("http://midedit.wen.ru", 2),
new TextField("Forum seclub.org", "http://seclub.org/forum/index.php?tid=6551", 60, TextField.ANY),
createStringItem("Thanks to:", 2),
createStringItem("Cyber_PUNK - adapted for Nokia\nmaxtr86 - adapted for Sony Erricson\nHelion810\nDark_Dancer - ideas, beta-testing\nsegOro - graphics", 0),};
aboutForm = new Form("About", aboutItems);
aboutForm.addCommand(Settings.comCancel);
aboutForm.setCommandListener(this);
display.setCurrent(aboutForm);
break;
case OPEN:
openFile();
break;
case SAVE:
if (ifFirstReturn == 0) {
return;
}
if (compositionForm.isNew()) {
saveAsFile();
return;
}
openSaveString = compositionForm.getCompositionName();
try {
model.setLocalFile();
compositionForm.saveComposition(openSaveString);
compositionForm.setTitle(openSaveString);
} catch (Exception e) {
Alert a = new Alert(Constants.getStringName(12), e.getMessage(), null, null);
display.setCurrent(a);
}
break;
case SAVE_AS:
if (ifFirstReturn == 0) {
return;
}
saveAsFile();
break;
case RMS_FS:
MixerModel.isRMSMode = !MixerModel.isRMSMode;
//model.setLocalFile(MixerModel.isRMSMode);
try {
try {
((Form) iconsMenu).set(6, MixerModel.isRMSMode ? itemsRMS : items[6]);//!!!!!
} catch (IllegalStateException illegState) {
}
} catch (ClassCastException clasCast) {
((List) iconsMenu).set(6, Constants.getStringName(MixerModel.isRMSMode ? 9 : 6), iconsImgs[6]);
}
break;
case OPTIONS:
display.setCurrent(settings.optionsForm);
// System.out.println("qwerty");
break;
case EXIT:
MixerMain.curMIDlet.notifyDestroyed();
break;
case 10:
setCurrentlistMenu(null);
break;
}
}
public MixerModel getModel() {
return model;
}
/**
*
* @param a
*/
public void setCurrentlistMenu(Alert a) {
if (a != null) {
display.setCurrent(a, iconsMenu);
} else {
display.setCurrent(iconsMenu);
}
}
/**
*
* @return
*/
public Displayable getCurrentlistMenu() {
return iconsMenu;
}
/**
*
*/
private void saveAsFile() {
model.setLocalFile();
final FileChooser chooserForSave = new FileChooser(iconsMenu, "/", true, MixerModel.getLocalFile());
chooserForSave.setAbstractListener(new AbstractListener() {
public void actionPerformed(int itemNum) {
if (chooserForSave.getSelectedFolderPath() != null) {
openSaveString = compositionForm.getCompositionName();
int indBeg = openSaveString.lastIndexOf(Constants.FILE_DELIM);
int indEnd = openSaveString.lastIndexOf('.');
if (indEnd == -1) {
indEnd = openSaveString.length();
}
openSaveString = openSaveString.substring(indBeg + 1, indEnd);
if (openSaveString.length() > 64) {
openSaveString = openSaveString.substring(0, 63);
}
textBoxSave = new TextBox(Constants.getStringName(5) + "...", openSaveString, 64, TextField.ANY);
textBoxSave.addCommand(Settings.comSave);
textBoxSave.addCommand(Settings.comCancel);
//System.out.println ("save as success 2\nopenSaveString="+openSaveString);
textBoxSave.setCommandListener(new CommandListener() {
public void commandAction(Command c, Displayable d) {
if (c == Settings.comSave) {
try {
openSaveString = chooserForSave.getSelectedFilePath() + textBoxSave.getString().trim() + ".mid";
compositionForm.saveComposition(openSaveString);
compositionForm.setTitle(openSaveString);
compositionForm.setNew(false);
} catch (Exception e) {
Alert a = new Alert(Constants.getStringName(12), e.getMessage(), null, null);
display.setCurrent(a);
}
} else {
setCurrentlistMenu(null);
}
}
});
display.setCurrent(textBoxSave);
} else {
setCurrentlistMenu(null);
}
}
});
}
/**
*
*/
private void openFile() {
model.setLocalFile();
if (chooser == null || chooser.getSelectedFilePath() == null) {
final FileChooser chooserLocale = new FileChooser(iconsMenu, "/", false, MixerModel.getLocalFile());
chooserLocale.setAbstractListener(new AbstractListener() {
public void actionPerformed(int itemNum) {
if (chooserLocale.getSelectedFilePath() != null) {
try {
if (compositionForm != null) {
compositionForm.releaseMem();
}
compositionForm = null;
System.gc();
display.setCurrent(iconsMenu);
openSaveString = chooserLocale.getSelectedFilePath();
compositionForm =
new CompositionForm(MixerMain.this,
openSaveString);
display.setCurrent(compositionForm);
new Thread(compositionForm).start();
} catch (Exception e) {
Alert a = new Alert(Constants.getStringName(13), Constants.getStringName(13) + ":\n" + e.getMessage(), null, null);
display.setCurrent(a);
if (compositionForm != null) {
compositionForm.releaseMem();
}
compositionForm = null;
}
} else {
setCurrentlistMenu(null);
}
}
});
} else {
chooser.update();
display.setCurrent(chooser);
}
}
/**
*
*/
public void comBack() {
ifFirstReturn = 1;
MixerModel.isRMSMode = false;
try {
try {
((Form) iconsMenu).set(6, items[6]);
} catch (ClassCastException clasCast) {
((List) iconsMenu).set(6, Constants.getStringName(6), iconsImgs[6]);
}
} catch (IllegalStateException ise) {
}
setCurrentlistMenu(null);
}
}

View File

@ -7,7 +7,10 @@ import midedit.media.JSR135Player;
import midedit.io.RMSFile;
import midedit.io.JSR75File;
import midedit.io.AbstractFile;
import main.Main;
import javax.microedition.lcdui.*;
import main.L;
import main.P;
/**
*
@ -16,11 +19,10 @@ import javax.microedition.lcdui.*;
public class MixerModel extends Thread {
private MidiFile mfile = null;
static boolean isRMSMode = false;
/**
* Îáúåêò äèñïëåÿ
*/
public final Display display = MixerMain.display;
public final Display display = Main.dsp;
/**
*
*/
@ -49,7 +51,7 @@ public class MixerModel extends Thread {
}
}
} catch (Exception e) {
Alert a = new Alert(Constants.getStringName(22), Constants.getStringName(22) + ":\n" + e.getMessage(), null, null);
Alert a = new Alert(L.str[L.apiError], L.str[L.apiError] + ":\n" + e.getMessage(), null, null);
display.setCurrent(a);
}
@ -171,8 +173,7 @@ public class MixerModel extends Thread {
* @throws Exception
*/
public String saveMix(Composition c, String name) throws Exception {
return mfile.writeMixWithName(c, 0, false,
name);
return mfile.writeMixWithName(c, 0, false, name);
}
/**
@ -218,13 +219,6 @@ public class MixerModel extends Thread {
return mfile;
}
// /**
// *
// * @param RMSMode
// */
// public void setLocalFile(boolean RMSMode) {
// isRMSMode = RMSMode;
// }
/**
*
*/
@ -237,6 +231,6 @@ public class MixerModel extends Thread {
* @return
*/
public static AbstractFile getLocalFile() {
return isRMSMode ? rmsFile : jsr75File;
return P.isRMSMode ? rmsFile : jsr75File;
}
}

View File

@ -1,7 +1,6 @@
package midedit;
import main.Main;
import midedit.media.Composition;
import javax.microedition.lcdui.*;
@ -9,16 +8,15 @@ import javax.microedition.lcdui.*;
*
* @author user
*/
public class NotesCanvas extends MixerCanvas
{
public class NotesCanvas extends MixerCanvas {
/**
*
* @param ctrl
* @param c
* @param ch
*/
public NotesCanvas(MixerMain ctrl, Composition c, int ch)
{
public NotesCanvas(Main ctrl, Composition c, int ch) {
super(ctrl, c, ch);
hMax = 127;
hBase = 60;
@ -29,16 +27,15 @@ public class NotesCanvas extends MixerCanvas
*
* @param ch
*/
public void setChannel(int ch)
{
public void setChannel(int ch) {
channel = ch;
}
/**
*
* @return
*/
public int getChannel()
{
public int getChannel() {
return channel;
}
@ -46,27 +43,23 @@ public class NotesCanvas extends MixerCanvas
*
* @return
*/
protected boolean doKEY_NUM5()
{
if(super.doKEY_NUM5() == false)
{
protected boolean doKEY_NUM5() {
if (super.doKEY_NUM5() == false) {
int dt;
dt = super.getCurLen();
byte n = (byte)getNoteFromLine(curY);
byte n = (byte) getNoteFromLine(curY);
int curT = getCurTime();
composition.addNoteOn(curT, (byte) channel, n, super.getCurVol(), dt,true);
composition.addNoteOn(curT, (byte) channel, n, super.getCurVol(), dt, true);
composition.addNoteOffWithoutSearch(curT + dt, (byte) channel, n, dt);
}
return true;
}
/**
*
* @return
*/
protected String getCurTuneString()
{
protected String getCurTuneString() {
return "none";
}
@ -77,42 +70,33 @@ public class NotesCanvas extends MixerCanvas
* @param shiftTime
* @param shiftNote
*/
protected void paintNote(Graphics g, Note note,int shiftTime,int shiftNote)
{
int x,h;
int dx, t=1;
x = getXInPixel(note.t +shiftTime);
h = getLineFromNote(note.n +shiftNote);
dx = (note.len*wOne)/Constants.timeConst;
if(dx==0)
dx=2;
if(x+dx>=0 && x<rollWidth)
{
if(h>=0 && h<nH)
{
g.fillRect(x + t, h*hOne+1, dx - t, hOne-1);
protected void paintNote(Graphics g, Note note, int shiftTime, int shiftNote) {
int x, h;
int dx, t = 1;
x = getXInPixel(note.t + shiftTime);
h = getLineFromNote(note.n + shiftNote);
dx = (note.len * wOne) / Constants.timeConst;
if (dx == 0) {
dx = 2;
}
else
{
h = (h<0)? -1 : nH;
g.fillRect(x+t,h*hOne+1,2,hOne-1);
if (x + dx >= 0 && x < rollWidth) {
if (h >= 0 && h < nH) {
g.fillRect(x + t, h * hOne + 1, dx - t, hOne - 1);
} else {
h = (h < 0) ? -1 : nH;
g.fillRect(x + t, h * hOne + 1, 2, hOne - 1);
}
}
}
/**
*
* @param n
* @return
*/
protected byte getLineFromNote(int n)
{
return (byte)((Constants.INV_CANVAS_CONST - n) - hBase);
protected byte getLineFromNote(int n) {
return (byte) ((Constants.INV_CANVAS_CONST - n) - hBase);
}
/**
@ -120,9 +104,7 @@ public class NotesCanvas extends MixerCanvas
* @param ch
* @return
*/
protected int getNoteFromLine(int ch)
{
return (byte)getCurNote();
protected int getNoteFromLine(int ch) {
return (byte) getCurNote();
}
}

View File

@ -1,76 +0,0 @@
package midedit;
import java.io.*;
import javax.microedition.rms.*;
/**
* Êëàññ ñîõðàíåíèÿ íàñòðîåê
* @author aNNiMON
*/
public class Rms {
private static final String rmsName = "MidEdit_2_1";
private static RecordStore rmsStore;
// Ïàðàìåòðû
public static boolean firstStart = true; // ïåðâûé ñòàðò
public static String languageApp = "en"; // ÿçûê ïðîãðàììû
public static String languageInstr = "en"; // ÿçûê èíñòðóìåíòîâ
/**
* Ñîõðàíåíèå íàñòðîåê
*/
public static void saveOptions() {
if (rmsStore != null) {
byte[] options = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeBoolean(firstStart);
dos.writeUTF(languageApp);
dos.writeUTF(languageInstr);
dos.flush();
options = baos.toByteArray();
dos.close();
rmsStore.setRecord(1, options, 0, options.length);
} catch (InvalidRecordIDException ridex) {
try {
rmsStore.addRecord(options, 0, options.length);
} catch (RecordStoreException ex) {
}
} catch (Exception ex) {
}
}
if (rmsStore != null) {
try {
rmsStore.closeRecordStore();
rmsStore = null;
} catch (RecordStoreException ex) {
}
}
}
/**
* Âîññòàíîâèòü íàñòðîéêè
* Ïóñòûå dis.readBoolean() îñòàâëåíû äëÿ ñîâìåñòèìîñòè ñ ïðîøëûìè âåðñèÿìè
*/
public static void restoreOptions() {
try {
rmsStore = RecordStore.openRecordStore(rmsName, true);
} catch (RecordStoreException ex) {
rmsStore = null;
}
if (rmsStore != null) {
try {
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(rmsStore.getRecord(1)));
firstStart = dis.readBoolean(); // ïåðâûé ðàç çàïóùåí
languageApp = dis.readUTF();
languageInstr = dis.readUTF();
dis.close();
} catch (Exception ex) {
}
}
}
}

View File

@ -1,129 +0,0 @@
package midedit;
import javax.microedition.lcdui.*;
import java.io.IOException;
import javax.microedition.rms.*;
public class Settings implements CommandListener {
public static byte[] settingsIndex = {5, 6, 0, 0, 0, 0, 0, 0};
public static String tempDir = "e:/other/",
setName = "MIDSET1";
MixerMain mixerCntrl;
static LangParser parserLang, parserInstr;
//RMSFile rmsFile = new RMSFile();
static String[] langList = {"en", "ru"};
Image[] langImgs = {createImg("/img/en_GB.png"), createImg("/img/ru_RU.png")},
controlImgs = {createImg("/img/keyPad.png"), createImg("/img/icon.png")};
ChoiceGroup langChoice = new ChoiceGroup("Language", 1, langList, langImgs),
langInstr = new ChoiceGroup("Instruments Language", 1, langList, langImgs),
controlChoice;// = new ChoiceGroup("Controls", 1, controlList, controlImgs);
TextField tempDirField;
Gauge noteHeightGauge;
Gauge noteLengthGauge;
Item[] itemList;
Form optionsForm;
static Command comCancel,
comSave;
Settings(MixerMain mixerControl) {
mixerCntrl = mixerControl;
readFromRms();
//settingsIndex[2]= (byte) (settingsIndex[2]* parserLang.isSupported);
parserLang = new LangParser(langList[settingsIndex[2]], "lang", 103);
parserInstr = new LangParser(langList[settingsIndex[3]], "instr", 206);
String[] controlList = {Constants.getStringName(100), Constants.getStringName(101)};
controlChoice = new ChoiceGroup(Constants.getStringName(99), 2, controlList, controlImgs);
tempDirField = new TextField("Temp Dir", tempDir, 30, 4);
noteHeightGauge = new Gauge("Note Height", true, 10, settingsIndex[0]);
noteLengthGauge = new Gauge("Note Length", true, 10, settingsIndex[1]);
Item[] itemListLocal = {langChoice, langInstr, controlChoice, noteHeightGauge, noteLengthGauge, tempDirField};
optionsForm = new Form("Options", itemListLocal);
if (parserLang.isSupported == 0) {
optionsForm.append("File " + parserLang.resourceFile + " not found. To localizate programm translate 'en.lang' and 'en.instr' in UTF-8 encoding in the package and rename them into " + parserLang.resourceFile + " and " + parserInstr.resourceFile + "\n Also you\n can put your country's image '" + parserLang.locale + ".png' in the package /img/");
}
langChoice.setSelectedIndex(settingsIndex[2] * parserLang.isSupported, true);
langInstr.setSelectedIndex(settingsIndex[3] * parserInstr.isSupported, true);
controlChoice.setSelectedIndex(0, settingsIndex[4] == 1);
controlChoice.setSelectedIndex(1, settingsIndex[5] == 1);
comCancel = new Command(Constants.getStringName(10), Command.BACK, 10);
comSave = new Command(Constants.getStringName(11), Command.CANCEL, 11);
optionsForm.addCommand(comCancel);
optionsForm.addCommand(comSave);
optionsForm.setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if (c == comSave) {
saveOptions();
}
mixerCntrl.setCurrentlistMenu(null);
}
void saveOptions() {
settingsIndex[0] = (byte) noteHeightGauge.getValue();
settingsIndex[1] = (byte) noteLengthGauge.getValue();
settingsIndex[2] = (byte) langChoice.getSelectedIndex();
settingsIndex[3] = (byte) langInstr.getSelectedIndex();
settingsIndex[4] = (byte) (controlChoice.isSelected(0) ? 1 : 0);
settingsIndex[5] = (byte) (controlChoice.isSelected(1) ? 1 : 0);
//System.out.println ("settingsIndex[4]="+settingsIndex[4]);
//System.out.println ("settingsIndex[5]="+settingsIndex[5]);
tempDir = tempDirField.getString();
byte records[][] = {settingsIndex, tempDir.getBytes()};
writeToRms(records);
}
Image createImg(String path) {
Image img = null;
try {
img = Image.createImage(path);
} catch (IOException ex) {
}
return img;
}
void writeToRms(byte[][] rec) {
try {
try {
RecordStore.deleteRecordStore(setName);
} catch (RecordStoreNotFoundException rse) {
}
RecordStore recordStore = RecordStore.openRecordStore(setName, true);
for (int i = 0; i < rec.length; i++) {
recordStore.addRecord(rec[i], 0, rec[i].length);
//System.out.println ("Success write "+id);
}
// System.out.println ("indexes = " + recordStore.getRecord(1));
//System.out.println ("temp dir =" + new String(recordStore.getRecord(2)));
recordStore.closeRecordStore();
} catch (RecordStoreException rse) {
//System.out.println ("RecordStoreException in read");
}
}
boolean readFromRms() {
try {
RecordStore recordStore;// = null;
try {
recordStore = RecordStore.openRecordStore(setName, false);
} catch (NullPointerException nullPointer) {
recordStore = null;
//System.out.println("NullPointerException in readFrom rms"+nullPointer.getMessage());
}
if (recordStore == null) {
return false;
}
try {
settingsIndex = recordStore.getRecord(1);
tempDir = new String(recordStore.getRecord(2));
recordStore.closeRecordStore();
} catch (IllegalArgumentException illegArg) {
recordStore.closeRecordStore();
}
} catch (RecordStoreException rse) {
return false;
}
return true;
}
}

View File

@ -6,6 +6,8 @@ import midedit.media.Composition;
import javax.microedition.lcdui.*;
import java.util.*;
import javax.microedition.lcdui.List;
import main.L;
import main.P;
/**
@ -18,8 +20,8 @@ public class TempoList extends List implements CommandListener
private MixerModel model;
private Displayable backForm;
private Vector tempNotes;
static private Command instempo = new Command(Constants.getStringName(67),Command.ITEM, 1);
static private Command deltempo = new Command(Constants.getStringName(68),Command.ITEM, 1);
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;
@ -32,7 +34,7 @@ public class TempoList extends List implements CommandListener
*/
public TempoList(Composition c,MixerModel m,Displayable back)
{
super(Constants.getStringName(69),IMPLICIT);
super(L.str[L.tempo],IMPLICIT);
composition = c;
model = m;
backForm = back;
@ -78,13 +80,13 @@ public class TempoList extends List implements CommandListener
}
private void viewInsertForm(int time,int tempo)
{
Form textBoxTemp = new Form(Constants.getStringName(67));
final TextField timeField = new TextField(Constants.getStringName(70), ""+time, 4, TextField.NUMERIC);
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(Constants.getStringName(69), "" + tempo, 4, TextField.NUMERIC);
final TextField tempoField = new TextField(L.str[L.tempo], "" + tempo, 4, TextField.NUMERIC);
textBoxTemp.append(tempoField);
textBoxTemp.addCommand(CompositionForm.ok);
textBoxTemp.addCommand(Settings.comCancel);
textBoxTemp.addCommand(P.comCancel);
textBoxTemp.setCommandListener(new CommandListener()
{
public void commandAction(Command command, Displayable displayable)

View File

@ -4,6 +4,8 @@ package midedit;
import midedit.media.Composition;
import java.util.*;
import javax.microedition.lcdui.*;
import main.Main;
import main.P;
/**
*
@ -61,7 +63,7 @@ public class VolumeForm extends Form implements CommandListener {
this.addCommand(CompositionForm.play);
this.addCommand(CompositionForm.playOrig);
this.addCommand(CompositionForm.ok);
this.addCommand(Settings.comCancel);
this.addCommand(P.comCancel);
this.setCommandListener(this);
}
@ -73,10 +75,10 @@ public class VolumeForm extends Form implements CommandListener {
public void commandAction(Command command, Displayable displayable) {
if (command == CompositionForm.ok) {
setVolumeFromGaugesSolo();
MixerMain.display.setCurrent(backForm);
} else if (command == Settings.comCancel) {
Main.dsp.setCurrent(backForm);
} else if (command == P.comCancel) {
restoreVolumesArr();
MixerMain.display.setCurrent(backForm);
Main.dsp.setCurrent(backForm);
} else if (command == CompositionForm.play) {
setVolumeFromGaugesSolo();
try {

View File

@ -5,6 +5,7 @@ package midedit;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;
import main.P;
/**
@ -41,7 +42,7 @@ public class WaitForm extends Form implements Runnable, CommandListener
memoryBar = new Gauge("Memory",false,100,(total-(int)r.freeMemory())*100/total);
append(percentBar);
append(memoryBar);
this.addCommand(Settings.comCancel);
this.addCommand(P.comCancel);
this.setCommandListener(this);
}
private void setPercent(int percent)

View File

@ -1,10 +1,10 @@
package midedit.io;
import midedit.*;
import java.io.*;
import java.util.*;
import javax.microedition.io.*;
import javax.microedition.io.file.*;
import main.Rms;
/**
*
@ -166,11 +166,12 @@ public class JSR75File extends AbstractFile {
*/
public int open(String fileName, boolean isSaveMode) throws IOException {
String fullName;
System.out.println("JSR75File.java : 169 "+fileName);
if (fileName.charAt(0) != '/') {
try {
Enumeration e = FileSystemRegistry.listRoots();
if (e.hasMoreElements()) {
FileConnection fcTmp = (FileConnection) Connector.open(getPrefix() + Settings.tempDir);
FileConnection fcTmp = (FileConnection) Connector.open(getPrefix() + Rms.tempDir);
if (!fcTmp.exists()) {
fcTmp.mkdir();
}
@ -178,7 +179,7 @@ public class JSR75File extends AbstractFile {
} catch (Exception e) {
throw new IOException("Can't create tmp directory");
}
fullName = getPrefix() + "/" + Settings.tempDir + fileName;
fullName = getPrefix() + "/" + Rms.tempDir + fileName;
} else {
fullName = getPrefix() + fileName;
}

View File

@ -1,6 +1,6 @@
package midedit.media;
import midedit.*;
import midedit.CompositionForm;
import javax.microedition.lcdui.*;
/**

View File

@ -1,6 +1,11 @@
package midedit.media;
import midedit.*;
import midedit.Note;
import midedit.NoteLong;
import midedit.Constants;
import midedit.NoteList;
import midedit.MixerCanvas;
import midedit.UndoableAction;
/**
*

View File

@ -1,6 +1,6 @@
package midedit.media;
import midedit.*;
import midedit.MixerModel;
import javax.microedition.media.*;
import java.io.*;

View File

@ -1,7 +1,13 @@
package ui;
import util.FWCashe;
import main.P;
import main.Main;
import main.Key;
import main.L;
import java.util.*;
import javax.microedition.lcdui.*;
import midedit.CompositionForm;
import midedit.MixerMain;
import midedit.io.AbstractFile;
/**
@ -164,8 +170,8 @@ public class FileManager extends Canvas {
if (showMenu) {
drawMenu(g);
}
UI.drawTitle(g, pathFile);
UI.drawSoftBar(g,L.str[L.menu],L.str[L.back]);
UI.drawTitle(g, P.isRMSMode ? L.str[L.RMS]: pathFile);
UI.drawSoftBar(g,L.str[L.menu], L.str[L.back]);
}
/**
@ -212,13 +218,13 @@ public class FileManager extends Canvas {
for (int i = 0; i < menu.length; i++) {
// Äëÿ êóðñîðà èñïîëüçóþòñÿ äðóãèå öâåòà
if (i == curMenu) {
colorBack = P.fmbord;
colorObv = P.fmcurbord;
colorText = P.fmtextuppan;
colorBack = P.obv;
colorObv = P.fmbord;
colorText = P.fmtextnc;
} else {
colorBack = P.fmback1;
colorObv = P.obv;
colorText = P.fmcurbord;
colorText = P.fmbord;
}
int hh = menuY + i * (FONT_HEIGHT - 1);
g.setColor(colorBack);
@ -268,6 +274,20 @@ public class FileManager extends Canvas {
}
else if (cur.equals(L.str[L.saveInThisFolder])) {
P.path = pathFile;
String openSaveString = Main.midlet.compositionForm.getCompositionName();
int indBeg = openSaveString.lastIndexOf(midedit.Constants.FILE_DELIM);
int indEnd = openSaveString.lastIndexOf('.');
if (indEnd == -1) {
indEnd = openSaveString.length();
}
openSaveString = openSaveString.substring(indBeg + 1, indEnd);
if (openSaveString.length() > 64) {
openSaveString = openSaveString.substring(0, 63);
}
P.openSaveString = openSaveString;
Main.dsp.setCurrent(new SaveName_frm(this, pathFile));
}
/*else if (cur.equals(L.str[L.newFolder])) {
// Íîâàÿ ïàïêà
@ -329,7 +349,7 @@ public class FileManager extends Canvas {
System.gc();
//
String openSaveString = pathFile + s;
Main.midlet.compositionForm = new CompositionForm(new MixerMain(), openSaveString);
Main.midlet.compositionForm = new CompositionForm(Main.midlet, openSaveString);
Main.dsp.setCurrent(Main.midlet.compositionForm);
new Thread(Main.midlet.compositionForm).start();

View File

@ -1,5 +1,12 @@
package ui;
import main.P;
import main.Main;
import main.Key;
import main.L;
import java.io.IOException;
import javax.microedition.lcdui.*;
import midedit.CompositionForm;
import midedit.MixerModel;
/**
@ -54,12 +61,10 @@ public class Menu extends Canvas {
// Äîáàâëÿåì ïóíêòû
menu = new String[] {
L.str[L.create],
L.str[L.resume],
L.str[L.open],
L.str[L.save],
L.str[L.saveAs],
L.str[L.file],
(P.isRMSMode ? L.str[L.RMS] : L.str[L.file]),
L.str[L.options],
L.str[L.help],
L.str[L.about],
L.str[L.exit]
};
@ -68,6 +73,22 @@ public class Menu extends Canvas {
CursorY = FileY = startPrintFile = 0;
}
public void addNewItems() {
menu = new String[] {
L.str[L.create],
L.str[L.resume],
L.str[L.open],
L.str[L.save],
L.str[L.saveAs],
(P.isRMSMode ? L.str[L.RMS] : L.str[L.file]),
L.str[L.options],
L.str[L.help],
L.str[L.about],
L.str[L.exit]
};
}
protected void sizeChanged(int w, int h) {
this.w = getWidth();
this.h = getHeight();
@ -99,7 +120,7 @@ public class Menu extends Canvas {
g.setColor(P.fmtextnc);
final String s = menu[i];
if (FileY == CursorY) {
g.setColor(P.fmshadow);
g.setColor(P.fmbord);
g.drawString(s, iconsSize + 4, FileY + iconsSize / 4, Graphics.TOP | Graphics.LEFT);
g.setColor(P.fmtextcur);
}
@ -113,7 +134,7 @@ public class Menu extends Canvas {
else if(s.equals(L.str[L.saveAs])) id = SAVE_AS;
else if(s.equals(L.str[L.RMS]) || s.equals(L.str[L.file])) id = RMS_FS;
else if(s.equals(L.str[L.options])) id = OPTIONS;
else if(s.equals(L.str[L.about])) id = ABOUT;
else if(s.equals(L.str[L.about]) || s.equals(L.str[L.help])) id = ABOUT;
else if(s.equals(L.str[L.exit])) id = EXIT;
g.drawImage(icons[id], iconsSize + 2, FileY + 1, 24);
@ -135,16 +156,76 @@ public class Menu extends Canvas {
*/
private void selectItem(int selected) {
String v = menu[selected];
/*if(v.equals(L.str[L.create])) Main.dsp.setCurrent(new CreateNew(this));
else */if(v.equals(L.str[L.open])) Main.dsp.setCurrent(new FileManager(P.path, MixerModel.getLocalFile()));
/*else if(v.equals(L.str[L.save])) {
// Ñîçäàòü
if(v.equals(L.str[L.create])) {
try {
Main.midlet.model.newMix();
if (Main.midlet.compositionForm != null) {
Main.midlet.compositionForm.releaseMem();
}
Main.midlet.compositionForm = null;
System.gc();
P.openSaveString = "newmix";
P.isRMSMode = true;
Main.midlet.compositionForm = new CompositionForm(Main.midlet);
Main.dsp.setCurrent(Main.midlet.compositionForm);
new Thread(Main.midlet.compositionForm).start();
} catch (Exception e) {
e.printStackTrace();
Alert a = new Alert(L.str[L.error], e.getMessage(), null, null);
Main.dsp.setCurrent(a);
}
}
// Ïðîäîëæèòü
else if(v.equals(L.str[L.resume])) {
P.isRMSMode = true;
Main.dsp.setCurrent(Main.midlet.compositionForm);
}
// Îòêðûòü
else if(v.equals(L.str[L.open])) {
Main.midlet.model.setLocalFile();
Main.dsp.setCurrent(new FileManager(P.path, MixerModel.getLocalFile()));
}
// Ñîõðàíèòü
else if(v.equals(L.str[L.save])) {
if (Main.midlet.compositionForm.isNew()) {
saveAsFile();
return;
}
String openSaveString = Main.midlet.compositionForm.getCompositionName();
try {
Main.midlet.model.setLocalFile();
Main.midlet.compositionForm.saveComposition(openSaveString);
Main.midlet.compositionForm.setTitle(openSaveString);
} catch (Exception e) {
Alert a = new Alert(L.str[L.error], e.getMessage(), null, null);
Main.dsp.setCurrent(a);
}
}
// Ñîõðàíèòü êàê
else if(v.equals(L.str[L.saveAs])) {
saveAsFile();
}
// RMS | FS
else if(v.equals(L.str[L.RMS])) {
menu[selected] = L.str[L.file];
P.isRMSMode = false;
} else if(v.equals(L.str[L.file])) {
menu[selected] = L.str[L.RMS];
P.isRMSMode = true;
}
// Íàñòðîéêè
else if(v.equals(L.str[L.options])) {
Main.dsp.setCurrent(new SettingsUI(this));
}
// Ïîìîùü
else if(v.equals(L.str[L.help])) {
TextView tv = new TextView();
/*TextView tv = new TextView();
tv.openFile("/lang/help", this, L.str[L.help]);
Main.dsp.setCurrent(tv);
}*/
else if(v.equals(L.str[L.about])) Main.dsp.setCurrent(new About(this));
Main.dsp.setCurrent(tv);*/
}
// Î ïðîãðàììå
else if(v.equals(L.str[L.about])) Main.dsp.setCurrent(new TextView(this, "about", L.str[L.about]));
else if(v.equals(L.str[L.exit])) Main.midlet.destroyApp(true);
}
@ -223,6 +304,11 @@ public class Menu extends Canvas {
}
}
private void saveAsFile() {
Main.midlet.model.setLocalFile();
Main.dsp.setCurrent(new FileManager(P.path, this, MixerModel.getLocalFile()));
}
protected void pointerPressed(int pix, int piy) {
int q = UI.getSoftBarHeight();
if(pix<2*q && piy>h-q) selectItem(cu);

62
src/ui/SaveName_frm.java Normal file
View File

@ -0,0 +1,62 @@
package ui;
import javax.microedition.lcdui.*;
import main.*;
/**
* Ââîä èìåíè ôàéëà íà Form
* @author aNNiMON
*/
public class SaveName_frm extends Form implements CommandListener {
/** Ïðåäûäóùèé ýêðàí */
private Displayable previousDisplayable;
/** Êîìíàäû */
private Command ok, back;
/** Ïîëå ââîäà èìåíè */
private TextField nameTF;
/** Èìÿ ôàéëà*/
private String name;
/** Ïóòü ê ïàïêå */
private String path;
public SaveName_frm(Displayable b, String path) {
super(L.str[L.midiName]);
name = P.openSaveString;
this.path = path;
nameTF = new TextField(L.str[L.midiName], name, 48, TextField.ANY);
back = new Command(L.str[L.back], Command.BACK, 3);
ok = new Command(L.str[L.ok], Command.OK, 1);
this.previousDisplayable=b;
append(nameTF);
addCommand(back);
addCommand(ok);
setCommandListener(this);
}
public void commandAction(Command c, Displayable d) {
if(c==back && d==this) Main.dsp.setCurrent(previousDisplayable);
else if(c==ok && d==this) {
name=nameTF.getString();
if (name.length() > 0) {
save();
}
}
}
private void save() {
try {
P.openSaveString = name;
Main.midlet.compositionForm.saveComposition(path + name + ".mid");
Main.midlet.compositionForm.setTitle(name);
Main.midlet.compositionForm.setNew(false);
} catch (Exception e) {
Alert a = new Alert(L.str[L.error], e.getMessage(), null, null);
Main.dsp.setCurrent(a);
}
}
}

95
src/ui/SettingsUI.java Normal file
View File

@ -0,0 +1,95 @@
package ui;
import javax.microedition.lcdui.*;
import main.*;
/**
* Êëàññ íàñòðîåê
* @author aNNiMON
*/
public class SettingsUI extends Form implements CommandListener {
private static final String[] langAppList = {"English", "Ðóññêèé"};
private static final String[] langInstrList = {"English", "Ðóññêèé"};
private static final String[] langChars = {"en", "ru", "ua"};
private Displayable previousScreen;
private Command back, ok;
private ChoiceGroup langChoice, langInstr, controlChoice;
private Gauge noteHeightGauge;
private Gauge noteWidthGauge;
private TextField tempDirField;
public SettingsUI(Displayable prev) {
super(L.str[L.options]);
previousScreen = prev;
initComponents();
setComponentsParameters();
// Äîáàâëÿåì êîìïîíåíòû íà ôîðìó
append(langChoice);
append(langInstr);
append(noteWidthGauge);
append(noteHeightGauge);
append(controlChoice);
append(tempDirField);
addCommand(ok);
addCommand(back);
setCommandListener(SettingsUI.this);
}
private void initComponents() {
// Êîìàíäû
ok = new Command(L.str[L.ok], Command.OK, 1);
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);
// Íàñòðîéêè ðàçìåðà íîò
noteHeightGauge = new Gauge("Note Height", true, 10, Rms.noteHeight);
noteWidthGauge = new Gauge("Note Length", true, 10, Rms.noteWidth);
// Óïðàâëåíèå
controlChoice = new ChoiceGroup(L.str[L.navigation], ChoiceGroup.MULTIPLE);
// Âðåìåííàÿ ïàïêà
tempDirField = new TextField("Temp Dir", Rms.tempDir, 64, 4);
}
private void setComponentsParameters() {
// Óñòàíàâëèâàåì ôëàæîê ÿçûêà
for(int i = 0; i < langChars.length; i++) {
if(Rms.languageApp.equals(langChars[i])) {
langChoice.setSelectedIndex(i, true);
}
if(Rms.languageInstr.equals(langChars[i])) {
langInstr.setSelectedIndex(i, true);
}
}
// Íàñòðîéêè óïðàâëåíèÿ
controlChoice.append(L.str[L.numkeysOptionString], null);
controlChoice.setSelectedIndex(0, Rms.numKeysEdit);
}
public void commandAction(Command c, Displayable d) {
if (c == back) {
Main.dsp.setCurrent(previousScreen);
} else if ((c == ok || c == List.SELECT_COMMAND)) {
// ßçûêè
Rms.languageApp = langChars[langChoice.getSelectedIndex()];
Rms.languageInstr = langChars[langInstr.getSelectedIndex()];
L.readLang(Rms.languageApp, true);
L.readLang(Rms.languageInstr, false);
Rms.tempDir = tempDirField.getString();
Rms.noteWidth = noteWidthGauge.getValue();
Rms.noteHeight = noteHeightGauge.getValue();
Rms.numKeysEdit = controlChoice.isSelected(0);
Main.dsp.setCurrent(previousScreen);
}
}
}

View File

@ -1,7 +1,7 @@
package ui;
/*
* aNNiMON 2010
* aNNiMON 2011
* For more info visit http://annimon.com/
*/
@ -10,16 +10,23 @@
* www.mobilab.ru
*/
import util.StringEncoder;
import main.P;
import main.Main;
import main.Rms;
import main.Key;
import main.L;
import java.io.DataInputStream;
import java.util.Vector;
import javax.microedition.lcdui.*;
public class About extends Canvas {
public class TextView extends Canvas {
private Font defaultFont;
private Displayable dspl;
private int fontHeight, defaultFontHeight;
private String text; //òåêñò
private String title; //çàãîëîâîê
private int w, h; //ðàçìåðû
@ -29,16 +36,45 @@ public class About extends Canvas {
private int allTextHeight; //Îáùàÿ âûñîòà òåêñòà
private Vector strLines;
public About(Displayable dspl) {
/**
* Êîíñòðóêòîð ïî óìîë÷àíèþ
* Èíèöèàëèçèðóåò íà÷àëüíûå äàííûå
*/
private TextView() {
setFullScreenMode(true);
this.dspl = dspl;
w = getWidth();
h = getHeight();
text = getText("/lang/about_"+Rms.languageApp);
fontHeight = UI.getSoftBarHeight()+2;
defaultFont = Font.getDefaultFont();
scrollStep = defaultFontHeight = defaultFont.getHeight()+2;
workingHeight = h - fontHeight*2 - 2;
}
/**
* Êîíñòðóêòîð äëÿ îòêðûòèÿ òåêñòà èç ôàéëà
* @param dspl ïðåäûäóùèé ýêðàí
* @param textFile ïóòü ê òåêñòîâîìó ôàéëó
* @param title çàãîëîâîê
*/
public TextView(Displayable dspl, String textFile, String title) {
this();
this.title = title;
this.dspl = dspl;
text = getText("/lang/"+textFile+"_"+Rms.languageApp);
setParameters();
}
/**
* Êîíñòðóêòîð äëÿ ïåðåäà÷è òåêñòà íàïðÿìóþ
* @param text ïóòü ê òåêñòîâîìó ôàéëó
* @param title çàãîëîâîê
* @param dspl ïðåäûäóùèé ýêðàí
*/
public TextView(String text, String title, Displayable dspl) {
this();
this.title = title;
this.dspl = dspl;
this.text = text;
setParameters();
}
@ -53,7 +89,7 @@ public class About extends Canvas {
protected void paint(Graphics g) {
g.setColor(P.backgrnd);
g.fillRect(0, 0, w, h);
UI.drawTitle(g, L.str[L.about]);
UI.drawTitle(g, title);
g.setColor(P.fmtextnc);
g.setFont(defaultFont);
g.setClip(0, fontHeight+1, w, workingHeight);

View File

@ -1,3 +1,6 @@
package ui;
import main.P;
import java.util.Calendar;
import javax.microedition.lcdui.*;

View File

@ -1,4 +1,4 @@
package midedit;
package util;
import java.io.*;

View File

@ -1,3 +1,5 @@
package util;
import javax.microedition.lcdui.Font;

View File

@ -1,3 +1,5 @@
package util;
public class StringEncoder {