Paso 10: El programa, parte 2
Ahora podemos definir los elementos de la GUI. En la parte superior del archivo "robot.rcp" tiene que haber una línea que contiene:#include "robot.h"
Sin esta linea el compilador no sustituye los nombres de los elementos de números de identificación.
La primera forma (página) en nuestro programa contiene 2 imágenes, algunas etiquetas y algunas áreas de texto. Las áreas de texto no deberían ser modificables por el usuario. No quiero que haya una frontera, y debería haber un botón que permite al usuario detener fácilmente el programa de actualización de la pantalla del sensor.
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
La segunda forma se utilizará para seleccionar los programas de demostración en el iRobot Create. Debe tener una etiqueta de texto explicativo, una lista de opciones posibles y un campo de texto (no editable) que mostrará una breve descripción de la versión parcial de programa seleccionado. También debe contener un título, pero sin bordes.
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
La forma final se utilizará para la creación de secuencias de comandos. Debe contener algunos botones que usar control de la escritura como un conjunto (como "Run Script" o "Eliminar Script"), así como botones para agregar comandos a la secuencia de comandos. Para separar estos 2 conjuntos de botones allí deben ser una línea divisoria (en este caso un mapa de bits). También debe haber un (otra vez, no editable) campo de texto que se mostrará los comandos en la secuencia de comandos, este campo de texto debe ir acompañado de una barra de desplazamiento. Como la última forma debe existir un título.
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
Cada formulario debe tener un menú. El menú permite al usuario seleccionar entre las formas y control comunicación con el 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
Necesitamos definir la pantalla de "acerca de".
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
Y por último, pero no menos importante, tenemos que definir todos los mapas de bits e iconos que se utilizarán en el programa. Usted puede notar que muchos de los mapas de bits definidos a continuación no se usan, ya que se utilizan en otros lugares en el programa.
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"