Ignore:
Timestamp:
05/10/12 18:17:18 (13 years ago)
Author:
István Váradi <ivaradi@…>
Branch:
default
Phase:
public
Message:

The configuration loading/saving and the basic GUI for the sound preferences work

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/mlx/gui/prefs.py

    r164 r166  
    77from mlx.i18n import xstr
    88import mlx.const as const
     9import mlx.config as config
    910
    1011import urlparse
     12
     13#------------------------------------------------------------------------------
     14
     15class Hotkey(gtk.HBox):
     16    """A widget to handle a hotkey."""
     17    def __init__(self, labelText, tooltips):
     18        """Construct the hotkey widget.
     19
     20        labelText is the text for the label before the hotkey.
     21
     22        The tooltips parameter is an array of the tooltips for:
     23        - the hotkey combo box,
     24        - the control check box, and
     25        - the shift check box."""
     26        super(Hotkey, self).__init__()
     27       
     28        label = gtk.Label(labelText)
     29        label.set_use_underline(True)
     30        labelAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
     31                                       xscale = 0.0, yscale = 0.0)
     32        labelAlignment.add(label)
     33        self.pack_start(labelAlignment, False, False, 8)
     34
     35        self._ctrl = gtk.CheckButton("Ctrl")
     36        self._ctrl.set_tooltip_text(tooltips[1])
     37        self.pack_start(self._ctrl, False, False, 4)
     38           
     39        self._shift = gtk.CheckButton("Shift")
     40        self._shift.set_tooltip_text(tooltips[2])
     41        self.pack_start(self._shift, False, False, 4)
     42
     43        self._hotkeyModel = gtk.ListStore(str)
     44        for keyCode in range(ord("0"), ord("9")) + range(ord("A"), ord("Z")):
     45            self._hotkeyModel.append([chr(keyCode)])
     46
     47        self._hotkey = gtk.ComboBox(model = self._hotkeyModel)
     48        cell = gtk.CellRendererText()
     49        self._hotkey.pack_start(cell, True)
     50        self._hotkey.add_attribute(cell, 'text', 0)
     51        self._hotkey.set_tooltip_text(tooltips[0])
     52        self.pack_start(self._hotkey, False, False, 4)
     53
     54        self._setting = False
     55
     56    def set(self, hotkey):
     57        """Set the hotkey widget from the given hotkey."""
     58        self._setting = True
     59
     60        self._ctrl.set_active(hotkey.ctrl)
     61        self._shift.set_active(hotkey.shift)
     62
     63        hotkeyModel = self._hotkeyModel
     64        iter = hotkeyModel.get_iter_first()
     65        while iter is not None and \
     66              hotkeyModel.get_value(iter, 0)!=hotkey.key:
     67            iter = hotkeyModel.iter_next(iter)
     68
     69        if iter is None:
     70            iter = hotkeyModel.get_iter_first()
     71
     72        self._hotkey.set_active_iter(iter)           
     73       
     74        self._setting = False
     75
     76    def get(self):
     77        """Get a hotkey corresponding to the settings in the widghet."""
     78
     79        key = self._hotkeyModel.get_value(self._hotkey.get_active_iter(), 0)
     80
     81        return config.Hotkey(ctrl = self._ctrl.get_active(),
     82                             shift = self._shift.get_active(),
     83                             key = key)
    1184
    1285#------------------------------------------------------------------------------
     
    2598       
    2699        self._gui = gui
     100        self._settingFromConfig = False
    27101
    28102        contentArea = self.get_content_area()
     
    42116        label.set_tooltip_text(xstr("prefs_tab_message_tooltip"))
    43117        notebook.append_page(messages, label)
     118
     119        sounds = self._buildSounds()
     120        label = gtk.Label(xstr("prefs_tab_sounds"))
     121        label.set_use_underline(True)
     122        label.set_tooltip_text(xstr("prefs_tab_sounds_tooltip"))
     123        notebook.append_page(sounds, label)
    44124
    45125        advanced = self._buildAdvanced()
     
    66146    def _fromConfig(self, config):
    67147        """Setup the dialog from the given configuration."""
     148        self._settingFromConfig = True
     149
    68150        self._setLanguage(config.language)
    69151        self._hideMinimizedWindow.set_active(config.hideMinimizedWindow)
     
    86168                              level == const.MESSAGELEVEL_BOTH)
    87169
    88         self._togglingAutoUpdate = True
     170        self._enableSounds.set_active(config.enableSounds)
     171        self._pilotControlsSounds.set_active(config.pilotControlsSounds)
     172        self._pilotHotkey.set(config.pilotHotkey)
     173        #self._approachCallOuts.set_active(config.approachCallOuts)
     174        self._speedbrakeAtTD.set_active(config.speedbrakeAtTD)
     175
     176        self._enableChecklists.set_active(config.enableChecklists)       
     177        self._checklistHotkey.set(config.checklistHotkey)
     178
    89179        self._autoUpdate.set_active(config.autoUpdate)
    90         self._togglingAutoUpdate = False
    91180        if not config.autoUpdate:
    92181            self._warnedAutoUpdate = True
    93182
    94183        self._updateURL.set_text(config.updateURL)
     184
     185        self._settingFromConfig = False
    95186
    96187    def _toConfig(self, config):
     
    115206                level = const.MESSAGELEVEL_NONE
    116207            config.setMessageTypeLevel(messageType, level)
     208
     209        config.enableSounds = self._enableSounds.get_active()
     210        config.pilotControlsSounds = self._pilotControlsSounds.get_active()
     211        config.pilotHotkey = self._pilotHotkey.get()
     212        #config.approachCallOuts = self._approachCallOuts.get_active()
     213        config.speedbrakeAtTD = self._speedbrakeAtTD.get_active()
     214
     215        config.enableChecklists = self._enableChecklists.get_active()
     216        config.checklistHotkey = self._checklistHotkey.get()
    117217
    118218        config.autoUpdate = self._autoUpdate.get_active()
     
    330430
    331431        return True
    332            
     432
     433    def _buildSounds(self):
     434        """Build the page for the sounds."""
     435        mainAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
     436                                      xscale = 1.0, yscale = 1.0)
     437        mainAlignment.set_padding(padding_top = 8, padding_bottom = 8,
     438                                  padding_left = 4, padding_right = 4)
     439
     440        mainBox = gtk.VBox()
     441        mainAlignment.add(mainBox)
     442
     443        backgroundFrame = gtk.Frame(label = xstr("prefs_sounds_frame_bg"))
     444        mainBox.pack_start(backgroundFrame, False, False, 4)
     445
     446        backgroundAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
     447                                            xscale = 1.0, yscale = 0.0)
     448        backgroundAlignment.set_padding(padding_top = 4, padding_bottom = 4,
     449                                        padding_left = 4, padding_right = 4)
     450        backgroundFrame.add(backgroundAlignment)
     451
     452        backgroundBox = gtk.VBox()
     453        backgroundAlignment.add(backgroundBox)
     454
     455        self._enableSounds = gtk.CheckButton(xstr("prefs_sounds_enable"))
     456        self._enableSounds.set_use_underline(True)
     457        self._enableSounds.set_tooltip_text(xstr("prefs_sounds_enable_tooltip"))
     458        self._enableSounds.connect("toggled", self._enableSoundsToggled)
     459        alignment = gtk.Alignment(xalign = 0.0, yalign = 0.5,
     460                                  xscale = 1.0, yscale = 0.0)
     461        alignment.add(self._enableSounds)
     462        backgroundBox.pack_start(alignment, False, False, 4)
     463
     464        self._pilotControlsSounds = gtk.CheckButton(xstr("prefs_sounds_pilotControls"))
     465        self._pilotControlsSounds.set_use_underline(True)
     466        self._pilotControlsSounds.set_tooltip_text(xstr("prefs_sounds_pilotControls_tooltip"))
     467        backgroundBox.pack_start(self._pilotControlsSounds, False, False, 4)
     468
     469        self._pilotHotkey = Hotkey(xstr("prefs_sounds_pilotHotkey"),
     470                                   [xstr("prefs_sounds_pilotHotkey_tooltip"),
     471                                    xstr("prefs_sounds_pilotHotkeyCtrl_tooltip"),
     472                                    xstr("prefs_sounds_pilotHotkeyShift_tooltip")])
     473       
     474        backgroundBox.pack_start(self._pilotHotkey, False, False, 4)
     475
     476        # self._approachCallOuts = gtk.CheckButton(xstr("prefs_sounds_approachCallOuts"))
     477        # self._approachCallOuts.set_use_underline(True)
     478        # self._approachCallOuts.set_tooltip_text(xstr("prefs_sounds_approachCallOuts_tooltip"))
     479        # backgroundBox.pack_start(self._approachCallOuts, False, False, 4)
     480       
     481        self._speedbrakeAtTD = gtk.CheckButton(xstr("prefs_sounds_speedbrakeAtTD"))
     482        self._speedbrakeAtTD.set_use_underline(True)
     483        self._speedbrakeAtTD.set_tooltip_text(xstr("prefs_sounds_speedbrakeAtTD_tooltip"))
     484        backgroundBox.pack_start(self._speedbrakeAtTD, False, False, 4)
     485
     486        checklistFrame = gtk.Frame(label = xstr("prefs_sounds_frame_checklists"))
     487        mainBox.pack_start(checklistFrame, False, False, 4)
     488
     489        checklistAlignment = gtk.Alignment(xalign = 0.0, yalign = 0.0,
     490                                           xscale = 1.0, yscale = 0.0)
     491        checklistAlignment.set_padding(padding_top = 4, padding_bottom = 4,
     492                                       padding_left = 4, padding_right = 4)
     493        checklistFrame.add(checklistAlignment)
     494
     495        checklistBox = gtk.VBox()
     496        checklistAlignment.add(checklistBox)
     497       
     498        self._enableChecklists = gtk.CheckButton(xstr("prefs_sounds_enableChecklists"))
     499        self._enableChecklists.set_use_underline(True)
     500        self._enableChecklists.set_tooltip_text(xstr("prefs_sounds_enableChecklists_tooltip"))
     501        self._enableChecklists.connect("toggled", self._enableChecklistsToggled)
     502        checklistBox.pack_start(self._enableChecklists, False, False, 4)
     503
     504        self._checklistHotkey = Hotkey(xstr("prefs_sounds_checklistHotkey"),
     505                                       [xstr("prefs_sounds_checklistHotkey_tooltip"),
     506                                        xstr("prefs_sounds_checklistHotkeyCtrl_tooltip"),
     507                                        xstr("prefs_sounds_checklistHotkeyShift_tooltip")])
     508
     509        checklistBox.pack_start(self._checklistHotkey, False, False, 4)
     510
     511        self._enableSoundsToggled(self._enableSounds)
     512        self._enableChecklistsToggled(self._enableChecklists)
     513
     514        return mainAlignment
     515
     516    def _enableSoundsToggled(self, button):
     517        """Called when the enable sounds button is toggled."""
     518        active = button.get_active()
     519        self._pilotControlsSounds.set_sensitive(active)
     520        self._pilotHotkey.set_sensitive(active)
     521        #self._approachCallOuts.set_sensitive(active)
     522        self._speedbrakeAtTD.set_sensitive(active)
     523
     524    def _enableChecklistsToggled(self, button):
     525        """Called when the enable checklists button is toggled."""
     526        active = button.get_active()
     527        self._checklistHotkey.set_sensitive(active)
     528
    333529    def _buildAdvanced(self):
    334530        """Build the page for the advanced settings."""
     
    348544        self._autoUpdate.set_tooltip_text(xstr("prefs_update_auto_tooltip"))
    349545        self._warnedAutoUpdate = False
    350         self._togglingAutoUpdate = False
    351546       
    352547        updateURLBox = gtk.HBox()
     
    379574    def _autoUpdateToggled(self, button):
    380575        """Called when the auto update check button is toggled."""
    381         if not self._togglingAutoUpdate and not self._warnedAutoUpdate and \
     576        if not self._settingFromConfig and not self._warnedAutoUpdate and \
    382577           not self._autoUpdate.get_active():
    383578            dialog = gtk.MessageDialog(parent = self,
Note: See TracChangeset for help on using the changeset viewer.