Skip to content

Commit 9f583fb

Browse files
authored
Merge pull request #1048 from AllenInstitute/bugfix/1046-gui-popup-menu-length
Fix gui popup menu length
2 parents 87cffc1 + 37ecc6d commit 9f583fb

File tree

1 file changed

+93
-12
lines changed

1 file changed

+93
-12
lines changed

Packages/MIES/MIES_GuiPopupMenuExt.ipf

Lines changed: 93 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,15 @@
111111
/// If in the previous sub menu the number of letters determined for the last menu item is higher then for the first name component the higher amount is taken:
112112
/// e.g. Balalaika, Cembalo -> B .. C -> Bal .. C (because Alu were three letters)
113113

114-
static Constant NUM_SUBENTRIES = 30
115-
static Constant MAX_SUBMENUS = 10
114+
static Constant MAX_SUBMENUS = 12
116115
static StrConstant WAVE_NOTE_PROCNAME = "PROC"
117116
static StrConstant WAVE_NOTE_WINDOWNAME = "WINNAME"
118117
static StrConstant WAVE_NOTE_CTRLNAME = "CTRLNAME"
119118
static StrConstant MENUNAME_UNUSED = "*** bug, report to dev ***"
120119
static StrConstant MENU_DISABLE_SPECIAL = "\\M0"
121120
static StrConstant LSEP = ";"
122121

123-
/// @brief Menu definition templates for up to 10 sub menus.
122+
/// @brief Menu definition templates for up to MAX_SUBMENUS sub menus.
124123
/// The constant MAX_SUBMENUS stores the number of these definitions
125124
/// and must be updated if more definitions are added.
126125
///
@@ -317,6 +316,81 @@ Menu "PopupExt10", contextualmenu, dynamic
317316
End
318317
End
319318

319+
Menu "PopupExt11", contextualmenu, dynamic
320+
SubMenu PEXT_SubMenuName(0)
321+
PEXT_PopupMenuItems(0), /Q, ;
322+
End
323+
SubMenu PEXT_SubMenuName(1)
324+
PEXT_PopupMenuItems(1), /Q, ;
325+
End
326+
SubMenu PEXT_SubMenuName(2)
327+
PEXT_PopupMenuItems(2), /Q, ;
328+
End
329+
SubMenu PEXT_SubMenuName(3)
330+
PEXT_PopupMenuItems(3), /Q, ;
331+
End
332+
SubMenu PEXT_SubMenuName(4)
333+
PEXT_PopupMenuItems(4), /Q, ;
334+
End
335+
SubMenu PEXT_SubMenuName(5)
336+
PEXT_PopupMenuItems(5), /Q, ;
337+
End
338+
SubMenu PEXT_SubMenuName(6)
339+
PEXT_PopupMenuItems(6), /Q, ;
340+
End
341+
SubMenu PEXT_SubMenuName(7)
342+
PEXT_PopupMenuItems(7), /Q, ;
343+
End
344+
SubMenu PEXT_SubMenuName(8)
345+
PEXT_PopupMenuItems(8), /Q, ;
346+
End
347+
SubMenu PEXT_SubMenuName(9)
348+
PEXT_PopupMenuItems(9), /Q, ;
349+
End
350+
SubMenu PEXT_SubMenuName(10)
351+
PEXT_PopupMenuItems(10), /Q, ;
352+
End
353+
End
354+
355+
Menu "PopupExt12", contextualmenu, dynamic
356+
SubMenu PEXT_SubMenuName(0)
357+
PEXT_PopupMenuItems(0), /Q, ;
358+
End
359+
SubMenu PEXT_SubMenuName(1)
360+
PEXT_PopupMenuItems(1), /Q, ;
361+
End
362+
SubMenu PEXT_SubMenuName(2)
363+
PEXT_PopupMenuItems(2), /Q, ;
364+
End
365+
SubMenu PEXT_SubMenuName(3)
366+
PEXT_PopupMenuItems(3), /Q, ;
367+
End
368+
SubMenu PEXT_SubMenuName(4)
369+
PEXT_PopupMenuItems(4), /Q, ;
370+
End
371+
SubMenu PEXT_SubMenuName(5)
372+
PEXT_PopupMenuItems(5), /Q, ;
373+
End
374+
SubMenu PEXT_SubMenuName(6)
375+
PEXT_PopupMenuItems(6), /Q, ;
376+
End
377+
SubMenu PEXT_SubMenuName(7)
378+
PEXT_PopupMenuItems(7), /Q, ;
379+
End
380+
SubMenu PEXT_SubMenuName(8)
381+
PEXT_PopupMenuItems(8), /Q, ;
382+
End
383+
SubMenu PEXT_SubMenuName(9)
384+
PEXT_PopupMenuItems(9), /Q, ;
385+
End
386+
SubMenu PEXT_SubMenuName(10)
387+
PEXT_PopupMenuItems(10), /Q, ;
388+
End
389+
SubMenu PEXT_SubMenuName(11)
390+
PEXT_PopupMenuItems(11), /Q, ;
391+
End
392+
End
393+
320394
/// @brief Returns sub menu names for all PEXT sub menus
321395
/// This is called on each menu click/compilation for all dynamic defined Menus
322396
/// where PEXT_SubMenuName is used.
@@ -346,6 +420,8 @@ End
346420
/// This is called on each menu click/compilation for all dynamic defined Menus
347421
/// where PEXT_PopupMenuItems is used.
348422
///
423+
/// Callled very often (MAX_SUBMENUS^2/2).
424+
///
349425
/// @param subMenuNr number of current sub menu
350426
Function/S PEXT_PopupMenuItems(subMenuNr)
351427
variable subMenuNr
@@ -502,26 +578,32 @@ Function/WAVE PEXT_SplitToSubMenus(menuList[, method])
502578
WAVE/T/Z menuList
503579
variable method
504580

505-
variable subMenuCnt, beginitem, endItem, i, j
581+
variable subMenuCnt, beginitem, endItem, i, j, numPerSubEntry
506582
variable numItems, remainItems, menuPos, subIndex, subMenuLength
507583
string begEntry, endEntry, checkEntry
508584

509585
if(!WaveExists(menuList))
510586
return $""
511587
endif
512588

589+
numItems = DimSize(menuList, ROWS)
590+
591+
// we have up to MAX_SUBMENUS submenues
592+
// - more submenues with fewer entries are better than only a few ones with many entries
593+
numPerSubEntry = ceil(numItems / MAX_SUBMENUS / 10) * 10
594+
513595
method = ParamIsDefault(method) ? PEXT_SUBSPLIT_DEFAULT : method
514596

515597
if(method == PEXT_SUBSPLIT_DEFAULT)
516598
Sort/A menuList, menuList
517-
subMenuCnt = trunc(DimSize(menuList, ROWS) / NUM_SUBENTRIES) + 1
599+
subMenuCnt = trunc(DimSize(menuList, ROWS) / numPerSubEntry) + 1
518600
subMenuCnt = subMenuCnt > MAX_SUBMENUS ? MAX_SUBMENUS : subMenuCnt
519601

520602
Make/FREE/T/N=(subMenuCnt) splitMenu
521603

522604
for(i = 0; i < subMenuCnt; i++)
523-
beginItem = i * NUM_SUBENTRIES
524-
endItem = i == subMenuCnt - 1 ? DimSize(menuList, ROWS) - 1 : beginItem + NUM_SUBENTRIES - 1
605+
beginItem = i * numPerSubEntry
606+
endItem = i == subMenuCnt - 1 ? DimSize(menuList, ROWS) - 1 : beginItem + numPerSubEntry - 1
525607

526608
for(j = beginitem; j < enditem; j++)
527609
splitMenu[i] = AddListItem(menuList[j], splitMenu[i], ";", Inf)
@@ -531,19 +613,18 @@ Function/WAVE PEXT_SplitToSubMenus(menuList[, method])
531613
elseif(method == PEXT_SUBSPLIT_ALPHA)
532614
Sort/A menuList, menuList
533615

534-
numItems = DimSize(menuList, ROWS)
535616
Make/FREE/T/N=(MAX_SUBMENUS) splitMenu
536617
do
537618
remainItems = DimSize(menuList, ROWS) - menuPos
538-
if(remainItems < NUM_SUBENTRIES || subIndex == MAX_SUBMENUS - 1)
619+
if(remainItems < numPerSubEntry || subIndex == MAX_SUBMENUS - 1)
539620
subMenuLength = remainItems
540621
else
541622
begEntry = menuList[menuPos]
542-
endEntry = menuList[menuPos + NUM_SUBENTRIES - 1]
623+
endEntry = menuList[menuPos + numPerSubEntry - 1]
543624
if(!CmpStr(begEntry[0], endEntry[0]))
544-
subMenuLength = NUM_SUBENTRIES
625+
subMenuLength = numPerSubEntry
545626
else
546-
subMenuLength = NUM_SUBENTRIES - 1
627+
subMenuLength = numPerSubEntry - 1
547628
do
548629
subMenuLength--
549630
checkEntry = menuList[menuPos + subMenuLength]

0 commit comments

Comments
 (0)