2020-11-13 1:29 AM
Hi, I've created a custom keyboard and so far all works good. I've just a problem: I want to use an OK button on the keyboard to copy the text edited to a text area in an other screen. I'm able to go to the other screen but when i do the second part of my goal, I've got errors. I think the problem is in the function getBuffer.
-This is the part in customkeyboard.cpp
void CustomKeyboard::okPressedHandler()
{
getBuffer(); // function to save the actual entered text
application().gotoScreen01ScreenNoTransition(); // if i use only this line the code work to change screeen
}
-Part in customkeyboard.hpp
virtual void getBuffer()
{
// implemented in screen02_00View.cpp
}
-Part in the screen where the keyboard is defined
extern Unicode::UnicodeChar keyboardBuffer[10];
void Screen02_00View::getBuffer() // added to manage the entered text from temperature keyboard
{
Unicode::UnicodeChar* buff = keyboard.getBuffer();
Unicode::strncpy(keyboardBuffer, buff, Unicode::strlen(buff) + 1);
}
-Part in screen.hpp
virtual void getBuffer(); //added to manage the keyboard entered text
-Part in the screen where I want to go when i pressed ok button and where i want to save the text edited
Unicode::UnicodeChar keyboardBuffer[10]; // at the beginning of the code
void Screen01View::updateScreen() // I've defined updateScreen from touchGFX
{
if(Unicode::strlen(keyboardBuffer) > 0)
{
memset(&BakeText3Buffer, 0, BAKETEXT3_SIZE);
Unicode::strncpy(BakeText3Buffer, keyboardBuffer, BAKETEXT3_SIZE - 1);
BakeText3Buffer[BAKETEXT3_SIZE-1] = '\0'; // make sure last index is null
BakeText3.invalidate();
}
}
Part in the screen01.hpp
virtual void updateScreen();
Could you please help me?
Thank you
This is my keyboard:
Solved! Go to Solution.
2020-11-16 9:05 PM
As the error mentions, CustomKeyboard::getBuffer() is undefined. It is because CustomKeyboard does not have the getBuffer() function. It's the Keyboard class that has it, not CustomKeyboard ;) CustomKeyboard does not inherit from the Keyboard class but only has a Keyboard object as an attribute.
So you need to define a getBuffer() function in your CustomKeyboard class to be able to call it from your ScreenView.
Something like :
Unicode::UnicodeChar* CustomKeyboard::getBuffer()
{
return keyboard.getBuffer();
}Don't forget to declare it in the .hpp file as well.
The fact that both your CustomKeyboard and Keyboard variable have the same name is misleading. I suggest you to change your CustomKeyboard variable name to customKeyboard to avoid mixing them.
When your question is answered, please close this topic by choosing Select as Best.
/Alexandre
2020-11-13 9:39 AM
I see more as one bad idea in your code.
Unicode::UnicodeChar* buff = keyboard.getBuffer(); this try return pointer from void function and too empty function ???
void CustomKeyboard::okPressedHandler()
{
getBuffer(); this call member empty not screen func
2020-11-16 12:00 AM
Hello GCamb2,
Could you provide the errors you got ? This would be helpful to assess the issue.
In the future, I believe it is good practice to include the errors to your post in order for the community to be able to support you the best we can.
/Alexandre
2020-11-16 12:04 AM
Yes sure, these are the first time I use the community so any advice can be useful.
The error is the following:
TouchGFX/build/STM32F746-DISCO/TouchGFX/gui/src/screen02_00_screen/Screen02_00View.o: In function `Screen02_00View::getBuffer()':
/TouchGFX/gui/src/screen02_00_screen/Screen02_00View.cpp:28: undefined reference to `CustomKeyboard::getBuffer()'
collect2.exe: error: ld returned 1 exit status
make[2]: *** [TouchGFX/build/bin/target.elf] Error 1
gcc/Makefile:289: recipe for target 'TouchGFX/build/bin/target.elf' failed
gcc/Makefile:285: recipe for target 'generate_assets' failed
make[1]: *** [generate_assets] Error 2
../gcc/Makefile:47: recipe for target 'all' failed
make: *** [all] Error 2
Failed
Failed
Thanks
2020-11-16 9:05 PM
As the error mentions, CustomKeyboard::getBuffer() is undefined. It is because CustomKeyboard does not have the getBuffer() function. It's the Keyboard class that has it, not CustomKeyboard ;) CustomKeyboard does not inherit from the Keyboard class but only has a Keyboard object as an attribute.
So you need to define a getBuffer() function in your CustomKeyboard class to be able to call it from your ScreenView.
Something like :
Unicode::UnicodeChar* CustomKeyboard::getBuffer()
{
return keyboard.getBuffer();
}Don't forget to declare it in the .hpp file as well.
The fact that both your CustomKeyboard and Keyboard variable have the same name is misleading. I suggest you to change your CustomKeyboard variable name to customKeyboard to avoid mixing them.
When your question is answered, please close this topic by choosing Select as Best.
/Alexandre
2020-11-17 12:47 AM
Or maybe you can on invoke keyboard assign directly BakeText3Buffer to keyboard. Then only need in ok click use if empty and invalíidate text...
Noone of getBuffer chaos.
We’re moving the ST Community to a new platform to give you a better and more reliable community experience.