Class: Tab_Dialog_Mixin
Class Hierarchy:
cObjectMixinTab_Dialog_MixinClass Definition
Properties
IntegerDefault_Tab
from resetting to 0 each time they
activated
tab to start/return to. -1 means no default
IntegerIn_Tab_Change_State
IntegerpbDeactivatePages
setting this to true will make your tab pages work like they did in VDF6. When a page
is hidden, it will be removed from the focus tree. Only do this if you need to to get
an old app working properly.
IntegerpbHotTrack
design-time only
IntegerpbResetPageOnActivate
If entering via next navigation should we move to the Default_Tab tab page
IntegerphoImageList
should be set to a cImageList instance to display images on tab-page labels. Design-time only
IntegerpiOriginalClientSize
this is used by tab pages to determine sizes for anchoring. It is used in conjunction
with piLastClientSize in the tab page
IntegerPointer_Only_State
If Skip_Button is NOT smart this determines if mouse navigation
always give the tab the focus or never gives it the focus. If
smart, use same logic as above
IntegerPrivate.MultiLine_State
IntegerPrivate.TabWidth_Mode
Integerprivate_pbFlatSeparators
Integerprivate_peTabPosition
Integerprivate_peTabStyle
IntegerRotate_Mode
tab pages use this as their default rotate mode
IntegerSkip_Button_Mode
How to handle keyboard navigation
SBM_NEVER = don't skip tab in kbd navigation
SBM_ALWAYS = skip tab in kbd navigation.
SBM_SMART = Use windows logic. If not on a tab and the page is
changed go to page else goto tab
Functions and Procedures
integerActivate()
Most tab navigation events are controlled by the class and activate
messages are sent in the middle of these events. When this occurs the
private property In_tab_change_state is true. In some cases of
keyboard navigation from outside the object activate is called directly.
This should never happen with no active tab page (because add_focus
takes care of this). In such a case, we must decide if activate should
keep the focus (the tab) or give it to the page. If smart mode or always
mode go the tab button else go to button (normal activate behavior)
IntegerAdd_Focus(Handle hoParent)
Augment to add the default tab page to the focus tree
integerAdd_Tab_item(String sLabel Integer tobjid)
Add a tab page. Pass tab name and the page object Id.
return the tab (item) number of the new page
IntegerButton_Count()
Button_Count: Number of tab buttons
IntegerButtons_State()
integerClient_Area_State()
This is a risky thing to do. Some of the packages (server.pkg) use
client_area_state to figure out if the object is a client or a form.
In order for internal activation of the tab items to work the real
internal property client_area_state must be false. However, the
external package standpoint client_area_state must be true. This seems
to work because the internal client decisions (which uses the real
client_area_state property) uses the internal property (it does not
get the property by putting the message in the df message queue.
integerCurrent_Tab()
The tab that is the current "active" tab. If the tab page is
defined and it is not active the current_tab returns -1. If -1
you can use item_count to find the tab that is rolled forward
integerDeactivate_Tab(Integer tab# Integer tabpageobj)
Define_Tab_dialog_Mixin()
Delete_Tab_Item(integer iTab)
DoActivePage(handle hId)
Private: this gets called to make sure that this page is active. Called during
next/prior object id. For this to work the ID must be in the focus tree
DoHideTab(integer hPage integer bHide)
Mouse_Down(Integer iWindowNumber Integer iPosition)
Replace current mouse behavior with out own. This give us more control
over the switching behavior.
Mouse_Drag(Integer iWindowNumber Integer iPosition)
cancelled to stop rotation of tab-pages
IntegerMultiLine_State()
Next()
augmented to create smarter next and previous behavior for tab buttons.
integerNext_Object_Id(integer fg)
special for tab dialog. Note this must augment (and not replace) the next_object_id
logic defined in standard_object_mixin,
If descend (fg=0) we want to return
the current tab page (it's the next object).
handleNextTabId()
Return the next tab. Skip tab pages where the button is shadowed
IntegerNumberOfRows()
OnBeginningOfPanel(integer hoPanel)
event called when Beginning_of_Panel is called by panel (usually view)
by default, switch to the default tab (which is 0).
OnDisplay()
OnResize()
Page(Integer iState)
IntegerpbFlatSeparators()
IntegerpeTabPosition()
IntegerpeTabStyle()
Previous()
handlePriorTabId()
Return the Prior tab. Skip tab pages where the button is shadowed
private_DoUpdateTabs()
Rebuild_Tab_Pointers()
Request_Next_Tab(integer Mode)
Request_Previous_Tab(integer Mode)
No Param or 0 - Kbd Navigation
1 - Mouse Navigation
2 - Force to Button
3 - Force to Dialog
Request_Switch_To_Tab(Integer tab# integer PointerMode)
PonterMode parameter (required):
0 - Keyboard Navigation
1 - Mouse Navigation
2 - Force to Button
3 - Force to Dialog
Request_Tab_Display(integer iTab)
Display passed tab page. If no value (or -1) use default tab
display = add to focus tree if needed, rotate up, do not activate
Set(String Val)
Must Cancel. Values Are The Tab Items
Set(Integer cy Integer cx)
Set(Integer bMultiLine)
Set(Integer eTabPosition)
Set(Integer eTabStyle)
Set(Integer bButtons)
Set(Integer bFlatSeparators)
Set(Integer iMode)
Set(Integer item# Integer Obj#)
Get/Set Tab_Page_Id identifies the page object associated with
the tab item
set(integer iItem string sVal)
integerTab_Change(Integer totab Integer PointerMode)
PointerMode: 0 - button takes focus
1 - dialog takes focus
2 - no-one takes focus, just add to focus tree
Rule: If the tab dialog object has the focus ;
give the keep the focus in the dialog object.
else if switching pages
Give the focus to the new page
else (tab dialog<>focus, same page)
give the tab the focus
integerTab_Page_Id(integer item#)
IntegerTabWidth_Mode()