Changeset View
Changeset View
Standalone View
Standalone View
src/backends/R/rserver/rserver.cpp
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Line(s) | |||||
42 | #include <Rdefines.h> | 42 | #include <Rdefines.h> | ||
43 | #define R_INTERFACE_PTRS | 43 | #define R_INTERFACE_PTRS | ||
44 | #include <R_ext/Parse.h> | 44 | #include <R_ext/Parse.h> | ||
45 | 45 | | |||
46 | // Not making a member to prevent pulling R headers into rserver.h | 46 | // Not making a member to prevent pulling R headers into rserver.h | ||
47 | bool htmlVector(SEXP expr, QTextStream& fp) | 47 | bool htmlVector(SEXP expr, QTextStream& fp) | ||
48 | { | 48 | { | ||
49 | // TODO TextResult clamps the newlines, beware | 49 | // TODO TextResult clamps the newlines, beware | ||
50 | // fp << "<html>\n"; // TODO move this to some other place and make configurable | 50 | // fp << "<html>\n"; // TODO move this to some other place and make configurable | ||
51 | fp << QLatin1String("<table border=\"1\" align=\"center\" valign=\"center\">"); | 51 | fp << QLatin1String("<table border=\"1\" align=\"center\" valign=\"center\">"); | ||
52 | fp << QLatin1String("<tr><td bgcolor=\"#AAAAAA\">[1]</td>"); | 52 | fp << QLatin1String("<tr><td bgcolor=\"#AAAAAA\">[1]</td>"); | ||
53 | int leftOnThisRow=25; | 53 | int leftOnThisRow=25; | ||
54 | for (int i=0; i<length(expr); i++) | 54 | for (int i=0; i<length(expr); i++) | ||
55 | { | 55 | { | ||
56 | if (leftOnThisRow==0) | 56 | if (leftOnThisRow==0) | ||
57 | { | 57 | { | ||
58 | fp << QLatin1String("</tr>"); | 58 | fp << QLatin1String("</tr>"); | ||
▲ Show 20 Lines • Show All 417 Lines • ▼ Show 20 Line(s) | |||||
476 | // I am not sure whether or not asking the server with each keypress if what he typed was | 476 | // I am not sure whether or not asking the server with each keypress if what he typed was | ||
477 | // acceptable or not is a good idea. I'll leave it under investigation, let it be this way just for now | 477 | // acceptable or not is a good idea. I'll leave it under investigation, let it be this way just for now | ||
478 | // ~Landswellsong | 478 | // ~Landswellsong | ||
479 | 479 | | |||
480 | void RServer::listSymbols() | 480 | void RServer::listSymbols() | ||
481 | { | 481 | { | ||
482 | // setStatus(RServer::Busy); | 482 | // setStatus(RServer::Busy); | ||
483 | 483 | | |||
484 | QStringList vars,funcs, namespaces; | 484 | QStringList vars, values, funcs; | ||
485 | int errorOccurred; // TODO: error checks | 485 | int errorOccurred; // TODO: error checks | ||
486 | 486 | | |||
487 | /* Obtaining a list of user namespace objects */ | 487 | /* Obtaining a list of user namespace objects */ | ||
488 | SEXP usr=PROTECT(R_tryEval(lang1(install("ls")),NULL,&errorOccurred)); | 488 | SEXP usr=PROTECT(R_tryEval(lang1(install("ls")),NULL,&errorOccurred)); | ||
489 | for (int i=0;i<length(usr);i++) | 489 | for (int i=0;i<length(usr);i++) | ||
490 | vars<<QLatin1String(translateCharUTF8(STRING_ELT(usr,i))); | 490 | { | ||
491 | SEXP variable = STRING_ELT(usr,i); | ||||
492 | vars << QString::fromUtf8(translateCharUTF8(variable)); | ||||
493 | SEXP value = findVar(installChar(variable), R_GlobalEnv); | ||||
494 | SEXP valueAsString = PROTECT(R_tryEval(lang2(install("toString"),value),NULL,&errorOccurred)); | ||||
495 | values << QString::fromUtf8(translateCharUTF8(asChar(valueAsString))); | ||||
496 | } | ||||
491 | UNPROTECT(1); | 497 | UNPROTECT(1); | ||
492 | 498 | | |||
493 | /* Obtaining a list of active packages */ | 499 | /* Obtaining a list of active packages */ | ||
494 | SEXP packages=PROTECT(R_tryEval(lang1(install("search")),NULL,&errorOccurred)); | 500 | SEXP packages=PROTECT(R_tryEval(lang1(install("search")),NULL,&errorOccurred)); | ||
495 | //int i=1; // HACK to prevent scalability issues | 501 | //int i=1; // HACK to prevent scalability issues | ||
496 | for (int i=1;i<length(packages);i++) // Package #0 is user environment, so starting with 1 | 502 | for (int i=1;i<length(packages);i++) // Package #0 is user environment, so starting with 1 | ||
497 | { | 503 | { | ||
498 | char pos[32]; | 504 | char pos[32]; | ||
499 | sprintf(pos,"%d",i+1); | 505 | sprintf(pos,"%d",i+1); | ||
500 | SEXP f=PROTECT(R_tryEval(lang2(install("ls"),ScalarInteger(i+1)),NULL,&errorOccurred)); | 506 | SEXP f=PROTECT(R_tryEval(lang2(install("ls"),ScalarInteger(i+1)),NULL,&errorOccurred)); | ||
501 | for (int i=0;i<length(f);i++) | 507 | for (int i=0;i<length(f);i++) | ||
502 | funcs<<QLatin1String(translateCharUTF8(STRING_ELT(f,i))); | 508 | funcs<<QString::fromUtf8(translateCharUTF8(STRING_ELT(f,i))); | ||
503 | UNPROTECT(1); | 509 | UNPROTECT(1); | ||
504 | } | 510 | } | ||
505 | UNPROTECT(1); | 511 | UNPROTECT(1); | ||
506 | 512 | | |||
507 | emit symbolList(vars,funcs); | 513 | emit symbolList(vars, values, funcs); | ||
508 | 514 | | |||
509 | // setStatus(RServer::Idle); | 515 | // setStatus(RServer::Idle); | ||
510 | } | 516 | } | ||
511 | 517 | | |||
512 | void RServer::setStatus(Status status) | 518 | void RServer::setStatus(Status status) | ||
513 | { | 519 | { | ||
514 | if(m_status!=status) | 520 | if(m_status!=status) | ||
515 | { | 521 | { | ||
▲ Show 20 Lines • Show All 47 Lines • Show Last 20 Lines |