BioInfo
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору vladvro Цитата: А, вот когда... полагаю, что это связанно с автоматическим закрытием пустого нового буфера (если в редакторе открыт только он) при открытии нового, например загрузке файла. | Ясно, ладно, не критично... Цитата: А ты с Луа совсем не знаком? впринципе язык простой. | Совсем, даже не знаю что это такое... Я человек не образованный, тока на плюсах могу, ну и другое старенькое по мелочи... Из новых веяний только Питон поставил и то чето как то не очень (как говорится: ты просто не умеешь его готовить ) Цитата: В меню Tools отсутствует возможность вставлять разделители. Попытку реализовать разделители предпринял Moon_aka_Sun. Увы, дело не доведено до конца. | Первое что пришло в голову когда увидел код: "Аааа!!! Какой ужас! Переписать все наф...", но потом подумал и решил, что это слишком сильное высказывание, как говорится "Не трогай оно и пахнуть не будет" По этому я просто дописал кусок про разделители, смысл в следующем: если написать command.separator.100=1, то перед командой 100, появится разделитель (аналогично для любой команды). Наслаждайтесь, вроде пашет (данную функцию нужно полностью заменить в SciTEBuffers.cxx): Код: void SciTEBase::SetToolsMenu() { //command.name.0.*.py=Edit in PythonWin //command.0.*.py="c:\program files\python\pythonwin\pythonwin" /edit c:\coloreditor.py RemoveToolsMenu(); int menuPos = TOOLS_START; //! for (int item = 0; item < toolMax; item++) { //!-start-[SubMenu] //~ Structure for creation of menu map (to simplify adding submenu) struct UserMenu { HMENU hMenu; SString name; int Parent; } UMenu[toolMax]; int item; // Clear structure from random values. for (item = 0; item < toolMax; item++) { UMenu[item].hMenu = NULL; UMenu[item].Parent = -1; } //~ Handle to Tools menu HMENU hToolsMenu = ::GetSubMenu(::GetMenu(reinterpret_cast<HWND>(wSciTE.GetID())), menuTools); // First add user defined submenus (Create all PopUps) for (item = 0; item < toolMax; item++) { SString prefix = "command.submenu.name."; prefix += SString(item); prefix += "."; SString commandName = props.GetNewExpand(prefix.c_str(), filePath.AsInternal()); if (commandName.length()) { UMenu[item].hMenu = ::CreatePopupMenu(); UMenu[item].name = commandName; prefix = "command.submenu.parent."; prefix += SString(item); int parentMenu = props.GetInt(prefix.c_str()); if(parentMenu != NULL && parentMenu < toolMax) { int i = parentMenu; do { //~ To avoid all possible infinite loops through user's fault (Who them knows i = UMenu[i].Parent; } while (i != -1 && i != item && i != parentMenu); if (i == -1 && item != parentMenu) UMenu[item].Parent = parentMenu; } } } for (item = 0; item < toolMax; item++) { if (UMenu[item].name.length()) { SString localised = localiser.Text(UMenu[item].name.c_str()); if(UMenu[item].Parent >= 0 && IsMenu(UMenu[UMenu[item].Parent].hMenu)) ::AppendMenu(UMenu[UMenu[item].Parent].hMenu, MF_STRING | MF_POPUP, (UINT)UMenu[item].hMenu, localised.c_str()); else ::InsertMenu(hToolsMenu, menuPos++, MF_BYPOSITION | MF_STRING | MF_POPUP, (UINT)UMenu[item].hMenu, localised.c_str()); } } // ::InsertMenu(hToolsMenu, menuPos++, MF_BYPOSITION | MF_SEPARATOR, IDM_TOOLS + toolMax + 1, ""); for (item = 0; item < toolMax; item++) { //!-end-[SubMenu] int itemID = IDM_TOOLS + item; SString prefix = "command.name."; prefix += SString(item); prefix += "."; SString commandName = props.GetNewExpand(prefix.c_str(), FileNameExt().AsInternal()); if (commandName.length()) { SString sMenuItem = commandName; prefix = "command.shortcut."; prefix += SString(item); prefix += "."; SString sMnemonic = props.GetNewExpand(prefix.c_str(), FileNameExt().AsInternal()); if (item < 10 && sMnemonic.length() == 0) { sMnemonic += "Ctrl+"; sMnemonic += SString(item); } /*! SetMenuItem(menuTools, menuPos, itemID, sMenuItem.c_str(), sMnemonic[0] ? sMnemonic.c_str() : NULL); menuPos++; } } */ //!-start-[SubMenu] prefix = "command.separator."; prefix += SString(item); int issep = props.GetInt(prefix.c_str()); // Finally add functions stated in "command.menu." in right submenu's (by default directly in Tools menu) prefix = "command.parent."; prefix += SString(item); int toMenu = props.GetInt(prefix.c_str()); if(toMenu != NULL && toMenu >= 0 && toMenu < toolMax && IsMenu(UMenu[toMenu].hMenu)) { SString localised = localiser.Text(sMenuItem.c_str()); if (issep) ::InsertMenu(UMenu[toMenu].hMenu, itemID, MF_BYPOSITION | MF_SEPARATOR, IDM_TOOLS + toolMax + 1, ""); //SetMenuItem(UMenu[toMenu].hMenu, itemID, localised.c_str(), sMnemonic[0] ? sMnemonic.c_str() : NULL); SetMenuItem(UMenu[toMenu].hMenu, itemID, localised.c_str(), sMnemonic[0] ? sMnemonic.c_str() : NULL); } else { if (issep) { ::InsertMenu(hToolsMenu, menuPos, MF_BYPOSITION | MF_SEPARATOR, IDM_TOOLS + toolMax + 1, ""); menuPos++; } SciTEBase::SetMenuItemLocalised(menuTools, menuPos, itemID, sMenuItem.c_str(), sMnemonic[0] ? sMnemonic.c_str() : NULL); menuPos++; } } } //!-end-[SubMenu] menuPos--; //!-add-[Tools] DestroyMenuItem(menuTools, IDM_MACRO_SEP); DestroyMenuItem(menuTools, IDM_MACROLIST); DestroyMenuItem(menuTools, IDM_MACROPLAY); DestroyMenuItem(menuTools, IDM_MACRORECORD); DestroyMenuItem(menuTools, IDM_MACROSTOPRECORD); menuPos++; if (macrosEnabled) { SetMenuItem(menuTools, menuPos++, IDM_MACRO_SEP, ""); SetMenuItemLocalised(menuTools, menuPos++, IDM_MACROLIST, "&List Macros...", "Shift+F9"); SetMenuItemLocalised(menuTools, menuPos++, IDM_MACROPLAY, "Run Current &Macro", "F9"); SetMenuItemLocalised(menuTools, menuPos++, IDM_MACRORECORD, "&Record Macro", "Ctrl+F9"); SetMenuItemLocalised(menuTools, menuPos++, IDM_MACROSTOPRECORD, "S&top Recording Macro", "Ctrl+Shift+F9"); } } | Данный код внедрен в форум с помощью скрипта vladvro Товарищи, давайте по активнее чтоли, а то мой альтруистический запал стухнет... |