Example #1
0
bool Window::RelayMouseMessage(bool (Window::*msg)(const MouseCoords&), const MouseCoords& mc)
{
    // Abgeleitete Klassen fragen, ob das Weiterleiten von Mausnachrichten erlaubt ist
    // (IngameFenster könnten ja z.B. minimiert sein)
    if(!IsMessageRelayAllowed())
        return false;

    bool processed = false;
    isInMouseRelay = true;

    // Alle Controls durchgehen
    // Use reverse iterator because the topmost (=last elements) should receive the messages first!
    for(std::map<unsigned int, Window*>::reverse_iterator it = childIdToWnd_.rbegin(); it != childIdToWnd_.rend() && active_; ++it)
    {
        if(!lockedAreas_.empty())
            if(TestWindowInRegion(it->second, mc))
                continue;

        if(it->second->visible_ && it->second->active_)
        {
            if((it->second->*msg)(mc))
                processed = true;
        }
    }

    for(std::vector<Window*>::iterator it = tofreeAreas_.begin(); it != tofreeAreas_.end(); ++it)
        lockedAreas_.erase(*it);
    tofreeAreas_.clear();
    isInMouseRelay = false;

    return processed;
}
Example #2
0
bool Window::RelayMouseMessage(bool (Window::*msg)(const MouseCoords&),const MouseCoords& mc)
{
	// Abgeleitete Klassen fragen, ob das Weiterleiten von Mausnachrichten erlaubt ist
	// (IngameFenster könnten ja z.B. minimiert sein)
	if(!IsMessageRelayAllowed())
		return false;

	bool processed = false;

	// Alle Controls durchgehen
	// Falls das Fenster dann plötzlich nich mehr aktiv ist (z.b. neues Fenster geöffnet, sofort abbrechen!)
	// Use reverse iterator because the topmost (=last elements) should receive the messages first!
	for(std::map<unsigned int,Window*>::reverse_iterator it = idmap.rbegin(); it != idmap.rend() && active; ++it)
	{
		if(locked_areas.size())
			if(TestWindowInRegion(it->second, mc))
				continue;

		if(it->second->visible && it->second->active)
			// Falls von einem Steuerelement verarbeitet --> abbrechen
			if((it->second->*msg)(mc))
			{
				processed = true;
				break;
			}
	}

	/*// Nur vorläufig
	if(processed && msg == &Window::Msg_LeftDown)
	{
		for(std::map<unsigned int,Window*>::iterator it = idmap.begin(); it != idmap.end() && active; ++it)
		{
			if(locked_areas.size())
				if(TestWindowInRegion(it->second, mc))
					continue;

			if(it->second->visible && it->second->active)
				// Falls von einem Steuerelement verarbeitet --> abbrechen
				it->second->Msg_LeftDown_After(mc);

		}
	}*/

	return processed;
}
Example #3
0
/**
 *  Sendet eine Fensternachricht an die Steuerelemente.
 *
 *  @param[in] msg   Die Nachricht.
 *  @param[in] id    Die ID des Quellsteuerelements.
 *  @param[in] param Ein nachrichtenspezifischer Parameter.
 *
 *  @author OLiver
 */
bool Window::RelayKeyboardMessage(bool (Window::*msg)(const KeyEvent&),const KeyEvent& ke)
{
	// Abgeleitete Klassen fragen, ob das Weiterleiten von Nachrichten erlaubt ist
	// (IngameFenster könnten ja z.B. minimiert sein)
	if(!IsMessageRelayAllowed())
		return false;

	// Alle Controls durchgehen
	// Falls das Fenster dann plötzlich nich mehr aktiv ist (z.b. neues Fenster geöffnet, sofort abbrechen!)
	for(std::map<unsigned int,Window*>::iterator it = idmap.begin(); it != idmap.end() && active; ++it)
	{
		if(it->second->visible && it->second->active)
			if((it->second->*msg)(ke))
				return true;
	}

	return false;
}