internal static void SetCommand(int index, string commandName, NppFuncItemDelegate functionPointer, ShortcutKey shortcut, bool checkOnInit) { FuncItem funcItem = new FuncItem(); funcItem._cmdID = index; funcItem._itemName = commandName; if (functionPointer != null) { funcItem._pFunc = new NppFuncItemDelegate(functionPointer); } if (shortcut._key != 0) { funcItem._pShKey = shortcut; } funcItem._init2Check = checkOnInit; _funcItems.Add(funcItem); }
public void RefreshItems() { IntPtr ptrPosItem = _nativePointer; for (int i = 0; i < _funcItems.Count; i++) { FuncItem updatedItem = new FuncItem(); updatedItem._itemName = _funcItems[i]._itemName; ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 128); updatedItem._pFunc = _funcItems[i]._pFunc; ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + IntPtr.Size); updatedItem._cmdID = Marshal.ReadInt32(ptrPosItem); ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 4); updatedItem._init2Check = _funcItems[i]._init2Check; ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + 4); updatedItem._pShKey = _funcItems[i]._pShKey; ptrPosItem = (IntPtr)(ptrPosItem.ToInt64() + IntPtr.Size); _funcItems[i] = updatedItem; } }
public void Add(FuncItem funcItem) { int oldSize = _funcItems.Count * _sizeFuncItem; _funcItems.Add(funcItem); int newSize = _funcItems.Count * _sizeFuncItem; IntPtr newPointer = Marshal.AllocHGlobal(newSize); if (_nativePointer != IntPtr.Zero) { RtlMoveMemory(newPointer, _nativePointer, oldSize); Marshal.FreeHGlobal(_nativePointer); } IntPtr ptrPosNewItem = (IntPtr)(newPointer.ToInt64() + oldSize); byte[] aB = Encoding.Unicode.GetBytes(funcItem._itemName + "\0"); Marshal.Copy(aB, 0, ptrPosNewItem, aB.Length); ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 128); IntPtr p = (funcItem._pFunc != null) ? Marshal.GetFunctionPointerForDelegate(funcItem._pFunc) : IntPtr.Zero; Marshal.WriteIntPtr(ptrPosNewItem, p); ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + IntPtr.Size); Marshal.WriteInt32(ptrPosNewItem, funcItem._cmdID); ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 4); Marshal.WriteInt32(ptrPosNewItem, Convert.ToInt32(funcItem._init2Check)); ptrPosNewItem = (IntPtr)(ptrPosNewItem.ToInt64() + 4); if (funcItem._pShKey._key != 0) { IntPtr newShortCutKey = Marshal.AllocHGlobal(4); Marshal.StructureToPtr(funcItem._pShKey, newShortCutKey, false); Marshal.WriteIntPtr(ptrPosNewItem, newShortCutKey); } else { Marshal.WriteIntPtr(ptrPosNewItem, IntPtr.Zero); } _nativePointer = newPointer; }