most files - check if this is all we need
This commit is contained in:
182
report.cpp
Normal file
182
report.cpp
Normal file
@ -0,0 +1,182 @@
|
||||
#include "report.h"
|
||||
#include <stddef.h>
|
||||
#include <qlayout.h>
|
||||
#include <qdatetime.h>
|
||||
#include <qcolor.h>
|
||||
|
||||
Report::Report(QWidget *parent, SicsConnection *conn) : QWidget(parent, "report")
|
||||
{
|
||||
QVBoxLayout *vbox = new QVBoxLayout(this, 0, 0, "report_vbox");
|
||||
QHBoxLayout *hdr = new QHBoxLayout(0, 3, 3, "report_hdr");
|
||||
|
||||
this->conn = conn;
|
||||
|
||||
editButton = new QPushButton("edit", this);
|
||||
hdr->addWidget(editButton);
|
||||
|
||||
varEdit = new QLineEdit("tt.main", this);
|
||||
hdr->addWidget(varEdit);
|
||||
|
||||
leaveButton = new QPushButton("close", this);
|
||||
hdr->addWidget(leaveButton);
|
||||
|
||||
vbox->addLayout(hdr);
|
||||
|
||||
textedit = new MyTextEdit(this, "report_edit");
|
||||
textedit->setReadOnly(TRUE);
|
||||
textedit->setSelectionAttributes(1, QColor(255,255,128), FALSE);
|
||||
|
||||
vbox->addWidget(textedit, 1);
|
||||
|
||||
timer = new QTimer(this, "reportTimer");
|
||||
|
||||
connect(leaveButton, SIGNAL(clicked()), this, SIGNAL(leave()));
|
||||
connect(editButton, SIGNAL(clicked()), this, SLOT(editReport()));
|
||||
connect(timer, SIGNAL(timeout()), this, SLOT(updatePos()));
|
||||
|
||||
}
|
||||
|
||||
void Report::gotoTime(time_t from, time_t at, time_t to, bool silent) {
|
||||
char cmd[128];
|
||||
int iret;
|
||||
QString line;
|
||||
time_t lastRead, t, dt;
|
||||
bool ok;
|
||||
QString message;
|
||||
QDateTime datim;
|
||||
int l;
|
||||
int p;
|
||||
|
||||
if (isHidden()) {
|
||||
if (silent) return;
|
||||
openMe();
|
||||
}
|
||||
if (variable != varEdit->text() || from != this->from || to != this->to) {
|
||||
|
||||
this->to = to;
|
||||
this->from = from;
|
||||
times.clear();
|
||||
|
||||
variable = varEdit->text();
|
||||
snprintf(cmd, sizeof cmd, "graph %ld %ld text np %ld %s",
|
||||
from, to, to - from, variable.latin1());
|
||||
|
||||
textedit->clear();
|
||||
conn->command(cmd);
|
||||
|
||||
iret = conn->getLine(line);
|
||||
if (iret <= 0) {
|
||||
message = ("can not get response 1");
|
||||
goto err;
|
||||
}
|
||||
|
||||
/* get returned absolute time */
|
||||
lastRead = line.toLong();
|
||||
|
||||
iret = conn->getLine(line);
|
||||
if (iret <= 0) {
|
||||
message = "can not get response 2";
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!line.startsWith("*" + variable)) {
|
||||
message = "response '" + line + "' must start with '*" + variable + "'";
|
||||
goto err;
|
||||
}
|
||||
|
||||
t = 0;
|
||||
for (;;) {
|
||||
iret = conn->getLine(line);
|
||||
if (iret <= 0) {
|
||||
message = "can not get line";
|
||||
goto err;
|
||||
}
|
||||
//printf("> %s\n", line.latin1());
|
||||
if (line.startsWith("*")) {
|
||||
break;
|
||||
}
|
||||
dt = line.section(' ', 0, 0).toLong(&ok);
|
||||
if (!ok) {
|
||||
message = "bad timestep";
|
||||
goto err;
|
||||
}
|
||||
t += dt;
|
||||
times.append(t);
|
||||
datim.setTime_t(t);
|
||||
textedit->appendHtml("<font color=#00FF00>" + datim.toString("hh:mm:ss ") + "</font>");
|
||||
textedit->appendText(
|
||||
line.section(' ', 1).replace("\\n","\n").replace("\\t","\t").replace("\\\\","\\")
|
||||
+"\n"
|
||||
);
|
||||
}
|
||||
textedit->append("\n");
|
||||
pos = -1;
|
||||
}
|
||||
l = times.count();
|
||||
|
||||
p = l - 1;
|
||||
for (int ipos = 0; ipos < l; ipos++) {
|
||||
if (times[ipos] >= at) {
|
||||
p = ipos - 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (p < 0) p = 0;
|
||||
if (pos < 0) {
|
||||
pos = l;
|
||||
}
|
||||
setCursorPos(p);
|
||||
timer->start(200);
|
||||
return;
|
||||
err:
|
||||
textedit->append("error: "+message);
|
||||
}
|
||||
|
||||
void Report::setCursorPos(int newpos) {
|
||||
int index;
|
||||
|
||||
textedit->setCursorPosition(newpos, 0);
|
||||
if (newpos > pos) {
|
||||
textedit->moveCursor(QTextEdit::MoveDown, false);
|
||||
textedit->moveCursor(QTextEdit::MoveDown, false);
|
||||
} else {
|
||||
textedit->moveCursor(QTextEdit::MoveUp, false);
|
||||
textedit->moveCursor(QTextEdit::MoveUp, false);
|
||||
}
|
||||
textedit->getCursorPosition(&posc, &index);
|
||||
pos = newpos;
|
||||
textedit->setSelection(pos, 0, pos+1, 0, 1);
|
||||
textedit->setCursorPosition(posc, 0);
|
||||
textedit->ensureCursorVisible();
|
||||
}
|
||||
|
||||
void Report::updatePos() {
|
||||
int para, index;
|
||||
|
||||
textedit->getCursorPosition(¶, &index);
|
||||
if (para == pos) return;
|
||||
if (para == posc && index == 0) {
|
||||
// cursor repositioning pending
|
||||
posc = pos;
|
||||
textedit->setCursorPosition(posc, 0);
|
||||
textedit->ensureCursorVisible();
|
||||
} else {
|
||||
setCursorPos(para);
|
||||
}
|
||||
if (pos < (int)times.count()) {
|
||||
setMarker(times[pos]);
|
||||
}
|
||||
}
|
||||
|
||||
void Report::editReport() {
|
||||
QString text;
|
||||
|
||||
if (textedit->isReadOnly()) {
|
||||
textedit->setReadOnly(FALSE);
|
||||
timer->stop();
|
||||
setMarker(0);
|
||||
} else {
|
||||
printf("%s\n", textedit->text().latin1());
|
||||
textedit->setText(textedit->text());
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user