A lib. é baseada em ideias do HTML e do GTK, começando pelo sistema de contêiner, tipo o do GTK, e da parte de HTML, com relação a responsividade.
A lib. ja possui recursos bastante avançados, com relação a geração de graficos e sistema de grids, com grid com filtro por coluna ou filtro global, paginação e etc.
A 'beleza' da interface é 100% customizável, por exemplo, trocar a cor do botão do grid, ou, da barra de menu do visualizador de PDF.
Toda a parte visual, foi 100% basead na ideia do bootstrap, estilo dos botoes, estilo dos menus e etc..., inclusive, o template padrão da MainUI é baseado em um template do bootstrap, cores, formatação dos botões e etc, a diferença, é que não existe bootstrap por traz ou html ou CSS... é tudo rodando nativo.
A lib foi desenvolvida em C com Wrapper para (x)Harbour, a lib utiliza o OpenGL para desenhar os botoes, text-box e tudo mais...., assim, existe uma mescla bastante complicada no meio...
Vamos para um pequeno código de exemplo, vamos criar a seguinte tela:
O código para desenhar tela é, um tanto estranho, mas simples de se entender, quando se conhece o conceito de containers
#include "MainUi.ch"
function start()
createUi()
return nil
function createUi()
local oApplication := nil
local oGridContainer := nil
local oContainerTopMenu := nil
local oContainerLeftMenu := nil
local oContainerDataContent := nil
local oButtonWidget := nil
oApplication := MainUi():New()
oApplication:BorderStyle(MAINUI_BORDER_NONE)
oApplication:WindowState(MAINUI_STATE_MAXIMIZED)
oContainerTopMenu := oApplication:AddContainer()
oGridContainer := oApplication:AddGridContainerBelow(oContainerTopMenu, 1, 2)
oContainerLeftMenu := oGridContainer:GetGridInstanceAt(1, 1)
oContainerDataContent := oGridContainer:GetGridInstanceAt(1, 2)
// Define o tamanho do container
oContainerTopMenu:SetMaximumHeight(08) // sempre em %
oContainerLeftMenu:SetMaximumWidth(13)
// Muda a cor do container do menu de cima
oContainerTopMenu:SetStyle("background", "77,116,150") // RGB[A]
// Muda a cor do menu lateral
oContainerLeftMenu:SetStyle("background", "183,200,165") // RGB[A]
// Adiciona a imagem do MainUI no top menu
oContainerTopMenu:AddMainUiLogo(MAINUI_POSITION_LEFT)
// Cria um botão
oButtonWidget := oApplication:CreateButton()
oButtonWidget:SetWidth(100)
oButtonWidget:SetHeight(60)
oButtonWidget:SetText("Clique aqui")
oButtonWidget:SetEvent({|| MainUI:MessageBox("Você clicou no botão", "Alerta") })
// Adiciona o botão bem no meio do container principal
oContainerDataContent:AddWidgetUsingFloatPosition(oButtonWidget, 50, 50)
oApplication:Start()
return nil
Mais alguns exemplos:
Como o sistema possui a ideia de ser responsivo:
O uso de memoria para essa minha aplicação de teste, é de apenas ( apenas ? ) 75mb...., visto a quantidade de coisa q tem e recursos, acho pouco...