logic: fixed tooltip text encoding and source locations

also removed duplicate of utilityString from lib
This commit is contained in:
mlangkabel
2018-03-02 12:45:36 +01:00
parent 0a1c1250dd
commit 73fd3a7212
9 changed files with 63 additions and 742 deletions
+5 -5
View File
@@ -27,6 +27,7 @@ QtCodeField::QtCodeField(
uint startLineNumber,
const std::string& code,
std::shared_ptr<SourceLocationFile> locationFile,
bool convertLocationsOnDemand,
QWidget* parent
)
: QPlainTextEdit(parent)
@@ -50,14 +51,14 @@ QtCodeField::QtCodeField(
}
TextCodec codec(ApplicationSettings::getInstance()->getTextEncoding().c_str());
if (codec.isValid())
if (convertLocationsOnDemand && codec.isValid())
{
QString convertedDisplayCode = QString::fromStdWString(codec.decode(displayCode));
setPlainText(convertedDisplayCode);
if (displayCode.size() != size_t(convertedDisplayCode.length()))
{
LOG_INFO("Converting displayed code to " + codec.getName() + " resulted in offset of source locations. Correcting this now.");
createMultibyteCharacterLocationCache();
createMultibyteCharacterLocationCache(convertedDisplayCode);
}
}
else
@@ -651,15 +652,14 @@ void QtCodeField::createLineLengthCache()
}
}
void QtCodeField::createMultibyteCharacterLocationCache()
void QtCodeField::createMultibyteCharacterLocationCache(const QString& code)
{
m_multibyteCharacterLocations.clear();
QTextCodec* codec = QTextCodec::codecForName(ApplicationSettings::getInstance()->getTextEncoding().c_str());
for (QTextBlock itLine = document()->begin(); itLine != document()->end(); itLine = itLine.next())
for (const QString& line: code.split("\n"))
{
std::vector<std::pair<int, int>> columnsToOffsets;
const QString line = itLine.text();
for (int i = 0; i < line.size(); i++)
{
if (line[i].unicode() > 127)
+4 -2
View File
@@ -25,7 +25,9 @@ public:
uint startLineNumber,
const std::string& code,
std::shared_ptr<SourceLocationFile> locationFile,
QWidget* parent = nullptr);
bool convertLocationsOnDemand = true,
QWidget* parent = nullptr);
~QtCodeField();
virtual QSize sizeHint() const Q_DECL_OVERRIDE;
@@ -105,7 +107,7 @@ private:
static std::vector<AnnotationColor> s_annotationColors;
void createLineLengthCache();
void createMultibyteCharacterLocationCache();
void createMultibyteCharacterLocationCache(const QString& code);
int getColumnCorrectedForMultibyteCharacters(int line, int column) const;
const uint m_startLineNumber;
+7 -3
View File
@@ -11,6 +11,8 @@
#include "data/location/SourceLocationFile.h"
#include "data/tooltip/TooltipInfo.h"
#include "qt/element/QtCodeField.h"
#include "settings/ApplicationSettings.h"
#include "utility/TextCodec.h"
QtTooltip::QtTooltip(QWidget* parent)
: QFrame(parent)
@@ -32,14 +34,16 @@ QtTooltip::~QtTooltip()
void QtTooltip::setTooltipInfo(TooltipInfo info)
{
if (info.title.size())
if (!info.title.empty())
{
addTitle(QString::fromStdWString(info.title), info.count, info.countText.c_str());
}
for (TooltipSnippet& snippet : info.snippets)
for (const TooltipSnippet& snippet : info.snippets)
{
QtCodeField* field = new QtCodeField(1, snippet.code, snippet.locationFile);
const TextCodec codec(ApplicationSettings::getInstance()->getTextEncoding());
QtCodeField* field = new QtCodeField(1, codec.encode(snippet.code), snippet.locationFile, false);
QSize size = field->sizeHint() + QSize(15, 5);
if (size.width() > 600)