How do I create and move graphics in an app?
There are many cases where you might want to create an app that allows the user to author content.
- Flowchart app
- Image annotation app
- Wireframing app
You can allow users to create and edit LiveCode controls within an app. In this lesson we will see how to create a very simple example of this type of app which you could use as a basis for a more complex app.
You can download the sample stack from this url: https://tinyurl.com/2p8ntdmu
The app consists of a single card containing
- group "templates"- graphic "Hexagon"
- graphic "Circle"
- graphic "Sqaure"
 
- button "Clear Canvas"
- group "Canvas"
- 2 line graphics
Creating graphics
The first step is to allow the user to add graphics to the canvas. Clicking on one of the template shapes will add the shape to the canvas.
Because the template graphics are grouped together we can add the code to the group script. Select the "templates" group, open the Script Editor and add this mouseUp handler.
on mouseUp
   createShape the short name of the target
end mouseUpWe use the target to check which template was actually clicked. This saves us from adding code in multiple places.
The createShape command is implemented on the Card Script, open the Card Script and add the command.
command createShape pShape
   copy graphic pShape of group "Templates" to group "Canvas"
   set the loc of it to the loc of group "Canvas"
end createShape- Make a copy of the template graphic in the "Canvas" group
- Place the new graphic at the center of the canvas
Switch to Run mode and try it.
 
Dragging graphics around the canvas
The next step is to allow the user to move the graphics they have created around the canvas. Again, becuase we have created the new graphics in the "Canvas" group we can add the code to the group script.
Open the Script Editor for the group and add the mouseDown handler.
on mouseDown
   grab the target
end mouseDownThe grab command causes an object to follow the movements of the mouse.
Switch to Run mode and try it.
 
Adding text to graphics
The next feature allows the user to set the text that is displayed on a graphic. Again we will add the code to the "canvas" group script, for this feature we will handle the mouseDoubleUp message
on mouseDoubleUp
   local tTarget
   put the name of the target into tTarget
   
   ask "Please enter the text to be displayed"
   if the result is not "Cancel" then
      set the name of tTarget to it
   end if
end mouseDoubleUp- Get the identifier of the graphic that was double clicked
- Allow the user to enter the text they want to display
- Set the name property of the graphic to the text entered by the user
Clearing the canvas
Finally we will add code to the "Clear Canvas" button to reset the canvas by deleting all the graphics that have been added.
Add a mouseUp handler to the "Clear Canvas" button
on mouseUp
   clearCanvas
end mouseUpAnd add the clearCanvas command to the Card Script
command clearCanvas
   repeat with x = the number of graphics of group "Canvas" down to 1
      delete graphic x of group "Canvas"
   end repeat
end clearCanvasNote that we repeat down through the graphics. Because we are referring to the graphics by number as we delete them the number of graphics changes, by counting down the graphic we are deleting will always exists.
Possible additional features
There are many ways you could expand this example to create a more fully featured application
- Automatically resize graphics or text to show all text
- Add color editiors
- Add lines between graphics
- Print the canvas
 
			
Matt Villion
Sample code does not download correctly.
Heather Laine
Hi Matt, you are correct, I see that while the code does download it has a lot of unwanted gibberish within the code. I'll get it cleaned up and re-uploaded.
Panos Merakos
Hello Matt,
Sample stack and URL are now updated.