protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.FileSelector); Acp.getInstance(this).request(new AcpOptions.Builder() .SetPermissions(Permission.WriteExternalStorage, Permission.ReadExternalStorage) .Build(), new AnonymousAcpListener(ps => Toast.MakeText(this, $"权限拒绝", ToastLength.Short).Show(), InitListView)); var sureBtn = FindViewById <TextView>(Resource.Id.FolderSelector_btSure); sureBtn.Click += (s, e) => SureSelect(); var cancelBtn = FindViewById <TextView>(Resource.Id.FolderSelector_btCancel); cancelBtn.Click += (s, e) => CancelSelect(); var backBtn = FindViewById(Resource.Id.FolderSelector_Back); backBtn.Click += (s, e) => AdapterBackUp(); OnCancelRequested += HandleCancelSelect; InitListView(); }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.FileExpleror); OnCreateStart?.Invoke(this); Acp.getInstance(this).request(new AcpOptions.Builder() .SetPermissions(Permission.WriteExternalStorage, Permission.ReadExternalStorage) .Build(), new AnonymousAcpListener(ps => Toast.MakeText(this, $"权限拒绝", ToastLength.Short).Show(), InitListView)); var backUpBtn = FindViewById(Resource.Id.FileExpleror_BackUp); backUpBtn.SetOnClickListener(new AnonymousOnClickListener(BackUpClick)); var moreBtn = FindViewById(Resource.Id.FileExpleror_Menu); moreBtn.SetOnClickListener(new AnonymousOnClickListener(MoreClick)); var closeBtn = FindViewById(Resource.Id.FileExpleror_Close); closeBtn.SetOnClickListener(new AnonymousOnClickListener(CloseClick)); InitListView(); }
public Acp.XHIE_tdfnEnumSpoCallback GetEnumNonGroupedSpoCallback(TreeNode parentNode) { return(spo => { string spoName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_INSTANCE) ?? $"{spo->type} [{(int)spo:X8}]"; if (objectNodeMap.TryGetValue(spoName, out ObjectNode objNode)) { if (objNode.ParentNode != parentNode) { objNode.Node.Remove(); parentNode.Nodes.Add(objNode.Node); objNode.ParentNode = parentNode; } // update reference just in case objNode.SuperObject = spo; objNode.Node.Tag = (Pointer <SuperObject>)spo; objNode.Invalidated = false; } else { TreeNode node = NewTreeNode(spoName, IconId.Spo, spo); parentNode.Nodes.Add(node); objectNodeMap[spoName] = new ObjectNode(spo, node, parentNode); } return true; }); }
public Acp.XHIE_tdfnEnumSpoCallback GetEnumGroupedSpoCallback(TreeNode parentNode) { return(spo => { string familyName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_FAMILY) ?? $"{spo->type} [{(int)spo:X8}]"; string modelName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_MODEL) ?? $"{spo->type} [{(int)spo:X8}]"; string spoName = Acp.XHIE_fn_szGetObjectName(spo, Acp.XHIE_OI_TYPE.TOI_INSTANCE) ?? $"{spo->type} [{(int)spo:X8}]"; ObjectNode objNode = null; if (objectNodeMap.TryGetValue(spoName, out objNode)) { objNode.Invalidated = false; // update reference just in case objNode.SuperObject = spo; objNode.Node.Tag = (Pointer <SuperObject>)spo; if (objNode.ParentNode != parentNode) { RemoveAndCleanUpGroups(objNode.Node); objNode.ParentNode = parentNode; } else { // parent the same, can safely skip readding groups return true; } } else { TreeNode node = NewTreeNode(spoName, IconId.Instance, spo); objNode = new ObjectNode(spo, node, parentNode); objectNodeMap[spoName] = objNode; } TreeNode familyNode = parentNode.Nodes[familyName]; if (familyNode == null) { familyNode = NewTreeNode(familyName, IconId.Family); parentNode.Nodes.Add(familyNode); } TreeNode modelNode = familyNode.Nodes[modelName]; if (modelNode == null) { modelNode = NewTreeNode(modelName, IconId.Model); familyNode.Nodes.Add(modelNode); } modelNode.Nodes.Add(objNode.Node); return true; }); }
public Acp(Acp acp) { Start = acp.Start; End = acp.End; }
private static IntPtr HookProc(IntPtr hWnd, uint msg, IntPtr wParam, IntPtr lParam) { IntPtr returnCode = KeyboardInput.CallWindowProc(KeyboardInput.prevWndProc, hWnd, msg, wParam, lParam);; switch (msg) { case WM_GETDLGCODE: returnCode = (IntPtr)DLGC_WANTALLKEYS; break; case WM_CHAR: CharEntered?.Invoke(null, new CharacterEventArgs((char)wParam, (int)lParam)); break; case WM_KEYDOWN: KeyDown?.Invoke(null, new KeyEventArgs((Keys)wParam)); break; case WM_KEYUP: KeyUp?.Invoke(null, new KeyEventArgs((Keys)wParam)); break; case WM_LBUTTONDOWN: MouseSelection.left = (int)lParam & 0xffff; MouseSelection.top = (int)lParam >> 16; MouseSelection.right = MouseSelection.left; MouseSelection.bottom = MouseSelection.top; if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; Acp acp = textBox.GetAcpByRange(MouseSelection); if (acp.Start >= 0) { textBox.SetSelection(acp.Start, acp.End); Console.WriteLine("ACPStart:{0},ACPEnd:{1}", acp.Start, acp.End); Console.WriteLine("MouseDown:Left:{0},TOP:{1}RIGHT:{2}BOTTOM:{3}", MouseSelection.left, MouseSelection.top, MouseSelection.right, MouseSelection.bottom); Selecting = true; } } break; case WM_MOUSEMOVE: MouseSelection.right = (int)lParam & 0xffff; MouseSelection.bottom = (int)lParam >> 16; if (Selecting && Game1.keyboardDispatcher.Subscriber is ITextBox) { RECT range = new RECT(); range.left = Math.Min(MouseSelection.left, MouseSelection.right); range.top = Math.Max(MouseSelection.top, MouseSelection.bottom); range.right = Math.Max(MouseSelection.left, MouseSelection.right); range.bottom = Math.Min(MouseSelection.top, MouseSelection.bottom); ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; Acp acp = textBox.GetAcpByRange(range); if (acp.Start >= 0) { textBox.SetSelection(acp.Start, acp.End); textBox.SetSelState(MouseSelection.left > MouseSelection.right ? SelState.SEL_AE_END : SelState.SEL_AE_START); Console.WriteLine("ACPStart:{0},ACPEnd:{1}", acp.Start, acp.End); Console.WriteLine("MouseMove:Left:{0},TOP:{1}RIGHT:{2}BOTTOM:{3}", MouseSelection.left, MouseSelection.top, MouseSelection.right, MouseSelection.bottom); } } //handle IsMouseVisable returnCode = KeyboardInput.CallWindowProc(KeyboardInput.prevWndProc, hWnd, msg, wParam, lParam); break; case WM_LBUTTONUP: Selecting = false; break; #if TSF case EM_GETSEL: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; Acp acp = textBox.GetSelection(); Marshal.WriteInt32(wParam, acp.Start); Marshal.WriteInt32(lParam, acp.End); } break; case EM_SETSEL: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; textBox.SetSelection((int)wParam, (int)lParam); } break; case EM_REPLACESEL: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; textBox.ReplaceSelection(Marshal.PtrToStringAuto(lParam)); } break; case TF_GETSELSTATE: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; returnCode = (IntPtr)textBox.GetSelState(); } break; case TF_GETTEXT: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; var text = textBox.GetText(); Marshal.Copy(text.ToCharArray(), 0, wParam, Math.Min(text.Length, (int)lParam)); } break; case TF_GETTEXTLENGTH: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; returnCode = (IntPtr)textBox.GetTextLength(); } break; case TF_GETTEXTEXT: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; Acp acp = (Acp)Marshal.PtrToStructure(lParam, typeof(Acp)); RECT rect = textBox.GetTextExt(acp); MapWindowPoints(Game1.game1.Window.Handle, (IntPtr)0, ref rect, 2); //to screen coord Marshal.StructureToPtr(rect, wParam, false); //text ext returnCode = (IntPtr)0; //if the rect clipped } break; case TF_QUERYINSERT: if (Game1.keyboardDispatcher.Subscriber is ITextBox) { ITextBox textBox = Game1.keyboardDispatcher.Subscriber as ITextBox; Acp acp = (Acp)Marshal.PtrToStructure(wParam, typeof(Acp)); textBox.QueryInsert(acp, (uint)lParam); Marshal.StructureToPtr(acp, wParam, false); } break; case WM_KILLFOCUS: Game1.tsf.TerminateComposition(); break; #endif default: break; } return(returnCode); }