void GraphButton::ToggleState() { if (state == Z_GRAF) ToggleState(Z_OBRAZ); else //state == Z_OBRAZ ToggleState(Z_GRAF); }
NS_IMETHODIMP nsBaseStateUpdatingCommand::DoCommand(const char *aCommandName, nsISupports *refCon) { nsCOMPtr<nsIEditor> editor = do_QueryInterface(refCon); NS_ENSURE_TRUE(editor, NS_ERROR_NOT_INITIALIZED); return ToggleState(editor); }
void CCameraHandler::PushAction(const Action& action) { const std::string cmd = action.command; if (cmd == "viewfps") { SetCameraMode(CAMERA_MODE_FIRSTPERSON); } else if (cmd == "viewta") { SetCameraMode(CAMERA_MODE_OVERHEAD); } else if (cmd == "viewspring") { SetCameraMode(CAMERA_MODE_SPRING); } else if (cmd == "viewrot") { SetCameraMode(CAMERA_MODE_ROTOVERHEAD); } else if (cmd == "viewfree") { SetCameraMode(CAMERA_MODE_FREE); } else if (cmd == "viewov") { SetCameraMode(CAMERA_MODE_OVERVIEW); } else if (cmd == "viewtaflip") { COverheadController* taCam = dynamic_cast<COverheadController*>(camControllers[CAMERA_MODE_OVERHEAD]); if (taCam) { if (!action.extra.empty()) { taCam->flipped = !!atoi(action.extra.c_str()); } else { taCam->flipped = !taCam->flipped; } taCam->Update(); } } else if (cmd == "viewsave") { if (!action.extra.empty()) { SaveView(action.extra); LOG("Saved view: %s", action.extra.c_str()); } } else if (cmd == "viewload") { if (!LoadView(action.extra)) { LOG_L(L_WARNING, "Loading view failed!"); } } else if (cmd == "toggleoverview") { ToggleOverviewCamera(); } else if (cmd == "togglecammode") { ToggleState(); } }
void JXCheckbox::HandleMouseUp ( const JPoint& pt, const JXMouseButton button, const JXButtonStates& buttonStates, const JXKeyModifiers& modifiers ) { if (button == kJXLeftButton && itsIsPushedFlag) { itsIsPushedFlag = kJFalse; ToggleState(); } }
MaxDemaxButton::MaxDemaxButton(wxFrame *parent, int id, bool n_state) : wxButton(parent, id, wxString::FromUTF8("Konec"), wxDefaultPosition, wxSize(24,24), wxBORDER_NONE|wxBU_EXACTFIT|wxBU_NOTEXT) { normal1 = wxBitmap(wxT("RC_maximizeicon"), wxBITMAP_TYPE_ICO_RESOURCE); focus1 = wxBitmap(wxT("RC_maximizeiconF"), wxBITMAP_TYPE_ICO_RESOURCE); press1 = wxBitmap(wxT("RC_maximizeiconP"), wxBITMAP_TYPE_ICO_RESOURCE); normal2 = wxBitmap(wxT("RC_demaximizeicon"), wxBITMAP_TYPE_ICO_RESOURCE); focus2 = wxBitmap(wxT("RC_demaximizeiconF"), wxBITMAP_TYPE_ICO_RESOURCE); press2 = wxBitmap(wxT("RC_demaximizeiconP"), wxBITMAP_TYPE_ICO_RESOURCE); state = n_state; SetCursor(wxCursor(wxCURSOR_HAND)); ToggleState(state); SetBackgroundColour(APP_STYLE_MAINBG); Align(); }
GraphButton::GraphButton(wxFrame *parent, int id, SettingsManager *n_SetMan) : wxButton(parent, id, wxString::FromUTF8("Ukonèit"), wxDefaultPosition, wxSize(24,24), wxBORDER_NONE|wxBU_EXACTFIT|wxBU_NOTEXT) { SetMan = n_SetMan; normal1 = wxBitmap(wxT("RC_graphicon"), wxBITMAP_TYPE_PNG_RESOURCE); hover1 = wxBitmap(wxT("RC_graphiconF"), wxBITMAP_TYPE_PNG_RESOURCE); normal2 = wxBitmap(wxT("RC_bitmapicon"), wxBITMAP_TYPE_PNG_RESOURCE); hover2 = wxBitmap(wxT("RC_bitmapiconF"), wxBITMAP_TYPE_PNG_RESOURCE); Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(GraphButton::onClick), NULL, this); SetCursor(wxCursor(wxCURSOR_HAND)); SetMan->GetSetting(SETT_DIS_TYPE, state); ToggleState(state); SetBackgroundColour(APP_STYLE_MAINBG); Align(); }
void control_init(void) { //set Timer1 in fast pwm mode (7), TOP=0x3ff (1023) //clear output on compare match, set at top (COM1A1=1) TCCR1A = (1 << COM1A1) | (1 << WGM11) | (1 << WGM10); TCCR1B = (1 << WGM12) | PRESCALE; //output on OCP1A pin (portb.5) DDRB |= BV(5); // Set a initial value in the OCR1A-register OCR1A = 0; // see if a DS2413 chip is present so we can ensure we start at a known state if (gpioid >= 0) ToggleState(ids[gpioid], false); eeprom_read_block ((void *) &gDischarge, (const void *) &eeDischarge, sizeof(gDischarge)); if (gDischarge <= 0) TargetC = gBankSize; else TargetC = gMaxCharge; }
/// <summary> /// Handles window messages for this button. /// </summary> LRESULT WINAPI TaskButton::HandleMessage(HWND window, UINT message, WPARAM wParam, LPARAM lParam, LPVOID) { switch (message) { case WM_LBUTTONUP: { if (IsIconic(mWatchedWindow)) { BringWindowToTop(mWatchedWindow); PostMessage(mWatchedWindow, WM_SYSCOMMAND, SC_RESTORE, 0); SetForegroundWindow(mWatchedWindow); if (gActiveWindowTracking != FALSE) { MoveMouseToWindow(); } } else if (GetForegroundWindow() == mWatchedWindow) { PostMessage(mWatchedWindow, WM_SYSCOMMAND, SC_MINIMIZE, 0); ActivateState(State::Minimized); } else { SetForegroundWindow(mWatchedWindow); if (gActiveWindowTracking != FALSE) { MoveMouseToWindow(); } } ((Taskbar*)mParent)->HideThumbnail(); } return 0; case WM_RBUTTONUP: { SetWindowPos(mWatchedWindow, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); ShowMenu(); } return 0; case WM_MOUSEMOVE: { if (!mMouseIsOver) { mMouseIsOver = true; ActivateState(State::Hover); RECT r; mWindow->GetScreenRect(&r); ((Taskbar*)mParent)->ShowThumbnail(mWatchedWindow, &r); } } return 0; case WM_MOUSELEAVE: { mMouseIsOver = false; ClearState(State::Hover); ((Taskbar*)mParent)->HideThumbnail(); } return 0; case WM_TIMER: { if (wParam == mFlashTimer) { if (mIsFlashing) { ToggleState(State::Flashing); } else { mWindow->ClearCallbackTimer(mFlashTimer); } } } return 0; default: return DefWindowProc(window, message, wParam, lParam); } }
void CMouseHandler::MouseRelease(int x, int y, int button) { GML_RECMUTEX_LOCK(sel); // MouseRelease if (button > NUM_BUTTONS) return; camHandler->GetCurrentController().MouseRelease(x, y, button); dir = hide ? camera->forward: camera->CalcPixelDir(x, y); buttons[button].pressed = false; if (inMapDrawer && inMapDrawer->keyPressed){ inMapDrawer->MouseRelease(x, y, button); return; } if (activeReceiver) { activeReceiver->MouseRelease(x, y, button); int x, y; const boost::uint8_t buttons = SDL_GetMouseState(&x, &y); const boost::uint8_t mask = (SDL_BUTTON_LMASK | SDL_BUTTON_MMASK | SDL_BUTTON_RMASK); if ((buttons & mask) == 0) { activeReceiver = NULL; } return; } // Switch camera mode on a middle click that wasn't a middle mouse drag scroll. // (the latter is determined by the time the mouse was held down: // <= 0.3 s means a camera mode switch, > 0.3 s means a drag scroll) if (button == SDL_BUTTON_MIDDLE) { if (buttons[SDL_BUTTON_MIDDLE].time > (gu->gameTime - 0.3f)) ToggleState(); return; } if (gu->directControl) { return; } if ((button == SDL_BUTTON_LEFT) && !buttons[button].chorded) { if (!keys[SDLK_LSHIFT] && !keys[SDLK_LCTRL]) { selectedUnits.ClearSelected(); } if (buttons[SDL_BUTTON_LEFT].movement > 4) { // select box float dist=ground->LineGroundCol(buttons[SDL_BUTTON_LEFT].camPos,buttons[SDL_BUTTON_LEFT].camPos+buttons[SDL_BUTTON_LEFT].dir*gu->viewRange*1.4f); if(dist<0) dist=gu->viewRange*1.4f; float3 pos1=buttons[SDL_BUTTON_LEFT].camPos+buttons[SDL_BUTTON_LEFT].dir*dist; dist=ground->LineGroundCol(camera->pos,camera->pos+dir*gu->viewRange*1.4f); if(dist<0) dist=gu->viewRange*1.4f; float3 pos2=camera->pos+dir*dist; float3 dir1=pos1-camera->pos; dir1.ANormalize(); float3 dir2=pos2-camera->pos; dir2.ANormalize(); float rl1=(dir1.dot(camera->right))/dir1.dot(camera->forward); float ul1=(dir1.dot(camera->up))/dir1.dot(camera->forward); float rl2=(dir2.dot(camera->right))/dir2.dot(camera->forward); float ul2=(dir2.dot(camera->up))/dir2.dot(camera->forward); if(rl1<rl2){ float t=rl1; rl1=rl2; rl2=t; } if(ul1<ul2){ float t=ul1; ul1=ul2; ul2=t; } float3 norm1,norm2,norm3,norm4; if(ul1>0) norm1=-camera->forward+camera->up/fabs(ul1); else if(ul1<0) norm1=camera->forward+camera->up/fabs(ul1); else norm1=camera->up; if(ul2>0) norm2=camera->forward-camera->up/fabs(ul2); else if(ul2<0) norm2=-camera->forward-camera->up/fabs(ul2); else norm2=-camera->up; if(rl1>0) norm3=-camera->forward+camera->right/fabs(rl1); else if(rl1<0) norm3=camera->forward+camera->right/fabs(rl1); else norm3=camera->right; if(rl2>0) norm4=camera->forward-camera->right/fabs(rl2); else if(rl2<0) norm4=-camera->forward-camera->right/fabs(rl2); else norm4=-camera->right; CUnitSet::iterator ui; CUnit* unit = NULL; int addedunits=0; int team, lastTeam; if (gu->spectatingFullSelect) { team = 0; lastTeam = teamHandler->ActiveTeams() - 1; } else { team = gu->myTeam; lastTeam = gu->myTeam; } for (; team <= lastTeam; team++) { for(ui=teamHandler->Team(team)->units.begin();ui!=teamHandler->Team(team)->units.end();++ui){ float3 vec=(*ui)->midPos-camera->pos; if(vec.dot(norm1)<0 && vec.dot(norm2)<0 && vec.dot(norm3)<0 && vec.dot(norm4)<0){ if (keys[SDLK_LCTRL] && selectedUnits.selectedUnits.find(*ui) != selectedUnits.selectedUnits.end()) { selectedUnits.RemoveUnit(*ui); } else { selectedUnits.AddUnit(*ui); unit = *ui; addedunits++; } } } } if (addedunits == 1) { int soundIdx = unit->unitDef->sounds.select.getRandomIdx(); if (soundIdx >= 0) { Channels::UnitReply.PlaySample( unit->unitDef->sounds.select.getID(soundIdx), unit, unit->unitDef->sounds.select.getVolume(soundIdx)); } } else if(addedunits) //more than one unit selected Channels::UserInterface.PlaySample(soundMultiselID); } else { const CUnit* unit; helper->GuiTraceRay(camera->pos,dir,gu->viewRange*1.4f,unit,false); if (unit && ((unit->team == gu->myTeam) || gu->spectatingFullSelect)) { if (buttons[button].lastRelease < (gu->gameTime - doubleClickTime)) { CUnit* unitM = uh->units[unit->id]; if (keys[SDLK_LCTRL] && selectedUnits.selectedUnits.find(unit) != selectedUnits.selectedUnits.end()) { selectedUnits.RemoveUnit(unitM); } else { selectedUnits.AddUnit(unitM); } } else { //double click if (unit->group && !keys[SDLK_LCTRL]) { //select the current unit's group if it has one selectedUnits.SelectGroup(unit->group->id); } else { //select all units of same type (on screen, unless CTRL is pressed) int team, lastTeam; if (gu->spectatingFullSelect) { team = 0; lastTeam = teamHandler->ActiveTeams() - 1; } else { team = gu->myTeam; lastTeam = gu->myTeam; } for (; team <= lastTeam; team++) { CUnitSet::iterator ui; CUnitSet& teamUnits = teamHandler->Team(team)->units; for (ui = teamUnits.begin(); ui != teamUnits.end(); ++ui) { if (((*ui)->aihint == unit->aihint) && (camera->InView((*ui)->midPos) || keys[SDLK_LCTRL])) { selectedUnits.AddUnit(*ui); } } } } } buttons[button].lastRelease=gu->gameTime; int soundIdx = unit->unitDef->sounds.select.getRandomIdx(); if (soundIdx >= 0) { Channels::UnitReply.PlaySample( unit->unitDef->sounds.select.getID(soundIdx), unit, unit->unitDef->sounds.select.getVolume(soundIdx)); } } } } }
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_TRAY) { if (lParam == WM_LBUTTONDOWN || lParam == WM_LBUTTONDBLCLK) { ToggleState(); } else if (lParam == WM_MBUTTONDOWN) { if ((GetAsyncKeyState(VK_SHIFT)&0x8000)) { ShellExecute(NULL, L"open", inipath, NULL, NULL, SW_SHOWNORMAL); } else { HookMouse(); } } else if (lParam == WM_RBUTTONUP) { ShowContextMenu(hwnd); } } else if (msg == WM_UPDATESETTINGS) { wchar_t txt[10]; // TimerCheck KillTimer(g_hwnd, CHECKTIMER); GetPrivateProfileString(L"General", L"TimerCheck", L"0", txt, ARRAY_SIZE(txt), inipath); if (_wtoi(txt)) { SetTimer(g_hwnd, CHECKTIMER, CHECKINTERVAL, NULL); } } else if (msg == WM_TASKBARCREATED) { tray_added = 0; UpdateTray(); } else if (msg == WM_COMMAND) { int wmId=LOWORD(wParam), wmEvent=HIWORD(wParam); if (wmId == SWM_TOGGLE) { ToggleState(); } else if (wmId == SWM_ELEVATE) { wchar_t path[MAX_PATH]; GetModuleFileName(NULL, path, ARRAY_SIZE(path)); int ret = (INT_PTR) ShellExecute(NULL, L"runas", path, NULL, NULL, SW_SHOWNORMAL); if (ret > 32) { DestroyWindow(hwnd); } } else if (wmId == SWM_AUTOSTART_ON) { SetAutostart(1, 0); } else if (wmId == SWM_AUTOSTART_OFF) { SetAutostart(0, 0); } else if (wmId == SWM_AUTOSTART_ELEVATE_ON) { SetAutostart(1, 1); } else if (wmId == SWM_AUTOSTART_ELEVATE_OFF) { SetAutostart(1, 0); } else if (wmId == SWM_TIMERCHECK_ON) { WritePrivateProfileString(L"General", L"TimerCheck", L"1", inipath); SendMessage(g_hwnd, WM_UPDATESETTINGS, 0, 0); } else if (wmId == SWM_TIMERCHECK_OFF) { WritePrivateProfileString(L"General", L"TimerCheck", L"0", inipath); SendMessage(g_hwnd, WM_UPDATESETTINGS, 0, 0); } else if (wmId == SWM_WEBSITE) { OpenUrl(APP_URL); } else if (wmId == SWM_XKILL) { HookMouse(); } else if (wmId == SWM_EXIT) { DestroyWindow(hwnd); } } else if (msg == WM_DESTROY) { showerror = 0; UnhookKeyboard(); UnhookMouse(); RemoveTray(); PostQuitMessage(0); } else if (msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { // Hide the window if clicked on, this might happen if it wasn't hidden by the hooks for some reason ShowWindow(hwnd, SW_HIDE); // Since we take away the skull, make sure we can't kill anything UnhookMouse(); } else if (msg == WM_TIMER) { if (wParam == CHECKTIMER && ENABLED()) { if (GetAsyncKeyState(VK_LCONTROL)&0x8000 && GetAsyncKeyState(VK_LMENU)&0x8000 && GetAsyncKeyState(VK_F4)&0x8000) { // Get hwnd of foreground window HWND hwnd = GetForegroundWindow(); if (hwnd == NULL) { return DefWindowProc(hwnd, msg, wParam, lParam); } // Kill it! Kill(hwnd); } else { // Reset when the user has released the keys killing = 0; } } } return DefWindowProc(hwnd, msg, wParam, lParam); }
void CCameraHandler::PushAction(const Action& action) { const std::string cmd = action.command; if (cmd == "viewfps") { SetCameraMode(CAMERA_MODE_FIRSTPERSON); } else if (cmd == "viewta") { SetCameraMode(CAMERA_MODE_OVERHEAD); } else if (cmd == "viewtw") { SetCameraMode(CAMERA_MODE_TOTALWAR); } else if (cmd == "viewrot") { SetCameraMode(CAMERA_MODE_ROTOVERHEAD); } else if (cmd == "viewfree") { SetCameraMode(CAMERA_MODE_FREE); } else if (cmd == "viewov") { SetCameraMode(CAMERA_MODE_OVERVIEW); } else if (cmd == "viewlua") { SetCameraMode(CAMERA_MODE_SMOOTH); // ? } else if (cmd == "vieworbit") { SetCameraMode(CAMERA_MODE_ORBIT); } else if (cmd == "viewtaflip") { COverheadController* taCam = dynamic_cast<COverheadController*>(camControllers[CAMERA_MODE_OVERHEAD]); SmoothController* smCam = dynamic_cast<SmoothController*>(camControllers[CAMERA_MODE_SMOOTH]); if (taCam) { if (!action.extra.empty()) { taCam->flipped = !!atoi(action.extra.c_str()); } else { taCam->flipped = !taCam->flipped; } } if (smCam) { if (!action.extra.empty()) { smCam->flipped = !!atoi(action.extra.c_str()); } else { smCam->flipped = !smCam->flipped; } } } else if (cmd == "viewsave") { if (!action.extra.empty()) { SaveView(action.extra); logOutput.Print("Saved view: " + action.extra); } } else if (cmd == "viewload") { if (!LoadView(action.extra)) logOutput.Print("Loading view failed!"); } else if (cmd == "toggleoverview") { ToggleOverviewCamera(); } else if (cmd == "togglecammode") { ToggleState(); } }
void GraphButton::onClick(wxCommandEvent& WXUNUSED(event)) { ToggleState(); }
void CMouseHandler::MouseRelease(int x, int y, int button) { GML_RECMUTEX_LOCK(sel); // MouseRelease if (button > NUM_BUTTONS) return; camHandler->GetCurrentController().MouseRelease(x, y, button); dir = hide ? camera->forward: camera->CalcPixelDir(x, y); buttons[button].pressed = false; if (inMapDrawer && inMapDrawer->keyPressed){ inMapDrawer->MouseRelease(x, y, button); return; } if (activeReceiver) { activeReceiver->MouseRelease(x, y, button); if(!buttons[SDL_BUTTON_LEFT].pressed && !buttons[SDL_BUTTON_MIDDLE].pressed && !buttons[SDL_BUTTON_RIGHT].pressed) activeReceiver = NULL; return; } //! Switch camera mode on a middle click that wasn't a middle mouse drag scroll. //! the latter is determined by the time the mouse was held down: //! switch (dragScrollThreshold) //! <= means a camera mode switch //! > means a drag scroll if (button == SDL_BUTTON_MIDDLE) { if (buttons[SDL_BUTTON_MIDDLE].time > (gu->gameTime - dragScrollThreshold)) ToggleState(); return; } if (gu->fpsMode) { return; } if ((button == SDL_BUTTON_LEFT) && !buttons[button].chorded) { if (!keyInput->IsKeyPressed(SDLK_LSHIFT) && !keyInput->IsKeyPressed(SDLK_LCTRL)) { selectedUnits.ClearSelected(); } if (buttons[SDL_BUTTON_LEFT].movement > 4) { // select box float dist=ground->LineGroundCol(buttons[SDL_BUTTON_LEFT].camPos,buttons[SDL_BUTTON_LEFT].camPos+buttons[SDL_BUTTON_LEFT].dir*globalRendering->viewRange*1.4f); if(dist<0) dist=globalRendering->viewRange*1.4f; float3 pos1=buttons[SDL_BUTTON_LEFT].camPos+buttons[SDL_BUTTON_LEFT].dir*dist; dist=ground->LineGroundCol(camera->pos,camera->pos+dir*globalRendering->viewRange*1.4f); if(dist<0) dist=globalRendering->viewRange*1.4f; float3 pos2=camera->pos+dir*dist; float3 dir1 = pos1 - camera->pos; dir1.ANormalize(); float3 dir2 = pos2 - camera->pos; dir2.ANormalize(); float rl1 = dir1.dot(camera->right) / dir1.dot(camera->forward); float ul1 = dir1.dot(camera->up) / dir1.dot(camera->forward); float rl2 = dir2.dot(camera->right) / dir2.dot(camera->forward); float ul2 = dir2.dot(camera->up) / dir2.dot(camera->forward); if (rl1<rl2) std::swap(rl1, rl2); if (ul1<ul2) std::swap(ul1, ul2); float3 norm1,norm2,norm3,norm4; if (ul1>0) norm1=-camera->forward+camera->up/fabs(ul1); else if(ul1<0) norm1=camera->forward+camera->up/fabs(ul1); else norm1=camera->up; if (ul2>0) norm2=camera->forward-camera->up/fabs(ul2); else if(ul2<0) norm2=-camera->forward-camera->up/fabs(ul2); else norm2=-camera->up; if(rl1>0) norm3=-camera->forward+camera->right/fabs(rl1); else if(rl1<0) norm3=camera->forward+camera->right/fabs(rl1); else norm3=camera->right; if(rl2>0) norm4=camera->forward-camera->right/fabs(rl2); else if(rl2<0) norm4=-camera->forward-camera->right/fabs(rl2); else norm4=-camera->right; CUnitSet::iterator ui; CUnit* unit = NULL; int addedunits=0; int team, lastTeam; if (gu->spectatingFullSelect) { team = 0; lastTeam = teamHandler->ActiveTeams() - 1; } else { team = gu->myTeam; lastTeam = gu->myTeam; } for (; team <= lastTeam; team++) { for(ui=teamHandler->Team(team)->units.begin();ui!=teamHandler->Team(team)->units.end();++ui){ float3 vec=(*ui)->midPos-camera->pos; if (vec.dot(norm1) < 0.0f && vec.dot(norm2) < 0.0f && vec.dot(norm3) < 0.0f && vec.dot(norm4) < 0.0f) { if (keyInput->IsKeyPressed(SDLK_LCTRL) && selectedUnits.selectedUnits.find(*ui) != selectedUnits.selectedUnits.end()) { selectedUnits.RemoveUnit(*ui); } else { selectedUnits.AddUnit(*ui); unit = *ui; addedunits++; } } } } #if (PLAY_SOUNDS == 1) if (addedunits == 1) { const int soundIdx = unit->unitDef->sounds.select.getRandomIdx(); if (soundIdx >= 0) { Channels::UnitReply.PlaySample( unit->unitDef->sounds.select.getID(soundIdx), unit, unit->unitDef->sounds.select.getVolume(soundIdx)); } } else if (addedunits) //more than one unit selected Channels::UserInterface.PlaySample(soundMultiselID); #endif } else { CUnit* unit; CFeature* feature; TraceRay::GuiTraceRay(camera->pos, dir, globalRendering->viewRange*1.4f, false, NULL, unit, feature); if (unit && ((unit->team == gu->myTeam) || gu->spectatingFullSelect)) { if (buttons[button].lastRelease < (gu->gameTime - doubleClickTime)) { CUnit* unitM = uh->units[unit->id]; if (keyInput->IsKeyPressed(SDLK_LCTRL) && selectedUnits.selectedUnits.find((CUnit*)unit) != selectedUnits.selectedUnits.end()) { selectedUnits.RemoveUnit(unitM); } else { selectedUnits.AddUnit(unitM); } } else { //double click if (unit->group && !keyInput->IsKeyPressed(SDLK_LCTRL)) { //select the current unit's group if it has one selectedUnits.SelectGroup(unit->group->id); } else { //select all units of same type (on screen, unless CTRL is pressed) int team, lastTeam; if (gu->spectatingFullSelect) { team = 0; lastTeam = teamHandler->ActiveTeams() - 1; } else { team = gu->myTeam; lastTeam = gu->myTeam; } for (; team <= lastTeam; team++) { CUnitSet::iterator ui; CUnitSet& teamUnits = teamHandler->Team(team)->units; for (ui = teamUnits.begin(); ui != teamUnits.end(); ++ui) { if ((*ui)->unitDef->id == unit->unitDef->id) { if (camera->InView((*ui)->midPos) || keyInput->IsKeyPressed(SDLK_LCTRL)) { selectedUnits.AddUnit(*ui); } } } } } } buttons[button].lastRelease=gu->gameTime; #if (PLAY_SOUNDS == 1) const int soundIdx = unit->unitDef->sounds.select.getRandomIdx(); if (soundIdx >= 0) { Channels::UnitReply.PlaySample( unit->unitDef->sounds.select.getID(soundIdx), unit, unit->unitDef->sounds.select.getVolume(soundIdx)); } #endif } } } }
// control a dump load that is used when the battery bank is full // Do a total turbine shutdown if RPMs exceed max value // make sure that RPMs drop to a safe value before applying brake! // Also used for last resort overvolt protection void run_control(void) { // locals int16_t VoltsHI = 0; int16_t VoltsLO = 0; int16_t diff; uint16_t range = 0; static bool log_reported = false; static uint8_t stop_state = RUNNING; // decide what charging mode we are in. if (gCharge < (gBankSize * 0.90)) { charge_mode = BULK; // only run shunt if volts gets stupidly high! VoltsHI = gVupper; VoltsLO = gVupper * 0.98; } else if (gCharge < gBankSize) { charge_mode = ABSORB; // start throttling back once over float volts, never go above absorb volts VoltsHI = gAbsorbVolts; VoltsLO = gFloatVolts; } else { charge_mode = FLOAT; // never go above float volts, but allow a bit of slack VoltsHI = gFloatVolts; VoltsLO = (int16_t)((float)gFloatVolts * 0.98); } // compensate for temperature - assume set values are for 25C, adjust accordingly // the higher the temp, the lower the volts by 5mV per deg C // Tricky calculation as both volts and temperature are scaled by 100 VoltsHI -= 0.005 * (gTemp - 2500); VoltsLO -= 0.005 * (gTemp - 2500); // see if we are above shunt load threshold - use instantanious volts, not the average diff = iVolts - VoltsLO; if (diff > 0) { // see what range we're operating the PWM over range = VoltsHI - VoltsLO; // use log application of dump load #define SHAPE 63 float dval = (float)diff / range; float fig = log(SHAPE); float regval = 1010 * (exp(fig * dval) - 1) / (SHAPE - 1); // if above the top value then set near max on time but make sure its still pulsing // in case we are using AC coupling!! if (regval > 1010) regval = 1010; OCR1A = (uint16_t) regval; gDump = regval / 10; // shunt load is activated - show initial value if (!log_reported && gDump >= 50) // if going from OFF to ON then log the event { log_event(LOG_SHUNTON); log_reported = true; } } else { OCR1A = 0; gDump = 0; if (log_reported) { log_event(LOG_SHUNTOFF); log_reported = false; } } if (command == MANUALSTOP) { stop_state = STOPPING; command = 0; } if (command == MANUALSTART) { apply_brake(false); stop_state = RUNNING; command = 0; } if ((stop_state == STOPPING) && (gRPM < gRPMSafe)) { apply_brake(true); stop_state = BREAKING; } else if (gRPM > gRPMMax) { stop_state = STOPPING; } else if ((stop_state == BREAKING) && (gRPM == 0)) { stop_state = STOPPED; } // see if we have an inverter we can control if (gInverter == 0) return; if (command == MANUALOFF) { command = 0; if (ToggleState(ids[gpioid], false)) { // turned off load OK, start charging gLoad = LOADOFF; log_event(LOG_MANUALOFF); set_charge_target(); } else { // error log_event(LOG_MANUALOFF | LOG_ERROR); } } // we assume that the user knows what they are doing here!! // Manual override will run the inverter until the battery hits minimum voltage or manually switched off if (command == MANUALON) { command = 0; if (ToggleState(ids[gpioid], true)) { gLoad = LOADON; log_event(LOG_MANUALON); // define point to which we discharge to TargetC = 0; } else { // error log_event(LOG_MANUALON | LOG_ERROR); } } // if volts are below set minimum then cut the load whatever the charge state is and start charging again // this ensures a retry at shutoff in case we get a failure (sticky relay etc) if (gVolts < gVlower) { if (ToggleState(ids[gpioid], false)) { log_event(LOG_UNDERVOLT); // turned off load OK, start charging gLoad = LOADOFF; TargetC = gBankSize; } else { //error log_event(LOG_UNDERVOLT | LOG_ERROR); } } // see if we have an inverter we allow automatic control of if (gInverter != 2) return; // the load is not on if (gLoad == LOADOFF) { // if volts is above the set maximum apply load to try and pull the volts down - leave load on for only a short while if (gVolts > gVupper) { if (ToggleState(ids[gpioid], true)) { // turn on load gLoad = LOADON; log_event(LOG_OVERVOLT); // set the target level to discharge to a small amount below the current value so we don't keep the load on for too long TargetC = (int16_t)((float)gCharge * 0.99); } else { //error log_event(LOG_OVERVOLT | LOG_ERROR); } } // if we have reached our target charge level then start normal discharge cycle else if (gCharge >= TargetC) { if (ToggleState(ids[gpioid], true)) { // turn on load gLoad = LOADAUTO; log_event(LOG_CHARGED); TargetC = gMinCharge; } else { // error log_event(LOG_CHARGED | LOG_ERROR); } } } // the load is already on or auto else { // if we have reached our target discharge level then start normal charge cycle if (gCharge <= TargetC) { if (ToggleState(ids[gpioid], false)) { // turned off load OK, start charging gLoad = LOADOFF; log_event(LOG_DISCHARGED); // decide whether we are doing a normal charge or we are taking up to full float level set_charge_target(); eeprom_write_block ((const void *) &gDischarge, (void *) &eeDischarge, sizeof(gDischarge)); } else { // error log_event(LOG_DISCHARGED | LOG_ERROR); } } } }
void MaxDemaxButton::ToggleState() { ToggleState(!state); }
void CMouseHandler::MouseRelease(int x, int y, int button) { if (button > NUM_BUTTONS) return; dir=hide ? camera->forward : camera->CalcPixelDir(x,y); buttons[button].pressed=false; if(inMapDrawer && inMapDrawer->keyPressed){ inMapDrawer->MouseRelease(x, y, button); return; } if (button == SDL_BUTTON_MIDDLE) { if ((minimap != NULL) && (activeReceiver == minimap)) { minimap->MouseRelease(x, y, button); activeReceiver = 0; return; } if (buttons[SDL_BUTTON_MIDDLE].time>gu->gameTime-0.3f) { ToggleState(keys[SDLK_LSHIFT] || keys[SDLK_LCTRL]); } return; } #ifndef NEW_GUI if(activeReceiver){ activeReceiver->MouseRelease(x,y,button); activeReceiver=0; return; } #endif #ifdef DIRECT_CONTROL_ALLOWED if(gu->directControl){ return; } #endif if(button==SDL_BUTTON_LEFT && !buttons[button].chorded && mouseHandlerMayDoSelection){ if(!keys[SDLK_LSHIFT] && !keys[SDLK_LCTRL]) selectedUnits.ClearSelected(); if(buttons[SDL_BUTTON_LEFT].movement>4){ //select box float dist=ground->LineGroundCol(buttons[SDL_BUTTON_LEFT].camPos,buttons[SDL_BUTTON_LEFT].camPos+buttons[SDL_BUTTON_LEFT].dir*gu->viewRange*1.4f); if(dist<0) dist=gu->viewRange*1.4f; float3 pos1=buttons[SDL_BUTTON_LEFT].camPos+buttons[SDL_BUTTON_LEFT].dir*dist; dist=ground->LineGroundCol(camera->pos,camera->pos+dir*gu->viewRange*1.4f); if(dist<0) dist=gu->viewRange*1.4f; float3 pos2=camera->pos+dir*dist; float3 dir1=pos1-camera->pos; dir1.Normalize(); float3 dir2=pos2-camera->pos; dir2.Normalize(); float rl1=(dir1.dot(camera->right))/dir1.dot(camera->forward); float ul1=(dir1.dot(camera->up))/dir1.dot(camera->forward); float rl2=(dir2.dot(camera->right))/dir2.dot(camera->forward); float ul2=(dir2.dot(camera->up))/dir2.dot(camera->forward); if(rl1<rl2){ float t=rl1; rl1=rl2; rl2=t; } if(ul1<ul2){ float t=ul1; ul1=ul2; ul2=t; } float3 norm1,norm2,norm3,norm4; if(ul1>0) norm1=-camera->forward+camera->up/fabs(ul1); else if(ul1<0) norm1=camera->forward+camera->up/fabs(ul1); else norm1=camera->up; if(ul2>0) norm2=camera->forward-camera->up/fabs(ul2); else if(ul2<0) norm2=-camera->forward-camera->up/fabs(ul2); else norm2=-camera->up; if(rl1>0) norm3=-camera->forward+camera->right/fabs(rl1); else if(rl1<0) norm3=camera->forward+camera->right/fabs(rl1); else norm3=camera->right; if(rl2>0) norm4=camera->forward-camera->right/fabs(rl2); else if(rl2<0) norm4=-camera->forward-camera->right/fabs(rl2); else norm4=-camera->right; set<CUnit*>::iterator ui; CUnit* unit; int addedunits=0; for(ui=gs->Team(gu->myTeam)->units.begin();ui!=gs->Team(gu->myTeam)->units.end();++ui){ float3 vec=(*ui)->midPos-camera->pos; if(vec.dot(norm1)<0 && vec.dot(norm2)<0 && vec.dot(norm3)<0 && vec.dot(norm4)<0){ if(keys[SDLK_LCTRL] && selectedUnits.selectedUnits.find(*ui)!=selectedUnits.selectedUnits.end()){ selectedUnits.RemoveUnit(*ui); } else { selectedUnits.AddUnit(*ui); unit = *ui; addedunits++; } } } if(addedunits==1) { if(unit->unitDef->sounds.select.id) sound->PlayUnitReply(unit->unitDef->sounds.select.id, unit, unit->unitDef->sounds.select.volume); } else if(addedunits) //more than one unit selected sound->PlaySample(soundMultiselID); } else { CUnit* unit; float dist=helper->GuiTraceRay(camera->pos,dir,gu->viewRange*1.4f,unit,20,false); if(unit && unit->team==gu->myTeam){ if(buttons[button].lastRelease < (gu->gameTime - doubleClickTime)){ if(keys[SDLK_LCTRL] && selectedUnits.selectedUnits.find(unit)!=selectedUnits.selectedUnits.end()){ selectedUnits.RemoveUnit(unit); } else { selectedUnits.AddUnit(unit); } } else { //double click if (unit->group && !keys[SDLK_LCTRL]) { //select the current unit's group if it has one selectedUnits.SelectGroup(unit->group->id); } else { //select all units of same type (on screen, unless CTRL is pressed) set<CUnit*>::iterator ui; set<CUnit*>& myTeamUnits = gs->Team(gu->myTeam)->units; for (ui = myTeamUnits.begin(); ui != myTeamUnits.end(); ++ui) { if (((*ui)->aihint == unit->aihint) && (camera->InView((*ui)->midPos) || keys[SDLK_LCTRL])) { selectedUnits.AddUnit(*ui); } } } } buttons[button].lastRelease=gu->gameTime; if(unit->unitDef->sounds.select.id) sound->PlayUnitReply(unit->unitDef->sounds.select.id, unit, unit->unitDef->sounds.select.volume); } } } }
LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { if (msg == WM_TRAY) { if (lParam == WM_LBUTTONDOWN || lParam == WM_LBUTTONDBLCLK) { ToggleState(); if (lParam == WM_LBUTTONDBLCLK && !(GetAsyncKeyState(VK_SHIFT)&0x8000)) { SendMessage(hwnd, WM_OPENCONFIG, 0, 0); } } else if (lParam == WM_MBUTTONDOWN) { ShellExecute(NULL, L"open", inipath, NULL, NULL, SW_SHOWNORMAL); } else if (lParam == WM_RBUTTONDOWN) { ShowContextMenu(hwnd); } else if (lParam == NIN_BALLOONUSERCLICK) { hide = 0; SendMessage(hwnd, WM_COMMAND, SWM_UPDATE, 0); } else if (lParam == NIN_BALLOONTIMEOUT) { if (hide) { RemoveTray(); } } } else if (msg == WM_UPDATESETTINGS) { UpdateLanguage(); // Reload hooks if (ENABLED()) { UnhookSystem(); HookSystem(); } // Reload config language if (!wParam && IsWindow(g_cfgwnd)) { SendMessage(g_cfgwnd, WM_UPDATESETTINGS, 0, 0); } } else if (msg == WM_ADDTRAY) { hide = 0; UpdateTray(); } else if (msg == WM_HIDETRAY) { hide = 1; RemoveTray(); } else if (msg == WM_OPENCONFIG && (lParam || !hide)) { OpenConfig(wParam); } else if (msg == WM_CLOSECONFIG) { CloseConfig(); } else if (msg == WM_TASKBARCREATED) { tray_added = 0; UpdateTray(); } else if (msg == WM_COMMAND) { int wmId=LOWORD(wParam), wmEvent=HIWORD(wParam); if (wmId == SWM_TOGGLE) { ToggleState(); } else if (wmId == SWM_HIDE) { hide = 1; RemoveTray(); } else if (wmId == SWM_UPDATE) { if (MessageBox(NULL,l10n->update_dialog,APP_NAME,MB_ICONINFORMATION|MB_YESNO|MB_TOPMOST|MB_SETFOREGROUND) == IDYES) { OpenUrl(APP_URL); } } else if (wmId == SWM_CONFIG) { SendMessage(hwnd, WM_OPENCONFIG, 0, 0); } else if (wmId == SWM_ABOUT) { SendMessage(hwnd, WM_OPENCONFIG, 4, 0); } else if (wmId == SWM_EXIT) { DestroyWindow(hwnd); } } else if (msg == WM_QUERYENDSESSION && msghook) { showerror = 0; UnhookSystem(); } else if (msg == WM_DESTROY) { showerror = 0; UnhookSystem(); RemoveTray(); PostQuitMessage(0); } else if (msg == WM_LBUTTONDOWN || msg == WM_MBUTTONDOWN || msg == WM_RBUTTONDOWN) { // Hide cursorwnd if clicked on, this might happen if it wasn't hidden by hooks.c for some reason ShowWindow(hwnd, SW_HIDE); } return DefWindowProc(hwnd, msg, wParam, lParam); }