bool wxRadioBox::CanBeFocused() const { // If the control itself is hidden or disabled, no need to check anything // else. if ( !wxStaticBox::CanBeFocused() ) return false; // Otherwise, check if we have any buttons that can be focused. #if defined(__INTEL_COMPILER) && 1 /* VDM auto patch */ # pragma ivdep # pragma swp # pragma unroll # pragma prefetch # if 0 # pragma simd noassert # endif #endif /* VDM auto patch */ for ( size_t item = 0; item < m_radioButtons->GetCount(); item++ ) { if ( IsItemEnabled(item) && IsItemShown(item) ) return true; } // We didn't find any items that can accept focus, so neither can we as a // whole accept it. return false; }
BOOL CListBoxST::OnReflectedDblclk() { UINT nIndex = LB_ERR; BOOL bOutside = FALSE; DWORD dwPos = ::GetMessagePos(); CPoint Point(((int)(short)LOWORD(dwPos)), ((int)(short)HIWORD(dwPos))); ScreenToClient(&Point); nIndex = ItemFromPoint(Point, bOutside); if (!bOutside) return !IsItemEnabled(nIndex); return FALSE; } // End of OnReflectedDblclk
void MenuItemBase::PaintTopItem(Draw& w, int state) { Size sz = GetSize(); if(GUI_GlobalStyle() >= GUISTYLE_XP) { bool opaque = InOpaqueBar(); bool opaque2 = opaque || state; Color bg = SColorFace(); if(opaque2) ChPaint(w, 0, 0, sz.cx, sz.cy, style->topitem[state]); else if(opaque) w.DrawRect(0, 0, sz.cx, sz.cy, bg); String text = GetText(); Size isz = GetTextSize(text, StdFont()); Color txt = opaque ? style->topitemtext[0] : GetLabelTextColor(this); Color hltxt = opaque2 ? style->topitemtext[state] : GetLabelTextColor(this); if(!opaque && state != 2) { // Fix issues when text color is not compatible with transparent background (e.g. Ubuntu Ambience)] Color c = state == 1 ? SColorHighlight() : bg; int g = Grayscale(c); bool dark = IsDark(c); if(abs(g - Grayscale(txt)) < 70) txt = dark ? White() : Black(); if(abs(g - Grayscale(hltxt)) < 70) hltxt = dark ? White() : Black(); } DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), state, txt, hltxt); } else { w.DrawRect(sz, SColorFace); static const ColorF b0[] = { (ColorF)1, SColorLight, SColorLight, SColorShadow, SColorShadow, }; static const ColorF b1[] = { (ColorF)1, SColorShadow, SColorShadow, SColorLight, SColorLight, }; String text = GetText(); Size isz = GetTextSize(text, StdFont()); DrawMenuText(w, 6, (sz.cy - isz.cy) / 2, text, GetFont(), IsItemEnabled(), false, SColorMenuText, SColorHighlightText); if(state) DrawBorder(w, 0, 0, sz.cx, sz.cy, state == 2 ? b1 : b0); } }
bool wxRadioBox::CanBeFocused() const { // If the control itself is hidden or disabled, no need to check anything // else. if ( !wxStaticBox::CanBeFocused() ) return false; // Otherwise, check if we have any buttons that can be focused. for ( size_t item = 0; item < m_radioButtons->GetCount(); item++ ) { if ( IsItemEnabled(item) && IsItemShown(item) ) return true; } // We didn't find any items that can accept focus, so neither can we as a // whole accept it. return false; }
int wxRadioBoxBase::GetNextItem(int item, wxDirection dir, long style) const { const int itemStart = item; int count = GetCount(), numCols = GetColumnCount(), numRows = GetRowCount(); bool horz = (style & wxRA_SPECIFY_COLS) != 0; do { switch ( dir ) { case wxUP: if ( horz ) { item -= numCols; } else // vertical layout { if ( !item-- ) item = count - 1; } break; case wxLEFT: if ( horz ) { if ( !item-- ) item = count - 1; } else // vertical layout { item -= numRows; } break; case wxDOWN: if ( horz ) { item += numCols; } else // vertical layout { if ( ++item == count ) item = 0; } break; case wxRIGHT: if ( horz ) { if ( ++item == count ) item = 0; } else // vertical layout { item += numRows; } break; default: wxFAIL_MSG( wxT("unexpected wxDirection value") ); return wxNOT_FOUND; } // ensure that the item is in range [0..count) if ( item < 0 ) { // first map the item to the one in the same column but in the last // row item += count; // now there are 2 cases: either it is the first item of the last // row in which case we need to wrap again and get to the last item // or we can just go to the previous item if ( item % (horz ? numCols : numRows) ) item--; else item = count - 1; } else if ( item >= count ) { // same logic as above item -= count; // ... except that we need to check if this is not the last item, // not the first one if ( (item + 1) % (horz ? numCols : numRows) ) item++; else item = 0; } wxASSERT_MSG( item < count && item >= 0, wxT("logic error in wxRadioBox::GetNextItem()") ); } // we shouldn't select the non-active items, continue looking for a // visible and shown one unless we came back to the item we started from in // which case bail out to avoid infinite loop while ( !(IsItemShown(item) && IsItemEnabled(item)) && item != itemStart ); return item; }