예제 #1
0
파일: phonecall.c 프로젝트: UIKit0/picogui
/* Update the 'connect time' display, if applicable.
 * This should be called at least every second when a call is active.
 * Calling it more often or when a call isn't active won't hurt.
 */
void update_call_timer(void) {
  time_t now, starttime, duration;

  phone_check_ring_timeout();
  
  if (!current_call)
    return;

  /* Measure the time from connect to now or 
   * (if the call has ended) it's end */
  starttime = current_call->begin_time;
  now = time(NULL);
  if (!starttime)
    starttime = now;
  if (current_call->end_time)
    now = current_call->end_time;
  duration = now - starttime;

  /* If there's a call in progress, don't let the power management kick in */
  if (current_call->begin_time && !current_call->end_time)
    pgSetInactivity(0);

  if (old_connect_time != duration) {
    pgReplaceTextFmt(wConnectTime,"%2d:%02d", duration/60,duration%60);
    pgSubUpdate(wConnectTime);
  }

  old_connect_time = duration;
}
예제 #2
0
void sysIdle(void) {
  FILE *f;
  char buf[50];
  int bat_raw, bat_percent;
  
  /* Get battery status */
  f = fopen("/proc/r39xxpm","r");
  if (f) {
    /* I don't think the format of /proc/r39xxpm is set in stone, so
     * this might break? Oh well, works for now. */
    fgets(buf,50,f);  /* CPU speed */
    fgets(buf,50,f);  /* Battery voltage */
    fclose(f);
    bat_raw = atoi(buf+9); /* Skip past "Battery: " */
    
    /* Translate to percent, assuming 259 (2.0 volts) is empty
     * and 402 (3.0 volts) is full. */
    bat_percent = ((bat_raw - 259) * 100) / 143;
    if (bat_percent < 0) bat_percent = 0;
    if (bat_percent > 100) bat_percent = 100;
    
    pgSetWidget(wBatt,PG_WP_VALUE,bat_percent,0);
    pgFlushRequests();
    pgSubUpdate(wBatt);  
  }
}
예제 #3
0
파일: pgl-cpu.c 프로젝트: scanlime/picogui
void sysIdle(void) {
  char *ct;
  char buf[50];
  FILE *f;
  unsigned long cpu_user,cpu_nice,cpu_sys,cpu_idle;
  unsigned long crun,ctotal,wval;
  static unsigned long ocrun = 0,octotal = 1,owval = 0;

  /* Get CPU load */
  f = fopen("/proc/stat","r");
  fgets(buf,50,f);
  fclose(f);
  sscanf(buf,"cpu %lu %lu %lu %lu",&cpu_user,&cpu_nice,&cpu_sys,&cpu_idle);  
  crun = cpu_user + cpu_sys;
  ctotal = crun + cpu_nice + cpu_idle;
  if (crun==ocrun || ctotal==octotal)
    wval = 0;
  else
    wval = (crun-ocrun) * 100 / (ctotal-octotal);

  if (wval!=owval) {
    pgSetWidget(wLoad,PG_WP_VALUE,wval,0);
    pgSubUpdate(wLoad);
  }

  owval = wval;
  ocrun = crun;
  octotal = ctotal;
}
예제 #4
0
static void PG_UpdateRects(_THIS, int numrects, SDL_Rect *rects)
{
        int i;
	
	for (i = 0; i < numrects; i++) {
	        if (rects[i].w <= 0 || rects[i].h <= 0)
		  continue;

		/* Schedule an incremental update for this rectangle, using
		 * the canvas gropnodes we've loaded beforehand.
		 */
		pgWriteCmd(this->hidden->wCanvas, PGCANVAS_FINDGROP, 1, 0);
		pgWriteCmd(this->hidden->wCanvas, PGCANVAS_MOVEGROP, 4, 
			   rects[i].x, rects[i].y,
			   rects[i].w, rects[i].h);
		pgWriteCmd(this->hidden->wCanvas, PGCANVAS_FINDGROP, 1, 1);
		pgWriteCmd(this->hidden->wCanvas, PGCANVAS_MOVEGROP, 4, 
			   rects[i].x, rects[i].y,
			   rects[i].w, rects[i].h);
		
		/* Go perform the update */
		pgWriteCmd(this->hidden->wCanvas, PGCANVAS_INCREMENTAL, 0);
		pgSubUpdate(this->hidden->wCanvas);
	}
}
예제 #5
0
파일: pgl-clock.c 프로젝트: UIKit0/picogui
/* Update the current clock time */
void updateTime(void) {
   time_t now;
   struct tm *ltime;
   char buf[CLKMAX];
   static int blink = 0;

   time(&now);
   ltime = localtime(&now);
   strftime(buf,CLKMAX,blink ? currentClock.fmt1 : currentClock.fmt2,ltime);
   blink = !blink;
   pgReplaceText(currentClock.wClock,buf);
   pgSubUpdate(currentClock.wClock);
}
예제 #6
0
파일: themebar.c 프로젝트: UIKit0/picogui
/* widget: the parent widget to derive inside
 * directory: the directory into which search for themes */
void themebar(pghandle widget, char* directory, int* themecontext)
{
  struct dirent *dent;
  int i,l;
  DIR *d;
  char buf[80];
  pghandle box;

  THEME_DIRECTORY=directory;
  if (! (d = opendir(THEME_DIRECTORY))) {
      eerror("directory not found");
      exit(1);
  }

  /* simple & dirty */
/*   pageContext = pagecontext; */
/*   themeContext = themecontext; */

  box = pgNewWidget(PG_WIDGET_SCROLLBOX, PG_DERIVE_AFTER, widget);
  pgSetWidget(PGDEFAULT,
	      PG_WP_SIDE, PG_S_ALL,
/*  	      PG_WP_TRANSPARENT, 1, */
	      0);

  /* Make handles */
  rewinddir(d);
  i = 0;
  while ((dent = readdir(d))) {
    l = strlen(dent->d_name);
    if (l<4) continue;
    if (strcmp(dent->d_name+l-3,".th")) continue;

    buf[0] = 0;
/*     dent->d_name[l-3] = 0; */

    if (idx == LENGHT) {
	eerror("max array lenght reached in themebar.c: too many themes.");
	break;
    }

    array[idx].dir = pgNewString(directory);
    array[idx].fname = pgNewString(dent->d_name);
    array[idx].active = 0;

    /* Add item */
    pgNewWidget(PG_WIDGET_BUTTON, PG_DERIVE_INSIDE, box);
    pgSetWidget(PGDEFAULT,
/* 		PG_WP_EXTDEVENTS, pgGetWidget(PGDEFAULT, PG_WP_EXTDEVENTS) & ~PG_EXEV_EXCLUSIVE, */
/* 		PG_WP_EXTDEVENTS, PG_EXEV_TOGGLE, */
		PG_WP_TEXT, array[idx].fname,
		PG_WP_SIDE, PG_S_BOTTOM,
		0);

    pgSetPayload(PGDEFAULT, idx);
    idx++;

    pgBind(PGDEFAULT,PG_WE_ACTIVATE,evtChangeTheme, themecontext);
  }
  closedir(d);

  pgSubUpdate(widget);
  return;
}