Пример #1
0
/**
 *  Verarbeitung Mausrad runter
 *
 *  @param[in] mc Mauskoordinaten Struktur
 *
 *  @author Divan
 */
void WindowManager::Msg_WheelDown(const MouseCoords& mc)
{
    if(!desktop)
        return;
    if(windows.empty())
    {
        desktop->SetActive(true);
        desktop->Msg_WheelDown(mc);
        desktop->RelayMouseMessage(&Window::Msg_WheelDown, mc);
        // und raus
        return;
    }
    if(windows.back()->GetModal())
    {
        windows.back()->Msg_WheelDown(mc);
        windows.back()->RelayMouseMessage(&Window::Msg_WheelDown, mc);
        return;
    }
    IngameWindow* foundWindow = FindWindowUnderMouse(mc);
    windows.back()->SetActive(false);

    if(foundWindow)
    {
        windows.remove(foundWindow);
        windows.push_back(foundWindow);
        foundWindow->SetActive(true);
        foundWindow->Msg_WheelDown(mc);
        foundWindow->RelayMouseMessage(&Window::Msg_WheelDown, mc);
        desktop->SetActive(false);
    }else{
        desktop->SetActive(true);
        desktop->Msg_WheelDown(mc);
        desktop->RelayMouseMessage(&Window::Msg_WheelDown, mc);;
    }
}
Пример #2
0
/**
 *  Verarbeitung Mausrad runter
 *
 *  @param[in] mc Mauskoordinaten Struktur
 */
void WindowManager::Msg_WheelDown(const MouseCoords& mc)
{
    if(!curDesktop)
        return;
    if(windows.empty())
    {
        curDesktop->SetActive(true);
        curDesktop->Msg_WheelDown(mc);
        curDesktop->RelayMouseMessage(&Window::Msg_WheelDown, mc);
        // und raus
        return;
    }
    IngameWindow& activeWnd = *windows.back();
    if(activeWnd.IsModal())
    {
        activeWnd.Msg_WheelDown(mc);
        activeWnd.RelayMouseMessage(&Window::Msg_WheelDown, mc);
        return;
    }
    IngameWindow* foundWindow = FindWindowUnderMouse(mc);
    activeWnd.SetActive(false);

    if(foundWindow)
    {
        windows.remove(foundWindow);
        windows.push_back(foundWindow);
        foundWindow->SetActive(true);
        foundWindow->Msg_WheelDown(mc);
        foundWindow->RelayMouseMessage(&Window::Msg_WheelDown, mc);
        curDesktop->SetActive(false);
    }else{
        curDesktop->SetActive(true);
        curDesktop->Msg_WheelDown(mc);
        curDesktop->RelayMouseMessage(&Window::Msg_WheelDown, mc);;
    }
}
Пример #3
0
/*
 *  Verarbeitung Mausrad hoch.
 *
 *  @param[in] mc Mauskoordinaten Struktur
 *
 *  @author Divan
 */
void WindowManager::Msg_WheelUp(const MouseCoords& mc)
{
    // ist unser Desktop gültig?
    if(!desktop)
        return;

    // haben wir überhaupt fenster?
    if(windows.empty())
    {
        // nein, dann Desktop aktivieren
        desktop->SetActive(true);

        // nein, Msg_LeftDown aufrufen
        desktop->Msg_WheelUp(mc);

        // und allen unten drunter auch Bescheid sagen
        desktop->RelayMouseMessage(&Window::Msg_WheelUp, mc);

        // und raus
        return;
    }

    // ist das zuletzt aktiv gewesene Fenster Modal?
    if(windows.back()->GetModal())
    {
        // Msg_LeftDownaufrufen
        windows.back()->Msg_WheelUp(mc);

        // und allen unten drunter auch Bescheid sagen
        windows.back()->RelayMouseMessage(&Window::Msg_WheelUp, mc);

        // und raus
        return;
    }

    IngameWindow* foundWindow = FindWindowUnderMouse(mc);
    // ja, also aktives Fenster deaktivieren (falls ok)
    if(windows.back())
        windows.back()->SetActive(false);

    if(foundWindow)
    {
        // Fenster aus der Liste holen und vorne wieder anhängen
        windows.remove(foundWindow);
        windows.push_back(foundWindow);

        // ja, dann aktivieren
        foundWindow->SetActive(true);

        // dann Msg_WheelUp aufrufen
        foundWindow->Msg_WheelUp(mc);

        // und allen unten drunter auch Bescheid sagen
        foundWindow->RelayMouseMessage(&Window::Msg_WheelUp, mc);

        // Desktop deaktivieren, falls aktiviert
        desktop->SetActive(false);
    }else {
        // Desktop aktivieren
        desktop->SetActive(true);

        // nein, dann Msg_WheelUpDown aufrufen
        desktop->Msg_WheelUp(mc);

        // und allen unten drunter auch Bescheid sagen
        desktop->RelayMouseMessage(&Window::Msg_WheelUp, mc);;
    }
}
Пример #4
0
/**
 *  Verarbeitung des Drückens der Rechten Maustaste.
 *
 *  @param[in] mc Mauskoordinaten Struktur
 *
 *  @author OLiver
 */
void WindowManager::Msg_RightDown(const MouseCoords& mc)
{
    // ist unser Desktop gültig?
    if(!desktop)
        return;

    // Sind Fenster vorhanden && ist das aktive Fenster ok
    if(!windows.empty())
    {
        // ist das Fenster modal? wenn ja, dann raus
        if (windows.back()->GetModal())
            return;

        // prüfen ob Fenster geschlossen werden muss
        IngameWindow* foundWindow = FindWindowUnderMouse(mc);
        if(foundWindow){
            // ja, dann schliessen
            if (foundWindow->GetCloseOnRightClick())
                foundWindow->Close();
            else
            {
                windows.back()->SetActive(false);

                // Fenster aus der Liste holen und vorne wieder anhängen
                windows.remove(foundWindow);
                windows.push_back(foundWindow);

                desktop->SetActive(false);

                foundWindow->SetActive(true);
                foundWindow->Msg_RightDown(mc);
            }

            return;
        }
    }

    // ist der Desktop aktiv?
    if(desktop->GetActive())
    {
        // ja, dann Msg_RightDown aufrufen
        desktop->Msg_RightDown(mc);

        // und die Fenster darunter auch
        desktop->RelayMouseMessage(&Window::Msg_RightDown, mc);
    }
    else if(!windows.empty())
    {
        // dann Nachricht an Fenster weiterleiten
        windows.back()->RelayMouseMessage(&Window::Msg_RightDown, mc);
    }

    // letztes Fenster deaktivieren, da ja nun der Desktop aktiv werden soll
    if(!windows.empty())
        windows.back()->SetActive(false);

    // Desktop aktivieren
    desktop->SetActive(true);

    // ja, dann Msg_RightDown aufrufen
    desktop->Msg_RightDown(mc);

    // und die Fenster darunter auch
    desktop->RelayMouseMessage(&Window::Msg_RightDown, mc);
}
Пример #5
0
/**
 *  Verarbeitung des Drückens der Linken Maustaste.
 *
 *  @param[in] mc Mauskoordinaten Struktur
 *
 *  @author OLiver
 */
void WindowManager::Msg_LeftDown(MouseCoords mc)
{
    // ist unser Desktop gültig?
    if(!desktop)
        return;

    // Sound abspielen
    LOADER.GetSoundN("sound", 112)->Play(255, false);

    // Ggf. Doppelklick untersuche
    unsigned time_now = VIDEODRIVER.GetTickCount();
    if((time_now - last_left_click_time) * 1000 / CLOCKS_PER_SEC < DOUBLE_CLICK_INTERVAL
            && Point<int>(mc.x, mc.y) == last_left_click_point)
        mc.dbl_click = true;

    // Werte wieder erneut speichern
    last_left_click_point = Point<int>(mc.x, mc.y);
    last_left_click_time = time_now;

    // haben wir überhaupt fenster?
    if(windows.empty())
    {
        // nein, dann Desktop aktivieren
        desktop->SetActive(true);

        // ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, Msg_LeftDown aufrufen
            desktop->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            desktop->RelayMouseMessage(&Window::Msg_LeftDown, mc);
        }

        // und raus
        return;
    }

    // ist das zuletzt aktiv gewesene Fenster Modal?
    if( windows.back()->GetModal())
    {
        // ja es ist modal, ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, Msg_LeftDownaufrufen
            windows.back()->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            windows.back()->RelayMouseMessage(&Window::Msg_LeftDown, mc);

            // und noch MouseLeftDown vom Fenster aufrufen
            windows.back()->MouseLeftDown(mc);
        }

        // und raus
        return;
    }

    IngameWindow* foundWindow = FindWindowUnderMouse(mc);

    // aktives Fenster deaktivieren
    windows.back()->SetActive(false);

    // Haben wir ein Fenster gefunden gehabt?
    if(foundWindow){
        // Fenster aus der Liste holen und vorne wieder anhängen
        windows.remove(foundWindow);
        windows.push_back(foundWindow);

        // aktivieren
        foundWindow->SetActive(true);

        // ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, dann Msg_LeftDown aufrufen
            foundWindow->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            foundWindow->RelayMouseMessage(&Window::Msg_LeftDown, mc);

            // und noch MouseLeftDown vom Fenster aufrufen
            foundWindow->MouseLeftDown(mc);
        }

        // Desktop deaktivieren, falls aktiviert
        desktop->SetActive(false);
    }else{
        // Desktop aktivieren
        desktop->SetActive(true);

        // ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, dann Msg_LeftDown aufrufen
            desktop->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            desktop->RelayMouseMessage(&Window::Msg_LeftDown, mc);;
        }
    }
}
Пример #6
0
/**
 *  Verarbeitung des Drückens der Rechten Maustaste.
 *
 *  @param[in] mc Mauskoordinaten Struktur
 */
void WindowManager::Msg_RightDown(const MouseCoords& mc)
{
    // ist unser Desktop gültig?
    if(!curDesktop)
        return;

    // Sind Fenster vorhanden && ist das aktive Fenster ok
    if(!windows.empty())
    {
        IngameWindow* foundWindow = FindWindowUnderMouse(mc);
        if(windows.back()->IsModal())
        {
            // We have a modal window -> Activate it
            curDesktop->SetActive(false);
            windows.back()->SetActive(true);
            // Ignore actions in all other windows
            if(foundWindow != windows.back())
                return;
        }
        if(foundWindow){
            // Close it if requested
            if (foundWindow->GetCloseOnRightClick())
                foundWindow->Close();
            else
            {
                windows.back()->SetActive(false);

                // Fenster aus der Liste holen und vorne wieder anhängen
                windows.remove(foundWindow);
                windows.push_back(foundWindow);

                curDesktop->SetActive(false);

                foundWindow->SetActive(true);
                foundWindow->Msg_RightDown(mc);
            }

            return;
        }
    }

    // ist der Desktop aktiv?
    if(curDesktop->IsActive())
    {
        // ja, dann Msg_RightDown aufrufen
        curDesktop->Msg_RightDown(mc);

        // und die Fenster darunter auch
        curDesktop->RelayMouseMessage(&Window::Msg_RightDown, mc);
    }
    else if(!windows.empty())
    {
        // dann Nachricht an Fenster weiterleiten
        windows.back()->RelayMouseMessage(&Window::Msg_RightDown, mc);
    }

    // letztes Fenster deaktivieren, da ja nun der Desktop aktiv werden soll
    if(!windows.empty())
        windows.back()->SetActive(false);

    // Desktop aktivieren
    curDesktop->SetActive(true);

    // ja, dann Msg_RightDown aufrufen
    curDesktop->Msg_RightDown(mc);

    // und die Fenster darunter auch
    curDesktop->RelayMouseMessage(&Window::Msg_RightDown, mc);
}
Пример #7
0
/**
 *  Verarbeitung des Drückens der Linken Maustaste.
 *
 *  @param[in] mc Mauskoordinaten Struktur
 */
void WindowManager::Msg_LeftDown(MouseCoords mc)
{
    // ist unser Desktop gültig?
    if(!curDesktop)
        return;

    // Sound abspielen
    LOADER.GetSoundN("sound", 112)->Play(255, false);

    // haben wir überhaupt fenster?
    if(windows.empty())
    {
        // nein, dann Desktop aktivieren
        curDesktop->SetActive(true);

        // ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, Msg_LeftDown aufrufen
            curDesktop->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            curDesktop->RelayMouseMessage(&Window::Msg_LeftDown, mc);
        }

        // und raus
        return;
    }

    // ist das zuletzt aktiv gewesene Fenster Modal?
    IngameWindow& lastActiveWnd = *windows.back();
    if(lastActiveWnd.IsModal())
    {
        if(!lastActiveWnd.IsActive())
            lastActiveWnd.SetActive();

        // ja es ist modal, ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, Msg_LeftDownaufrufen
            lastActiveWnd.Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            lastActiveWnd.RelayMouseMessage(&Window::Msg_LeftDown, mc);

            // und noch MouseLeftDown vom Fenster aufrufen
            lastActiveWnd.MouseLeftDown(mc);
        }

        // und raus
        return;
    }

    IngameWindow* foundWindow = FindWindowUnderMouse(mc);

    // aktives Fenster deaktivieren
    lastActiveWnd.SetActive(false);

    // Haben wir ein Fenster gefunden gehabt?
    if(foundWindow){
        // Fenster aus der Liste holen und vorne wieder anhängen
        windows.remove(foundWindow);
        windows.push_back(foundWindow);

        // aktivieren
        foundWindow->SetActive(true);

        // ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, dann Msg_LeftDown aufrufen
            foundWindow->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            foundWindow->RelayMouseMessage(&Window::Msg_LeftDown, mc);

            // und noch MouseLeftDown vom Fenster aufrufen
            foundWindow->MouseLeftDown(mc);
        }

        // Desktop deaktivieren, falls aktiviert
        curDesktop->SetActive(false);
    }else{
        // Desktop aktivieren
        curDesktop->SetActive(true);

        // ist der Maus-Klick-Fix aktiv?
        if(!disable_mouse)
        {
            // nein, dann Msg_LeftDown aufrufen
            curDesktop->Msg_LeftDown(mc);

            // und allen unten drunter auch Bescheid sagen
            curDesktop->RelayMouseMessage(&Window::Msg_LeftDown, mc);;
        }
    }
}