Esempio n. 1
0
 def ensurePreferencesDialog(self):
   if self.guiPrefs == None or self.guiPrefs.get_window() == None:
     self.guiPrefs = GuiPrefs(self.prefs)
     self.prefsDialog = gtk.Window(gtk.WINDOW_TOPLEVEL)
     self.prefsDialog.set_title('TPBattStat Preferences')
     self.prefsDialog.add(self.guiPrefs)
   self.guiPrefs.update()
Esempio n. 2
0
class Gui():
  def __init__(self, prefs, battStatus, orientation='horizontal'):
    self.prefs = prefs
    self.battStatus = battStatus
    self.label = gtk.Label("<?>")
    self.batt0img = gtk.Image()
    self.batt1img = gtk.Image()
    self.counter = 0
    self.orientation = orientation
    self.pixbufSize = None

    self.container = gtk.HBox()
    self.box = None
    self.resetLayout()

    self.guiPrefs = None
  def getGtkWidget(self):
    return self.container
  def resetLayout(self):
    if self.box != None:
      self.container.remove(self.box)

    if self.isVertical():
      self.box = gtk.VBox()
    else:
      self.box = gtk.HBox()

    self.box.add(self.batt0img)
    self.box.add(self.label)
    self.box.add(self.batt1img)
    
    self.container.add(self.box)
    self.container.show_all()

  def parseSize(self, size):
    size = re.match('^(\\d+)x(\\d+)$', size)
    if size != None:
      return(int(size.group(1)), int(size.group(2)))
    else:
      return (36, 36)
  def initPixbufs(self, size):
    (w, h) = self.parseSize(size)
    self.none = self.newPixbuf(w, h, 'none.svg')
    self.idle = []
    self.charging = []
    self.discharging = []
    for i in [0,10,20,30,40,50,60,70,80,90,100]:
      img = str(i) + '.svg'
      self.idle.append(self.newPixbuf(w, h, 'idle/' + img))
      self.charging.append(self.newPixbuf(w, h, 'charging/' + img))
      self.discharging.append(self.newPixbuf(w, h, 'discharging/' + img))

  def newPixbuf(self, w, h, filename):
    return gtk.gdk.pixbuf_new_from_file_at_size(
      IMAGE_DIR + '/' + filename, w, h)
  def selectPixbufByBattId(self, batt_id):
    battInfo = self.battStatus.getBattInfo(batt_id)
    return self.selectPixbuf(battInfo.isInstalled(), battInfo.state,
      int(float(battInfo.remaining_percent)))
  def selectPixbuf(self, installed, state, percent):
    if not installed:
      return self.none

    if state == State.CHARGING:
      imgs = self.charging
    elif state == State.DISCHARGING:
      imgs = self.discharging
    else:
      imgs = self.idle

    i = int(percent / 10)
    if i < 0 or len(imgs) <= 0:
      return self.none
    elif i >= len(imgs):
      return imgs[len(imgs)-1]
    else:
      return imgs[i]
  def updateImages(self):
    size = self.prefs['iconSize']
    if self.pixbufSize == None or self.pixbufSize != size:
      self.initPixbufs(size)
      self.pixbufSize = size

    if self.prefs['displayIcons']:
      if self.prefs['displayOnlyOneIcon']:
        installed = self.battStatus.isEitherInstalled()
        percent = self.battStatus.getTotalRemainingPercent()
        if self.battStatus.isEitherCharging():
          state = State.CHARGING
        elif self.battStatus.isEitherDischarging():
          state = State.DISCHARGING
        else:
          state = State.IDLE
        self.batt0img.set_from_pixbuf(
          self.selectPixbuf(installed, state, percent))
        self.batt0img.set_child_visible(True)
        self.batt1img.set_child_visible(False)
      else:
        self.batt0img.set_from_pixbuf(self.selectPixbufByBattId(0))
        self.batt1img.set_from_pixbuf(self.selectPixbufByBattId(1))
        self.batt0img.set_child_visible(True)
        self.batt1img.set_child_visible(True)
    else:
      self.batt0img.set_child_visible(False)
      self.batt1img.set_child_visible(False)

  def getBattMarkup(self, batt_id):
    battInfo = self.battStatus.getBattInfo(batt_id)
    if not battInfo.isInstalled():
      return '<span size="small">X</span>'
    percent = battInfo.remaining_percent

    if percent == '100':
      size = ' size="xx-small" '
    else:
      size = ' size="small" '

    if not self.prefs['displayColoredText'] or battInfo.state == State.IDLE:
      color = ''
    elif battInfo.state == State.CHARGING:
      color = ' foreground="#60FF60" '
    elif battInfo.state == State.DISCHARGING:
      color = ' foreground="#FF6060" '

    return '<b><span' + size + color + '>' + percent + '</span></b>'
  def getSeparatorMarkup(self):
    if self.prefs['displayBlinkingIndicator'] and self.counter % 2 == 0:
      color = ' foreground="blue" '
    else:
      color = ''

    sep = '<span size="x-small"' + color + '>|</span>'
    if self.isVertical():
      return sep + '\n'
    else:
      return sep
  def isVertical(self):
    return self.orientation == "vertical"
  def getPowerMarkup(self):
    powW = self.battStatus.getPowerDisplay()
    return '\n<span size="xx-small">' + powW + '</span>'
  def updateLabel(self):
    self.label.set_markup(
      self.getBattMarkup(0) +
      self.getSeparatorMarkup() +
      self.getBattMarkup(1) +
      self.getPowerMarkup())

  def update(self):
    self.counter = self.counter + 1
    self.updateImages()
    self.updateLabel()

  def ensurePreferencesDialog(self):
    if self.guiPrefs == None or self.guiPrefs.get_window() == None:
      self.guiPrefs = GuiPrefs(self.prefs)
      self.prefsDialog = gtk.Window(gtk.WINDOW_TOPLEVEL)
      self.prefsDialog.set_title('TPBattStat Preferences')
      self.prefsDialog.add(self.guiPrefs)
    self.guiPrefs.update()
  def getPreferencesDialog(self):
    self.ensurePreferencesDialog()
    return self.prefsDialog
  def showPreferencesDialog(self, *arguments, **keywords):
    self.getPreferencesDialog().show_all()