Documentation/Source example
Example source

samples/basic/MainMenuManager All-In-One.js

window.DefineScript('MainMenuManager All-In-One', { author: 'YBStone / T.P Wang / marc2003' });
include('docs/Flags.js');
include('docs/Helpers.js');

const img = gdi.Image(`${fb.ComponentPath}samples/basic/images/cog.png`);

function on_paint(gr) {
    gr.DrawImage(img, 0, 0, img.Width, img.Height, 0, 0, img.Width, img.Height);
}

function on_mouse_lbtn_up(x, y) {
    if (x > 0 && x < img.Width && y > 0 && y < img.Height) {
        menu();
    }
}

function menu() {
    let basemenu = window.CreatePopupMenu();
    let contextman = fb.CreateContextMenuManager();
    contextman.InitNowPlaying();
    
    let child1 = window.CreatePopupMenu(); //File

    let child2 = window.CreatePopupMenu(); //Edit

    let child3 = window.CreatePopupMenu(); //View

    let child4 = window.CreatePopupMenu(); //Playback

    let child5 = window.CreatePopupMenu(); //Library

    let child6 = window.CreatePopupMenu(); //Help

    let child7 = window.CreatePopupMenu(); //Now playing

    
    let menuman1 = fb.CreateMainMenuManager();
    let menuman2 = fb.CreateMainMenuManager();
    let menuman3 = fb.CreateMainMenuManager();
    let menuman4 = fb.CreateMainMenuManager();
    let menuman5 = fb.CreateMainMenuManager();
    let menuman6 = fb.CreateMainMenuManager();
    
    // MF_STRING is defined in docs/Flags.js

    child1.AppendTo(basemenu, MF_STRING, 'File');
    child2.AppendTo(basemenu, MF_STRING, 'Edit');
    child3.AppendTo(basemenu, MF_STRING, 'View');
    child4.AppendTo(basemenu, MF_STRING, 'Playback');
    child5.AppendTo(basemenu, MF_STRING, 'Library');
    child6.AppendTo(basemenu, MF_STRING, 'Help');
    basemenu.AppendMenuSeparator();
    child7.AppendTo(basemenu, MF_STRING, 'Now Playing');
    
    menuman1.Init('file');
    menuman2.Init('edit');
    menuman3.Init('View');
    menuman4.Init('playback');
    menuman5.Init('library');
    menuman6.Init('help');
    
    menuman1.BuildMenu(child1, 1, 200);
    menuman2.BuildMenu(child2, 201, 200);
    menuman3.BuildMenu(child3, 401, 200);
    menuman4.BuildMenu(child4, 601, 300);
    menuman5.BuildMenu(child5, 901, 300);
    menuman6.BuildMenu(child6, 1201, 100);
    
    contextman.InitNowPlaying();
    contextman.BuildMenu(child7, 1301);
    const ret = basemenu.TrackPopupMenu(0, 0);

    if (ret >= 1 && ret < 201) {
        menuman1.ExecuteByID(ret - 1);
    }
    else if (ret >= 201 && ret < 401) {
        menuman2.ExecuteByID(ret - 201);
    }
    else if (ret >= 401 && ret < 601) {
        menuman3.ExecuteByID(ret - 401);
    }
    else if (ret >= 601 && ret < 901) {
        menuman4.ExecuteByID(ret - 601);
    }
    else if (ret >= 901 && ret < 1201) {
        menuman5.ExecuteByID(ret - 901);
    }
    else if (ret >= 1201 && ret < 1301) {
        menuman6.ExecuteByID(ret - 1201);
    }
    else if (ret >= 1301) {
        contextman.ExecuteByID(ret - 1301);
    }
}