Catching keyboard meessages/input to a GTK(sharp) textview widget

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

 



HiI am trying to create a custom widget based on gtk textview (the gtk#bindings for C#). The purpose is to enable writing my local language Urdu intextview instead of English. I am unable to find how can I hack the keyboardinput before it appears on screen (so I change the key values like a to اand b to ب etc). I am a beginner so plz suggest me it this regards.Obviously I want to do it in c# (mono has Gdk.Keyboard, Gdk.Keymap and someother such classes, but I am unable to figure out a way to get the pressedkey's value and change it before it is passed to textview buffer). At lasthere is the example my friend done in system.windows.forms textbox.__________________________________________________________________using System;using System.Drawing;using System.Drawing.Design;using System.Collections;using System.ComponentModel;using System.Windows.Forms;using System.Windows.Forms.Design;

namespace UrduCtrl{	enum KeyboardStates	{		kbNormal=0,		kbShift=1,		kbCtrl=2,		kbAltGr=3	}
	public class UrduTextPropertyEditor: UITypeEditor	{//		public override object EditValue( //			System.ComponentModel.ITypeDescriptorContext context, //			System.IServiceProvider provider, object value) //		{ //			IWindowsFormsEditorService frmsvr =(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));//			if(frmsvr == null)//				return null;////			UrduTextPropertyEditorDlg dlg= new UrduTextPropertyEditorDlg();//			dlg.EditedText = (string) value;////			//dlg.ShowDialog();//			frmsvr.ShowDialog(dlg);////			return (string) dlg.EditedText;//		}
//		public override object EditValue(ITypeDescriptorContext context,IServiceProvider provider, object value)//		{//			if (context!=null && provider!=null)//			{//				IWindowsFormsEditorService edSrv=(IWindowsFormsEditorService)provider.GetService(typeof(IWindowsFormsEditorService));//				if (edSrv!=null)//				{//					UrduTextPropertyEditorDlg dialog= new UrduTextPropertyEditorDlg();//					if (value is String)//						dialog.EditedText= (string)value;	//					if (edSrv.ShowDialog(dialog)==System.Windows.Forms.DialogResult.OK)//						value= dialog.EditedText;//					dialog.Dispose();//					dialog= null;//				}//			}//			return value;//		}
		public override System.Drawing.Design.UITypeEditorEditStyle 			GetEditStyle(System.ComponentModel.ITypeDescriptorContext context) 		{ 			// We will use a window for property editing. 			return UITypeEditorEditStyle.Modal; 		}
		public override bool GetPaintValueSupported( 			System.ComponentModel.ITypeDescriptorContext context) 		{ 			// No special thumbnail will be shown for the grid. 			return false; 		} 	}
	/// <summary>	/// Summary description for Class1.	/// </summary>
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand,Name="FullTrust")]	public class UrduTextBox: System.Windows.Forms.TextBox	{		private int WM_CHAR = 0x102;		private int WM_KEYDOWN = 0x100;		private int WM_KEYUP = 0x101;		private bool m_bIsUrdu;		private KeyboardStates kbState;		private Hashtable UrduPhonetic;		private char  charSingleQuote= Convert.ToChar(39);
		public UrduTextBox()		{
			this.Font = new System.Drawing.Font("Urdu Naskh Asiatype", 12F,System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point,((System.Byte)(178)));			this.RightToLeft = System.Windows.Forms.RightToLeft.Yes;			//this.TextAlign = System.Windows.Forms.HorizontalAlignment.Right;			this.m_bIsUrdu= true;			kbState= KeyboardStates.kbNormal;
						UrduPhonetic= new Hashtable();			UrduPhonetic['a']=new Key(0x0627, 0x0622, 0x0623);			UrduPhonetic['b']=new Key(0x0628, 0x0628);			UrduPhonetic['c']=new Key(0x0686, 0x062B);			UrduPhonetic['d']=new Key(0x062F, 0x0688);			UrduPhonetic['e']=new Key(0x0639, 0x0651);			UrduPhonetic['f']=new Key(0x0641, 0x64D);			UrduPhonetic['g']=new Key(0x06AF, 0x063A);			UrduPhonetic['h']=new Key(0x06BE, 0x062D);			UrduPhonetic['i']=new Key(0x06CC, 0x0670);			UrduPhonetic['j']=new Key(0x062C, 0x0636);			UrduPhonetic['k']=new Key(0x06A9, 0x062E);			UrduPhonetic['l']=new Key(0x0644, 0x0628);			UrduPhonetic['m']=new Key(0x0645, 0x64B);			UrduPhonetic['n']=new Key(0x0646, 0x06BA);			UrduPhonetic['o']=new Key(0x06C1, 0x06C3);			UrduPhonetic['p']=new Key(0x067E, 0x064F);			UrduPhonetic['q']=new Key(0x0642);			UrduPhonetic['r']=new Key(0x0631, 0x0691);			UrduPhonetic['s']=new Key(0x0633 , 0x0635);			UrduPhonetic['t']=new Key(0x062A , 0x0679);			UrduPhonetic['u']=new Key(0x0626 , 0x0621);			UrduPhonetic['v']=new Key(0x0637, 0x0638);			UrduPhonetic['w']=new Key(0x0648, 0x0624);			UrduPhonetic['x']=new Key(0x0634, 0x0698);			UrduPhonetic['y']=new Key(0x06D2, 0x06D2);			UrduPhonetic['z']=new Key(0x0632, 0x0630);			UrduPhonetic['0']=new Key(0x0030, Convert.ToInt16(')'));			UrduPhonetic['1']=new Key(0x0031, Convert.ToInt16('!'));			UrduPhonetic['2']=new Key(0x0032, Convert.ToInt16('@'));			UrduPhonetic['3']=new Key(0x0033, Convert.ToInt16('#'));			UrduPhonetic['4']=new Key(0x0034, Convert.ToInt16('$'));			UrduPhonetic['5']=new Key(0x0035, Convert.ToInt16('%'));			UrduPhonetic['6']=new Key(0x0036, Convert.ToInt16('^'));			UrduPhonetic['7']=new Key(0x0037, Convert.ToInt16('&'));			UrduPhonetic['8']=new Key(0x0038, Convert.ToInt16('*'));			UrduPhonetic['9']=new Key(0x0039, Convert.ToInt16('('));			UrduPhonetic['=']=new Key(0x03D, 0x02B);			UrduPhonetic['-']=new Key(0x002D, 0x0640);			UrduPhonetic[',']=new Key(0x060C, 0x064E);			UrduPhonetic['.']=new Key(0x06D4, 0x0650);			UrduPhonetic['/']=new Key(0x002F, 0x061F);			UrduPhonetic['\\']=new Key(0x0674);			UrduPhonetic[';']=new Key(0x061B, 58);			UrduPhonetic['[']=new Key(0x64C);			UrduPhonetic[']']=new Key(0x0652);			UrduPhonetic[charSingleQuote]=new Key(0x2018, 0x201C);			UrduPhonetic['~']=new Key(0x2019, 0x201D);			UrduPhonetic[' ']=new Key(32, 0x200C);			UrduPhonetic['<']=new Key(0x064E);

		}
		protected override void WndProc(ref Message m)		{						if (m.Msg == WM_CHAR)			{								if(kbState== KeyboardStates.kbCtrl)				{					if(m.WParam == (IntPtr) 32)					{						this.m_bIsUrdu= !(this.m_bIsUrdu);						m.WParam= (IntPtr) 0;						base.WndProc(ref m);						return;					}				}
				if(m_bIsUrdu)				{					//MessageBox.Show("Test");					char strChar= (char) m.WParam;					strChar= Char.ToLower(strChar);
					if (kbState== KeyboardStates.kbShift)					{						if (UrduPhonetic.ContainsKey(strChar))						{							m.WParam= (IntPtr) ((UrduCtrl.Key) UrduPhonetic[strChar]).shift;						}					}					else if (kbState== KeyboardStates.kbAltGr)					{						if (UrduPhonetic.ContainsKey(strChar))						{							m.WParam= (IntPtr) ((UrduCtrl.Key) UrduPhonetic[strChar]).altgr;						}					}					else if (kbState== KeyboardStates.kbNormal)					{						if (UrduPhonetic.ContainsKey(strChar))						{							m.WParam= (IntPtr) ((UrduCtrl.Key) UrduPhonetic[strChar]).normal;						}					}				}						}			else if (m.Msg == WM_KEYDOWN)			{								if((Control.ModifierKeys & Keys.Shift) == Keys.Shift )				{					this.kbState= KeyboardStates.kbShift;				}				else if(((Control.ModifierKeys & Keys.Control) == Keys.Control) &&(((Control.ModifierKeys & Keys.Alt) == Keys.Alt)))				{					this.kbState= KeyboardStates.kbAltGr;					char strChar= (char) m.WParam;					strChar= Char.ToLower(strChar);				}				else if((Control.ModifierKeys & Keys.Control) == Keys.Control )				{					this.kbState= KeyboardStates.kbCtrl;				}			}			else if (m.Msg == WM_KEYUP)			{						if(kbState == KeyboardStates.kbAltGr)				{					if(!(((Control.ModifierKeys & Keys.Control) == Keys.Control) &&(((Control.ModifierKeys & Keys.Alt) == Keys.Alt))))					{						this.kbState= KeyboardStates.kbNormal;					}				}				else if(kbState == KeyboardStates.kbCtrl)				{					if((Control.ModifierKeys & Keys.Control) != Keys.Control )					{						this.kbState= KeyboardStates.kbNormal;					}				}				else if(kbState == KeyboardStates.kbShift)				{					if((Control.ModifierKeys & Keys.Shift) != Keys.Shift)					{						this.kbState= KeyboardStates.kbNormal;					}				}			}			base.WndProc(ref m);		}
				[Category("Appearance"), 		Description("Text property for Urdu edit control."), 		Editor(typeof(UrduTextPropertyEditor), typeof(UITypeEditor))]		public override string Text		{			get			{				return(base.Text);			}			set			{				base.Text = value;				this.Invalidate();			}		}	}}________________________________________________________
Regards-- View this message in context: http://www.nabble.com/Catching-keyboard-meessages-input-to-a-GTK%28sharp%29-textview-widget-tp18436239p18436239.htmlSent from the Gtk+ - General mailing list archive at Nabble.com.
_______________________________________________gtk-list mailing listgtk-list@xxxxxxxxxxxxx://mail.gnome.org/mailman/listinfo/gtk-list

[Index of Archives]     [Touch Screen Library]     [GIMP Users]     [Gnome]     [KDE]     [Yosemite News]     [Steve's Art]

  Powered by Linux