~alessandrofac93/bumblebee-config-gui/0.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: Alessandro Facciorusso
"""

from gi.repository import Gtk, Gdk, GObject
import os
import sys
import platform
import pkg_resources

from gettext import gettext as _

from bumblebee_config.utils import determine_module_path
from bumblebee_config.apt_helper import AptHelper
from bumblebee_config.bumblebee_config_window import BumblebeeConfigWindow
from bumblebee_config import bumblebee_helper
from bumblebee_config.install_progress_dialog import InstallProgressDialog


APP = "bumblebee-config-gui"
try:
    __version__ = pkg_resources.require(APP)[0].version
except:
    __version__ = ""


class BumblebeeMainWindow(object):

    def __init__(self):
        super(BumblebeeMainWindow, self).__init__()

        self.bumblebeeInstalled = False

        self.aptHelper = AptHelper()

        self.builder = Gtk.Builder()
        self.builder.set_translation_domain(APP)
        self.builder.add_from_file(os.path.join(determine_module_path(), "main_window.ui"))

        self.mainWindow = self.builder.get_object("window1")
        self.mainWindow.set_title(_("Bumblebee Configurator GUI") + " " + __version__)

        self.installButton = self.builder.get_object("installButton")
        self.installButton.connect("clicked", self._onInstallButtonClicked)
        self.builder.get_object("configureButton").connect("clicked", self._onConfigureButtonClicked)
        self.builder.get_object("restartButton").connect("clicked", self._onRestartButtonClicked)
        self.builder.get_object("checkStatusButton").connect("clicked", self._onCheckStatusButtonClicked)

        if self.isUbuntu():
            if self.aptHelper.checkBumblebeeInstalled():
                self.installButton.set_label(_("Reinstall Bumblebee"))
                self.bumblebeeInstalled = True
            else:
                self.installButton.set_label(_("Install Bumblebee"))
        else:
            self.installButton.set_sensitive(False)

    def isUbuntu(self):
        if platform.linux_distribution()[0].lower() == "ubuntu":
            return True
        else:
            return False

    def _onInstallButtonClicked(self, widget):
        dialog = InstallProgressDialog(self.mainWindow)
        self.aptHelper.installBumblebee(dialog.downloadingCb, dialog.installingCb, self.bumblebeeInstalled)
        dialog.run()
        dialog.destroy()
        self.installButton.set_label(_("Reinstall Bumblebee"))
        self.bumblebeeInstalled = True

    def _onConfigureButtonClicked(self, widget):
        confWnd = BumblebeeConfigWindow()
        confWnd.runAsDialog(self.mainWindow)

    def _onRestartButtonClicked(self, widget):
        msg = ""
        msg += _("Executing \'service bumblebeed restart\':") + "\n"
        msg += bumblebee_helper.restartBumblebeed()

        dialog = Gtk.MessageDialog(self.mainWindow, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK, _("Bumblebee output"))
        dialog.format_secondary_text(msg)
        dialog.run()
        dialog.destroy()
        print msg

    def _onCheckStatusButtonClicked(self, widget):
        msg = ""
        msg += "\n" + _("Bumblebeed status:") + "\n"
        msg += bumblebee_helper.checkBumblebeedStatus()

        dialog = Gtk.MessageDialog(self.mainWindow, 0, Gtk.MessageType.INFO,
                                   Gtk.ButtonsType.OK, _("Bumblebee output"))
        dialog.format_secondary_text(msg)
        dialog.run()
        dialog.destroy()
        print msg

    def run(self):    
        GObject.threads_init()
        Gdk.threads_init();
        Gdk.threads_enter();
        self.mainWindow.show_all()
        self.mainWindow.connect("delete-event", Gtk.main_quit)
        Gdk.threads_leave()
        Gtk.main()
        return 0