Skip to content

Commit fa6b8e7

Browse files
committed
Breakpoint markers for models inside package
Calculate the line numbering from model line start instead of text block start
1 parent be7c680 commit fa6b8e7

File tree

7 files changed

+64
-42
lines changed

7 files changed

+64
-42
lines changed

OMEdit/OMEdit/OMEditGUI/Debugger/Breakpoints/BreakpointMarker.cpp

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,8 @@ void BreakpointMarker::documentClosing()
7878
}
7979

8080
//! @class DocumentMarker
81-
DocumentMarker::DocumentMarker(QTextDocument *doc)
82-
: ITextMarkable(doc) , mpTextDocument(doc)
81+
DocumentMarker::DocumentMarker(QTextDocument *doc, int lineStartNumber)
82+
: ITextMarkable(doc) , mpTextDocument(doc), mLineStartNumber(lineStartNumber)
8383
{
8484

8585
}
@@ -92,11 +92,11 @@ bool DocumentMarker::addMark(ITextMark *mark, int line)
9292
if (!docLayout) {
9393
return false;
9494
}
95-
QTextBlock block = mpTextDocument->findBlockByNumber(blockNumber);
95+
QTextBlock block = mpTextDocument->findBlockByNumber(mLineStartNumber > 0 ? line - mLineStartNumber : blockNumber);
9696
if (block.isValid()) {
9797
TextBlockUserData *userData = BaseEditorDocumentLayout::userData(block);
9898
userData->addMark(mark);
99-
mark->updateLineNumber(blockNumber + 1);
99+
mark->updateLineNumber(line);
100100
mark->updateBlock(block);
101101
docLayout->mHasBreakpoint = true;
102102
docLayout->requestUpdate();
@@ -153,8 +153,9 @@ void DocumentMarker::updateMark(ITextMark *mark)
153153
{
154154
Q_UNUSED(mark)
155155
BaseEditorDocumentLayout *docLayout = qobject_cast<BaseEditorDocumentLayout*>(mpTextDocument->documentLayout());
156-
if (docLayout)
156+
if (docLayout) {
157157
docLayout->requestUpdate();
158+
}
158159
}
159160

160161
void DocumentMarker::updateBreakpointsLineNumber()
@@ -164,7 +165,7 @@ void DocumentMarker::updateBreakpointsLineNumber()
164165
while (block.isValid()) {
165166
if (const TextBlockUserData *userData = BaseEditorDocumentLayout::testUserData(block))
166167
foreach (ITextMark *mrk, userData->marks()) {
167-
mrk->updateLineNumber(blockNumber + 1);
168+
mrk->updateLineNumber(mLineStartNumber > 0 ? blockNumber + mLineStartNumber : blockNumber + 1);
168169
}
169170
block = block.next();
170171
++blockNumber;
@@ -174,6 +175,7 @@ void DocumentMarker::updateBreakpointsLineNumber()
174175
void DocumentMarker::updateBreakpointsBlock(const QTextBlock &block)
175176
{
176177
if (const TextBlockUserData *userData = BaseEditorDocumentLayout::testUserData(block))
177-
foreach (ITextMark *mrk, userData->marks())
178+
foreach (ITextMark *mrk, userData->marks()) {
178179
mrk->updateBlock(block);
180+
}
179181
}

OMEdit/OMEdit/OMEditGUI/Debugger/Breakpoints/BreakpointMarker.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ class DocumentMarker : public ITextMarkable
121121
{
122122
Q_OBJECT
123123
public:
124-
DocumentMarker(QTextDocument *);
124+
DocumentMarker(QTextDocument *, int = 0);
125125

126126
// ITextMarkable
127127
bool addMark(ITextMark *mark, int line);
@@ -135,6 +135,7 @@ class DocumentMarker : public ITextMarkable
135135

136136
private:
137137
QTextDocument *mpTextDocument;
138+
int mLineStartNumber;
138139
};
139140

140141
#endif // BREAKPOINTMARKER_H

OMEdit/OMEdit/OMEditGUI/Debugger/Breakpoints/BreakpointsWidget.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -354,10 +354,10 @@ QVariant BreakpointsTreeModel::data(const QModelIndex &index, int role) const
354354
*/
355355
BreakpointMarker* BreakpointsTreeModel::findBreakpointMarker(const QString &fileName, int lineNumber)
356356
{
357-
foreach (BreakpointMarker *pBreakpointMarker, mBreakpointMarkersList)
358-
{
359-
if ((pBreakpointMarker->filePath().compare(fileName) == 0) && (pBreakpointMarker->lineNumber() == lineNumber))
357+
foreach (BreakpointMarker *pBreakpointMarker, mBreakpointMarkersList) {
358+
if ((pBreakpointMarker->filePath().compare(fileName) == 0) && (pBreakpointMarker->lineNumber() == lineNumber)) {
360359
return pBreakpointMarker;
360+
}
361361
}
362362
return 0;
363363
}
@@ -371,11 +371,14 @@ BreakpointMarker* BreakpointsTreeModel::findBreakpointMarker(const QString &file
371371
BreakpointTreeItem* BreakpointsTreeModel::findBreakpointTreeItem(const QString &fileName, int lineNumber, BreakpointTreeItem *pRootBreakpointTreeItem) const
372372
{
373373
QString ln = QString::number(lineNumber);
374-
if ((pRootBreakpointTreeItem->getFilePath().compare(fileName) == 0) && (pRootBreakpointTreeItem->getLineNumber().compare(ln) == 0))
374+
if ((pRootBreakpointTreeItem->getFilePath().compare(fileName) == 0) && (pRootBreakpointTreeItem->getLineNumber().compare(ln) == 0)) {
375375
return pRootBreakpointTreeItem;
376-
for (int i = pRootBreakpointTreeItem->getChildren().size(); --i >= 0; )
377-
if (BreakpointTreeItem *pBreakpointTreeItem = findBreakpointTreeItem(fileName, lineNumber, pRootBreakpointTreeItem->getChildren().at(i)))
376+
}
377+
for (int i = pRootBreakpointTreeItem->getChildren().size(); --i >= 0; ) {
378+
if (BreakpointTreeItem *pBreakpointTreeItem = findBreakpointTreeItem(fileName, lineNumber, pRootBreakpointTreeItem->getChildren().at(i))) {
378379
return pBreakpointTreeItem;
380+
}
381+
}
379382
return 0;
380383
}
381384

@@ -392,18 +395,18 @@ QModelIndex BreakpointsTreeModel::breakpointTreeItemIndex(const BreakpointTreeIt
392395
Helper function to find BreakpointTreeItem QModelIndex
393396
\see BreakpointsTreeModel::breakpointTreeItemIndex
394397
*/
395-
QModelIndex BreakpointsTreeModel::breakpointTreeItemIndexHelper(const BreakpointTreeItem *pBreakpointTreeItem,
396-
const BreakpointTreeItem *pParentBreakpointTreeItem,
397-
const QModelIndex &parentIndex) const
398+
QModelIndex BreakpointsTreeModel::breakpointTreeItemIndexHelper(const BreakpointTreeItem *pBreakpointTreeItem, const BreakpointTreeItem *pParentBreakpointTreeItem, const QModelIndex &parentIndex) const
398399
{
399-
if (pBreakpointTreeItem == pParentBreakpointTreeItem)
400+
if (pBreakpointTreeItem == pParentBreakpointTreeItem) {
400401
return parentIndex;
402+
}
401403
for (int i = pParentBreakpointTreeItem->getChildren().size(); --i >= 0; ) {
402404
const BreakpointTreeItem *childItem = pParentBreakpointTreeItem->getChildren().at(i);
403405
QModelIndex childIndex = index(i, 0, parentIndex);
404406
QModelIndex index = breakpointTreeItemIndexHelper(pBreakpointTreeItem, childItem, childIndex);
405-
if (index.isValid())
407+
if (index.isValid()) {
406408
return index;
409+
}
407410
}
408411
return QModelIndex();
409412
}
@@ -417,8 +420,7 @@ QModelIndex BreakpointsTreeModel::breakpointTreeItemIndexHelper(const Breakpoint
417420
\param pLibraryTreeItem - pointer LibraryTreeItem
418421
\param pParentBreakpointTreeItem - pointer BreakpointTreeItem
419422
*/
420-
void BreakpointsTreeModel::insertBreakpoint(BreakpointMarker *pBreakpointMarker, LibraryTreeItem *pLibraryTreeItem,
421-
BreakpointTreeItem *pParentBreakpointTreeItem)
423+
void BreakpointsTreeModel::insertBreakpoint(BreakpointMarker *pBreakpointMarker, LibraryTreeItem *pLibraryTreeItem, BreakpointTreeItem *pParentBreakpointTreeItem)
422424
{
423425
// Add the breakpoint to the list.
424426
mBreakpointMarkersList.append(pBreakpointMarker);

OMEdit/OMEdit/OMEditGUI/Debugger/Breakpoints/BreakpointsWidget.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,10 @@ class BreakpointsTreeModel : public QAbstractItemModel
9999
BreakpointMarker* findBreakpointMarker(const QString &fileName, int lineNumber);
100100
BreakpointTreeItem* findBreakpointTreeItem(const QString &fileName, int lineNumber, BreakpointTreeItem *pRootBreakpointTreeItem) const;
101101
QModelIndex breakpointTreeItemIndex(const BreakpointTreeItem *pBreakpointTreeItem) const;
102-
QModelIndex breakpointTreeItemIndexHelper(const BreakpointTreeItem *pBreakpointTreeItem, const BreakpointTreeItem *pParentBreakpointTreeItem,
103-
const QModelIndex &parentIndex) const;
102+
QModelIndex breakpointTreeItemIndexHelper(const BreakpointTreeItem *pBreakpointTreeItem, const BreakpointTreeItem *pParentBreakpointTreeItem, const QModelIndex &parentIndex) const;
104103
void insertBreakpoint(BreakpointMarker *pBreakpointMarker, LibraryTreeItem *pLibraryTreeItem, BreakpointTreeItem *pParentBreakpointTreeItem);
105104
void updateBreakpoint(BreakpointMarker *pBreakpointMarker, int lineNumber);
106-
void updateBreakpoint(BreakpointTreeItem *pBreakpointTreeItem, QString filePath, int lineNumber, bool enabled, int ignoreCount,
107-
QString condition);
105+
void updateBreakpoint(BreakpointTreeItem *pBreakpointTreeItem, QString filePath, int lineNumber, bool enabled, int ignoreCount, QString condition);
108106
void removeBreakpoint(BreakpointMarker *pBreakpointMarker);
109107
void removeBreakpoint(BreakpointTreeItem *pBreakpointTreeItem);
110108
private:

OMEdit/OMEdit/OMEditGUI/Editors/BaseEditor.cpp

Lines changed: 30 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -865,7 +865,11 @@ void PlainTextEdit::setCanHaveBreakpoints(bool canHaveBreakpoints)
865865
int PlainTextEdit::lineNumberAreaWidth()
866866
{
867867
int digits = 2;
868-
int max = qMax(1, document()->blockCount());
868+
int lines = document()->blockCount();
869+
if (mpBaseEditor->isModelicaModelInPackageOneFile()) {
870+
lines = document()->blockCount() + mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart;
871+
}
872+
int max = qMax(1, lines);
869873
while (max >= 100) {
870874
max /= 10;
871875
++digits;
@@ -937,18 +941,16 @@ void PlainTextEdit::lineNumberAreaPaintEvent(QPaintEvent *event)
937941
if (pTextBlockUserData && canHaveBreakpoints()) {
938942
int xoffset = 0;
939943
foreach (ITextMark *mk, pTextBlockUserData->marks()) {
940-
int x = 0;
941944
int radius = fmLineSpacing;
942-
QRect r(x + xoffset, top, radius, radius);
945+
QRect r(xoffset, top, radius, radius);
943946
mk->icon().paint(&painter, r, Qt::AlignCenter);
944947
xoffset += 2;
945948
}
946949
}
947950
/* paint line numbers */
948951
if (block.isVisible() && bottom >= event->rect().top()) {
949952
QString number;
950-
if (mpBaseEditor->getModelWidget() && mpBaseEditor->getModelWidget()->getLibraryTreeItem()->isInPackageOneFile() &&
951-
mpBaseEditor->getModelWidget()->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::Modelica) {
953+
if (mpBaseEditor->isModelicaModelInPackageOneFile()) {
952954
number = QString::number(blockNumber + mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart);
953955
} else {
954956
number = QString::number(blockNumber + 1);
@@ -1046,6 +1048,9 @@ void PlainTextEdit::lineNumberAreaMouseEvent(QMouseEvent *event)
10461048
}
10471049
QString fileName = mpBaseEditor->getModelWidget()->getLibraryTreeItem()->getFileName();
10481050
int lineNumber = cursor.blockNumber() + 1;
1051+
if (mpBaseEditor->isModelicaModelInPackageOneFile()) {
1052+
lineNumber = cursor.blockNumber() + mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart;
1053+
}
10491054
if (event->button() == Qt::LeftButton) { //! left clicked: add/remove breakpoint
10501055
toggleBreakpoint(fileName, lineNumber);
10511056
} else if (event->button() == Qt::RightButton) { //! right clicked: show context menu
@@ -1079,8 +1084,7 @@ void PlainTextEdit::lineNumberAreaMouseEvent(QMouseEvent *event)
10791084
*/
10801085
void PlainTextEdit::goToLineNumber(int lineNumber)
10811086
{
1082-
if (mpBaseEditor->getModelWidget() && mpBaseEditor->getModelWidget()->getLibraryTreeItem()->isInPackageOneFile() &&
1083-
mpBaseEditor->getModelWidget()->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::Modelica) {
1087+
if (mpBaseEditor->isModelicaModelInPackageOneFile()) {
10841088
int lineNumberStart = mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart;
10851089
int lineNumberDifferenceFromStart = lineNumberStart - 1;
10861090
lineNumber -= lineNumberDifferenceFromStart;
@@ -1416,7 +1420,10 @@ void PlainTextEdit::updateCursorPosition()
14161420
{
14171421
if (mpBaseEditor->getModelWidget() && isVisible()) {
14181422
const QTextBlock block = textCursor().block();
1419-
const int line = block.blockNumber() + 1;
1423+
int line = block.blockNumber() + 1;
1424+
if (mpBaseEditor->isModelicaModelInPackageOneFile()) {
1425+
line = block.blockNumber() + mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart;
1426+
}
14201427
const int column = textCursor().columnNumber();
14211428
Label *pPositionLabel = MainWindow::instance()->getPositionLabel();
14221429
pPositionLabel->setText(QString("Ln: %1, Col: %2").arg(line).arg(column));
@@ -2037,6 +2044,13 @@ QString BaseEditor::wordUnderCursor()
20372044
return cursor.selectedText();
20382045
}
20392046

2047+
bool BaseEditor::isModelicaModelInPackageOneFile()
2048+
{
2049+
return (mpModelWidget &&
2050+
mpModelWidget->getLibraryTreeItem()->isInPackageOneFile() &&
2051+
mpModelWidget->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::Modelica);
2052+
}
2053+
20402054
/*!
20412055
* \brief BaseEditor::initialize
20422056
* Initializes the editor with default values.
@@ -2786,16 +2800,16 @@ GotoLineDialog::GotoLineDialog(BaseEditor *pBaseEditor)
27862800
*/
27872801
int GotoLineDialog::exec()
27882802
{
2789-
if (mpBaseEditor->getModelWidget() && mpBaseEditor->getModelWidget()->getLibraryTreeItem()->isInPackageOneFile() &&
2790-
mpBaseEditor->getModelWidget()->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::Modelica) {
2791-
int lineNumberStart = mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart;
2792-
mpLineNumberLabel->setText(tr("Enter line number (%1 to %2):").arg(QString::number(lineNumberStart))
2793-
.arg(QString::number(mpBaseEditor->getPlainTextEdit()->blockCount() + lineNumberStart - 1)));
2803+
QIntValidator *intValidator = new QIntValidator(this);
2804+
if (mpBaseEditor->isModelicaModelInPackageOneFile()) {
2805+
int from = mpBaseEditor->getModelWidget()->getLibraryTreeItem()->mClassInformation.lineNumberStart;
2806+
int to = mpBaseEditor->getPlainTextEdit()->blockCount() + from - 1;
2807+
mpLineNumberLabel->setText(tr("Enter line number (%1 to %2):").arg(from).arg(to));
2808+
intValidator->setRange(from, to);
27942809
} else {
2795-
mpLineNumberLabel->setText(tr("Enter line number (1 to %1):").arg(QString::number(mpBaseEditor->getPlainTextEdit()->blockCount())));
2810+
mpLineNumberLabel->setText(tr("Enter line number (1 to %1):").arg(mpBaseEditor->getPlainTextEdit()->blockCount()));
2811+
intValidator->setRange(1, mpBaseEditor->getPlainTextEdit()->blockCount());
27962812
}
2797-
QIntValidator *intValidator = new QIntValidator(this);
2798-
intValidator->setRange(1, mpBaseEditor->getPlainTextEdit()->blockCount());
27992813
mpLineNumberTextBox->setValidator(intValidator);
28002814
return QDialog::exec();
28012815
}

OMEdit/OMEdit/OMEditGUI/Editors/BaseEditor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,7 @@ class BaseEditor : public QWidget
331331
void setForceSetPlainText(bool forceSetPlainText) {mForceSetPlainText = forceSetPlainText;}
332332
virtual void popUpCompleter () = 0;
333333
virtual QString wordUnderCursor();
334+
bool isModelicaModelInPackageOneFile();
334335
private:
335336
void initialize();
336337
void createActions();

OMEdit/OMEdit/OMEditGUI/Editors/ModelicaEditor.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ ModelicaEditor::ModelicaEditor(QWidget *pParent)
6161
mpPlainTextEdit->setCanHaveBreakpoints(true);
6262
mpPlainTextEdit->setCompletionCharacters(".");
6363
/* set the document marker */
64-
mpDocumentMarker = new DocumentMarker(mpPlainTextEdit->document());
64+
if (isModelicaModelInPackageOneFile()) {
65+
mpDocumentMarker = new DocumentMarker(mpPlainTextEdit->document(), mpModelWidget->getLibraryTreeItem()->mClassInformation.lineNumberStart);
66+
} else {
67+
mpDocumentMarker = new DocumentMarker(mpPlainTextEdit->document());
68+
}
6569
}
6670

6771
/*!

0 commit comments

Comments
 (0)