logic: fixed tooltip text encoding and source locations
also removed duplicate of utilityString from lib
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user