"Simple" Portrait Catalog

I’m trying to create a picture seating chart for students in my classes. I would like to be able to…

…have students “assigned” to a specific “seat” in the chart, where the student picture will always display in a specific picture placeholder on a form.
…easily be able to “switch seats” by simply changing a seat assignment in the student’s record.

I’ve looked at Panorama X Help and ImageLog in the Database Exchange but can’t figure out how to apply it to this situation.

Could someone point me in the right direction code wise, at particular training videos or particular places on the forum or in Help? (Sorry if this is straightforward and I’m being dense.)

I’ve just completed a project like this but mapping sculptures, not students.

Assume you’ve made a database with a record for each student.

Assume you’ve put a uniquely named jpeg of a photo of each student in a folder. In the database add a field containing these jpeg names so each matches one student.

Create a form containing a single data tile, 142px wide by 190px high.

Inside the data tile place an ImageDisplayObject which must be completely inside the tile, but as big as possible. Leave a little space in the tile below the IDO if you want to show the student’s name, seat number etc.

In the IDO formula pane add a formula to access the student jpegs. For example, if the field containing the jpegname is called “JPEGname”, and the jpegs are in a folder on the desktop named “StudentPix”,


In the data tile below the IDO, you can add a TextDisplayObject containing the student name field name and seat number field in the TDO’s formula pane.

The resolution of output of small photos is poor in Panorama when previewed and printed, which Jim says can’t be helped, so I’ve settled on 16 per page as the minimum size required for reasonably easy image recognition.

You should be able to output 16 tiles per page scaled at 100% (I’m using A4 paper size, close to your letter size, but some minor fiddling with the pixel dimensions of the data tile may be necessary for you to output 16 images, 4 rows by 4 columns) using preview, print or printtopdf. Incidentally, the tile contents will automatically repeat itself on the page when previewed or output.

To allow you to switch student seats, add a field containing seat numbers (perhaps 1,2, 3 etc) or addresses (like 1A, 1B, 1C, 2A, 2B etc) to output in the order you want after sorting this field. You can control the output order of the columns using this section of the form properties panel:

CleanShot 2022-09-22 at 16.54.05@2x

Wow. That was a great help, and within short order, I was able to create a report that gets very close to a seating chart.

However, I would like the picture seating chart to be interactive within panorama so that, ultimately, I can take attendance right in Panaroma by something as simple as clicking on their picture, or clicking something like an “Absent” button beside their picture, that would ultimately connect to a related attendance database that creates a record for each student absence.

For now, I’m looking for a way to generate a seating chart within Panorama maybe in a form.

That’s right. Consider using a view-as-list form or else a regular form containing a matrix. The matrix may be the way to go.

Thanks. I’m having some difficulty in getting a “live grid” of portraits to display in a form using a MatrixObject. I tried starting with the Matrix Constructor but hit a dead end. I’ll need to spend some time with the “in-depth pages” at the bottom of “Displaying Data in a Gridin Help. I probably will need to watch the Matrix Objects module in the Intensive Training Course as well.

Long ago, at Cricket Software, the support for their graph/chart program would get calls asking how to do something. The humor was, though the chart was only two-dimensional (1980’s technology) the user would ask how to make a chart - with a very reasonable sounding description of what they wanted - but when you got into the making of it, you realized it needed three dimensions.

In a similar way, I was thinking how cool it would be to move students around that seating chart with simply a click-n-drag. The first half would be simple as Panorama has had the ability (it knows the starting coordinates and ending coordinates) for years.

Then I considered … The Rest of the Story. Where do you put the student who has to relocate because another student was put in his/her chair? You can’t just swap them because that’s a major assumption. Or is it? At first I imagined a “holding Cell” - a place where the removed student would be displayed until you move their image to its new location - possibly requiring yet another relocation if it also goes to a seat that was already occupied.

But - all that means is that Student B - after you’ve moved Student A to Student B’s seat - has to be somewhere. And Student A’s original seat is now empty. So why not use the vacated seat of Student A for the “holding” seat for Student B?

Is it less confusing to move students to a holding area and from there to their new seat - perhaps triggering the previous occupant to then move to the holding area? Or does it take just as many clicks to simply swap seat locations if one student is moved to an already occupied seat?

It’s fun to think about.

Okay - thinking time during shower and shave. So there are three actions:

  1. adding a student
  2. moving a student
  3. removing a student (dropped out of class, etc.)

You want to display the student in a seating chart along with the student’s name and seat number.
As you’ve seen, you’ll need to review the Matrix documentation and also “Drag and Drop” information.

It is often more productive to learn those techniques with very simple examples - just to get the mechanics down - before implementing them in the full meal deal,

I suggest also adding a field for NickName. I’ve found it not uncommon for a student to use a different name on campus than what is listed in the formal enrollment list. The nickname can be conveniently displayed in parentheses after the first name by using Panorama’s Sandwich function

If I were to do this, my form would have a picture grid and a listbox with student names. To put a student in a seat, I’d drag their name from the list box to the appropriate grid square. If that square was already occupied, the previous occupant would just be removed and would have to be relocated by dragging their name from the listbox again.

If a student dropped out, That could be registered in a couple of ways. For example:

  1. just dragging their photo off the grid
  2. dragging their photo to a “Left Class” label would trigger some “removal” code, clearing their grid entry, and changing a status field in the class record to “left class” (with a date of departure)
  3. right-clicking on the photo would trigger a popup menu with choices like “Absent” and “Dropped Out”

I imagine the seating chart would display the photo as large as practical and perhaps the student list would include the tiniest (“little pinky nail” rather than a thumbnail) usable image next to their name.

Kinda fun to trick these things out. Afterward, it’s okay to move students around to play with it, watching the Panorama magic at work.

Remember, if you trigger actions with popup menu choices, I guarantee that one day you’ll select the wrong choice by accident - like picking Dropped Out instead of just Absent. So you’ll want to think about your “undo” process too. That doesn’t have to be complicated because the need for it would be so rare - right? It could be as simple as going to the datasheet view and fixing something there directly. More important is you consider how to correct “entry errors” so you have a plan rather than have an “Oh dear, what do I do now!” moment.

Yes, Panorama has a robust UnDo. But I’m thinking about some action that triggers additional cascading actions (via procedure) after it.