Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
crossover / opt / cxoffice / lib / python / cxprefsui.py
Size: Mime:
# (c) Copyright 2009-2015. CodeWeavers, Inc.
from __future__ import division

import gtk

import cxproduct
import cxobservable

import cxaiemedia

import cxguitools

from cxutils import _

# These are the observable events
DIALOG_CLOSED = 'dialog_closed'


#
# Dialog instance
#

class PreferenceDialogController(cxobservable.Object):

    observable_events = frozenset((DIALOG_CLOSED,))

    def __init__(self):
        cxobservable.Object.__init__(self)

        #-----------------------------------------------------------------------
        #  Setup the GUI
        #-----------------------------------------------------------------------
        self.xml = gtk.Builder()
        self.xml.set_translation_domain("crossover")
        self.xml.add_from_file(cxguitools.get_ui_path("cxprefs"))
        self.xml.connect_signals(self)

        # Set initial values
        logUsage = False
        autoUpdate = False
        showUntested = False
        applyCxfixes = True

        global_config = cxproduct.get_config()
        if global_config['CrossOver'].get('ReportWineUsage', '0') == '1':
            logUsage = True

        if global_config['OfficeSetup'].get('AutoUpdate', '0') == '1':
            autoUpdate = True

        if global_config['OfficeSetup'].get('ShowUntestedApps', '0') == '1':
            showUntested = True

        if global_config['OfficeSetup'].get('ApplyCxfixes', '1') != '1':
            applyCxfixes = False

        self.xml.get_object('usageCheckbox').set_active(logUsage)
        self.xml.get_object('downloadCheckbox').set_active(autoUpdate)
        self.xml.get_object('showUntestedCheckbox').set_active(showUntested)
        self.xml.get_object('applyCxfixesCheckbox').set_active(applyCxfixes)

        self.update_cache_label()

    def update_cache_label(self):
        size = cxaiemedia.size_cached_installers()

        self.xml.get_object('ClearCacheButton').set_sensitive(size != 0)

        if size == 0:
            message = _("There are currently no downloaded installers saved locally.")
        elif size < 1024 * 1024:
            message = _("Downloaded installers are currently using %0.1f KB of disk space.") % (size / 1024)
        elif size < 1024 * 1024 * 1024:
            message = _("Downloaded installers are currently using %0.1f MB of disk space.") % (size / (1024 * 1024))
        else:
            message = _("Downloaded installers are currently using %0.1f GB of disk space.") % (size / (1024 * 1024 * 1024))

        self.xml.get_object('InstallerCacheLabel').set_text(message)

    def on_ClearCacheButton_clicked(self, _widget):
        cxaiemedia.delete_cached_installers()

        self.update_cache_label()

    def downloadCheckbox_toggled_cb(self, caller):
        # pylint: disable=R0201
        if caller.get_active():
            cxproduct.save_setting('OfficeSetup', 'AutoUpdate', '1')
        else:
            cxproduct.save_setting('OfficeSetup', 'AutoUpdate', '0')

    def usageCheckbox_toggled_cb(self, caller):
        # pylint: disable=R0201
        if caller.get_active():
            cxproduct.save_setting('CrossOver', 'ReportWineUsage', '1')
        else:
            cxproduct.save_setting('CrossOver', 'ReportWineUsage', '0')

    def untestedCheckbox_toggled_cb(self, caller):
        # pylint: disable=R0201
        if caller.get_active():
            cxproduct.save_setting('OfficeSetup', 'ShowUntestedApps', '1')
        else:
            cxproduct.save_setting('OfficeSetup', 'ShowUntestedApps', '0')

    def on_applyCxfixesCheckbox_toggled(self, caller):
        # pylint: disable=R0201
        if caller.get_active():
            cxproduct.save_setting('OfficeSetup', 'ApplyCxfixes', '1')
        else:
            cxproduct.save_setting('OfficeSetup', 'ApplyCxfixes', '0')

    def quit_requested(self, *_args):
        self.xml.get_object("PrefsDialog").destroy()
        self.emit_event(DIALOG_CLOSED)
        cxguitools.toplevel_quit()

    def present(self):
        self.xml.get_object("PrefsDialog").present()


#
# Global dialog management
#

DIALOG = None

def _dialog_closed(_dialog, _event, _data):
    # pylint: disable=W0603
    global DIALOG
    DIALOG = None

def open_or_show():
    # pylint: disable=W0603
    global DIALOG
    if DIALOG is None:
        DIALOG = PreferenceDialogController()
        DIALOG.add_observer(DIALOG_CLOSED, _dialog_closed)
    else:
        DIALOG.present()
    return DIALOG