Skip to content

core.ui.menubar ​

This module provides a menu bar component for the terminal UI system.

TIP

To use this module, you need to import it first: import("core.ui.menubar")

NOTE

The UI module is primarily used for xmake's internal xmake f --menu menu-based visual configuration. It provides basic UI components that can also be used by users to implement their own terminal UIs.

The menubar module extends panel and provides menu bar display functionality.

  • Create a new menu bar instance

Function Prototype ​

API

lua
menubar:new(name: <string>, bounds: <rect>)

Parameter Description ​

ParameterDescription
nameRequired. Menu bar name string
boundsRequired. Menu bar bounds rectangle

Return Value ​

TypeDescription
menubarReturns a menu bar instance

Usage ​

Create a menu bar:

lua
import("core.ui.menubar")
import("core.ui.rect")

local menubar = menubar:new("menubar", rect{1, 1, 80, 1})
  • Get the title label

Function Prototype ​

API

lua
menubar:title()

Parameter Description ​

No parameters

Return Value ​

TypeDescription
labelReturns the title label instance

Usage ​

Access and customize the title label:

lua
local title = menubar:title()
title:text_set("My Application")
title:textattr_set("red bold")

Here is a complete menu bar usage example:

lua
import("core.ui.menubar")
import("core.ui.window")
import("core.ui.rect")
import("core.ui.application")

local demo = application()

function demo:init()
    application.init(self, "demo")
    self:background_set("blue")
    
    -- Create menu bar
    local menubar = menubar:new("menubar", rect{1, 1, self:width() - 1, 1})
    menubar:title():text_set("Xmake Demo Application")
    menubar:title():textattr_set("red bold")
    
    -- Create main window
    local win = window:new("main", rect{1, 2, self:width() - 1, self:height() - 2}, "Main Window")
    
    -- Add to application
    self:insert(menubar)
    self:insert(win)
    
    self._menubar = menubar
    self._win = win
end

function demo:on_resize()
    self._menubar:bounds_set(rect{1, 1, self:width() - 1, 1})
    self._win:bounds_set(rect{1, 2, self:width() - 1, self:height() - 2})
    application.on_resize(self)
end

function main(...)
    demo:run(...)
end