From df4cb110b5f3ccc7831ea36fafcff51f47a43053 Mon Sep 17 00:00:00 2001 From: krzys-h Date: Fri, 17 Apr 2015 22:39:57 +0200 Subject: [PATCH] Made example programs not directly runnable (#450) --- po/colobot.pot | 3 +++ po/de.po | 3 +++ po/fr.po | 3 +++ po/pl.po | 3 +++ po/ru.po | 3 +++ src/common/restext.cpp | 1 + src/common/restext.h | 1 + src/object/brain.cpp | 16 ++++++++++++---- src/object/brain.h | 1 + src/object/robotmain.cpp | 2 ++ src/ui/studio.cpp | 16 ++++++++++++++-- 11 files changed, 46 insertions(+), 6 deletions(-) diff --git a/po/colobot.pot b/po/colobot.pot index a1893f35..abf3f338 100644 --- a/po/colobot.pot +++ b/po/colobot.pot @@ -186,6 +186,9 @@ msgstr "" msgid "This program is read-only, clone it to edit" msgstr "" +msgid "This is example code that cannot be run directly" +msgstr "" + msgid "\\b;List of objects\n" msgstr "" diff --git a/po/de.po b/po/de.po index 440f94a4..3d34c658 100644 --- a/po/de.po +++ b/po/de.po @@ -1486,6 +1486,9 @@ msgstr "Diese Klasse gibt es schon" msgid "This class does not exist" msgstr "Diese Klasse existiert nicht" +msgid "This is example code that cannot be run directly" +msgstr "" + msgid "This is not a member of this class" msgstr "Dieses Element gibt es nicht in dieser Klasse" diff --git a/po/fr.po b/po/fr.po index 59f72a96..9f1d58a8 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1481,6 +1481,9 @@ msgstr "Cette classe existe déjà" msgid "This class does not exist" msgstr "Cette classe n'existe pas" +msgid "This is example code that cannot be run directly" +msgstr "" + msgid "This is not a member of this class" msgstr "Cet élément n'existe pas dans cette classe" diff --git a/po/pl.po b/po/pl.po index 1b8cb52f..7b9108bb 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1484,6 +1484,9 @@ msgstr "Taka klasa już istnieje" msgid "This class does not exist" msgstr "Taka klasa nie istnieje" +msgid "This is example code that cannot be run directly" +msgstr "To jest przykładowy kod którego nie można uruchomić bezpośrednio" + msgid "This is not a member of this class" msgstr "To nie jest obiekt tej klasy" diff --git a/po/ru.po b/po/ru.po index 6748f4a9..d69d408a 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1482,6 +1482,9 @@ msgstr "Этот класс уже существует" msgid "This class does not exist" msgstr "Этот класс не существует" +msgid "This is example code that cannot be run directly" +msgstr "" + msgid "This is not a member of this class" msgstr "Это не член этого класса" diff --git a/src/common/restext.cpp b/src/common/restext.cpp index ebdc3598..952076f6 100644 --- a/src/common/restext.cpp +++ b/src/common/restext.cpp @@ -122,6 +122,7 @@ void InitializeRestext() stringsText[RT_STUDIO_CLONED] = TR("Program cloned"); stringsText[RT_PROGRAM_READONLY] = TR("This program is read-only, clone it to edit"); + stringsText[RT_PROGRAM_EXAMPLE] = TR("This is example code that cannot be run directly"); stringsText[RT_SATCOM_LIST] = TR("\\b;List of objects\n"); stringsText[RT_SATCOM_BOT] = TR("\\b;Robots\n"); diff --git a/src/common/restext.h b/src/common/restext.h index 6fb9a015..9b3641ee 100644 --- a/src/common/restext.h +++ b/src/common/restext.h @@ -118,6 +118,7 @@ enum ResTextType RT_STUDIO_CLONED = 123, RT_PROGRAM_READONLY = 130, + RT_PROGRAM_EXAMPLE = 131, RT_SATCOM_LIST = 140, RT_SATCOM_BOT = 141, diff --git a/src/object/brain.cpp b/src/object/brain.cpp index 5b42e34f..55303d0a 100644 --- a/src/object/brain.cpp +++ b/src/object/brain.cpp @@ -2311,7 +2311,7 @@ void CBrain::UpdateInterface() EnableInterface(pw, EVENT_OBJECT_PROGLIST, bEnable && !m_bTraceRecord); EnableInterface(pw, EVENT_OBJECT_PROGADD, m_currentProgram == nullptr); EnableInterface(pw, EVENT_OBJECT_PROGREMOVE, m_currentProgram == nullptr && m_selScript < m_program.size() && !m_program[m_selScript]->readOnly); - EnableInterface(pw, EVENT_OBJECT_PROGCLONE, m_currentProgram == nullptr); + EnableInterface(pw, EVENT_OBJECT_PROGCLONE, m_currentProgram == nullptr && m_selScript < m_program.size() && m_program[m_selScript]->runnable); EnableInterface(pw, EVENT_OBJECT_PROGMOVEUP, m_currentProgram == nullptr && m_program.size() >= 2 && m_selScript > 0); EnableInterface(pw, EVENT_OBJECT_PROGMOVEDOWN,m_currentProgram == nullptr && m_program.size() >= 2 && m_selScript < m_program.size()-1); EnableInterface(pw, EVENT_OBJECT_LEFT, bEnable); @@ -2460,10 +2460,17 @@ void CBrain::UpdateInterface() bRun = false; if ( m_selScript < m_program.size() ) { - m_program[m_selScript]->script->GetTitle(title); - if ( title[0] != 0 ) + if(m_program[m_selScript]->runnable) { - bRun = true; + m_program[m_selScript]->script->GetTitle(title); + if ( title[0] != 0 ) + { + bRun = true; + } + } + else + { + bRun = false; } } if ( !bEnable && m_currentProgram == nullptr ) bRun = false; @@ -3127,6 +3134,7 @@ Program* CBrain::AddProgram() Program* program = new Program(); program->script = new CScript(m_object, &m_secondaryTask); program->readOnly = false; + program->runnable = true; AddProgram(program); return program; } diff --git a/src/object/brain.h b/src/object/brain.h index 143f1773..d8d897c0 100644 --- a/src/object/brain.h +++ b/src/object/brain.h @@ -79,6 +79,7 @@ struct Program CScript* script; std::string filename; bool readOnly; + bool runnable; }; diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp index e56ee09c..d60bdcb7 100644 --- a/src/object/robotmain.cpp +++ b/src/object/robotmain.cpp @@ -3637,10 +3637,12 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject) { std::string op = "script"+boost::lexical_cast(i+1); // script1..script10 std::string opReadOnly = "scriptReadOnly"+boost::lexical_cast(i+1); // scriptReadOnly1..scriptReadOnly10 + std::string opRunnable = "scriptRunnable"+boost::lexical_cast(i+1); // scriptRunnable1..scriptRunnable10 if(line->GetParam(op)->IsDefined()) { Program* program = brain->AddProgram(); program->filename = "../"+line->GetParam(op)->AsPath("ai"); program->readOnly = line->GetParam(opReadOnly)->AsBool(true); + program->runnable = line->GetParam(opRunnable)->AsBool(strcmp(base, "exercises") || i+1 != 4); // TODO: I'd rather not have it hardcoded like that loadedPrograms[i] = program; } diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp index ab69ed61..659d0c30 100644 --- a/src/ui/studio.cpp +++ b/src/ui/studio.cpp @@ -649,7 +649,12 @@ void CStudio::StartEditScript(CScript *script, std::string name, Program* progra button = pw->CreateButton(pos, dim, 64+29, EVENT_STUDIO_STEP); button->SetState(STATE_SHADOW); - if(m_program->readOnly) + if(!m_program->runnable) + { + GetResource(RES_TEXT, RT_PROGRAM_EXAMPLE, res); + SetInfoText(res, false); + } + else if(m_program->readOnly) { GetResource(RES_TEXT, RT_PROGRAM_READONLY, res); SetInfoText(res, false); @@ -1003,13 +1008,20 @@ void CStudio::UpdateButtons() edit->SetHighlightCap(true); } + + button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_CLONE)); + if ( button == 0 ) return; + button->SetState(STATE_ENABLE, m_program->runnable && !m_bRunning); + + button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_COMPILE)); if ( button == 0 ) return; - button->SetState(STATE_ENABLE, !m_bRunning); + button->SetState(STATE_ENABLE, m_program->runnable && !m_bRunning); button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_RUN)); if ( button == 0 ) return; button->SetIcon(m_bRunning?8:21); // stop/run + button->SetState(STATE_ENABLE, m_program->runnable || m_bRunning); button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_REALTIME)); if ( button == 0 ) return;