Пример #1
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);;
        }
    }
}
Пример #2
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);;
        }
    }
}