示例#1
0
void CUpdateWizard::SetTransferStatus(const CTransferStatus* pStatus)
{
	if (!pStatus)
	{
		if (m_statusTimer.IsRunning())
			m_statusTimer.Stop();
		return;
	}


	wxTimeSpan elapsed = wxDateTime::Now().Subtract(pStatus->started);
	int elapsedSeconds = elapsed.GetSeconds().GetLo(); // Assume GetHi is always 0

	wxString text;
	if (elapsedSeconds)
	{
		wxFileOffset rate = (pStatus->currentOffset - pStatus->startOffset) / elapsedSeconds;

		CSizeFormat::_format format = static_cast<CSizeFormat::_format>(COptions::Get()->GetOptionVal(OPTION_SIZE_FORMAT));
		if (format == CSizeFormat::bytes)
			format = CSizeFormat::iec;
		const wxString ratestr = CSizeFormat::Format(rate, true,
													 format,
													 COptions::Get()->GetOptionVal(OPTION_SIZE_USETHOUSANDSEP) != 0,
													 COptions::Get()->GetOptionVal(OPTION_SIZE_DECIMALPLACES));

		text.Printf(_("%s bytes (%s/s)"), wxLongLong(pStatus->currentOffset).ToString().c_str(), ratestr.c_str());

		if (pStatus->totalSize > 0 && rate > 0)
		{
			int left = ((pStatus->totalSize - pStatus->startOffset) / rate) - elapsedSeconds;
			if (left < 0)
				left = 0;
			wxTimeSpan timeLeft(0, 0, left);
			text += timeLeft.Format(_(", %H:%M:%S left"));
		}
		else
		{
			text += _(", --:--:-- left");
		}
	}
	else
		text.Format(_("%s bytes"), wxLongLong(pStatus->currentOffset).ToString().c_str());

	XRCCTRL(*this, "ID_DOWNLOADPROGRESSTEXT", wxStaticText)->SetLabel(text);
	m_pages[2]->GetSizer()->Layout();

	if (pStatus->totalSize > 0)
	{
		int percent = (pStatus->currentOffset * 100) / pStatus->totalSize;
		if (percent > 100)
			percent = 100;
		XRCCTRL(*this, "ID_DOWNLOADPROGRESS", wxGauge)->SetValue(percent);
	}

	if (!m_statusTimer.IsRunning())
		m_statusTimer.Start(100);
}
std::string getTTYLine(int fd)
{
  std::string ret = "";
  char lastChar;
  bool startFound = false;
  fd_set rdfs;
  struct timeval timeout, start;
  struct timezone tz;
  int val;

  FD_ZERO(&rdfs);
  FD_SET(fd, &rdfs);

  timeout.tv_sec = 1;
  timeout.tv_usec = 0;

  gettimeofday(&start, &tz);
  while (lastChar != '\n' && ros::ok() && timeLeft(&start, &timeout))
  {
    if (select(fd+1, &rdfs, NULL, NULL, &timeout) > 0)
    {
      if ((val = read(fd, &lastChar, 1)) == 1)
      {
        if (lastChar == 'S')
        {
          startFound = true;
        }
        else if (lastChar == 'E')
        {
          break;
        }
        else if (lastChar >= '+' && lastChar <= '9')
        {
          ret += lastChar;
        }
      }
      else
      {
        printf("%s Error: fd failed!\n", name);
        controllerState = STATE_WAITING_ON_FD;
        close(fd);
      }
    }
    else
    {
      printf("%s timeout %s\n", name, ret.c_str());
      ret = "";
      break;
    }
  }

  return ret;
}
示例#3
0
void Manager::play() {
  clock.unpause();
  SDL_Event event;
  SDLSound sound;

  bool done = false;
  bool keyCatch = false;
  bool shiftKeyDown = false;
  bool showHelp = false;
  bool tankExploded = false;
  bool freeCam = false;

  int userTickInterval = 0;
  while ( ! done ) {
    draw();
    if (showHelp)
      viewport.drawHUD();

    SDL_Flip(screen);

    clock++;

    update();
    checkCollisions();
    SDL_Delay(timeLeft());

    nextTime += TICK_INTERVAL+userTickInterval;

    SDL_PollEvent(&event);
    Uint8 *keyState = SDL_GetKeyState(NULL);
    if (event.type ==  SDL_QUIT) { break; }
    if(event.type == SDL_KEYUP) {
      keyCatch = false;
      switch (event.key.keysym.sym) {
        case SDLK_LSHIFT:
        case SDLK_RSHIFT:
          shiftKeyDown = false;
        break;

        default:
        break;
      }
    }
    if(event.type == SDL_KEYDOWN) {
      switch ( event.key.keysym.sym ) {
        case SDLK_ESCAPE : done = true; break;
        case SDLK_q      : done = true; break;
        case SDLK_SPACE : {
          if(!keyCatch){
            keyCatch = true;
            if(player.shoot()){
              sound[0];
              viewport.setObjectToTrack(player.getProj());
            }
          }
          break;
        }

        case SDLK_p      : {
          if (!keyCatch) {
            keyCatch = true;
            if ( clock.isPaused() ) clock.unpause();
            else clock.pause();
          }
          break;
        }
        case SDLK_e : {
          if(!keyCatch) {
            keyCatch = true;
            if(!tankExploded){
              tankExploded = true;
              explodeSprite("Etank");
              viewport.setObjectToTrack(explosions.back());
            }
          }
        }

        case SDLK_o      : {
          if (!keyCatch)
          {
            keyCatch = true;
            viewport.setObjectToTrack(player.getSprite());
          }
          break;
        }
        case SDLK_t      : {
          if (!keyCatch) {
            keyCatch = true;
            if(sprites.size() == 0)
              break;
            if (shiftKeyDown)
              currentSprite = (currentSprite+sprites.size()-1)%sprites.size();
            else
              currentSprite = (currentSprite+1)%sprites.size();
            viewport.setObjectToTrack(sprites[currentSprite]);
          }
          break;
        }
        case SDLK_LSHIFT :
        case SDLK_RSHIFT : {
          if (!shiftKeyDown) {
            shiftKeyDown = true;
          }
          break;
        }
        case SDLK_f      : {
          if(!keyCatch) {
            keyCatch = true;
            freeCam = !freeCam;
            viewport.setFreeMode(freeCam);
          }
          break;
        }
        case SDLK_F1     : {
          if(!keyCatch) {
            keyCatch = true;
            showHelp = !showHelp;
          }
          break;
        }
        default          : break;
      }
      if (keyState[SDLK_LEFT]){
        if(freeCam) viewport.moveLeft();
        else player.changeMovement(Player::LEFT);
      }
      if (keyState[SDLK_RIGHT]){
        if(freeCam) viewport.moveRight();
        else player.changeMovement(Player::RIGHT);
      }
      if (keyState[SDLK_UP]){
        if(freeCam) viewport.moveUp();
        else player.changeMovement(Player::UP);
      }
      if (keyState[SDLK_DOWN]){
        if(freeCam) viewport.moveDown();
        else player.changeMovement(Player::DOWN);
      }
    }
  }
  clock.pause();
}
示例#4
0
void CStatusLineCtrl::OnPaint(wxPaintEvent& event)
{
	wxPaintDC dc(this);

	wxRect rect = GetRect();

	int refresh = 0;
	if (!m_data.IsOk() || rect.GetWidth() != m_data.GetWidth() || rect.GetHeight() != m_data.GetHeight())
	{
		delete m_mdc;
		m_data = wxBitmap(rect.GetWidth(), rect.GetHeight());
		m_mdc = new wxMemoryDC(m_data);
		refresh = 15;
	}

	int elapsed_seconds = 0;
	wxTimeSpan elapsed;
	int left = -1;
	wxFileOffset rate;
	wxString bytes_and_rate;
	int bar_split = -1;
	int permill = -1;

	if (!m_pStatus)
	{
		if (!m_pPreviousStatusText || *m_pPreviousStatusText != m_statusText)
		{
			// Clear background
			m_mdc->SetFont(GetFont());
			m_mdc->SetPen(GetBackgroundColour());
			m_mdc->SetBrush(GetBackgroundColour());
			m_mdc->SetTextForeground(GetForegroundColour());
			m_mdc->DrawRectangle(0, 0, rect.GetWidth(), rect.GetHeight());
			wxCoord h = (rect.GetHeight() - m_textHeight) / 2;
			m_mdc->DrawText(m_statusText, 50, h);
			delete m_pPreviousStatusText;
			m_pPreviousStatusText = new wxString(m_statusText);
			refresh = 0;
		}
	}
	else
	{
		if (m_pPreviousStatusText)
		{
			delete m_pPreviousStatusText;
			m_pPreviousStatusText = 0;
			refresh = 15;
		}

		if (m_pStatus->started.IsValid())
		{
			elapsed = wxDateTime::Now().Subtract(m_pStatus->started);
			elapsed_seconds = elapsed.GetSeconds().GetLo(); // Assume GetHi is always 0
		}

		if (elapsed_seconds != m_last_elapsed_seconds)
		{
			refresh |= 1;
			m_last_elapsed_seconds = elapsed_seconds;
		}

		if (COptions::Get()->GetOptionVal(OPTION_SPEED_DISPLAY))
			rate = GetCurrentSpeed();
		else
		    rate = GetSpeed(elapsed_seconds);

		if (elapsed_seconds && rate > -1)
		{
			left = ((m_pStatus->totalSize - m_pStatus->startOffset) / rate) - elapsed_seconds;
			if (left < 0)
				left = 0;
		}

		if (m_last_left != left)
		{
			refresh |= 2;
			m_last_left = left;
		}

		const wxString bytestr = CSizeFormat::Format(m_pStatus->currentOffset, true, CSizeFormat::bytes, COptions::Get()->GetOptionVal(OPTION_SIZE_USETHOUSANDSEP) != 0, 0);
		if (elapsed_seconds && rate > -1)
		{
			if (rate > (1000*1000))
				bytes_and_rate.Printf(_("%s (%d.%d MB/s)"), bytestr.c_str(), (int)(rate / 1000 / 1000), (int)((rate / 1000 / 100) % 10));
			else if (rate > 1000)
				bytes_and_rate.Printf(_("%s (%d.%d KB/s)"), bytestr.c_str(), (int)(rate / 1000), (int)((rate / 100) % 10));
			else
				bytes_and_rate.Printf(_("%s (%d B/s)"), bytestr.c_str(), (int)rate);
		}
		else
			bytes_and_rate.Printf(_("%s (? B/s)"), bytestr.c_str());

		if (m_last_bytes_and_rate != bytes_and_rate)
		{
			refresh |= 8;
			m_last_bytes_and_rate = bytes_and_rate;
		}

		if (m_pStatus->totalSize > 0)
		{
			bar_split = wxLongLong(m_pStatus->currentOffset * (PROGRESSBAR_WIDTH - 2) / m_pStatus->totalSize).GetLo();
			if (bar_split > (PROGRESSBAR_WIDTH - 2))
				bar_split = PROGRESSBAR_WIDTH - 2;

			if (m_pStatus->currentOffset > m_pStatus->totalSize)
				permill = 1001;
			else
				permill = wxLongLong(m_pStatus->currentOffset * 1000 / m_pStatus->totalSize).GetLo();
		}

		if (m_last_bar_split != bar_split || m_last_permill != permill)
		{
			refresh |= 4;
			m_last_bar_split = bar_split;
			m_last_permill = permill;
		}
	}

	if (refresh)
	{
		m_mdc->SetFont(GetFont());
		m_mdc->SetPen(GetBackgroundColour());
		m_mdc->SetBrush(GetBackgroundColour());
		m_mdc->SetTextForeground(GetForegroundColour());
	
		// Get character height so that we can center the text vertically.
		wxCoord h = (rect.GetHeight() - m_textHeight) / 2;

		if (refresh & 1)
		{
			m_mdc->DrawRectangle(0, 0, m_fieldOffsets[0], rect.GetHeight());
			DrawRightAlignedText(*m_mdc, elapsed.Format(_("%H:%M:%S elapsed")), m_fieldOffsets[0], h);
		}
		if (refresh & 2)
		{
			m_mdc->DrawRectangle(m_fieldOffsets[0], 0, m_fieldOffsets[1] - m_fieldOffsets[0], rect.GetHeight());
			if (left != -1)
			{
				wxTimeSpan timeLeft(0, 0, left);
				DrawRightAlignedText(*m_mdc, timeLeft.Format(_("%H:%M:%S left")), m_fieldOffsets[1], h);
			}
			else
				DrawRightAlignedText(*m_mdc, _("--:--:-- left"), m_fieldOffsets[1], h);
		}
		if (refresh & 8)
		{
			m_mdc->DrawRectangle(m_fieldOffsets[3], 0, rect.GetWidth() - m_fieldOffsets[3], rect.GetHeight());
			m_mdc->DrawText(bytes_and_rate, m_fieldOffsets[3], h);
		}
		if (refresh & 4)
		{
			if (bar_split != -1)
				DrawProgressBar(*m_mdc, m_fieldOffsets[2], 1, rect.GetHeight() - 2, bar_split, permill);
			else
				m_mdc->DrawRectangle(m_fieldOffsets[2], 0, m_fieldOffsets[3] - m_fieldOffsets[2], rect.GetHeight());
		}
	}
	dc.Blit(0, 0, rect.GetWidth(), rect.GetHeight(), m_mdc, 0, 0);
}
void CStatusLineCtrl::OnPaint(wxPaintEvent&)
{
	wxPaintDC dc(this);

	wxRect rect = GetRect();

	int refresh = 0;
	if (!m_data.IsOk() || rect.GetWidth() != m_data.GetWidth() || rect.GetHeight() != m_data.GetHeight()) {
		m_mdc.reset();
		m_data = wxBitmap(rect.GetWidth(), rect.GetHeight());
		m_mdc = std::make_unique<wxMemoryDC>(m_data);
		// Use same layout direction as the DC which bitmap is drawn on.
		// This avoids problem with mirrored characters on RTL locales.
		m_mdc->SetLayoutDirection(dc.GetLayoutDirection());
		refresh = 31;
	}

	fz::duration elapsed;
	int left = -1;
	wxFileOffset rate;
	wxString bytes_and_rate;
	int bar_split = -1;
	int permill = -1;

	if (status_.empty()) {
		if (m_previousStatusText != m_statusText) {
			// Clear background
			m_mdc->SetFont(GetFont());
			m_mdc->SetPen(GetBackgroundColour());
			m_mdc->SetBrush(GetBackgroundColour());
			m_mdc->SetTextForeground(GetForegroundColour());
			m_mdc->DrawRectangle(0, 0, rect.GetWidth(), rect.GetHeight());
			wxCoord h = (rect.GetHeight() - m_textHeight) / 2;
			m_mdc->DrawText(m_statusText, 50, h);
			m_previousStatusText = m_statusText;
			refresh = 0;
		}
	}
	else {
		if (!m_previousStatusText.empty()) {
			m_previousStatusText.clear();
			refresh = 31;
		}

		int elapsed_milli_seconds = 0;
		if (!status_.started.empty()) {
			elapsed = fz::datetime::now() - status_.started;
			elapsed_milli_seconds = static_cast<int>(elapsed.get_milliseconds()); // Assume it doesn't overflow
		}

		if (elapsed_milli_seconds / 1000 != m_last_elapsed_seconds) {
			refresh |= 1;
			m_last_elapsed_seconds = elapsed_milli_seconds / 1000;
		}

		if (COptions::Get()->GetOptionVal(OPTION_SPEED_DISPLAY))
			rate = GetMomentarySpeed();
		else
			rate = GetAverageSpeed(elapsed_milli_seconds);

		if (status_.totalSize > 0 && elapsed_milli_seconds >= 1000 && rate > 0) {
			wxFileOffset r = status_.totalSize - status_.currentOffset;
			left = r / rate + 1;
			if (r)
				++left;

			if (left < 0)
				left = 0;
		}

		if (m_last_left != left) {
			refresh |= 2;
			m_last_left = left;
		}

		const wxString bytestr = CSizeFormat::Format(status_.currentOffset, true, CSizeFormat::bytes, COptions::Get()->GetOptionVal(OPTION_SIZE_USETHOUSANDSEP) != 0, 0);
		if (elapsed_milli_seconds >= 1000 && rate > -1) {
			CSizeFormat::_format format = static_cast<CSizeFormat::_format>(COptions::Get()->GetOptionVal(OPTION_SIZE_FORMAT));
			if (format == CSizeFormat::bytes)
				format = CSizeFormat::iec;
			const wxString ratestr = CSizeFormat::Format(rate, true,
														 format,
														 COptions::Get()->GetOptionVal(OPTION_SIZE_USETHOUSANDSEP) != 0,
														 COptions::Get()->GetOptionVal(OPTION_SIZE_DECIMALPLACES));
			bytes_and_rate.Printf(_("%s (%s/s)"), bytestr, ratestr );
		}
		else
			bytes_and_rate.Printf(_("%s (? B/s)"), bytestr);

		if (m_last_bytes_and_rate != bytes_and_rate) {
			refresh |= 8;
			m_last_bytes_and_rate = bytes_and_rate;
		}

		if (status_.totalSize > 0) {
			bar_split = static_cast<int>(status_.currentOffset * (PROGRESSBAR_WIDTH - 2) / status_.totalSize);
			if (bar_split > (PROGRESSBAR_WIDTH - 2))
				bar_split = PROGRESSBAR_WIDTH - 2;

			if (status_.currentOffset > status_.totalSize)
				permill = 1001;
			else
				permill = static_cast<int>(status_.currentOffset * 1000 / status_.totalSize);
		}

		if (m_last_bar_split != bar_split || m_last_permill != permill) {
			refresh |= 4;
			m_last_bar_split = bar_split;
			m_last_permill = permill;
		}
	}

	if (refresh) {
		m_mdc->SetFont(GetFont());
		m_mdc->SetPen(GetBackgroundColour());
		m_mdc->SetBrush(GetBackgroundColour());
		m_mdc->SetTextForeground(GetForegroundColour());

		// Get character height so that we can center the text vertically.
		wxCoord h = (rect.GetHeight() - m_textHeight) / 2;

		if (refresh & 1) {
			m_mdc->DrawRectangle(0, 0, m_fieldOffsets[0], rect.GetHeight());
			DrawRightAlignedText(*m_mdc, wxTimeSpan::Milliseconds(elapsed.get_milliseconds()).Format(_("%H:%M:%S elapsed")), m_fieldOffsets[0], h);
		}
		if (refresh & 2) {
			m_mdc->DrawRectangle(m_fieldOffsets[0], 0, m_fieldOffsets[1] - m_fieldOffsets[0], rect.GetHeight());
			if (left != -1) {
				wxTimeSpan timeLeft(0, 0, left);
				DrawRightAlignedText(*m_mdc, timeLeft.Format(_("%H:%M:%S left")), m_fieldOffsets[1], h);
			}
			else
				DrawRightAlignedText(*m_mdc, _("--:--:-- left"), m_fieldOffsets[1], h);
		}
		if (refresh & 8) {
			m_mdc->DrawRectangle(m_fieldOffsets[3], 0, rect.GetWidth() - m_fieldOffsets[3], rect.GetHeight());
			m_mdc->DrawText(bytes_and_rate, m_fieldOffsets[3], h);
		}
		if (refresh & 16) {
			m_mdc->DrawRectangle(m_fieldOffsets[1], 0, m_fieldOffsets[2] - m_fieldOffsets[1], rect.GetHeight());
		}
		if (refresh & 4) {
			m_mdc->DrawRectangle(m_fieldOffsets[2], 0, m_fieldOffsets[3] - m_fieldOffsets[2], rect.GetHeight());
			if (bar_split != -1)
				DrawProgressBar(*m_mdc, m_fieldOffsets[2], 1, rect.GetHeight() - 2, bar_split, permill);
		}
	}
	dc.Blit(0, 0, rect.GetWidth(), rect.GetHeight(), m_mdc.get(), 0, 0);
}
void QuaternionDemo::eventLoop()
{
    int quit = false;

    while(!quit) {

        SDL_Event event;
        while(SDL_PollEvent(&event)) 
        {
            switch(event.type) {
                case SDL_QUIT:
                    quit = true;
                    break;
                case SDL_KEYDOWN:
                    switch( event.key.keysym.sym ){
                         case SDLK_DOWN:
                             {
                                 //Rotate
                                 Quaternion rot = Quaternion::axisAngleQuat(0.3, glm::vec3(1.0f, 0.0f, 0.0f));
                                 viewRot = viewRot * rot;
                                 viewRot.normalize();
                             }
                             break;
                         case SDLK_UP:
                             {
                                 //Rotate
                                 Quaternion rot = Quaternion::axisAngleQuat(0.3, -glm::vec3(1.0f, 0.0f, 0.0f));
                                 viewRot = viewRot * rot;
                                 viewRot.normalize();
                             }
                             break;
                        case SDLK_LEFT:
                             {
                                 //Rotate
                                 Quaternion rot = Quaternion::axisAngleQuat(0.3, -glm::vec3(0.0f, 1.0f, 0.0f));
                                 viewRot = viewRot * rot;
                                 viewRot.normalize();
                             }
                             break;
                        case SDLK_RIGHT:
                             {
                                 //Rotate
                                 Quaternion rot = Quaternion::axisAngleQuat(0.3, glm::vec3(0.0f, 1.0f, 0.0f));
                                 viewRot = viewRot * rot;
                                 viewRot.normalize();
                             }
                             break;
                        case SDLK_n:
                             // Generate new vectors
                             setupRandomVectors();
                             break;
                        case SDLK_t:
                             // increment interpolation
                             interpT += 0.05;
                    }
                    break;
            }
        }

        render();

        SDL_Delay(timeLeft());
    }

}
示例#7
0
/*
 * getNetBaud()
 *
 * This gets the baud of network caller -- refer to SysDep.doc
 */
char getNetBaud()
{
    extern UNS_16 intrates[];
    extern FILE *netLog;
    int		Time, baudRunner;
    extern int	BaudRate;
    char	laterMessage[100];
    char	found = FALSE, notFinished;
    extern char inNet;

	/* If anytime answer, then we already have baud rate */

    sprintf(laterMessage,
 "System will be in network mode for another %d minutes; please call back.\n",
							timeLeft());

    if (inNet == ANY_CALL || inNet == STROLL_CALL) {
	found      = TRUE;
	baudRunner = LastBaudIndex;
    }
    else if (GetFirst(&ResList)) {
	if ((baudRunner = getModemId()) != ERROR) {
	    found = TRUE;
	    setNetCallBaud(baudRunner);
	}
    }

    pause(50);	/* Pause a half second */

    if (found) {
	BaudRate = atoi(rates[baudRunner]);
	for (Time = 0; gotCarrier() && Time < 20; Time++) {
	    if (check_for_init(FALSE)) return TRUE;
	    if (cfg.BoolFlags.debug) splitF(netLog, ".\n");
	}
	if (gotCarrier()) {
	    outFlag = IMPERVIOUS;
	    mPrintf(laterMessage);
	}
    }
    else {
	while (MIReady())   Citinp();	/* Clear garbage	*/

	for (Time = 0; gotCarrier() && Time < 20; Time++) {
	    for (notFinished = TRUE, baudRunner = 0; 
					gotCarrier() && notFinished;) {
		BaudRate = intrates[baudRunner]*10;
		setNetCallBaud(baudRunner);
		if (check_for_init(FALSE)) return TRUE;  /* get connection */
		if (cfg.BoolFlags.debug) splitF(netLog, ".\n");
		notFinished = !(baudRunner == cfg.sysBaud);
		baudRunner++;
	    }
	}

	if (gotCarrier()) {
	    outFlag = IMPERVIOUS;
	    for (baudRunner = cfg.sysBaud; baudRunner > -1; baudRunner--) {
		setNetCallBaud(baudRunner);
		mPrintf(laterMessage);
	    }
	    outFlag = OUTOK;
	}
    }
    if (!gotCarrier()) splitF(netLog, "Lost carrier\n");
    killConnection("gnb");
    return FALSE;
}
示例#8
0
void 
capFramerate(void) {
  SDL_Delay(timeLeft());
  next_time += TICK_INTERVAL;
}