2021-04-06 23:10:57 +08:00
|
|
|
#include "editor.h"
|
|
|
|
|
|
|
|
#include <QtCore/QFileInfo>
|
2021-04-09 17:48:25 +08:00
|
|
|
#include <QFont>
|
2021-04-08 10:29:21 +08:00
|
|
|
#include <QTextCodec>
|
2021-04-07 22:44:08 +08:00
|
|
|
#include <QVariant>
|
2021-04-09 17:48:25 +08:00
|
|
|
#include <QWheelEvent>
|
2021-04-07 21:13:15 +08:00
|
|
|
#include <memory>
|
2021-04-08 10:29:21 +08:00
|
|
|
#include "settings.h"
|
|
|
|
#include "mainwindow.h"
|
2021-04-11 21:33:08 +08:00
|
|
|
#include "systemconsts.h"
|
2021-04-11 12:39:22 +08:00
|
|
|
#include <QFileDialog>
|
|
|
|
#include <QMessageBox>
|
|
|
|
#include <QDebug>
|
2021-05-24 00:41:00 +08:00
|
|
|
#include "qsynedit/highlighter/cpp.h"
|
2021-05-26 00:04:20 +08:00
|
|
|
#include "HighlighterManager.h"
|
2021-05-24 00:41:00 +08:00
|
|
|
|
2021-04-07 21:13:15 +08:00
|
|
|
|
|
|
|
using namespace std;
|
2021-04-06 23:10:57 +08:00
|
|
|
|
2021-04-11 21:33:08 +08:00
|
|
|
SaveException::SaveException(const QString& reason) {
|
|
|
|
mReason = reason;
|
|
|
|
}
|
|
|
|
SaveException::SaveException(const QString&& reason) {
|
|
|
|
mReason = reason;
|
|
|
|
}
|
|
|
|
const QString& SaveException::reason() const noexcept{
|
|
|
|
return mReason;
|
|
|
|
}
|
|
|
|
const char *SaveException::what() const noexcept {
|
|
|
|
return mReason.toLocal8Bit();
|
|
|
|
}
|
|
|
|
|
2021-05-26 00:04:20 +08:00
|
|
|
int Editor::newfileCount=0;
|
2021-04-06 23:10:57 +08:00
|
|
|
|
2021-04-09 17:48:25 +08:00
|
|
|
Editor::Editor(QWidget *parent, const QString& filename,
|
2021-04-08 10:29:21 +08:00
|
|
|
const QByteArray& encoding,
|
2021-04-06 23:10:57 +08:00
|
|
|
bool inProject, bool isNew,
|
|
|
|
QTabWidget* parentPageControl):
|
2021-05-24 00:41:00 +08:00
|
|
|
SynEdit(parent),
|
2021-04-06 23:10:57 +08:00
|
|
|
mFilename(filename),
|
2021-04-08 10:29:21 +08:00
|
|
|
mEncodingOption(encoding),
|
2021-04-06 23:10:57 +08:00
|
|
|
mInProject(inProject),
|
|
|
|
mIsNew(isNew),
|
|
|
|
mParentPageControl(parentPageControl)
|
|
|
|
{
|
2021-04-07 21:13:15 +08:00
|
|
|
if (mFilename.isEmpty()) {
|
2021-05-26 00:04:20 +08:00
|
|
|
newfileCount++;
|
2021-06-07 21:34:48 +08:00
|
|
|
mFilename = tr("untitled%1").arg(newfileCount);
|
2021-04-07 21:13:15 +08:00
|
|
|
}
|
2021-04-06 23:10:57 +08:00
|
|
|
QFileInfo fileInfo(mFilename);
|
2021-04-11 12:39:22 +08:00
|
|
|
if (mParentPageControl!=NULL) {
|
|
|
|
mParentPageControl->addTab(this,QString());
|
|
|
|
updateCaption();
|
|
|
|
}
|
2021-05-27 01:05:49 +08:00
|
|
|
PSynHighlighter highlighter;
|
2021-04-06 23:10:57 +08:00
|
|
|
if (!isNew) {
|
|
|
|
loadFile();
|
2021-06-07 11:02:03 +08:00
|
|
|
highlighter = highlighterManager.getHighlighter(mFilename);
|
2021-04-06 23:10:57 +08:00
|
|
|
} else {
|
2021-04-08 10:29:21 +08:00
|
|
|
if (mEncodingOption == ENCODING_AUTO_DETECT)
|
|
|
|
mFileEncoding = ENCODING_ASCII;
|
2021-04-07 21:13:15 +08:00
|
|
|
else
|
2021-04-08 10:29:21 +08:00
|
|
|
mFileEncoding = mEncodingOption;
|
2021-06-07 11:02:03 +08:00
|
|
|
highlighter=highlighterManager.getCppHighlighter();
|
2021-05-27 01:05:49 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
if (highlighter) {
|
|
|
|
setHighlighter(highlighter);
|
|
|
|
setUseCodeFolding(true);
|
|
|
|
} else {
|
|
|
|
setUseCodeFolding(false);
|
2021-04-06 23:10:57 +08:00
|
|
|
}
|
2021-04-09 17:48:25 +08:00
|
|
|
|
2021-06-07 11:02:03 +08:00
|
|
|
applySettings();
|
2021-06-10 09:34:59 +08:00
|
|
|
|
|
|
|
connect(this,&SynEdit::statusChanged,this,&Editor::onStatusChanged);
|
2021-04-07 22:44:08 +08:00
|
|
|
}
|
2021-04-06 23:10:57 +08:00
|
|
|
|
2021-04-07 22:44:08 +08:00
|
|
|
Editor::~Editor() {
|
2021-04-09 17:48:25 +08:00
|
|
|
if (mParentPageControl!=NULL) {
|
|
|
|
int index = mParentPageControl->indexOf(this);
|
|
|
|
mParentPageControl->removeTab(index);
|
|
|
|
}
|
|
|
|
this->setParent(0);
|
|
|
|
|
2021-04-06 23:10:57 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::loadFile() {
|
|
|
|
QFile file(mFilename);
|
2021-05-24 00:41:00 +08:00
|
|
|
// if (!file.open(QFile::ReadOnly)) {
|
|
|
|
// QMessageBox::information(pMainWindow,
|
|
|
|
// tr("Error"),
|
|
|
|
// QString(tr("Can't Open File %1:%2")).arg(mFilename).arg(file.errorString()));
|
|
|
|
// }
|
|
|
|
this->lines()->LoadFromFile(file,mEncodingOption,mFileEncoding);
|
2021-05-24 18:11:07 +08:00
|
|
|
this->setModified(false);
|
|
|
|
updateCaption();
|
|
|
|
pMainWindow->updateStatusBarForEncoding();
|
2021-04-07 21:13:15 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::saveFile(const QString &filename) {
|
2021-05-24 00:41:00 +08:00
|
|
|
// if (mEncodingOption!=ENCODING_AUTO_DETECT && mEncodingOption!=mFileEncoding) {
|
|
|
|
// mFileEncoding = mEncodingOption;
|
|
|
|
// }
|
|
|
|
// if (mEncodingOption == ENCODING_AUTO_DETECT && mFileEncoding == ENCODING_ASCII) {
|
|
|
|
// if (!isTextAllAscii(this->text())) {
|
|
|
|
// mFileEncoding = pSettings->editor().defaultEncoding();
|
|
|
|
// }
|
|
|
|
// pMainWindow->updateStatusBarForEncoding();
|
|
|
|
// //todo: update status bar, and set fileencoding using configurations
|
|
|
|
// }
|
2021-04-07 21:13:15 +08:00
|
|
|
QFile file(filename);
|
2021-05-24 00:41:00 +08:00
|
|
|
this->lines()->SaveToFile(file,mEncodingOption,mFileEncoding);
|
|
|
|
pMainWindow->updateStatusBarForEncoding();
|
|
|
|
// QByteArray ba;
|
|
|
|
// if (mFileEncoding == ENCODING_UTF8) {
|
|
|
|
// ba = this->text().toUtf8();
|
|
|
|
// } else if (mFileEncoding == ENCODING_UTF8_BOM) {
|
|
|
|
// ba.resize(3);
|
|
|
|
// ba[0]=0xEF;
|
|
|
|
// ba[1]=0xBB;
|
|
|
|
// ba[2]=0xBF;
|
|
|
|
// ba.append(this->text().toUtf8());
|
|
|
|
// } else if (mFileEncoding == ENCODING_ASCII) {
|
|
|
|
// ba = this->text().toLatin1();
|
|
|
|
// } else if (mFileEncoding == ENCODING_SYSTEM_DEFAULT) {
|
|
|
|
// ba = this->text().toLocal8Bit();
|
|
|
|
// } else {
|
|
|
|
// QTextCodec* codec = QTextCodec::codecForName(mFileEncoding);
|
|
|
|
// ba = codec->fromUnicode(this->text());
|
|
|
|
// }
|
|
|
|
// if (file.open(QFile::WriteOnly)) {
|
|
|
|
// if (file.write(ba)<0) {
|
|
|
|
// throw SaveException(QString(tr("Failed to Save file %1: %2")).arg(filename).arg(file.errorString()));
|
|
|
|
// }
|
|
|
|
// file.close();
|
|
|
|
// } else {
|
|
|
|
// throw SaveException(QString(tr("Failed to Open file %1: %2")).arg(filename).arg(file.errorString()));
|
|
|
|
// }
|
2021-04-06 23:10:57 +08:00
|
|
|
}
|
|
|
|
|
2021-04-09 10:08:05 +08:00
|
|
|
bool Editor::save(bool force, bool reparse) {
|
2021-04-11 12:39:22 +08:00
|
|
|
if (this->mIsNew) {
|
|
|
|
return saveAs();
|
|
|
|
}
|
|
|
|
QFileInfo info(mFilename);
|
2021-04-11 21:33:08 +08:00
|
|
|
//is this file writable;
|
2021-04-11 12:39:22 +08:00
|
|
|
if (!force && !info.isWritable()) {
|
|
|
|
QMessageBox::information(pMainWindow,tr("Fail"),
|
|
|
|
QString(QObject::tr("File %s is not writable!")));
|
|
|
|
return false;
|
|
|
|
}
|
2021-05-24 00:41:00 +08:00
|
|
|
if (this->modified()|| force) {
|
2021-04-11 21:33:08 +08:00
|
|
|
try {
|
|
|
|
saveFile(mFilename);
|
|
|
|
setModified(false);
|
|
|
|
} catch (SaveException& exception) {
|
|
|
|
QMessageBox::information(pMainWindow,tr("Fail"),
|
|
|
|
exception.reason());
|
|
|
|
return false;
|
|
|
|
}
|
2021-04-11 12:39:22 +08:00
|
|
|
}
|
2021-04-08 10:29:21 +08:00
|
|
|
|
2021-04-11 12:39:22 +08:00
|
|
|
if (reparse) {
|
|
|
|
//todo: reparse the file
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool Editor::saveAs(){
|
2021-04-11 21:33:08 +08:00
|
|
|
QString selectedFileFilter = pSystemConsts->defaultFileFilter();
|
2021-04-11 12:39:22 +08:00
|
|
|
QString newName = QFileDialog::getSaveFileName(pMainWindow,
|
2021-04-11 21:33:08 +08:00
|
|
|
tr("Save As"), QString(), pSystemConsts->defaultFileFilters().join(";;"),
|
|
|
|
&selectedFileFilter);
|
2021-04-11 12:39:22 +08:00
|
|
|
if (newName.isEmpty()) {
|
|
|
|
return false;
|
|
|
|
}
|
2021-04-11 21:33:08 +08:00
|
|
|
try {
|
|
|
|
saveFile(mFilename);
|
|
|
|
mFilename = newName;
|
|
|
|
mIsNew = false;
|
|
|
|
setModified(false);
|
|
|
|
} catch (SaveException& exception) {
|
|
|
|
QMessageBox::information(pMainWindow,tr("Fail"),
|
|
|
|
exception.reason());
|
|
|
|
return false;
|
|
|
|
}
|
2021-04-11 12:39:22 +08:00
|
|
|
|
|
|
|
//todo: update (reassign highlighter)
|
|
|
|
//todo: remove old file from parser and reparse file
|
|
|
|
//todo: unmoniter/ monitor file
|
|
|
|
//todo: update windows caption
|
|
|
|
//todo: update class browser;
|
2021-04-08 10:29:21 +08:00
|
|
|
return true;
|
2021-04-06 23:10:57 +08:00
|
|
|
}
|
2021-04-08 10:29:21 +08:00
|
|
|
|
2021-04-12 00:00:29 +08:00
|
|
|
void Editor::activate()
|
|
|
|
{
|
|
|
|
this->mParentPageControl->setCurrentWidget(this);
|
2021-04-29 20:54:44 +08:00
|
|
|
this->setFocus();
|
2021-04-12 00:00:29 +08:00
|
|
|
}
|
|
|
|
|
2021-04-11 21:33:08 +08:00
|
|
|
const QByteArray& Editor::encodingOption() const noexcept{
|
2021-04-08 10:29:21 +08:00
|
|
|
return mEncodingOption;
|
2021-04-06 23:10:57 +08:00
|
|
|
}
|
2021-04-11 21:33:08 +08:00
|
|
|
void Editor::setEncodingOption(const QByteArray& encoding) noexcept{
|
2021-04-08 10:29:21 +08:00
|
|
|
mEncodingOption = encoding;
|
|
|
|
}
|
2021-04-11 21:33:08 +08:00
|
|
|
const QByteArray& Editor::fileEncoding() const noexcept{
|
2021-04-06 23:10:57 +08:00
|
|
|
return mFileEncoding;
|
|
|
|
}
|
2021-04-11 21:33:08 +08:00
|
|
|
const QString& Editor::filename() const noexcept{
|
2021-04-06 23:10:57 +08:00
|
|
|
return mFilename;
|
|
|
|
}
|
2021-04-11 21:33:08 +08:00
|
|
|
bool Editor::inProject() const noexcept{
|
2021-04-06 23:10:57 +08:00
|
|
|
return mInProject;
|
|
|
|
}
|
2021-04-11 21:33:08 +08:00
|
|
|
bool Editor::isNew() const noexcept {
|
2021-04-06 23:10:57 +08:00
|
|
|
return mIsNew;
|
|
|
|
}
|
2021-04-09 17:48:25 +08:00
|
|
|
|
2021-04-11 21:33:08 +08:00
|
|
|
QTabWidget* Editor::pageControl() noexcept{
|
2021-04-09 17:48:25 +08:00
|
|
|
return mParentPageControl;
|
|
|
|
}
|
|
|
|
|
|
|
|
void Editor::wheelEvent(QWheelEvent *event) {
|
|
|
|
if ( (event->modifiers() & Qt::ControlModifier)!=0) {
|
2021-05-24 00:41:00 +08:00
|
|
|
QFont oldFont = font();
|
|
|
|
int size = oldFont.pointSize();
|
2021-04-09 17:48:25 +08:00
|
|
|
if (event->angleDelta().y()>0) {
|
2021-06-07 11:02:03 +08:00
|
|
|
// size = std::max(5,size-1);
|
|
|
|
// oldFont.setPointSize(oldFont.pointSize());
|
|
|
|
// this->setFont(oldFont);
|
|
|
|
this->zoomIn();
|
2021-06-09 17:12:23 +08:00
|
|
|
event->accept();
|
|
|
|
return;
|
2021-04-09 17:48:25 +08:00
|
|
|
} else {
|
2021-06-07 11:02:03 +08:00
|
|
|
// size = std::min(size+1,50);
|
|
|
|
// oldFont.setPointSize(oldFont.pointSize());
|
|
|
|
// this->setFont(oldFont);
|
|
|
|
this->zoomOut();
|
2021-06-09 17:12:23 +08:00
|
|
|
event->accept();
|
|
|
|
return;
|
2021-04-09 17:48:25 +08:00
|
|
|
}
|
|
|
|
}
|
2021-06-09 17:12:23 +08:00
|
|
|
SynEdit::wheelEvent(event);
|
2021-04-08 10:29:21 +08:00
|
|
|
}
|
2021-04-11 12:39:22 +08:00
|
|
|
|
2021-04-11 21:33:08 +08:00
|
|
|
void Editor::onModificationChanged(bool) {
|
2021-04-11 12:39:22 +08:00
|
|
|
updateCaption();
|
|
|
|
}
|
|
|
|
|
2021-04-11 21:33:08 +08:00
|
|
|
void Editor::onCursorPositionChanged(int line, int index) {
|
2021-05-24 00:41:00 +08:00
|
|
|
pMainWindow->updateStatusBarForEditingInfo(line,index+1,lines()->count(),lines()->getTextLength());
|
2021-04-11 13:55:31 +08:00
|
|
|
}
|
|
|
|
|
2021-04-24 15:57:45 +08:00
|
|
|
void Editor::onLinesChanged(int startLine, int count) {
|
2021-05-24 00:41:00 +08:00
|
|
|
qDebug()<<"Editor lines changed"<<lines()->count();
|
2021-04-24 15:57:45 +08:00
|
|
|
qDebug()<<startLine<<count;
|
2021-04-11 13:55:31 +08:00
|
|
|
}
|
|
|
|
|
2021-06-10 09:34:59 +08:00
|
|
|
void Editor::onStatusChanged(SynStatusChanges changes)
|
|
|
|
{
|
|
|
|
// if (not (scOpenFile in Changes)) and (fText.Lines.Count <> fLineCount)
|
|
|
|
// and (fText.Lines.Count <> 0) and ((fLineCount>0) or (fText.Lines.Count>1)) then begin
|
|
|
|
// if devCodeCompletion.Enabled
|
|
|
|
// and SameStr(mainForm.ClassBrowser.CurrentFile,FileName) // Don't reparse twice
|
|
|
|
// then begin
|
|
|
|
// Reparse;
|
|
|
|
// end;
|
|
|
|
// if fText.Focused and devEditor.AutoCheckSyntax and devEditor.CheckSyntaxWhenReturn
|
|
|
|
// and (fText.Highlighter = dmMain.Cpp) then begin
|
|
|
|
// mainForm.CheckSyntaxInBack(self);
|
|
|
|
// end;
|
|
|
|
// end;
|
|
|
|
// fLineCount := fText.Lines.Count;
|
|
|
|
// // scModified is only fired when the modified state changes
|
|
|
|
if (changes.testFlag(scModified)) {
|
|
|
|
updateCaption();
|
|
|
|
}
|
|
|
|
|
|
|
|
// if (fTabStopBegin >=0) and (fTabStopY=fText.CaretY) then begin
|
|
|
|
// if StartsStr(fLineBeforeTabStop,fText.LineText) and EndsStr(fLineAfterTabStop, fText.LineText) then
|
|
|
|
// fTabStopBegin := Length(fLineBeforeTabStop);
|
|
|
|
// if fLineAfterTabStop = '' then
|
|
|
|
// fTabStopEnd := Length(fText.LineText)+1
|
|
|
|
// else
|
|
|
|
// fTabStopEnd := Length(fText.LineText) - Length(fLineAfterTabStop);
|
|
|
|
// fXOffsetSince := fTabStopEnd - fText.CaretX;
|
|
|
|
// if (fText.CaretX < fTabStopBegin) or (fText.CaretX > (fTabStopEnd+1)) then begin
|
|
|
|
// fTabStopBegin :=-1;
|
|
|
|
// end;
|
|
|
|
// end;
|
|
|
|
|
|
|
|
// scSelection includes anything caret related
|
|
|
|
if (changes.testFlag(SynStatusChange::scSelection)) {
|
|
|
|
//MainForm.SetStatusbarLineCol;
|
|
|
|
|
|
|
|
|
|
|
|
// // Update the function tip
|
|
|
|
// fFunctionTip.ForceHide := false;
|
|
|
|
// if Assigned(fFunctionTipTimer) then begin
|
|
|
|
// if fFunctionTip.Activated and FunctionTipAllowed then begin
|
|
|
|
// fFunctionTip.Parser := fParser;
|
|
|
|
// fFunctionTip.FileName := fFileName;
|
|
|
|
// fFunctionTip.Show;
|
|
|
|
// end else begin // Reset the timer
|
|
|
|
// fFunctionTipTimer.Enabled := false;
|
|
|
|
// fFunctionTipTimer.Enabled := true;
|
|
|
|
// end;
|
|
|
|
}
|
|
|
|
|
|
|
|
// // Remove error line colors
|
|
|
|
// if not fIgnoreCaretChange then begin
|
|
|
|
// if (fErrorLine <> -1) and not fText.SelAvail then begin
|
|
|
|
// fText.InvalidateLine(fErrorLine);
|
|
|
|
// fText.InvalidateGutterLine(fErrorLine);
|
|
|
|
// fErrorLine := -1;
|
|
|
|
// end;
|
|
|
|
// end else
|
|
|
|
// fIgnoreCaretChange := false;
|
|
|
|
|
|
|
|
// if fText.SelAvail then begin
|
|
|
|
// if fText.GetWordAtRowCol(fText.CaretXY) = fText.SelText then begin
|
|
|
|
// fSelChanged:=True;
|
|
|
|
// BeginUpdate;
|
|
|
|
// EndUpdate;
|
|
|
|
// end else if fSelChanged then begin
|
|
|
|
// fSelChanged:=False; //invalidate to unhighlight others
|
|
|
|
// BeginUpdate;
|
|
|
|
// EndUpdate;
|
|
|
|
// end;
|
|
|
|
// end else if fSelChanged then begin
|
|
|
|
// fSelChanged:=False; //invalidate to unhighlight others
|
|
|
|
// BeginUpdate;
|
|
|
|
// EndUpdate;
|
|
|
|
// end;
|
|
|
|
// end;
|
|
|
|
|
|
|
|
// if scInsertMode in Changes then begin
|
|
|
|
// with MainForm.Statusbar do begin
|
|
|
|
// // Set readonly / insert / overwrite
|
|
|
|
// if fText.ReadOnly then
|
|
|
|
// Panels[2].Text := Lang[ID_READONLY]
|
|
|
|
// else if fText.InsertMode then
|
|
|
|
// Panels[2].Text := Lang[ID_INSERT]
|
|
|
|
// else
|
|
|
|
// Panels[2].Text := Lang[ID_OVERWRITE];
|
|
|
|
// end;
|
|
|
|
// end;
|
|
|
|
|
|
|
|
// mainForm.CaretList.AddCaret(self,fText.CaretY,fText.CaretX);
|
|
|
|
}
|
|
|
|
|
2021-06-07 11:02:03 +08:00
|
|
|
void Editor::applySettings()
|
|
|
|
{
|
|
|
|
SynEditorOptions options = eoAltSetsColumnMode |
|
|
|
|
eoDragDropEditing | eoDropFiles | eoKeepCaretX | eoTabsToSpaces |
|
2021-06-07 21:34:48 +08:00
|
|
|
eoRightMouseMovesCursor | eoScrollByOneLess | eoTabIndent | eoHideShowScrollbars;
|
2021-06-09 17:12:23 +08:00
|
|
|
|
|
|
|
//options
|
2021-06-07 11:02:03 +08:00
|
|
|
options.setFlag(eoAddIndent,pSettings->editor().addIndent());
|
|
|
|
options.setFlag(eoAutoIndent,pSettings->editor().autoIndent());
|
|
|
|
options.setFlag(eoTabsToSpaces,pSettings->editor().tabToSpaces());
|
|
|
|
|
|
|
|
options.setFlag(eoKeepCaretX,pSettings->editor().keepCaretX());
|
|
|
|
options.setFlag(eoEnhanceHomeKey,pSettings->editor().enhanceHomeKey());
|
|
|
|
options.setFlag(eoEnhanceEndKey,pSettings->editor().enhanceEndKey());
|
|
|
|
|
2021-06-08 21:41:42 +08:00
|
|
|
options.setFlag(eoHideShowScrollbars,pSettings->editor().autoHideScrollbar());
|
|
|
|
options.setFlag(eoScrollPastEol,pSettings->editor().scrollPastEol());
|
|
|
|
options.setFlag(eoScrollPastEof,pSettings->editor().scrollPastEof());
|
|
|
|
options.setFlag(eoScrollByOneLess,pSettings->editor().scrollByOneLess());
|
|
|
|
options.setFlag(eoHalfPageScroll,pSettings->editor().halfPageScroll());
|
2021-06-07 11:02:03 +08:00
|
|
|
setOptions(options);
|
|
|
|
|
|
|
|
setTabWidth(pSettings->editor().tabWidth());
|
|
|
|
setInsertCaret(pSettings->editor().caretForInsert());
|
|
|
|
setOverwriteCaret(pSettings->editor().caretForOverwrite());
|
|
|
|
setCaretColor(pSettings->editor().caretColor());
|
2021-06-09 17:12:23 +08:00
|
|
|
|
|
|
|
QFont f=QFont(pSettings->editor().fontName(),pSettings->editor().fontSize());
|
|
|
|
f.setStyleStrategy(QFont::PreferAntialias);
|
|
|
|
setFont(f);
|
|
|
|
|
|
|
|
// Set gutter properties
|
|
|
|
gutter().setLeftOffset(pSettings->editor().gutterLeftOffset());
|
|
|
|
gutter().setRightOffset(pSettings->editor().gutterRightOffset());
|
|
|
|
gutter().setBorderStyle(SynGutterBorderStyle::None);
|
|
|
|
gutter().setUseFontStyle(pSettings->editor().gutterUseCustomFont());
|
|
|
|
if (pSettings->editor().gutterUseCustomFont()) {
|
|
|
|
f=QFont(pSettings->editor().gutterFontName(),pSettings->editor().gutterFontSize());
|
|
|
|
} else {
|
|
|
|
f=QFont(pSettings->editor().fontName(),pSettings->editor().fontSize());
|
|
|
|
}
|
|
|
|
f.setStyleStrategy(QFont::PreferAntialias);
|
|
|
|
gutter().setFont(f);
|
|
|
|
gutter().setDigitCount(pSettings->editor().gutterDigitsCount());
|
|
|
|
gutter().setVisible(pSettings->editor().gutterVisible());
|
|
|
|
gutter().setAutoSize(pSettings->editor().gutterAutoSize());
|
|
|
|
gutter().setShowLineNumbers(pSettings->editor().gutterShowLineNumbers());
|
|
|
|
gutter().setLeadingZeros(pSettings->editor().gutterAddLeadingZero());
|
|
|
|
if (pSettings->editor().gutterLineNumbersStartZero())
|
|
|
|
gutter().setLineNumberStart(0);
|
|
|
|
else
|
|
|
|
gutter().setLineNumberStart(1);
|
|
|
|
//font color
|
|
|
|
|
2021-06-07 11:02:03 +08:00
|
|
|
}
|
|
|
|
|
2021-04-11 12:39:22 +08:00
|
|
|
void Editor::updateCaption(const QString& newCaption) {
|
|
|
|
if (mParentPageControl==NULL) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
int index = mParentPageControl->indexOf(this);
|
|
|
|
if (index==-1)
|
|
|
|
return;
|
|
|
|
if (newCaption.isEmpty()) {
|
|
|
|
QString caption = QFileInfo(mFilename).fileName();
|
2021-05-24 00:41:00 +08:00
|
|
|
if (this->modified()) {
|
2021-04-11 12:39:22 +08:00
|
|
|
caption.append("[*]");
|
|
|
|
}
|
|
|
|
mParentPageControl->setTabText(index,caption);
|
|
|
|
} else {
|
|
|
|
mParentPageControl->setTabText(index,newCaption);
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|