/** * 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);; } }
/** * 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);; } }
/* * 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);; } }
/** * 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); }
/** * 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);; } } }
/** * 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); }
/** * 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);; } } }