1313#include " ui/textedit.h"
1414#include " platform/sdl/runtime.h"
1515#include " platform/sdl/settings.h"
16+ #include " platform/sdl/syswm.h"
1617
1718using namespace strlib ;
1819
@@ -120,11 +121,11 @@ void onlineHelp(Runtime *runtime, TextEditInput *widget) {
120121}
121122
122123void showHelpPopup (TextEditHelpWidget *helpWidget) {
123- helpWidget->showPopup (-20 , -8 );
124+ helpWidget->showPopup (-12 , -4 );
124125}
125126
126- void showHelpLineInput (TextEditHelpWidget *helpWidget) {
127- helpWidget->showPopup (40 , 1 );
127+ void showHelpLineInput (TextEditHelpWidget *helpWidget, int width = 35 ) {
128+ helpWidget->showPopup (width , 1 );
128129}
129130
130131void showHelpSideabar (TextEditHelpWidget *helpWidget) {
@@ -319,7 +320,10 @@ void System::editSource(String loadPath, bool restoreOnExit) {
319320 onlineHelp ((Runtime *)this , editWidget);
320321 break ;
321322 case SB_KEY_F (4 ):
322- if (editWidget->getTextLength () && !g_exportAddr.empty () && !g_exportToken.empty ()) {
323+ if (editWidget->getTextLength () && !g_exportAddr.empty () && g_exportAddr.indexOf (" sbasic" , 0 ) != -1 ) {
324+ launch (g_exportAddr, loadPath);
325+ break ;
326+ } else if (editWidget->getTextLength () && !g_exportAddr.empty () && !g_exportToken.empty ()) {
323327 exportBuffer (_output, editWidget->getText (), g_exportAddr, g_exportToken);
324328 break ;
325329 }
@@ -331,7 +335,7 @@ void System::editSource(String loadPath, bool restoreOnExit) {
331335 _output->setStatus (" Export to SmallBASIC. Enter <IP>:<Port> | <sbasic command>" );
332336 widget = helpWidget;
333337 helpWidget->createLineEdit (g_exportAddr);
334- showHelpLineInput (helpWidget);
338+ showHelpLineInput (helpWidget, 60 );
335339 inputMode = kExportAddr ;
336340 }
337341 break ;
@@ -395,7 +399,7 @@ void System::editSource(String loadPath, bool restoreOnExit) {
395399 _output->setStatus (" Goto line. Esc=Close" );
396400 widget = helpWidget;
397401 helpWidget->createGotoLine ();
398- showHelpLineInput (helpWidget);
402+ showHelpLineInput (helpWidget, 5 );
399403 break ;
400404 case SB_KEY_CTRL (' ' ):
401405 _output->setStatus (" Auto-complete. Esc=Close" );
@@ -488,9 +492,16 @@ void System::editSource(String loadPath, bool restoreOnExit) {
488492 switch (inputMode) {
489493 case kExportAddr :
490494 g_exportAddr = helpWidget->getText ();
491- inputMode = kExportToken ;
492- helpWidget->createLineEdit (g_exportToken);
493- _output->setStatus (" Enter token. Esc=Close" );
495+ if (g_exportAddr.indexOf (" sbasic" , 0 ) == -1 ) {
496+ inputMode = kExportToken ;
497+ helpWidget->createLineEdit (g_exportToken);
498+ _output->setStatus (" Enter token. Esc=Close" );
499+ } else {
500+ inputMode = kInit ;
501+ widget = editWidget;
502+ helpWidget->hide ();
503+ launch (g_exportAddr, loadPath);
504+ }
494505 break ;
495506 case kExportToken :
496507 g_exportToken = helpWidget->getText ();
@@ -501,6 +512,7 @@ void System::editSource(String loadPath, bool restoreOnExit) {
501512 break ;
502513 case kCommand :
503514 strlcpy (opt_command, helpWidget->getText (), sizeof (opt_command));
515+ statusMessage._dirty = !editWidget->isDirty ();
504516 inputMode = kInit ;
505517 widget = editWidget;
506518 helpWidget->hide ();
@@ -509,11 +521,11 @@ void System::editSource(String loadPath, bool restoreOnExit) {
509521 break ;
510522 }
511523 } else if (helpWidget->closeOnEnter () && helpWidget->isVisible ()) {
524+ statusMessage._dirty = !editWidget->isDirty ();
512525 widget = editWidget;
513526 helpWidget->hide ();
514527 helpWidget->cancelMode ();
515528 }
516- statusMessage._dirty = !editWidget->isDirty ();
517529 redraw = true ;
518530 } else if (helpWidget->replaceDoneMode ()) {
519531 statusMessage._dirty = !editWidget->isDirty ();
0 commit comments