[colobot] 308/390: Made programs from SatCom read-only; added program cloning

Didier Raboud odyx at moszumanska.debian.org
Fri Jun 12 14:21:58 UTC 2015


This is an automated email from the git hooks/post-receive script.

odyx pushed a commit to branch upstream/latest
in repository colobot.

commit 58016c6c69e966b1079c6f08112c694e46c661e7
Author: krzys-h <krzys_h at interia.pl>
Date:   Mon Apr 6 16:07:49 2015 +0200

    Made programs from SatCom read-only; added program cloning
---
 data                     |  2 +-
 po/colobot.pot           | 12 +++++++++
 po/de.po                 | 14 ++++++++++
 po/fr.po                 | 14 ++++++++++
 po/pl.po                 | 14 +++++++++-
 po/ru.po                 | 14 ++++++++++
 src/common/event.cpp     |  2 ++
 src/common/event.h       |  6 +++--
 src/common/restext.cpp   |  5 ++++
 src/common/restext.h     |  3 +++
 src/object/brain.cpp     | 70 +++++++++++++++++++++++++++++++++++++++++++-----
 src/object/brain.h       |  2 ++
 src/object/robotmain.cpp |  3 +++
 src/ui/studio.cpp        | 50 ++++++++++++++++++++++++++++++----
 src/ui/studio.h          |  3 ++-
 15 files changed, 197 insertions(+), 17 deletions(-)

diff --git a/data b/data
index d5ff8d5..3195fa5 160000
--- a/data
+++ b/data
@@ -1 +1 @@
-Subproject commit d5ff8d51a37ba4d66a99778914f4d3751c23006b
+Subproject commit 3195fa5d55daa308404529f06030e3d643945291
diff --git a/po/colobot.pot b/po/colobot.pot
index 3992e70..6036509 100644
--- a/po/colobot.pot
+++ b/po/colobot.pot
@@ -180,6 +180,12 @@ msgstr ""
 msgid "Program finished"
 msgstr ""
 
+msgid "Program cloned"
+msgstr ""
+
+msgid "This program is read-only, clone it to edit"
+msgstr ""
+
 msgid "\\b;List of objects\n"
 msgstr ""
 
@@ -857,6 +863,9 @@ msgstr ""
 msgid "Remove selected program"
 msgstr ""
 
+msgid "Clone selected program"
+msgstr ""
+
 msgid "Move selected program up"
 msgstr ""
 
@@ -1016,6 +1025,9 @@ msgstr ""
 msgid "Cancel\\Cancel all changes"
 msgstr ""
 
+msgid "Clone program"
+msgstr ""
+
 msgid "Open (Ctrl+o)"
 msgstr ""
 
diff --git a/po/de.po b/po/de.po
index 533ddd6..7f9cd72 100644
--- a/po/de.po
+++ b/po/de.po
@@ -395,6 +395,13 @@ msgstr "Checkpoint erreicht"
 msgid "Climb\\Increases the power of the jet"
 msgstr "Steigen\\Leistung des Triebwerks steigern"
 
+msgid "Clone program"
+msgstr ""
+
+#, fuzzy
+msgid "Clone selected program"
+msgstr "Gewähltes Programm bearbeiten"
+
 msgid "Close"
 msgstr "Schließen"
 
@@ -1129,6 +1136,10 @@ msgstr "Geschütztes Element (private)"
 msgid "Private\\Private folder"
 msgstr "Privat\\Privater Ordner"
 
+#, fuzzy
+msgid "Program cloned"
+msgstr "Programm beendet"
+
 msgid "Program editor"
 msgstr "Programmeditor"
 
@@ -1487,6 +1498,9 @@ msgstr "Dieses Label existiert nicht"
 msgid "This object is not a member of a class"
 msgstr "Das Objekt ist nicht eine Instanz einer Klasse"
 
+msgid "This program is read-only, clone it to edit"
+msgstr ""
+
 msgid "Thump (\\key action;)"
 msgstr "Stampfen (\\key action;)"
 
diff --git a/po/fr.po b/po/fr.po
index 2a38eca..c2bf87f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -390,6 +390,13 @@ msgstr "Indicateur atteint"
 msgid "Climb\\Increases the power of the jet"
 msgstr "Monter\\Augmenter la puissance du réacteur"
 
+msgid "Clone program"
+msgstr ""
+
+#, fuzzy
+msgid "Clone selected program"
+msgstr "Édite le programme sélectionné"
+
 msgid "Close"
 msgstr "Fermer"
 
@@ -1125,6 +1132,10 @@ msgstr "Elément protégé"
 msgid "Private\\Private folder"
 msgstr "Privé\\Dossier privé"
 
+#, fuzzy
+msgid "Program cloned"
+msgstr "Programme terminé"
+
 msgid "Program editor"
 msgstr "Edition du programme"
 
@@ -1482,6 +1493,9 @@ msgstr "Cette étiquette n'existe pas"
 msgid "This object is not a member of a class"
 msgstr "L'objet n'est pas une instance d'une classe"
 
+msgid "This program is read-only, clone it to edit"
+msgstr ""
+
 msgid "Thump (\\key action;)"
 msgstr "Secoue (\\key action;)"
 
diff --git a/po/pl.po b/po/pl.po
index 0bb0084..7676f72 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -400,6 +400,12 @@ msgstr "Przekroczono punkt kontrolny"
 msgid "Climb\\Increases the power of the jet"
 msgstr "W górę\\Zwiększa moc silnika"
 
+msgid "Clone program"
+msgstr "Skopiuj program"
+
+msgid "Clone selected program"
+msgstr "Skopiuj zaznaczony program"
+
 msgid "Close"
 msgstr "Zamknij"
 
@@ -1048,7 +1054,7 @@ msgid "Pause/continue"
 msgstr "Pauza/Kontynuuj"
 
 msgid "Pause\\Pause the game without opening menu"
-msgstr ""
+msgstr "Pauza\\Zatrzymaj grę bez otwierania menu"
 
 msgid "Phazer shooter"
 msgstr "Działo fazowe"
@@ -1132,6 +1138,9 @@ msgstr "Element prywatny"
 msgid "Private\\Private folder"
 msgstr "Prywatny\\Folder prywatny"
 
+msgid "Program cloned"
+msgstr "Program skopiowany"
+
 msgid "Program editor"
 msgstr "Edytor programu"
 
@@ -1487,6 +1496,9 @@ msgstr "Taka etykieta nie istnieje"
 msgid "This object is not a member of a class"
 msgstr "Ten obiekt nie jest członkiem klasy"
 
+msgid "This program is read-only, clone it to edit"
+msgstr "Ten program jest tylko do odczytu, skopiuj go, aby edytować"
+
 msgid "Thump (\\key action;)"
 msgstr "Uderz (\\key action;)"
 
diff --git a/po/ru.po b/po/ru.po
index 6be55cb..b039602 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -390,6 +390,13 @@ msgstr "Вы прошли контрольную точку"
 msgid "Climb\\Increases the power of the jet"
 msgstr "Взлет и подъем\\Увеличивает мощность реактивного двигателя"
 
+msgid "Clone program"
+msgstr ""
+
+#, fuzzy
+msgid "Clone selected program"
+msgstr "Изменить выбранную программу"
+
 msgid "Close"
 msgstr "Закрыть"
 
@@ -1124,6 +1131,10 @@ msgstr "Частный элемент"
 msgid "Private\\Private folder"
 msgstr "Личное\\Личная папка"
 
+#, fuzzy
+msgid "Program cloned"
+msgstr "Программа выполнена"
+
 msgid "Program editor"
 msgstr "Редактор программ"
 
@@ -1483,6 +1494,9 @@ msgstr "Эта метка не существует"
 msgid "This object is not a member of a class"
 msgstr "Этот объект не член класса"
 
+msgid "This program is read-only, clone it to edit"
+msgstr ""
+
 msgid "Thump (\\key action;)"
 msgstr "Удар (\\key action;)"
 
diff --git a/src/common/event.cpp b/src/common/event.cpp
index a77ef15..415a900 100644
--- a/src/common/event.cpp
+++ b/src/common/event.cpp
@@ -428,6 +428,7 @@ void InitializeEventTypeTexts()
     EVENT_TYPE_TEXT[EVENT_OBJECT_PROGSTART]  = "EVENT_OBJECT_PROGSTART";
     EVENT_TYPE_TEXT[EVENT_OBJECT_PROGSTOP]   = "EVENT_OBJECT_PROGSTOP";
     EVENT_TYPE_TEXT[EVENT_OBJECT_PROGADD]    = "EVENT_OBJECT_PROGADD";
+    EVENT_TYPE_TEXT[EVENT_OBJECT_PROGCLONE] = "EVENT_OBJECT_PROGCLONE";
     EVENT_TYPE_TEXT[EVENT_OBJECT_PROGREMOVE] = "EVENT_OBJECT_PROGREMOVE";
     EVENT_TYPE_TEXT[EVENT_OBJECT_PROGMOVEUP] = "EVENT_OBJECT_PROGMOVEUP";
     EVENT_TYPE_TEXT[EVENT_OBJECT_PROGMOVEDOWN] = "EVENT_OBJECT_PROGMOVEDOWN";
@@ -497,6 +498,7 @@ void InitializeEventTypeTexts()
     EVENT_TYPE_TEXT[EVENT_STUDIO_CANCEL]     = "EVENT_STUDIO_CANCEL";
     EVENT_TYPE_TEXT[EVENT_STUDIO_EDIT]       = "EVENT_STUDIO_EDIT";
     EVENT_TYPE_TEXT[EVENT_STUDIO_LIST]       = "EVENT_STUDIO_LIST";
+    EVENT_TYPE_TEXT[EVENT_STUDIO_CLONE]      = "EVENT_STUDIO_CLONE";
     EVENT_TYPE_TEXT[EVENT_STUDIO_NEW]        = "EVENT_STUDIO_NEW";
     EVENT_TYPE_TEXT[EVENT_STUDIO_OPEN]       = "EVENT_STUDIO_OPEN";
     EVENT_TYPE_TEXT[EVENT_STUDIO_SAVE]       = "EVENT_STUDIO_SAVE";
diff --git a/src/common/event.h b/src/common/event.h
index 02ba74b..7566ec9 100644
--- a/src/common/event.h
+++ b/src/common/event.h
@@ -460,8 +460,9 @@ enum EventType
     EVENT_OBJECT_PROGSTOP   = 1314,
     EVENT_OBJECT_PROGADD    = 1315,
     EVENT_OBJECT_PROGREMOVE = 1316,
-    EVENT_OBJECT_PROGMOVEUP = 1317,
-    EVENT_OBJECT_PROGMOVEDOWN = 1318,
+    EVENT_OBJECT_PROGCLONE  = 1317,
+    EVENT_OBJECT_PROGMOVEUP = 1318,
+    EVENT_OBJECT_PROGMOVEDOWN = 1319,
     EVENT_OBJECT_INFOOK     = 1340,
     EVENT_OBJECT_DELETE     = 1350,
     EVENT_OBJECT_GENERGY    = 1360,
@@ -528,6 +529,7 @@ enum EventType
     EVENT_STUDIO_CANCEL     = 2001,
     EVENT_STUDIO_EDIT       = 2002,
     EVENT_STUDIO_LIST       = 2003,
+    EVENT_STUDIO_CLONE      = 2004,
     EVENT_STUDIO_NEW        = 2010,
     EVENT_STUDIO_OPEN       = 2011,
     EVENT_STUDIO_SAVE       = 2012,
diff --git a/src/common/restext.cpp b/src/common/restext.cpp
index 20be736..f117fd3 100644
--- a/src/common/restext.cpp
+++ b/src/common/restext.cpp
@@ -119,6 +119,9 @@ void InitializeRestext()
     stringsText[RT_STUDIO_LISTTT]    = TR("Keyword help(\\key cbot;)");
     stringsText[RT_STUDIO_COMPOK]    = TR("Compilation ok (0 errors)");
     stringsText[RT_STUDIO_PROGSTOP]  = TR("Program finished");
+    stringsText[RT_STUDIO_CLONED]    = TR("Program cloned");
+
+    stringsText[RT_PROGRAM_READONLY] = TR("This program is read-only, clone it to edit");
 
     stringsText[RT_SATCOM_LIST]      = TR("\\b;List of objects\n");
     stringsText[RT_SATCOM_BOT]       = TR("\\b;Robots\n");
@@ -374,6 +377,7 @@ void InitializeRestext()
     stringsEvent[EVENT_OBJECT_PROGEDIT]     = TR("Edit the selected program");
     stringsEvent[EVENT_OBJECT_PROGADD]      = TR("Add new program");
     stringsEvent[EVENT_OBJECT_PROGREMOVE]   = TR("Remove selected program");
+    stringsEvent[EVENT_OBJECT_PROGCLONE]    = TR("Clone selected program");
     stringsEvent[EVENT_OBJECT_PROGMOVEUP]   = TR("Move selected program up");
     stringsEvent[EVENT_OBJECT_PROGMOVEDOWN] = TR("Move selected program down");
     stringsEvent[EVENT_OBJECT_INFOOK]       = TR("\\SatCom on standby");
@@ -433,6 +437,7 @@ void InitializeRestext()
 
     stringsEvent[EVENT_STUDIO_OK]           = TR("OK\\Close program editor and return to game");
     stringsEvent[EVENT_STUDIO_CANCEL]       = TR("Cancel\\Cancel all changes");
+    stringsEvent[EVENT_STUDIO_CLONE]        = TR("Clone program");
     stringsEvent[EVENT_STUDIO_NEW]          = TR("New");
     stringsEvent[EVENT_STUDIO_OPEN]         = TR("Open (Ctrl+o)");
     stringsEvent[EVENT_STUDIO_SAVE]         = TR("Save (Ctrl+s)");
diff --git a/src/common/restext.h b/src/common/restext.h
index 4690605..6fb9a01 100644
--- a/src/common/restext.h
+++ b/src/common/restext.h
@@ -115,6 +115,9 @@ enum ResTextType
     RT_STUDIO_LISTTT        = 120,
     RT_STUDIO_COMPOK        = 121,
     RT_STUDIO_PROGSTOP      = 122,
+    RT_STUDIO_CLONED        = 123,
+
+    RT_PROGRAM_READONLY     = 130,
 
     RT_SATCOM_LIST          = 140,
     RT_SATCOM_BOT           = 141,
diff --git a/src/object/brain.cpp b/src/object/brain.cpp
index 94a4178..d505e8d 100644
--- a/src/object/brain.cpp
+++ b/src/object/brain.cpp
@@ -346,6 +346,27 @@ bool CBrain::EventProcess(const Event &event)
             StopEditScript(true);
             m_main->SaveOneScript(m_object);
         }
+        if( action == EVENT_STUDIO_CLONE )
+        {
+            StopEditScript(false);
+            Program* newProgram = CloneProgram(m_program[m_selScript]);
+            m_selScript = m_program.size()-1;
+            m_main->SaveOneScript(m_object);
+
+            UpdateInterface();
+            Ui::CWindow* pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
+            if ( pw != 0 )
+            {
+                UpdateScript(pw);
+            }
+            SetSelScript(m_selScript);
+
+            StartEditScript(newProgram, "");
+
+            std::string res;
+            GetResource(RES_TEXT, RT_STUDIO_CLONED, res);
+            m_studio->SetInfoText(res, false);
+        }
 
         return true;
     }
@@ -462,6 +483,25 @@ bool CBrain::EventProcess(const Event &event)
             }
         }
 
+        if( action == EVENT_OBJECT_PROGCLONE )
+        {
+            if(m_selScript < m_program.size())
+            {
+                CloneProgram(m_program[m_selScript]);
+                m_selScript = m_program.size()-1;
+                m_main->SaveOneScript(m_object);
+
+                UpdateInterface();
+                Ui::CWindow* pw = static_cast< Ui::CWindow* >(m_interface->SearchControl(EVENT_WINDOW0));
+                if ( pw != 0 )
+                {
+                    UpdateScript(pw);
+                }
+                SetSelScript(m_selScript);
+            }
+        }
+
+
         if( action == EVENT_OBJECT_PROGMOVEUP )
         {
             std::iter_swap(m_program.begin() + m_selScript, m_program.begin() + m_selScript - 1);
@@ -1399,17 +1439,17 @@ bool CBrain::CreateInterface(bool bSelect)
 
             ddim.y = dim.y*0.5f;
             pos.y = oy+sy*0.0f;
-            ddim.x = dim.x*2.0f;
+            ddim.x = dim.x*1.1f;
             pos.x = ox+sx*0.0f;
             pw->CreateButton(pos, ddim, 24, EVENT_OBJECT_PROGADD);
             ddim.x = dim.x*1.0f;
-            pos.x = ox+sx*2.0f;
+            pos.x = ox+sx*1.1f;
             pw->CreateButton(pos, ddim, 25, EVENT_OBJECT_PROGREMOVE);
-            ddim.x = dim.x*1.05f;
-            pos.x = ox+sx*3.0f;
+            pos.x = ox+sx*2.1f;
+            pw->CreateButton(pos, ddim, 61, EVENT_OBJECT_PROGCLONE);
+            pos.x = ox+sx*3.1f;
             pw->CreateButton(pos, ddim, 49, EVENT_OBJECT_PROGMOVEUP);
-            ddim.x = dim.x*1.05f;
-            pos.x = ox+sx*4.05f;
+            pos.x = ox+sx*4.1f;
             pw->CreateButton(pos, ddim, 50, EVENT_OBJECT_PROGMOVEDOWN);
 
             pos.x = ox+sx*5.2f;
@@ -2270,7 +2310,8 @@ void CBrain::UpdateInterface()
     EnableInterface(pw, EVENT_OBJECT_PROGEDIT,    (m_primaryTask == 0 && !m_bTraceRecord) && m_selScript < m_program.size());
     EnableInterface(pw, EVENT_OBJECT_PROGLIST,    bEnable && !m_bTraceRecord);
     EnableInterface(pw, EVENT_OBJECT_PROGADD,     m_currentProgram == nullptr);
-    EnableInterface(pw, EVENT_OBJECT_PROGREMOVE,  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_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);
@@ -3073,6 +3114,7 @@ Program* CBrain::AddProgram()
 {
     Program* program = new Program();
     program->script = new CScript(m_object, &m_secondaryTask);
+    program->readOnly = false;
     AddProgram(program);
     return program;
 }
@@ -3112,6 +3154,20 @@ void CBrain::RemoveProgram(Program* program)
     }
 }
 
+Program* CBrain::CloneProgram(Program* program)
+{
+    Program* newprog = AddProgram();
+
+    // TODO: Is there any reason CScript doesn't have a function to get the program code directly?
+    Ui::CEdit* edit = new Ui::CEdit();
+    edit->SetMaxChar(Ui::EDITSTUDIOMAX);
+    program->script->PutScript(edit, "");
+    newprog->script->GetScript(edit);
+    delete edit;
+
+    return newprog;
+}
+
 int CBrain::GetProgramIndex(Program* program)
 {
     for(unsigned int i = 0; i < m_program.size(); i++)
diff --git a/src/object/brain.h b/src/object/brain.h
index ce21d6c..de3c007 100644
--- a/src/object/brain.h
+++ b/src/object/brain.h
@@ -78,6 +78,7 @@ struct Program
 {
     CScript*    script;
     std::string filename;
+    bool        readOnly = false;
 };
 
 
@@ -148,6 +149,7 @@ public:
     Program*    AddProgram();
     bool        AddProgram(Program* program);
     void        RemoveProgram(Program* program);
+    Program*    CloneProgram(Program* program);
 
     Program*    GetProgram(int index);
     Program*    GetOrAddProgram(int index);
diff --git a/src/object/robotmain.cpp b/src/object/robotmain.cpp
index 4b5304f..d5cc377 100644
--- a/src/object/robotmain.cpp
+++ b/src/object/robotmain.cpp
@@ -3470,6 +3470,7 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
                 {
                     Program* program = brain->AddProgram();
                     program->filename = "../"+line->GetParam("script")->AsPath("ai");
+                    program->readOnly = true;
                     brain->SetScriptRun(program);
                 }
                 continue;
@@ -3629,9 +3630,11 @@ void CRobotMain::CreateScene(bool soluce, bool fixScene, bool resetObject)
                         for (int i = 0; i < 10; i++)
                         {
                             std::string op = "script"+boost::lexical_cast<std::string>(i+1); // script1..script10
+                            std::string opReadOnly = "scriptReadOnly"+boost::lexical_cast<std::string>(i+1); // scriptReadOnly1..scriptReadOnly10
                             if(line->GetParam(op)->IsDefined()) {
                                 Program* program = brain->AddProgram();
                                 program->filename = "../"+line->GetParam(op)->AsPath("ai");
+                                program->readOnly = line->GetParam(opReadOnly)->AsBool(true);
                                 loadedPrograms[i] = program;
                             }
                             
diff --git a/src/ui/studio.cpp b/src/ui/studio.cpp
index 170d830..ab69ed6 100644
--- a/src/ui/studio.cpp
+++ b/src/ui/studio.cpp
@@ -552,8 +552,8 @@ void CStudio::StartEditScript(CScript *script, std::string name, Program* progra
     CSlider*    slider;
     CList*      list;
 
-    m_script = script;
-    m_program   = program;
+    m_script  = script;
+    m_program = program;
 
     m_main->SetEditLock(true, true);
     m_main->SetEditFull(false);
@@ -636,6 +636,8 @@ void CStudio::StartEditScript(CScript *script, std::string name, Program* progra
 
     button = pw->CreateButton(pos, dim, -1, EVENT_STUDIO_OK);
     button->SetState(STATE_SHADOW);
+    button = pw->CreateButton(pos, dim, 61, EVENT_STUDIO_CLONE);
+    button->SetState(STATE_SHADOW);
     button = pw->CreateButton(pos, dim, -1, EVENT_STUDIO_CANCEL);
     button->SetState(STATE_SHADOW);
     button = pw->CreateButton(pos, dim, 64+23, EVENT_STUDIO_COMPILE);
@@ -647,6 +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)
+    {
+        GetResource(RES_TEXT, RT_PROGRAM_READONLY, res);
+        SetInfoText(res, false);
+    }
+
     UpdateFlux();
     UpdateButtons();
     AdjustEditScript();
@@ -799,7 +807,18 @@ void CStudio::AdjustEditScript()
         button->SetPos(pos);
         button->SetDim(dim);
     }
-    pos.x = wpos.x+0.14f;
+    dim.x = 25.0f/480.0f;
+    dim.y = 25.0f/480.0f;
+    pos.x = wpos.x+0.01f+0.125f+0.005f;
+    button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_CLONE));
+    if ( button != nullptr )
+    {
+        button->SetPos(pos);
+        button->SetDim(dim);
+    }
+    dim.x = 80.0f/640.0f - 25.0f/480.0f;
+    dim.y = 25.0f/480.0f;
+    pos.x = wpos.x+0.01f+0.125f+0.005f+(25.0f/480.0f)+0.005f;
     button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_CANCEL));
     if ( button != nullptr )
     {
@@ -979,8 +998,8 @@ void CStudio::UpdateButtons()
     }
     else
     {
-        edit->SetIcon(0);  // standard background
-        edit->SetEditCap(true);
+        edit->SetIcon(m_program->readOnly ? 1 : 0);  // standard background
+        edit->SetEditCap(!m_program->readOnly);
         edit->SetHighlightCap(true);
     }
 
@@ -1000,6 +1019,27 @@ void CStudio::UpdateButtons()
     button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_STEP));
     if ( button == 0 )  return;
     button->SetState(STATE_ENABLE, (m_bRunning && !m_bRealTime && !m_script->IsContinue()));
+
+
+    button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_NEW));
+    if ( button == 0 )  return;
+    button->SetState(STATE_ENABLE, !m_program->readOnly);
+
+    button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_OPEN));
+    if ( button == 0 )  return;
+    button->SetState(STATE_ENABLE, !m_program->readOnly);
+
+    button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_UNDO));
+    if ( button == 0 )  return;
+    button->SetState(STATE_ENABLE, !m_program->readOnly);
+
+    button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_CUT));
+    if ( button == 0 )  return;
+    button->SetState(STATE_ENABLE, !m_program->readOnly);
+
+    button = static_cast< CButton* >(pw->SearchControl(EVENT_STUDIO_PASTE));
+    if ( button == 0 )  return;
+    button->SetState(STATE_ENABLE, !m_program->readOnly);
 }
 
 
diff --git a/src/ui/studio.h b/src/ui/studio.h
index 15833ee..5118375 100644
--- a/src/ui/studio.h
+++ b/src/ui/studio.h
@@ -70,13 +70,14 @@ public:
 
     void        StartEditScript(CScript *script, std::string name, Program* program);
     bool        StopEditScript(bool bCancel);
+    
+    void        SetInfoText(std::string text, bool bClickable);
 
 protected:
     bool        EventFrame(const Event &event);
     void        SearchToken(CEdit* edit);
     void        ColorizeScript(CEdit* edit);
     void        AdjustEditScript();
-    void        SetInfoText(std::string text, bool bClickable);
     void        ViewEditScript();
     void        UpdateFlux();
     void        UpdateButtons();

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git



More information about the Pkg-games-commits mailing list