#!/usr/bin/env python2

import sys, os
import gettext
from gi.repository import Gtk, Gdk
import subprocess
import commands

# i18n
gettext.install("nvidia-prime-applet", "/usr/share/locale")

class Tray:
    def __init__(self):

        self.icon = Gtk.StatusIcon()
        self.icon.set_title("nvidia-prime")
        self.icon.connect("popup-menu", self.on_popup_menu)
        self.icon.connect("activate", self.on_activate)

        active_gpu = commands.getoutput("prime-select query")
        if (active_gpu == "nvidia"):
            self.icon.set_from_icon_name("prime-tray-nvidia")
            self.icon.set_tooltip_text(_("Active graphics card: NVIDIA"))
        elif (active_gpu == "intel"):
            self.icon.set_from_icon_name("prime-tray-intel")
            self.icon.set_tooltip_text(_("Active graphics card: Intel"))
        else:
            self.icon.set_from_icon_name("dialog-error")
            self.icon.set_tooltip_text(_("Active graphics card: " + active_gpu))

    def on_activate(self, icon, data=None):
        self.run_nvidia_settings();

    def run_nvidia_settings (self, arg=None):
        subprocess.Popen(["nvidia-settings", "-page", "PRIME Profiles"])

    def on_popup_menu(self, icon, button, time, data = None):
        menu = Gtk.Menu()

        item = Gtk.MenuItem(label=_("NVIDIA Settings"))
        item.connect("activate", self.run_nvidia_settings)
        menu.append(item)

        menu.append(Gtk.SeparatorMenuItem())

        item = Gtk.MenuItem(label=_("Quit"))
        item.connect("activate", self.terminate)
        menu.append(item)

        menu.show_all()

        device = Gdk.Display.get_default().get_device_manager().get_client_pointer()
        menu.popup_for_device(device, None, None, lambda w,x: icon.position_menu(menu, icon), icon, button, time)

    def terminate(self, window = None, data = None):
        Gtk.main_quit()

if __name__ == "__main__":

    # If nvidia-prime isn't installed or isn't supported, exit cleanly
    if not (os.path.exists("/usr/bin/nvidia-settings") and os.path.exists("/usr/bin/prime-select")):
        sys.exit(0)

    if commands.getoutput("prime-supported 2>/dev/null") != "yes":
        sys.exit(0)

    Tray()
    Gtk.main()
