[education/rkward] rkward/core: Set QT_NO_CAST_FROM_ASCII in core folder
Thomas Friedrichsmeier
null at kde.org
Thu Apr 24 12:46:32 BST 2025
Git commit 2ae44633579ac590ff7be9e2e9f865f6dddd83cd by Thomas Friedrichsmeier.
Committed on 24/04/2025 at 11:46.
Pushed by tfry into branch 'master'.
Set QT_NO_CAST_FROM_ASCII in core folder
M +1 -0 rkward/core/CMakeLists.txt
M +17 -17 rkward/core/rcontainerobject.cpp
M +28 -31 rkward/core/renvironmentobject.cpp
M +8 -8 rkward/core/rfunctionobject.cpp
M +17 -17 rkward/core/rkmodificationtracker.cpp
M +26 -25 rkward/core/rkpseudoobjects.cpp
M +16 -16 rkward/core/rkrownames.cpp
M +115 -115 rkward/core/rkvariable.cpp
M +144 -135 rkward/core/robject.cpp
M +2 -0 rkward/core/robject.h
M +25 -27 rkward/core/robjectlist.cpp
https://invent.kde.org/education/rkward/-/commit/2ae44633579ac590ff7be9e2e9f865f6dddd83cd
diff --git a/rkward/core/CMakeLists.txt b/rkward/core/CMakeLists.txt
index 57e93b587..0d45b956f 100644
--- a/rkward/core/CMakeLists.txt
+++ b/rkward/core/CMakeLists.txt
@@ -18,4 +18,5 @@ SET(core_STAT_SRCS
ADD_LIBRARY(core STATIC ${core_STAT_SRCS})
TARGET_LINK_LIBRARIES(core Qt6::Core Qt6::Widgets KF6::WidgetsAddons KF6::I18n KF6::Parts)
+add_definitions(-DQT_NO_CAST_FROM_ASCII) # TODO remove, here, once enabled on top level
diff --git a/rkward/core/rcontainerobject.cpp b/rkward/core/rcontainerobject.cpp
index cbeb8a4c2..3281dec5a 100644
--- a/rkward/core/rcontainerobject.cpp
+++ b/rkward/core/rcontainerobject.cpp
@@ -356,38 +356,38 @@ void RContainerObject::removeChild (RObject *object, bool removed_in_workspace)
delete object;
}
-QString RContainerObject::removeChildCommand (RObject *object) const {
- RK_TRACE (OBJECTS);
+QString RContainerObject::removeChildCommand(RObject *object) const {
+ RK_TRACE(OBJECTS);
- return (object->getFullName () + " <- NULL");
+ return (object->getFullName() + u" <- NULL"_s);
}
-QString RContainerObject::renameChildCommand (RObject *object, const QString &new_name) const {
- RK_TRACE (OBJECTS);
+QString RContainerObject::renameChildCommand(RObject *object, const QString &new_name) const {
+ RK_TRACE(OBJECTS);
- return ("rk.rename.in.container (" + getFullName () + ", \"" + object->getShortName () + "\", \"" + new_name + "\")");
+ return (u"rk.rename.in.container ("_s + getFullName() + u", \""_s + object->getShortName() + u"\", \""_s + new_name + u"\")"_s);
}
-QString RContainerObject::validizeName (const QString &child_name, bool unique) const {
- RK_TRACE (OBJECTS);
- RK_ASSERT (isType (GlobalEnv) || isInGlobalEnv ());
+QString RContainerObject::validizeName(const QString &child_name, bool unique) const {
+ RK_TRACE(OBJECTS);
+ RK_ASSERT(isType(GlobalEnv) || isInGlobalEnv());
static const QRegularExpression validizename1(QStringLiteral("[^a-zA-Z0-9_]"));
static const QRegularExpression validizename2(QStringLiteral("^\\.*[0-9]+"));
QString ret = child_name;
- if (ret.isEmpty ()) ret = QLatin1String("var");
+ if (ret.isEmpty()) ret = u"var"_s;
else {
- ret = ret.replace(validizename1, QLatin1String("."));
- ret = ret.replace(validizename2, QLatin1String("."));
+ ret = ret.replace(validizename1, u"."_s);
+ ret = ret.replace(validizename2, u"."_s);
}
if (!unique) return ret;
-// NOTE: this is potentially a quadratic time algorithm with respect to number of children.
-// Its only called on user actions, though, and hopefully users will not keep all objects named "varX".
- int i=0;
+ // NOTE: this is potentially a quadratic time algorithm with respect to number of children.
+ // Its only called on user actions, though, and hopefully users will not keep all objects named "varX".
+ int i = 0;
QString postfix;
- while (findChildByName (ret + postfix)) {
- postfix.setNum (++i);
+ while (findChildByName(ret + postfix)) {
+ postfix.setNum(++i);
}
return (ret + postfix);
}
diff --git a/rkward/core/renvironmentobject.cpp b/rkward/core/renvironmentobject.cpp
index 872e0065c..33b573ceb 100644
--- a/rkward/core/renvironmentobject.cpp
+++ b/rkward/core/renvironmentobject.cpp
@@ -18,17 +18,17 @@ SPDX-License-Identifier: GPL-2.0-or-later
#include "../debug.h"
-REnvironmentObject::REnvironmentObject (RContainerObject *parent, const QString &name) : RContainerObject (parent, name) {
- RK_TRACE (OBJECTS);
+REnvironmentObject::REnvironmentObject(RContainerObject *parent, const QString &name) : RContainerObject(parent, name) {
+ RK_TRACE(OBJECTS);
type = Environment;
- if (parent == RObjectList::getObjectList ()) {
+ if (parent == RObjectList::getObjectList()) {
type |= ToplevelEnv;
- if (name.contains (':')) {
+ if (name.contains(u':')) {
type |= PackageEnv;
}
} else if (parent == nullptr) {
- RK_ASSERT(name == QStringLiteral(".GlobalEnv"));
+ RK_ASSERT(name == u".GlobalEnv"_s);
type |= ToplevelEnv | GlobalEnv;
}
}
@@ -44,43 +44,40 @@ QString REnvironmentObject::getObjectDescription () const {
return RContainerObject::getObjectDescription ();
}
-QString REnvironmentObject::packageName () const {
- RK_ASSERT (isType (PackageEnv));
- if (!isType (PackageEnv)) RK_DEBUG (OBJECTS, DL_WARNING, "%s", qPrintable (name));
- return name.section (':', 1);
+QString REnvironmentObject::packageName() const {
+ RK_ASSERT(isType(PackageEnv));
+ if (!isType(PackageEnv)) RK_DEBUG(OBJECTS, DL_WARNING, "%s", qPrintable(name));
+ return name.section(u':', 1);
}
-QString REnvironmentObject::getFullName (int options) const {
- RK_TRACE (OBJECTS);
+QString REnvironmentObject::getFullName(int options) const {
+ RK_TRACE(OBJECTS);
- if (type & GlobalEnv) return name; // .GlobalEnv
- if ((type & ToplevelEnv) && (options & IncludeEnvirIfNotGlobalEnv)) return ("as.environment (" + rQuote (name) + ')');
+ if (type & GlobalEnv) return name; // .GlobalEnv
+ if ((type & ToplevelEnv) && (options & IncludeEnvirIfNotGlobalEnv)) return (u"as.environment ("_s + rQuote(name) + u')');
return parent->makeChildName(name, options);
}
-QString REnvironmentObject::makeChildName (const QString &short_child_name, int options) const {
- RK_TRACE (OBJECTS);
+QString REnvironmentObject::makeChildName(const QString &short_child_name, int options) const {
+ RK_TRACE(OBJECTS);
QString safe_name;
bool irregular = false;
- if (irregularShortName (short_child_name)) {
+ if (irregularShortName(short_child_name)) {
irregular = true;
- safe_name = rQuote (short_child_name);
+ safe_name = rQuote(short_child_name);
} else safe_name = short_child_name;
- if (type & GlobalEnv) { // don't print as ".GlobalEnv$something" unless asked to, or childname needs fixing
- if (irregular || (options & IncludeEnvirForGlobalEnv)) return (getShortName () + '$' + safe_name);
+ if (type & GlobalEnv) { // don't print as ".GlobalEnv$something" unless asked to, or childname needs fixing
+ if (irregular || (options & IncludeEnvirForGlobalEnv)) return (getShortName() + u'$' + safe_name);
return (safe_name);
}
if (type & ToplevelEnv) {
if (!(options & IncludeEnvirIfNotGlobalEnv)) return (short_child_name);
-/* Some items are placed outside of their native namespace. E.g. in package:boot item "motor". It can be retrieved using as.environment ("package:boot")$motor. This is extremely ugly. We need to give them (and only them) this special treatment. */
-// TODO: hopefully one day operator "::" will work even in those cases. So check back later, and remove after a sufficient amount of backwards compatibility time
-// NOTE: This appears to have been fixed in R 2.14.0, when all packages were forced to have namespaces. Currently backend has a version check to set "misplaced", appropriately.
- if (type & PackageEnv) return (packageName() + "::" + safe_name);
- return (getFullName(options) + '$' + safe_name);
+ if (type & PackageEnv) return (packageName() + u"::"_s + safe_name);
+ return (getFullName(options) + u'$' + safe_name);
}
- return (getFullName (options) + '$' + safe_name);
+ return (getFullName(options) + u'$' + safe_name);
}
void REnvironmentObject::writeMetaData (RCommandChain *chain) {
@@ -165,14 +162,14 @@ void REnvironmentObject::updateNamespace (RData* new_data) {
}
}
-QString REnvironmentObject::renameChildCommand (RObject *object, const QString &new_name) const {
- RK_TRACE (OBJECTS);
+QString REnvironmentObject::renameChildCommand(RObject *object, const QString &new_name) const {
+ RK_TRACE(OBJECTS);
- return (makeChildName(new_name, IncludeEnvirIfNotGlobalEnv) + " <- " + object->getFullName() + '\n' + removeChildCommand(object));
+ return (makeChildName(new_name, IncludeEnvirIfNotGlobalEnv) + u" <- "_s + object->getFullName() + u'\n' + removeChildCommand(object));
}
-QString REnvironmentObject::removeChildCommand (RObject *object) const {
- RK_TRACE (OBJECTS);
+QString REnvironmentObject::removeChildCommand(RObject *object) const {
+ RK_TRACE(OBJECTS);
- return ("remove (" + object->getFullName () + ')');
+ return (u"remove ("_s + object->getFullName() + u')');
}
diff --git a/rkward/core/rfunctionobject.cpp b/rkward/core/rfunctionobject.cpp
index 9c685e756..79f71b544 100644
--- a/rkward/core/rfunctionobject.cpp
+++ b/rkward/core/rfunctionobject.cpp
@@ -21,16 +21,16 @@ RFunctionObject::~RFunctionObject () {
RK_TRACE (OBJECTS);
}
-QString RFunctionObject::printArgs () const {
- RK_TRACE (OBJECTS);
+QString RFunctionObject::printArgs() const {
+ RK_TRACE(OBJECTS);
QString ret;
- for (int i = 0; i < argnames.size (); ++i) {
- if (i) ret.append (", ");
- ret.append (argnames[i]);
- if (!argvalues[i].isEmpty ()) {
- ret.append ("=");
- ret.append (argvalues[i]);
+ for (int i = 0; i < argnames.size(); ++i) {
+ if (i) ret.append(u", "_s);
+ ret.append(argnames[i]);
+ if (!argvalues[i].isEmpty()) {
+ ret.append(u'=');
+ ret.append(argvalues[i]);
}
}
return ret;
diff --git a/rkward/core/rkmodificationtracker.cpp b/rkward/core/rkmodificationtracker.cpp
index d03cd0531..b642eca8f 100644
--- a/rkward/core/rkmodificationtracker.cpp
+++ b/rkward/core/rkmodificationtracker.cpp
@@ -306,40 +306,40 @@ int RKObjectListModel::columnCount (const QModelIndex&) const {
return ColumnCount;
}
-QVariant RKObjectListModel::data (const QModelIndex& index, int role) const {
- RK_TRACE (OBJECTS);
+QVariant RKObjectListModel::data(const QModelIndex& index, int role) const {
+ RK_TRACE(OBJECTS);
- int col = index.column ();
- RObject *object = static_cast<RObject*> (index.internalPointer ());
+ int col = index.column();
+ RObject* object = static_cast<RObject*>(index.internalPointer());
if (!object) {
- RK_ASSERT (object);
- return QVariant ();
+ RK_ASSERT(object);
+ return QVariant();
}
if (role == Qt::DisplayRole) {
- if (col == NameColumn) return object->getShortName ();
- if (col == LabelColumn) return object->getLabel ();
+ if (col == NameColumn) return object->getShortName();
+ if (col == LabelColumn) return object->getLabel();
if (col == TypeColumn) {
- if (object->isVariable ()) return RObject::typeToText (object->getDataType ());
- return QVariant ();
+ if (object->isVariable()) return RObject::typeToText(object->getDataType());
+ return QVariant();
}
- if ((col == ClassColumn) && (!object->isPseudoObject ())) return object->makeClassString (QStringLiteral("; "));
+ if ((col == ClassColumn) && (!object->isPseudoObject())) return object->makeClassString(QStringLiteral("; "));
} else if (role == Qt::FontRole) {
- if (col == NameColumn && object->isPseudoObject ()) {
+ if (col == NameColumn && object->isPseudoObject()) {
QFont font;
- font.setItalic (true);
+ font.setItalic(true);
return (font);
}
} else if (role == Qt::DecorationRole) {
- if (col == NameColumn) return RKStandardIcons::iconForObject (object);
+ if (col == NameColumn) return RKStandardIcons::iconForObject(object);
} else if (role == Qt::ToolTipRole) {
- QString ret = QStringLiteral("<i>") + object->getShortName().replace('<', QLatin1String("<")) + "</i><br>" + object->getObjectDescription();
+ QString ret = u"<i>"_s + object->getShortName().replace(u'<', u"<"_s) + u"</i><br>"_s + object->getObjectDescription();
return ret;
}
- RK_ASSERT (col < columnCount ());
- return QVariant ();
+ RK_ASSERT(col < columnCount());
+ return QVariant();
}
QVariant RKObjectListModel::headerData (int section, Qt::Orientation orientation, int role) const {
diff --git a/rkward/core/rkpseudoobjects.cpp b/rkward/core/rkpseudoobjects.cpp
index a028afc53..4ef0e7bf1 100644
--- a/rkward/core/rkpseudoobjects.cpp
+++ b/rkward/core/rkpseudoobjects.cpp
@@ -22,46 +22,47 @@ RSlotsPseudoObject::~RSlotsPseudoObject () {
pseudo_object_types.remove (this);
}
-QString RSlotsPseudoObject::getFullName (int options) const {
- RK_TRACE (OBJECTS);
+QString RSlotsPseudoObject::getFullName(int options) const {
+ RK_TRACE(OBJECTS);
- return (".rk.get.slots (" + parent->getFullName (options) + ')');
+ return (u".rk.get.slots ("_s + parent->getFullName(options) + u')');
}
QString RSlotsPseudoObject::makeChildName(const QString &short_child_name, int options) const {
- RK_TRACE (OBJECTS);
+ RK_TRACE(OBJECTS);
if (options & ExplicitSlotsExpansion) {
- return (QStringLiteral("slot(") + parent->getFullName (options) + QStringLiteral(", ") + rQuote(short_child_name) + ')');
+ return (u"slot("_s + parent->getFullName(options) + u", "_s + rQuote(short_child_name) + u')');
}
QString safe_name = short_child_name;
- if (irregularShortName (safe_name)) safe_name = rQuote (short_child_name);
- return (parent->getFullName (options) + '@' + safe_name);
+ if (irregularShortName(safe_name)) safe_name = rQuote(short_child_name);
+ return (parent->getFullName(options) + u'@' + safe_name);
}
-RKNamespaceObject::RKNamespaceObject (REnvironmentObject* package, const QString &name) : REnvironmentObject (package, name.isNull () ? QStringLiteral("NAMESPACE") : name) {
- RK_TRACE (OBJECTS);
+RKNamespaceObject::RKNamespaceObject(REnvironmentObject* package, const QString& name)
+ : REnvironmentObject(package, name.isNull() ? u"NAMESPACE"_s : name) {
+ RK_TRACE(OBJECTS);
type |= PseudoObject;
- pseudo_object_types.insert (this, NamespaceObject);
- if (name.isNull ()) namespace_name = package->packageName ();
+ pseudo_object_types.insert(this, NamespaceObject);
+ if (name.isNull()) namespace_name = package->packageName();
else namespace_name = name;
}
-RKNamespaceObject::~RKNamespaceObject () {
- RK_TRACE (OBJECTS);
- pseudo_object_types.remove (this);
+RKNamespaceObject::~RKNamespaceObject() {
+ RK_TRACE(OBJECTS);
+ pseudo_object_types.remove(this);
}
-QString RKNamespaceObject::getFullName (int) const {
- RK_TRACE (OBJECTS);
- return ("asNamespace (" + rQuote (namespace_name) + ')');
+QString RKNamespaceObject::getFullName(int) const {
+ RK_TRACE(OBJECTS);
+ return (u"asNamespace ("_s + rQuote(namespace_name) + u')');
}
QString RKNamespaceObject::makeChildName(const QString& short_child_name, int) const {
- RK_TRACE (OBJECTS);
+ RK_TRACE(OBJECTS);
QString safe_name = short_child_name;
- if (irregularShortName (safe_name)) safe_name = rQuote (short_child_name);
- return (namespace_name + ":::" + safe_name);
+ if (irregularShortName(safe_name)) safe_name = rQuote(short_child_name);
+ return (namespace_name + u":::"_s + safe_name);
}
#include "robjectlist.h"
@@ -79,14 +80,14 @@ RKOrphanNamespacesObject::~RKOrphanNamespacesObject () {
pseudo_object_types.remove (this);
}
-QString RKOrphanNamespacesObject::getFullName (int) const {
- RK_TRACE (OBJECTS);
- return ("loadedNamespaces ()");
+QString RKOrphanNamespacesObject::getFullName(int) const {
+ RK_TRACE(OBJECTS);
+ return u"loadedNamespaces ()"_s;
}
QString RKOrphanNamespacesObject::makeChildName(const QString& short_child_name, int) const {
- RK_TRACE (OBJECTS);
- return ("asNamespace (" + rQuote (short_child_name) + ')');
+ RK_TRACE(OBJECTS);
+ return (u"asNamespace ("_s + rQuote(short_child_name) + u')');
}
void RKOrphanNamespacesObject::updateFromR (RCommandChain* chain) {
diff --git a/rkward/core/rkrownames.cpp b/rkward/core/rkrownames.cpp
index 71cda5fb9..93f107d98 100644
--- a/rkward/core/rkrownames.cpp
+++ b/rkward/core/rkrownames.cpp
@@ -51,32 +51,32 @@ void RKRowNames::beginEdit () {
}
}
-QString RKRowNames::getFullName (int options) const {
-// RK_TRACE (OBJECTS);
+QString RKRowNames::getFullName(int options) const {
+ // RK_TRACE (OBJECTS);
- return ("row.names (" + parent->getFullName (options) + ')');
+ return (u"row.names ("_s + parent->getFullName(options) + u')');
}
-void RKRowNames::writeData (int from_row, int to_row, RCommandChain *chain) {
- RK_TRACE (OBJECTS);
+void RKRowNames::writeData(int from_row, int to_row, RCommandChain *chain) {
+ RK_TRACE(OBJECTS);
- if (isSequential ()) {
- RCommand *command = new RCommand(getFullName(DefaultObjectNameOptions) + " <- NULL", RCommand::App | RCommand::Sync);
+ if (isSequential()) {
+ RCommand *command = new RCommand(getFullName(DefaultObjectNameOptions) + u" <- NULL"_s, RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
RInterface::issueCommand(command, chain);
} else {
// unfortunately, we always need to write the whole data, as row.names<- does not support indexing.
- QString data_string = QStringLiteral("c (");
- for (int row = 0; row < getLength (); ++row) {
+ QString data_string = u"c ("_s;
+ for (int row = 0; row < getLength(); ++row) {
// TODO: use getCharacter and direct setting of vectors.
- data_string.append (getRText (row));
- if (row != (getLength () - 1)) {
- data_string.append (", ");
+ data_string.append(getRText(row));
+ if (row != (getLength() - 1)) {
+ data_string.append(u", "_s);
}
}
- data_string.append (")");
+ data_string.append(u')');
- RCommand* command = new RCommand(getFullName(DefaultObjectNameOptions) + " <- " + data_string, RCommand::App | RCommand::Sync);
+ RCommand *command = new RCommand(getFullName(DefaultObjectNameOptions) + u" <- "_s + data_string, RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
RInterface::issueCommand(command, chain);
}
@@ -84,7 +84,7 @@ void RKRowNames::writeData (int from_row, int to_row, RCommandChain *chain) {
ChangeSet *set = new ChangeSet;
set->from_index = from_row;
set->to_index = to_row;
- RKModificationTracker::instance()->objectDataChanged (this, set);
+ RKModificationTracker::instance()->objectDataChanged(this, set);
}
void RKRowNames::setText (int row, const QString &text) {
@@ -156,7 +156,7 @@ bool RKRowNames::makeUnique (QString *text, bool non_sequentials_only) {
}
// try adjusted text on next iteration
- dummy = *text + '.' + QString::number (i);
+ dummy = *text + u'.' + QString::number(i);
}
RK_ASSERT (false);
diff --git a/rkward/core/rkvariable.cpp b/rkward/core/rkvariable.cpp
index 88b821e7f..59828dc65 100644
--- a/rkward/core/rkvariable.cpp
+++ b/rkward/core/rkvariable.cpp
@@ -76,12 +76,12 @@ void RKVariable::setVarType (RObject::RDataType new_type, bool sync) {
for (int i = list.size () - 1; i >= 0; --i) setText (i, list[i]);
if (sync) {
- QString command = ".rk.set.vector.mode(" + getFullName () + ", ";
- if (new_type == RObject::DataCharacter) command += QLatin1String("as.character");
- else if (new_type == RObject::DataNumeric) command += QLatin1String("as.numeric");
- else if (new_type == RObject::DataLogical) command += QLatin1String("as.logical");
- else if (new_type == RObject::DataFactor) command += QLatin1String("as.factor");
- command += ')';
+ QString command = u".rk.set.vector.mode("_s + getFullName() + u", "_s;
+ if (new_type == RObject::DataCharacter) command += u"as.character"_s;
+ else if (new_type == RObject::DataNumeric) command += u"as.numeric"_s;
+ else if (new_type == RObject::DataLogical) command += u"as.logical"_s;
+ else if (new_type == RObject::DataFactor) command += u"as.factor"_s;
+ command += u')';
RCommand *rcommand = new RCommand(command, RCommand::App | RCommand::Sync);
rcommand->setUpdatesObject(this);
RInterface::issueCommand(rcommand);
@@ -199,7 +199,7 @@ void RKVariable::updateDataFromR (RCommandChain *chain) {
RK_TRACE (OBJECTS);
if (!data) return;
- RCommand *c = new RCommand(".rk.get.vector.data (" + getFullName () + ')', RCommand::App | RCommand::Sync | RCommand::GetStructuredData);
+ RCommand *c = new RCommand(u".rk.get.vector.data ("_s + getFullName() + u')', RCommand::App | RCommand::Sync | RCommand::GetStructuredData);
whenCommandFinished(c, [this](RCommand* command) {
if (!data) return; // this can happen, if the editor is closed while a data update is still queued.
@@ -318,84 +318,84 @@ void RKVariable::restore (RCommandChain *chain) {
writeMetaData (chain);
}
-void RKVariable::writeInvalidFields (QList<int> rows, RCommandChain *chain) {
- RK_TRACE (OBJECTS);
+void RKVariable::writeInvalidFields(QList<int> rows, RCommandChain *chain) {
+ RK_TRACE(OBJECTS);
- if (rows.isEmpty ()) return;
+ if (rows.isEmpty()) return;
QString set;
QString values;
QString clear;
- for (int i = 0; i < rows.size (); ++i) {
+ for (int i = 0; i < rows.size(); ++i) {
int row = rows[i];
- if (data->invalid_fields.contains (row)) {
- if (!set.isEmpty ()) {
- set.append (", ");
- values.append (", ");
+ if (data->invalid_fields.contains(row)) {
+ if (!set.isEmpty()) {
+ set.append(u", "_s);
+ values.append(u", "_s);
}
- set.append (QString::number (row+1));
- values.append (rQuote (data->invalid_fields[row]));
+ set.append(QString::number(row + 1));
+ values.append(rQuote(data->invalid_fields[row]));
} else {
- if (!clear.isEmpty ()) clear.append (", ");
- clear.append (QString::number (row+1));
+ if (!clear.isEmpty()) clear.append(u", "_s);
+ clear.append(QString::number(row + 1));
}
data->cell_states[row] -= (data->cell_states[row] & RKVarEditData::UnsyncedInvalidState);
}
- if (!set.isEmpty ()) {
- set = "set=c(" + set + "), ";
- values = "values=c(" + values + ')';
+ if (!set.isEmpty()) {
+ set = u"set=c("_s + set + u"), "_s;
+ values = u"values=c("_s + values + u')';
}
- if (!clear.isEmpty ()) {
- clear = "clear=c(" + clear + ')';
- if (!values.isEmpty ()) values.append (",");
+ if (!clear.isEmpty()) {
+ clear = u"clear=c("_s + clear + u')';
+ if (!values.isEmpty()) values.append(u',');
}
- RCommand *command = new RCommand(".rk.set.invalid.fields (" + getFullName () + ", " + set + values + clear + ')', RCommand::App | RCommand::Sync);
+ RCommand *command = new RCommand(u".rk.set.invalid.fields ("_s + getFullName() + u", "_s + set + values + clear + u')', RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
RInterface::issueCommand(command, chain);
- if (data->previously_valid != data->invalid_fields.isEmpty ()) {
- data->previously_valid = data->invalid_fields.isEmpty ();
- RKModificationTracker::instance()->objectMetaChanged (this);
+ if (data->previously_valid != data->invalid_fields.isEmpty()) {
+ data->previously_valid = data->invalid_fields.isEmpty();
+ RKModificationTracker::instance()->objectMetaChanged(this);
}
}
-void RKVariable::writeData (int from_row, int to_row, RCommandChain *chain) {
- RK_TRACE (OBJECTS);
+void RKVariable::writeData(int from_row, int to_row, RCommandChain *chain) {
+ RK_TRACE(OBJECTS);
if (from_row == -1) return;
QList<int> changed_invalids;
// TODO: try to sync in correct storage mode
if (from_row == to_row) {
- RCommand *command = new RCommand(getFullName() + '[' + QString::number(from_row+1) + "] <- " + getRText(from_row), RCommand::App | RCommand::Sync);
+ RCommand *command = new RCommand(getFullName() + u'[' + QString::number(from_row + 1) + u"] <- "_s + getRText(from_row), RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
RInterface::issueCommand(command, chain);
- if (data->cell_states[from_row] & RKVarEditData::UnsyncedInvalidState) changed_invalids.append (from_row);
+ if (data->cell_states[from_row] & RKVarEditData::UnsyncedInvalidState) changed_invalids.append(from_row);
} else {
- QString data_string = QStringLiteral("c (");
+ QString data_string = u"c ("_s;
for (int row = from_row; row <= to_row; ++row) {
// TODO: use getCharacter and direct setting of vectors.
- data_string.append (getRText (row));
+ data_string.append(getRText(row));
if (row != to_row) {
- data_string.append (", ");
+ data_string.append(u", "_s);
}
- if (data->cell_states[row] & RKVarEditData::UnsyncedInvalidState) changed_invalids.append (row);
+ if (data->cell_states[row] & RKVarEditData::UnsyncedInvalidState) changed_invalids.append(row);
}
- data_string.append (")");
- RCommand* command = new RCommand(getFullName() + '[' + QString::number(from_row + 1) + ':' + QString::number(to_row + 1) + "] <- " + data_string, RCommand::App | RCommand::Sync);
+ data_string.append(u')');
+ RCommand *command = new RCommand(getFullName() + u'[' + QString::number(from_row + 1) + u':' + QString::number(to_row + 1) + u"] <- "_s + data_string, RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
RInterface::issueCommand(command, chain);
}
- if (!changed_invalids.isEmpty ()) writeInvalidFields (changed_invalids, chain);
+ if (!changed_invalids.isEmpty()) writeInvalidFields(changed_invalids, chain);
- ChangeSet *set = new ChangeSet (from_row, to_row);
- RKModificationTracker::instance()->objectDataChanged (this, set);
+ ChangeSet *set = new ChangeSet(from_row, to_row);
+ RKModificationTracker::instance()->objectDataChanged(this, set);
}
void RKVariable::cellsChanged (int from_row, int to_row) {
@@ -474,24 +474,24 @@ QString RKVariable::getText (int row, bool pretty) const {
return ret;
}
-QString RKVariable::getRText (int row) const {
- RK_TRACE (OBJECTS);
-
- Status cell_state = cellStatus (row);
-
+QString RKVariable::getRText(int row) const {
+ RK_TRACE(OBJECTS);
+
+ Status cell_state = cellStatus(row);
+
if ((cell_state == ValueUnused) || (cell_state == ValueInvalid)) {
- return ("NA");
- } else if (getDataType () == DataFactor) {
- return (rQuote (getText (row, true)));
- } else if (getDataType () == DataCharacter) {
- return (rQuote (getText (row)));
- } else if (getDataType () == DataLogical) {
- RK_ASSERT (!data->cell_doubles.isEmpty ());
- if (data->cell_doubles[row] == 0) return ("FALSE");
- else return ("TRUE");
+ return u"NA"_s;
+ } else if (getDataType() == DataFactor) {
+ return (rQuote(getText(row, true)));
+ } else if (getDataType() == DataCharacter) {
+ return (rQuote(getText(row)));
+ } else if (getDataType() == DataLogical) {
+ RK_ASSERT(!data->cell_doubles.isEmpty());
+ if (data->cell_doubles[row] == 0) return u"FALSE"_s;
+ else return u"TRUE"_s;
} else {
- RK_ASSERT (!data->cell_doubles.isEmpty ());
- return (QString::number (data->cell_doubles[row], 'g', MAX_PRECISION));
+ RK_ASSERT(!data->cell_doubles.isEmpty());
+ return (QString::number(data->cell_doubles[row], 'g', MAX_PRECISION));
}
}
@@ -735,63 +735,63 @@ void RKVariable::updateValueLabels () {
// TODO: find out whether the object is valid after the operation and update accordingly!
}
-void RKVariable::writeValueLabels (RCommandChain *chain) const {
- RK_TRACE (OBJECTS);
- RK_ASSERT (data);
+void RKVariable::writeValueLabels(RCommandChain* chain) const {
+ RK_TRACE(OBJECTS);
+ RK_ASSERT(data);
QString level_string;
if (data->value_labels && (!data->value_labels->isEmpty())) {
int i = 1;
- level_string = QLatin1String("c (");
- while (data->value_labels->contains (QString::number (i))) {
- level_string.append (rQuote ((*(data->value_labels))[QString::number (i)]));
- if (data->value_labels->contains (QString::number (++i))) {
- level_string.append (", ");
+ level_string = u"c ("_s;
+ while (data->value_labels->contains(QString::number(i))) {
+ level_string.append(rQuote((*(data->value_labels))[QString::number(i)]));
+ if (data->value_labels->contains(QString::number(++i))) {
+ level_string.append(u", "_s);
}
}
- level_string.append (")");
+ level_string.append(u')');
} else {
- level_string = QLatin1String("NULL");
+ level_string = u"NULL"_s;
}
- RCommand* command = new RCommand(".rk.set.levels(" + getFullName() + ", " + level_string + ')', RCommand::App | RCommand::Sync);
+ RCommand* command = new RCommand(u".rk.set.levels("_s + getFullName() + u", "_s + level_string + u')', RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
RInterface::issueCommand(command, chain);
}
-QString RKVariable::getValueLabelString () const {
- RK_TRACE (OBJECTS);
- RK_ASSERT (data);
+QString RKVariable::getValueLabelString() const {
+ RK_TRACE(OBJECTS);
+ RK_ASSERT(data);
if (data->value_labels) {
int i = 1;
QString level_string;
- while (data->value_labels->contains (QString::number (i))) {
- level_string.append ((*(data->value_labels))[QString::number (i)]);
- if (data->value_labels->contains (QString::number (++i))) {
- level_string.append ("#,#");
+ while (data->value_labels->contains(QString::number(i))) {
+ level_string.append((*(data->value_labels))[QString::number(i)]);
+ if (data->value_labels->contains(QString::number(++i))) {
+ level_string.append(u"#,#"_s);
}
}
-
+
return level_string;
} else {
- return QString ();
+ return QString();
}
}
-void RKVariable::setValueLabelString (const QString &string) {
- RK_TRACE (OBJECTS);
- RK_ASSERT (data);
+void RKVariable::setValueLabelString(const QString &string) {
+ RK_TRACE(OBJECTS);
+ RK_ASSERT(data);
- ValueLabels new_labels;
- QStringList list = string.split (QStringLiteral("#,#"));
+ ValueLabels new_labels;
+ QStringList list = string.split(u"#,#"_s);
int i = 1;
- for (QStringList::const_iterator it = list.constBegin (); it != list.constEnd (); ++it) {
- new_labels.insert (QString::number (i), *it);
+ for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) {
+ new_labels.insert(QString::number(i), *it);
++i;
}
- setValueLabels (new_labels);
+ setValueLabels(new_labels);
}
RKVariable::FormattingOptions RKVariable::getFormattingOptions () const {
@@ -830,21 +830,21 @@ void RKVariable::setFormattingOptionsString (const QString &string) {
}
// static
-QString RKVariable::formattingOptionsToString (const FormattingOptions& options) {
- RK_TRACE (OBJECTS);
+QString RKVariable::formattingOptionsToString(const FormattingOptions& options) {
+ RK_TRACE(OBJECTS);
QString format_string;
- if (options.alignment != (int) FormattingOptions::AlignDefault) {
- format_string.append ("align:" + QString::number (options.alignment));
+ if (options.alignment != (int)FormattingOptions::AlignDefault) {
+ format_string.append(u"align:"_s + QString::number(options.alignment));
}
- if (options.precision_mode != (int) FormattingOptions::PrecisionDefault) {
- if (!format_string.isEmpty ()) format_string.append ("#");
- format_string.append ("prec:");
- if (options.precision_mode == (int) FormattingOptions::PrecisionRequired) {
- format_string.append ("v");
+ if (options.precision_mode != (int)FormattingOptions::PrecisionDefault) {
+ if (!format_string.isEmpty()) format_string.append(u'#');
+ format_string.append(u"prec:"_s);
+ if (options.precision_mode == (int)FormattingOptions::PrecisionRequired) {
+ format_string.append(u'v');
} else {
- format_string.append (QString::number (options.precision));
+ format_string.append(QString::number(options.precision));
}
}
@@ -852,44 +852,44 @@ QString RKVariable::formattingOptionsToString (const FormattingOptions& options)
}
// static
-RKVariable::FormattingOptions RKVariable::parseFormattingOptionsString (const QString &string) {
- RK_TRACE (OBJECTS);
+RKVariable::FormattingOptions RKVariable::parseFormattingOptionsString(const QString &string) {
+ RK_TRACE(OBJECTS);
FormattingOptions formatting_options;
formatting_options.alignment = FormattingOptions::AlignDefault;
formatting_options.precision_mode = FormattingOptions::PrecisionDefault;
formatting_options.precision = 0;
- QStringList list = string.split ('#', Qt::SkipEmptyParts);
+ QStringList list = string.split(u'#', Qt::SkipEmptyParts);
QString option, parameter;
- for (QStringList::const_iterator it = list.constBegin (); it != list.constEnd (); ++it) {
- option = (*it).section (':', 0, 0);
- parameter = (*it).section (':', 1, 1);
-
- if (parameter.isEmpty ()) continue;
-
- if (option == QLatin1String("align")) {
- int al = parameter.toInt ();
- if ((al >= (int) FormattingOptions::AlignDefault) && (al <= (int) FormattingOptions::AlignRight)) {
- formatting_options.alignment = (FormattingOptions::Alignment) al;
+ for (QStringList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) {
+ option = (*it).section(u':', 0, 0);
+ parameter = (*it).section(u':', 1, 1);
+
+ if (parameter.isEmpty()) continue;
+
+ if (option == "align"_L1) {
+ int al = parameter.toInt();
+ if ((al >= (int)FormattingOptions::AlignDefault) && (al <= (int)FormattingOptions::AlignRight)) {
+ formatting_options.alignment = (FormattingOptions::Alignment)al;
}
- } else if (option == QLatin1String("prec")) {
- if (parameter == QLatin1String("d")) {
+ } else if (option == "prec"_L1) {
+ if (parameter == "d"_L1) {
formatting_options.precision_mode = FormattingOptions::PrecisionDefault;
- } else if (parameter == QLatin1String("v")) {
+ } else if (parameter == "v"_L1) {
formatting_options.precision_mode = FormattingOptions::PrecisionRequired;
} else {
- int digits = parameter.toInt ();
+ int digits = parameter.toInt();
if ((digits >= 0) && (digits <= 15)) {
formatting_options.precision_mode = FormattingOptions::PrecisionFixed;
formatting_options.precision = digits;
}
}
} else {
- RK_ASSERT (false);
+ RK_ASSERT(false);
}
}
-
+
return formatting_options;
}
diff --git a/rkward/core/robject.cpp b/rkward/core/robject.cpp
index 2d4491ebc..63b007846 100644
--- a/rkward/core/robject.cpp
+++ b/rkward/core/robject.cpp
@@ -93,7 +93,7 @@ RObject::~RObject () {
if (hasPseudoObject (RowNamesObject)) delete rownames_objects.take (this);
}
-bool RObject::irregularShortName (const QString &name) {
+bool RObject::irregularShortName(const QString &name) {
// no trace
const int len = name.length();
for (int i = 0; i < len; ++i) {
@@ -101,32 +101,32 @@ bool RObject::irregularShortName (const QString &name) {
// letters are allowed anywhere in the name
// underscore is allowed, but not as the first character
// dot, and digits are allowed, too unless they make the name start with a number (or with ...)
- if(c.isLetter()) continue;
- if(!i) {
- if(c.isDigit()) return true;
- if(c == '.') {
- if(len > 1 && name[1].isDigit()) return true;
- if(name == QStringLiteral("...")) return true;
+ if (c.isLetter()) continue;
+ if (!i) {
+ if (c.isDigit()) return true;
+ if (c == u'.') {
+ if (len > 1 && name[1].isDigit()) return true;
+ if (name == "..."_L1) return true;
continue;
}
} else {
- if(c.isDigit()) continue;
- if(c == '.') continue;
- if(c == '_') continue;
+ if (c.isDigit()) continue;
+ if (c == u'.') continue;
+ if (c == u'_') continue;
}
return true;
}
- return(false);
+ return (false);
}
-QString RObject::getFullName (int options) const {
- RK_TRACE (OBJECTS);
+QString RObject::getFullName(int options) const {
+ RK_TRACE(OBJECTS);
return parent->makeChildName(RObject::name, options);
}
-QString RObject::getLabel () const {
- RK_TRACE (OBJECTS);
- return getMetaProperty (QStringLiteral("label"));
+QString RObject::getLabel() const {
+ RK_TRACE(OBJECTS);
+ return getMetaProperty(u"label"_s);
}
RObject::ObjectList RObject::findObjects (const QStringList &path, bool partial, const QString &op) {
@@ -144,62 +144,62 @@ QString RObject::getMetaProperty (const QString &id) const {
return QString ();
}
-QString RObject::getDescription () const {
- RK_TRACE (OBJECTS);
+QString RObject::getDescription() const {
+ RK_TRACE(OBJECTS);
if (meta_map) {
- QString label = meta_map->value (QStringLiteral("label"));
- if (!label.isEmpty ()) return (getShortName () + " (" + label + ')');
+ QString label = meta_map->value(u"label"_s);
+ if (!label.isEmpty()) return (getShortName() + u" ("_s + label + u')');
+ }
+ return getShortName();
+}
+
+QString RObject::getObjectDescription() const {
+ RK_TRACE(OBJECTS);
+
+#define ESCS replace(u'<', u"<"_s)
+
+ QString ret = u"<b>"_s + i18n("Full location:") + u" </b>"_s + getFullName().ESCS;
+ QString lab = getLabel();
+ if (!lab.isEmpty()) ret.append(u"<br><b>"_s + i18n("Label:") + u" </b>"_s + lab.ESCS);
+ ret.append(u"<br><b>"_s + i18n("Type:") + u" </b>"_s);
+
+ if (isType(Function)) {
+ ret.append(i18n("Function"));
+ ret.append(u"<br><b>"_s + i18n("Usage: ") + u" </b>"_s + getShortName().ESCS + u'(' + static_cast<const RFunctionObject *>(this)->printArgs().ESCS + u')');
+ } else if (isType(DataFrame)) {
+ ret.append(i18n("Data frame"));
+ } else if (isType(Array)) {
+ ret.append(i18n("Array"));
+ } else if (isType(Matrix)) {
+ ret.append(i18n("Matrix"));
+ } else if (isType(List)) {
+ ret.append(i18n("List"));
+ } else if (isType(Variable)) {
+ ret.append(i18nc("Noun; in brackets, data type of the var is stated", "Variable (%1)", typeToText(getDataType())));
+ } else if (isType(Environment)) {
+ ret.append(i18n("Environment"));
}
- return getShortName ();
-}
-
-QString RObject::getObjectDescription () const {
- RK_TRACE (OBJECTS);
-
-#define ESCS replace ('<', "<")
- QString ret = "<b>" + i18n("Full location:") + " </b>" + getFullName().ESCS;
- QString lab = getLabel ();
- if (!lab.isEmpty ()) ret.append ("<br><b>" + i18n ("Label:") + " </b>" + lab.ESCS);
- ret.append ("<br><b>" + i18n ("Type:") + " </b>");
-
- if (isType (Function)) {
- ret.append (i18n ("Function"));
- ret.append ("<br><b>" + i18n ("Usage: ") + " </b>" + getShortName ().ESCS + '(' + static_cast<const RFunctionObject *> (this)->printArgs ().ESCS + ')');
- } else if (isType (DataFrame)) {
- ret.append (i18n ("Data frame"));
- } else if (isType (Array)) {
- ret.append (i18n ("Array"));
- } else if (isType (Matrix)) {
- ret.append (i18n ("Matrix"));
- } else if (isType (List)) {
- ret.append (i18n ("List"));
- } else if (isType (Variable)) {
- ret.append(i18nc("Noun; in brackets, data type of the var is stated", "Variable (%1)", typeToText(getDataType())));
- } else if (isType (Environment)) {
- ret.append (i18n ("Environment"));
- }
-
- if (isType (Container | Variable)) {
- if (dimensions.size () == 1) {
- ret.append ("<br><b>" + i18n ("Length: ") + " </b>" + QString::number (dimensions[0]));
- } else if (dimensions.size () > 1) {
- ret.append ("<br><b>" + i18n ("Dimensions: ") + " </b>");
- for (int i=0; i < dimensions.size (); ++i) {
- if (i) ret.append (", ");
- ret.append (QString::number (dimensions[i]));
+ if (isType(Container | Variable)) {
+ if (dimensions.size() == 1) {
+ ret.append(u"<br><b>"_s + i18n("Length: ") + u" </b>"_s + QString::number(dimensions[0]));
+ } else if (dimensions.size() > 1) {
+ ret.append(u"<br><b>"_s + i18n("Dimensions: ") + u" </b>"_s);
+ for (int i = 0; i < dimensions.size(); ++i) {
+ if (i) ret.append(u", "_s);
+ ret.append(QString::number(dimensions[i]));
}
}
}
- if (!isType(Function)) ret.append("<br><b>" + i18n("Class(es):") + " </b>" + makeClassString(QStringLiteral(",")).ESCS);
+ if (!isType(Function)) ret.append(u"<br><b>"_s + i18n("Class(es):") + u" </b>"_s + makeClassString(u","_s).ESCS);
return ret;
}
-void RObject::setLabel (const QString &value, bool sync) {
- RK_TRACE (OBJECTS);
- setMetaProperty (QStringLiteral("label"), value, sync);
+void RObject::setLabel(const QString &value, bool sync) {
+ RK_TRACE(OBJECTS);
+ setMetaProperty(u"label"_s, value, sync);
}
void RObject::setMetaProperty (const QString &id, const QString &value, bool sync) {
@@ -230,76 +230,85 @@ bool RObject::inherits (const QString &class_name) const {
}
QString RObject::makeChildName(const QString &short_child_name, int options) const {
- RK_TRACE (OBJECTS);
+ RK_TRACE(OBJECTS);
if (options & DollarExpansion) {
- if (irregularShortName (short_child_name)) return (getFullName (options) + '$' + rQuote (short_child_name));
- return (getFullName (options) + '$' + short_child_name); // Do not return list$"member", unless necessary
+ if (irregularShortName(short_child_name)) return (getFullName(options) + u'$' + rQuote(short_child_name));
+ return (getFullName(options) + u'$' + short_child_name); // Do not return list$"member", unless necessary
}
- return (getFullName (options) + "[[" + rQuote (short_child_name) + "]]");
+ return (getFullName(options) + u"[["_s + rQuote(short_child_name) + u"]]"_s);
}
-void RObject::writeMetaData (RCommandChain *chain) {
- RK_TRACE (OBJECTS);
+void RObject::writeMetaData(RCommandChain *chain) {
+ RK_TRACE(OBJECTS);
if (!meta_map) return;
QString map_string;
- if (meta_map->isEmpty ()) {
- map_string.append ("NULL");
+ if (meta_map->isEmpty()) {
+ map_string.append(u"NULL"_s);
- delete meta_map; // now that it is synced, delete it
+ delete meta_map; // now that it is synced, delete it
meta_map = nullptr;
} else {
- for (MetaMap::const_iterator it = meta_map->constBegin (); it != meta_map->constEnd (); ++it) {
- if (!map_string.isEmpty ()) map_string.append (", ");
- map_string.append (rQuote (it.key ()) + '=' + rQuote (it.value ()));
+ for (MetaMap::const_iterator it = meta_map->constBegin(); it != meta_map->constEnd(); ++it) {
+ if (!map_string.isEmpty()) map_string.append(u", "_s);
+ map_string.append(rQuote(it.key()) + u'=' + rQuote(it.value()));
}
- map_string = "c (" + map_string + ')';
+ map_string = u"c ("_s + map_string + u')';
}
- RCommand *command = new RCommand (".rk.set.meta (" + getFullName () + ", " + map_string + ')', RCommand::App | RCommand::Sync);
+ RCommand *command = new RCommand(u".rk.set.meta ("_s + getFullName() + u", "_s + map_string + u')', RCommand::App | RCommand::Sync);
command->setUpdatesObject(this);
- RInterface::issueCommand (command, chain);
+ RInterface::issueCommand(command, chain);
}
-void RObject::updateFromR (RCommandChain *chain) {
- RK_TRACE (OBJECTS);
+void RObject::updateFromR(RCommandChain *chain) {
+ RK_TRACE(OBJECTS);
QString commandstring;
- if (parentObject () == RObjectList::getGlobalEnv ()) {
-// We handle objects directly in .GlobalEnv differently. That's to avoid forcing promises, when addressing the object directly. In the long run, .rk.get.structure should be reworked to simply not need the value-argument in any case.
- commandstring = ".rk.get.structure.global (" + rQuote (getShortName ()) + ')';
+ if (parentObject() == RObjectList::getGlobalEnv()) {
+ // We handle objects directly in .GlobalEnv differently. That's to avoid forcing promises, when addressing the object directly. In the long run,
+ // .rk.get.structure should be reworked to simply not need the value-argument in any case.
+ commandstring = u".rk.get.structure.global ("_s + rQuote(getShortName()) + u')';
} else if (isType(Environment)) {
- REnvironmentObject *env = static_cast<REnvironmentObject*>(this);
+ REnvironmentObject *env = static_cast<REnvironmentObject *>(this);
if (isType(PackageEnv) && RKSettingsModuleObjectBrowser::isPackageBlacklisted(env->packageName())) {
[suppressed due to size limit]
+ KMessageBox::information(
+ nullptr,
+ i18n("The package '%1' (probably you just loaded it) is currently blacklisted for retrieving structure information. Practically this means, "
+ "the objects in this package will not appear in the object browser, and there will be no object name completion or function argument "
+ "hinting for objects in this package.\nPackages will typically be blacklisted, if they contain huge amount of data, that would take too "
+ "long to load. To unlist the package, visit Settings->Configure RKWard->Workspace.",
+ env->packageName()),
+ i18n("Package blacklisted"), u"packageblacklist"_s + env->packageName());
return;
}
- commandstring = ".rk.get.structure (" + getFullName(DefaultObjectNameOptions) + ", " + rQuote(getShortName());
- if (isType(GlobalEnv)) commandstring += QLatin1String(", envlevel=-1"); // in the .GlobalEnv recurse one more level
- if (isType(PackageEnv)) commandstring += ", namespacename=" + rQuote(env->packageName());
- commandstring += ')';
+ commandstring = u".rk.get.structure ("_s + getFullName(DefaultObjectNameOptions) + u", "_s + rQuote(getShortName());
+ if (isType(GlobalEnv)) commandstring += u", envlevel=-1"_s; // in the .GlobalEnv recurse one more level
+ if (isType(PackageEnv)) commandstring += u", namespacename="_s + rQuote(env->packageName());
+ commandstring += u')';
} else {
-// This is the less common branch, but we do call .rk.get.structure on sub-object, e.g. when fetching more levels in the Workspace Browser, or when calling rk.sync(), explicitly
- commandstring = ".rk.get.structure (" + getFullName () + ", " + rQuote (getShortName ()) + ')';
+ // This is the less common branch, but we do call .rk.get.structure on sub-object, e.g. when fetching more levels in the Workspace Browser, or when
+ // calling rk.sync(), explicitly
+ commandstring = u".rk.get.structure ("_s + getFullName() + u", "_s + rQuote(getShortName()) + u')';
}
RCommand *command = new RCommand(commandstring, RCommand::App | RCommand::Sync | RCommand::GetStructuredData);
- whenCommandFinished(command, [this](RCommand* command) {
- if (command->failed ()) {
- RK_DEBUG (OBJECTS, DL_INFO, "command failed while trying to update object '%s'. No longer present?", getShortName ().toLatin1 ().data ());
+ whenCommandFinished(command, [this](RCommand *command) {
+ if (command->failed()) {
+ RK_DEBUG(OBJECTS, DL_INFO, "command failed while trying to update object '%s'. No longer present?", getShortName().toLatin1().data());
// this may happen, if the object has been removed in the workspace in between
RKModificationTracker::instance()->removeObject(this, nullptr, true);
return;
}
if (parent && parent->isContainer()) {
- static_cast<RContainerObject*>(parent)->updateChildStructure(this, command); // this may result in a delete, so nothing after this!
+ static_cast<RContainerObject *>(parent)->updateChildStructure(this, command); // this may result in a delete, so nothing after this!
} else {
- updateStructure(command); // no (container) parent can happen for RObjectList and pseudo objects
+ updateStructure(command); // no (container) parent can happen for RObjectList and pseudo objects
}
});
RInterface::issueCommand(command, chain);
- type |= Updating; // will be cleared, implicitly, when the new structure gets set
+ type |= Updating; // will be cleared, implicitly, when the new structure gets set
}
void RObject::fetchMoreIfNeeded (int levels) {
@@ -700,78 +709,78 @@ QString RObject::rQuote (const QString &string) {
return (RKRSharedFunctionality::quote (string));
}
-//static
-QStringList RObject::parseObjectPath (const QString &path) {
- RK_TRACE (OBJECTS);
+// static
+QStringList RObject::parseObjectPath(const QString &path) {
+ RK_TRACE(OBJECTS);
QStringList ret;
QString fragment;
- int end = path.length ();
+ int end = path.length();
QChar quote_char;
bool escaped = false;
bool seek_bracket_end = false;
for (int i = 0; i < end; ++i) {
- QChar c = path.at (i);
- if (quote_char.isNull ()) {
- if (c == '\'' || c == '\"' || c == '`') {
+ QChar c = path.at(i);
+ if (quote_char.isNull()) {
+ if (c == u'\'' || c == u'\"' || c == u'`') {
quote_char = c;
} else {
if (!seek_bracket_end) {
- if (c == '$') {
- ret.append (fragment);
- ret.append (QStringLiteral("$"));
- fragment.clear ();
- } else if (c == '[') {
- ret.append (fragment);
- ret.append (QStringLiteral("$"));
- fragment.clear ();
- if ((i+1 < end) && (path.at (i+1) == '[')) ++i;
+ if (c == u'$') {
+ ret.append(fragment);
+ ret.append(u"$"_s);
+ fragment.clear();
+ } else if (c == u'[') {
+ ret.append(fragment);
+ ret.append(u"$"_s);
+ fragment.clear();
+ if ((i + 1 < end) && (path.at(i + 1) == u'[')) ++i;
seek_bracket_end = true;
- } else if (c == ':') {
- ret.append (fragment);
- if ((i+1 < end) && (path.at (i+1) == ':')) ++i;
- if ((i+1 < end) && (path.at (i+1) == ':')) {
+ } else if (c == u':') {
+ ret.append(fragment);
+ if ((i + 1 < end) && (path.at(i + 1) == u':')) ++i;
+ if ((i + 1 < end) && (path.at(i + 1) == u':')) {
++i;
- ret.append (QStringLiteral(":::"));
- } else ret.append (QStringLiteral("::"));
- fragment.clear ();
- } else if (c == '@') {
- ret.append (fragment);
- ret.append (QStringLiteral("@"));
- fragment.clear ();
+ ret.append(u":::"_s);
+ } else ret.append(u"::"_s);
+ fragment.clear();
+ } else if (c == u'@') {
+ ret.append(fragment);
+ ret.append(u"@"_s);
+ fragment.clear();
} else {
- fragment.append (c);
+ fragment.append(c);
}
} else {
- if (c == ']') {
- if ((i+1 < end) && (path.at (i+1) == ']')) ++i;
+ if (c == u']') {
+ if ((i + 1 < end) && (path.at(i + 1) == u']')) ++i;
seek_bracket_end = false;
continue;
} else {
- fragment.append (c);
+ fragment.append(c);
}
}
}
- } else { // inside a quote
- if (c == '\\') escaped = !escaped;
+ } else { // inside a quote
+ if (c == u'\\') escaped = !escaped;
else {
if (escaped) {
- if (c == 't') fragment.append ('\t');
- else if (c == 'n') fragment.append ('\n');
- else fragment.append ('\\' + c);
+ if (c == u't') fragment.append(u'\t');
+ else if (c == u'n') fragment.append(u'\n');
+ else fragment.append(u'\\' + c);
} else {
if (c == quote_char) {
- quote_char = QChar ();
+ quote_char = QChar();
} else {
- fragment.append (c);
+ fragment.append(c);
}
}
}
}
}
- if (!fragment.isEmpty ()) ret.append (fragment);
- RK_DEBUG (OBJECTS, DL_DEBUG, "parsed object path %s into %s", qPrintable (path), qPrintable (ret.join ("-")));
+ if (!fragment.isEmpty()) ret.append(fragment);
+ RK_DEBUG(OBJECTS, DL_DEBUG, "parsed object path %s into %s", qPrintable(path), qPrintable(ret.join(u"-"_s)));
return ret;
}
diff --git a/rkward/core/robject.h b/rkward/core/robject.h
index 491e1bd81..a8d041727 100644
--- a/rkward/core/robject.h
+++ b/rkward/core/robject.h
@@ -24,6 +24,8 @@ class RData;
class RObjectLifeTimeGuard;
class RCommand;
+using namespace Qt::Literals::StringLiterals;
+
/**
Base class for representations of objects in the R-workspace. RObject is never used directly (contains pure virtual functions).
diff --git a/rkward/core/robjectlist.cpp b/rkward/core/robjectlist.cpp
index 754cf9bdf..386a546ef 100644
--- a/rkward/core/robjectlist.cpp
+++ b/rkward/core/robjectlist.cpp
@@ -93,7 +93,7 @@ QStringList RObjectList::detachPackages (const QStringList &packages, RCommandCh
}
}
for (int i = 0; i < remove.size (); ++i) {
- RCommand *command = new RCommand ("detach (" + rQuote (remove[i]) + ')', RCommand::App | RCommand::ObjectListUpdate);
+ RCommand *command = new RCommand(u"detach ("_s + rQuote(remove[i]) + u')', RCommand::App | RCommand::ObjectListUpdate);
if (control) control->addRCommand (command);
RInterface::issueCommand (command, chain);
@@ -173,7 +173,7 @@ void RObjectList::updateEnvironments (const QStringList &_env_names, bool force_
QStringList env_names = _env_names;
if (!env_names.isEmpty ()) {
QString dummy = env_names.takeFirst ();
- RK_ASSERT (dummy == ".GlobalEnv");
+ RK_ASSERT(dummy == ".GlobalEnv"_L1);
if (force_globalenv_update) {
// for now, we only update the .GlobalEnv. All others we assume to be static
getGlobalEnv ()->updateFromR (update_chain);
@@ -235,32 +235,32 @@ REnvironmentObject *RObjectList::createTopLevelEnvironment (const QString &name)
return envobj;
}
-RObject::ObjectList RObjectList::findObjects (const QStringList &path, bool partial, const QString &op) {
- RK_TRACE (OBJECTS);
- RK_ASSERT (op == "$");
+RObject::ObjectList RObjectList::findObjects(const QStringList &path, bool partial, const QString &op) {
+ RK_TRACE(OBJECTS);
+ RK_ASSERT(op == "$"_L1);
RObject::ObjectList ret;
- if (path.value (1) == QLatin1String("::")) {
- RObject *environment = findPackage (path[0]);
- if (environment) return (environment->findObjects (path.mid (2), partial, QStringLiteral("$")));
+ if (path.value(1) == "::"_L1) {
+ RObject *environment = findPackage(path[0]);
+ if (environment) return (environment->findObjects(path.mid(2), partial, u"$"_s));
return ret;
- } else if (path.value (1) == QLatin1String(":::")) {
- RObject *environment = findPackage (path[0]);
- if (environment) environment = static_cast<REnvironmentObject*> (environment)->namespaceEnvironment ();
- if (!environment) environment = orphan_namespaces->findOrphanNamespace (path[0]);
- if (environment) return (environment->findObjects (path.mid (2), partial, QStringLiteral("$")));
+ } else if (path.value(1) == ":::"_L1) {
+ RObject *environment = findPackage(path[0]);
+ if (environment) environment = static_cast<REnvironmentObject *>(environment)->namespaceEnvironment();
+ if (!environment) environment = orphan_namespaces->findOrphanNamespace(path[0]);
+ if (environment) return (environment->findObjects(path.mid(2), partial, u"$"_s));
return ret;
- } else if (path.value (0) == QLatin1String(".GlobalEnv")) {
- if (path.length () > 1) return getGlobalEnv ()->findObjects (path.mid (2), partial, QStringLiteral("$"));
+ } else if (path.value(0) == ".GlobalEnv"_L1) {
+ if (path.length() > 1) return getGlobalEnv()->findObjects(path.mid(2), partial, u"$"_s);
// else we'll find base::.GlobalEnv, below
}
// no namespace given. Search all environments for matches, .GlobalEnv, first
- ret = getGlobalEnv ()->findObjects (path, partial, QStringLiteral("$"));
- for (int i = 0; i < childmap.size (); ++i) {
- if (!(partial || ret.isEmpty ())) return ret;
+ ret = getGlobalEnv()->findObjects(path, partial, u"$"_s);
+ for (int i = 0; i < childmap.size(); ++i) {
+ if (!(partial || ret.isEmpty())) return ret;
- ret.append (childmap[i]->findObjects (path, partial, QStringLiteral("$")));
+ ret.append(childmap[i]->findObjects(path, partial, u"$"_s));
}
return ret;
}
@@ -311,16 +311,14 @@ bool RObjectList::updateStructure (RData *) {
return true;
}
-QString RObjectList::renameChildCommand (RObject *object, const QString &new_name) const {
- RK_TRACE (OBJECTS);
+QString RObjectList::renameChildCommand(RObject *object, const QString &new_name) const {
+ RK_TRACE(OBJECTS);
- return (makeChildName(new_name, IncludeEnvirIfNotGlobalEnv) + " <- " + object->getFullName() + '\n' + removeChildCommand(object));
+ return (makeChildName(new_name, IncludeEnvirIfNotGlobalEnv) + u" <- "_s + object->getFullName() + u'\n' + removeChildCommand(object));
}
-QString RObjectList::removeChildCommand (RObject *object) const {
- RK_TRACE (OBJECTS);
+QString RObjectList::removeChildCommand(RObject *object) const {
+ RK_TRACE(OBJECTS);
- return ("remove (" + object->getFullName () + ')');
+ return (u"remove ("_s + object->getFullName() + u')');
}
-
-
More information about the rkward-tracker
mailing list