Skip to content

Commit

Permalink
SVScriptPanel
Browse files Browse the repository at this point in the history
-refact
  • Loading branch information
Tyill committed Apr 6, 2020
1 parent bbd7e34 commit 90c915a
Show file tree
Hide file tree
Showing 7 changed files with 218 additions and 106 deletions.
2 changes: 2 additions & 0 deletions src/SVMonitor/forms/signScriptPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,8 @@ class signScriptPanel : public QDialog

ui.lbChange->setText("");

SV_Script::refreshScript(mainScrPanel_, sFileName_);

if (isActiveScript)
SV_Script::activeScript(mainScrPanel_, sFileName_);

Expand Down
Binary file modified src/SVMonitor/resources/svmonitor_en.qm
Binary file not shown.
180 changes: 115 additions & 65 deletions src/SVMonitor/resources/svmonitor_en.ts

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions src/SVScriptPanel/SVScriptPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ namespace SV_Script {

SVSCRIPTPANEL_API void deactiveScript(QDialog* stPanel, const QString& fname);

SVSCRIPTPANEL_API void refreshScript(QDialog* stPanel, const QString& fname);

typedef bool(*pf_loadSignalData)(const QString& sign);
SVSCRIPTPANEL_API void setLoadSignalData(QDialog* stPanel, pf_loadSignalData f);
Expand Down
6 changes: 5 additions & 1 deletion src/SVScriptPanel/forms/scriptPanel.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ class scriptPanel : public QDialog
void activeScript(const QString& fname);

void deactiveScript(const QString& fname);

void refreshScript(const QString& fname);

private:
Ui::ScriptPanelClass ui;
Expand All @@ -85,7 +87,9 @@ class scriptPanel : public QDialog

QMap<QString, SV_Cng::signalData*> signBuff_;

int iterValue_ = 0, buffCPos_ = 0, buffSz_ = 0;
int iterValue_ = 0,
buffCPos_ = 0,
buffSz_ = 1;

struct scriptState{
bool isChange = true;
Expand Down
6 changes: 6 additions & 0 deletions src/SVScriptPanel/src/SVScriptPanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,12 @@ namespace SV_Script {
((scriptPanel *)stp)->deactiveScript(fname);
}

void refreshScript(QDialog* stp, const QString& fname){

if (stp)
((scriptPanel *)stp)->refreshScript(fname);
}

void setLoadSignalData(QDialog *stp, pf_loadSignalData f) {

if (stp)
Expand Down
129 changes: 89 additions & 40 deletions src/SVScriptPanel/src/scriptPanel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -203,20 +203,24 @@ void scriptPanel::setValue(const QString& sign, SV_Cng::value val, uint64_t time

if (vp == sd->buffBeginPos) {
++sd->buffBeginPos;
if (sd->buffBeginPos >= buffSz) sd->buffBeginPos = 0;
if (sd->buffBeginPos == buffSz) sd->buffBeginPos = 0;
}
}
else{

if (vp == buffSz_)
vp = buffSz_ - 1;

sd->buffValuePos = vp;

if (vp >= sd->buffData.size()){
SV_Cng::recData rd;

rd.beginTime = time;
rd.vals = new SV_Cng::value[SV_PACKETSZ];
size_t csz = sd->buffData.size();
if (csz < buffSz_){

sd->buffData.resize(buffSz_);

sd->buffData.push_back(rd);
SV_Cng::value* buff = new SV_Cng::value[SV_PACKETSZ * (buffSz_ - csz)];
for (size_t i = 0; i < (buffSz_ - csz); ++i)
sd->buffData[i + csz].vals = &buff[i * SV_PACKETSZ];
}
}
}
Expand Down Expand Up @@ -303,13 +307,15 @@ bool scriptPanel::updateBuffValue(const QString& module, const QString& signal,

pfAddSignal(sign, sd);

if (mode_ == SV_Script::modeGr::player)
if (mode_ == SV_Script::modeGr::player){
pfLoadSignalData(sign);
}
else{
SV_Cng::recData rd;
rd.vals = new SV_Cng::value[SV_PACKETSZ];
sd->buffData.resize(buffSz_);

sd->buffData.push_back(rd);
SV_Cng::value* buff = new SV_Cng::value[SV_PACKETSZ * buffSz_];
for (int i = 0; i < buffSz_; ++i)
sd->buffData[i].vals = &buff[i * SV_PACKETSZ];
}

if (pfAddSignalsCBack)
Expand Down Expand Up @@ -691,31 +697,18 @@ void scriptPanel::activeScript(const QString& sname){

std::unique_lock<std::mutex> lck(mtx_);

auto sts = std::find_if(scrState_.begin(), scrState_.end(),
std::find_if(scrState_.begin(), scrState_.end(),
[sname](const scriptState& st) {
return st.name == sname;
}
);

QFile file(QApplication::applicationDirPath() + "/scripts/" + sname);

QTextStream txtStream(&file);
txtStream.setCodec("utf8");

file.open(QIODevice::ReadOnly);

sts->text = txtStream.readAll();
sts->isChange = false;

file.close();

)->isActive = true;

int rowCnt = ui.tblActiveScripts->rowCount();
ui.tblActiveScripts->insertRow(rowCnt);
auto itm = new QTableWidgetItem(sname);
itm->setFlags(itm->flags() ^ Qt::ItemFlag::ItemIsEditable);
ui.tblActiveScripts->setItem(rowCnt, 0, itm);

sts->isActive = true;

buffCPos_ = 0;
}
}
Expand All @@ -742,6 +735,39 @@ void scriptPanel::deactiveScript(const QString& sname){
}
}

void scriptPanel::refreshScript(const QString& sname){

QFile file(QApplication::applicationDirPath() + "/scripts/" + sname);

QTextStream txtStream(&file);
txtStream.setCodec("utf8");

file.open(QIODevice::ReadOnly);

auto sts = std::find_if(scrState_.begin(), scrState_.end(),
[sname](const scriptState& st) {
return st.name == sname;
}
);

sts->text = txtStream.readAll();

file.close();

int sz = ui.tabWidget->count();
for (int i = 0; i < sz; ++i){
if (ui.tabWidget->tabText(i) == sname){

((QTextEdit*)ui.tabWidget->widget(i))->setText(sts->text);

sts->isChange = false;
ui.lbChange->setText("");

break;
}
}
}

void scriptPanel::nameScriptChange(int row, int col){

if ((col == 0) && (row < scrState_.size())){
Expand Down Expand Up @@ -885,15 +911,44 @@ void scriptPanel::workCycle(){
}
}

// other scripts
if (isActive && serr.isEmpty()){

luaL_loadstring(luaState_, qUtf8Printable(allScr));

bool isNoError = false;
do {
// other scripts

if (mode_ == SV_Script::modeGr::viewer){

bool isNoError = false;
while (buffCPos_ < buffSz_){

for (iterValue_ = 0; iterValue_ < SV_PACKETSZ; ++iterValue_){

lua_pushvalue(luaState_, -1);

lua_pcall(luaState_, 0, 0, 0);

if (!isNoError){
const char* err = lua_tostring(luaState_, -1);
if (err){
serr = QString(err);
lua_pop(luaState_, -1);
break;
}
else
isNoError = true;
}
}
iterValue_ = 0;
++buffCPos_;

if (!isNoError) break;
}
}
else{ // SV_Script::modeGr::player

bool isNoError = false;
for (iterValue_ = 0; iterValue_ < SV_PACKETSZ; ++iterValue_){

lua_pushvalue(luaState_, -1);

lua_pcall(luaState_, 0, 0, 0);
Expand All @@ -910,13 +965,7 @@ void scriptPanel::workCycle(){
}
}
iterValue_ = 0;
++buffCPos_;

if (!isNoError) break;

} while (buffCPos_ < buffSz_);

buffCPos_ = qMax(0, buffSz_ - 1);
}
}

mtx_.unlock();
Expand Down

0 comments on commit 90c915a

Please sign in to comment.