Selector::Ptr Selector::Create( const std::string& widget, const std::string& id, const std::string& class_, const std::string& state, HierarchyType hierarchy, Ptr parent ) { Ptr selector( new Selector ); selector->m_widget = widget; selector->m_id = id; selector->m_class = class_; std::string uppercase_state( state ); std::transform( uppercase_state.begin(), uppercase_state.end(), uppercase_state.begin(), toupper ); if( uppercase_state == "NORMAL" ) { selector->m_state.reset( new Widget::State( Widget::State::NORMAL ) ); } else if( uppercase_state == "ACTIVE" ) { selector->m_state.reset( new Widget::State( Widget::State::ACTIVE ) ); } else if( uppercase_state == "PRELIGHT" ) { selector->m_state.reset( new Widget::State( Widget::State::PRELIGHT ) ); } else if( uppercase_state == "SELECTED" ) { selector->m_state.reset( new Widget::State( Widget::State::SELECTED ) ); } else if( uppercase_state == "INSENSITIVE" ) { selector->m_state.reset( new Widget::State( Widget::State::INSENSITIVE ) ); } else if( !uppercase_state.empty() ) { throw( ParserException( "Invalid state: " + state ) ); } selector->m_hierarchy_type = hierarchy; if( hierarchy != HierarchyType::ROOT ) { selector->m_parent = parent; } // Hash. auto hash = static_cast<std::size_t>( 2166136261UL ); const auto& selector_string = selector->BuildString(); auto length = selector_string.length(); for ( ; length; --length ) { hash ^= static_cast<std::size_t>( selector_string[ length - 1 ] ); hash *= static_cast<std::size_t>( 16777619UL ); } selector->m_hash = hash; return selector; }
Selector::Ptr Selector::Create( const std::string& widget, const std::string& id, const std::string& class_, const std::string& state, HierarchyType hierarchy, Ptr parent ) { Ptr selector( new Selector ); selector->m_widget = widget; selector->m_id = id; selector->m_class = class_; std::string uppercase_state( state ); std::transform( uppercase_state.begin(), uppercase_state.end(), uppercase_state.begin(), toupper ); if( uppercase_state == "NORMAL" ) { selector->m_state.reset( new Widget::State( Widget::State::NORMAL ) ); } else if( uppercase_state == "ACTIVE" ) { selector->m_state.reset( new Widget::State( Widget::State::ACTIVE ) ); } else if( uppercase_state == "PRELIGHT" ) { selector->m_state.reset( new Widget::State( Widget::State::PRELIGHT ) ); } else if( uppercase_state == "SELECTED" ) { selector->m_state.reset( new Widget::State( Widget::State::SELECTED ) ); } else if( uppercase_state == "INSENSITIVE" ) { selector->m_state.reset( new Widget::State( Widget::State::INSENSITIVE ) ); } else if( !uppercase_state.empty() ) { throw( ParserException( "Invalid state: " + state ) ); } selector->m_hierarchy_type = hierarchy; if( hierarchy != HierarchyType::ROOT ) { selector->m_parent = parent; } selector->m_hash = std::hash<std::string>()( selector->BuildString() ); return selector; }