Stap 10: Het programma, deel 2
Nu kunnen we definiëren de GUI elementen. Aan de bovenkant van het "robot.rcp" bestand moet er een regel die bevat:#include "robot.h"
Zonder deze regel niet zou de compiler de elementnamen voor id-nummers vervangen.
De eerste vorm (pagina) in ons programma zal bevatten 2 foto's, sommige labels en sommige tekstgebieden. De tekstgebieden mag niet worden bewerkt door de gebruiker. Ik wil niet dat er een grens, en er moet een knop waarmee de gebruiker gemakkelijk voorkomen dat de sensor weergave bijwerken.
FORM ID FormMain AT (0 0 160 160) NOFRAMEUSABLEMENUID MainMenu BEGIN TITLE "iRobot Status" FORMBITMAP AT (20 25) BITMAP PicRobot FORMBITMAP AT (110 21) BITMAP PicWall_ LABEL "Program:" AUTOID AT (10 120) FONT 0 FIELD ID FldProg AT (80 PREVTOP 70 AUTO) NONEDITABLE UNDERLINED MAXCHARS 15 LABEL "Voltage:" AUTOID AT (10 PREVBOTTOM+1) FONT 0 FIELD ID FldVoltage AT (80 PREVTOP 70 AUTO) NONEDITABLE UNDERLINED MAXCHARS 15 BUTTON "Stop" ID BtnDisconnect AT (110 102 AUTO AUTO) END
Het tweede formulier worden gebruikt voor het selecteren van de Demo programma's op de iRobot Create. Het moet een beschrijvende tekstlabel, een lijst van mogelijke opties en een (niet-bewerkbare) text-veld dat wordt weergegeven met een korte beschrijving van de geselecteerde demo. Het dient ook een titel, maar geen rand.
FORM ID FormSelect AT (0 0 160 160) NOFRAMEUSABLEMENUID MainMenu BEGIN TITLE "Select Script" LABEL "Select a demo program or Macro:" AUTOID AT (5 20) FONT 0 LIST "Cover" "Cover and Dock" "Spot Cover" "Mouse" "Figure Eight" "Wimp" "Home" "Tag" "Pachelbel" "Banjo" ID SelScript AT (30 35 90 1) FONT 0 VISIBLEITEMS 5 FIELD ID FldDescription AT (5 PREVBOTTOM+8 145 60) FONT 0 NONEDITABLE UNDERLINED MULTIPLELINES MAXCHARS 255 END
De definitieve vorm zal worden gebruikt voor het maken van scripts. Het moet aantal knoppen waarmee het script als een geheel (zoals 'Script uitvoeren' of 'Verwijderen Script'), evenals knoppen controle opdrachten toe te voegen aan het script bevatten. Om te scheiden van deze 2 moet soorten knoppen er zijn een scheidslijn (in dit geval een bitmap). Er moet ook een (nogmaals, niet-bewerkbare) tekstveld dat de opdrachten in het script staat dit tekstveld verschijnt moet vergezeld gaan van een schuifbalk weergegeven. Als het laatste formulier moet er een titel.
FORM ID FormMacro AT (0 0 160 160) NOFRAMEUSABLEMENUID MainMenu BEGIN TITLE "Create/Edit Macro" BUTTON "Send to robot" ID BtnSend AT (6 20 AUTO AUTO) BUTTON "Clear" ID BtnClear AT (PREVRIGHT+3 PREVTOP AUTO AUTO) BUTTON "Delete" ID BtnDel AT (PREVRIGHT+3 PREVTOP AUTO AUTO) FORMBITMAP AT (0 35) BITMAP PicBar BUTTON "Up" ID BtnUp AT (23 45 13 13) NOFRAME GRAPHICAL BITMAPID PicUp BUTTON "Left" ID BtnLeft AT (PREVLEFT-15 PREVTOP 13 13) NOFRAME GRAPHICAL BITMAPID PicLeft BUTTON "Right" ID BtnRight AT (PREVRIGHT+17 PREVTOP 13 13) NOFRAME GRAPHICAL BITMAPID PicRight BUTTON "Down" ID BtnDown AT (PREVLEFT-15 PREVBOTTOM+4 13 13) NOFRAME GRAPHICAL BITMAPID PicDown BUTTON "Clock" ID BtnClock AT (68 45 18 18) NOFRAME GRAPHICAL BITMAPID PicClock BUTTON "CClock" ID BtnCClock AT (PREVRIGHT+7 PREVTOP 18 18) NOFRAME GRAPHICAL BITMAPID PicCClock BUTTON "Pause" ID BtnPause AT (130 PREVTOP 18 18) NOFRAME GRAPHICAL BITMAPID PicPause LABEL "Plus" AUTOID AT (46 70) FONT 0 BUTTON "1" ID BtnP1 AT (PREVRIGHT PREVTOP 10 11) RECTFRAME BUTTON "2" ID BtnP2 AT (PREVRIGHT+1 PREVTOP 10 11) RECTFRAME BUTTON "4" ID BtnP4 AT (PREVRIGHT+1 PREVTOP 10 11) RECTFRAME BUTTON "8" ID BtnP8 AT (PREVRIGHT+1 PREVTOP 10 11) RECTFRAME BUTTON "16" ID BtnP16 AT (PREVRIGHT+1 PREVTOP 15 11) RECTFRAME LABEL "seconds" AUTOID AT (PREVRIGHT+2 PREVTOP) FONT 0 FORMBITMAP AT (0 PREVBOTTOM+5) BITMAP PicBar FIELD ID FldScript AT (5 90 135 70) FONT 0 NONEDITABLE UNDERLINED MULTIPLELINES MAXCHARS 500 HASSCROLLBAR SCROLLBAR ID SclScript AT (PREVRIGHT+5 PREVTOP 7 PREVHEIGHT) VALUE 0 MIN 0 MAX 8 PAGESIZE 1 END
Elk formulier moet een menu. Het menu kan de gebruiker om te kiezen tussen de formulieren en de mededeling van de controle met de robot.
MENU ID MainMenu BEGIN PULLDOWN "Main" BEGIN MENUITEM "Status" ID MnuStatus "S" MENUITEM "Scripts" ID MnuScript "I" MENUITEM "Edit Macros" ID MnuMacro "M" END PULLDOWN "Robot" BEGIN MENUITEM "Connect" ID MnuConnect "C" MENUITEM "Disconnect" ID MnuDisconnect "D" MENUITEM SEPARATOR MENUITEM "Run" ID MnuRun "R" MENUITEM "Stop" ID MnuStop "O" END PULLDOWN "Help" BEGIN MENUITEM "Help" ID MnuHelp "H" MENUITEM "About" ID MnuAbout "A" END END
We moeten definiëren het "about" scherm.
ALERT ID AboutAlert INFORMATIONBEGIN TITLE "About iRobot" MESSAGE "A program designed to communicate with an iRobot Create\n" \ "------------------\n"\ "By: Tristan Losier\n"\ "Released under the GPL\n"\ "------------------\n"\ "iRobot is a registered trademark of the iRobot Corporation" BUTTONS "Ok" END
En last but not least moeten we alle bitmaps en pictogrammen die zal worden gebruikt in het programma definiëren. Je kan merken dat veel van de hieronder omschreven bitmaps worden niet gebruikt hierboven, dat is omdat ze elders in het programma worden gebruikt.
BITMAP ID PicBar "images/bar.bmp" BITMAP ID PicRobot "images/irobot.bmp" BITMAP ID PicWall_ "images/wall_.bmp" BITMAP ID PicCliff "images/sensors/cliff.bmp" BITMAP ID PicWhealL "images/sensors/lwheal.bmp" BITMAP ID PicWhealR "images/sensors/rwheal.bmp" BITMAP ID PicBumpL "images/sensors/bumpl.bmp" BITMAP ID PicBumpR "images/sensors/bumpr.bmp" BITMAP ID PicWall "images/sensors/wall.bmp" BITMAP ID PicUp "images/buttons/up.bmp" BITMAP ID PicDown "images/buttons/down.bmp" BITMAP ID PicLeft "images/buttons/left.bmp" BITMAP ID PicRight "images/buttons/right.bmp" BITMAP ID PicClock "images/buttons/clock.bmp" BITMAP ID PicCClock "images/buttons/cclock.bmp" BITMAP ID PicPause "images/buttons/pause.bmp" ICON "robot.bmp" SMALLICON "robotsmall.bmp"