From 622f2246ef31a05eb38e8f2ab3ac9c1bd9264920 Mon Sep 17 00:00:00 2001 From: Simon Robertshaw Date: Mon, 6 Aug 2012 18:57:25 +0100 Subject: [PATCH] Fix TPTScript 'set' function --- src/cat/LuaScriptInterface.cpp | 7 ++++++- src/cat/TPTScriptInterface.cpp | 22 ++++++++++++---------- src/console/ConsoleView.cpp | 4 +++- src/interface/Label.cpp | 30 ++++++++++++++++++++++++++---- src/interface/Label.h | 2 ++ src/interface/Textbox.cpp | 5 ----- src/interface/Textbox.h | 3 +-- 7 files changed, 50 insertions(+), 23 deletions(-) diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp index 5aa6a730f..40bcc0843 100644 --- a/src/cat/LuaScriptInterface.cpp +++ b/src/cat/LuaScriptInterface.cpp @@ -310,7 +310,12 @@ int LuaScriptInterface::Command(std::string command) std::string LuaScriptInterface::FormatCommand(std::string command) { - return command; + if(command[0] == '!') + { + return "!"+legacy->FormatCommand(command.substr(1)); + } + else + return command; } LuaScriptInterface::~LuaScriptInterface() { diff --git a/src/cat/TPTScriptInterface.cpp b/src/cat/TPTScriptInterface.cpp index 3e4e5f1b2..d37bff350 100644 --- a/src/cat/TPTScriptInterface.cpp +++ b/src/cat/TPTScriptInterface.cpp @@ -194,6 +194,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) AnyType value = eval(words); Simulation * sim = m->GetSimulation(); + unsigned char * partsBlock = (unsigned char*)&sim->parts[0]; int returnValue = 0; @@ -205,10 +206,10 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) //Selector int newValue; - if(selector.GetType() == TypeNumber) - newValue = ((NumberType)selector).Value(); - else if(selector.GetType() == TypeString) - newValue = GetParticleType(((StringType)selector).Value()); + if(value.GetType() == TypeNumber) + newValue = ((NumberType)value).Value(); + else if(value.GetType() == TypeString) + newValue = GetParticleType(((StringType)value).Value()); else throw GeneralException("Invalid value for assignment"); @@ -230,10 +231,10 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) switch(propertyFormat) { case FormatInt: - *((int*)(((unsigned char*)&sim->parts[partIndex])+propertyOffset)) = newValue; + *((int*)(partsBlock+(partIndex*sizeof(Particle))+propertyOffset)) = newValue; break; case FormatFloat: - *((float*)(((unsigned char*)&sim->parts[partIndex])+propertyOffset)) = newValue; + *((float*)(partsBlock+(partIndex*sizeof(Particle))+propertyOffset)) = newValue; break; } returnValue = 1; @@ -248,7 +249,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) if(sim->parts[j].type) { returnValue++; - *((int*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue; + *((int*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue; } } break; @@ -258,7 +259,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) if(sim->parts[j].type) { returnValue++; - *((float*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue; + *((float*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue; } } break; @@ -274,6 +275,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) if(type<0 || type>=PT_NUM) throw GeneralException("Invalid particle type"); + std::cout << propertyOffset << std::endl; switch(propertyFormat) { case FormatInt: @@ -282,7 +284,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) if(sim->parts[j].type == type) { returnValue++; - *((int*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue; + *((int*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue; } } break; @@ -292,7 +294,7 @@ AnyType TPTScriptInterface::tptS_set(std::deque * words) if(sim->parts[j].type == type) { returnValue++; - *((float*)(((unsigned char*)&sim->parts[j])+propertyOffset)) = newValue; + *((float*)(partsBlock+(j*sizeof(Particle))+propertyOffset)) = newValue; } } break; diff --git a/src/console/ConsoleView.cpp b/src/console/ConsoleView.cpp index 32b366c0e..67c83de33 100644 --- a/src/console/ConsoleView.cpp +++ b/src/console/ConsoleView.cpp @@ -17,7 +17,7 @@ ConsoleView::ConsoleView(): ConsoleView * v; public: CommandHighlighter(ConsoleView * v_) { v = v_; } - void TextChangedCallback(ui::Textbox * sender) + virtual void TextChangedCallback(ui::Textbox * sender) { sender->SetDisplayText(v->c->FormatCommand(sender->GetText())); } @@ -43,6 +43,7 @@ void ConsoleView::DoKeyPress(int key, Uint16 character, bool shift, bool ctrl, b case KEY_ENTER: c->EvaluateCommand(commandField->GetText()); commandField->SetText(""); + commandField->SetDisplayText(""); break; case KEY_DOWN: c->NextCommand(); @@ -88,6 +89,7 @@ void ConsoleView::NotifyPreviousCommandsChanged(ConsoleModel * sender) void ConsoleView::NotifyCurrentCommandChanged(ConsoleModel * sender) { commandField->SetText(sender->GetCurrentCommand().Command); + commandField->SetDisplayText(c->FormatCommand(commandField->GetText())); } diff --git a/src/interface/Label.cpp b/src/interface/Label.cpp index 8a8055e4c..ee52fd8d8 100644 --- a/src/interface/Label.cpp +++ b/src/interface/Label.cpp @@ -266,6 +266,11 @@ void Label::updateSelection() } } +void Label::SetDisplayText(std::string newText) +{ + displayText = newText; +} + void Label::Draw(const Point& screenPos) { if(!drawn) @@ -282,6 +287,23 @@ void Label::Draw(const Point& screenPos) } Graphics * g = Engine::Ref().g; + std::string cDisplayText = displayText; + + if(!cDisplayText.length()) + { + if(selectionXL != -1 && selectionXH != -1) + { + cDisplayText = textFragments; + } + else + { + if(multiline) + cDisplayText = textLines; + else + cDisplayText = text; + } + } + if(multiline) { if(selectionXL != -1 && selectionXH != -1) @@ -298,21 +320,21 @@ void Label::Draw(const Point& screenPos) } else { g->fillrect(screenPos.X+textPosition.X+selectionXL, screenPos.Y+selectionYL+textPosition.Y-1, selectionXH-(selectionXL), 10, 255, 255, 255, 255); } - g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, textFragments, textColour.Red, textColour.Green, textColour.Blue, 255); + g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255); } else { - g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, textLines, textColour.Red, textColour.Green, textColour.Blue, 255); + g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255); } } else { if(selectionXL != -1 && selectionXH != -1) { g->fillrect(screenPos.X+textPosition.X+selectionXL, screenPos.Y+textPosition.Y-1, selectionXH-(selectionXL), 10, 255, 255, 255, 255); - g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, textFragments, textColour.Red, textColour.Green, textColour.Blue, 255); + g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255); } else { - g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, text, textColour.Red, textColour.Green, textColour.Blue, 255); + g->drawtext(screenPos.X+textPosition.X, screenPos.Y+textPosition.Y, cDisplayText, textColour.Red, textColour.Green, textColour.Blue, 255); } } } diff --git a/src/interface/Label.h b/src/interface/Label.h index 1fa7148bb..77c28d66f 100644 --- a/src/interface/Label.h +++ b/src/interface/Label.h @@ -14,6 +14,7 @@ namespace ui protected: std::string textFragments; std::string textLines; + std::string displayText; std::string text; Colour textColour; @@ -48,6 +49,7 @@ namespace ui virtual void SetMultiline(bool status); virtual void SetText(std::string text); + virtual void SetDisplayText(std::string newText); virtual std::string GetText(); virtual bool HasSelection(); diff --git a/src/interface/Textbox.cpp b/src/interface/Textbox.cpp index a57d69afb..71a485e37 100644 --- a/src/interface/Textbox.cpp +++ b/src/interface/Textbox.cpp @@ -99,11 +99,6 @@ size_t Textbox::GetLimit() return limit; } -void Textbox::SetDisplayText(std::string newText) -{ - Label::SetText(text); -} - std::string Textbox::GetText() { return backingText; diff --git a/src/interface/Textbox.h b/src/interface/Textbox.h index 2bc959dd6..a43a7e571 100644 --- a/src/interface/Textbox.h +++ b/src/interface/Textbox.h @@ -24,7 +24,6 @@ public: Textbox(Point position, Point size, std::string textboxText = "", std::string textboxPlaceholder = ""); virtual ~Textbox(); - virtual void SetDisplayText(std::string text); virtual void SetText(std::string text); virtual std::string GetText(); @@ -44,7 +43,7 @@ public: //Determines if the given character is valid given the input type bool CharacterValid(Uint16 character); - virtual void Tick(float dt); + virtual void Tick(float dt); virtual void OnContextMenuAction(int item); virtual void OnMouseClick(int x, int y, unsigned button); virtual void OnMouseUp(int x, int y, unsigned button);