From c10e4c3117d9d855f8a66bc4447fff86e82c38ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20D=C3=A9murget?= Date: Thu, 1 Nov 2012 17:07:48 +0100 Subject: [PATCH] modalDialog: give more control over the layout Make the button layout public for callers to be able to have more control over like adding custom widgets. Also, the clearButtons and addButton methods are added as convenience for the most frequent usage. https://bugzilla.gnome.org/show_bug.cgi?id=687113 --- js/ui/modalDialog.js | 78 +++++++++++++++++++++++++------------------- 1 file changed, 44 insertions(+), 34 deletions(-) diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js index 04b007672..2ee2579e5 100644 --- a/js/ui/modalDialog.js +++ b/js/ui/modalDialog.js @@ -95,10 +95,10 @@ const ModalDialog = new Lang.Class({ x_align: St.Align.MIDDLE, y_align: St.Align.START }); - this._buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box', + this.buttonLayout = new St.BoxLayout({ style_class: 'modal-dialog-button-box', visible: false, vertical: false }); - this.dialogLayout.add(this._buttonLayout, + this.dialogLayout.add(this.buttonLayout, { expand: true, x_align: St.Align.MIDDLE, y_align: St.Align.END }); @@ -117,31 +117,17 @@ const ModalDialog = new Lang.Class({ this._actionKeys[key] = action; }, - setButtons: function(buttons) { - this._buttonLayout.destroy_all_children(); + clearButtons: function() { + this.buttonLayout.destroy_all_children(); this._actionKeys = {}; + }, - this._buttonLayout.visible = (buttons.length > 0); + setButtons: function(buttons) { + this.clearButtons(); + this.buttonLayout.visible = (buttons.length > 0); for (let i = 0; i < buttons.length; i++) { let buttonInfo = buttons[i]; - let label = buttonInfo['label']; - let action = buttonInfo['action']; - let key = buttonInfo['key']; - let isDefault = buttonInfo['default']; - - if (isDefault && !key) { - this._actionKeys[Clutter.KEY_KP_Enter] = action; - this._actionKeys[Clutter.KEY_ISO_Enter] = action; - key = Clutter.KEY_Return; - } - - buttonInfo.button = new St.Button({ style_class: 'modal-dialog-button', - reactive: true, - can_focus: true, - label: label }); - if (isDefault) - buttonInfo.button.add_style_pseudo_class('default'); let x_alignment; if (buttons.length == 1) @@ -153,22 +139,46 @@ const ModalDialog = new Lang.Class({ else x_alignment = St.Align.MIDDLE; - if (!this._initialKeyFocusDestroyId) - this._initialKeyFocus = buttonInfo.button; - this._buttonLayout.add(buttonInfo.button, - { expand: true, - x_fill: false, - y_fill: false, - x_align: x_alignment, - y_align: St.Align.MIDDLE }); + let button = this.addButton(buttonInfo, { expand: true, + x_fill: false, + y_fill: false, + x_align: x_alignment, + y_align: St.Align.MIDDLE }); + buttonInfo.button = button; + } + }, - buttonInfo.button.connect('clicked', action); + addButton: function(buttonInfo, layoutInfo) { + let label = buttonInfo['label']; + let action = buttonInfo['action']; + let key = buttonInfo['key']; + let isDefault = buttonInfo['default']; - if (key) - this._actionKeys[key] = action; + if (isDefault && !key) { + this._actionKeys[Clutter.KEY_KP_Enter] = action; + this._actionKeys[Clutter.KEY_ISO_Enter] = action; + key = Clutter.KEY_Return; } - this.emit('buttons-set'); + let button = new St.Button({ style_class: 'modal-dialog-button', + reactive: true, + can_focus: true, + label: label }); + + button.connect('clicked', action); + + if (isDefault) + button.add_style_pseudo_class('default'); + + if (!this._initialKeyFocusDestroyId) + this._initialKeyFocus = button; + + if (key) + this._actionKeys[key] = action; + + this.buttonLayout.add(button, layoutInfo); + + return button; }, _onKeyReleaseEvent: function(object, event) {