diff --git a/src/audiomixerboard.cpp b/src/audiomixerboard.cpp index 45c452e223..3080eb538d 100644 --- a/src/audiomixerboard.cpp +++ b/src/audiomixerboard.cpp @@ -676,7 +676,9 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) // Label text -------------------------------------------------------------- - QString strModText = cChanInfo.strName; + QString strModText = cChanInfo.strName; + QTextBoundaryFinder tbfName ( QTextBoundaryFinder::Grapheme, cChanInfo.strName ); + int iBreakPos; // apply break position and font size depending on the selected design if ( eDesign == GD_SLIMFADER ) @@ -685,10 +687,7 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) plblLabel->setStyleSheet ( "QLabel { color: black; }" ); // break at every 4th character - for ( int iInsPos = 4; iInsPos <= strModText.size() - 1; iInsPos += 4 + 1 ) - { - strModText.insert ( iInsPos, "\n" ); - } + iBreakPos = 4; } else { @@ -696,11 +695,20 @@ void CChannelFader::SetChannelInfos ( const CChannelInfo& cChanInfo ) plblLabel->setStyleSheet ( "QLabel { color: black; font: bold; }" ); // break text at predefined position - const int iBreakPos = MAX_LEN_FADER_TAG / 2; + iBreakPos = MAX_LEN_FADER_TAG / 2; + } - if ( strModText.length() > iBreakPos ) + int iInsPos = iBreakPos; + int iCount = 0; + int iLineNumber = 0; + while ( tbfName.toNextBoundary() != -1 ) + { + ++iCount; + if ( iCount == iInsPos ) { - strModText.insert ( iBreakPos, QString ( "\n" ) ); + strModText.insert ( tbfName.position() + iLineNumber, QString ( "\n" ) ); + iLineNumber++; + iInsPos += iBreakPos; } } diff --git a/src/audiomixerboard.h b/src/audiomixerboard.h index 3dde5c9f77..01299268b7 100644 --- a/src/audiomixerboard.h +++ b/src/audiomixerboard.h @@ -38,6 +38,7 @@ #include #include #include +#include #include "global.h" #include "util.h" #include "levelmeter.h" diff --git a/src/util.cpp b/src/util.cpp index 8d890af6de..c6076c0ea8 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -666,6 +666,19 @@ void CLanguageComboBox::OnLanguageActivated ( int iLanguageIdx ) emit LanguageChanged ( itemData ( iLanguageIdx ).toString() ); } } + +static inline QString TruncateString ( QString str, int position ) +{ + QTextBoundaryFinder tbfString ( QTextBoundaryFinder::Grapheme, str ); + + tbfString.setPosition ( position ); + if ( !tbfString.isAtBoundary() ) + { + tbfString.toPreviousBoundary(); + position = tbfString.position(); + } + return str.left ( position ); +} #endif /******************************************************************************\ diff --git a/src/util.h b/src/util.h index 9f290f48d1..555eb1f22f 100644 --- a/src/util.h +++ b/src/util.h @@ -40,6 +40,7 @@ # include # include # include +# include # include "ui_aboutdlgbase.h" #endif #include