Skip to content

Commit 88cb521

Browse files
committed
Create space for folding in the line number area.
1 parent e960186 commit 88cb521

File tree

3 files changed

+33
-19
lines changed

3 files changed

+33
-19
lines changed

OMEdit/OMEditGUI/Editors/BaseEditor.cpp

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -427,6 +427,12 @@ TextBlockUserData* BaseEditorDocumentLayout::userData(const QTextBlock &block)
427427
return data;
428428
}
429429

430+
static int foldBoxWidth(const QFontMetrics &fm)
431+
{
432+
const int lineSpacing = fm.lineSpacing();
433+
return lineSpacing + lineSpacing % 2 + 1;
434+
}
435+
430436
/*!
431437
* \class BaseEditor::PlainTextEdit
432438
* Internal QPlainTextEdit for Editor.
@@ -474,9 +480,13 @@ int BaseEditor::PlainTextEdit::lineNumberAreaWidth()
474480
max /= 10;
475481
++digits;
476482
}
477-
int space = 10 + fontMetrics().width(QLatin1Char('9')) * digits;
483+
const QFontMetrics fm(document()->defaultFont());
484+
int space = fm.width(QLatin1Char('9')) * digits;
478485
if (mpBaseEditor->canHaveBreakpoints()) {
479-
space += 16; /* the breakpoint enable/disable svg is 16*16. */
486+
space += fm.lineSpacing() + 2;
487+
}
488+
if (mpBaseEditor->canHaveFoldings()) {
489+
space += foldBoxWidth(fm);
480490
}
481491
return space;
482492
}
@@ -496,10 +506,22 @@ void BaseEditor::PlainTextEdit::lineNumberAreaPaintEvent(QPaintEvent *event)
496506
int blockNumber = block.blockNumber();
497507
int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top();
498508
int bottom = top + (int) blockBoundingRect(block).height();
499-
const QFontMetrics fm(mpLineNumberArea->font());
509+
const QFontMetrics fm(document()->defaultFont());
500510
int fmLineSpacing = fm.lineSpacing();
501511

502512
while (block.isValid() && top <= event->rect().bottom()) {
513+
/* paint breakpoints */
514+
TextBlockUserData *pTextBlockUserData = static_cast<TextBlockUserData*>(block.userData());
515+
if (pTextBlockUserData && mpBaseEditor->canHaveBreakpoints()) {
516+
int xoffset = 0;
517+
foreach (ITextMark *mk, pTextBlockUserData->marks()) {
518+
int x = 0;
519+
int radius = fmLineSpacing;
520+
QRect r(x + xoffset, top, radius, radius);
521+
mk->icon().paint(&painter, r, Qt::AlignCenter);
522+
xoffset += 2;
523+
}
524+
}
503525
/* paint line numbers */
504526
if (block.isVisible() && bottom >= event->rect().top()) {
505527
QString number;
@@ -516,20 +538,8 @@ void BaseEditor::PlainTextEdit::lineNumberAreaPaintEvent(QPaintEvent *event)
516538
painter.setPen(Qt::gray);
517539
}
518540
painter.setFont(document()->defaultFont());
519-
QFontMetrics fontMetrics (document()->defaultFont());
520-
painter.drawText(0, top, mpLineNumberArea->width() - 5, fontMetrics.height(), Qt::AlignRight, number);
521-
}
522-
/* paint breakpoints */
523-
TextBlockUserData *pTextBlockUserData = static_cast<TextBlockUserData*>(block.userData());
524-
if (pTextBlockUserData && mpBaseEditor->canHaveBreakpoints()) {
525-
int xoffset = 0;
526-
foreach (ITextMark *mk, pTextBlockUserData->marks()) {
527-
int x = 0;
528-
int radius = fmLineSpacing + 2;
529-
QRect r(x + xoffset, top, radius, radius);
530-
mk->icon().paint(&painter, r, Qt::AlignCenter);
531-
xoffset += 2;
532-
}
541+
const int collapseColumnWidth = mpBaseEditor->canHaveFoldings() ? foldBoxWidth(fm): 0;
542+
painter.drawText(0, top, mpLineNumberArea->width() - collapseColumnWidth - 5, fm.height(), Qt::AlignRight, number);
533543
}
534544
block = block.next();
535545
top = bottom;
@@ -991,13 +1001,13 @@ void BaseEditor::PlainTextEdit::focusOutEvent(QFocusEvent *event)
9911001
* \param pMainWindow
9921002
*/
9931003
BaseEditor::BaseEditor(MainWindow *pMainWindow)
994-
: QWidget(pMainWindow), mpModelWidget(0), mpMainWindow(pMainWindow), mCanHaveBreakpoints(false)
1004+
: QWidget(pMainWindow), mpModelWidget(0), mpMainWindow(pMainWindow), mCanHaveBreakpoints(false), mCanHaveFoldings(false)
9951005
{
9961006
initialize();
9971007
}
9981008

9991009
BaseEditor::BaseEditor(ModelWidget *pModelWidget)
1000-
: QWidget(pModelWidget), mpModelWidget(pModelWidget), mCanHaveBreakpoints(false)
1010+
: QWidget(pModelWidget), mpModelWidget(pModelWidget), mCanHaveBreakpoints(false), mCanHaveFoldings(false)
10011011
{
10021012
mpMainWindow = pModelWidget->getModelWidgetContainer()->getMainWindow();
10031013
initialize();

OMEdit/OMEditGUI/Editors/BaseEditor.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,8 @@ class BaseEditor : public QWidget
191191
FindReplaceWidget* getFindReplaceWidget() {return mpFindReplaceWidget;}
192192
void setCanHaveBreakpoints(bool canHaveBreakpoints);
193193
bool canHaveBreakpoints() {return mCanHaveBreakpoints;}
194+
void setCanHaveFoldings(bool canHaveFoldings) {mCanHaveFoldings = canHaveFoldings;}
195+
bool canHaveFoldings() {return mCanHaveFoldings;}
194196
QAction *getToggleBreakpointAction() {return mpToggleBreakpointAction;}
195197
DocumentMarker* getDocumentMarker() {return mpDocumentMarker;}
196198
void goToLineNumber(int lineNumber);
@@ -203,6 +205,7 @@ class BaseEditor : public QWidget
203205
PlainTextEdit *mpPlainTextEdit;
204206
FindReplaceWidget *mpFindReplaceWidget;
205207
bool mCanHaveBreakpoints;
208+
bool mCanHaveFoldings;
206209
QAction *mpFindReplaceAction;
207210
QAction *mpClearFindReplaceTextsAction;
208211
QAction *mpGotoLineNumberAction;

OMEdit/OMEditGUI/Editors/ModelicaEditor.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ ModelicaEditor::ModelicaEditor(ModelWidget *pParent)
129129
: BaseEditor(pParent), mLastValidText(""), mTextChanged(false), mForceSetPlainText(false)
130130
{
131131
setCanHaveBreakpoints(true);
132+
setCanHaveFoldings(true);
132133
/* set the document marker */
133134
mpDocumentMarker = new DocumentMarker(mpPlainTextEdit->document());
134135
}

0 commit comments

Comments
 (0)