bool CGUISpinControl::CanMoveUp(bool bTestReverse) { // test for reverse... if (bTestReverse && m_bReverse) return CanMoveDown(false); switch (m_iType) { case SPIN_CONTROL_TYPE_PAGE: return m_currentItem > 0; case SPIN_CONTROL_TYPE_INT: { if (m_iValue - 1 >= m_iStart) return true; return false; } break; case SPIN_CONTROL_TYPE_FLOAT: { if (m_fValue - m_fInterval >= m_fStart) return true; return false; } break; case SPIN_CONTROL_TYPE_TEXT: { if (m_iValue - 1 >= 0) return true; return false; } break; } return false; }
int Pop() { State *currentState; currentState = myQueue->queueHead; if (IsEmpty()) { printf("%s", "The queue is empty, Pop operation cannot be done!"); return 0; } // Is it the final state? if (IsFinalState(currentState)) { ShowResults(); return 1; } else { // Find the position where the number zero of the current matrix is FindZeroPosition(currentState->matrix); // Is it possible to change the numbers within the matrix? if (CanMoveUp()) { CreateNewState(currentState, UP); } if (CanMoveDown()) { CreateNewState(currentState, DOWN); } if (CanMoveLeft()) { CreateNewState(currentState, LEFT); } if (CanMoveRight()) { CreateNewState(currentState, RIGHT); } } // Take out from the queue // Move the queue first state to the next element // Decrement one state of the queue, but we need to store it once we need to show the actions taken, at the end myQueue->queueHead = myQueue->queueHead->next; myQueue->numberOfElements--; // free(currentState); return 2; }
bool CGUISpinControl::OnMessage(CGUIMessage& message) { if (CGUIControl::OnMessage(message) ) return true; if (message.GetControlId() == GetID() ) { switch (message.GetMessage()) { case GUI_MSG_ITEM_SELECT: if (SPIN_CONTROL_TYPE_PAGE == m_iType) { m_currentItem = message.GetParam1(); return true; } SetValue( message.GetParam1()); if (message.GetParam2() == SPIN_BUTTON_DOWN || message.GetParam2() == SPIN_BUTTON_UP) m_iSelect = message.GetParam2(); return true; break; case GUI_MSG_LABEL_RESET: if (SPIN_CONTROL_TYPE_PAGE == m_iType) { m_itemsPerPage = message.GetParam1(); m_numItems = message.GetParam2(); return true; } { Clear(); return true; } break; case GUI_MSG_SHOWRANGE: if (message.GetParam1() ) m_bShowRange = true; else m_bShowRange = false; break; case GUI_MSG_SET_LABELS: if (message.GetPointer()) { const std::vector< std::pair<std::string, int> > *labels = (const std::vector< std::pair<std::string, int> > *)message.GetPointer(); Clear(); for (std::vector< std::pair<std::string, int> >::const_iterator i = labels->begin(); i != labels->end(); ++i) AddLabel(i->first, i->second); SetValue( message.GetParam1()); } break; case GUI_MSG_LABEL_ADD: { AddLabel(message.GetLabel(), message.GetParam1()); return true; } break; case GUI_MSG_ITEM_SELECTED: { message.SetParam1( GetValue() ); message.SetParam2(m_iSelect); if (m_iType == SPIN_CONTROL_TYPE_TEXT) { if ( m_iValue >= 0 && m_iValue < (int)m_vecLabels.size() ) message.SetLabel( m_vecLabels[m_iValue]); } return true; } case GUI_MSG_PAGE_UP: if (CanMoveUp()) MoveUp(); return true; case GUI_MSG_PAGE_DOWN: if (CanMoveDown()) MoveDown(); return true; case GUI_MSG_MOVE_OFFSET: { int count = (int)message.GetParam1(); while (count < 0) { MoveUp(); count++; } while (count > 0) { MoveDown(); count--; } return true; } } } return false; }