1 jls.loader.provide('jls.win32.TabElement'); 2 3 jls.loader.require('jls.win32.WindowElement'); 4 jls.loader.require('jls.win32.TabControl'); 5 jls.loader.require('jls.gui.CardLayout'); 6 7 jls.win32.TabElement = jls.lang.Class.create(jls.win32.WindowElement, 8 { 9 initialize : function($super, parameters, parent) { 10 this._selectedIndex = 0; 11 this._nmhdr = new jls.lang.Struct([ 12 {name: 'hwndFrom', type: 'Pointer'}, 13 {name: 'idFrom', type: 'UnsignedInt'}, 14 {name: 'code', type: 'UnsignedInt'} 15 ]); 16 $super(parameters, parent); 17 this.observe('change', this.onChange.bind(this)); 18 }, 19 onCreate : function() { 20 this._window = new jls.win32.TabControl('', this.getWindowStyle(), 21 this.getX(), this.getY(), this.getW(), this.getH(), 22 this.getParentWindow(true), this.getWindowId(true), this.getWindowExStyle()); 23 }, 24 createDefaultLayout : function() { 25 return new jls.gui.CardLayout(this); 26 }, 27 /*getWindowStyle : function($super) { 28 return jls.win32.Window.WS_CHILD | jls.win32.Window.WS_VISIBLE;// | jls.win32.Button.BS_BITMAP | jls.win32.Button.BS_ICON; 29 },*/ 30 getClientSize : function() { 31 // TODO Fix this 32 return [this.getW() - 6, this.getH() - 31]; 33 }, 34 getClientOffset : function() { 35 // TODO Fix this 36 return [3, 28]; 37 }, 38 onChange : function(event) { 39 //jls.logger.warn('onChange(' + event.index + ')'); 40 this._layout.show(event.index); 41 }, 42 onWindowMessage: function($super, message, wParam, lParam) { 43 //jls.logger.warn('onWindowMessage(' + jls.win32.Window.getMessageName(message) + ', ' + wParam + ', ' + lParam + ')'); 44 switch(message) { 45 case jls.win32.Window.WM_CTLNOTIFY: 46 //jls.logger.warn('onCtlNotify(' + jls.win32.Window.getMessageName(lParam, jls.win32.TabControl, 'TCN_') + ')'); 47 if (wParam != this._windowId) { 48 break; 49 } 50 switch(lParam) { 51 case jls.win32.TabControl.TCN_SELCHANGE : 52 // lParam: Pointer to an NMHDR structure that contains additional information about this notification. 53 //jls.logger.warn('lParam: ' + lParam.toString(16)); 54 /*var barray = this._nmhdr.buffer().byteArray(); 55 barray.setPointer(lParam); 56 jls.logger.warn('pointer: ' + barray.pointer().toString(16)); 57 var idFrom = this._nmhdr.get('idFrom'); 58 var code = this._nmhdr.get('code'); 59 jls.logger.warn('code: ' + code + ', idFrom: ' + idFrom);*/ 60 61 var event = new jls.gui.Event('change', this); 62 var sel = this._window.getSelectedIndex(); 63 //jls.logger.warn('sel: ' + sel); 64 event.index = sel; 65 this.dispatch(event); 66 break; 67 } 68 69 return; 70 } 71 $super(message, wParam, lParam); 72 }, 73 addChild : function($super, child) { 74 var label = child.getAttribute('title'); 75 var index = this._window.insertItem(label, this.getChildCount()); 76 //jls.logger.warn('index: ' + index); 77 return $super(child); 78 } 79 }); 80 81