@@ -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 */
9931003BaseEditor::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
9991009BaseEditor::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 ();
0 commit comments