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.io.*;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
import util.BufDataInputStream;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Êëàññ òåêñòîâûõ ìåòîê
|
* Êëàññ òåêñòîâûõ ìåòîê
|
||||||
@ -24,7 +25,7 @@ public class L {
|
|||||||
cancel = 10,
|
cancel = 10,
|
||||||
error = 11,
|
error = 11,
|
||||||
openError = 12,
|
openError = 12,
|
||||||
toolsList = 13,
|
listInstruments = 13,
|
||||||
impossible = 14,
|
impossible = 14,
|
||||||
saved = 15,
|
saved = 15,
|
||||||
savingError = 16,
|
savingError = 16,
|
||||||
@ -104,7 +105,7 @@ public class L {
|
|||||||
quickCommands = 90,
|
quickCommands = 90,
|
||||||
navigation = 91,
|
navigation = 91,
|
||||||
numkeysOptionString = 92,
|
numkeysOptionString = 92,
|
||||||
iconsOptionString = 93;
|
midiName = 93;
|
||||||
|
|
||||||
|
|
||||||
/** Ìàññèâ òåêñòîâûõ ìåòîê */
|
/** Ìàññèâ òåêñòîâûõ ìåòîê */
|
||||||
@ -118,7 +119,6 @@ public class L {
|
|||||||
public static void readLang(String lang, boolean appLang) {
|
public static void readLang(String lang, boolean appLang) {
|
||||||
try {
|
try {
|
||||||
final String path = (appLang ? "strings" : "instr") + "_";
|
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"));
|
BufDataInputStream bdis = new BufDataInputStream(Runtime.getRuntime().getClass().getResourceAsStream("/lang/" + path + lang + ".loc"));
|
||||||
if (!bdis.checkBOM()) {
|
if (!bdis.checkBOM()) {
|
||||||
bdis.close();
|
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.*;
|
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 final Font medBold = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM);
|
||||||
|
|
||||||
|
/** Êîìàíäà îòìåíû */
|
||||||
|
public static Command comCancel;
|
||||||
|
|
||||||
/** Ïóòü â ôàéë-ìåíåäæåðå */
|
/** Ïóòü â ôàéë-ìåíåäæåðå */
|
||||||
public static String path = "/";
|
public static String path = "/";
|
||||||
|
/** Èìÿ ôàéëà */
|
||||||
|
public static String openSaveString = "newmix";
|
||||||
public static Random rnd = new Random();
|
/** Ðåæèì ðàáîòû ñ RMS */
|
||||||
|
public static boolean isRMSMode = false;
|
||||||
|
/** Ðàñøèðåíîå ìåíþ (ïðîäîëæèòü, ñîõðàíèòü è ò.ä) */
|
||||||
|
public static boolean extMenu = false;
|
||||||
|
|
||||||
//ñêèíû
|
//ñêèíû
|
||||||
//title and soft
|
//title and soft
|
||||||
public static int colup = 0xD01C712F;
|
public static int colup = 0xD0604080;
|
||||||
public static int coldn = 0xD0093A14;
|
public static int coldn = 0xD0754E9C;
|
||||||
//selection (lang)
|
|
||||||
public static int selup = 0x1B991B;
|
|
||||||
public static int seldn = 0x646464;
|
|
||||||
//çàäíèé ôîí
|
//çàäíèé ôîí
|
||||||
public static int backgrnd = 0xEEEEEE;
|
public static int backgrnd = 0xFFFFFF;
|
||||||
//îáâîäêà
|
// ôîí êóðñîðà
|
||||||
public static int obv = 0x005804;
|
public static int obv = 0xA0A0E0;
|
||||||
// ôì
|
// ôì
|
||||||
public static int fmback1 = 0x222222;
|
public static int fmback1 = 0xEEEEEE;
|
||||||
public static int fmtextcur = 0xD8C922;
|
public static int fmtextcur = 0x31316C;
|
||||||
public static int fmtextnc = 0x296321;
|
public static int fmtextnc = 0x2B174A;
|
||||||
public static int fmbord = 0x008909;
|
public static int fmbord = 0x9C80FD;
|
||||||
public static int fmshadow = 0x282828;
|
|
||||||
public static int fmcurbord = 0xA89C1A;
|
|
||||||
public static int fmtextuppan = 0xE0FFFA;
|
|
||||||
|
|
||||||
}
|
}
|
@ -1,3 +1,5 @@
|
|||||||
|
package main;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -17,6 +19,10 @@ public class Rms {
|
|||||||
public static boolean firstStart = true; // ïåðâûé ñòàðò
|
public static boolean firstStart = true; // ïåðâûé ñòàðò
|
||||||
public static String languageApp = "en"; // ÿçûê ïðîãðàììû
|
public static String languageApp = "en"; // ÿçûê ïðîãðàììû
|
||||||
public static String languageInstr = "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.writeBoolean(firstStart);
|
||||||
dos.writeUTF(languageApp);
|
dos.writeUTF(languageApp);
|
||||||
dos.writeUTF(languageInstr);
|
dos.writeUTF(languageInstr);
|
||||||
|
dos.writeUTF(tempDir);
|
||||||
|
dos.writeInt(noteWidth);
|
||||||
|
dos.writeInt(noteHeight);
|
||||||
|
dos.writeBoolean(numKeysEdit);
|
||||||
dos.flush();
|
dos.flush();
|
||||||
options = baos.toByteArray();
|
options = baos.toByteArray();
|
||||||
dos.close();
|
dos.close();
|
||||||
@ -67,6 +77,10 @@ public class Rms {
|
|||||||
firstStart = dis.readBoolean(); // ïåðâûé ðàç çàïóùåí
|
firstStart = dis.readBoolean(); // ïåðâûé ðàç çàïóùåí
|
||||||
languageApp = dis.readUTF();
|
languageApp = dis.readUTF();
|
||||||
languageInstr = dis.readUTF();
|
languageInstr = dis.readUTF();
|
||||||
|
tempDir = dis.readUTF();
|
||||||
|
noteWidth = dis.readInt();
|
||||||
|
noteHeight = dis.readInt();
|
||||||
|
numKeysEdit = dis.readBoolean();
|
||||||
dis.close();
|
dis.close();
|
||||||
} catch (Exception ex) {
|
} 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) начал делать модификацию.
|
По просьбе одного человека, на основе исходников MidEdit 2.0.5 (http://sunet.dl.sourceforge.net/project/midedit/MideditProject.tgz) начал делать модификацию.
|
||||||
Изменения:
|
Изменения:
|
||||||
- Сохранение в .mid, а не в .MID
|
- Сохранение в .mid, а не в .MID
|
||||||
- Исправления в локализации. Добавлен украинский язык.
|
- Исправления в локализации.
|
||||||
|
- Новое графическое меню. Убраны лишние пункты при запуске.
|
||||||
|
|
||||||
|
|
||||||
******
|
********
|
||||||
|
Добавить украинский язык.
|
||||||
При первом запуске - настройки
|
При первом запуске - настройки
|
||||||
Help в aNMPWR
|
Help в aNMPWR
|
||||||
player.realize
|
player.realize
|
@ -4,6 +4,9 @@ package midedit;
|
|||||||
import midedit.media.Composition;
|
import midedit.media.Composition;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.microedition.lcdui.*;
|
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;
|
public static CompositionForm curForm;
|
||||||
private static final byte SEEK_GAUGE_MAX = 10;
|
private static final byte SEEK_GAUGE_MAX = 10;
|
||||||
private byte seekGaugeCur = 0;
|
private byte seekGaugeCur = 0;
|
||||||
private MixerMain control;
|
private Main control;
|
||||||
private MixerModel model;
|
private MixerModel model;
|
||||||
private Display display;
|
private Display display;
|
||||||
private NotesCanvas notesCanvas;
|
private NotesCanvas notesCanvas;
|
||||||
@ -32,48 +35,32 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
isWorking,
|
isWorking,
|
||||||
isNew = false,
|
isNew = false,
|
||||||
isAdd;
|
isAdd;
|
||||||
private Command addInstrument = new Command(Constants.getStringName(50), Command.HELP, 3),
|
private Command addInstrument = new Command(L.str[L.addInstrument], Command.HELP, 3),
|
||||||
edit = new Command(Constants.getStringName(51), Command.HELP, 1),
|
edit = new Command(L.str[L.edit], Command.HELP, 1),
|
||||||
setInstrument = new Command(Constants.getStringName(52), Command.ITEM, 1),
|
setInstrument = new Command(L.str[L.setInstrument], Command.ITEM, 1),
|
||||||
delInstrument = new Command(Constants.getStringName(53), Command.ITEM, 2),
|
delInstrument = new Command(L.str[L.delInstrument], Command.ITEM, 2),
|
||||||
temp = new Command(Constants.getStringName(54), Command.ITEM, 3),
|
temp = new Command(L.str[L.tempoBox], Command.ITEM, 3),
|
||||||
volume = new Command(Constants.getStringName(55), Command.ITEM, 4),
|
volume = new Command(L.str[L.volumeBox], Command.ITEM, 4),
|
||||||
meter = new Command(Constants.getStringName(56), Command.ITEM, 5),
|
meter = new Command(L.str[L.meter], Command.ITEM, 5),
|
||||||
rmsMode = new Command(Constants.getStringName(9), Command.ITEM, 6),
|
rmsMode = new Command(L.str[L.RMS], Command.ITEM, 6),
|
||||||
jsr75Mode = new Command(Constants.getStringName(6), Command.ITEM, 7);
|
jsr75Mode = new Command(L.str[L.file], Command.ITEM, 7);
|
||||||
|
|
||||||
;
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
/**
|
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),
|
||||||
*
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
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),
|
|
||||||
//cancel = new Command("Cancel",Command.BACK,1),
|
//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
|
* @param ctrl
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public CompositionForm(MixerMain ctrl) throws Exception {
|
public CompositionForm(Main ctrl) throws Exception {
|
||||||
this(ctrl, null);
|
this(ctrl, null);
|
||||||
isNew = true;
|
isNew = true;
|
||||||
|
|
||||||
@ -87,7 +74,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
* @param fName
|
* @param fName
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public CompositionForm(MixerMain ctrl, String fName) throws Exception {
|
public CompositionForm(Main ctrl, String fName) throws Exception {
|
||||||
super((fName != null) ? fName : "New");
|
super((fName != null) ? fName : "New");
|
||||||
control = ctrl;
|
control = ctrl;
|
||||||
model = control.getModel();
|
model = control.getModel();
|
||||||
@ -133,9 +120,9 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public void run() {
|
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(),
|
model.getWaitableFile(),
|
||||||
control.getCurrentlistMenu(),
|
control.getCurrentlistMenu(),
|
||||||
model);
|
model);
|
||||||
@ -154,7 +141,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
|
|
||||||
isWorking = true;
|
isWorking = true;
|
||||||
} catch (Exception ex) {
|
} 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);
|
a.setTimeout(Alert.FOREVER);
|
||||||
waitForm.cancel();
|
waitForm.cancel();
|
||||||
isWorking = false;
|
isWorking = false;
|
||||||
@ -185,12 +172,12 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
throw new Exception("instruments==null");
|
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) {
|
if (choiseInstrument == null) {
|
||||||
throw new Exception("choiseInstrument==null");
|
throw new Exception("choiseInstrument==null");
|
||||||
}
|
}
|
||||||
this.append(choiseInstrument);
|
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.append(seekingGauge);
|
||||||
this.addCommand(edit);
|
this.addCommand(edit);
|
||||||
this.addCommand(play);
|
this.addCommand(play);
|
||||||
@ -204,7 +191,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
this.addCommand(back);
|
this.addCommand(back);
|
||||||
//this.addCommand(rmsMode);
|
//this.addCommand(rmsMode);
|
||||||
this.setCommandListener(this);
|
this.setCommandListener(this);
|
||||||
MixerModel.isRMSMode = true;
|
P.isRMSMode = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private byte[] buildChansList() {
|
private byte[] buildChansList() {
|
||||||
@ -246,7 +233,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
instrName = ((ChoiceGroup) i).getString(((ChoiceGroup) i).getSelectedIndex());
|
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("instrName = " + instrName);
|
||||||
// System.out.println("instrumNum = " + instrumNum);
|
// System.out.println("instrumNum = " + instrumNum);
|
||||||
@ -281,7 +268,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
if (channel != -1) {
|
if (channel != -1) {
|
||||||
choiseInstrument.appendChannel(instrName, channel);
|
choiseInstrument.appendChannel(instrName, channel);
|
||||||
} else {
|
} 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);
|
display.setCurrent(a);
|
||||||
try {
|
try {
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
@ -334,7 +321,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
msg("" + e);
|
msg("" + e);
|
||||||
}
|
}
|
||||||
} else if (command == Settings.comCancel) {
|
} else if (command == P.comCancel) {
|
||||||
model.stopPlay();
|
model.stopPlay();
|
||||||
display.setCurrent(CompositionForm.this);
|
display.setCurrent(CompositionForm.this);
|
||||||
} else if (command == stop) {
|
} else if (command == stop) {
|
||||||
@ -393,13 +380,13 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
display.setCurrent(volForm);
|
display.setCurrent(volForm);
|
||||||
} else if (command == meter) {
|
} else if (command == meter) {
|
||||||
Form textBoxTemp = new Form(Constants.getInstrName(72));
|
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);
|
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(denomField);
|
||||||
textBoxTemp.append(MixerMain.createStringItem(Constants.getStringName(76), 2));
|
textBoxTemp.append(Main.createStringItem(L.str[L.meterInfo], 2));
|
||||||
textBoxTemp.addCommand(CompositionForm.ok);
|
textBoxTemp.addCommand(CompositionForm.ok);
|
||||||
textBoxTemp.addCommand(Settings.comCancel);
|
textBoxTemp.addCommand(P.comCancel);
|
||||||
textBoxTemp.setCommandListener(new CommandListener() {
|
textBoxTemp.setCommandListener(new CommandListener() {
|
||||||
|
|
||||||
public void commandAction(Command command, Displayable displayable) {
|
public void commandAction(Command command, Displayable displayable) {
|
||||||
@ -412,18 +399,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
});
|
});
|
||||||
model.display.setCurrent(textBoxTemp);
|
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) {
|
else if (command == back) {
|
||||||
control.comBack();
|
control.comBack();
|
||||||
}
|
}
|
||||||
@ -440,7 +416,7 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
Thread runner = new Thread() {
|
Thread runner = new Thread() {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
WaitForm waitForm = new WaitForm(Constants.getStringName(18) + "...",
|
WaitForm waitForm = new WaitForm(L.str[L.saving] + "...",
|
||||||
model.getWaitableFile(),
|
model.getWaitableFile(),
|
||||||
control.getCurrentlistMenu(),
|
control.getCurrentlistMenu(),
|
||||||
model);
|
model);
|
||||||
@ -450,12 +426,11 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
composition.setName(nameFinal);
|
composition.setName(nameFinal);
|
||||||
try {
|
try {
|
||||||
String ans = model.saveMix(composition, nameFinal);
|
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);
|
a.setTimeout(Alert.FOREVER);
|
||||||
control.setCurrentlistMenu(a);
|
control.setCurrentlistMenu(a);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
Alert a = new Alert(Constants.getStringName(12),
|
Alert a = new Alert(L.str[L.error], L.str[L.savingError] + "\n" + ex.getMessage(), null, null);
|
||||||
Constants.getStringName(17) + "\n" + ex.getMessage(), null, null);
|
|
||||||
a.setTimeout(Alert.FOREVER);
|
a.setTimeout(Alert.FOREVER);
|
||||||
waitForm.cancel();
|
waitForm.cancel();
|
||||||
control.setCurrentlistMenu(a);
|
control.setCurrentlistMenu(a);
|
||||||
@ -480,8 +455,8 @@ public class CompositionForm extends Form implements CommandListener, Runnable,
|
|||||||
* @param s
|
* @param s
|
||||||
*/
|
*/
|
||||||
public static void msg(String s) {
|
public static void msg(String s) {
|
||||||
Alert a = new Alert(Constants.getStringName(12), Constants.getStringName(12) + "\n" + s, null, null);
|
Alert a = new Alert(L.str[L.error], L.str[L.error] + "\n" + s, null, AlertType.ERROR);
|
||||||
MixerMain.display.setCurrent(a);
|
Main.dsp.setCurrent(a);
|
||||||
}
|
}
|
||||||
/*Form tabsInstruments (){
|
/*Form tabsInstruments (){
|
||||||
MyItem []groupsOfElements = new MyItem [16];
|
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);
|
// listOfElements[j] = j + i * 8 + 1 + ' ' + Constants.getInstrName(j + i * 8 + 1);
|
||||||
// }
|
// }
|
||||||
String[] listOfElements = new String[8];
|
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);
|
groupsChoiseGroup[i] = new ChoiceGroup(Constants.getInstrName(129 + i), 4, listOfElements, null);
|
||||||
//for (int j=0; j<8; j++)
|
//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(play);
|
||||||
groupsChoiseGroup[i].addCommand(ok);
|
groupsChoiseGroup[i].addCommand(ok);
|
||||||
groupsChoiseGroup[i].setItemCommandListener(this);
|
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);
|
Item drums = new StringItem(Constants.getInstrName(0), null);
|
||||||
drums.addCommand(ok);
|
drums.addCommand(ok);
|
||||||
drums.setItemCommandListener(this);
|
drums.setItemCommandListener(this);
|
||||||
listInstrumentsForm.append(drums);
|
listInstrumentsForm.append(drums);
|
||||||
listInstrumentsForm.addCommand(Settings.comCancel);
|
listInstrumentsForm.addCommand(P.comCancel);
|
||||||
listInstrumentsForm.setCommandListener(this);
|
listInstrumentsForm.setCommandListener(this);
|
||||||
}
|
}
|
||||||
//form.setItemStateListener(this);
|
//form.setItemStateListener(this);
|
||||||
|
@ -1,35 +1,22 @@
|
|||||||
package midedit;
|
package midedit;
|
||||||
|
|
||||||
|
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
import main.Rms;
|
||||||
|
import main.L;
|
||||||
|
|
||||||
//import java.util.*;
|
//import java.util.*;
|
||||||
//import java.lang.*;
|
//import java.lang.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author user
|
* @author user
|
||||||
*/
|
*/
|
||||||
public class Constants
|
public class Constants {
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
public static String getInstrName(int index) {
|
||||||
*
|
return L.instr[index];
|
||||||
* @param index
|
|
||||||
* @param t
|
|
||||||
*/
|
|
||||||
public static String getStringName (int index){
|
|
||||||
return Settings.parserLang.getStringResourses(index);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getInstrName (int index){
|
public static void setTimeConst(int t) {
|
||||||
return Settings.parserInstr.getStringResourses(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void setTimeConst(int t)
|
|
||||||
{
|
|
||||||
timeConst = t;
|
timeConst = t;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
@ -55,7 +42,7 @@ public class Constants
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final static int N_INSTR = 127,
|
public final static int N_INSTR = 127,
|
||||||
DRUMS_LENGTH=61,//27__87
|
DRUMS_LENGTH = 61,//27__87
|
||||||
DRUMS_SHIFT = 27;
|
DRUMS_SHIFT = 27;
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -65,11 +52,6 @@ public class Constants
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static final int NCHANNEL = 16;
|
public static final int NCHANNEL = 16;
|
||||||
// /**
|
|
||||||
// *
|
|
||||||
// */
|
|
||||||
// public static final String[] noteNames = {"C","C#","D","D#","E",
|
|
||||||
// "F","F#","G","G#","A","A#","B"};
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -77,47 +59,43 @@ public class Constants
|
|||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public final static String[]KEY_MAP = {
|
public final static String[] KEY_MAP = {
|
||||||
"<LeftSoftKey>", getStringName(24),
|
"<LeftSoftKey>", L.str[L.menu],
|
||||||
"<RightSoftKey>", getStringName(25),
|
"<RightSoftKey>", L.str[L.back],
|
||||||
"<Fire>,<5>", getStringName(26)+"\n"+
|
"<Fire>,<5>", L.str[L.insertNoteWithCurrentAttributes] + "\n" + L.str[L.noteAttributeHelp],
|
||||||
getStringName(27),
|
"<9>,<Clear>", L.str[L.deleteNote],
|
||||||
"<9>,<Clear>", getStringName(28),
|
"<Red Phone>", L.str[L.undo],
|
||||||
"<Red Phone>", getStringName(29),
|
"<Volume +'\'->", L.str[L.noteVolume],
|
||||||
"<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);
|
|
||||||
|
|
||||||
static class VectorArr extends Vector {
|
"<1>", L.str[L.playFromCurrent],
|
||||||
public VectorArr(Object src, int beg, int length) {
|
"<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);
|
super(length);
|
||||||
setSize(length);
|
setSize(length);
|
||||||
System.arraycopy(src, beg, elementData, 0, size());
|
System.arraycopy(src, beg, super.elementData, 0, size());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package midedit;
|
package midedit;
|
||||||
|
|
||||||
import midedit.media.Composition;
|
import midedit.media.Composition;
|
||||||
|
import main.Main;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -21,7 +21,7 @@ public class DrumsCanvas extends MixerCanvas
|
|||||||
* @param ctrl
|
* @param ctrl
|
||||||
* @param c
|
* @param c
|
||||||
*/
|
*/
|
||||||
public DrumsCanvas(MixerMain ctrl, Composition c)
|
public DrumsCanvas(Main ctrl, Composition c)
|
||||||
{
|
{
|
||||||
super(ctrl,c,Constants.DRUMS_CHANNEL);
|
super(ctrl,c,Constants.DRUMS_CHANNEL);
|
||||||
prepareConstants();
|
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.media.Composition;
|
||||||
import midedit.io.AbstractFile;
|
import midedit.io.AbstractFile;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
import main.P;
|
||||||
//import com.siemens.mp.io.File;
|
//import com.siemens.mp.io.File;
|
||||||
|
|
||||||
public class MidiFile implements Waitable {
|
public class MidiFile implements Waitable {
|
||||||
@ -72,7 +73,7 @@ public class MidiFile implements Waitable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setFile() {
|
public void setFile() {
|
||||||
file = MixerModel.isRMSMode ? MixerModel.rmsFile : MixerModel.jsr75File;
|
file = P.isRMSMode ? MixerModel.rmsFile : MixerModel.jsr75File;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,20 +1,21 @@
|
|||||||
package midedit;
|
package midedit;
|
||||||
|
|
||||||
|
|
||||||
import midedit.media.Composition;
|
import midedit.media.Composition;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
import main.L;
|
||||||
|
import main.P;
|
||||||
|
import main.Main;
|
||||||
|
import main.Rms;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author user
|
* @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);
|
private static final Font defFont = Font.getFont(Font.FACE_SYSTEM, Font.STYLE_PLAIN, Font.SIZE_SMALL);
|
||||||
|
|
||||||
protected Composition composition;
|
protected Composition composition;
|
||||||
protected int channel;
|
protected int channel;
|
||||||
private Options options;
|
private Options options;
|
||||||
@ -22,13 +23,13 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
isMarkMode = false,
|
isMarkMode = false,
|
||||||
isMoveMode = false,
|
isMoveMode = false,
|
||||||
isModeDesc = false,
|
isModeDesc = false,
|
||||||
isNumsControl = (Settings.settingsIndex[4] == 1) ? true : false;
|
isNumsControl = Rms.numKeysEdit;
|
||||||
private Status status;
|
private Status status;
|
||||||
private MixerMain control;
|
private Main control;
|
||||||
private MixerModel model;
|
private MixerModel model;
|
||||||
private Display display = MixerMain.display;
|
private Display display = Main.dsp;
|
||||||
private Thread playingThread ;
|
private Thread playingThread;
|
||||||
private final Runnable playingRunnable= new Runnable() {
|
private final Runnable playingRunnable = new Runnable() {
|
||||||
|
|
||||||
public void run() {
|
public void run() {
|
||||||
System.out.println("getTimeToCanvasConct() = " + composition.getTime2CanvasConst());
|
System.out.println("getTimeToCanvasConct() = " + composition.getTime2CanvasConst());
|
||||||
@ -42,8 +43,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ;
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -51,14 +51,14 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
* @param c
|
* @param c
|
||||||
* @param ch
|
* @param ch
|
||||||
*/
|
*/
|
||||||
public MixerCanvas(MixerMain ctrl, Composition c, int ch) {
|
public MixerCanvas(Main ctrl, Composition c, int ch) {
|
||||||
//if (MixerMain.IS_MIDP2)
|
//if (Main.IS_MIDP2)
|
||||||
setFullScreenMode(true);
|
setFullScreenMode(true);
|
||||||
control = ctrl;
|
control = ctrl;
|
||||||
composition = c;
|
composition = c;
|
||||||
channel = ch;
|
channel = ch;
|
||||||
wOne = Settings.settingsIndex[1];
|
wOne = Rms.noteWidth;
|
||||||
hOne = Settings.settingsIndex[0];
|
hOne = Rms.noteHeight;
|
||||||
screenHeight = getHeight();
|
screenHeight = getHeight();
|
||||||
screenWidth = getWidth();
|
screenWidth = getWidth();
|
||||||
statusBegY = screenHeight - statusHeight;
|
statusBegY = screenHeight - statusHeight;
|
||||||
@ -102,46 +102,46 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
if (keyPressedCount == 0) {
|
if (keyPressedCount == 0) {
|
||||||
keyPressedCount = 1;
|
keyPressedCount = 1;
|
||||||
}
|
}
|
||||||
int gameAction=0;
|
int ga = getGameAction(keyCodePressed);
|
||||||
try{
|
if (ga == FIRE) {
|
||||||
gameAction = getGameAction(keyCodePressed);
|
|
||||||
}
|
|
||||||
catch (IllegalArgumentException illegArg){
|
|
||||||
}
|
|
||||||
if ((gameAction == FIRE)&(keyCodePressed!=-1)&(keyCodePressed!=-4)) {
|
|
||||||
doKEY_NUM5();
|
doKEY_NUM5();
|
||||||
needPaint = true;
|
needPaint = true;
|
||||||
needPaintStatus = true;
|
needPaintStatus = true;
|
||||||
return/*break*/;
|
return/*break*/;
|
||||||
} else if (gameAction == LEFT||keyCodePressed==KEY_NUM4) {
|
} else if (ga == LEFT || keyCodePressed == KEY_NUM4) {
|
||||||
if (isNumsControl^(keyCodePressed==KEY_NUM4))
|
if (isNumsControl ^ (keyCodePressed == KEY_NUM4)) {
|
||||||
doBigLeft();
|
doBigLeft();
|
||||||
else
|
} else {
|
||||||
doSmallLeft();
|
doSmallLeft();
|
||||||
|
}
|
||||||
status.resetTimeTune();
|
status.resetTimeTune();
|
||||||
return;
|
return;
|
||||||
} else if (gameAction == RIGHT||keyCodePressed==KEY_NUM6) {
|
} else if (ga == RIGHT || keyCodePressed == KEY_NUM6) {
|
||||||
if (isNumsControl^(keyCodePressed==KEY_NUM6))
|
if (isNumsControl ^ (keyCodePressed == KEY_NUM6)) {
|
||||||
doBigRight();
|
doBigRight();
|
||||||
else
|
} else {
|
||||||
doSmallRight();
|
doSmallRight();
|
||||||
|
}
|
||||||
status.resetTimeTune();
|
status.resetTimeTune();
|
||||||
return;
|
return;
|
||||||
} else if (gameAction == UP||keyCodePressed==KEY_NUM2) {
|
} else if (ga == UP || keyCodePressed == KEY_NUM2) {
|
||||||
if (isNumsControl^(keyCodePressed==KEY_NUM2))
|
if (isNumsControl ^ (keyCodePressed == KEY_NUM2)) {
|
||||||
doBigUp();
|
doBigUp();
|
||||||
else
|
} else {
|
||||||
doSmallUp();
|
doSmallUp();
|
||||||
|
}
|
||||||
status.resetTimeTune();
|
status.resetTimeTune();
|
||||||
return;
|
return;
|
||||||
} else if (gameAction == DOWN||keyCodePressed==KEY_NUM8) {
|
} else if (ga == DOWN || keyCodePressed == KEY_NUM8) {
|
||||||
if (isNumsControl^(keyCodePressed==KEY_NUM8))
|
if (isNumsControl ^ (keyCodePressed == KEY_NUM8)) {
|
||||||
doBigDown();
|
doBigDown();
|
||||||
else
|
} else {
|
||||||
doSmallDown();
|
doSmallDown();
|
||||||
|
}
|
||||||
status.resetTimeTune();
|
status.resetTimeTune();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (keyCodePressed) {
|
switch (keyCodePressed) {
|
||||||
case KEY_NUM1:
|
case KEY_NUM1:
|
||||||
playFromCurrentPosition();
|
playFromCurrentPosition();
|
||||||
@ -152,7 +152,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_NUM7:
|
case KEY_NUM7:
|
||||||
case -10: case -4:
|
case -10:
|
||||||
|
case -4:
|
||||||
status.nextView();
|
status.nextView();
|
||||||
needPaintStatus = true;
|
needPaintStatus = true;
|
||||||
break;
|
break;
|
||||||
@ -174,11 +175,13 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
status.curParamPlus();
|
status.curParamPlus();
|
||||||
needPaintStatus = true;
|
needPaintStatus = true;
|
||||||
break;
|
break;
|
||||||
case -6: case -1:
|
case -6:
|
||||||
|
case -1:
|
||||||
isOptionsView = true;
|
isOptionsView = true;
|
||||||
options.resetMenu();
|
options.resetMenu();
|
||||||
break;
|
break;
|
||||||
case -7: case -12:
|
case -7:
|
||||||
|
case -12:
|
||||||
CompositionForm.curForm.setComposForm();
|
CompositionForm.curForm.setComposForm();
|
||||||
break;
|
break;
|
||||||
case -11:
|
case -11:
|
||||||
@ -308,16 +311,14 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected boolean doKEY_NUM5()
|
protected boolean doKEY_NUM5() {
|
||||||
{
|
|
||||||
if (isMoveMode == false && isMarkMode == false && curNote != null) {
|
if (isMoveMode == false && isMarkMode == false && curNote != null) {
|
||||||
timeMarkBeg = getCurTime();
|
timeMarkBeg = getCurTime();
|
||||||
timeMarkEnd = getCurTime();
|
timeMarkEnd = getCurTime();
|
||||||
setMarkModeOn();
|
setMarkModeOn();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isMoveMode)
|
if (isMoveMode) {
|
||||||
{
|
|
||||||
int noteShift = getCurNote() - OrigNote;
|
int noteShift = getCurNote() - OrigNote;
|
||||||
if (this instanceof DrumsCanvas) {
|
if (this instanceof DrumsCanvas) {
|
||||||
noteShift = -noteShift;
|
noteShift = -noteShift;
|
||||||
@ -333,8 +334,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
|
|
||||||
if (curNote.len > 0) {
|
if (curNote.len > 0) {
|
||||||
Note noteTmp;
|
Note noteTmp;
|
||||||
for (noteTmp = curNote.next; noteTmp != null &&
|
for (noteTmp = curNote.next; noteTmp != null
|
||||||
(noteTmp.c != curNote.c || noteTmp.n != curNote.n || noteTmp.v != 0);
|
&& (noteTmp.c != curNote.c || noteTmp.n != curNote.n || noteTmp.v != 0);
|
||||||
noteTmp = noteTmp.next);
|
noteTmp = noteTmp.next);
|
||||||
|
|
||||||
if (noteTmp != null && noteTmp.c == note.c && noteTmp.n == note.n) {
|
if (noteTmp != null && noteTmp.c == note.c && noteTmp.n == note.n) {
|
||||||
@ -373,13 +374,12 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
|
|
||||||
private void playFromCurrentPosition() {
|
private void playFromCurrentPosition() {
|
||||||
try {
|
try {
|
||||||
if (CompositionForm.isPlaying){
|
if (CompositionForm.isPlaying) {
|
||||||
model.stopPlay();
|
model.stopPlay();
|
||||||
playingThread.join();
|
playingThread.join();
|
||||||
}
|
} else {
|
||||||
else{
|
|
||||||
model.playMix(composition, xBase * Constants.timeConst);
|
model.playMix(composition, xBase * Constants.timeConst);
|
||||||
playingThread=new Thread(playingRunnable);
|
playingThread = new Thread(playingRunnable);
|
||||||
playingThread.start();
|
playingThread.start();
|
||||||
System.out.println("CompositionForm.isPlaying = " + CompositionForm.isPlaying);
|
System.out.println("CompositionForm.isPlaying = " + CompositionForm.isPlaying);
|
||||||
}
|
}
|
||||||
@ -394,16 +394,16 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
* @param keyCode
|
* @param keyCode
|
||||||
*/
|
*/
|
||||||
protected void keyReleased(int keyCode) {
|
protected void keyReleased(int keyCode) {
|
||||||
if (keyPressedCount > 0) {int gameAction=0;
|
if (keyPressedCount > 0) {
|
||||||
try{
|
int gameAction = 0;
|
||||||
|
try {
|
||||||
gameAction = getGameAction(keyCodePressed);
|
gameAction = getGameAction(keyCodePressed);
|
||||||
|
} catch (IllegalArgumentException illegArg) {
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException illegArg){
|
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6
|
||||||
}
|
|| keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8
|
||||||
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6 ||
|
|| keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR
|
||||||
keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8 ||
|
|| gameAction == LEFT || gameAction == RIGHT || gameAction == UP || gameAction == DOWN) {
|
||||||
keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR||
|
|
||||||
gameAction==LEFT||gameAction==RIGHT||gameAction==UP||gameAction==DOWN) {
|
|
||||||
setNeedPaint();
|
setNeedPaint();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -425,26 +425,25 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (keyPressedCount > 0) {
|
if (keyPressedCount > 0) {
|
||||||
if (keyPressedCount < 25)
|
if (keyPressedCount < 25) {
|
||||||
{
|
|
||||||
keyPressedCount++;
|
keyPressedCount++;
|
||||||
|
|
||||||
} else{
|
} else {
|
||||||
int gameAction=0;
|
int gameAction = 0;
|
||||||
try{
|
try {
|
||||||
gameAction = getGameAction(keyCodePressed);
|
gameAction = getGameAction(keyCodePressed);
|
||||||
|
} catch (IllegalArgumentException illegArg) {
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException illegArg){
|
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6
|
||||||
}
|
|| gameAction == LEFT || gameAction == RIGHT || gameAction == UP || gameAction == DOWN
|
||||||
if (keyCodePressed == KEY_NUM4 || keyCodePressed == KEY_NUM6 ||
|
|| keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8
|
||||||
gameAction==LEFT||gameAction==RIGHT||gameAction==UP||gameAction==DOWN||
|
|| keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR) {
|
||||||
keyCodePressed == KEY_NUM2 || keyCodePressed == KEY_NUM8 ||
|
|
||||||
keyCodePressed == KEY_POUND || keyCodePressed == KEY_STAR) {
|
|
||||||
isblack = true;
|
isblack = true;
|
||||||
|
|
||||||
|
|
||||||
keyPressed(keyCodePressed);
|
keyPressed(keyCodePressed);
|
||||||
}}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
paintUniEditor(g);
|
paintUniEditor(g);
|
||||||
|
|
||||||
@ -457,7 +456,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
private void paintUniEditor(Graphics g) {
|
private void paintUniEditor(Graphics g) {
|
||||||
g.setColor(224, 192, 224);
|
g.setColor(224, 192, 224);
|
||||||
g.setGrayScale(0);
|
g.setGrayScale(0);
|
||||||
g.setFont(MixerMain.SMALL_FONT);
|
g.setFont(P.smPlain);
|
||||||
if (needPaint == true) {
|
if (needPaint == true) {
|
||||||
int tmpN = getNoteFromLine(curY);
|
int tmpN = getNoteFromLine(curY);
|
||||||
if (tmpN < 0 || tmpN > 127) {
|
if (tmpN < 0 || tmpN > 127) {
|
||||||
@ -504,7 +503,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
g.drawLine(0, yt, rollWidth - 1, yt);
|
g.drawLine(0, yt, rollWidth - 1, yt);
|
||||||
}
|
}
|
||||||
g.setColor(192, 160, 160);
|
g.setColor(192, 160, 160);
|
||||||
yt = curY * hOne + 1 ;
|
yt = curY * hOne + 1;
|
||||||
g.fillRect(0, yt, rollWidth - 1, hOne - 1);
|
g.fillRect(0, yt, rollWidth - 1, hOne - 1);
|
||||||
g.setGrayScale(96);
|
g.setGrayScale(96);
|
||||||
int vLineStep = 32 >> composition.getDenomE();
|
int vLineStep = 32 >> composition.getDenomE();
|
||||||
@ -531,8 +530,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
for (note = composition.getFirstNote(tBeg, channel);
|
for (note = composition.getFirstNote(tBeg, channel);
|
||||||
note != null && note.t <= tMax; note = note.next) {
|
note != null && note.t <= tMax; note = note.next) {
|
||||||
if (note.c == channel && note.v != 0) {
|
if (note.c == channel && note.v != 0) {
|
||||||
if (note.t <= curTimePlus && note.n == curN &&
|
if (note.t <= curTimePlus && note.n == curN
|
||||||
(curTime < note.t + (note.len == 0 ? 1 : note.len))) {
|
&& (curTime < note.t + (note.len == 0 ? 1 : note.len))) {
|
||||||
curNote = note;
|
curNote = note;
|
||||||
if (!isMarkMode) {
|
if (!isMarkMode) {
|
||||||
g.setColor(150, 0, 0);
|
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 shiftTime = getCurTime() - OrigTime;
|
||||||
int shiftNote = getCurNote() - OrigNote;
|
int shiftNote = getCurNote() - OrigNote;
|
||||||
|
|
||||||
@ -641,7 +639,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
yt = nH;
|
yt = nH;
|
||||||
}
|
}
|
||||||
|
|
||||||
g.fillRect(xt + 1 , yt * hOne + 1 , 2, hOne - 1);
|
g.fillRect(xt + 1, yt * hOne + 1, 2, hOne - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -842,16 +840,15 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
statusBegY,
|
statusBegY,
|
||||||
nW,
|
nW,
|
||||||
keyCodePressed = KEY_NUM1;
|
keyCodePressed = KEY_NUM1;
|
||||||
protected int
|
protected int curY,
|
||||||
curY,
|
|
||||||
hMin,
|
hMin,
|
||||||
hMax = 15,
|
hMax = 15,
|
||||||
hBase,
|
hBase,
|
||||||
hStep = 12,
|
hStep = 12,
|
||||||
wBeg = 16,
|
wBeg = 16,
|
||||||
hBeg = 5,
|
hBeg = 5,
|
||||||
wOne = Settings.settingsIndex[1],
|
wOne = Rms.noteWidth,
|
||||||
hOne = Settings.settingsIndex[0],
|
hOne = Rms.noteHeight,
|
||||||
nH,
|
nH,
|
||||||
rollWidth,
|
rollWidth,
|
||||||
rollHeight;
|
rollHeight;
|
||||||
@ -896,7 +893,6 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private class Status {
|
private class Status {
|
||||||
|
|
||||||
private int statusMode;
|
private int statusMode;
|
||||||
@ -1089,8 +1085,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
return params[MODE_LEN];
|
return params[MODE_LEN];
|
||||||
}
|
}
|
||||||
|
|
||||||
private void action()
|
private void action() {
|
||||||
{
|
|
||||||
if (statusMode == MODE_LEN) {
|
if (statusMode == MODE_LEN) {
|
||||||
extLen = (extLen + 1) % 3;
|
extLen = (extLen + 1) % 3;
|
||||||
calcLen();
|
calcLen();
|
||||||
@ -1255,8 +1250,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
PrintSmallFont.print(g, note.n, 0, m4 - xIndent - 12, yIndent, color);
|
PrintSmallFont.print(g, note.n, 0, m4 - xIndent - 12, yIndent, color);
|
||||||
} else if (MixerCanvas.this instanceof DrumsCanvas) {
|
} else if (MixerCanvas.this instanceof DrumsCanvas) {
|
||||||
m1 = 2;
|
m1 = 2;
|
||||||
g.setFont(MixerMain.SMALL_FONT);
|
g.setFont(P.smPlain);
|
||||||
g.drawString(getNoteFromLine(curY)+" "+Constants.getInstrName(getNoteFromLine(curY) - DrumsCanvas.drumsShift+145),
|
g.drawString(getNoteFromLine(curY) + " " + Constants.getInstrName(getNoteFromLine(curY) - DrumsCanvas.drumsShift + 145),
|
||||||
m1, yIndent + 3, Graphics.BOTTOM | Graphics.LEFT);
|
m1, yIndent + 3, Graphics.BOTTOM | Graphics.LEFT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1265,8 +1260,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
m4 = 55;
|
m4 = 55;
|
||||||
|
|
||||||
if (isMoveMode) {
|
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);
|
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");
|
//System.out.println(this.toString() + " created");
|
||||||
if (screenHeight > 240) {
|
if (screenHeight > 240) {
|
||||||
ONE_LINE_HEIGHT = 22;
|
ONE_LINE_HEIGHT = 22;
|
||||||
MENU_WIDTH = 120;
|
MENU_WIDTH = 140;
|
||||||
}
|
}
|
||||||
|
|
||||||
MENU_BEGX = (screenWidth - MENU_WIDTH) / 2;
|
MENU_BEGX = (screenWidth - MENU_WIDTH) / 2;
|
||||||
MENU_BEGY = (screenHeight - menuNumLines * ONE_LINE_HEIGHT) / 4;
|
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);
|
Menu playMenu = new Menu(L.str[L.playStop], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
||||||
MenuItem playAllItem = new MenuItem(Constants.getStringName(79), 0) {
|
MenuItem playAllItem = new MenuItem(L.str[L.playAll], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
try {
|
try {
|
||||||
@ -1313,7 +1307,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
playMenu.addItem(playAllItem);
|
playMenu.addItem(playAllItem);
|
||||||
MenuItem playItem = new MenuItem(Constants.getStringName(80), 0) {
|
MenuItem playItem = new MenuItem(L.str[L.playScreen], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
try {
|
try {
|
||||||
@ -1325,7 +1319,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
playMenu.addItem(playItem);
|
playMenu.addItem(playItem);
|
||||||
MenuItem playTrackAllItem = new MenuItem(Constants.getStringName(81), 0) {
|
MenuItem playTrackAllItem = new MenuItem(L.str[L.trackAll], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
try {
|
try {
|
||||||
@ -1337,7 +1331,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
playMenu.addItem(playTrackAllItem);
|
playMenu.addItem(playTrackAllItem);
|
||||||
MenuItem playTrackItem = new MenuItem(Constants.getStringName(82), 0) {
|
MenuItem playTrackItem = new MenuItem(L.str[L.trackScreen], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
try {
|
try {
|
||||||
@ -1349,7 +1343,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
playMenu.addItem(playTrackItem);
|
playMenu.addItem(playTrackItem);
|
||||||
MenuItem stopItem = new MenuItem(Constants.getStringName(35), 0) {
|
MenuItem stopItem = new MenuItem(L.str[L.stop], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
model.stopPlay();
|
model.stopPlay();
|
||||||
@ -1361,14 +1355,14 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
|
|
||||||
mainMenu.addItem(playMenu);
|
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);
|
Menu markMenu = new Menu(L.str[L.mark], editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
||||||
MenuItem item1 = new MenuItem(Constants.getStringName(84), KEY_NUM1);
|
MenuItem item1 = new MenuItem(L.str[L.markBegin], KEY_NUM1);
|
||||||
markMenu.addItem(item1);
|
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);
|
markMenu.addItem(item2);
|
||||||
MenuItem item21 = new MenuItem(Constants.getStringName(86), 0) {
|
MenuItem item21 = new MenuItem(L.str[L.unmark], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
setMarkModeOff();
|
setMarkModeOff();
|
||||||
@ -1378,49 +1372,49 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
markMenu.addItem(item21);
|
markMenu.addItem(item21);
|
||||||
editMenu.addItem(markMenu);
|
editMenu.addItem(markMenu);
|
||||||
|
|
||||||
MenuItem item22 = new MenuItem(Constants.getStringName(87), 0) {
|
MenuItem item22 = new MenuItem(L.str[L.modifyBlock], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
isMoveMode = true;
|
isMoveMode = true;
|
||||||
NoteListUtils.deleteSelected(composition, (byte) channel);
|
NoteListUtils.deleteSelected(composition, (byte) channel);
|
||||||
OrigTime = getCurTime();
|
OrigTime = getCurTime();
|
||||||
OrigNote = getCurNote();
|
OrigNote = getCurNote();
|
||||||
viewModeDesc(Constants.getStringName(88));
|
viewModeDesc(L.str[L.modifyMode]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
editMenu.addItem(item22);
|
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);
|
editMenu.addItem(item3);
|
||||||
|
|
||||||
Menu menuPaste = new Menu(Constants.getStringName(90), editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
Menu menuPaste = new Menu(L.str[L.paste], editMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
||||||
MenuItem item4 = new MenuItem(Constants.getStringName(91), KEY_NUM4);
|
MenuItem item4 = new MenuItem(L.str[L.insert], KEY_NUM4);
|
||||||
menuPaste.addItem(item4);
|
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);
|
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);
|
menuPaste.addItem(item6);
|
||||||
editMenu.addItem(menuPaste);
|
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);
|
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);
|
editMenu.addItem(item7);
|
||||||
mainMenu.addItem(editMenu);
|
mainMenu.addItem(editMenu);
|
||||||
|
|
||||||
Menu undoMenu = new Menu(Constants.getStringName(29), mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
Menu undoMenu = new Menu(L.str[L.undo], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
||||||
MenuItem itemStar = new MenuItem(Constants.getStringName(29), KEY_STAR);
|
MenuItem itemStar = new MenuItem(L.str[L.undo], KEY_STAR);
|
||||||
undoMenu.addItem(itemStar);
|
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);
|
undoMenu.addItem(itemPound);
|
||||||
mainMenu.addItem(undoMenu);
|
mainMenu.addItem(undoMenu);
|
||||||
|
|
||||||
Menu helpMenu = new Menu(Constants.getStringName(96), mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
Menu helpMenu = new Menu(L.str[L.help], mainMenu, MENU_BEGX, MENU_BEGY, MENU_WIDTH, menuNumLines, ONE_LINE_HEIGHT);
|
||||||
MenuItem mapItem = new MenuItem(Constants.getStringName(97), 0) {
|
MenuItem mapItem = new MenuItem(L.str[L.keymap], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
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.addCommand(CompositionForm.ok);
|
||||||
form.setCommandListener(Options.this);
|
form.setCommandListener(Options.this);
|
||||||
MixerCanvas.this.display.setCurrent(form);
|
MixerCanvas.this.display.setCurrent(form);
|
||||||
@ -1428,10 +1422,10 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
helpMenu.addItem(mapItem);
|
helpMenu.addItem(mapItem);
|
||||||
MenuItem quickItem = new MenuItem(Constants.getStringName(98), 0) {
|
MenuItem quickItem = new MenuItem(L.str[L.quickCommands], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
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.addCommand(CompositionForm.ok);
|
||||||
form.setCommandListener(Options.this);
|
form.setCommandListener(Options.this);
|
||||||
MixerCanvas.this.display.setCurrent(form);
|
MixerCanvas.this.display.setCurrent(form);
|
||||||
@ -1440,7 +1434,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
};
|
};
|
||||||
helpMenu.addItem(quickItem);
|
helpMenu.addItem(quickItem);
|
||||||
mainMenu.addItem(helpMenu);
|
mainMenu.addItem(helpMenu);
|
||||||
MenuItem exitItem = new MenuItem(Constants.getStringName(25), 0) {
|
MenuItem exitItem = new MenuItem(L.str[L.back], 0) {
|
||||||
|
|
||||||
public boolean actionPerformed() {
|
public boolean actionPerformed() {
|
||||||
CompositionForm.curForm.setComposForm();
|
CompositionForm.curForm.setComposForm();
|
||||||
@ -1457,7 +1451,7 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
StringItem[] strItem = new StringItem[strings.length / 2];
|
StringItem[] strItem = new StringItem[strings.length / 2];
|
||||||
for (int i = 0; i < strings.length / 2; i++) {
|
for (int i = 0; i < strings.length / 2; i++) {
|
||||||
strItem[i] = new StringItem(strings[i * 2], strings[i * 2 + 1], 1);
|
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;
|
return strItem;
|
||||||
}
|
}
|
||||||
@ -1541,11 +1535,11 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
int dir=0;
|
int dir = 0;
|
||||||
try{
|
try {
|
||||||
dir=getGameAction(keyCode);
|
dir = getGameAction(keyCode);
|
||||||
|
} catch (IllegalArgumentException illegArg) {
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException illegArg){}
|
|
||||||
switch (dir) {
|
switch (dir) {
|
||||||
case Canvas.UP:
|
case Canvas.UP:
|
||||||
menu.up();
|
menu.up();
|
||||||
@ -1631,16 +1625,15 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
protected void paint(Graphics g) {
|
protected void paint(Graphics g) {
|
||||||
g.translate(x, y);
|
g.translate(x, y);
|
||||||
|
|
||||||
g.setColor(96, 64, 128);
|
g.setColor(P.colup);
|
||||||
g.fillRect(0, 1, w, LINE_HEIGHT - 1);
|
g.fillRect(0, 1, w, LINE_HEIGHT - 1);
|
||||||
g.setColor(0);
|
g.setColor(0);
|
||||||
g.drawRect(0, 1, w - 1, LINE_HEIGHT - 1);
|
g.drawRect(0, 1, w - 1, LINE_HEIGHT - 1);
|
||||||
g.setClip(0, 1, w - 1, LINE_HEIGHT - 1);
|
g.setClip(0, 1, w - 1, LINE_HEIGHT - 1);
|
||||||
g.setColor(255, 255, 255);
|
g.setColor(255, 255, 255);
|
||||||
|
|
||||||
g.setFont(Font.getFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM));
|
g.setFont(P.medBold);
|
||||||
g.drawString(this.getName(), (w - 4) / 2, 3,
|
g.drawString(this.getName(), (w - 4) / 2, 3, Graphics.TOP | Graphics.HCENTER);
|
||||||
Graphics.TOP | Graphics.HCENTER);
|
|
||||||
g.setFont(Font.getDefaultFont());
|
g.setFont(Font.getDefaultFont());
|
||||||
|
|
||||||
g.setClip(0, 0, getWidth(), getHeight());
|
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);
|
g.setClip(1, 1, w - 1, hMax - 1);
|
||||||
MenuItem item;
|
MenuItem item;
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < numLinesMaxVisible ; i++) {
|
for (i = 0; i < numLinesMaxVisible; i++) {
|
||||||
|
|
||||||
if (i == curLine) {
|
if (i == curLine) {
|
||||||
g.setColor(160, 160, 224);
|
g.setColor(160, 160, 224);
|
||||||
@ -1719,8 +1712,8 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
|
|
||||||
private void down() {
|
private void down() {
|
||||||
if (lineBase + curLine < items.size() - 1) {
|
if (lineBase + curLine < items.size() - 1) {
|
||||||
if (isScroll && curLine >= numLines - 2 &&
|
if (isScroll && curLine >= numLines - 2
|
||||||
lineBase + numLines < items.size()) {
|
&& lineBase + numLines < items.size()) {
|
||||||
lineBase++;
|
lineBase++;
|
||||||
} else {
|
} else {
|
||||||
curLine++;
|
curLine++;
|
||||||
@ -1748,7 +1741,6 @@ abstract public class MixerCanvas extends Canvas implements Runnable
|
|||||||
|
|
||||||
// public MenuItem() {
|
// public MenuItem() {
|
||||||
// }
|
// }
|
||||||
|
|
||||||
private MenuItem(String str, int key) {
|
private MenuItem(String str, int key) {
|
||||||
name = str;
|
name = str;
|
||||||
keyCode = key;
|
keyCode = key;
|
||||||
|
@ -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.RMSFile;
|
||||||
import midedit.io.JSR75File;
|
import midedit.io.JSR75File;
|
||||||
import midedit.io.AbstractFile;
|
import midedit.io.AbstractFile;
|
||||||
|
import main.Main;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
import main.L;
|
||||||
|
import main.P;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@ -16,11 +19,10 @@ import javax.microedition.lcdui.*;
|
|||||||
public class MixerModel extends Thread {
|
public class MixerModel extends Thread {
|
||||||
|
|
||||||
private MidiFile mfile = null;
|
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) {
|
} 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);
|
display.setCurrent(a);
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -171,8 +173,7 @@ public class MixerModel extends Thread {
|
|||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public String saveMix(Composition c, String name) throws Exception {
|
public String saveMix(Composition c, String name) throws Exception {
|
||||||
return mfile.writeMixWithName(c, 0, false,
|
return mfile.writeMixWithName(c, 0, false, name);
|
||||||
name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -218,13 +219,6 @@ public class MixerModel extends Thread {
|
|||||||
return mfile;
|
return mfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
// /**
|
|
||||||
// *
|
|
||||||
// * @param RMSMode
|
|
||||||
// */
|
|
||||||
// public void setLocalFile(boolean RMSMode) {
|
|
||||||
// isRMSMode = RMSMode;
|
|
||||||
// }
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
@ -237,6 +231,6 @@ public class MixerModel extends Thread {
|
|||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public static AbstractFile getLocalFile() {
|
public static AbstractFile getLocalFile() {
|
||||||
return isRMSMode ? rmsFile : jsr75File;
|
return P.isRMSMode ? rmsFile : jsr75File;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package midedit;
|
package midedit;
|
||||||
|
|
||||||
|
import main.Main;
|
||||||
|
|
||||||
import midedit.media.Composition;
|
import midedit.media.Composition;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
|
||||||
@ -9,16 +8,15 @@ import javax.microedition.lcdui.*;
|
|||||||
*
|
*
|
||||||
* @author user
|
* @author user
|
||||||
*/
|
*/
|
||||||
public class NotesCanvas extends MixerCanvas
|
public class NotesCanvas extends MixerCanvas {
|
||||||
{
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param ctrl
|
* @param ctrl
|
||||||
* @param c
|
* @param c
|
||||||
* @param ch
|
* @param ch
|
||||||
*/
|
*/
|
||||||
public NotesCanvas(MixerMain ctrl, Composition c, int ch)
|
public NotesCanvas(Main ctrl, Composition c, int ch) {
|
||||||
{
|
|
||||||
super(ctrl, c, ch);
|
super(ctrl, c, ch);
|
||||||
hMax = 127;
|
hMax = 127;
|
||||||
hBase = 60;
|
hBase = 60;
|
||||||
@ -29,16 +27,15 @@ public class NotesCanvas extends MixerCanvas
|
|||||||
*
|
*
|
||||||
* @param ch
|
* @param ch
|
||||||
*/
|
*/
|
||||||
public void setChannel(int ch)
|
public void setChannel(int ch) {
|
||||||
{
|
|
||||||
channel = ch;
|
channel = ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public int getChannel()
|
public int getChannel() {
|
||||||
{
|
|
||||||
return channel;
|
return channel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,27 +43,23 @@ public class NotesCanvas extends MixerCanvas
|
|||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected boolean doKEY_NUM5()
|
protected boolean doKEY_NUM5() {
|
||||||
{
|
if (super.doKEY_NUM5() == false) {
|
||||||
if(super.doKEY_NUM5() == false)
|
|
||||||
{
|
|
||||||
int dt;
|
int dt;
|
||||||
dt = super.getCurLen();
|
dt = super.getCurLen();
|
||||||
byte n = (byte)getNoteFromLine(curY);
|
byte n = (byte) getNoteFromLine(curY);
|
||||||
int curT = getCurTime();
|
int curT = getCurTime();
|
||||||
composition.addNoteOn(curT, (byte) channel, n, super.getCurVol(), dt,true);
|
composition.addNoteOn(curT, (byte) channel, n, super.getCurVol(), dt, true);
|
||||||
composition.addNoteOffWithoutSearch(curT + dt, (byte) channel, n, dt);
|
composition.addNoteOffWithoutSearch(curT + dt, (byte) channel, n, dt);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected String getCurTuneString()
|
protected String getCurTuneString() {
|
||||||
{
|
|
||||||
return "none";
|
return "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,42 +70,33 @@ public class NotesCanvas extends MixerCanvas
|
|||||||
* @param shiftTime
|
* @param shiftTime
|
||||||
* @param shiftNote
|
* @param shiftNote
|
||||||
*/
|
*/
|
||||||
protected void paintNote(Graphics g, Note note,int shiftTime,int shiftNote)
|
protected void paintNote(Graphics g, Note note, int shiftTime, int shiftNote) {
|
||||||
{
|
int x, h;
|
||||||
int x,h;
|
int dx, t = 1;
|
||||||
int dx, t=1;
|
x = getXInPixel(note.t + shiftTime);
|
||||||
x = getXInPixel(note.t +shiftTime);
|
h = getLineFromNote(note.n + shiftNote);
|
||||||
h = getLineFromNote(note.n +shiftNote);
|
dx = (note.len * wOne) / Constants.timeConst;
|
||||||
dx = (note.len*wOne)/Constants.timeConst;
|
if (dx == 0) {
|
||||||
if(dx==0)
|
dx = 2;
|
||||||
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
|
if (x + dx >= 0 && x < rollWidth) {
|
||||||
{
|
|
||||||
h = (h<0)? -1 : nH;
|
if (h >= 0 && h < nH) {
|
||||||
g.fillRect(x+t,h*hOne+1,2,hOne-1);
|
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
|
* @param n
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected byte getLineFromNote(int n)
|
protected byte getLineFromNote(int n) {
|
||||||
{
|
return (byte) ((Constants.INV_CANVAS_CONST - n) - hBase);
|
||||||
return (byte)((Constants.INV_CANVAS_CONST - n) - hBase);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,9 +104,7 @@ public class NotesCanvas extends MixerCanvas
|
|||||||
* @param ch
|
* @param ch
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
protected int getNoteFromLine(int ch)
|
protected int getNoteFromLine(int ch) {
|
||||||
{
|
return (byte) getCurNote();
|
||||||
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 javax.microedition.lcdui.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.microedition.lcdui.List;
|
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 MixerModel model;
|
||||||
private Displayable backForm;
|
private Displayable backForm;
|
||||||
private Vector tempNotes;
|
private Vector tempNotes;
|
||||||
static private Command instempo = new Command(Constants.getStringName(67),Command.ITEM, 1);
|
static private Command instempo = new Command(L.str[L.insertTempo],Command.ITEM, 1);
|
||||||
static private Command deltempo = new Command(Constants.getStringName(68),Command.ITEM, 1);
|
static private Command deltempo = new Command(L.str[L.deleteTempo],Command.ITEM, 1);
|
||||||
private int tick = 0;
|
private int tick = 0;
|
||||||
private int meterNom=4,meterDenom=4;
|
private int meterNom=4,meterDenom=4;
|
||||||
private int editNum = -1;
|
private int editNum = -1;
|
||||||
@ -32,7 +34,7 @@ public class TempoList extends List implements CommandListener
|
|||||||
*/
|
*/
|
||||||
public TempoList(Composition c,MixerModel m,Displayable back)
|
public TempoList(Composition c,MixerModel m,Displayable back)
|
||||||
{
|
{
|
||||||
super(Constants.getStringName(69),IMPLICIT);
|
super(L.str[L.tempo],IMPLICIT);
|
||||||
composition = c;
|
composition = c;
|
||||||
model = m;
|
model = m;
|
||||||
backForm = back;
|
backForm = back;
|
||||||
@ -78,13 +80,13 @@ public class TempoList extends List implements CommandListener
|
|||||||
}
|
}
|
||||||
private void viewInsertForm(int time,int tempo)
|
private void viewInsertForm(int time,int tempo)
|
||||||
{
|
{
|
||||||
Form textBoxTemp = new Form(Constants.getStringName(67));
|
Form textBoxTemp = new Form(L.str[L.insertTempo]);
|
||||||
final TextField timeField = new TextField(Constants.getStringName(70), ""+time, 4, TextField.NUMERIC);
|
final TextField timeField = new TextField(L.str[L.time], ""+time, 4, TextField.NUMERIC);
|
||||||
textBoxTemp.append(timeField);
|
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.append(tempoField);
|
||||||
textBoxTemp.addCommand(CompositionForm.ok);
|
textBoxTemp.addCommand(CompositionForm.ok);
|
||||||
textBoxTemp.addCommand(Settings.comCancel);
|
textBoxTemp.addCommand(P.comCancel);
|
||||||
textBoxTemp.setCommandListener(new CommandListener()
|
textBoxTemp.setCommandListener(new CommandListener()
|
||||||
{
|
{
|
||||||
public void commandAction(Command command, Displayable displayable)
|
public void commandAction(Command command, Displayable displayable)
|
||||||
|
@ -4,6 +4,8 @@ package midedit;
|
|||||||
import midedit.media.Composition;
|
import midedit.media.Composition;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.microedition.lcdui.*;
|
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.play);
|
||||||
this.addCommand(CompositionForm.playOrig);
|
this.addCommand(CompositionForm.playOrig);
|
||||||
this.addCommand(CompositionForm.ok);
|
this.addCommand(CompositionForm.ok);
|
||||||
this.addCommand(Settings.comCancel);
|
this.addCommand(P.comCancel);
|
||||||
this.setCommandListener(this);
|
this.setCommandListener(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,10 +75,10 @@ public class VolumeForm extends Form implements CommandListener {
|
|||||||
public void commandAction(Command command, Displayable displayable) {
|
public void commandAction(Command command, Displayable displayable) {
|
||||||
if (command == CompositionForm.ok) {
|
if (command == CompositionForm.ok) {
|
||||||
setVolumeFromGaugesSolo();
|
setVolumeFromGaugesSolo();
|
||||||
MixerMain.display.setCurrent(backForm);
|
Main.dsp.setCurrent(backForm);
|
||||||
} else if (command == Settings.comCancel) {
|
} else if (command == P.comCancel) {
|
||||||
restoreVolumesArr();
|
restoreVolumesArr();
|
||||||
MixerMain.display.setCurrent(backForm);
|
Main.dsp.setCurrent(backForm);
|
||||||
} else if (command == CompositionForm.play) {
|
} else if (command == CompositionForm.play) {
|
||||||
setVolumeFromGaugesSolo();
|
setVolumeFromGaugesSolo();
|
||||||
try {
|
try {
|
||||||
|
@ -5,6 +5,7 @@ package midedit;
|
|||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
import javax.microedition.lcdui.Command;
|
import javax.microedition.lcdui.Command;
|
||||||
import javax.microedition.lcdui.Displayable;
|
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);
|
memoryBar = new Gauge("Memory",false,100,(total-(int)r.freeMemory())*100/total);
|
||||||
append(percentBar);
|
append(percentBar);
|
||||||
append(memoryBar);
|
append(memoryBar);
|
||||||
this.addCommand(Settings.comCancel);
|
this.addCommand(P.comCancel);
|
||||||
this.setCommandListener(this);
|
this.setCommandListener(this);
|
||||||
}
|
}
|
||||||
private void setPercent(int percent)
|
private void setPercent(int percent)
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package midedit.io;
|
package midedit.io;
|
||||||
|
|
||||||
import midedit.*;
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import javax.microedition.io.*;
|
import javax.microedition.io.*;
|
||||||
import javax.microedition.io.file.*;
|
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 {
|
public int open(String fileName, boolean isSaveMode) throws IOException {
|
||||||
String fullName;
|
String fullName;
|
||||||
|
System.out.println("JSR75File.java : 169 "+fileName);
|
||||||
if (fileName.charAt(0) != '/') {
|
if (fileName.charAt(0) != '/') {
|
||||||
try {
|
try {
|
||||||
Enumeration e = FileSystemRegistry.listRoots();
|
Enumeration e = FileSystemRegistry.listRoots();
|
||||||
if (e.hasMoreElements()) {
|
if (e.hasMoreElements()) {
|
||||||
FileConnection fcTmp = (FileConnection) Connector.open(getPrefix() + Settings.tempDir);
|
FileConnection fcTmp = (FileConnection) Connector.open(getPrefix() + Rms.tempDir);
|
||||||
if (!fcTmp.exists()) {
|
if (!fcTmp.exists()) {
|
||||||
fcTmp.mkdir();
|
fcTmp.mkdir();
|
||||||
}
|
}
|
||||||
@ -178,7 +179,7 @@ public class JSR75File extends AbstractFile {
|
|||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new IOException("Can't create tmp directory");
|
throw new IOException("Can't create tmp directory");
|
||||||
}
|
}
|
||||||
fullName = getPrefix() + "/" + Settings.tempDir + fileName;
|
fullName = getPrefix() + "/" + Rms.tempDir + fileName;
|
||||||
} else {
|
} else {
|
||||||
fullName = getPrefix() + fileName;
|
fullName = getPrefix() + fileName;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package midedit.media;
|
package midedit.media;
|
||||||
|
|
||||||
import midedit.*;
|
import midedit.CompositionForm;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
package midedit.media;
|
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;
|
package midedit.media;
|
||||||
|
|
||||||
import midedit.*;
|
import midedit.MixerModel;
|
||||||
import javax.microedition.media.*;
|
import javax.microedition.media.*;
|
||||||
import java.io.*;
|
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 java.util.*;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
import midedit.CompositionForm;
|
import midedit.CompositionForm;
|
||||||
import midedit.MixerMain;
|
|
||||||
import midedit.io.AbstractFile;
|
import midedit.io.AbstractFile;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -164,8 +170,8 @@ public class FileManager extends Canvas {
|
|||||||
if (showMenu) {
|
if (showMenu) {
|
||||||
drawMenu(g);
|
drawMenu(g);
|
||||||
}
|
}
|
||||||
UI.drawTitle(g, pathFile);
|
UI.drawTitle(g, P.isRMSMode ? L.str[L.RMS]: pathFile);
|
||||||
UI.drawSoftBar(g,L.str[L.menu],L.str[L.back]);
|
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++) {
|
for (int i = 0; i < menu.length; i++) {
|
||||||
// Äëÿ êóðñîðà èñïîëüçóþòñÿ äðóãèå öâåòà
|
// Äëÿ êóðñîðà èñïîëüçóþòñÿ äðóãèå öâåòà
|
||||||
if (i == curMenu) {
|
if (i == curMenu) {
|
||||||
colorBack = P.fmbord;
|
colorBack = P.obv;
|
||||||
colorObv = P.fmcurbord;
|
colorObv = P.fmbord;
|
||||||
colorText = P.fmtextuppan;
|
colorText = P.fmtextnc;
|
||||||
} else {
|
} else {
|
||||||
colorBack = P.fmback1;
|
colorBack = P.fmback1;
|
||||||
colorObv = P.obv;
|
colorObv = P.obv;
|
||||||
colorText = P.fmcurbord;
|
colorText = P.fmbord;
|
||||||
}
|
}
|
||||||
int hh = menuY + i * (FONT_HEIGHT - 1);
|
int hh = menuY + i * (FONT_HEIGHT - 1);
|
||||||
g.setColor(colorBack);
|
g.setColor(colorBack);
|
||||||
@ -268,6 +274,20 @@ public class FileManager extends Canvas {
|
|||||||
}
|
}
|
||||||
else if (cur.equals(L.str[L.saveInThisFolder])) {
|
else if (cur.equals(L.str[L.saveInThisFolder])) {
|
||||||
P.path = pathFile;
|
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])) {
|
/*else if (cur.equals(L.str[L.newFolder])) {
|
||||||
// Íîâàÿ ïàïêà
|
// Íîâàÿ ïàïêà
|
||||||
@ -329,7 +349,7 @@ public class FileManager extends Canvas {
|
|||||||
System.gc();
|
System.gc();
|
||||||
//
|
//
|
||||||
String openSaveString = pathFile + s;
|
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);
|
Main.dsp.setCurrent(Main.midlet.compositionForm);
|
||||||
new Thread(Main.midlet.compositionForm).start();
|
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 java.io.IOException;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
import midedit.CompositionForm;
|
||||||
import midedit.MixerModel;
|
import midedit.MixerModel;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,12 +61,10 @@ public class Menu extends Canvas {
|
|||||||
// Äîáàâëÿåì ïóíêòû
|
// Äîáàâëÿåì ïóíêòû
|
||||||
menu = new String[] {
|
menu = new String[] {
|
||||||
L.str[L.create],
|
L.str[L.create],
|
||||||
L.str[L.resume],
|
|
||||||
L.str[L.open],
|
L.str[L.open],
|
||||||
L.str[L.save],
|
(P.isRMSMode ? L.str[L.RMS] : L.str[L.file]),
|
||||||
L.str[L.saveAs],
|
|
||||||
L.str[L.file],
|
|
||||||
L.str[L.options],
|
L.str[L.options],
|
||||||
|
L.str[L.help],
|
||||||
L.str[L.about],
|
L.str[L.about],
|
||||||
L.str[L.exit]
|
L.str[L.exit]
|
||||||
};
|
};
|
||||||
@ -68,6 +73,22 @@ public class Menu extends Canvas {
|
|||||||
CursorY = FileY = startPrintFile = 0;
|
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) {
|
protected void sizeChanged(int w, int h) {
|
||||||
this.w = getWidth();
|
this.w = getWidth();
|
||||||
this.h = getHeight();
|
this.h = getHeight();
|
||||||
@ -99,7 +120,7 @@ public class Menu extends Canvas {
|
|||||||
g.setColor(P.fmtextnc);
|
g.setColor(P.fmtextnc);
|
||||||
final String s = menu[i];
|
final String s = menu[i];
|
||||||
if (FileY == CursorY) {
|
if (FileY == CursorY) {
|
||||||
g.setColor(P.fmshadow);
|
g.setColor(P.fmbord);
|
||||||
g.drawString(s, iconsSize + 4, FileY + iconsSize / 4, Graphics.TOP | Graphics.LEFT);
|
g.drawString(s, iconsSize + 4, FileY + iconsSize / 4, Graphics.TOP | Graphics.LEFT);
|
||||||
g.setColor(P.fmtextcur);
|
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.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.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.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;
|
else if(s.equals(L.str[L.exit])) id = EXIT;
|
||||||
|
|
||||||
g.drawImage(icons[id], iconsSize + 2, FileY + 1, 24);
|
g.drawImage(icons[id], iconsSize + 2, FileY + 1, 24);
|
||||||
@ -135,16 +156,76 @@ public class Menu extends Canvas {
|
|||||||
*/
|
*/
|
||||||
private void selectItem(int selected) {
|
private void selectItem(int selected) {
|
||||||
String v = menu[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()));
|
if(v.equals(L.str[L.create])) {
|
||||||
/*else if(v.equals(L.str[L.save])) {
|
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])) {
|
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]);
|
tv.openFile("/lang/help", this, L.str[L.help]);
|
||||||
Main.dsp.setCurrent(tv);
|
Main.dsp.setCurrent(tv);*/
|
||||||
}*/
|
}
|
||||||
else if(v.equals(L.str[L.about])) Main.dsp.setCurrent(new About(this));
|
// Î ïðîãðàììå
|
||||||
|
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);
|
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) {
|
protected void pointerPressed(int pix, int piy) {
|
||||||
int q = UI.getSoftBarHeight();
|
int q = UI.getSoftBarHeight();
|
||||||
if(pix<2*q && piy>h-q) selectItem(cu);
|
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/
|
* For more info visit http://annimon.com/
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -10,16 +10,23 @@
|
|||||||
* www.mobilab.ru
|
* 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.io.DataInputStream;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
|
||||||
public class About extends Canvas {
|
public class TextView extends Canvas {
|
||||||
|
|
||||||
private Font defaultFont;
|
private Font defaultFont;
|
||||||
private Displayable dspl;
|
private Displayable dspl;
|
||||||
private int fontHeight, defaultFontHeight;
|
private int fontHeight, defaultFontHeight;
|
||||||
private String text; //òåêñò
|
private String text; //òåêñò
|
||||||
|
private String title; //çàãîëîâîê
|
||||||
|
|
||||||
private int w, h; //ðàçìåðû
|
private int w, h; //ðàçìåðû
|
||||||
|
|
||||||
@ -29,16 +36,45 @@ public class About extends Canvas {
|
|||||||
private int allTextHeight; //Îáùàÿ âûñîòà òåêñòà
|
private int allTextHeight; //Îáùàÿ âûñîòà òåêñòà
|
||||||
private Vector strLines;
|
private Vector strLines;
|
||||||
|
|
||||||
public About(Displayable dspl) {
|
/**
|
||||||
|
* Êîíñòðóêòîð ïî óìîë÷àíèþ
|
||||||
|
* Èíèöèàëèçèðóåò íà÷àëüíûå äàííûå
|
||||||
|
*/
|
||||||
|
private TextView() {
|
||||||
setFullScreenMode(true);
|
setFullScreenMode(true);
|
||||||
this.dspl = dspl;
|
|
||||||
w = getWidth();
|
w = getWidth();
|
||||||
h = getHeight();
|
h = getHeight();
|
||||||
text = getText("/lang/about_"+Rms.languageApp);
|
|
||||||
fontHeight = UI.getSoftBarHeight()+2;
|
fontHeight = UI.getSoftBarHeight()+2;
|
||||||
defaultFont = Font.getDefaultFont();
|
defaultFont = Font.getDefaultFont();
|
||||||
scrollStep = defaultFontHeight = defaultFont.getHeight()+2;
|
scrollStep = defaultFontHeight = defaultFont.getHeight()+2;
|
||||||
workingHeight = h - fontHeight*2 - 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();
|
setParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,7 +89,7 @@ public class About extends Canvas {
|
|||||||
protected void paint(Graphics g) {
|
protected void paint(Graphics g) {
|
||||||
g.setColor(P.backgrnd);
|
g.setColor(P.backgrnd);
|
||||||
g.fillRect(0, 0, w, h);
|
g.fillRect(0, 0, w, h);
|
||||||
UI.drawTitle(g, L.str[L.about]);
|
UI.drawTitle(g, title);
|
||||||
g.setColor(P.fmtextnc);
|
g.setColor(P.fmtextnc);
|
||||||
g.setFont(defaultFont);
|
g.setFont(defaultFont);
|
||||||
g.setClip(0, fontHeight+1, w, workingHeight);
|
g.setClip(0, fontHeight+1, w, workingHeight);
|
@ -1,3 +1,6 @@
|
|||||||
|
package ui;
|
||||||
|
|
||||||
|
import main.P;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import javax.microedition.lcdui.*;
|
import javax.microedition.lcdui.*;
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package midedit;
|
package util;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
@ -1,3 +1,5 @@
|
|||||||
|
package util;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
import javax.microedition.lcdui.Font;
|
import javax.microedition.lcdui.Font;
|
@ -1,3 +1,5 @@
|
|||||||
|
package util;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class StringEncoder {
|
public class StringEncoder {
|