TweetFollow Us on Twitter

January 94 - Using TGridView

Using TGridView

Bob Hablutzel

This is the second article in what will hopefully be a monthly series of technical question and answers on object oriented programming. The intent of this column is to go beyond simple answers. I intend to take a question, answer it, and then use that question as a springboard to a more general discussion on programming. I hope you find the results interesting.

The first articles will be culled from frequently asked questions on MacApp3Tech$, but I need your questions! I can be reached electronically at AppleLink: B.HABLUTZEL; by telephone at 708.328.0130; by fax at 708.328.2417 or by post at Bob Hablutzel, Hablutzel Consulting, 606 Asbury, Evanston, IL, USA 60202.

QI would like to display a list of strings. MacApp seems to have a class for doing just this (TTextListView), but I cannot figure out how to attach the TList to it. How is the list associated with the view?

AThe immediate answer is that the list in TList and the list in TTextListView are not the same list. Unfortunately, it appears from the names of the classes that they were designed to go together. While they do work nicely together, it is not as transparent as the names would imply.

To understand the problem, we need to take a step back and look at the overall view hierarchy. In general, the view classes are fully functional; you can instantiate them, and they will perform the actions you expect. The classes in the category include TView, TButton, TRadio, etc.

A few of the view classes, however, are really abstract superclasses, and are not meant to be instantiated. TGridView, TTextGridView, and TTextListView all fall into this category. They are there for you to customize, not for you to use as–is. Another important fact to realize is that the classes, unlike the toolbox List Manager, do not maintain the data for you; this is something you need to maintain in the subclass you create.

TGridView, the parent of these views, describes a basic cell-oriented view. It knows a great deal about displaying cell oriented data: how to select cells, how to scroll cells, managing different column widths and row heights. It explicitly does not, however, know how to draw any particular cell.

This makes some sense, from a framework perspective. There is really no way to predict what kind of cell you will be imaging, and therefore it makes sense to make no assumptions. This leaves the doors open to icon cells, text cells, numeric cells, or even a mixed bag of all of these.

What TGridView does define, however, is a routine that is called to draw a particular cell. This routine, TGridView::DrawCell(), takes two arguments. The first argument defines which cell is being imaged. The cell is passed as a point–like structure defining the column and row numbers of the cell. The second argument is the rectangle to draw into.

If you decide to implement a view based on TGridView, you need to override DrawCell. (You may not need to override any other method). In the DrawCell override, you would determine the data you are going to image (based on the column and row numbers passed in), and draw the data. Again, this data can be anything you choose; you are in complete control of the drawing.

The designers of MacApp realized, however, that text-only grids are very common and important grid types. In order to make it easier to support these grid types, they created the TTextGridView and TTextListView classes. In these classes, a text-only override of DrawCell has already been provided for you, and you therefore do not have to worry about the imaging of the data. You do, however, need to provide a means of obtaining the data.

TTextGridView defines a view that understands multiple–column grids of text. It defines a routine, GetText(), that takes two arguments. The first argument is the cell to return text for, and the second is the text being returned. By default, this routine returns an empty string, so if you include an unspecialized TTextGridView in your programs, you will have the right number of cells, but nothing in them. You need to provide an override to GetText to provide the text for the individual cells.

TTextListView defines a view that is subclassed from TTextGridView, and is specialized to handle single–column grids of text. It overrides the default definition of GetText, and in turns calls a more specialized TTextListView defined routine, GetItemText. This routine takes two arguments, much like TTextGridView::GetText, but the first argument is simply the row number, not the cell. This allows you to return the string based on row number only.1

If you subclass either of TTextGridView or TTextListView, you need to at least override GetText or GetItemText, respectively. This give the view some text to draw. Of course, you need to get the text from somewhere. You basically have three choices: calculate the data on the fly; store the data in the view; or store the data extermally to the view, most likely in a document. The override of GetText/GetItemText needs to know how to obtain the text given the cell/row number.

We have talked about displaying the data contained in a grid view, but there is another problem to be solved: defining the number of rows and columns. For some applications, this value can be pre-determined, and coded into your view creation (or set with your favorite view editor). However, for most applications the size of the grid needs to be determined at run time. TGridView provides a number of useful routines for handling this problem, such as InsRowFirst to insert rows, InsColFirst to insert columns, DelRowFirst to delete rows, and DelColFirst to delete columns.

Take, for example, the method TGridView::InsRowFirst. This routine creates a new row of cells for data to be displayed in at the beginning of the grid. Since grid views do not know about data, it has no way of affecting the data that corresponds to these cells. It is your responsibility to manipulate the data to correspond to the new cell state. (More properly, it is your responsibility to call this routines to manipulate the grid to correspond to changes in the data's state.) The changing of the data, and the changing of the display of the data, are two separate actions that need to take place simultaneously. (This is also true for the routines that TTextListView defines, such as InsItemFirst.)

It is important to stress that these routines manipulate cells, not data. By adding or deleting cells, you provide room for data to be displayed; you do not affect data in any way. It is worth noting at this point that, if your grid view changes size and lives in a scroller, you probably want to change the size determiner of the view to sizeVariable. If you don't, the view will not really change size when you add or delete rows, confusing the scroller.

There are a number of tricks you can use to make your life easier when managing the number of cells. For example, you could make the grid view object dependent upon the document it is associated with. Then, when the document data changes, the grid view can catch the change in an override of DoUpdate, and adjust the number of cells accordingly. Grid views provide a simple means of display cell-oriented data. You need to remember that it is your responsibility to define a means for them to obtain the data, and, in the case of direct TGridView subclasses, to display the data. You also need to tell the grid how large it is, so that it can display the right number of cells for your data. Forgetting either of these two actions will result in no data being displayed in the view.

1 This might seem like a trivial reason for an override, and by itself it would be. However, TTextListView also provides some functionality, such as type-selection, that make sense for single column grids but not for multiple–column grids.

 

Community Search:
MacTech Search:

Software Updates via MacUpdate

Google Earth 7.1.8.3036 - View and contr...
Google Earth gives you a wealth of imagery and geographic information. Explore destinations like Maui and Paris, or browse content from Wikipedia, National Geographic, and more. Google Earth combines... Read more
QuickBooks 16.1.11.1556 R12 - Financial...
QuickBooks helps you manage your business easily and efficiently. Organize your finances all in one place, track money going in and out of your business, and spot areas where you can save. Built for... Read more
FileZilla 3.24.0 - Fast and reliable FTP...
FileZilla (ported from Windows) is a fast and reliable FTP client and server with lots of useful features and an intuitive interface. Version 3.24.0: New The context menu for remote file search... Read more
Bookends 12.7.8 - Reference management a...
Bookends is a full-featured bibliography/reference and information-management system for students and professionals. Bookends uses the cloud to sync reference libraries on all the Macs you use.... Read more
Duplicate Annihilator 5.8.3 - Find and d...
Duplicate Annihilator takes on the time-consuming task of comparing the images in your iPhoto library using effective algorithms to make sure that no duplicate escapes. Duplicate Annihilator detects... Read more
BusyContacts 1.1.6 - Fast, efficient con...
BusyContacts is a contact manager for OS X that makes creating, finding, and managing contacts faster and more efficient. It brings to contact management the same power, flexibility, and sharing... Read more
MarsEdit 3.7.10 - Quick and convenient b...
MarsEdit is a blog editor for OS X that makes editing your blog like writing email, with spell-checking, drafts, multiple windows, and even AppleScript support. It works with with most blog services... Read more
BusyCal 3.1.4 - Powerful calendar app wi...
BusyCal is an award-winning desktop calendar that combines personal productivity features for individuals with powerful calendar sharing capabilities for families and workgroups. Its unique features... Read more
VirtualBox 5.1.14 - x86 virtualization s...
VirtualBox is a family of powerful x86 virtualization products for enterprise as well as home use. Not only is VirtualBox an extremely feature rich, high performance product for enterprise customers... Read more
Bookends 12.7.8 - Reference management a...
Bookends is a full-featured bibliography/reference and information-management system for students and professionals. Bookends uses the cloud to sync reference libraries on all the Macs you use.... Read more

Super Mario Run dashes onto Android in M...
Super Mario Run was one of the biggest mobile launches in 2016 before it was met with a lukewarm response by many. While the game itself plays a treat, it's pretty hard to swallow the steep price for the full game. With that said, Android users... | Read more »
WarFriends Beginner's Guide: How to...
Chillingo's new game, WarFriends, is finally available world wide, and so far it's a refreshing change from common mobile game trends. The game's a mix of tower defense, third person shooter, and collectible card game. There's a lot to unpack here... | Read more »
Super Gridland (Entertainment)
Super Gridland 1.0 Device: iOS Universal Category: Entertainment Price: $1.99, Version: 1.0 (iTunes) Description: Match. Build. Survive. "exquisitely tuned" - Rock Paper Shotgun No in-app purches, and no ads! | Read more »
Red's Kingdom (Games)
Red's Kingdom 1.0 Device: iOS Universal Category: Games Price: $4.99, Version: 1.0 (iTunes) Description: Mad King Mac has kidnapped your father and stolen your golden nut! Solve puzzles and battle goons as you explore and battle your... | Read more »
Turbo League Guide: How to tame the cont...
| Read more »
Fire Emblem: Heroes coming to Google Pla...
Nintendo gave us our first look at Fire Emblem: Heroes, the upcoming mobile Fire Emblem game the company hinted at last year. Revealed at the Fire Emblem Direct event held today, the game will condense the series' tactical RPG combat into bite-... | Read more »
ReSlice (Music)
ReSlice 1.0 Device: iOS Universal Category: Music Price: $9.99, Version: 1.0 (iTunes) Description: Audio Slice Machine Slice your audio samples with ReSlice and create flexible musical atoms which can be triggered by MIDI notes or... | Read more »
Stickman Surfer rides in with the tide t...
Stickson is back and this time he's taken up yet another extreme sport - surfing. Stickman Surfer is out this Thursday on both iOS and Android, so if you've been following the other Stickman adventures, you might be interested in picking this one... | Read more »
Z-Exemplar (Games)
Z-Exemplar 1.4 Device: iOS Universal Category: Games Price: $3.99, Version: 1.4 (iTunes) Description: | Read more »
5 dastardly difficult roguelikes like th...
Edmund McMillen's popular roguelike creation The Binding of Isaac: Rebirth has finally crawled onto mobile devices. It's a grotesque dual-stick shooter that tosses you into an endless, procedurally generated basement as you, the pitiable Isaac,... | Read more »

Price Scanner via MacPrices.net

Twelve South Releases RelaxedLeather Cases fo...
Inspired by the laid-back luxury of burnished leather boots and crafted in rich tones of taupe, herb and marsala, RelaxedLeather cases deliver smart, easy protection for the iPhone 7. Each genuine... Read more
Week’s Best Deal: New 2016 13-inch 2.0GHz Mac...
Amazon has the new 2016 13″ 2.0GHz non-Touch Bar MacBook Pros on sale for a limited time for $225 off MSRP including free shipping: - 13″ 2.0GHz MacBook Pro, Space Gray (MLL42LL/A): $1274.99 $225 off... Read more
Back in stock: Apple refurbished Mac minis fr...
Apple has Certified Refurbished Mac minis available starting at $419. Apple’s one-year warranty is included with each mini, and shipping is free: - 1.4GHz Mac mini: $419 $80 off MSRP - 2.6GHz Mac... Read more
Apple Ranked ‘Most Intimate Brand’
The top ranked ‘”intimate” brands continued to outperform the S&P and Fortune 500 indices in revenue and profit over the past 10 years, according to MBLM’s Brand Intimacy 2017 Report, the largest... Read more
B-Eng introduces SSD Health Check for Mac OS
Fehraltorf, Switzerland based independant Swiss company- B-Eng has announced the release and immediate availability of SSD Health Check 1.0, the company’s new hard drive utility for Mac OS X. As the... Read more
Apple’s Education discount saves up to $300 o...
Purchase a new Mac or iPad using Apple’s Education Store and take up to $300 off MSRP. All teachers, students, and staff of any educational institution qualify for the discount. Shipping is free: -... Read more
4-core 3.7GHz Mac Pro on sale for $2290, save...
Guitar Center has the 3.7GHz 4-core Mac Pro (MD253LL/A) on sale for $2289.97 including free shipping or free local store pickup (if available). Their price is a $710 savings over standard MSRP for... Read more
128GB Apple iPad Air 2, refurbished, availabl...
Apple has Certified Refurbished 128GB iPad Air 2s WiFis available for $419 including free shipping. That’s an $80 savings over standard MSRP for this model. A standard Apple one-year warranty is... Read more
13-inch 2.7GHz Retina MacBook Pro on sale for...
B&H Photo has the 2015 13″ 2.7GHz/128GB Retina Apple MacBook Pro on sale for $100 off MSRP. Shipping is free, and B&H charges NY tax only: - 13″ 2.7GHz/128GB Retina MacBook Pro (MF839LL/A): $... Read more
Laptop Market – Flight To Quality? – The ‘Boo...
Preliminary quarterly PC shipments data released by Gartner Inc. last week reveal an interesting disparity between sales performance of major name PC vendors as opposed to that of less well-known... Read more

Jobs Board

*Apple* macOS Systems Integration Administra...
…most exceptional support available in the industry. SCI is seeking an Junior Apple macOS systems integration administrator that will be responsible for providing Read more
*Apple* Retail - Multiple Positions- Deer Pa...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Retail - Multiple Positions - Apple,...
Job Description: Sales Specialist - Retail Customer Service and Sales Transform Apple Store visitors into loyal Apple customers. When customers enter the store, Read more
*Apple* Technician - nfrastructure (United S...
Let’s Work Together Apple Technician This position is based in Portland, ME Life at nfrastructure At nfrastructure, we understand that our success results from our Read more
*Apple* Mobile Master - Best Buy (United Sta...
**467692BR** **Job Title:** Apple Mobile Master **Location Number:** 000602-Columbia MO-Store **Job Description:** **What does a Best Buy Apple Mobile Master Read more
All contents are Copyright 1984-2011 by Xplain Corporation. All rights reserved. Theme designed by Icreon.