work save: header completion suggestion done
This commit is contained in:
parent
f1ae5bfdfd
commit
7207994d57
|
@ -3,6 +3,7 @@ QT += core gui
|
|||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++17
|
||||
CONFIG += nokey
|
||||
|
||||
QMAKE_CXXFLAGS_RELEASE += -Werror=return-type
|
||||
QMAKE_CXXFLAGS_DEBUG += -Werror=return-type
|
||||
|
|
|
@ -91,7 +91,7 @@ int Compiler::getLineNumberFromOutputLine(QString &line)
|
|||
pos = line.indexOf(',');
|
||||
}
|
||||
if (pos>=0) {
|
||||
result = line.mid(0,pos).toInt();
|
||||
result = line.midRef(0,pos).toInt();
|
||||
if (result > 0)
|
||||
line.remove(0,pos+1);
|
||||
}
|
||||
|
@ -107,7 +107,7 @@ int Compiler::getColunmnFromOutputLine(QString &line)
|
|||
pos = line.indexOf(',');
|
||||
}
|
||||
if (pos>=0) {
|
||||
result = line.mid(0,pos).toInt();
|
||||
result = line.midRef(0,pos).toInt();
|
||||
if (result > 0)
|
||||
line.remove(0,pos+1);
|
||||
}
|
||||
|
@ -154,7 +154,6 @@ void Compiler::processOutput(QString &line)
|
|||
QString inFilePrefix = QString("In file included from ");
|
||||
QString fromPrefix = QString("from ");
|
||||
PCompileIssue issue = std::make_shared<CompileIssue>();
|
||||
QString description;
|
||||
issue->type = CompileIssueType::Other;
|
||||
issue->endColumn = -1;
|
||||
if (line.startsWith(inFilePrefix)) {
|
||||
|
@ -252,8 +251,7 @@ QString Compiler::getCharsetArgument(const QByteArray& encoding)
|
|||
encodingName = encoding;
|
||||
}
|
||||
result += QString(" -finput-charset=%1 -fexec-charset=%2")
|
||||
.arg(encodingName)
|
||||
.arg(systemEncodingName);
|
||||
.arg(encodingName,systemEncodingName);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
@ -265,7 +263,7 @@ QString Compiler::getCCompileArguments(bool checkSyntax)
|
|||
result += " -fsyntax-only";
|
||||
}
|
||||
|
||||
for (PCompilerOption pOption: compilerSet()->options()) {
|
||||
foreach (const PCompilerOption& pOption, compilerSet()->options()) {
|
||||
if (pOption->value > 0 && pOption->isC) {
|
||||
if (pOption->choices.isEmpty()) {
|
||||
result += " " + pOption->setting;
|
||||
|
@ -291,7 +289,7 @@ QString Compiler::getCppCompileArguments(bool checkSyntax)
|
|||
result += " -fsyntax-only";
|
||||
}
|
||||
|
||||
for (PCompilerOption pOption: compilerSet()->options()) {
|
||||
foreach (const PCompilerOption& pOption, compilerSet()->options()) {
|
||||
if (pOption->value > 0 && pOption->isCpp) {
|
||||
if (pOption->choices.isEmpty()) {
|
||||
result += " "+pOption->setting;
|
||||
|
@ -314,7 +312,7 @@ QString Compiler::getCppCompileArguments(bool checkSyntax)
|
|||
QString Compiler::getCIncludeArguments()
|
||||
{
|
||||
QString result;
|
||||
for (const QString& folder:compilerSet()->CIncludeDirs()) {
|
||||
foreach (const QString& folder,compilerSet()->CIncludeDirs()) {
|
||||
result += QString(" -I\"%1\"").arg(folder);
|
||||
}
|
||||
return result;
|
||||
|
@ -323,7 +321,7 @@ QString Compiler::getCIncludeArguments()
|
|||
QString Compiler::getCppIncludeArguments()
|
||||
{
|
||||
QString result;
|
||||
for (const QString& folder:compilerSet()->CppIncludeDirs()) {
|
||||
foreach (const QString& folder,compilerSet()->CppIncludeDirs()) {
|
||||
result += QString(" -I\"%1\"").arg(folder);
|
||||
}
|
||||
return result;
|
||||
|
@ -333,7 +331,7 @@ QString Compiler::getLibraryArguments()
|
|||
{
|
||||
QString result;
|
||||
|
||||
for (const QString& folder:compilerSet()->libDirs()) {
|
||||
foreach (const QString& folder, compilerSet()->libDirs()) {
|
||||
result += QString(" -L\"%1\"").arg(folder);
|
||||
}
|
||||
|
||||
|
@ -343,7 +341,7 @@ QString Compiler::getLibraryArguments()
|
|||
}
|
||||
|
||||
//options like "-static" must be added after "-lxxx"
|
||||
for (PCompilerOption pOption: compilerSet()->options()) {
|
||||
foreach (const PCompilerOption& pOption, compilerSet()->options()) {
|
||||
if (pOption->value > 0 && pOption->isLinker) {
|
||||
if (pOption->choices.isEmpty()) {
|
||||
result += " " + pOption->setting;
|
||||
|
@ -377,7 +375,7 @@ void Compiler::runCommand(const QString &cmd, const QString &arguments, const Q
|
|||
process.connect(&process, &QProcess::readyReadStandardOutput,[&process,this](){
|
||||
this->log(QString::fromLocal8Bit( process.readAllStandardOutput()));
|
||||
});
|
||||
process.connect(&process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),[&process,this](){
|
||||
process.connect(&process, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),[this](){
|
||||
this->error(COMPILE_PROCESS_END);
|
||||
});
|
||||
process.start();
|
||||
|
|
|
@ -29,15 +29,17 @@ using namespace std;
|
|||
|
||||
SaveException::SaveException(const QString& reason) {
|
||||
mReason = reason;
|
||||
mReasonBuffer = mReason.toLocal8Bit();
|
||||
}
|
||||
SaveException::SaveException(const QString&& reason) {
|
||||
mReason = reason;
|
||||
mReasonBuffer = mReason.toLocal8Bit();
|
||||
}
|
||||
const QString& SaveException::reason() const noexcept{
|
||||
return mReason;
|
||||
}
|
||||
const char *SaveException::what() const noexcept {
|
||||
return mReason.toLocal8Bit();
|
||||
const char* SaveException::what() const noexcept {
|
||||
return mReasonBuffer;
|
||||
}
|
||||
|
||||
int Editor::newfileCount=0;
|
||||
|
@ -98,6 +100,7 @@ Editor::Editor(QWidget *parent, const QString& filename,
|
|||
initParser();
|
||||
}
|
||||
mCompletionPopup = std::make_shared<CodeCompletionPopup>();
|
||||
mHeaderCompletionPopup = std::make_shared<HeaderCompletionPopup>();
|
||||
|
||||
applySettings();
|
||||
applyColorScheme(pSettings->editor().colorScheme());
|
||||
|
@ -255,8 +258,8 @@ void Editor::undoSymbolCompletion(int pos)
|
|||
|
||||
if (pos<0 || pos+1>=lineText().length())
|
||||
return;
|
||||
QChar DeletedChar = lineText()[pos];
|
||||
QChar NextChar = lineText()[pos+1];
|
||||
QChar DeletedChar = lineText().at(pos);
|
||||
QChar NextChar = lineText().at(pos+1);
|
||||
if ((tokenType == SynHighlighterTokenType::Character) && (DeletedChar != '\''))
|
||||
return;
|
||||
if (tokenType == SynHighlighterTokenType::StringEscapeSequence)
|
||||
|
@ -454,7 +457,7 @@ void Editor::onGutterPaint(QPainter &painter, int aLine, int X, int Y)
|
|||
PSyntaxIssueList lst = getSyntaxIssuesAtLine(aLine);
|
||||
if (lst) {
|
||||
bool hasError=false;
|
||||
for (PSyntaxIssue issue : *lst) {
|
||||
for (const PSyntaxIssue& issue : *lst) {
|
||||
if (issue->issueType == CompileIssueType::Error) {
|
||||
hasError = true;
|
||||
break;;
|
||||
|
@ -488,7 +491,7 @@ void Editor::onGetEditingAreas(int Line, SynEditingAreaList &areaList)
|
|||
// StrToThemeColor(tc,devEditor.Syntax.Values[cWN]);
|
||||
PSyntaxIssueList lst = getSyntaxIssuesAtLine(Line);
|
||||
if (lst) {
|
||||
for (PSyntaxIssue issue: *lst) {
|
||||
for (const PSyntaxIssue& issue: *lst) {
|
||||
PSynEditingArea p=std::make_shared<SynEditingArea>();
|
||||
p->beginX = issue->col;
|
||||
p->endX = issue->endCol;
|
||||
|
@ -556,6 +559,7 @@ void Editor::onPreparePaintHighlightToken(int row, int column, const QString &to
|
|||
StatementKind kind = mParser->getKindOfStatement(statement);
|
||||
if (kind == StatementKind::skUnknown) {
|
||||
if ((pEndPos.Line>=1)
|
||||
&& (pEndPos.Char>=0)
|
||||
&& (pEndPos.Char < lines()->getString(pEndPos.Line-1).length())
|
||||
&& (lines()->getString(pEndPos.Line-1)[pEndPos.Char] == '(')) {
|
||||
kind = StatementKind::skFunction;
|
||||
|
@ -760,7 +764,7 @@ Editor::PSyntaxIssueList Editor::getSyntaxIssuesAtLine(int line)
|
|||
Editor::PSyntaxIssue Editor::getSyntaxIssueAtPosition(const BufferCoord &pos)
|
||||
{
|
||||
PSyntaxIssueList lst = getSyntaxIssuesAtLine(pos.Line);
|
||||
for (PSyntaxIssue issue: *lst) {
|
||||
foreach (const PSyntaxIssue& issue, *lst) {
|
||||
if (issue->startChar<=pos.Char && pos.Char<=issue->endChar)
|
||||
return issue;
|
||||
}
|
||||
|
@ -865,7 +869,7 @@ void Editor::onStatusChanged(SynStatusChanges changes)
|
|||
// mainForm.CaretList.AddCaret(self,fText.CaretY,fText.CaretX);
|
||||
}
|
||||
|
||||
void Editor::onGutterClicked(Qt::MouseButton button, int x, int y, int line)
|
||||
void Editor::onGutterClicked(Qt::MouseButton button, int , int , int line)
|
||||
{
|
||||
if (button == Qt::LeftButton) {
|
||||
toggleBreakpoint(line);
|
||||
|
@ -878,7 +882,7 @@ QChar Editor::getCurrentChar()
|
|||
if (lineText().length()<caretX())
|
||||
return QChar();
|
||||
else
|
||||
return lineText()[caretX()-1];
|
||||
return lineText().at(caretX()-1);
|
||||
}
|
||||
|
||||
bool Editor::handleSymbolCompletion(QChar key)
|
||||
|
@ -1429,7 +1433,50 @@ void Editor::showCompletion(bool autoComplete)
|
|||
|
||||
void Editor::showHeaderCompletion(bool autoComplete)
|
||||
{
|
||||
//todo:
|
||||
// if not devCodeCompletion.Enabled then
|
||||
// Exit;
|
||||
|
||||
if (mHeaderCompletionPopup->isVisible()) // already in search, don't do it again
|
||||
return;
|
||||
|
||||
// Position it at the top of the next line
|
||||
QPoint p = RowColumnToPixels(displayXY());
|
||||
p.setY(p.y() + textHeight() + 2);
|
||||
mHeaderCompletionPopup->move(mapToGlobal(p));
|
||||
|
||||
|
||||
// fHeaderCompletionBox.IgnoreCase := devCodeCompletion.IgnoreCase;
|
||||
// fHeaderCompletionBox.ShowCount := devCodeCompletion.MaxCount;
|
||||
//Set Font size;
|
||||
mHeaderCompletionPopup->setFont(font());
|
||||
|
||||
// Redirect key presses to completion box if applicable
|
||||
mHeaderCompletionPopup->setKeypressedCallback([this](QKeyEvent* event)->bool{
|
||||
return onHeaderCompletionKeyPressed(event);
|
||||
});
|
||||
mHeaderCompletionPopup->setParser(mParser);
|
||||
|
||||
BufferCoord pBeginPos,pEndPos;
|
||||
QString word = getWordAtPosition(caretXY(),pBeginPos,pEndPos,
|
||||
WordPurpose::wpHeaderCompletionStart);
|
||||
if (word.isEmpty())
|
||||
return;
|
||||
|
||||
if (!word.startsWith('"') && !word.startsWith('<'))
|
||||
return;
|
||||
|
||||
if (word.lastIndexOf('"')>0 || word.lastIndexOf('>')>0)
|
||||
return;
|
||||
|
||||
mHeaderCompletionPopup->show();
|
||||
mHeaderCompletionPopup->setSearchLocal(word.startsWith('"'));
|
||||
word.remove(0,1);
|
||||
|
||||
mHeaderCompletionPopup->prepareSearch(word, mFilename);
|
||||
|
||||
// Filter the whole statement list
|
||||
if (mHeaderCompletionPopup->search(word, autoComplete)) //only one suggestion and it's not input while typing
|
||||
headerCompletionInsert(); // if only have one suggestion, just use it
|
||||
}
|
||||
|
||||
bool Editor::testInFunc(int x, int y)
|
||||
|
@ -1503,7 +1550,7 @@ void Editor::completionInsert(bool appendFunc)
|
|||
|| statement->kind == StatementKind::skConstructor
|
||||
|| statement->kind == StatementKind::skDestructor) {
|
||||
if ((p.Char >= lineText().length()) // it's the last char on line
|
||||
|| (lineText()[p.Char] != '(')) { // it don't have '(' after it
|
||||
|| (lineText().at(p.Char) != '(')) { // it don't have '(' after it
|
||||
if (statement->fullName!="std::endl")
|
||||
funcAddOn = "()";
|
||||
}
|
||||
|
@ -1546,11 +1593,46 @@ void Editor::completionInsert(bool appendFunc)
|
|||
mCompletionPopup->hide();
|
||||
}
|
||||
|
||||
void Editor::headerCompletionInsert()
|
||||
{
|
||||
QString headerName = mHeaderCompletionPopup->selectedFilename();
|
||||
if (headerName.isEmpty())
|
||||
return;
|
||||
|
||||
// delete the part of the word that's already been typed ...
|
||||
BufferCoord p = caretXY();
|
||||
int posBegin = p.Char-1;
|
||||
int posEnd = p.Char-1;
|
||||
QString sLine = lineText();
|
||||
while ((posBegin>0) &&
|
||||
(isIdentChar(sLine[posBegin-1]) || (sLine[posBegin-1]=='.')))
|
||||
posBegin--;
|
||||
|
||||
while ((posEnd < sLine.length())
|
||||
&& (isIdentChar(sLine[posEnd]) || (sLine[posEnd]=='.')))
|
||||
posEnd++;
|
||||
p.Char = posBegin+1;
|
||||
setBlockBegin(p);
|
||||
p.Char = posEnd+1;
|
||||
setBlockEnd(p);
|
||||
|
||||
setSelText(headerName);
|
||||
|
||||
mCompletionPopup->hide();
|
||||
}
|
||||
|
||||
bool Editor::onCompletionKeyPressed(QKeyEvent *event)
|
||||
{
|
||||
bool processed = false;
|
||||
if (!mCompletionPopup->isEnabled())
|
||||
return false;
|
||||
QString oldPhrase = mCompletionPopup->phrase();
|
||||
WordPurpose purpose = WordPurpose::wpCompletion;
|
||||
if (oldPhrase.startsWith('#')) {
|
||||
purpose = WordPurpose::wpDirective;
|
||||
} else if (oldPhrase.startsWith('@')) {
|
||||
purpose = WordPurpose::wpJavadoc;
|
||||
}
|
||||
QString phrase;
|
||||
BufferCoord pBeginPos,pEndPos;
|
||||
switch (event->key()) {
|
||||
|
@ -1560,7 +1642,7 @@ bool Editor::onCompletionKeyPressed(QKeyEvent *event)
|
|||
QChar(), nullptr); // Simulate backspace in editor
|
||||
phrase = getWordAtPosition(caretXY(),
|
||||
pBeginPos,pEndPos,
|
||||
WordPurpose::wpCompletion);
|
||||
purpose);
|
||||
mLastIdCharPressed = phrase.length();
|
||||
mCompletionPopup->search(phrase, false);
|
||||
return true;
|
||||
|
@ -1583,9 +1665,9 @@ bool Editor::onCompletionKeyPressed(QKeyEvent *event)
|
|||
QChar ch = event->text().front();
|
||||
if (isIdentChar(ch)) {
|
||||
setSelText(ch);
|
||||
phrase = phrase = getWordAtPosition(caretXY(),
|
||||
phrase = getWordAtPosition(caretXY(),
|
||||
pBeginPos,pEndPos,
|
||||
WordPurpose::wpCompletion);
|
||||
purpose);
|
||||
mLastIdCharPressed = phrase.length();
|
||||
mCompletionPopup->search(phrase, false);
|
||||
return true;
|
||||
|
@ -1598,6 +1680,59 @@ bool Editor::onCompletionKeyPressed(QKeyEvent *event)
|
|||
return processed;
|
||||
}
|
||||
|
||||
bool Editor::onHeaderCompletionKeyPressed(QKeyEvent *event)
|
||||
{
|
||||
bool processed = false;
|
||||
if (!mCompletionPopup->isEnabled())
|
||||
return false;
|
||||
QString phrase;
|
||||
BufferCoord pBeginPos,pEndPos;
|
||||
switch (event->key()) {
|
||||
case Qt::Key_Backspace:
|
||||
ExecuteCommand(
|
||||
SynEditorCommand::ecDeleteLastChar,
|
||||
QChar(), nullptr); // Simulate backspace in editor
|
||||
phrase = getWordAtPosition(caretXY(),
|
||||
pBeginPos,pEndPos,
|
||||
WordPurpose::wpHeaderCompletion);
|
||||
mLastIdCharPressed = phrase.length();
|
||||
mHeaderCompletionPopup->search(phrase, false);
|
||||
return true;
|
||||
case Qt::Key_Escape:
|
||||
mHeaderCompletionPopup->hide();
|
||||
return true;
|
||||
case Qt::Key_Return:
|
||||
case Qt::Key_Tab:
|
||||
//CompletionInsert(devCodeCompletion.AppendFunc);
|
||||
headerCompletionInsert();
|
||||
mHeaderCompletionPopup->hide();
|
||||
return true;
|
||||
default:
|
||||
if (event->text().isEmpty()) {
|
||||
//stop completion
|
||||
mHeaderCompletionPopup->hide();
|
||||
keyPressEvent(event);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
QChar ch = event->text().front();
|
||||
if (isIdentChar(ch)) {
|
||||
setSelText(ch);
|
||||
phrase = getWordAtPosition(caretXY(),
|
||||
pBeginPos,pEndPos,
|
||||
WordPurpose::wpHeaderCompletion);
|
||||
mLastIdCharPressed = phrase.length();
|
||||
mHeaderCompletionPopup->search(phrase, false);
|
||||
return true;
|
||||
} else {
|
||||
//stop completion
|
||||
mHeaderCompletionPopup->hide();
|
||||
keyPressEvent(event);
|
||||
return true;
|
||||
}
|
||||
return processed;
|
||||
}
|
||||
|
||||
QString Editor::getWordAtPosition(const BufferCoord &p, BufferCoord &pWordBegin, BufferCoord &pWordEnd, WordPurpose purpose)
|
||||
{
|
||||
QString result = "";
|
||||
|
@ -2066,6 +2201,7 @@ void Editor::applyColorScheme(const QString& schemeName)
|
|||
if (item) {
|
||||
mCompletionPopup->colors().insert(StatementKind::skPreprocessor,item->foreground());
|
||||
mCompletionPopup->colors().insert(StatementKind::skEnum,item->foreground());
|
||||
mHeaderCompletionPopup->setSuggestionColor(item->foreground());
|
||||
}
|
||||
item = pColorManager->getItem(schemeName, SYNS_AttrReservedWord);
|
||||
if (item) {
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
#include "common.h"
|
||||
#include "parser/cppparser.h"
|
||||
#include "widgets/codecompletionpopup.h"
|
||||
#include "widgets/headercompletionpopup.h"
|
||||
|
||||
class SaveException: public std::exception {
|
||||
|
||||
|
@ -21,6 +22,7 @@ public:
|
|||
const char *what() const noexcept override;
|
||||
private:
|
||||
QString mReason;
|
||||
QByteArray mReasonBuffer;
|
||||
};
|
||||
|
||||
class Editor : public SynEdit
|
||||
|
@ -169,7 +171,10 @@ private:
|
|||
|
||||
void completionInsert(bool appendFunc=false);
|
||||
|
||||
void headerCompletionInsert();
|
||||
|
||||
bool onCompletionKeyPressed(QKeyEvent* event);
|
||||
bool onHeaderCompletionKeyPressed(QKeyEvent* event);
|
||||
|
||||
private:
|
||||
static int newfileCount;
|
||||
|
@ -193,6 +198,7 @@ private:
|
|||
int mActiveBreakpointLine;
|
||||
PCppParser mParser;
|
||||
std::shared_ptr<CodeCompletionPopup> mCompletionPopup;
|
||||
std::shared_ptr<HeaderCompletionPopup> mHeaderCompletionPopup;
|
||||
int mLastIdCharPressed;
|
||||
bool mUseCppSyntax;
|
||||
|
||||
|
|
|
@ -32,11 +32,11 @@ MainWindow* pMainWindow;
|
|||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent),
|
||||
ui(new Ui::MainWindow),
|
||||
mSearchDialog(nullptr),
|
||||
mQuitting(false),
|
||||
mMessageControlChanged(false),
|
||||
mTabMessagesTogglingState(false),
|
||||
mCheckSyntaxInBack(false),
|
||||
mSearchDialog(nullptr),
|
||||
mQuitting(false)
|
||||
mCheckSyntaxInBack(false)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
// status bar
|
||||
|
@ -135,8 +135,8 @@ void MainWindow::updateForEncodingInfo() {
|
|||
if (editor!=NULL) {
|
||||
mFileEncodingStatus->setText(
|
||||
QString("%1(%2)")
|
||||
.arg(QString(editor->encodingOption()))
|
||||
.arg(QString(editor->fileEncoding())));
|
||||
.arg(QString(editor->encodingOption())
|
||||
,QString(editor->fileEncoding())));
|
||||
ui->actionAuto_Detect->setChecked(editor->encodingOption() == ENCODING_AUTO_DETECT);
|
||||
ui->actionEncode_in_ANSI->setChecked(editor->encodingOption() == ENCODING_SYSTEM_DEFAULT);
|
||||
ui->actionEncode_in_UTF_8->setChecked(editor->encodingOption() == ENCODING_UTF8);
|
||||
|
@ -304,23 +304,25 @@ void MainWindow::updateAppTitle()
|
|||
else
|
||||
str = e->filename();
|
||||
if (mDebugger->executing()) {
|
||||
setWindowTitle(QString("%1 - [%2] - %3 %4").arg(str).arg(appName)
|
||||
.arg(tr("Debugging")).arg(DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - [%2] - %3").arg(str).arg(appName)
|
||||
.arg(tr("Debugging")));
|
||||
setWindowTitle(QString("%1 - [%2] - %3 %4")
|
||||
.arg(str,appName,tr("Debugging"),DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - [%2] - %3")
|
||||
.arg(str,appName,tr("Debugging")));
|
||||
} else if (mCompilerManager->running()) {
|
||||
setWindowTitle(QString("%1 - [%2] - %3 %4").arg(str).arg(appName)
|
||||
.arg(tr("Running")).arg(DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - [%2] - %3").arg(str).arg(appName)
|
||||
.arg(tr("Running")));
|
||||
setWindowTitle(QString("%1 - [%2] - %3 %4")
|
||||
.arg(str,appName,tr("Running"),DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - [%2] - %3")
|
||||
.arg(str,appName,tr("Running")));
|
||||
} else if (mCompilerManager->compiling()) {
|
||||
setWindowTitle(QString("%1 - [%2] - %3 %4").arg(str).arg(appName)
|
||||
.arg(tr("Compiling")).arg(DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - [%2] - %3").arg(str).arg(appName)
|
||||
.arg(tr("Compiling")));
|
||||
setWindowTitle(QString("%1 - [%2] - %3 %4")
|
||||
.arg(str,appName,tr("Compiling"),DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - [%2] - %3")
|
||||
.arg(str,appName,tr("Compiling")));
|
||||
} else {
|
||||
this->setWindowTitle(QString("%1 - %2 %3").arg(str).arg(appName).arg(DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - %2").arg(str).arg(appName));
|
||||
this->setWindowTitle(QString("%1 - %2 %3")
|
||||
.arg(str,appName,DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1 - %2")
|
||||
.arg(str,appName));
|
||||
}
|
||||
}
|
||||
// else if Assigned(fProject) then begin
|
||||
|
@ -342,7 +344,7 @@ void MainWindow::updateAppTitle()
|
|||
// Application.Title := Format('%s - %s', [fProject.Name, appName]);
|
||||
// end;
|
||||
else {
|
||||
setWindowTitle(QString("%1 %2").arg(appName).arg(DEVCPP_VERSION));
|
||||
setWindowTitle(QString("%1 %2").arg(appName,DEVCPP_VERSION));
|
||||
app->setApplicationName(QString("%1").arg(appName));
|
||||
}
|
||||
}
|
||||
|
@ -370,7 +372,7 @@ void MainWindow::updateDebugEval(const QString &value)
|
|||
void MainWindow::rebuildOpenedFileHisotryMenu()
|
||||
{
|
||||
mMenuRecentFiles->clear();
|
||||
for (QAction* action:mRecentFileActions) {
|
||||
foreach (QAction* action,mRecentFileActions) {
|
||||
action->setParent(nullptr);
|
||||
action->deleteLater();
|
||||
}
|
||||
|
@ -379,10 +381,10 @@ void MainWindow::rebuildOpenedFileHisotryMenu()
|
|||
mMenuRecentFiles->setEnabled(false);
|
||||
} else {
|
||||
mMenuRecentFiles->setEnabled(true);
|
||||
for (QString filename: pSettings->history().openedFiles()) {
|
||||
for (const QString& filename: pSettings->history().openedFiles()) {
|
||||
QAction* action = new QAction();
|
||||
action->setText(filename);
|
||||
connect(action, &QAction::triggered, [filename,this](bool checked = false){
|
||||
connect(action, &QAction::triggered, [&filename,this](bool){
|
||||
this->openFile(filename);
|
||||
});
|
||||
mRecentFileActions.append(action);
|
||||
|
@ -471,7 +473,7 @@ void MainWindow::openFiles(const QStringList &files)
|
|||
auto end = finally([this] {
|
||||
this->mEditorList->endUpdate();
|
||||
});
|
||||
for (QString file:files) {
|
||||
for (const QString& file:files) {
|
||||
openFile(file);
|
||||
}
|
||||
mEditorList->endUpdate();
|
||||
|
@ -804,16 +806,16 @@ void MainWindow::debug()
|
|||
updateEditorActions();
|
||||
|
||||
// Add library folders
|
||||
for (QString dir:compilerSet->libDirs()) {
|
||||
foreach (QString dir,compilerSet->libDirs()) {
|
||||
mDebugger->sendCommand("dir",
|
||||
QString("\"%1\"").arg(dir.replace('\\','/')));
|
||||
}
|
||||
// Add include folders
|
||||
for (QString dir:compilerSet->CIncludeDirs()) {
|
||||
foreach (QString dir,compilerSet->CIncludeDirs()) {
|
||||
mDebugger->sendCommand("dir",
|
||||
QString("\"%1\"").arg(dir.replace('\\','/')));
|
||||
}
|
||||
for (QString dir:compilerSet->CppIncludeDirs()) {
|
||||
foreach (QString dir,compilerSet->CppIncludeDirs()) {
|
||||
mDebugger->sendCommand("dir",
|
||||
QString("\"%1\"").arg(dir.replace('\\','/')));
|
||||
}
|
||||
|
@ -1123,7 +1125,7 @@ void MainWindow::onCompileFinished()
|
|||
if (issue->type == CompileIssueType::Error) {
|
||||
ui->tableIssues->selectRow(i);
|
||||
QModelIndex index =ui->tableIssues->model()->index(i,0);
|
||||
ui->tableIssues->doubleClicked(index);
|
||||
emit ui->tableIssues->doubleClicked(index);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1133,7 +1135,7 @@ void MainWindow::onCompileFinished()
|
|||
if (issue->type == CompileIssueType::Warning) {
|
||||
ui->tableIssues->selectRow(i);
|
||||
QModelIndex index =ui->tableIssues->model()->index(i,0);
|
||||
ui->tableIssues->doubleClicked(index);
|
||||
emit ui->tableIssues->doubleClicked(index);
|
||||
}
|
||||
}
|
||||
// Then try to find anything with a line number...
|
||||
|
@ -1452,13 +1454,13 @@ bool MainWindow::debugInferiorhasBreakpoint()
|
|||
if (e==nullptr)
|
||||
return false;
|
||||
if (!e->inProject()) {
|
||||
for (PBreakpoint breakpoint:mDebugger->breakpointModel()->breakpoints()) {
|
||||
for (const PBreakpoint& breakpoint:mDebugger->breakpointModel()->breakpoints()) {
|
||||
if (e->filename() == breakpoint->filename) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (PBreakpoint breakpoint:mDebugger->breakpointModel()->breakpoints()) {
|
||||
for (const PBreakpoint& breakpoint:mDebugger->breakpointModel()->breakpoints()) {
|
||||
Editor* e1 = mEditorList->getOpenedEditorByFilename(breakpoint->filename);
|
||||
if (e1->inProject()) {
|
||||
return true;
|
||||
|
|
|
@ -381,7 +381,7 @@ PStatement CppParser::findStatementStartingFrom(const QString &fileName, const Q
|
|||
return result;
|
||||
// not found
|
||||
// search members of all usings (in current scope )
|
||||
for (const QString& namespaceName:scopeStatement->usingList) {
|
||||
foreach (const QString& namespaceName, scopeStatement->usingList) {
|
||||
result = findStatementInNamespace(phrase,namespaceName);
|
||||
if (result)
|
||||
return result;
|
||||
|
@ -514,7 +514,7 @@ QSet<QString> CppParser::getFileIncludes(const QString &filename)
|
|||
PFileIncludes fileIncludes = mPreprocessor.includesList().value(filename,PFileIncludes());
|
||||
|
||||
if (fileIncludes) {
|
||||
for (const QString& file: fileIncludes->includeFiles.keys()) {
|
||||
foreach (const QString& file, fileIncludes->includeFiles.keys()) {
|
||||
list.insert(file);
|
||||
}
|
||||
}
|
||||
|
@ -636,7 +636,7 @@ void CppParser::parseFile(const QString &fileName, bool inProject, bool onlyIfNo
|
|||
mFilesScannedCount = 0;
|
||||
|
||||
// parse header files in the first parse
|
||||
for (const QString& file:files) {
|
||||
foreach (const QString& file,files) {
|
||||
if (isHfile(file)) {
|
||||
mFilesScannedCount++;
|
||||
emit onProgress(file,mFilesToScanCount,mFilesScannedCount);
|
||||
|
@ -646,7 +646,7 @@ void CppParser::parseFile(const QString &fileName, bool inProject, bool onlyIfNo
|
|||
}
|
||||
}
|
||||
//we only parse CFile in the second parse
|
||||
for (const QString& file:files) {
|
||||
foreach (const QString& file,files) {
|
||||
if (isCfile(file)) {
|
||||
mFilesScannedCount++;
|
||||
emit onProgress(file,mFilesToScanCount,mFilesScannedCount);
|
||||
|
@ -684,7 +684,7 @@ void CppParser::parseFileList(bool updateView)
|
|||
mFilesScannedCount = 0;
|
||||
mFilesToScanCount = mFilesToScan.count();
|
||||
// parse header files in the first parse
|
||||
for (const QString& file:mFilesToScan) {
|
||||
foreach (const QString& file, mFilesToScan) {
|
||||
if (isHfile(file)) {
|
||||
mFilesScannedCount++;
|
||||
emit onProgress(mCurrentFile,mFilesToScanCount,mFilesScannedCount);
|
||||
|
@ -694,7 +694,7 @@ void CppParser::parseFileList(bool updateView)
|
|||
}
|
||||
}
|
||||
//we only parse CFile in the second parse
|
||||
for (const QString& file:mFilesToScan) {
|
||||
foreach (const QString& file,mFilesToScan) {
|
||||
if (isCfile(file)) {
|
||||
mFilesScannedCount++;
|
||||
emit onProgress(mCurrentFile,mFilesToScanCount,mFilesScannedCount);
|
||||
|
@ -2274,7 +2274,7 @@ void CppParser::handlePreprocessor()
|
|||
|
||||
// Mention progress to user if we enter a NEW file
|
||||
bool ok;
|
||||
int line = s.mid(delimPos+1).toInt(&ok);
|
||||
int line = s.midRef(delimPos+1).toInt(&ok);
|
||||
if (line == 1) {
|
||||
mFilesScannedCount++;
|
||||
mFilesToScanCount++;
|
||||
|
@ -3008,7 +3008,7 @@ void CppParser::inheritClassStatement(const PStatement& derived, bool isStruct,
|
|||
else
|
||||
access = StatementClassScope::scsPrivate;
|
||||
}
|
||||
for (const PStatement& statement : base->children) {
|
||||
foreach (const PStatement& statement, base->children) {
|
||||
if (statement->classScope == StatementClassScope::scsPrivate
|
||||
|| statement->kind == StatementKind::skConstructor
|
||||
|| statement->kind == StatementKind::skDestructor)
|
||||
|
@ -3085,7 +3085,7 @@ PStatement CppParser::findStatementInScope(const QString &name, const QString &n
|
|||
PStatementList namespaceStatementsList = findNamespace(scope->command);
|
||||
if (!namespaceStatementsList)
|
||||
return PStatement();
|
||||
for (const PStatement& namespaceStatement: *namespaceStatementsList) {
|
||||
foreach (const PStatement& namespaceStatement, *namespaceStatementsList) {
|
||||
PStatement result=doFindStatementInScope(name,noNameArgs,kind,namespaceStatement);
|
||||
if (result)
|
||||
return result;
|
||||
|
@ -3112,7 +3112,7 @@ PStatement CppParser::findStatementInNamespace(const QString &name, const QStrin
|
|||
PStatementList namespaceStatementsList=findNamespace(namespaceName);
|
||||
if (!namespaceStatementsList)
|
||||
return PStatement();
|
||||
for (const PStatement& namespaceStatement:*namespaceStatementsList) {
|
||||
foreach (const PStatement& namespaceStatement,*namespaceStatementsList) {
|
||||
PStatement result = findMemberOfStatement(name,namespaceStatement);
|
||||
if (result)
|
||||
return result;
|
||||
|
@ -3146,7 +3146,7 @@ PStatement CppParser::doFindStatementInScope(const QString &name,
|
|||
{
|
||||
const StatementMap& statementMap =mStatementList.childrenStatements(scope);
|
||||
|
||||
for (const PStatement& statement: statementMap.values(name)) {
|
||||
foreach (const PStatement& statement, statementMap.values(name)) {
|
||||
if (statement->kind == kind && statement->noNameArgs == noNameArgs) {
|
||||
return statement;
|
||||
}
|
||||
|
@ -3224,7 +3224,7 @@ QSet<QString> CppParser::calculateFilesToBeReparsed(const QString &fileName)
|
|||
PFileIncludes p=mPreprocessor.includesList().value(name);
|
||||
if (!p)
|
||||
continue;
|
||||
for (const QString& s:p->dependedFiles) {
|
||||
foreach (const QString& s,p->dependedFiles) {
|
||||
if (!processed.contains(s)) {
|
||||
queue.enqueue(s);
|
||||
}
|
||||
|
|
|
@ -154,7 +154,7 @@ void CppPreprocessor::invalidDefinesInFile(const QString &fileName)
|
|||
{
|
||||
PDefineMap defineMap = mFileDefines.value(fileName,PDefineMap());
|
||||
if (defineMap) {
|
||||
for (const PDefine& define:*defineMap) {
|
||||
foreach (const PDefine& define, *defineMap) {
|
||||
const PDefine& p = mDefines.value(define->name);
|
||||
if (p == define) {
|
||||
mDefines.remove(define->name);
|
||||
|
@ -186,26 +186,26 @@ void CppPreprocessor::dumpIncludesListTo(const QString &fileName) const
|
|||
for (const PFileIncludes& fileIncludes:mIncludesList) {
|
||||
stream<<fileIncludes->baseFile<<" : "<<Qt::endl;
|
||||
stream<<"\t**includes:**"<<Qt::endl;
|
||||
for (const QString& s:fileIncludes->includeFiles.keys()) {
|
||||
foreach (const QString& s,fileIncludes->includeFiles.keys()) {
|
||||
stream<<"\t--"+s<<Qt::endl;
|
||||
}
|
||||
stream<<"\t**depends on:**"<<Qt::endl;
|
||||
for (const QString& s:fileIncludes->dependingFiles) {
|
||||
foreach (const QString& s,fileIncludes->dependingFiles) {
|
||||
stream<<"\t^^"+s<<Qt::endl;
|
||||
}
|
||||
stream<<"\t**depended by:**"<<Qt::endl;
|
||||
for (const QString& s:fileIncludes->dependedFiles) {
|
||||
foreach (const QString& s,fileIncludes->dependedFiles) {
|
||||
stream<<"\t&&"+s<<Qt::endl;
|
||||
}
|
||||
stream<<"\t**using:**"<<Qt::endl;
|
||||
for (const QString& s:fileIncludes->usings) {
|
||||
foreach (const QString& s,fileIncludes->usings) {
|
||||
stream<<"\t++"+s<<Qt::endl;
|
||||
}
|
||||
stream<<"\t**statements:**"<<Qt::endl;
|
||||
for (PStatement& statement:fileIncludes->statements) {
|
||||
foreach (const PStatement& statement,fileIncludes->statements) {
|
||||
if (statement) {
|
||||
stream<<QString("\t**%1 , %2").arg(statement->command)
|
||||
.arg(statement->fullName)<<Qt::endl;
|
||||
stream<<QString("\t**%1 , %2")
|
||||
.arg(statement->command,statement->fullName)<<Qt::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -709,7 +709,7 @@ void CppPreprocessor::addDefinesInFile(const QString &fileName)
|
|||
//first add the defines in the files it included
|
||||
PFileIncludes fileIncludes = getFileIncludesEntry(fileName);
|
||||
if (fileIncludes) {
|
||||
for (const QString& s:fileIncludes->includeFiles.keys()) {
|
||||
foreach (const QString& s,fileIncludes->includeFiles.keys()) {
|
||||
addDefinesInFile(s);
|
||||
}
|
||||
}
|
||||
|
@ -717,7 +717,7 @@ void CppPreprocessor::addDefinesInFile(const QString &fileName)
|
|||
// then add the defines defined in it
|
||||
PDefineMap defineList = mFileDefines.value(fileName, PDefineMap());
|
||||
if (defineList) {
|
||||
for (const PDefine& define: defineList->values()) {
|
||||
foreach (const PDefine& define, defineList->values()) {
|
||||
mDefines.insert(define->name,define);
|
||||
}
|
||||
}
|
||||
|
@ -739,7 +739,7 @@ void CppPreprocessor::parseArgs(PDefine define)
|
|||
QString formatStr = "";
|
||||
DefineArgTokenType lastTokenType=DefineArgTokenType::Other;
|
||||
int index;
|
||||
for (const PDefineArgToken& token: tokens) {
|
||||
foreach (const PDefineArgToken& token, tokens) {
|
||||
switch(token->type) {
|
||||
case DefineArgTokenType::Identifier:
|
||||
index = define->argList.indexOf(token->value);
|
||||
|
@ -872,7 +872,7 @@ QStringList CppPreprocessor::removeComments(const QStringList &text)
|
|||
currentType=ContentType::Other;
|
||||
break;
|
||||
case ContentType::RawString:
|
||||
if (line.mid(0,pos).endsWith(')'+delimiter))
|
||||
if (line.midRef(0,pos).endsWith(')'+delimiter))
|
||||
currentType = ContentType::Other;
|
||||
break;
|
||||
case ContentType::Other:
|
||||
|
|
|
@ -50,7 +50,7 @@ void CppTokenizer::dumpTokens(const QString &fileName)
|
|||
|
||||
if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
|
||||
QTextStream stream(&file);
|
||||
for (const PToken& token:mTokenList) {
|
||||
foreach (const PToken& token,mTokenList) {
|
||||
stream<<QString("%1,%2").arg(token->line).arg(token->text)<<Qt::endl;
|
||||
}
|
||||
}
|
||||
|
@ -149,7 +149,7 @@ QString CppTokenizer::getNextToken(bool bSkipParenthesis, bool bSkipArray, bool
|
|||
int delimPos = result.lastIndexOf(':');
|
||||
if (delimPos >= 0) {
|
||||
bool ok;
|
||||
mCurrentLine = result.mid(delimPos+1).toInt(&ok)-1; // fCurrLine is 0 based
|
||||
mCurrentLine = result.midRef(delimPos+1).toInt(&ok)-1; // fCurrLine is 0 based
|
||||
}
|
||||
}
|
||||
done = (result != "");
|
||||
|
@ -369,7 +369,7 @@ void CppTokenizer::simplifyArgs(QString &output)
|
|||
QString temp;
|
||||
QString lastSpace = "";
|
||||
bool parentheseStart = true;
|
||||
for (const QChar& ch:output.trimmed()) {
|
||||
foreach (const QChar& ch,output.trimmed()) {
|
||||
if (isSpaceChar(ch)) {
|
||||
if (!parentheseStart)
|
||||
lastSpace+=ch;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <QFile>
|
||||
#include <QFileInfo>
|
||||
#include <QDebug>
|
||||
#include <QGlobalStatic>
|
||||
|
||||
QStringList CppDirectives;
|
||||
QStringList JavadocTags;
|
||||
|
@ -14,25 +15,25 @@ QSet<QString> STLPointers;
|
|||
QSet<QString> STLContainers;
|
||||
QSet<QString> STLElementMethods;
|
||||
|
||||
static QSet<QString> CppHeaderExts;
|
||||
static QSet<QString> CppSourceExts;
|
||||
Q_GLOBAL_STATIC(QSet<QString>,CppHeaderExts)
|
||||
Q_GLOBAL_STATIC(QSet<QString>,CppSourceExts)
|
||||
|
||||
void initParser()
|
||||
{
|
||||
CppHeaderExts.insert("h");
|
||||
CppHeaderExts.insert("hpp");
|
||||
CppHeaderExts.insert("rh");
|
||||
CppHeaderExts.insert("hh");
|
||||
CppHeaderExts.insert("hxx");
|
||||
CppHeaderExts.insert("inl");
|
||||
CppHeaderExts.insert("");
|
||||
CppHeaderExts->insert("h");
|
||||
CppHeaderExts->insert("hpp");
|
||||
CppHeaderExts->insert("rh");
|
||||
CppHeaderExts->insert("hh");
|
||||
CppHeaderExts->insert("hxx");
|
||||
CppHeaderExts->insert("inl");
|
||||
CppHeaderExts->insert("");
|
||||
|
||||
CppSourceExts.insert("c");
|
||||
CppSourceExts.insert("cpp");
|
||||
CppSourceExts.insert("cc");
|
||||
CppSourceExts.insert("cxx");
|
||||
CppSourceExts.insert("c++");
|
||||
CppSourceExts.insert("cp");
|
||||
CppSourceExts->insert("c");
|
||||
CppSourceExts->insert("cpp");
|
||||
CppSourceExts->insert("cc");
|
||||
CppSourceExts->insert("cxx");
|
||||
CppSourceExts->insert("c++");
|
||||
CppSourceExts->insert("cp");
|
||||
// skip itself
|
||||
CppKeywords.insert("and",SkipType::skItself);
|
||||
CppKeywords.insert("and_eq",SkipType::skItself);
|
||||
|
@ -393,7 +394,7 @@ bool isHfile(const QString& filename)
|
|||
return false;
|
||||
|
||||
QFileInfo fileInfo(filename);
|
||||
return CppHeaderExts.contains(fileInfo.suffix().toLower());
|
||||
return CppHeaderExts->contains(fileInfo.suffix().toLower());
|
||||
|
||||
}
|
||||
|
||||
|
@ -403,7 +404,7 @@ bool isCfile(const QString& filename)
|
|||
return false;
|
||||
|
||||
QFileInfo fileInfo(filename);
|
||||
return CppSourceExts.contains(fileInfo.suffix().toLower());
|
||||
return CppSourceExts->contains(fileInfo.suffix().toLower());
|
||||
}
|
||||
|
||||
PStatement CppScopes::findScopeAtLine(int line)
|
||||
|
|
|
@ -120,10 +120,10 @@ int StatementModel::deleteMember(StatementMap &map, const PStatement& statement)
|
|||
void StatementModel::dumpStatementMap(StatementMap &map, QTextStream &out, int level)
|
||||
{
|
||||
QString indent(level,'\t');
|
||||
for (PStatement statement:map.values()) {
|
||||
foreach (const PStatement& statement,map) {
|
||||
out<<indent<<QString("%1, %2, %3, %4, %5, %6, %7, %8, %9, %10, %11, %12")
|
||||
.arg(statement->command).arg(int(statement->kind))
|
||||
.arg(statement->type).arg(statement->fullName)
|
||||
.arg(statement->type,statement->fullName)
|
||||
.arg((size_t)(statement->parentScope.lock().get()))
|
||||
.arg((int)statement->classScope)
|
||||
.arg(statement->fileName)
|
||||
|
|
|
@ -570,8 +570,6 @@ int StrScanForNonWordChar(const QString &s, int startPos)
|
|||
int StrRScanForWordChar(const QString &s, int startPos)
|
||||
{
|
||||
int i = startPos-1;
|
||||
if (i>s.length())
|
||||
return 0;
|
||||
while (i>=0) {
|
||||
if (isWordChar(s[i]))
|
||||
return i+1;
|
||||
|
@ -583,8 +581,6 @@ int StrRScanForWordChar(const QString &s, int startPos)
|
|||
int StrRScanForNonWordChar(const QString &s, int startPos)
|
||||
{
|
||||
int i = startPos-1;
|
||||
if (i>s.length())
|
||||
return 0;
|
||||
while (i>=0) {
|
||||
if (!isWordChar(s[i]))
|
||||
return i+1;
|
||||
|
|
|
@ -56,7 +56,7 @@ int SynSearch::findAll(const QString &keyword)
|
|||
return mResults.size();
|
||||
}
|
||||
|
||||
QString SynSearch::replace(const QString &aOccurrence, const QString &aReplacement)
|
||||
QString SynSearch::replace(const QString &, const QString &aReplacement)
|
||||
{
|
||||
return aReplacement;
|
||||
}
|
||||
|
|
|
@ -297,7 +297,7 @@ void SynEdit::setInsertMode(bool value)
|
|||
if (mInserting != value) {
|
||||
mInserting = value;
|
||||
updateCaret();
|
||||
statusChanged(scInsertMode);
|
||||
emit statusChanged(scInsertMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1179,7 +1179,7 @@ BufferCoord SynEdit::WordStartEx(const BufferCoord &XY)
|
|||
// valid line?
|
||||
if ((CY >= 1) && (CY <= mLines->count())) {
|
||||
QString Line = mLines->getString(CY - 1);
|
||||
CX = std::min(CX, Line.length()+1);
|
||||
CX = std::min(CX, Line.length());
|
||||
if (CX-1 >= 0) {
|
||||
if (!(Line[CX - 1].isSpace()))
|
||||
CX = StrRScanForNonWordChar(Line, CX - 1) + 1;
|
||||
|
@ -1539,7 +1539,7 @@ void SynEdit::doDeleteLastChar()
|
|||
setCaretX(newCaretX);
|
||||
updateLastCaretX();
|
||||
mStateFlags.setFlag(SynStateFlag::sfCaretChanged);
|
||||
statusChanged(SynStatusChange::scCaretX);
|
||||
emit statusChanged(SynStatusChange::scCaretX);
|
||||
} else {
|
||||
// delete char
|
||||
internalSetCaretX(mCaretX - 1);
|
||||
|
@ -2635,7 +2635,7 @@ void SynEdit::recalcCharExtent()
|
|||
bool hasStyles[] = {false,false,false,false};
|
||||
int size = 4;
|
||||
if (mHighlighter && mHighlighter->attributes().count()>0) {
|
||||
for (PSynHighlighterAttribute attribute: mHighlighter->attributes().values()) {
|
||||
for (const PSynHighlighterAttribute& attribute: mHighlighter->attributes()) {
|
||||
for (int i=0;i<size;i++) {
|
||||
if (attribute->styles().testFlag(styles[i]))
|
||||
hasStyles[i] = true;
|
||||
|
@ -3003,7 +3003,7 @@ PSynEditFoldRange SynEdit::collapsedFoldStartAtLine(int Line)
|
|||
return PSynEditFoldRange();
|
||||
}
|
||||
|
||||
void SynEdit::doOnPaintTransientEx(SynTransientType TransientType, bool Lock)
|
||||
void SynEdit::doOnPaintTransientEx(SynTransientType , bool )
|
||||
{
|
||||
//todo: we can't draw to canvas outside paintEvent
|
||||
}
|
||||
|
@ -3243,7 +3243,7 @@ void SynEdit::setReadOnly(bool readOnly)
|
|||
{
|
||||
if (mReadOnly != readOnly) {
|
||||
mReadOnly = readOnly;
|
||||
statusChanged(scReadOnly);
|
||||
emit statusChanged(scReadOnly);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3870,7 +3870,7 @@ QString SynEdit::selText()
|
|||
result += mLines->getString(i);
|
||||
result+=lineBreak();
|
||||
}
|
||||
result += mLines->getString(Last).left(ColTo-1);
|
||||
result += mLines->getString(Last).leftRef(ColTo-1);
|
||||
return result;
|
||||
}
|
||||
case SynSelectionMode::smColumn:
|
||||
|
@ -4340,7 +4340,7 @@ int SynEdit::searchReplace(const QString &sSearch, const QString &sReplace, SynS
|
|||
return result;
|
||||
}
|
||||
|
||||
void SynEdit::DoLinesDeleted(int FirstLine, int Count)
|
||||
void SynEdit::DoLinesDeleted(int , int )
|
||||
{
|
||||
// // gutter marks
|
||||
// for i := 0 to Marks.Count - 1 do begin
|
||||
|
@ -4356,7 +4356,7 @@ void SynEdit::DoLinesDeleted(int FirstLine, int Count)
|
|||
// end;
|
||||
}
|
||||
|
||||
void SynEdit::DoLinesInserted(int FirstLine, int Count)
|
||||
void SynEdit::DoLinesInserted(int , int )
|
||||
{
|
||||
// // gutter marks
|
||||
// for i := 0 to Marks.Count - 1 do begin
|
||||
|
@ -4606,7 +4606,7 @@ int SynEdit::InsertTextByLineMode(const QString &Value)
|
|||
QString Str;
|
||||
int Result = 0;
|
||||
mCaretX = 1;
|
||||
statusChanged(SynStatusChange::scCaretX);
|
||||
emit statusChanged(SynStatusChange::scCaretX);
|
||||
// Insert string before current line
|
||||
Start = 0;
|
||||
do {
|
||||
|
@ -4659,12 +4659,12 @@ void SynEdit::onGetEditingAreas(int, SynEditingAreaList &)
|
|||
|
||||
}
|
||||
|
||||
void SynEdit::onGutterGetText(int aLine, QString &aText)
|
||||
void SynEdit::onGutterGetText(int , QString &)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void SynEdit::onGutterPaint(QPainter &painter, int aLine, int X, int Y)
|
||||
void SynEdit::onGutterPaint(QPainter &, int , int , int )
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -4674,7 +4674,8 @@ void SynEdit::onPaint(QPainter &)
|
|||
|
||||
}
|
||||
|
||||
void SynEdit::onPreparePaintHighlightToken(int row, int column, const QString &token, PSynHighlighterAttribute attr, SynFontStyles &style, QColor &foreground, QColor &background)
|
||||
void SynEdit::onPreparePaintHighlightToken(int , int , const QString &,
|
||||
PSynHighlighterAttribute , SynFontStyles &, QColor &, QColor &)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -5188,7 +5189,7 @@ void SynEdit::paintEvent(QPaintEvent *event)
|
|||
paintCaret(painter, rcCaret);
|
||||
}
|
||||
|
||||
void SynEdit::resizeEvent(QResizeEvent *e)
|
||||
void SynEdit::resizeEvent(QResizeEvent *)
|
||||
{
|
||||
//resize the cache image
|
||||
std::shared_ptr<QImage> image = std::make_shared<QImage>(clientWidth(),clientHeight(),
|
||||
|
@ -5407,7 +5408,7 @@ void SynEdit::inputMethodEvent(QInputMethodEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
void SynEdit::leaveEvent(QEvent *event)
|
||||
void SynEdit::leaveEvent(QEvent *)
|
||||
{
|
||||
setCursor(Qt::ArrowCursor);
|
||||
}
|
||||
|
@ -5458,7 +5459,7 @@ void SynEdit::setModified(bool Value)
|
|||
if (mOptions.testFlag(SynEditorOption::eoGroupUndo) && (!Value) && mUndoList->CanUndo())
|
||||
mUndoList->AddGroupBreak();
|
||||
mUndoList->setInitialState(!Value);
|
||||
statusChanged(SynStatusChange::scModified);
|
||||
emit statusChanged(SynStatusChange::scModified);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -273,7 +273,7 @@ void SynEditStringList::addStrings(const QStringList &Strings)
|
|||
int SynEditStringList::getTextLength()
|
||||
{
|
||||
int Result = 0;
|
||||
for (const PSynEditStringRec& line: mList ) {
|
||||
foreach (const PSynEditStringRec& line, mList ) {
|
||||
Result += line->fString.length();
|
||||
if (mFileEndingType == FileEndingType::Windows) {
|
||||
Result += 2;
|
||||
|
@ -783,7 +783,7 @@ void SynEditUndoList::PushItem(PSynEditUndoItem Item)
|
|||
mItems.append(Item);
|
||||
EnsureMaxEntries();
|
||||
if (Item->changeReason()!= SynChangeReason::crGroupBreak)
|
||||
addedUndo();
|
||||
emit addedUndo();
|
||||
}
|
||||
|
||||
void SynEditUndoList::Unlock()
|
||||
|
|
|
@ -22,7 +22,6 @@ void SynEditTextPainter::paintTextLines(const QRect& clip)
|
|||
bCurrentLine = false;
|
||||
// If the right edge is visible and in the invalid area, prepare to paint it.
|
||||
// Do this first to realize the pen when getting the dc variable.
|
||||
QString SynTabGlyphString = SynTabGlyph;
|
||||
bDoRightEdge = false;
|
||||
if (edit->mRightEdge > 0) { // column value
|
||||
nRightEdge = edit->textOffset()+ edit->mRightEdge * edit->mCharWidth; // pixel value
|
||||
|
@ -75,7 +74,6 @@ void SynEditTextPainter::paintGutter(const QRect& clip)
|
|||
{
|
||||
int cRow;
|
||||
QRect rcLine, rcFold;
|
||||
QList<int> aGutterOffs;
|
||||
QString s;
|
||||
int vLine;
|
||||
int vLineTop;
|
||||
|
@ -392,7 +390,7 @@ void SynEditTextPainter::PaintEditAreas(const SynEditingAreaList &areaList)
|
|||
rc=rcLine;
|
||||
rc.setBottom(rc.bottom()-1);
|
||||
setDrawingColors(false);
|
||||
for (PSynEditingArea p:areaList) {
|
||||
for (const PSynEditingArea& p:areaList) {
|
||||
if (p->beginX > LastCol)
|
||||
continue;
|
||||
if (p->endX < FirstCol)
|
||||
|
@ -536,7 +534,6 @@ void SynEditTextPainter::PaintHighlightToken(bool bFillToEOL)
|
|||
|
||||
bool SynEditTextPainter::TokenIsSpaces(bool &bSpacesTest, const QString& Token, bool& bIsSpaces)
|
||||
{
|
||||
QString pTok;
|
||||
if (!bSpacesTest) {
|
||||
bSpacesTest = true;
|
||||
for (QChar ch:Token) {
|
||||
|
@ -622,7 +619,6 @@ void SynEditTextPainter::AddHighlightToken(const QString &Token, int ColumnsBefo
|
|||
void SynEditTextPainter::PaintFoldAttributes()
|
||||
{
|
||||
int TabSteps, LineIndent, LastNonBlank, X, Y, cRow, vLine;
|
||||
QBrush DottedPenDesc;
|
||||
// Paint indent guides. Use folds to determine indent value of these
|
||||
// Use a separate loop so we can use a custom pen
|
||||
// Paint indent guides using custom pen
|
||||
|
@ -933,7 +929,7 @@ void SynEditTextPainter::PaintLines()
|
|||
}
|
||||
}
|
||||
|
||||
void SynEditTextPainter::drawMark(PSynEditMark aMark, int &aGutterOff, int aMarkRow)
|
||||
void SynEditTextPainter::drawMark(PSynEditMark , int &, int )
|
||||
{
|
||||
//todo
|
||||
}
|
||||
|
|
|
@ -1259,7 +1259,7 @@ QStringList &Settings::CompilerSet::libDirs()
|
|||
return mLibDirs;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::dumpMachine()
|
||||
const QString &Settings::CompilerSet::dumpMachine() const
|
||||
{
|
||||
return mDumpMachine;
|
||||
}
|
||||
|
@ -1269,7 +1269,7 @@ void Settings::CompilerSet::setDumpMachine(const QString &value)
|
|||
mDumpMachine = value;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::version()
|
||||
const QString &Settings::CompilerSet::version() const
|
||||
{
|
||||
return mVersion;
|
||||
}
|
||||
|
@ -1279,7 +1279,7 @@ void Settings::CompilerSet::setVersion(const QString &value)
|
|||
mVersion = value;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::type()
|
||||
const QString &Settings::CompilerSet::type() const
|
||||
{
|
||||
return mType;
|
||||
}
|
||||
|
@ -1289,7 +1289,7 @@ void Settings::CompilerSet::setType(const QString& value)
|
|||
mType = value;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::name()
|
||||
const QString &Settings::CompilerSet::name() const
|
||||
{
|
||||
return mName;
|
||||
}
|
||||
|
@ -1299,12 +1299,12 @@ void Settings::CompilerSet::setName(const QString &value)
|
|||
mName = value;
|
||||
}
|
||||
|
||||
QStringList& Settings::CompilerSet::defines()
|
||||
const QStringList& Settings::CompilerSet::defines() const
|
||||
{
|
||||
return mDefines;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::target()
|
||||
const QString &Settings::CompilerSet::target() const
|
||||
{
|
||||
return mTarget;
|
||||
}
|
||||
|
@ -1319,7 +1319,7 @@ void Settings::CompilerSet::setUseCustomCompileParams(bool value)
|
|||
mUseCustomCompileParams = value;
|
||||
}
|
||||
|
||||
bool Settings::CompilerSet::useCustomLinkParams()
|
||||
bool Settings::CompilerSet::useCustomLinkParams() const
|
||||
{
|
||||
return mUseCustomLinkParams;
|
||||
}
|
||||
|
@ -1329,7 +1329,7 @@ void Settings::CompilerSet::setUseCustomLinkParams(bool value)
|
|||
mUseCustomLinkParams = value;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::customCompileParams()
|
||||
const QString &Settings::CompilerSet::customCompileParams() const
|
||||
{
|
||||
return mCustomCompileParams;
|
||||
}
|
||||
|
@ -1339,7 +1339,7 @@ void Settings::CompilerSet::setCustomCompileParams(const QString &value)
|
|||
mCustomCompileParams = value;
|
||||
}
|
||||
|
||||
const QString &Settings::CompilerSet::customLinkParams()
|
||||
const QString &Settings::CompilerSet::customLinkParams() const
|
||||
{
|
||||
return mCustomLinkParams;
|
||||
}
|
||||
|
@ -1349,7 +1349,7 @@ void Settings::CompilerSet::setCustomLinkParams(const QString &value)
|
|||
mCustomLinkParams = value;
|
||||
}
|
||||
|
||||
bool Settings::CompilerSet::autoAddCharsetParams()
|
||||
bool Settings::CompilerSet::autoAddCharsetParams() const
|
||||
{
|
||||
return mAutoAddCharsetParams;
|
||||
}
|
||||
|
@ -1784,7 +1784,7 @@ QString Settings::CompilerSet::findProgramInBinDirs(const QString name)
|
|||
QByteArray Settings::CompilerSet::iniOptions() const
|
||||
{
|
||||
QByteArray result;
|
||||
for (PCompilerOption p:mOptions) {
|
||||
for (const PCompilerOption& p:mOptions) {
|
||||
result.append(ValueToChar[p->value]);
|
||||
}
|
||||
return result;
|
||||
|
@ -1808,14 +1808,14 @@ QByteArray Settings::CompilerSet::getCompilerOutput(const QString &binDir, const
|
|||
return result.trimmed();
|
||||
}
|
||||
|
||||
bool Settings::CompilerSet::useCustomCompileParams()
|
||||
bool Settings::CompilerSet::useCustomCompileParams() const
|
||||
{
|
||||
return mUseCustomCompileParams;
|
||||
}
|
||||
|
||||
Settings::CompilerSets::CompilerSets(Settings *settings):
|
||||
mSettings(settings),
|
||||
mDefaultIndex(-1)
|
||||
mDefaultIndex(-1),
|
||||
mSettings(settings)
|
||||
{
|
||||
|
||||
}
|
||||
|
@ -1914,7 +1914,7 @@ void Settings::CompilerSets::addSets(const QString &folder)
|
|||
|
||||
void Settings::CompilerSets::clearSets()
|
||||
{
|
||||
for (int i=0;i<mList.size();i++) {
|
||||
for (size_t i=0;i<mList.size();i++) {
|
||||
mSettings->mSettings.beginGroup(QString(SETTING_COMPILTER_SET).arg(i));
|
||||
mSettings->mSettings.remove("");
|
||||
mSettings->mSettings.endGroup();
|
||||
|
@ -1932,7 +1932,7 @@ void Settings::CompilerSets::findSets()
|
|||
|
||||
void Settings::CompilerSets::saveSets()
|
||||
{
|
||||
for (int i=0;i<mList.size();i++) {
|
||||
for (size_t i=0;i<mList.size();i++) {
|
||||
saveSet(i);
|
||||
}
|
||||
if (mDefaultIndex>=mList.size()) {
|
||||
|
@ -2395,12 +2395,12 @@ Settings::History::History(Settings *settings):_Base(settings, SETTING_HISTORY)
|
|||
|
||||
}
|
||||
|
||||
QStringList &Settings::History::openedFiles()
|
||||
const QStringList &Settings::History::openedFiles() const
|
||||
{
|
||||
return mOpenedFiles;
|
||||
}
|
||||
|
||||
QStringList &Settings::History::openedProjects()
|
||||
const QStringList &Settings::History::openedProjects() const
|
||||
{
|
||||
return mOpenedProjects;
|
||||
}
|
||||
|
|
|
@ -375,8 +375,8 @@ public:
|
|||
public:
|
||||
explicit History(Settings *settings);
|
||||
|
||||
QStringList& openedFiles();
|
||||
QStringList& openedProjects();
|
||||
const QStringList& openedFiles() const;
|
||||
const QStringList& openedProjects() const;
|
||||
bool addToOpenedFiles(const QString& filename);
|
||||
private:
|
||||
QStringList mOpenedFiles;
|
||||
|
@ -488,27 +488,27 @@ public:
|
|||
QStringList& CppIncludeDirs();
|
||||
QStringList& libDirs();
|
||||
|
||||
const QString& dumpMachine();
|
||||
const QString& dumpMachine() const;
|
||||
void setDumpMachine(const QString& value);
|
||||
const QString& version();
|
||||
const QString& version() const;
|
||||
void setVersion(const QString& value);
|
||||
const QString& type();
|
||||
const QString& type() const;
|
||||
void setType(const QString& value);
|
||||
const QString& name();
|
||||
const QString& name() const;
|
||||
void setName(const QString& value);
|
||||
QStringList& defines();
|
||||
const QString& target();
|
||||
const QStringList& defines() const;
|
||||
const QString& target() const;
|
||||
void setTarget(const QString& value);
|
||||
|
||||
bool useCustomCompileParams();
|
||||
bool useCustomCompileParams() const;
|
||||
void setUseCustomCompileParams(bool value);
|
||||
bool useCustomLinkParams();
|
||||
bool useCustomLinkParams() const;
|
||||
void setUseCustomLinkParams(bool value);
|
||||
const QString& customCompileParams();
|
||||
const QString& customCompileParams() const;
|
||||
void setCustomCompileParams(const QString& value);
|
||||
const QString& customLinkParams();
|
||||
const QString& customLinkParams() const;
|
||||
void setCustomLinkParams(const QString& value);
|
||||
bool autoAddCharsetParams();
|
||||
bool autoAddCharsetParams() const;
|
||||
void setAutoAddCharsetParams(bool value);
|
||||
|
||||
CompilerOptionList& options();
|
||||
|
|
|
@ -708,6 +708,11 @@ bool CodeCompletionPopup::isIncluded(const QString &fileName)
|
|||
return mIncludedFiles.contains(fileName);
|
||||
}
|
||||
|
||||
const QString &CodeCompletionPopup::phrase() const
|
||||
{
|
||||
return mPhrase;
|
||||
}
|
||||
|
||||
void CodeCompletionPopup::showEvent(QShowEvent *)
|
||||
{
|
||||
mListView->setFocus();
|
||||
|
|
|
@ -107,6 +107,7 @@ protected:
|
|||
// QObject interface
|
||||
public:
|
||||
bool event(QEvent *event) override;
|
||||
const QString &phrase() const;
|
||||
};
|
||||
|
||||
#endif // CODECOMPLETIONPOPUP_H
|
||||
|
|
|
@ -88,6 +88,17 @@ void HeaderCompletionPopup::setSuggestionColor(const QColor &color)
|
|||
mModel->setColor(color);
|
||||
}
|
||||
|
||||
QString HeaderCompletionPopup::selectedFilename()
|
||||
{
|
||||
if (!isEnabled())
|
||||
return "";
|
||||
int index = mListView->currentIndex().row();
|
||||
if (index>=0 && index<mCompletionList.count())
|
||||
return mCompletionList[index];
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
void HeaderCompletionPopup::filterList(const QString &member)
|
||||
{
|
||||
mCompletionList.clear();
|
||||
|
@ -149,8 +160,10 @@ void HeaderCompletionPopup::addFilesInPath(const QString &path)
|
|||
if (!dir.exists())
|
||||
return;
|
||||
foreach (const QFileInfo& fileInfo, dir.entryInfoList()) {
|
||||
if (fileInfo.fileName().startsWith("."))
|
||||
continue;
|
||||
QString suffix = fileInfo.suffix().toLower();
|
||||
if (suffix == ".h" || suffix == ".hpp" || suffix == "") {
|
||||
if (suffix == "h" || suffix == "hpp" || suffix == "") {
|
||||
addFile(fileInfo.fileName());
|
||||
}
|
||||
}
|
||||
|
@ -172,6 +185,36 @@ void HeaderCompletionPopup::addFilesInSubDir(const QString &baseDirPath, const Q
|
|||
addFilesInPath(subDirPath);
|
||||
}
|
||||
|
||||
bool HeaderCompletionPopup::searchLocal() const
|
||||
{
|
||||
return mSearchLocal;
|
||||
}
|
||||
|
||||
void HeaderCompletionPopup::setSearchLocal(bool newSearchLocal)
|
||||
{
|
||||
mSearchLocal = newSearchLocal;
|
||||
}
|
||||
|
||||
bool HeaderCompletionPopup::ignoreCase() const
|
||||
{
|
||||
return mIgnoreCase;
|
||||
}
|
||||
|
||||
void HeaderCompletionPopup::setIgnoreCase(bool newIgnoreCase)
|
||||
{
|
||||
mIgnoreCase = newIgnoreCase;
|
||||
}
|
||||
|
||||
const QString &HeaderCompletionPopup::phrase() const
|
||||
{
|
||||
return mPhrase;
|
||||
}
|
||||
|
||||
void HeaderCompletionPopup::setParser(const PCppParser &newParser)
|
||||
{
|
||||
mParser = newParser;
|
||||
}
|
||||
|
||||
void HeaderCompletionPopup::showEvent(QShowEvent *)
|
||||
{
|
||||
mListView->setFocus();
|
||||
|
|
|
@ -29,6 +29,7 @@ public:
|
|||
bool search(const QString& phrase, bool autoHideOnSingleResult);
|
||||
void setKeypressedCallback(const KeyPressedCallback &newKeypressedCallback);
|
||||
void setSuggestionColor(const QColor& color);
|
||||
QString selectedFilename();
|
||||
|
||||
private:
|
||||
void filterList(const QString& member);
|
||||
|
@ -59,6 +60,12 @@ protected:
|
|||
// QObject interface
|
||||
public:
|
||||
bool event(QEvent *event) override;
|
||||
void setParser(const PCppParser &newParser);
|
||||
const QString &phrase() const;
|
||||
bool ignoreCase() const;
|
||||
void setIgnoreCase(bool newIgnoreCase);
|
||||
bool searchLocal() const;
|
||||
void setSearchLocal(bool newSearchLocal);
|
||||
};
|
||||
|
||||
#endif // HEADERCOMPLETIONPOPUP_H
|
||||
|
|
Loading…
Reference in New Issue