[gnome-shell] modalDialog: give more control over the layout



commit c10e4c3117d9d855f8a66bc4447fff86e82c38ec
Author: StÃphane DÃmurget <stephane demurget free fr>
Date:   Thu Nov 1 17:07:48 2012 +0100

    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 files changed, 44 insertions(+), 34 deletions(-)
---
diff --git a/js/ui/modalDialog.js b/js/ui/modalDialog.js
index 04b0076..2ee2579 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) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]