Example #1
0
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);
}
Example #3
0
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();
	}
}
Example #4
0
void
JXCheckbox::HandleMouseUp
	(
	const JPoint&			pt,
	const JXMouseButton		button,
	const JXButtonStates&	buttonStates,
	const JXKeyModifiers&	modifiers
	)
{
	if (button == kJXLeftButton && itsIsPushedFlag)
		{
		itsIsPushedFlag = kJFalse;
		ToggleState();
		}
}
Example #5
0
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();
}
Example #6
0
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();
}
Example #7
0
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;

}
Example #8
0
/// <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);
  }
}
Example #9
0
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));
				}
			}
		}
	}
}
Example #10
0
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);
}
Example #11
0
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();
	}
}
Example #12
0
void GraphButton::onClick(wxCommandEvent& WXUNUSED(event)) {
	ToggleState();
}
Example #13
0
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
			}
		}
	}
}
Example #14
0
// 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);
			}
		}
	}



}
Example #15
0
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);
			}
		}
	}
}
Example #17
0
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);
}