/****************************** Module Header ******************************* * * Module Name: popup.e * * Copyright (c) Netlabs EPM Distribution Project 2004 * * $Id$ * * =========================================================================== * * This file is part of the Netlabs EPM Distribution package and 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, in version 2 as it comes in the "COPYING" file of the * Netlabs EPM Distribution. This library 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. * ****************************************************************************/ ; Popup menu defs, moved from MOUSE.E. compile if not defined( SMALL) -- If compiled separately EA_comment 'This defines the popup menu.' define INCLUDING_FILE = 'POPUP.E' include 'stdconst.e' const tryinclude 'mycnf.e' const compile if not defined( NLS_LANGUAGE) NLS_LANGUAGE = 'ENGLISH' compile endif include NLS_LANGUAGE'.e' compile endif ; --------------------------------------------------------------------------- const compile if not defined( WANT_TEXT_PROCS) WANT_TEXT_PROCS = 1 compile endif ; --------------------------------------------------------------------------- const FILL_MARK_MENU__MSG = '~Fill mark' FILL_MARK_MENUP__MSG = \1'Fill marked region with a character, overlaying current contents' HP_POPUP_FILL = 0 REFLOW_MARK_MENU__MSG = 'Reflo~w mark' REFLOW_MARK_MENUP__MSG = \1'Reflow text in marked region' HP_POPUP_REFLOW = 0 MARK_WORD_MENU__MSG = 'Mark ~word' MARK_WORD_MENUP__MSG = \1'Mark space-delimited word under cursor' HP_POPUP_MARKWORD = 0 MARK_TOKEN_MENU__MSG = 'Mark ~identifier' MARK_TOKEN_MENUP__MSG = \1'Mark the C-language identifier under the cursor' HP_POPUP_MARKTOKEN = 0 FIND_TOKEN_MENU__MSG = '~Find identifier' FIND_TOKEN_MENUP__MSG = \1'Find the next occurrence of the identifier under the cursor' HP_POPUP_FINDTOKEN = 0 compile if WANT_TEXT_PROCS MARK_SENTENCE_MENU__MSG = 'Mark se~ntence' MARK_SENTENCE_MENUP__MSG = \1'Mark sentence around cursor' HP_POPUP_MARKSENTENCE = 0 MARK_PARAGRAPH_MENU__MSG = 'Mark paragrap~h' MARK_PARAGRAPH_MENUP__MSG = \1'Mark paragraph around cursor' HP_POPUP_MARKPARAGRAPH = 0 EXTEND_SENTENCE_MENU__MSG = 'E~xtend sentence mark' EXTEND_SENTENCE_MENUP__MSG = \1'Extend character mark through end of next sentence' HP_POPUP_EXTENDSENTENCE = 0 EXTEND_PARAGRAPH_MENU__MSG = 'Extend p~aragraph mark' EXTEND_PARAGRAPH_MENUP__MSG = \1'Extend character mark through end of next paragraph' HP_POPUP_EXTENDPARAGRAPH = 0 compile endif -- WANT_TEXT_PROCS UPCASE_MARK_MENU__MSG = 'Uppe~rcase mark' UPCASE_MARK_MENUP__MSG = \1'Translate selected text to upper case' HP_POPUP_UPCASEMARK = 0 LOCASE_MARK_MENU__MSG = '~Lowercase mark' LOCASE_MARK_MENUP__MSG = \1'Translate selected text to lower case' HP_POPUP_LOCASEMARK = 0 UPCASE_WORD_MENU__MSG = '~Uppercase word' UPCASE_WORD_MENUP__MSG = \1'Translate word under mouse pointer to upper case' HP_POPUP_UPCASEWORD = 0 LOCASE_WORD_MENU__MSG = '~Lowercase word' LOCASE_WORD_MENUP__MSG = \1'Translate word under mouse pointer to lower case' HP_POPUP_LOCASEWORD = 0 SHIFT_MENU__MSG = '~Shift' SHIFT_MENUP__MSG = \1'Shift marked text left or right' HP_POPUP_SHIFT = 0 SHIFTLEFT_MENU__MSG = 'Shift ~left 1' SHIFTLEFT_MENUP__MSG = \1'Shift marked text left 1 character' HP_POPUP_SHIFTLEFT = 0 SHIFTLEFT3_MENU__MSG = 'Shift l~eft 3' SHIFTLEFT3_MENUP__MSG = \1'Shift marked text left 3 characters' HP_POPUP_SHIFTLEFT3 = 0 SHIFTLEFT8_MENU__MSG = 'Shift le~ft 8' SHIFTLEFT8_MENUP__MSG = \1'Shift marked text left 8 characters' HP_POPUP_SHIFTLEFT8 = 0 SHIFTRIGHT_MENU__MSG = 'Shift right ~1' SHIFTRIGHT_MENUP__MSG = \1'Shift marked text right 1 character' HP_POPUP_SHIFTRIGHT = 0 SHIFTRIGHT3_MENU__MSG = 'Shift right ~3' SHIFTRIGHT3_MENUP__MSG = \1'Shift marked text right 3 characters' HP_POPUP_SHIFTRIGHT3 = 0 SHIFTRIGHT8_MENU__MSG = 'Shift right ~8' SHIFTRIGHT8_MENUP__MSG = \1'Shift marked text right 8 characters' HP_POPUP_SHIFTRIGHT8 = 0 CENTER_LINE_MENU__MSG = 'Cen~ter line' CENTER_LINE_MENUP__MSG = \1'Center line under cursor vertically in window' HP_POPUP_CENTERLINE = 0 CENTER_MARK_MENU__MSG = 'Cen~ter text' CENTER_MARK_MENUP__MSG = \1'Center marked text within margins or block mark' HP_POPUP_CENTERMARK = 0 SORT_MARK_MENU__MSG = 'S~ort' SORT_MARK_MENUP__MSG = \1'Sort marked lines, using block mark (if present) as key' HP_POPUP_SORT = 0 TOP_LINE_MENU__MSG = 'Sc~roll to top' TOP_LINE_MENUP__MSG = \1'Scroll so line under cursor is at top of window' HP_POPUP_TOP = 0 ;compile if WANT_TREE LOAD_FILE_MENU__MSG = '~Load file' SORT_ASCENDING_MENU__MSG = '~Sort ascending' SORT_DATE_MENU__MSG = 'Sort by ~date' SORT_TIME_MENU__MSG = 'Sort by ~time' SORT_SIZE_MENU__MSG = 'Sort by ~size' SORT_EASIZE_MENU__MSG = 'Sort by ~EA size' SORT_FULLNAME_MENU__MSG = 'Sort by ~fully-qualified filename' SORT_NAME_MENU__MSG = 'Sort by ~name' SORT_EXTENSION_MENU__MSG = 'Sort by e~xtension' SORT_DESCENDING_MENU__MSG = 'Sort ~descending' LOAD_FILE_MENUP__MSG = \1'Load the file or list the directory under the cursor' SORT_ASCENDING_MENUP__MSG = \1'Sort the file or marked lines from smallest to largest' SORT_XXXX_MENUP__MSG = \1'Sort the file or marked lines by the indicated attribute' SORT_DESCENDING_MENUP__MSG = \1'Sort the file or marked lines from largest to smallest' ;compile endif ; --------------------------------------------------------------------------- const -- EPM bug: -- Cascade menu is now replaced by inline menu items, because it doesnot -- work correctly: -- The frame around the submenu arrow is only painted after activating -- that menu item. Before that, one thinks that's a normal submenu item -- that won't execute something on selecting it. POPUP_ENABLE_CASCADE = 0 -- 0|1 ; --------------------------------------------------------------------------- ; Open the popup menu at the pointer position. ; With arg( 1) = 0, the popup menu is opened at the cursor pos. defc MH_Popup universal activemenu MenuName = 'popup' activemenu = MenuName -- required for DefSubMenu and DefSubMenuItem call SetMenuAVar( 'mid_'MenuName, 90) call SetMenuAVar( 'popupmids', '') deletemenu MenuName, 0, 0, 0 -- For a popup menu, the submenu item itself is invisible. Therefore simply -- use the same name here as for the popup menu: DefSubMenu( MenuName, -- Popup ---------- '', '', '') -- Add menu items mt = strip( leftstr( marktype(), 1)) if arg( 1) = 0 then call PointerToCursorPos() endif fInMark = mouse_in_mark() fIsTreeList = upcase( leftstr( .filename, 5)) = '.TREE' fIsDirList = OnADirListLine() if fIsTreeList then --'MH_GoToPointerPos' -- Better always use the cursor pos., because many actions refer to -- the filename in the processed line. PointerToCursorPos() call PopupMenuItemsTreeList() elseif fIsDirList then --'MH_GoToPointerPos' -- Better always use the cursor pos., because many actions refer to -- the filename in the processed line. PointerToCursorPos() call PopupMenuItemsDirList() elseif fInMark then -- inside-mark call PopupMenuItemsInsideMark() elseif mt <> '' then -- outside-mark call PopupMenuItemsOutsideMark() else -- no-mark call PopupMenuItemsNoMark() endif if not fIsTreeList & not fIsDirList then call PopupMenuItemsCommon() endif showmenu menuname, 1 -- 0 = standard menu (default for missing parameter), 1 = popup menu, 2 = undefined, 3 = UC menu (toolbar) -- Cascade menu is now replaced by inline menu items, because it doesnot -- work correctly: -- The frame around the submenu arrow is only painted after activating -- that menu item. Before that, one thinks that's a normal submenu item -- that won't execute something on selecting it. compile if POPUP_ENABLE_CASCADE 'PostMe AddCascadePopupMenu' compile endif -- Workaround: This ensures that the configured menu font is set for the -- menu and not a dropped font. Without font dropping, it works without -- this workaround. 'PostMe SetMenuFont 'MenuName -- This highlights the cursor below the popup menu. 'PostMe HighlightCursor' ; --------------------------------------------------------------------------- defproc PopupMenuItemsTreeList if IsATreeListFilename() = 1 then -- file miatreelistfile = '' miatreelistfiledir = '' elseif IsATreeListFilename() = 2 then -- dir miatreelistfile = 'DISABLED' miatreelistfiledir = '' else miatreelistfile = 'DISABLED' miatreelistfiledir = 'DISABLED' endif BackupDir = GetBackupDir() fIsBackupList = (pos( '.TREEBACKUP', upcase( .filename)) = 1) & (pos( upcase( BackupDir), upcase( .filename)) > 0) DefMenuItem( '', -- Filename DoubleCharInStr( '~', GetFileSpec( 'N', GetTreeListFilename())), '', '', '', 'STATIC') DefMenuItem( '', -- Load file LOAD_FILE_MENU__MSG''MenuAccelString( 'alt_1'), 'dokey a_1', LOAD_FILE_MENUP__MSG, '', miatreelistfiledir) DefMenuSep() -------------------- if fIsBackupList then DefMenuItem( '', -- Compare file 'Comp~are', 'mc /CompareBackupFile/PostMe SetFocusToEditClient/HighlightCursor', -- SetFocusToEditClient required after calls of external apps from the popup menu. 'Compare backup file under cursor with original file', '', miatreelistfile) DefMenuItem( '', -- Restore file '~Restore...', 'RestoreFromTreeFile', 'Restore backup file under cursor to original file', '', miatreelistfile) DefMenuSep() -------------------- endif DefMenuItem( '', -- Delete file 'D~elete file...'MenuAccelString( 'DeleteListFile BackSpace', 'DeleteListFile DeleteLine'), 'DeleteListFile', 'Delete file under cursor ('CTRL_KEY__MSG' to bypass confirmation)', '', miatreelistfile) DefMenuSep() -------------------- DefNextItemStartsSubMenu() DefMenuItem( '', -- Sort ascending > SORT_ASCENDING_MENU__MSG, '', SORT_ASCENDING_MENUP__MSG, '') DefMenuItem( '', -- Sort by date SORT_DATE_MENU__MSG, 'TreeSort D', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by time SORT_TIME_MENU__MSG, 'TreeSort T', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by size SORT_SIZE_MENU__MSG, 'TreeSort S', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by EA size SORT_EASIZE_MENU__MSG, 'TreeSort EA', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by fully-qualified filename SORT_FULLNAME_MENU__MSG, 'TreeSort F', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by name SORT_NAME_MENU__MSG, 'TreeSort N', SORT_XXXX_MENUP__MSG, '') DefNextItemEndsSubMenu() DefMenuItem( '', -- Sort by extension SORT_EXTENSION_MENU__MSG, 'TreeSort EX', SORT_XXXX_MENUP__MSG, '') DefNextItemStartsSubMenu() DefMenuItem( '', -- Sort descending > SORT_DESCENDING_MENU__MSG, '', SORT_DESCENDING_MENUP__MSG, '') DefMenuItem( '', -- Sort by date SORT_DATE_MENU__MSG, 'TreeSort /R D', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by time SORT_TIME_MENU__MSG, 'TreeSort /R T', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by size SORT_SIZE_MENU__MSG, 'TreeSort /R S', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by EA size SORT_EASIZE_MENU__MSG, 'TreeSort /R EA', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by fully-qualified filename SORT_FULLNAME_MENU__MSG, 'TreeSort /R F', SORT_XXXX_MENUP__MSG, '') DefMenuItem( '', -- Sort by name SORT_NAME_MENU__MSG, 'TreeSort /R N', SORT_XXXX_MENUP__MSG, '') DefNextItemEndsSubMenu() DefMenuItem( '', -- Sort by extension SORT_EXTENSION_MENU__MSG, 'TreeSort /R EX', SORT_XXXX_MENUP__MSG, '') ; --------------------------------------------------------------------------- defproc PopupMenuItemsDirList if IsADirListFilename() = 1 then -- file miadirlistfile = '' miadirlistfiledir = '' elseif IsADirListFilename() = 2 then -- dir miadirlistfile = 'DISABLED' miadirlistfiledir = '' else miadirlistfile = 'DISABLED' miadirlistfiledir = 'DISABLED' endif DefMenuItem( '', -- Filename DoubleCharInStr( '~', GetFileSpec( 'N', GetDirListFilename())), '', '', '', 'STATIC') DefMenuItem( '', -- Load file LOAD_FILE_MENU__MSG''MenuAccelString( 'alt_1'), 'dokey a_1', LOAD_FILE_MENUP__MSG, '', miadirlistfiledir) DefMenuSep() -------------------- DefMenuItem( '', -- Delete file 'D~elete file...'MenuAccelString( 'DeleteListFile BackSpace', 'DeleteListFile DeleteLine'), 'DeleteListFile', 'Delete file under cursor ('CTRL_KEY__MSG' to bypass confirmation)', '', miadirlistfile) ; --------------------------------------------------------------------------- defproc PopupMenuItemsInsideMark universal nodismiss universal LastSubMenuId mt = strip( leftstr( marktype(), 1)) -- Disable some menu items if char mark is active fCharMark = (mt = 'C') if fCharMark then miaformatable = 'DISABLED' else miaformatable = '' endif DefMenuItem( '', -- Unmark UNMARK_MARK_MENU__MSG, 'UnMark', UNMARK_MARK_MENUP__MSG, HP_EDIT_UNMARK) DefMenuItem( '', -- Delete mark DELETE_MARK_MENU__MSG, 'DeleteMark', DELETE_MARK_MENUP__MSG, HP_EDIT_DELETE) DefMenuItem( '', -- Fill mark FILL_MARK_MENU__MSG, 'FillMark', FILL_MARK_MENUP__MSG, HP_POPUP_FILL) DefMenuItem( '', -- Reflow mark REFLOW_MARK_MENU__MSG, 'ReflowPar2ReflowMargins', REFLOW_MARK_MENUP__MSG, HP_POPUP_REFLOW, miaformatable) DefMenuItem( '', -- Uppercase mark UPCASE_MARK_MENU__MSG, 'UppercaseMark', UPCASE_MARK_MENUP__MSG, HP_POPUP_UPCASEMARK) DefMenuItem( '', -- Lowercase mark LOCASE_MARK_MENU__MSG, 'LowercaseMark', LOCASE_MARK_MENUP__MSG, HP_POPUP_LOCASEMARK) DefMenuItem( '', -- Sort SORT_MARK_MENU__MSG, 'Sort', SORT_MARK_MENUP__MSG, HP_POPUP_SORT, miaformatable) DefMenuSep() -------------------- DefMenuItem( '', -- Find mark 'Fi~nd mark', 'FindMark', 'Find marked string in text', '') DefMenuSep() -------------------- DefMenuItem( '', -- Comment '~Comment', 'Comment', 'Comment marked lines', '') DefMenuItem( '', -- Uncomment 'Unco~mment', 'Uncomment', 'Uncomment marked lines', '') DefMenuSep() -------------------- compile if WANT_TEXT_PROCS DefMenuItem( '', -- Extend sentence mark EXTEND_SENTENCE_MENU__MSG, 'ExtendSentence', EXTEND_SENTENCE_MENUP__MSG, HP_POPUP_EXTENDSENTENCE) DefMenuItem( '', -- Extend paragraph mark EXTEND_PARAGRAPH_MENU__MSG, 'ExtendParagraph', EXTEND_PARAGRAPH_MENUP__MSG, HP_POPUP_EXTENDPARAGRAPH) DefMenuSep() -------------------- compile endif -- WANT_TEXT_PROCS DefNextItemStartsSubMenu() DefMenuItem( '', -- Shift > 'S~hift' /*SHIFT_MENU__MSG*/, '', SHIFT_MENUP__MSG, HP_POPUP_SHIFT) DefMenuItem( '', -- Shift left 1 SHIFTLEFT_MENU__MSG''MenuAccelString( 'ShiftLeft'), 'DoCmd 1 ShiftLeft', SHIFTLEFT_MENUP__MSG, HP_POPUP_SHIFTLEFT, nodismiss) DefMenuItem( '', -- Shift left 3 SHIFTLEFT3_MENU__MSG, 'DoCmd 3 ShiftLeft', SHIFTLEFT3_MENUP__MSG, HP_POPUP_SHIFTLEFT3, nodismiss) DefMenuItem( '', -- Shift left 8 SHIFTLEFT8_MENU__MSG, 'DoCmd 8 ShiftLeft', SHIFTLEFT8_MENUP__MSG, HP_POPUP_SHIFTLEFT8, nodismiss) DefMenuItem( '', -- Shift right 1 SHIFTRIGHT_MENU__MSG''MenuAccelString( 'ShiftRight'), 'DoCmd 1 ShiftRight', SHIFTRIGHT_MENUP__MSG, HP_POPUP_SHIFTRIGHT, 'BREAKSEPARATOR' nodismiss) DefMenuItem( '', -- Shift right 3 SHIFTRIGHT3_MENU__MSG, 'DoCmd 3 ShiftRight', SHIFTRIGHT3_MENUP__MSG, HP_POPUP_SHIFTRIGHT3, nodismiss) DefNextItemEndsSubMenu() DefMenuItem( '', -- Shift right 8 SHIFTRIGHT8_MENU__MSG, 'DoCmd 8 ShiftRight', SHIFTRIGHT8_MENUP__MSG, HP_POPUP_SHIFTRIGHT8, nodismiss) DefMenuItem( '', -- Center text CENTER_MARK_MENU__MSG, 'CenterMark', CENTER_MARK_MENUP__MSG, HP_POPUP_CENTERMARK, miaformatable) DefMenuSep() -------------------- DefMenuItem( '', -- Copy CLIP_COPY_MENU__MSG, 'Copy2Clip', CLIP_COPY_MENUP__MSG, HP_EDIT_COPY) DefMenuItem( '', -- Cut CUT_MENU__MSG, 'Cut', CUT_MENUP__MSG, HP_EDIT_CUT) DefMenuSep() -------------------- DefMenuItem( '', -- Style... 'St~yle...', 'FontList', 'St~yle...', HP_OPTIONS_STYLE) DefMenuSep() -------------------- DefMenuItem( '', -- Proof PROOF_MENU__MSG, 'Proof', PROOF_MENUP__MSG, HP_OPTIONS_PROOF) DefMenuSep() -------------------- DefMenuItem( '', -- Print mark... PRT_MARK_MENU__MSG'...', 'PrintDlg M', ENHPRT_MARK_MENUP__MSG, HP_EDIT_ENHPRINT) ; --------------------------------------------------------------------------- defproc PopupMenuItemsOutsideMark if marktype() & QueryDirectMarkActions() then miamark = '' else miamark = 'DISABLED' endif DefMenuItem( '', -- Copy mark '~Copy mark', 'CopyMark', COPY_MARK_MENUP__MSG, HP_EDIT_COPYMARK, miamark) DefMenuItem( '', -- Move mark MOVE_MARK_MENU__MSG, 'MoveMark', MOVE_MARK_MENUP__MSG, HP_EDIT_MOVE, miamark) DefMenuItem( '', -- Overlay mark OVERLAY_MARK_MENU__MSG, 'OverlayMark', OVERLAY_MARK_MENUP__MSG, HP_EDIT_OVERLAY, miamark) DefMenuItem( '', -- Adjust mark '~Adjust mark', 'AdjustMark', ADJUST_MARK_MENUP__MSG, HP_EDIT_ADJUST, miamark) DefMenuSep() -------------------- DefMenuItem( '', -- Unmark UNMARK_MARK_MENU__MSG, 'Unmark', UNMARK_MARK_MENUP__MSG, HP_EDIT_UNMARK) ; --------------------------------------------------------------------------- defproc PopupMenuItemsNoMark -- Disable menu items if cursor is on a space char ch = substr( textline( .line), .col, 1) fCurCharIsMarkable = (ch <> ' ' & .line) if fCurCharIsMarkable then miamarkable = '' else miamarkable = 'DISABLED' endif -- Disable menu items if clipboard is empty or file is not editable fPasteEnabled = (ClipCheck( format) & (format = 1024) & not (browse() | .readonly)) if fPasteEnabled then miapastable = '' else miapastable = 'DISABLED' endif DefMenuItem( '', -- Mark identifier MARK_TOKEN_MENU__MSG, 'MarkToken', MARK_TOKEN_MENUP__MSG, HP_POPUP_MARKTOKEN, miamarkable) DefMenuItem( '', -- Mark word MARK_WORD_MENU__MSG, 'MarkWord', MARK_WORD_MENUP__MSG, HP_POPUP_MARKWORD, miamarkable) DefMenuItem( '', -- Find identifier FIND_TOKEN_MENU__MSG, 'FindToken', FIND_TOKEN_MENUP__MSG, HP_POPUP_FINDTOKEN, miamarkable) DefMenuSep() -------------------- compile if WANT_TEXT_PROCS DefMenuItem( '', -- Mark sentence MARK_SENTENCE_MENU__MSG, 'MarkSentence', MARK_SENTENCE_MENUP__MSG, HP_POPUP_MARKSENTENCE) DefMenuItem( '', -- Mark paragraph MARK_PARAGRAPH_MENU__MSG, 'MarkParagraph', MARK_PARAGRAPH_MENUP__MSG, HP_POPUP_MARKPARAGRAPH) DefMenuSep() -------------------- compile endif -- WANT_TEXT_PROCS DefMenuItem( '', -- Reflow paragraph 'Refl~ow paragraph', 'ReflowPar2ReflowMargins', 'Reflow text from cursor to next empty line', HP_POPUP_REFLOW) DefMenuSep() -------------------- DefMenuItem( '', -- Toggle case of word 'Toggle ~case of word', 'CaseWord', 'Rotate case: lower -> mixed -> upper', HP_POPUP_UPCASEWORD, miamarkable) DefMenuItem( '', -- Uppercase word UPCASE_WORD_MENU__MSG, 'UppercaseWord', UPCASE_WORD_MENUP__MSG, HP_POPUP_UPCASEWORD, miamarkable) DefMenuItem( '', -- Lowercase word LOCASE_WORD_MENU__MSG, 'LowercaseWord', LOCASE_WORD_MENUP__MSG, HP_POPUP_LOCASEWORD, miamarkable) DefMenuSep() -------------------- DefMenuItem( '', -- Center line CENTER_LINE_MENU__MSG, 'CenterLine', CENTER_LINE_MENUP__MSG, HP_POPUP_CENTERLINE) DefMenuItem( '', -- Scroll to top TOP_LINE_MENU__MSG, 'NewTop', TOP_LINE_MENUP__MSG, HP_POPUP_TOP) DefMenuSep() -------------------- compile if POPUP_ENABLE_CASCADE -- Cascade menu are now replaced by inline menu items, because it doesnot work correctly: DefNextItemStartsSubMenu() DefMenuItem( 'popup_paste', -- Paste > PASTE_C_MENU__MSG, PASTE_C_MENUP__MSG , '', HP_EDIT_PASTEMENU, miapastable) DefMenuItem( 'popup_pastec', -- Paste PASTE_C_MENU__MSG''GetPasteMenuAccelString( 'Paste C'), 'Paste C', PASTE_C_MENUP__MSG, HP_EDIT_PASTEC, miapastable) DefMenuItem( 'popup_pastel', -- Paste lines PASTE_L_MENU__MSG''GetPasteMenuAccelString( 'Paste'), 'Paste', PASTE_L_MENUP__MSG, HP_EDIT_PASTE, miapastable) DefNextItemEndsSubMenu() DefMenuItem( 'popup_pasteb', -- Paste block PASTE_B_MENU__MSG''GetPasteMenuAccelString( 'Paste B'), 'Paste B', PASTE_B_MENUP__MSG, HP_EDIT_PASTEB, miapastable) compile else DefMenuItem( '', -- Paste PASTE_C_MENU__MSG''GetPasteMenuAccelString( 'Paste C'), 'Paste C', PASTE_C_MENUP__MSG, HP_EDIT_PASTEC, miapastable) DefMenuItem( '', -- Paste lines 'P~aste lines'GetPasteMenuAccelString( 'Paste'), 'Paste', PASTE_L_MENUP__MSG, HP_EDIT_PASTE, miapastable) DefMenuItem( '', -- Paste block PASTE_B_MENU__MSG''GetPasteMenuAccelString( 'Paste B'), 'Paste B', PASTE_B_MENUP__MSG, HP_EDIT_PASTEB, miapastable) compile endif ; --------------------------------------------------------------------------- ; These items are appended, except for .Tree files defproc PopupMenuItemsCommon CurMode = GetMode() -- Disable TagScan menu item if mode is not supported 'LinkVerify tags' -- Remains linked afterwards if leftstr( .filename, 1) = '.' then -- virtual file miatagssupported = 'DISABLED' elseif Tags_Supported( CurMode) then miatagssupported = '' else miatagssupported = 'DISABLED' endif -- Disable FindDef menu item if cursor is not on an identifier -- CurIdentifier() here would lead to crashes - by grep search with pos? ch = substr( textline( .line), .col, 1) fCurCharIsMarkable = (ch <> ' ' & .line) if fCurCharIsMarkable then miafinddefmode = '' else miafinddefmode = 'DISABLED' endif DefMenuSep() -------------------- DefMenuItem( '', -- Open extracted string 'Open extracted strin~g', 'Alt_1', 'Load file or URL under cursor', '') DefMenuSep() -------------------- DefMenuItem( '', -- Find definition for mode 'Find d~efinition', 'FindDef', '', '', miafinddefmode) DefMenuItem( '', -- Scan file for tags '~Scan file for tags' /*SCAN_TAGS_MENU__MSG*/, 'TagScan', SCAN_TAGS_MENUP__MSG, HP_SEARCH_TAGS, miatagssupported) if isadefc( 'PrefsPopupMenu') then DefMenuSep() -------------------- DefMenuItem( 'preferences', -- Preferences... 'Preferences~...', 'PrefsPopupMenu', 'Menus related to editor settings', '') endif ; --------------------------------------------------------------------------- ; Cascade menu is now replaced by inline menu items, because it doesnot ; work correctly: ; The frame around the submenu arrow is only painted after activating ; that menu item. Before that, one thinks that's a normal submenu item ; that won't execute something on selecting it. ; This is executed posted by popup.e:"defc MH_Popup". compile if POPUP_ENABLE_CASCADE defc AddCascadePopupMenu -- Define that only for the Nomark popup menu if marktype() = '' then KeyPath = "\NEPMD\User\Mark\DefaultPaste" DefaultPaste = QueryConfigKey( KeyPath) if DefaultPaste = 'C' then AlternatePaste = 'L' else AlternatePaste = 'C' endif if DefaultPaste = 'L' then -- arg for defc paste maybe 'C', 'B' or '' DefaultPaste = '' endif if AlternatePaste = 'L' then -- arg for defc paste maybe 'C', 'B' or '' AlternatePaste = '' endif if isadefc( 'CascadeMenu') then CascadeCmd = 'CascadeMenu' else CascadeCmd = 'Cascade_Menu' endif if DefaultPaste = 'C' then CascadeCmd' popup_paste popup_pastec' -- Paste cascade; default is Paste (character mark) elseif DefaultPaste = 'B' then CascadeCmd' popup_paste popup_pasteb' -- Paste cascade; default is Paste Block else CascadeCmd' popup_paste popup_pastel' -- Paste cascade; default is Paste Lines endif endif compile endif