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