]>
Commit | Line | Data |
---|---|---|
52721af8 DC |
1 | /* Button features: |
2 | * - observe selection changes to enable/disable the button using enableFn() | |
3 | * - pop up confirmation dialog using confirmMsg() | |
4 | * | |
5 | * does this for the button and every menu item | |
6 | */ | |
7 | Ext.define('PVE.button.Split', { | |
8 | extend: 'Ext.button.Split', | |
9 | alias: 'widget.pveSplitButton', | |
10 | ||
11 | // the selection model to observe | |
12 | selModel: undefined, | |
13 | ||
14 | // if 'false' handler will not be called (button disabled) | |
15 | enableFn: function(record) { }, | |
16 | ||
17 | // function(record) or text | |
18 | confirmMsg: false, | |
19 | ||
20 | // take special care in confirm box (select no as default). | |
21 | dangerous: false, | |
22 | ||
23 | handlerWrapper: function(button, event) { | |
24 | var me = this; | |
25 | var rec, msg; | |
26 | if (me.selModel) { | |
27 | rec = me.selModel.getSelection()[0]; | |
28 | if (!rec || (me.enableFn(rec) === false)) { | |
29 | return; | |
30 | } | |
31 | } | |
32 | ||
33 | if (me.confirmMsg) { | |
34 | msg = me.confirmMsg; | |
ec0bd652 | 35 | // confirMsg can be boolean or function |
52721af8 DC |
36 | if (Ext.isFunction(me.confirmMsg)) { |
37 | msg = me.confirmMsg(rec); | |
38 | } | |
39 | Ext.MessageBox.defaultButton = me.dangerous ? 2 : 1; | |
40 | Ext.Msg.show({ | |
41 | title: gettext('Confirm'), | |
42 | icon: me.dangerous ? Ext.Msg.WARNING : Ext.Msg.QUESTION, | |
43 | msg: msg, | |
44 | buttons: Ext.Msg.YESNO, | |
45 | callback: function(btn) { | |
46 | if (btn !== 'yes') { | |
47 | return; | |
48 | } | |
49 | me.realHandler(button, event, rec); | |
f6710aac | 50 | }, |
52721af8 DC |
51 | }); |
52 | } else { | |
53 | me.realHandler(button, event, rec); | |
54 | } | |
55 | }, | |
56 | ||
57 | initComponent: function() { | |
52721af8 DC |
58 | var me = this; |
59 | ||
60 | if (me.handler) { | |
61 | me.realHandler = me.handler; | |
62 | me.handler = me.handlerWrapper; | |
63 | } | |
64 | ||
65 | if (me.menu && me.menu.items) { | |
66 | me.menu.items.forEach(function(item) { | |
67 | if (item.handler) { | |
68 | item.realHandler = item.handler; | |
69 | item.handler = me.handlerWrapper; | |
70 | } | |
71 | ||
72 | if (item.selModel) { | |
73 | me.mon(item.selModel, "selectionchange", function() { | |
74 | var rec = item.selModel.getSelection()[0]; | |
8058410f | 75 | if (!rec || (item.enableFn(rec) === false)) { |
52721af8 DC |
76 | item.setDisabled(true); |
77 | } else { | |
78 | item.setDisabled(false); | |
79 | } | |
80 | }); | |
81 | } | |
82 | }); | |
83 | } | |
84 | ||
85 | me.callParent(); | |
86 | ||
87 | if (me.selModel) { | |
52721af8 DC |
88 | me.mon(me.selModel, "selectionchange", function() { |
89 | var rec = me.selModel.getSelection()[0]; | |
90 | if (!rec || (me.enableFn(rec) === false)) { | |
91 | me.setDisabled(true); | |
92 | } else { | |
93 | me.setDisabled(false); | |
94 | } | |
95 | }); | |
96 | } | |
f6710aac | 97 | }, |
52721af8 | 98 | }); |