X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a78618b062fd6468a823ad1ed3d9034c493cd4a8..795dac4c866d89804e625fa1d04cb70aba320183:/src/common/ctrlcmn.cpp diff --git a/src/common/ctrlcmn.cpp b/src/common/ctrlcmn.cpp index 3b32359f66..f7145a78a5 100644 --- a/src/common/ctrlcmn.cpp +++ b/src/common/ctrlcmn.cpp @@ -35,6 +35,7 @@ #include "wx/statbmp.h" #include "wx/bitmap.h" #include "wx/utils.h" // for wxStripMenuCodes() + #include "wx/settings.h" #endif const char wxControlNameStr[] = "control"; @@ -173,7 +174,7 @@ int wxControlBase::FindAccelIndex(const wxString& label, wxString *labelOnly) // the character following MNEMONIC_PREFIX is the accelerator for this // control unless it is MNEMONIC_PREFIX too - this allows to insert // literal MNEMONIC_PREFIX chars into the label - static const wxChar MNEMONIC_PREFIX = _T('&'); + static const wxChar MNEMONIC_PREFIX = wxT('&'); if ( labelOnly ) { @@ -198,7 +199,7 @@ int wxControlBase::FindAccelIndex(const wxString& label, wxString *labelOnly) } else { - wxFAIL_MSG(_T("duplicate accel char in control label")); + wxFAIL_MSG(wxT("duplicate accel char in control label")); } } } @@ -217,6 +218,17 @@ wxBorder wxControlBase::GetDefaultBorder() const return wxBORDER_THEME; } +/* static */ wxVisualAttributes +wxControlBase::GetCompositeControlsDefaultAttributes(wxWindowVariant WXUNUSED(variant)) +{ + wxVisualAttributes attrs; + attrs.font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT); + attrs.colFg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + attrs.colBg = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW); + + return attrs; +} + // ---------------------------------------------------------------------------- // wxControlBase - ellipsization code // ---------------------------------------------------------------------------- @@ -233,6 +245,8 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD wxASSERT_MSG(!curLine.Contains('\n'), "Use Ellipsize() instead!"); + wxASSERT_MSG( mode != wxELLIPSIZE_NONE, "shouldn't be called at all then" ); + // NOTE: this function assumes that any mnemonic/tab character has already // been handled if it was necessary to handle them (see Ellipsize()) @@ -254,6 +268,7 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD int excessPixels = totalWidth - maxFinalWidth + replacementWidth + marginWidth; // security margin (NEEDED!) + wxASSERT(excessPixels>0); // remove characters in excess size_t initialChar, // index of first char to erase @@ -261,83 +276,84 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD switch (mode) { - case wxELLIPSIZE_START: - initialChar = 0; - for (nChars=0; - nChars < len && charOffsets[nChars] < excessPixels; - nChars++) - ; - break; - - case wxELLIPSIZE_MIDDLE: - { - // the start & end of the removed span of chars - initialChar = len/2; - size_t endChar = len/2; + case wxELLIPSIZE_START: + initialChar = 0; + for ( nChars=0; + nChars < len && charOffsets[nChars] < excessPixels; + nChars++ ) + ; + break; - int removed = 0; - for ( ; removed < excessPixels; ) + case wxELLIPSIZE_MIDDLE: { - if (initialChar > 0) - { - // width of the initialChar-th character - int width = charOffsets[initialChar] - - charOffsets[initialChar-1]; - - // remove the initialChar-th character - removed += width; - initialChar--; - } + // the start & end of the removed span of chars + initialChar = len/2; + size_t endChar = len/2; - if (endChar < len - 1 && - removed < excessPixels) + int removed = 0; + for ( ; removed < excessPixels; ) { - // width of the (endChar+1)-th character - int width = charOffsets[endChar+1] - - charOffsets[endChar]; - - // remove the endChar-th character - removed += width; - endChar++; + if (initialChar > 0) + { + // width of the initialChar-th character + int width = charOffsets[initialChar] - + charOffsets[initialChar-1]; + + // remove the initialChar-th character + removed += width; + initialChar--; + } + + if (endChar < len - 1 && + removed < excessPixels) + { + // width of the (endChar+1)-th character + int width = charOffsets[endChar+1] - + charOffsets[endChar]; + + // remove the endChar-th character + removed += width; + endChar++; + } + + if (initialChar == 0 && endChar == len-1) + { + nChars = len+1; + break; + } } - if (initialChar == 0 && endChar == len-1) - { - nChars = len+1; - break; - } + initialChar++; + nChars = endChar - initialChar + 1; } + break; - initialChar++; - nChars = endChar - initialChar + 1; - } - break; - - case wxELLIPSIZE_END: - { - wxASSERT(len > 0); + case wxELLIPSIZE_END: + { + wxASSERT(len > 0); - int maxWidth = totalWidth - excessPixels; - for (initialChar=0; - initialChar < len && - charOffsets[initialChar] < maxWidth; - initialChar++) - ; + int maxWidth = totalWidth - excessPixels; + for ( initialChar = 0; + initialChar < len && charOffsets[initialChar] < maxWidth; + initialChar++ ) + ; - if (initialChar == 0) - { - nChars = len; - } - else - { - //initialChar--; // go back one character - nChars = len - initialChar; + if (initialChar == 0) + { + nChars = len; + } + else + { + //initialChar--; // go back one character + nChars = len - initialChar; + } } - } - break; + break; - default: - wxFAIL_MSG("invalid ellipsize mode"); + case wxELLIPSIZE_NONE: + default: + wxFAIL_MSG("invalid ellipsize mode"); + return curLine; } wxString ret(curLine); @@ -353,7 +369,7 @@ wxString wxControlBase::DoEllipsizeSingleLine(const wxString& curLine, const wxD // if there is space for the replacement dots, add them if (maxFinalWidth > replacementWidth) - ret.append(wxELLIPSE_REPLACEMENT);//.insert(initialChar, wxELLIPSE_REPLACEMENT); + ret.insert(initialChar, wxELLIPSE_REPLACEMENT); } // if everything was ok, we should have shortened this line @@ -399,7 +415,7 @@ wxString wxControlBase::Ellipsize(const wxString& label, const wxDC& dc, } } // we need to remove mnemonics from the label for correct calculations - else if ( *pc == wxS('&') && (flags & wxELLIPSIZE_PROCESS_MNEMONICS) != 0 ) + else if ( *pc == wxS('&') && (flags & wxELLIPSIZE_FLAGS_PROCESS_MNEMONICS) ) { // pc+1 is safe: at worst we'll be at end() wxString::const_iterator next = pc + 1; @@ -408,7 +424,7 @@ wxString wxControlBase::Ellipsize(const wxString& label, const wxDC& dc, //else: remove this ampersand } // we need also to expand tabs to properly calc their size - else if ( *pc == wxS('\t') && (flags & wxELLIPSIZE_EXPAND_TAB) != 0 ) + else if ( *pc == wxS('\t') && (flags & wxELLIPSIZE_FLAGS_EXPAND_TABS) ) { // Windows natively expands the TABs to 6 spaces. Do the same: curLine += wxS(" ");