03
208
res/bin/en.instr
Normal 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
@ -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
@ -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
@ -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
BIN
res/img/attr.png
Normal file
After Width: | Height: | Size: 151 B |
BIN
res/img/attractive.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
res/img/attrcur.png
Normal file
After Width: | Height: | Size: 165 B |
BIN
res/img/attrdata.png
Normal file
After Width: | Height: | Size: 103 B |
BIN
res/img/attrdatacur.png
Normal file
After Width: | Height: | Size: 103 B |
BIN
res/img/dot.png
Normal file
After Width: | Height: | Size: 88 B |
BIN
res/img/en_GB.png
Normal file
After Width: | Height: | Size: 588 B |
BIN
res/img/icon.png
Normal file
After Width: | Height: | Size: 764 B |
BIN
res/img/keyPad.png
Normal file
After Width: | Height: | Size: 127 B |
BIN
res/img/main/0.png
Normal file
After Width: | Height: | Size: 1.6 KiB |
BIN
res/img/main/1.png
Normal file
After Width: | Height: | Size: 1.4 KiB |
BIN
res/img/main/2.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
res/img/main/3.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
res/img/main/4.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
BIN
res/img/main/5.png
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
res/img/main/6.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
res/img/main/7.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
res/img/main/8.png
Normal file
After Width: | Height: | Size: 1.5 KiB |
BIN
res/img/notes0.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
res/img/notes1.png
Normal file
After Width: | Height: | Size: 157 B |
BIN
res/img/nums0m.png
Normal file
After Width: | Height: | Size: 117 B |
BIN
res/img/nums1m.png
Normal file
After Width: | Height: | Size: 117 B |
BIN
res/img/ru_RU.png
Normal file
After Width: | Height: | Size: 543 B |
BIN
res/img/triplet.png
Normal file
After Width: | Height: | Size: 93 B |
11
res/lang/about_en
Normal 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
@ -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
@ -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
@ -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
@ -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
@ -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
@ -0,0 +1,94 @@
|
||||
Создать
|
||||
Продолжить
|
||||
О программе
|
||||
Открыть
|
||||
Сохранить
|
||||
Сохранить как
|
||||
Файл
|
||||
Настройки
|
||||
Выход
|
||||
РМС
|
||||
Отмена
|
||||
Ошибка
|
||||
Ошибка открытия
|
||||
Список инструментов
|
||||
Невозможно
|
||||
Сохранено
|
||||
Ошибка сохранения
|
||||
Сохранение
|
||||
Открытие
|
||||
Ошибка выбора файла
|
||||
Ошибка обновления
|
||||
Ваш телефон не поддерживает необходимые API
|
||||
Инструменты
|
||||
Меню
|
||||
Назад
|
||||
Поставить ноту с текущими атрибутами
|
||||
Для того, чтобы изменить атрибут ноты (напр длину), удалите ноту. Если уже поставлена, выберите атрибут (<7>), измените его (<0>,<*>,<#>) и ставьте ноту
|
||||
Удалить ноту
|
||||
Отмена действия
|
||||
Громкость ноты '+'\'-'
|
||||
Играть с текущей позиции/Стоп
|
||||
Играть ноту под курсором
|
||||
Выбрать атрибут ноты
|
||||
Изменение атрибута
|
||||
Стоп
|
||||
Навигация по композиции
|
||||
Быстрая навигация
|
||||
Начало выделения
|
||||
Конец выделения
|
||||
Копировать
|
||||
Вставить (раздвинуть)
|
||||
Вставить (наложить)
|
||||
Вставить (перезаписать)
|
||||
Удалить и сдвинуть
|
||||
Очистить
|
||||
Играть канал с экрана
|
||||
Играть канал
|
||||
Вернуть дейсвие
|
||||
Добавить инструмент
|
||||
Редактировать
|
||||
Установить инструмент
|
||||
Удалить инструмент
|
||||
Темп-бокс
|
||||
Громкость
|
||||
Размер
|
||||
Играть
|
||||
Играть оригинал
|
||||
Ok
|
||||
Назад
|
||||
Удалить
|
||||
Выбрать папку
|
||||
Открытый файл
|
||||
Пожалуйста, подождите
|
||||
Обновление списка
|
||||
Сохранить здесь
|
||||
Вставить Темп
|
||||
Удалить Темп
|
||||
Темп
|
||||
Время(Мера)
|
||||
Поиск
|
||||
числитель
|
||||
знаменатель(2 в степени)
|
||||
Метр = числитель/ (2^знаменатель). Например, используйте 4/4 (numerator=4; denominator=2) или 6/8 (numerator=6; denominator=3)
|
||||
Дельта-смещение
|
||||
Воспроизведение
|
||||
Играть все
|
||||
Играть с экрана
|
||||
Весь трэк
|
||||
Трэк с экрана
|
||||
Отметить
|
||||
Снять отметку
|
||||
Изменение блока
|
||||
Режим модификации
|
||||
Вставить
|
||||
Раздвинуть
|
||||
Заменить
|
||||
Наложить
|
||||
Очистить буфер
|
||||
Подсказка
|
||||
Клавиши
|
||||
Быстрые команды
|
||||
Навигация
|
||||
Цифрами, иначе джойстиком, при редактировании нот
|
||||
Имя
|
153
src/L.java
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -1,3 +1,5 @@
|
||||
package main;
|
||||
|
||||
|
||||
|
||||
/*
|
@ -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
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
|
||||
}
|
@ -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) {
|
||||
}
|
@ -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
|
@ -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);
|
||||
|
@ -1,123 +1,101 @@
|
||||
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)
|
||||
{
|
||||
timeConst = t;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public static void setTimeConst(int t) {
|
||||
timeConst = t;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
// public static String getInstruments(int i){
|
||||
// return (String);
|
||||
// }
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final int INV_CANVAS_CONST = 131;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final char FILE_DELIM = '/';
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static int timeConst = 10;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public final static int N_INSTR = 127,
|
||||
DRUMS_LENGTH=61,//27__87
|
||||
DRUMS_SHIFT = 27;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public final static int DRUMS_CHANNEL = 9;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final int NCHANNEL = 16;
|
||||
// /**
|
||||
// *
|
||||
// */
|
||||
// public static final String[] noteNames = {"C","C#","D","D#","E",
|
||||
// "F","F#","G","G#","A","A#","B"};
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final int MAX_NOTE_LENGTH = 8; // min == 1/(2^5)
|
||||
/**
|
||||
*
|
||||
*/
|
||||
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 static final int INV_CANVAS_CONST = 131;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final char FILE_DELIM = '/';
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static int timeConst = 10;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public final static int N_INSTR = 127,
|
||||
DRUMS_LENGTH = 61,//27__87
|
||||
DRUMS_SHIFT = 27;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public final static int DRUMS_CHANNEL = 9;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final int NCHANNEL = 16;
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public static final int MAX_NOTE_LENGTH = 8; // min == 1/(2^5)
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public final static String[] KEY_MAP = {
|
||||
"<LeftSoftKey>", L.str[L.menu],
|
||||
"<RightSoftKey>", L.str[L.back],
|
||||
"<Fire>,<5>", L.str[L.insertNoteWithCurrentAttributes] + "\n" + L.str[L.noteAttributeHelp],
|
||||
"<9>,<Clear>", L.str[L.deleteNote],
|
||||
"<Red Phone>", L.str[L.undo],
|
||||
"<Volume +'\'->", L.str[L.noteVolume],
|
||||
|
||||
static class VectorArr extends Vector {
|
||||
public VectorArr(Object src, int beg, int length) {
|
||||
super(length);
|
||||
setSize(length);
|
||||
System.arraycopy(src, beg, elementData, 0, size());
|
||||
"<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, super.elementData, 0, size());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
||||
*/
|
||||
/**
|
||||
|
||||
*/
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
|
@ -1,49 +1,49 @@
|
||||
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;
|
||||
private boolean isOptionsView = false,
|
||||
private boolean isOptionsView = false,
|
||||
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());
|
||||
System.out.println("Thread.currentThread = " + Thread.currentThread());
|
||||
while (CompositionForm.isPlaying) {
|
||||
try {
|
||||
doSmallRight();
|
||||
Thread.sleep(31);
|
||||
} catch (InterruptedException ex) {
|
||||
System.out.println("ex = " + ex);
|
||||
}
|
||||
}
|
||||
public void run() {
|
||||
System.out.println("getTimeToCanvasConct() = " + composition.getTime2CanvasConst());
|
||||
System.out.println("Thread.currentThread = " + Thread.currentThread());
|
||||
while (CompositionForm.isPlaying) {
|
||||
try {
|
||||
doSmallRight();
|
||||
Thread.sleep(31);
|
||||
} catch (InterruptedException ex) {
|
||||
System.out.println("ex = " + ex);
|
||||
}
|
||||
} ;
|
||||
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
@ -51,19 +51,19 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
* @param c
|
||||
* @param ch
|
||||
*/
|
||||
public MixerCanvas(MixerMain ctrl, Composition c, int ch) {
|
||||
//if (MixerMain.IS_MIDP2)
|
||||
setFullScreenMode(true);
|
||||
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;
|
||||
nW = (screenWidth - wBeg - 5) / wOne;
|
||||
nH = (screenHeight - statusHeight - 12) / hOne;
|
||||
nH = (screenHeight - statusHeight - 12) / hOne;
|
||||
rollWidth = (nW * wOne + 1);
|
||||
rollHeight = (nH * hOne + 1);
|
||||
model = control.getModel();
|
||||
@ -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)) {
|
||||
doKEY_NUM5();
|
||||
needPaint = true;
|
||||
needPaintStatus = true;
|
||||
return/*break*/;
|
||||
} else if (gameAction == LEFT||keyCodePressed==KEY_NUM4) {
|
||||
if (isNumsControl^(keyCodePressed==KEY_NUM4))
|
||||
doBigLeft();
|
||||
else
|
||||
doSmallLeft();
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
} else if (gameAction == RIGHT||keyCodePressed==KEY_NUM6) {
|
||||
if (isNumsControl^(keyCodePressed==KEY_NUM6))
|
||||
doBigRight();
|
||||
else
|
||||
doSmallRight();
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
} else if (gameAction == UP||keyCodePressed==KEY_NUM2) {
|
||||
if (isNumsControl^(keyCodePressed==KEY_NUM2))
|
||||
doBigUp();
|
||||
else
|
||||
doSmallUp();
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
} else if (gameAction == DOWN||keyCodePressed==KEY_NUM8) {
|
||||
if (isNumsControl^(keyCodePressed==KEY_NUM8))
|
||||
doBigDown();
|
||||
else
|
||||
doSmallDown();
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
}
|
||||
int ga = getGameAction(keyCodePressed);
|
||||
if (ga == FIRE) {
|
||||
doKEY_NUM5();
|
||||
needPaint = true;
|
||||
needPaintStatus = true;
|
||||
return/*break*/;
|
||||
} else if (ga == LEFT || keyCodePressed == KEY_NUM4) {
|
||||
if (isNumsControl ^ (keyCodePressed == KEY_NUM4)) {
|
||||
doBigLeft();
|
||||
} else {
|
||||
doSmallLeft();
|
||||
}
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
} else if (ga == RIGHT || keyCodePressed == KEY_NUM6) {
|
||||
if (isNumsControl ^ (keyCodePressed == KEY_NUM6)) {
|
||||
doBigRight();
|
||||
} else {
|
||||
doSmallRight();
|
||||
}
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
} else if (ga == UP || keyCodePressed == KEY_NUM2) {
|
||||
if (isNumsControl ^ (keyCodePressed == KEY_NUM2)) {
|
||||
doBigUp();
|
||||
} else {
|
||||
doSmallUp();
|
||||
}
|
||||
status.resetTimeTune();
|
||||
return;
|
||||
} else if (ga == DOWN || keyCodePressed == KEY_NUM8) {
|
||||
if (isNumsControl ^ (keyCodePressed == KEY_NUM8)) {
|
||||
doBigDown();
|
||||
} 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:
|
||||
@ -245,7 +248,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
;
|
||||
|
||||
protected void doSmallDown() {
|
||||
protected void doSmallDown() {
|
||||
if (curY < nH - 1) {
|
||||
curY++;
|
||||
} else if (hBase + curY < hMax) {
|
||||
@ -258,7 +261,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
;
|
||||
|
||||
private void doBigLeft() {
|
||||
private void doBigLeft() {
|
||||
wStepMeasure = (composition.getNom() * (32 >> composition.getDenomE()));
|
||||
if (xBase >= wStepMeasure) {
|
||||
xBase -= wStepMeasure;
|
||||
@ -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) {
|
||||
@ -358,7 +359,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void doKEY_NUM9() {
|
||||
private void doKEY_NUM9() {
|
||||
if (isMarkMode) {
|
||||
setMarkModeOff();
|
||||
return;
|
||||
@ -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){
|
||||
}
|
||||
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) {
|
||||
} 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) {
|
||||
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{
|
||||
gameAction = getGameAction(keyCodePressed);
|
||||
} 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) {
|
||||
isblack = true;
|
||||
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);
|
||||
}}
|
||||
keyPressed(keyCodePressed);
|
||||
}
|
||||
}
|
||||
}
|
||||
paintUniEditor(g);
|
||||
|
||||
@ -454,10 +453,10 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
*
|
||||
* @param g
|
||||
*/
|
||||
private void paintUniEditor(Graphics g) {
|
||||
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) {
|
||||
@ -494,9 +493,9 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
private void paintRoll(Graphics g) {
|
||||
g.setColor(192, 192, 224);
|
||||
g.fillRect(0, 0, screenWidth, statusBegY);
|
||||
g.fillRect(0, 0, screenWidth, statusBegY);
|
||||
g.setColor(0);
|
||||
g.drawRect(0, 0, screenWidth - 1, statusBegY);
|
||||
g.drawRect(0, 0, screenWidth - 1, statusBegY);
|
||||
paintScale(g);
|
||||
g.translate(wBeg, hBeg);
|
||||
g.setGrayScale(96);
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -748,7 +746,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
* @param t
|
||||
* @return
|
||||
*/
|
||||
private int getX(int t) {
|
||||
private int getX(int t) {
|
||||
return t / Constants.timeConst - xBase;
|
||||
}
|
||||
|
||||
@ -805,7 +803,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void setMarkModeOn() {
|
||||
private void setMarkModeOn() {
|
||||
if (timeMarkBeg != NOT_MARKED && timeMarkEnd != NOT_MARKED && timeMarkBeg <= timeMarkEnd) {
|
||||
if (isMarkMode) {
|
||||
NoteListUtils.unMarkNotes(composition, (byte) channel);
|
||||
@ -821,7 +819,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private void setMarkModeOff() {
|
||||
private void setMarkModeOff() {
|
||||
NoteListUtils.unMarkNotes(composition, (byte) channel);
|
||||
isMarkMode = false;
|
||||
timeMarkBeg = NOT_MARKED;
|
||||
@ -833,7 +831,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
isModeDesc = true;
|
||||
modeDesc = desc;
|
||||
}
|
||||
private final static int NOT_MARKED = -1000;
|
||||
private final static int NOT_MARKED = -1000;
|
||||
private int OrigTime,
|
||||
OrigNote,
|
||||
statusHeight = 21,
|
||||
@ -842,21 +840,20 @@ 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;
|
||||
//protected String str = " Hello ";
|
||||
static private Image statusImg,
|
||||
static private Image statusImg,
|
||||
statusImgSel, statusImgCur, statusImgData, statusImgDataCur,
|
||||
imgDot, imgTriplet;
|
||||
public static int curX,
|
||||
@ -896,11 +893,10 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class Status {
|
||||
|
||||
private int statusMode;
|
||||
private final static int MODE_NONE = -1,
|
||||
private int statusMode;
|
||||
private final static int MODE_NONE = -1,
|
||||
MODE_TIME = 0,
|
||||
MODE_LEN = 1,
|
||||
MODE_NOTE = 2,
|
||||
@ -913,7 +909,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
private int pCount = 4;
|
||||
private int indCurNoteLen;
|
||||
private byte[] noteLen = {1, 2, 4, 8, 16, 32};
|
||||
private int extLen;
|
||||
private int extLen;
|
||||
|
||||
public Status() {
|
||||
statusMode = MODE_NONE;
|
||||
@ -938,7 +934,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
calcLen();
|
||||
}
|
||||
|
||||
private void resetDelta() {
|
||||
private void resetDelta() {
|
||||
deltaParams[MODE_TIME] = 0;
|
||||
deltaParams[MODE_LEN] = 0;
|
||||
deltaParams[MODE_NOTE] = 0;
|
||||
@ -946,15 +942,15 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private void setAbsParams() {
|
||||
private void setAbsParams() {
|
||||
params = absParams;
|
||||
}
|
||||
|
||||
private void setDeltaParams() {
|
||||
private void setDeltaParams() {
|
||||
params = deltaParams;
|
||||
}
|
||||
|
||||
private void nextView() {
|
||||
private void nextView() {
|
||||
statusMode++;
|
||||
if (statusMode >= pCount) {
|
||||
statusMode = MODE_NONE;
|
||||
@ -967,7 +963,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private boolean isValidTab() {
|
||||
private boolean isValidTab() {
|
||||
boolean ok = true;
|
||||
if (params == deltaParams && (statusMode == 1 || statusMode == 2)) {
|
||||
ok = false;
|
||||
@ -975,11 +971,11 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
return ok;
|
||||
}
|
||||
|
||||
private void resetTimeTune() {
|
||||
private void resetTimeTune() {
|
||||
params[MODE_TIME] = 0;
|
||||
}
|
||||
|
||||
private void curParamPlus() {
|
||||
private void curParamPlus() {
|
||||
if (curNote != null && noteDelta != null) {
|
||||
return;
|
||||
}
|
||||
@ -1006,7 +1002,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
private void curParamMinus() {
|
||||
private void curParamMinus() {
|
||||
if (curNote != null && noteDelta != null) {
|
||||
return;
|
||||
}
|
||||
@ -1039,7 +1035,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
private void volumePlus() {
|
||||
private void volumePlus() {
|
||||
if (curNote != null && noteDelta != null) {
|
||||
return;
|
||||
}
|
||||
@ -1051,7 +1047,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private void volumeMinus() {
|
||||
private void volumeMinus() {
|
||||
if (curNote != null && noteDelta != null) {
|
||||
return;
|
||||
}
|
||||
@ -1062,11 +1058,11 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private int getTimeTune() {
|
||||
private int getTimeTune() {
|
||||
return params[MODE_TIME];
|
||||
}
|
||||
|
||||
private byte getVolTune() {
|
||||
private byte getVolTune() {
|
||||
return (byte) params[MODE_VOL];
|
||||
}
|
||||
|
||||
@ -1085,12 +1081,11 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
params[MODE_LEN] = len;
|
||||
}
|
||||
|
||||
private int getLenTune() {
|
||||
private int getLenTune() {
|
||||
return params[MODE_LEN];
|
||||
}
|
||||
|
||||
private void action()
|
||||
{
|
||||
private void action() {
|
||||
if (statusMode == MODE_LEN) {
|
||||
extLen = (extLen + 1) % 3;
|
||||
calcLen();
|
||||
@ -1255,9 +1250,9 @@ 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),
|
||||
m1, yIndent + 3, Graphics.BOTTOM | Graphics.LEFT);
|
||||
g.setFont(P.smPlain);
|
||||
g.drawString(getNoteFromLine(curY) + " " + Constants.getInstrName(getNoteFromLine(curY) - DrumsCanvas.drumsShift + 145),
|
||||
m1, yIndent + 3, Graphics.BOTTOM | Graphics.LEFT);
|
||||
}
|
||||
|
||||
break;
|
||||
@ -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();
|
||||
@ -1453,11 +1447,11 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private Item[] createStringItems(String strings[]) {
|
||||
private Item[] createStringItems(String strings[]) {
|
||||
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;
|
||||
}
|
||||
@ -1466,7 +1460,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
MixerCanvas.this.display.setCurrent(MixerCanvas.this);
|
||||
}
|
||||
|
||||
private void resetMenu() {
|
||||
private void resetMenu() {
|
||||
menu = mainMenu;
|
||||
menu.reset();
|
||||
}
|
||||
@ -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();
|
||||
@ -1590,13 +1584,13 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
private Menu prevMenu;
|
||||
private int x, y, w, h;
|
||||
private int hMax;
|
||||
private int lineBase, curLine;
|
||||
private int lineBase, curLine;
|
||||
private int numLines;
|
||||
private int numLinesMaxVisible;
|
||||
private int LINE_HEIGHT;
|
||||
private boolean isScroll;
|
||||
|
||||
private Menu(String name, Menu prev,
|
||||
private Menu(String name, Menu prev,
|
||||
int x1, int y1, int width,
|
||||
int nLines, int onelineHeight) {
|
||||
super(name, 0);
|
||||
@ -1614,7 +1608,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
reset();
|
||||
}
|
||||
|
||||
private void addItem(MenuItem item) {
|
||||
private void addItem(MenuItem item) {
|
||||
items.addElement(item);
|
||||
|
||||
numLines = hMax / LINE_HEIGHT;
|
||||
@ -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);
|
||||
@ -1700,7 +1693,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private void up() {
|
||||
private void up() {
|
||||
if (lineBase + curLine > 0) {
|
||||
if (isScroll && curLine <= 1 && lineBase > 0) {
|
||||
lineBase--;
|
||||
@ -1717,10 +1710,10 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
}
|
||||
}
|
||||
|
||||
private void down() {
|
||||
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++;
|
||||
@ -1731,12 +1724,12 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
}
|
||||
|
||||
private void reset() {
|
||||
private void reset() {
|
||||
lineBase = 0;
|
||||
curLine = 0;
|
||||
}
|
||||
|
||||
private Menu getPrevMenu() {
|
||||
private Menu getPrevMenu() {
|
||||
return prevMenu;
|
||||
}
|
||||
}
|
||||
@ -1748,13 +1741,12 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
||||
|
||||
// public MenuItem() {
|
||||
// }
|
||||
|
||||
private MenuItem(String str, int key) {
|
||||
private MenuItem(String str, int key) {
|
||||
name = str;
|
||||
keyCode = key;
|
||||
}
|
||||
|
||||
protected String getName() {
|
||||
protected String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,6 @@
|
||||
package midedit;
|
||||
|
||||
|
||||
|
||||
import main.Main;
|
||||
import midedit.media.Composition;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
@ -9,120 +8,103 @@ 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)
|
||||
{
|
||||
super(ctrl, c, ch);
|
||||
hMax = 127;
|
||||
hBase = 60;
|
||||
curY = 11;
|
||||
}
|
||||
public NotesCanvas(Main ctrl, Composition c, int ch) {
|
||||
super(ctrl, c, ch);
|
||||
hMax = 127;
|
||||
hBase = 60;
|
||||
curY = 11;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ch
|
||||
*/
|
||||
public void setChannel(int ch)
|
||||
{
|
||||
channel = ch;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getChannel()
|
||||
{
|
||||
return channel;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param ch
|
||||
*/
|
||||
public void setChannel(int ch) {
|
||||
channel = ch;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected boolean doKEY_NUM5()
|
||||
{
|
||||
if(super.doKEY_NUM5() == false)
|
||||
{
|
||||
int dt;
|
||||
dt = super.getCurLen();
|
||||
byte n = (byte)getNoteFromLine(curY);
|
||||
int curT = getCurTime();
|
||||
composition.addNoteOn(curT, (byte) channel, n, super.getCurVol(), dt,true);
|
||||
composition.addNoteOffWithoutSearch(curT + dt, (byte) channel, n, dt);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public int getChannel() {
|
||||
return channel;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected boolean doKEY_NUM5() {
|
||||
if (super.doKEY_NUM5() == false) {
|
||||
int dt;
|
||||
dt = super.getCurLen();
|
||||
byte n = (byte) getNoteFromLine(curY);
|
||||
int curT = getCurTime();
|
||||
composition.addNoteOn(curT, (byte) channel, n, super.getCurVol(), dt, true);
|
||||
composition.addNoteOffWithoutSearch(curT + dt, (byte) channel, n, dt);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected String getCurTuneString()
|
||||
{
|
||||
return "none";
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
protected String getCurTuneString() {
|
||||
return "none";
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param g
|
||||
* @param note
|
||||
* @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)
|
||||
{
|
||||
/**
|
||||
*
|
||||
* @param g
|
||||
* @param note
|
||||
* @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);
|
||||
}
|
||||
else
|
||||
{
|
||||
h = (h<0)? -1 : nH;
|
||||
g.fillRect(x+t,h*hOne+1,2,hOne-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param n
|
||||
* @return
|
||||
*/
|
||||
protected byte getLineFromNote(int n)
|
||||
{
|
||||
return (byte)((Constants.INV_CANVAS_CONST - n) - hBase);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ch
|
||||
* @return
|
||||
*/
|
||||
protected int getNoteFromLine(int ch)
|
||||
{
|
||||
return (byte)getCurNote();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ch
|
||||
* @return
|
||||
*/
|
||||
protected int getNoteFromLine(int ch) {
|
||||
return (byte) getCurNote();
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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)
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
package midedit.media;
|
||||
|
||||
import midedit.*;
|
||||
import midedit.CompositionForm;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
||||
/**
|
||||
|
@ -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;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -1,6 +1,6 @@
|
||||
package midedit.media;
|
||||
|
||||
import midedit.*;
|
||||
import midedit.MixerModel;
|
||||
import javax.microedition.media.*;
|
||||
import java.io.*;
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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
@ -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
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
@ -1,3 +1,6 @@
|
||||
package ui;
|
||||
|
||||
import main.P;
|
||||
import java.util.Calendar;
|
||||
import javax.microedition.lcdui.*;
|
||||
|
@ -1,4 +1,4 @@
|
||||
package midedit;
|
||||
package util;
|
||||
|
||||
import java.io.*;
|
||||
|
@ -1,3 +1,5 @@
|
||||
package util;
|
||||
|
||||
|
||||
|
||||
import javax.microedition.lcdui.Font;
|
@ -1,3 +1,5 @@
|
||||
package util;
|
||||
|
||||
|
||||
|
||||
public class StringEncoder {
|