亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? shortcutmapper.cpp

?? 一個功能強大的代碼編輯器源代碼
?? CPP
字號:
/*
this file is part of notepad++
Copyright (C)2003 Don HO ( donho@altern.org )

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

#include "ShortcutMapper.h"
#include "Notepad_plus.h"

void ShortcutMapper::initTabs() {
	HWND hTab = _hTabCtrl = ::GetDlgItem(_hSelf, IDC_BABYGRID_TABBAR);
	TCITEM tie;
	tie.mask = TCIF_TEXT;
	tie.pszText = tabNames[0];
	::SendMessage(hTab, TCM_INSERTITEM, 0, (LPARAM)(&tie) );
	tie.pszText = tabNames[1];
	::SendMessage(hTab, TCM_INSERTITEM, 1, (LPARAM)(&tie) );
	tie.pszText = tabNames[2];
	::SendMessage(hTab, TCM_INSERTITEM, 2, (LPARAM)(&tie) );
	tie.pszText = tabNames[3];
	::SendMessage(hTab, TCM_INSERTITEM, 3, (LPARAM)(&tie) );
	tie.pszText = tabNames[4];
	::SendMessage(hTab, TCM_INSERTITEM, 4, (LPARAM)(&tie) );
}

void ShortcutMapper::translateTab(int index, const char * newname) {
	if (index < 0 || index > 4)
		return;
	strncpy(tabNames[index], newname, maxTabName);
}

void ShortcutMapper::initBabyGrid() {
	RECT rect;
	getClientRect(rect);
	
	_babygrid.init(_hInst, _hSelf, IDD_BABYGRID_ID1);
	//_babygrid.reSizeTo(rect);
	_babygrid.reSizeToWH(rect);
	_babygrid.hideCursor();
	_babygrid.makeColAutoWidth();
	_babygrid.setColsNumbered(false);
	_babygrid.setColWidth(0, 30);
	_babygrid.setColWidth(1, 250);
}

void ShortcutMapper::fillOutBabyGrid()
{
	NppParameters *nppParam = NppParameters::getInstance();
	_babygrid.clear();

	size_t nrItems = 0;

	switch(_currentState) {
		case STATE_MENU: {
			nrItems = nppParam->getUserShortcuts().size();
			_babygrid.setLineColNumber(nrItems, 2);
			break; }
		case STATE_MACRO: {
			nrItems = nppParam->getMacroList().size();
			_babygrid.setLineColNumber(nrItems, 2);
			break; }
		case STATE_USER: {
			nrItems = nppParam->getUserCommandList().size();
			_babygrid.setLineColNumber(nrItems, 2);
			break; }
		case STATE_PLUGIN: {
			nrItems = nppParam->getPluginCommandList().size();
			_babygrid.setLineColNumber(nrItems, 2);
			break; }
		case STATE_SCINTILLA: {
			nrItems = nppParam->getScintillaKeyList().size();
			_babygrid.setLineColNumber(nrItems, 2);
			break; }
	}

	_babygrid.setText(0, 1, "Name");
	_babygrid.setText(0, 2, "Shortcut");

	switch(_currentState) {
		case STATE_MENU: {
			vector<CommandShortcut> & cshortcuts = nppParam->getUserShortcuts();
			for(size_t i = 0; i < nrItems; i++) {
				_babygrid.setText(i+1, 1, cshortcuts[i].getName());
				_babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str());
			}
			break; }
		case STATE_MACRO: {
			vector<MacroShortcut> & cshortcuts = nppParam->getMacroList();
			for(size_t i = 0; i < nrItems; i++) {
				_babygrid.setText(i+1, 1, cshortcuts[i].getName());
				_babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str());
			}
			break; }
		case STATE_USER: {
			vector<UserCommand> & cshortcuts = nppParam->getUserCommandList();
			for(size_t i = 0; i < nrItems; i++) {
				_babygrid.setText(i+1, 1, cshortcuts[i].getName());
				_babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str());
			}
			break; }
		case STATE_PLUGIN: {
			vector<PluginCmdShortcut> & cshortcuts = nppParam->getPluginCommandList();
			for(size_t i = 0; i < nrItems; i++) {
				_babygrid.setText(i+1, 1, cshortcuts[i].getName());
				_babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str());
			}
			break; }
		case STATE_SCINTILLA: {
			vector<ScintillaKeyMap> & cshortcuts = nppParam->getScintillaKeyList();
			for(size_t i = 0; i < nrItems; i++) {
				_babygrid.setText(i+1, 1, cshortcuts[i].getName());
				_babygrid.setText(i+1, 2, cshortcuts[i].toString().c_str());
			}
			break; }
	}
}

BOOL CALLBACK ShortcutMapper::run_dlgProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message) 
	{
		case WM_INITDIALOG :
		{
			
			initBabyGrid();
			initTabs();
			fillOutBabyGrid();
			_babygrid.display();	
			goToCenter();
			return TRUE;
		}

		case WM_NOTIFY: {
			NMHDR nmh = *((NMHDR*)lParam);
			if (nmh.hwndFrom == _hTabCtrl) {
				if (nmh.code == TCN_SELCHANGE) {
					int index = TabCtrl_GetCurSel(_hTabCtrl);
					switch (index) {
						case 0:
							_currentState = STATE_MENU;
							break;
						case 1:
							_currentState = STATE_MACRO;
							break;
						case 2:
							_currentState = STATE_USER;
							break;
						case 3:
							_currentState = STATE_PLUGIN;
							break;
						case 4:
							_currentState = STATE_SCINTILLA;
							break;
					}
					fillOutBabyGrid();
				}
			}
			break; }

		case WM_COMMAND : 
		{
			switch (LOWORD(wParam))
			{
				case IDCANCEL :
				{
					::EndDialog(_hSelf, -1);
					return TRUE;
				}
				case IDOK :
				{
					::EndDialog(_hSelf, 0);
					return TRUE;
				}

				case IDM_BABYGRID_MODIFY :
				{
					NppParameters *nppParam = NppParameters::getInstance();
					int row = _babygrid.getSelectedRow();

					switch(_currentState) {
						case STATE_MENU: {
							//Get CommandShortcut corresponding to row
							vector<CommandShortcut> & shortcuts = nppParam->getUserShortcuts();
							CommandShortcut csc = shortcuts[row - 1], prevcsc = shortcuts[row - 1];
							csc.init(_hInst, _hSelf);
							if (csc.doDialog() != -1 && prevcsc != csc) {	//shortcut was altered
								nppParam->addUserModifiedIndex(row-1);
								shortcuts[row - 1] = csc;
								_babygrid.setText(row, 2, csc.toString().c_str());
								//Notify current Accelerator class to update everything
								nppParam->getAccelerator()->updateShortcuts();
								//::SendMessage(_hParent, NPPM_INTERNAL_CMDLIST_MODIFIED, (WPARAM)sc.c_str(), cmdID);
							}
							break; }
						case STATE_MACRO: {
							//Get MacroShortcut corresponding to row
							vector<MacroShortcut> & shortcuts = nppParam->getMacroList();
							MacroShortcut msc = shortcuts[row - 1], prevmsc = shortcuts[row - 1];
							msc.init(_hInst, _hSelf);
							if (msc.doDialog() != -1 && prevmsc != msc) {	//shortcut was altered
								shortcuts[row - 1] = msc;
								_babygrid.setText(row, 1, msc.getName());
								_babygrid.setText(row, 2, msc.toString().c_str());

								//Notify current Accelerator class to update everything
								nppParam->getAccelerator()->updateShortcuts();
								//::SendMessage(_hParent, NPPM_INTERNAL_MACROLIST_MODIFIED, 0, 0);
							}
							break; }
						case STATE_USER: {
							//Get UserCommand corresponding to row
							vector<UserCommand> & shortcuts = nppParam->getUserCommandList();
							UserCommand ucmd = shortcuts[row - 1], prevucmd = shortcuts[row - 1];
							ucmd.init(_hInst, _hSelf);
							prevucmd = ucmd;
							if (ucmd.doDialog() != -1 && prevucmd != ucmd) {	//shortcut was altered
								shortcuts[row - 1] = ucmd;
								_babygrid.setText(row, 1, ucmd.getName());
								_babygrid.setText(row, 2, ucmd.toString().c_str());

								//Notify current Accelerator class to update everything
								nppParam->getAccelerator()->updateShortcuts();
								//::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0);
							}
							break; }
						case STATE_PLUGIN: {
							//Get PluginCmdShortcut corresponding to row
							vector<PluginCmdShortcut> & shortcuts = nppParam->getPluginCommandList();
							PluginCmdShortcut pcsc = shortcuts[row - 1], prevpcsc = shortcuts[row - 1];
							pcsc.init(_hInst, _hSelf);
							prevpcsc = pcsc;
							if (pcsc.doDialog() != -1 && prevpcsc != pcsc) {	//shortcut was altered
								nppParam->addPluginModifiedIndex(row-1);
								shortcuts[row - 1] = pcsc;
								_babygrid.setText(row, 2, pcsc.toString().c_str());

								//Notify current Accelerator class to update everything
								nppParam->getAccelerator()->updateShortcuts();
								//::SendMessage(_hParent, NPPM_INTERNAL_PLUGINCMDLIST_MODIFIED, 0, 0);
							}
							break; }
						case STATE_SCINTILLA: {
							//Get ScintillaKeyMap corresponding to row
							vector<ScintillaKeyMap> & shortcuts = nppParam->getScintillaKeyList();
							ScintillaKeyMap skm = shortcuts[row - 1], prevskm = shortcuts[row - 1];
							skm.init(_hInst, _hSelf);
							if (skm.doDialog() != -1 && prevskm != skm) {	//shortcut was altered
								nppParam->addScintillaModifiedIndex(row-1);
								shortcuts[row - 1] = skm;
								_babygrid.setText(row, 2, skm.toString().c_str());

								//Notify current Accelerator class to update key
								//nppParam->getScintillaAccelerator()->updateKeys();
								nppParam->getScintillaAccelerator()->updateKey(prevskm, skm);

								//::SendMessage(_hParent, NPPM_INTERNAL_BINDSCINTILLAKEY, scintillaSc.toKeyDef(), scintillaSc.getScintillaKey());
								//::SendMessage(_hParent, NPPM_INTERNAL_CLEARSCINTILLAKEY, scintillaShortcuts[index].toKeyDef(), 0);
								//::SendMessage(_hParent, NPPM_INTERNAL_SCINTILLAKEYMODIFIED, 0, 0);
							}
							break; }
					}
					return TRUE;
				}
				case IDM_BABYGRID_DELETE :
				{
					NppParameters *nppParam = NppParameters::getInstance();
					if (::MessageBox(_hSelf, "Are you sure you want to delete this shortcut?", "Are you sure?", MB_OKCANCEL) == IDOK)
					{
						const int row = _babygrid.getSelectedRow();
						int shortcutIndex = row-1;
						DWORD cmdID;// = _pAccel->_pAccelArray[row-1].cmd;
						
						// Menu data
						size_t posBase;
						size_t nbElem;
						HMENU hMenu;

						switch(_currentState) {
							case STATE_MENU:
							case STATE_PLUGIN:
							case STATE_SCINTILLA: {
								return FALSE;			//this is bad
								break; }
							case STATE_MACRO: {
								vector<MacroShortcut> & theMacros = nppParam->getMacroList();
								vector<MacroShortcut>::iterator it = theMacros.begin();
								cmdID = theMacros[shortcutIndex].getID();
								theMacros.erase(it + shortcutIndex);
								fillOutBabyGrid();
								
								// preparing to remove from menu
								posBase = 6;
								nbElem = theMacros.size();
								hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_MACRO);
								for (size_t i = shortcutIndex ; i < nbElem ; i++)	//lower the IDs of the remaining items so there are no gaps
								{
									MacroShortcut ms = theMacros[i];
									ms.setID(ms.getID() - 1);	//shift all IDs
									theMacros[i] = ms;
								}
								//::SendMessage(_hParent, NPPM_INTERNAL_MACROLIST_MODIFIED, 0, 0);
								break; }
							case STATE_USER: {
								vector<UserCommand> & theUserCmds = nppParam->getUserCommandList();
								vector<UserCommand>::iterator it = theUserCmds.begin();
								cmdID = theUserCmds[shortcutIndex].getID();
								theUserCmds.erase(it + shortcutIndex);
								fillOutBabyGrid();
							
								// preparing to remove from menu
								posBase = 2;
								nbElem = theUserCmds.size();
								hMenu = ::GetSubMenu(::GetMenu(_hParent), MENUINDEX_RUN);
								for (size_t i = shortcutIndex ; i < nbElem ; i++)	//lower the IDs of the remaining items so there are no gaps
								{
									UserCommand uc = theUserCmds[i];
									uc.setID(uc.getID() - 1);	//shift all IDs
									theUserCmds[i] = uc;
								}
								
								//::SendMessage(_hParent, NPPM_INTERNAL_USERCMDLIST_MODIFIED, 0, 0);
								break; }
						}

						// remove from menu
						::RemoveMenu(hMenu, cmdID, MF_BYCOMMAND);
						cmdID++;
						if (nbElem == 0) {
							::RemoveMenu(hMenu, posBase-1, MF_BYPOSITION);		//remove separator
						} else {
							for (size_t i = shortcutIndex ; i < nbElem ; i++)	//lower the IDs of the remaining menu items so there are no gaps
							{
								char cmdName[64];
								::GetMenuString(hMenu, cmdID, cmdName, sizeof(cmdName), MF_BYCOMMAND);
								::ModifyMenu(hMenu, cmdID, MF_BYCOMMAND, cmdID-1, cmdName);	//update commandID
							}
						}

						nppParam->getAccelerator()->updateShortcuts();
					}
					return TRUE;
				}
				case IDD_BABYGRID_ID1: {
					if(HIWORD(wParam) == BGN_CELLDBCLICKED) //a cell was clicked in the properties grid
					{
						return ::SendMessage(_hSelf, WM_COMMAND, IDM_BABYGRID_MODIFY, LOWORD(lParam));
					}
					else if(HIWORD(wParam) == BGN_CELLRCLICKED) //a cell was clicked in the properties grid
					{
						POINT p;
						::GetCursorPos(&p);
						if (!_rightClickMenu.isCreated())
						{
							vector<MenuItemUnit> itemUnitArray;
							itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_MODIFY, "Modify"));
							itemUnitArray.push_back(MenuItemUnit(IDM_BABYGRID_DELETE, "Delete"));
							_rightClickMenu.create(_hSelf, itemUnitArray);
						}
						switch(_currentState) {
							case STATE_MACRO:
							case STATE_USER: {
								_rightClickMenu.enableItem(IDM_BABYGRID_DELETE, true);
								break; }
							case STATE_MENU:
							case STATE_PLUGIN:
							case STATE_SCINTILLA: {
								_rightClickMenu.enableItem(IDM_BABYGRID_DELETE, false);
								break; }
						}
						
						_rightClickMenu.display(p);
						return TRUE;
					}
				}
			}
		}
		default:
			return FALSE;
	}
	return FALSE;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
制服丝袜av成人在线看| 一区二区三区精品在线观看| 国产精品成人一区二区艾草 | 亚洲欧美另类在线| 麻豆中文一区二区| 色av成人天堂桃色av| 国产亚洲欧美在线| 蜜臀av性久久久久蜜臀av麻豆| 91玉足脚交白嫩脚丫在线播放| 欧美大尺度电影在线| 亚洲香蕉伊在人在线观| 99久久精品一区| 国产精品免费看片| 国产成人免费xxxxxxxx| 欧美精品一区二区三区在线| 亚洲va欧美va国产va天堂影院| 成人app软件下载大全免费| 久久免费国产精品| 麻豆高清免费国产一区| 欧美日韩精品二区第二页| 亚洲欧洲精品成人久久奇米网| 久久国产综合精品| 日韩视频一区二区| 麻豆精品视频在线观看免费| 欧美欧美欧美欧美| 天堂va蜜桃一区二区三区漫画版| 日本乱人伦一区| 亚洲日本丝袜连裤袜办公室| 99久久婷婷国产综合精品| 日本一区二区三区视频视频| 国产精品亚洲专一区二区三区| 精品美女在线播放| 国产成人免费在线视频| 久久蜜桃香蕉精品一区二区三区| 精品在线一区二区三区| 久久网站最新地址| 国产精品一区二区三区99| 久久精品一区二区三区四区| 高清不卡在线观看av| 国产精品久久综合| 91在线你懂得| 亚洲成人av电影| 日韩欧美中文字幕精品| 美国十次了思思久久精品导航| 欧美一区二区三区白人| 久久国产精品一区二区| 久久免费视频一区| av男人天堂一区| 亚洲主播在线观看| 日韩一级片在线播放| 国产麻豆视频一区| 亚洲男同1069视频| 日韩三级视频在线观看| 国产成人aaaa| 亚洲成人免费电影| 亚洲精品在线免费播放| 成人国产精品免费观看视频| 亚洲一区二区三区视频在线| 日韩视频中午一区| www.亚洲精品| 日韩成人一级片| 中文字幕 久热精品 视频在线| av电影一区二区| 日韩精品久久久久久| 久久久久久久久久久黄色| 一本久道久久综合中文字幕| 日日摸夜夜添夜夜添精品视频| 日韩视频123| 99视频精品在线| 美女爽到高潮91| 亚洲欧美在线视频观看| 日韩欧美国产午夜精品| av亚洲精华国产精华精| 麻豆精品国产91久久久久久| 日韩毛片视频在线看| 日韩一区二区三区电影| 99国产精品一区| 国产一区二区三区综合| 亚洲激情图片小说视频| 久久影视一区二区| 欧美色网一区二区| 成人激情小说乱人伦| 免费久久99精品国产| 亚洲精品福利视频网站| 欧美激情艳妇裸体舞| 日韩午夜精品电影| 欧美日韩一区视频| 99久久精品免费看国产免费软件| 奇米综合一区二区三区精品视频| 亚洲激情图片一区| 中文字幕+乱码+中文字幕一区| 日韩女优毛片在线| 欧美日韩精品综合在线| 91麻豆免费在线观看| 大胆欧美人体老妇| 韩国av一区二区三区在线观看| 视频一区欧美精品| 亚洲成人av在线电影| 亚洲欧美偷拍卡通变态| 国产精品网曝门| 国产欧美日韩中文久久| 欧美大黄免费观看| 欧美一区二区在线免费播放| 欧美专区在线观看一区| 色94色欧美sute亚洲线路一ni| 国产**成人网毛片九色| 国产91在线观看| 国产精品亚洲综合一区在线观看| 九色综合狠狠综合久久| 麻豆视频观看网址久久| 蜜臀av性久久久久蜜臀av麻豆| 婷婷成人激情在线网| 亚洲成人一区二区在线观看| 亚洲福利视频一区二区| 亚洲大片精品永久免费| 亚洲国产中文字幕在线视频综合| 一级日本不卡的影视| 亚洲国产日韩综合久久精品| 亚洲中国最大av网站| 肉色丝袜一区二区| 美女一区二区三区在线观看| 久久爱另类一区二区小说| 精品中文字幕一区二区| 国产精品一区免费在线观看| 高潮精品一区videoshd| 成人手机电影网| 91看片淫黄大片一级| 色噜噜久久综合| 欧美精品在线一区二区| 精品人在线二区三区| 欧美精品一区二区在线播放| 日本一区二区三区国色天香| 日韩美女视频一区二区| 午夜精品免费在线观看| 久久www免费人成看片高清| 国产ts人妖一区二区| 91丨九色丨蝌蚪富婆spa| 欧美影院午夜播放| 日韩欧美中文一区| 国产精品人人做人人爽人人添| 亚洲色图一区二区| 日韩激情视频在线观看| 国产麻豆视频一区| 91浏览器在线视频| 4438成人网| 欧美国产1区2区| 亚洲超碰精品一区二区| 国产乱对白刺激视频不卡| 91麻豆视频网站| 精品三级av在线| 伊人夜夜躁av伊人久久| 美女一区二区久久| 一本在线高清不卡dvd| 日韩限制级电影在线观看| 日本一区二区视频在线观看| 亚洲一区二区美女| 国产99精品国产| 精品国产不卡一区二区三区| 国产精品色哟哟网站| 图片区小说区国产精品视频| 国产精品综合二区| 欧美日韩国产天堂| 中文字幕一区二区三| 蜜臀va亚洲va欧美va天堂| 91麻豆免费看| 国产欧美一区二区精品性色| 日韩二区在线观看| 在线观看av一区二区| 国产欧美日韩视频一区二区| 天使萌一区二区三区免费观看| www.日韩精品| 国产丝袜欧美中文另类| 免费久久精品视频| 欧日韩精品视频| 亚洲三级在线观看| 国产高清不卡二三区| 日韩一级高清毛片| 图片区小说区区亚洲影院| 日本韩国精品在线| 国产精品国产精品国产专区不片| 国产美女在线精品| 欧美一区二区三区四区高清| 亚洲欧美偷拍另类a∨色屁股| 国产精品一卡二卡在线观看| 日韩午夜中文字幕| 日本特黄久久久高潮| 欧美日韩精品专区| 亚洲成a人片综合在线| 91麻豆国产福利在线观看| 国产精品视频在线看| 国产乱码精品一区二区三 | youjizz国产精品| 久久久久久久久岛国免费| 免费成人性网站| 欧美日韩国产欧美日美国产精品| 亚洲精品五月天| 色偷偷88欧美精品久久久| 国产精品初高中害羞小美女文| 成人高清视频在线观看| 中文字幕一区二区三区视频 |