Max Gui Example

lua-users home
wiki

The source code shown below illustrates the use of the BlitzLua function interface. Running it under BlitzLua produces the following output (depending on your platform - and currently still including any platform-specific problems):

blitzmax.import(brl.event);

blitzmax.import(brl.eventqueue);

blitzmax.import(brl.maxgui);

blitzmax.import(brl.pixmap);



--------------------------------------------------------------------------------

-- loadGuiFont                    Platform-independent "loadGuiFont" function --

--------------------------------------------------------------------------------



  function loadGuiFont(FontName, FontSize, isBold, isItalic, isUnderlined)

    if (blitzmax.Platform ~= "Win32") then

      FontSize = math.floor(FontSize * 1.32);

    end;

    return brl.maxgui.loadGuiFont(FontName, FontSize, isBold, isItalic, isUnderlined);

  end;



--******************************************************************************

--*                                                                            *

--*                                Main Program                                *

--*                                                                            *

--******************************************************************************



--**** provide a few application-specific definitions ****



  local Title    = "MaxGUI_00";

  local Subtitle = "very first experiments with MaxGUI and Lua";



--**** load some application-specific images ****



  local Icon = loadPixmap("Lua-Logo.png");

--  Icon = maskPixmap(Icon, 212,208,200);    -- does not work

  if (Icon == nil) then error("unable to load 'Lua-Logo.png'"); end;



  local sunkenLine = loadPixmap("sunkenLine.png");

  if (sunkenLine == nil) then error("unable to load 'sunkenLine.png'"); end;



--**** load any application-specific fonts ****



  local TitleFont    = loadGuiFont("Arial", 12, true, true, false);

  local SubtitleFont = loadGuiFont("Arial",  9, true, false,false);

  local TextFont     = loadGuiFont("Arial",  8, false,false,false);

  local BoldFont     = loadGuiFont("Arial",  8, true, false,false);

  if (TitleFont == nil) or (SubtitleFont == nil) or (TextFont == nil) or (BoldFont == nil) then

    error("unable to load all requested fonts");

  end;



--**** setup the application window ****



  local Window = createWindow(Title.." - "..Subtitle, 20,20, 320,240, nil,

    WINDOW_TITLEBAR + WINDOW_RESIZABLE + WINDOW_CLIENTCOORDS); -- + WINDOW_STATUS);

    setMinWindowSize(Window, 320,240);



    local IconView = createPanel(2,4, 32,32, Window);

      setPanelPixmap (IconView, Icon, PANELPIXMAP_CENTER);

      setGadgetLayout(IconView, EDGE_ALIGNED,0,EDGE_ALIGNED,0);

    local TitleLabel = createLabel(Title, 36,2, 282,18, Window, LABEL_RIGHT);

      setGadgetFont  (TitleLabel,TitleFont);

      setGadgetLayout(TitleLabel, 0,EDGE_ALIGNED,EDGE_ALIGNED,0);

    local SubtitleLabel = createLabel(Subtitle, 36,22, 282,16, Window, LABEL_RIGHT);

      setGadgetFont  (SubtitleLabel,SubtitleFont);

      setGadgetLayout(SubtitleLabel, 0,EDGE_ALIGNED,EDGE_ALIGNED,0);

    local UpperSeparator = createPanel(2,40, 316,2, Window);

      setPanelPixmap (UpperSeparator, sunkenLine, PANELPIXMAP_TILE);

      setGadgetLayout(UpperSeparator, EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,0);

    local ClientArea = createTextArea(2,44, 316,174, Window, TEXTAREA_READONLY);

      setGadgetLayout(ClientArea, EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED);

      setGadgetColor (ClientArea, 128,128,128, true)

    local LowerSeparator = createPanel(2,220, 316,2, Window);

      setPanelPixmap (LowerSeparator, sunkenLine, PANELPIXMAP_TILE);

      setGadgetLayout(LowerSeparator, EDGE_ALIGNED,EDGE_ALIGNED,0,EDGE_ALIGNED);

    local Statusbar = createLabel("(no special action required)", 2,224, 316,18, Window);

      setGadgetFont  (Statusbar,TextFont);

      setGadgetLayout(Statusbar, EDGE_ALIGNED,EDGE_ALIGNED,0,EDGE_ALIGNED);

--  setStatusText(Window, "(no special action required)");

  showGadget(Window);



--**** handle any incoming events... ****



  while true do

    waitEvent();

    if (EventId() == EVENT_WINDOWCLOSE) then break; end;

  end;


The following output

is produced by the script shown below (which currently crashes under Linux):

blitzmax.import(brl.event);

blitzmax.import(brl.eventqueue);

blitzmax.import(brl.maxgui);

blitzmax.import(brl.pixmap);



--------------------------------------------------------------------------------

-- loadGuiFont                    Platform-independent "loadGuiFont" function --

--------------------------------------------------------------------------------



  function loadGuiFont(FontName, FontSize, isBold, isItalic, isUnderlined)

    if (blitzmax.Platform ~= "Win32") then

      FontSize = math.floor(FontSize * 1.32);

    end;

    return brl.maxgui.loadGuiFont(FontName, FontSize, isBold, isItalic, isUnderlined);

  end;



--******************************************************************************

--*                                                                            *

--*                                Main Program                                *

--*                                                                            *

--******************************************************************************



--**** provide a few application-specific definitions ****



  local Title    = "MaxGUI_01";

  local Subtitle = "displays several System and Environment Parameters";



--**** load some application-specific images ****



  local Icon = loadPixmap("Lua-Logo.png");

--  Icon = maskPixmap(Icon, 212,208,200);    -- does not work

  if (Icon == nil) then error("unable to load 'Lua-Logo.png'"); end;



  local sunkenLine = loadPixmap("sunkenLine.png");

  if (sunkenLine == nil) then error("unable to load 'sunkenLine.png'"); end;



--**** load any application-specific fonts ****



  local TitleFont    = loadGuiFont("Arial", 12, true, true, false);

  local SubtitleFont = loadGuiFont("Arial",  9, true, false,false);

  local TextFont     = loadGuiFont("Arial",  8, false,false,false);

  local BoldFont     = loadGuiFont("Arial",  8, true, false,false);

  if (TitleFont == nil) or (SubtitleFont == nil) or (TextFont == nil) or (BoldFont == nil) then

    error("unable to load all requested fonts");

  end;



--**** setup the application window ****



  local Window = createWindow(Title.." - "..Subtitle, 20,20, 400,300, nil,

    WINDOW_TITLEBAR + WINDOW_RESIZABLE + WINDOW_CLIENTCOORDS); -- + WINDOW_STATUS);

    setMinWindowSize(Window, 400,300);



    local IconView = createPanel(2,4, 32,32, Window);

      setPanelPixmap (IconView, Icon, PANELPIXMAP_CENTER);

      setGadgetLayout(IconView, EDGE_ALIGNED,0,EDGE_ALIGNED,0);

    local TitleLabel = createLabel(Title, 36,2, 362,18, Window, LABEL_RIGHT);

      setGadgetFont  (TitleLabel,TitleFont);

      setGadgetLayout(TitleLabel, 0,EDGE_ALIGNED,EDGE_ALIGNED,0);

    local SubtitleLabel = createLabel(Subtitle, 36,22, 362,16, Window, LABEL_RIGHT);

      setGadgetFont  (SubtitleLabel,SubtitleFont);

      setGadgetLayout(SubtitleLabel, 0,EDGE_ALIGNED,EDGE_ALIGNED,0);

    local UpperSeparator = createPanel(2,40, 396,2, Window);

      setPanelPixmap (UpperSeparator, sunkenLine, PANELPIXMAP_TILE);

      setGadgetLayout(UpperSeparator, EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,0);

    local ClientArea = createTextArea(2,44, 396,234, Window, TEXTAREA_READONLY);

      setGadgetLayout(ClientArea, EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED,EDGE_ALIGNED);

      setTextAreaTabs(ClientArea, 10);

    local LowerSeparator = createPanel(2,280, 396,2, Window);

      setPanelPixmap (LowerSeparator, sunkenLine, PANELPIXMAP_TILE);

      setGadgetLayout(LowerSeparator, EDGE_ALIGNED,EDGE_ALIGNED,0,EDGE_ALIGNED);

    local Statusbar = createLabel("(no special action required)", 2,284, 396,18, Window);

      setGadgetFont  (Statusbar,TextFont);

      setGadgetLayout(Statusbar, EDGE_ALIGNED,EDGE_ALIGNED,0,EDGE_ALIGNED);

--  setStatusText(Window, "(no special action required)");

  showGadget(Window);



--**** fill "ClientArea" with some information ****



  addTextAreaText(ClientArea,"Lua:\n");

    formatTextAreaText(ClientArea, 0,0,0, TEXTFORMAT_BOLD, 0,1, TEXTAREA_LINES);

  addTextAreaText(ClientArea,"  Version:\t".._VERSION.."\n");

  addTextAreaText(ClientArea,"  Arguments:\t");

    if (#ArgList == 0) then

      addTextAreaText(ClientArea,"(none)\n");

    else

      addTextAreaText(ClientArea,"\n");

      for i,Value in ipairs(ArgList) do

        addTextAreaText(ClientArea,"    "..i..":\t\""..Value.."\"\n");

      end;

    end;

  addTextAreaText(ClientArea,"\n");

  addTextAreaText(ClientArea,"BlitzMAX:\n");

    formatTextAreaText(ClientArea, 0,0,0, TEXTFORMAT_BOLD,

      TextAreaLen(ClientArea,TEXTAREA_LINES)-2,1, TEXTAREA_LINES);

  addTextAreaText(ClientArea,"  AppDir:\t\""..blitzmax.AppDir.."\"\n");

  addTextAreaText(ClientArea,"  AppFile:\t\""..blitzmax.AppFile.."\"\n");

  addTextAreaText(ClientArea,"  LaunchDir:\t\""..blitzmax.LaunchDir.."\"\n");

  addTextAreaText(ClientArea,"\n");

  addTextAreaText(ClientArea,"System:\n");

    formatTextAreaText(ClientArea, 0,0,0, TEXTFORMAT_BOLD,

      TextAreaLen(ClientArea,TEXTAREA_LINES)-2,1, TEXTAREA_LINES);

  addTextAreaText(ClientArea,"  Platform:\t\""..blitzmax.Platform.."\"\n");

  addTextAreaText(ClientArea,"  Date:\t\""..brl.system.currentDate().."\"\n");

  addTextAreaText(ClientArea,"  Time:\t\""..brl.system.currentTime().."\"\n");

  addTextAreaText(ClientArea,"\n");

  addTextAreaText(ClientArea,"Display:\n");

    formatTextAreaText(ClientArea, 0,0,0, TEXTFORMAT_BOLD,

      TextAreaLen(ClientArea,TEXTAREA_LINES)-2,1, TEXTAREA_LINES);

    local Display = Desktop();

  addTextAreaText(ClientArea,"  Geometry:\t"..GadgetWidth(Display).."x"..

    GadgetHeight(Display).."+"..GadgetX(Display).."+"..GadgetY(Display).."\n");



--**** handle any incoming events... ****



  while true do

    waitEvent();

    if (EventId() == EVENT_WINDOWCLOSE) then break; end;

  end;



--**** ...and - finally - close the application window ****



freeGadget(Window);

--AndreasRozek


RecentChanges · preferences
edit · history
Last edited May 18, 2007 6:10 am GMT (diff)