IME (Text Input) System - first version (ime_base.mo ime_rot.mo ime_std.mo)

Started by g3gg0, July 04, 2013, 01:52:41 AM

Previous topic - Next topic

0 Members and 2 Guests are viewing this topic.

g3gg0

with my last commit, i fixed the IME system to interwork cleanly with menu etc.
(see https://bitbucket.org/hudson/magic-lantern/commits/7225666a08fe3bcb39f1bc5e23d71b31736111e8 )




the function to be called is:

extern void *ime_base_start (char *caption, char *text, int max_length, int codepage, int charset, t_ime_update_cbr update_cbr, t_ime_done_cbr done_cbr, int x, int y, int w, int h );


if a module wants to have a text enterd by the user, it can now call the ime code like that:


static char text_buffer[100];

IME_UPDATE_FUNC(ime_base_test_update)
{
    //bmp_printf(FONT_MED, 30, 90, "ime_base: CBR: <%s>, %d, %d", text, caret_pos, selection_length);
    return IME_OK;
}

IME_DONE_FUNC(ime_base_test_done)
{
    for(int loops = 0; loops < 50; loops++)
    {
        bmp_printf(FONT_MED, 30, 120, "ime_base: done: <%s>, %d", text, status);
        msleep(100);
    }
    return IME_OK;
}

static MENU_SELECT_FUNC(ime_base_test)
{
    strcpy(text_buffer, "test");
   
    ime_base_start("Enter something:", text_buffer, sizeof(text_buffer), IME_UTF8, IME_CHARSET_ANY, &ime_base_test_update, &ime_base_test_done, 0, 0, 0, 0);
}


the whole thing is running asynchronously. this means you call ime_base_start and that function immediately returns.
it captures all key events and prevents the ML menu to paint.
instead it is showing you a dialog to enter your text.

the specified update CBR (CallBackRoutine) is called periodically with the current string. it should return IME_OK if the string is acceptable.
(as soon its implemented fully, you can check if it is an valid string, e.g. an email address etc and return a value != IME_OK to grey out the OK button)

when the user selects OK or Cancel, the done CBR is called with the string and the status IME_OK or IME_CANCEL.

the x, y, w, h parameters are planned to specify the location where the caller code prints the text that is passed via update_cbr.
this way the caller code can care for displaying the text somewhere and the IME just cares for the character selection.
but it is not implemented yet.


the code is still very fragile ;)
i planned to support different charsets, but not sure yet how to implement, or if it is necessary at all.
also the way the characters are displayed and the menu is drawn isnt final yet.
i think i should use canon fonts as they look better.
also the "DEL" function cuts the string at the deleted character. that can be fixed easily by using strncpy.

please test that code and improve it where it needs improvement.

Update (17.08.14)
ime_base
ime_rot
ime_std

you can place both ime_std and ime_rot in your module dir, or one of them - which ever you prefer.
ime_base is always needed for both

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

gerk.raisen

Nice,

Well done g3gg0  :)


I already have an idea for when will have some sort of scripting module... :P
It would be nice to have the possibility to edit and change some script value directly on-camera from the file_viewer module.

vroem

This is really cool g3gg0!

You gave me this idea to speed up typing:
Good old multi-tap from the mobile phone days... ?  ::)

But that would be 60D / 6D only because of the 8-way dial...

vroem


g3gg0

Very good ideas.
I have another one. Its based on the audi navigation input system.

Will post a photo when i am at home
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

g3gg0

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

driftwood

Canon 60D, Canon 5DMK3, Lexar 1000x 128GB CF, Panasonic (shhhh!) GH2s & GH3s. :-)

dhilung

5D2 | 40D

ilguercio

Ok, i am a bit clueless about possible usages of this implementation.
Suggestions? :D
Nice job, g3gg0, and i like all your ideas about making it work.
Canon EOS 6D, 60D, 50D.
Sigma 70-200 EX OS HSM, Sigma 70-200 Apo EX HSM, Samyang 14 2.8, Samyang 35 1.4, Samyang 85 1.4.
Proud supporter of Magic Lantern.

1%

One usage off the top of my head: rename files in file manager.

g3gg0

use cases:
- file manager file and folder renaming
- enter direct numbers in menu instead of scrolling (e.g. timelapse, number of frames, fps, ...)
- customize e.g. canon file prefixes MOV_, IMG_, etc
- editing files
- for modules that add "shooting session" infos to a group of files (like "wedding sandra, church" and "wedding sandra, party" or "shoot #2 Customer #53")
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

g3gg0

Quote from: gerk.raisen on July 04, 2013, 03:21:28 PM
It would be nice to have the possibility to edit and change some script value directly on-camera from the file_viewer module.

that can be done with a text editor module.
it can integrate into file_man by registering as file handler.

so it should be possible without touching any of the existing modules. :)
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

gerk.raisen

If I remember correctly CHDK already have something maybe it can't be too difficult to port it :)

g3gg0

porting is harder than implementing on your own as we do not use the same or similar APIs.
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

g3gg0

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

noisyboy

Ooo! Maybe that will help when I (eventually) find someone nice enough to help me with my feature idea ;)

http://www.magiclantern.fm/forum/index.php?topic=5410.msg34883#msg34883

Niiiice  8)

g3gg0

yep that input system is made for such things.
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

Greg


g3gg0

does it work well on 500D?
can you navigate both in the text box where your entered text is and in the character selection box?
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

tin2tin

Maybe a prefix for filenames or embedded reelnameprefix in mov files?

g3gg0

already said that this is an use case ;)

Quote from: g3gg0 on July 05, 2013, 11:14:31 AM
use cases:
- file manager file and folder renaming
- enter direct numbers in menu instead of scrolling (e.g. timelapse, number of frames, fps, ...)
- customize e.g. canon file prefixes MOV_, IMG_, etc
- editing files
- for modules that add "shooting session" infos to a group of files (like "wedding sandra, church" and "wedding sandra, party" or "shoot #2 Customer #53")

can be done with this code in the done cbr:

    char buf[8];
    memset(buf, 0x00, sizeof(buf));
    strncpy(buf, text, sizeof(buf));
    prop_request_change(PROP_FILE_PREFIX, buf, 8);
Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

tin2tin

As we say in danish: the first place you'll go blind is the eyes   8)

What about prefix in embedded reel names?

g3gg0

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

g3gg0

Help us with datasheets - Help us with register dumps
magic lantern: 1Magic9991E1eWbGvrsx186GovYCXFbppY, server expenses: [email protected]
ONLY donate for things we have done, not for things you expect!

dariSSight

Quote from: g3gg0 on July 07, 2013, 02:55:12 PM
first prototype:



When do you think we will be able to test out your IME (TEXT INPUT), will it be a module or incorporated in a new build?
Canon 5D Mark II