示例#1
0
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;
}
示例#2
0
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;
}