In Blockpad, frames are the places you do work in. The 3 basic frames are reports, spreadsheets, and 2D canvas.
On the left side of any Blockpad window, there is a list of the top level frames in that file. These top level frames provide the basic organization for the file, and together contain everything in the file. You can think of them like sheets in a spreadsheet program.
Frames don't have to be top level though. In Blockpad, you can insert frames into other frames, depending on the type of each.
For example, tables and drawings are subframes inside of a report, and multiline cells are subframes inside of a table or spreadsheet.
Referencing values between frames
Information can be shared between frames through formulas/dynamic equations. If there's a value defined in one frame, you can reference it in another frame.
It isn't necessary to understand the value container system in Blockpad because you can always use copy reference or click on a value to reference it in a formula. However, it can be helpful to understand how the reference name system works, so a brief explanation is given here.
In Blockpad, values are stored in Value Containers. All frames and sections are value containers. When you create a value inside of a value container, the value is stored in that container.
Value containers can also hold more value containers inside, like how frames can be inside of frames.
To reference values from different value containers you need to specify the location of the value using the names of the value containers. A dot notation is used for this. Below is the basic layout to reference a value in a different container in the same file.
You can always use this full reference name to reference a value, but it isn't always necessary.
Directly after the "first shared parent container" is the typical place to start a reference, and it is always required to have at least that.
Let's break that down.
Every value has parent containers. These are the value container that hold the value, and the containers that hold that container, going up to a top level frame. So, if Value1 is in Table2 and Table2 is in Report4, then Report4 and Table2 are parent containers to Value1.
A shared parent container between a value and a formula is any container that holds both, even if there are some containers between. From the last example, if a different formula is in a multiline cell in Table2, then Table2 and Report4 are both shared parent containers.
Finally, the first shared parent container is the shared parent container closest to the values. In our example, Table2 is the first shared parent container.
If a value is defined in the same container, only ValueName is needed.
If a value is defined in a container below, then SubContainer and ValueName are needed.
If a value is defined in the container above, then only ValueName is needed.
If a value is defined in a different sub container under the same container then only SubContainer and ValueName are needed.
If a value is defined several sub containers below, then all of them must be named.
The multiline cell is not part of the reference name because it has capture values set to no.
If a value is defined in a different top level frame, then the full reference name must be used.
It's good to keep value containers in mind when naming new values, because duplicate names generate an error in Blockpad.
For example, children containers should not duplicate names from the parent. This will generate an error when referencing that value name from inside the child.
Most containers are "closed" by default. However, you can change a frame or section to be an "open container", so that the values inside are shared with the container above.
Solver sections and multiline cells are open containers by default.
Make a frame or section an "open container":
- Select the frame or section.
- Open the properties window.
- Under Object, change Capture Values from "yes" to "no".
If a top level frame is an open container, all of the values in that frame are shared with the whole file. If a sub container is open, then it's like the values in the sub container were stored in the container above.
Compare the two tables below. The first has Capture Values set to "yes", so when referencing the values from outside, the container must be specified.
The second table has Capture Values set to "no", so the values can be referenced in the frame that contains it without specifying the table name.
Table of Contents
- Start a new document
- Dynamic equations
- Unit tracking
- Value names
- Reference unnamed values
- Text values
- Other value types
- Referencing a value
- Value name rules
- Names used multiple times
- Renaming and auto-updated references
- Built in values
- Visual editor
- Show steps and more
- Value formatting
- Date and time arithmetic
- Logic and Boolean values
- Matrices and arrays
- Enter an array or matrix
- Array names
- Matrix calculations
- Arrays - more than just numbers
- Array formulas in spreadsheets
- Array parentheses lookup
- Advanced array functions
- Complex numbers
- Spreadsheet in a file
- Sort and filter
- Conditional formatting
- Blockpad specific features
- Open a CSV file
- Mini-spreadsheets in a document
- Reports in a file
- Reference values from other reports in a file
- Header and footer
- Misc. document formatting
- Drawing inside a document or file
- Drawing objects
- Lines, points, and shapes
- Text labels
- Linear dimension labels
- Selecting multiple objects
- Ordering objects
- Using the point snapping
- Points you can snap to
- Horizontal and vertical from points
- Parallel or perpendicular lines
- Point snap options
- Transformations - resizing and moving
- Format drawings
- Keyboard input and canvas scales
- Top level frames
- Frames in Frames
- Value containers and location
- Frames and sections are containers
- Containers inside containers
- Dot notation to specify a value in a container
- Capture values
- What is a block?
- Block example
- Use the block results
- Block inputs
- View block as table
- Block instances and block definitions
- More examples
- Create a block
- When to make a block
- Make a block with Blockpad calculations
- Update a block definition
- Create a block using scripts
- Block tables
- Examples library
- Use library items in a document
- Use the long form library item name
- Assign a shortcut name to the library
- Include a library in a file
- Use a library number value
- Use a library function
- Use items in a library frame
- Use a library data table as function
- Use library blocks
- Core, built-in, and subscription libraries
- Create personal libraries
- Save items to your library
- Manage your library online
- Library subscriptions