Index: /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp	(revision 42811)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/selector/graphics/details/UIGDetailsElement.cpp	(revision 42812)
@@ -217,18 +217,35 @@
 
             /* Search for the maximum line widths: */
-            int iMaximumFirstLineWidth = 0;
-            int iMaximumSecondLineWidth = 0;
+            int iMaximumLeftLineWidth = 0;
+            int iMaximumRightLineWidth = 0;
+            bool fSingleColumnText = true;
             foreach (const UITextTableLine line, m_text)
             {
-                bool fKeyValueRow = !line.second.isEmpty();
-                QString strFirstLine = fKeyValueRow ? line.first + ":" : line.first;
-                QString strSecondLine = line.second;
-                iMaximumFirstLineWidth = qMax(iMaximumFirstLineWidth, fm.width(strFirstLine));
-                iMaximumSecondLineWidth = qMax(iMaximumSecondLineWidth, fm.width(strSecondLine));
+                bool fRightColumnPresent = !line.second.isEmpty();
+                if (fRightColumnPresent)
+                    fSingleColumnText = false;
+                QString strLeftLine = fRightColumnPresent ? line.first + ":" : line.first;
+                QString strRightLine = line.second;
+                iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strLeftLine));
+                iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strRightLine));
             }
+            iMaximumLeftLineWidth += 1;
+            iMaximumRightLineWidth += 1;
 
             /* Calculate minimum text width: */
-            int iMinimumSecondLineWidth = qMin(iMaximumSecondLineWidth, iMinimumTextColumnWidth);
-            int iMinimumTextWidth = iMaximumFirstLineWidth + iSpacing + iMinimumSecondLineWidth;
+            int iMinimumTextWidth = 0;
+            if (fSingleColumnText)
+            {
+                /* Take into account only left column: */
+                int iMinimumLeftColumnWidth = qMin(iMaximumLeftLineWidth, iMinimumTextColumnWidth);
+                iMinimumTextWidth = iMinimumLeftColumnWidth;
+            }
+            else
+            {
+                /* Take into account both columns, but wrap only right one: */
+                int iMinimumLeftColumnWidth = iMaximumLeftLineWidth;
+                int iMinimumRightColumnWidth = qMin(iMaximumRightLineWidth, iMinimumTextColumnWidth);
+                iMinimumTextWidth = iMinimumLeftColumnWidth + iSpacing + iMinimumRightColumnWidth;
+            }
 
             /* Return result: */
@@ -240,25 +257,40 @@
             int iMargin = data(ElementData_Margin).toInt();
             int iSpacing = data(ElementData_Spacing).toInt();
+            int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt();
             int iMaximumTextWidth = (int)geometry().width() - 3 * iMargin - iSpacing;
             QFont textFont = data(ElementData_TextFont).value<QFont>();
             QFontMetrics fm(textFont);
 
-            /* Search for maximum line widths: */
-            int iMaximumFirstLineWidth = 0;
-            int iMaximumSecondLineWidth = 0;
+            /* Search for the maximum line widths: */
+            int iMaximumLeftLineWidth = 0;
+            int iMaximumRightLineWidth = 0;
+            bool fSingleColumnText = true;
             foreach (const UITextTableLine line, m_text)
             {
-                bool fKeyValueRow = !line.second.isEmpty();
-                QString strFirstLine = fKeyValueRow ? line.first + ":" : line.first;
+                bool fRightColumnPresent = !line.second.isEmpty();
+                if (fRightColumnPresent)
+                    fSingleColumnText = false;
+                QString strFirstLine = fRightColumnPresent ? line.first + ":" : line.first;
                 QString strSecondLine = line.second;
-                iMaximumFirstLineWidth = qMax(iMaximumFirstLineWidth, fm.width(strFirstLine));
-                iMaximumSecondLineWidth = qMax(iMaximumSecondLineWidth, fm.width(strSecondLine));
+                iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strFirstLine));
+                iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strSecondLine));
             }
-            iMaximumFirstLineWidth += 1;
-            iMaximumSecondLineWidth += 1;
+            iMaximumLeftLineWidth += 1;
+            iMaximumRightLineWidth += 1;
 
             /* Calculate column widths: */
-            int iFirstColumnWidth = iMaximumFirstLineWidth;
-            int iSecondColumnWidth = iMaximumTextWidth - iFirstColumnWidth;
+            int iLeftColumnWidth = 0;
+            int iRightColumnWidth = 0;
+            if (fSingleColumnText)
+            {
+                /* Take into account only left column: */
+                iLeftColumnWidth = qMax(iMinimumTextColumnWidth, iMaximumTextWidth);
+            }
+            else
+            {
+                /* Take into account both columns, but wrap only right one: */
+                iLeftColumnWidth = iMaximumLeftLineWidth;
+                iRightColumnWidth = iMaximumTextWidth - iLeftColumnWidth;
+            }
 
             /* For each the line: */
@@ -267,25 +299,25 @@
             {
                 /* First layout: */
-                int iFirstColumnHeight = 0;
+                int iLeftColumnHeight = 0;
                 if (!line.first.isEmpty())
                 {
-                    bool fKeyValueRow = !line.second.isEmpty();
+                    bool fRightColumnPresent = !line.second.isEmpty();
                     QTextLayout *pTextLayout = prepareTextLayout(textFont,
-                                                                 fKeyValueRow ? line.first + ":" : line.first,
-                                                                 iFirstColumnWidth, iFirstColumnHeight);
+                                                                 fRightColumnPresent ? line.first + ":" : line.first,
+                                                                 iLeftColumnWidth, iLeftColumnHeight);
                     delete pTextLayout;
                 }
 
                 /* Second layout: */
-                int iSecondColumnHeight = 0;
+                int iRightColumnHeight = 0;
                 if (!line.second.isEmpty())
                 {
                     QTextLayout *pTextLayout = prepareTextLayout(textFont, line.second,
-                                                                 iSecondColumnWidth, iSecondColumnHeight);
+                                                                 iRightColumnWidth, iRightColumnHeight);
                     delete pTextLayout;
                 }
 
                 /* Append summary text height: */
-                iSummaryTextHeight += qMax(iFirstColumnHeight, iSecondColumnHeight);
+                iSummaryTextHeight += qMax(iLeftColumnHeight, iRightColumnHeight);
             }
 
@@ -317,5 +349,23 @@
 void UIGDetailsElement::setText(const UITextTable &text)
 {
-    m_text = text;
+    /* Clear first: */
+    m_text.clear();
+    /* For each the line of the passed table: */
+    foreach (const UITextTableLine &line, text)
+    {
+        /* Get lines: */
+        QString strLeftLine = line.first;
+        QString strRightLine = line.second;
+        /* If 2nd line is empty: */
+        if (strRightLine.isEmpty())
+        {
+            /* Parse the 1st one: */
+            QStringList subLines = strLeftLine.split(QRegExp("\\n"));
+            foreach (const QString &strSubLine, subLines)
+                m_text << UITextTableLine(strSubLine, QString());
+        }
+        else
+            m_text << UITextTableLine(strLeftLine, strRightLine);
+    }
 }
 
@@ -557,25 +607,40 @@
     {
         /* Prepare variables: */
+        int iMinimumTextColumnWidth = data(ElementData_MinimumTextColumnWidth).toInt();
         int iMaximumTextWidth = geometry().width() - 3 * iMargin - iSpacing;
         QFont textFont = data(ElementData_TextFont).value<QFont>();
         QFontMetrics fm(textFont);
 
-        /* Search for maximum line widths: */
-        int iMaximumFirstLineWidth = 0;
-        int iMaximumSecondLineWidth = 0;
+        /* Search for the maximum line widths: */
+        int iMaximumLeftLineWidth = 0;
+        int iMaximumRightLineWidth = 0;
+        bool fSingleColumnText = true;
         foreach (const UITextTableLine line, m_text)
         {
-            bool fKeyValueRow = !line.second.isEmpty();
-            QString strFirstLine = fKeyValueRow ? line.first + ":" : line.first;
+            bool fRightColumnPresent = !line.second.isEmpty();
+            if (fRightColumnPresent)
+                fSingleColumnText = false;
+            QString strFirstLine = fRightColumnPresent ? line.first + ":" : line.first;
             QString strSecondLine = line.second;
-            iMaximumFirstLineWidth = qMax(iMaximumFirstLineWidth, fm.width(strFirstLine));
-            iMaximumSecondLineWidth = qMax(iMaximumSecondLineWidth, fm.width(strSecondLine));
-        }
-        iMaximumFirstLineWidth += 1;
-        iMaximumSecondLineWidth += 1;
+            iMaximumLeftLineWidth = qMax(iMaximumLeftLineWidth, fm.width(strFirstLine));
+            iMaximumRightLineWidth = qMax(iMaximumRightLineWidth, fm.width(strSecondLine));
+        }
+        iMaximumLeftLineWidth += 1;
+        iMaximumRightLineWidth += 1;
 
         /* Calculate column widths: */
-        int iFirstColumnWidth = iMaximumFirstLineWidth;
-        int iSecondColumnWidth = iMaximumTextWidth - iFirstColumnWidth;
+        int iLeftColumnWidth = 0;
+        int iRightColumnWidth = 0;
+        if (fSingleColumnText)
+        {
+            /* Take into account only left column: */
+            iLeftColumnWidth = qMax(iMinimumTextColumnWidth, iMaximumTextWidth);
+        }
+        else
+        {
+            /* Take into account both columns, but wrap only right one: */
+            iLeftColumnWidth = iMaximumLeftLineWidth;
+            iRightColumnWidth = iMaximumTextWidth - iLeftColumnWidth;
+        }
 
         /* Where to paint? */
@@ -587,11 +652,11 @@
         {
             /* First layout: */
-            int iFirstColumnHeight = 0;
+            int iLeftColumnHeight = 0;
             if (!line.first.isEmpty())
             {
-                bool fKeyValueRow = !line.second.isEmpty();
+                bool fRightColumnPresent = !line.second.isEmpty();
                 QTextLayout *pTextLayout = prepareTextLayout(textFont,
-                                                             fKeyValueRow ? line.first + ":" : line.first,
-                                                             iFirstColumnWidth, iFirstColumnHeight);
+                                                             fRightColumnPresent ? line.first + ":" : line.first,
+                                                             iLeftColumnWidth, iLeftColumnHeight);
                 pTextLayout->draw(pPainter, QPointF(iMachineTextX, iMachineTextY));
                 delete pTextLayout;
@@ -599,15 +664,15 @@
 
             /* Second layout: */
-            int iSecondColumnHeight = 0;
+            int iRightColumnHeight = 0;
             if (!line.second.isEmpty())
             {
                 QTextLayout *pTextLayout = prepareTextLayout(textFont, line.second,
-                                                             iSecondColumnWidth, iSecondColumnHeight);
-                pTextLayout->draw(pPainter, QPointF(iMachineTextX + iFirstColumnWidth + iSpacing, iMachineTextY));
+                                                             iRightColumnWidth, iRightColumnHeight);
+                pTextLayout->draw(pPainter, QPointF(iMachineTextX + iLeftColumnWidth + iSpacing, iMachineTextY));
                 delete pTextLayout;
             }
 
             /* Indent Y: */
-            iMachineTextY += qMax(iFirstColumnHeight, iSecondColumnHeight);
+            iMachineTextY += qMax(iLeftColumnHeight, iRightColumnHeight);
         }
     }
