home *** CD-ROM | disk | FTP | other *** search
- #CONTROL (TVerticalTabControl, 'TABOGA-Vertical Tab Control'), DESCRIPTION('TABOGA-Vertical Tab Control'),MULTI, WINDOW
- CONTROLS
- REGION,AT(,,22,125),USE(?TabControl),#REQ
- END
- #LOCALDATA
- TABX SHORT,AUTO
- TABY SHORT,AUTO
- TABNewX SHORT,AUTO
- #ENDLOCALDATA
- #BOXED('Taboga Vertical Tab Control Prompts')
- #DISPLAY('Use single words, less than 8 characters long...'),AT(10,,175)
- #BUTTON('Tabs to Use'),MULTI(%TABData,%TABTabText &' - '&%TABTabImage),AT(10,,175)
- #PROMPT('Tab &Text:',@s8),%TABTabText
- #PROMPT('Tab &Image:',@s80),%TABTabImage
- #ENDBUTTON
- #PROMPT('Wraps Control:',CONTROL),%TABOverControl,REQ
- #ENDBOXED
- #!
- #!
- #!-------------------------------------------------------------------------
- #ATSTART
- #MESSAGE('Initializing Tab Control',3)
- #IF(~ITEMS(%TABData))
- #ERROR (%Procedure & ' Error: No Tabs defined...!')
- #ABORT
- #ENDIF
- #IF(~%TABOverControl)
- #ERROR (%Procedure & ' Error: Need to specify a Control to Wrap around....!')
- #ABORT
- #ENDIF
- #DECLARE(%TABText),MULTI
- #DECLARE(%TABTabCount)
- #DECLARE(%TABUseImages)
- #FOR(%TABData)
- #ADD(%TABText, %TABTabText)
- #IF(%TABTabImage)
- #SET(%TABUseImages, %True)
- #ENDIF
- #ENDFOR
- #SET(%TABTabCount, ITEMS(%TABText))
- #DECLARE(%TabControl)
- #DECLARE(%TPrompt)
- #FOR(%Control),WHERE(%ControlInstance = %ActiveTemplateInstance)
- #CASE(%ControlOriginal)
- #OF('?TabControl')
- #SET(%TabControl,%Control)
- #ENDCASE
- #ENDFOR
- #!
- #DECLARE(%TABMakeGray)
- #IF(EXTRACT(%WindowStatement,'GRAY'))
- #SET(%TABMakeGray, %False)
- #ELSE
- #SET(%TABMakeGray, %True)
- #ENDIF
- #DECLARE(%TPromptLen)
- #!
- #SET(%TPrompt,'?TabPrompt:'&%ActiveTemplateInstance)
- #!
- #! Extract List
- #DECLARE(%TABControlAT)
- #DECLARE(%TABCurrentX)
- #DECLARE(%TABCurrentY)
- #DECLARE(%TABStartX)
- #DECLARE(%TABStartY)
- #DECLARE(%TABTabWidth)
- #DECLARE(%TABXPos)
- #DECLARE(%TABYPos)
- #DECLARE(%TABWidth)
- #DECLARE(%TABHeight)
- #!
- #!
- #FIX(%Control,%TABControl)
- #SET(%TABControlAT, EXTRACT(%ControlStatement, 'AT'))
- #SET(%TABControlAT, SUB(%TABControlAT,4,LEN(%TABControlAT)-4))
- #INSERT(%TABExtractAT(Taboga), %TABControlAT)
- #SET(%TABTabWidth,%TABWidth-2)
- #!
- #!
- #FIX(%Control,%TABOverControl)
- #SET(%TABControlAT, EXTRACT(%ControlStatement, 'AT'))
- #SET(%TABControlAT, SUB(%TABControlAT,4,LEN(%TABControlAT)-4))
- #INSERT(%TABExtractAT(Taboga), %TABControlAT)
- #!
- #!
- #SET(%TABCurrentX,%TABXPos-%TABTabWidth-10) #! Start of TabRegion
- #SET(%TABCurrentY,%TABYPos-12) #! Start of TabRegion
- #SET(%TABStartX,%TABCurrentX)
- #SET(%TABStartY,%TABCurrentY)
- #!
- #!
- #!
- #DECLARE(%TStdTabHeight)
- #SET(%TStdTabHeight,18)
- #DECLARE(%TStdStraightLen)
- #SET(%TStdStraightLen,%TABTabWidth-2)
- #!
- #ENDAT #!ATSTART
- #!
- #!
- #!-------------------------------------------------------------------------
- #AT(%DataSectionBeforeWindow)
- #MESSAGE('Vertical Tab Control Declarations',3)
- #INSERT(%TABVTabDataSection)
- #ENDAT
- #!
- #!
- #!
- #!-------------------------------------------------------------------------
- #AT(%BeforeAccept)
- Starting:%ati = TRUE
- %TabControl{PROP:XPos} = %TABStartX
- %TabControl{PROP:YPos} = %TABStartY
- %TabControl{PROP:Width} = %TABTabWidth
- %TabControl{PROP:Height} = %TABOverControl{PROP:Height}+22
- DO TAB%ActiveTemplateInstance:CreateControls
- SETPENCOLOR(COLOR:BLACK)
- SETPENWIDTH(1)
- DO TAB%ActiveTemplateInstance:RefreshTabs
- #ENDAT
- #!
- #!
- #!
- #!-------------------------------------------------------------------------
- #AT(%ControlEventHandling,%TabControl,'Accepted')
- #INSERT(%TABVTabEventHandling)
- #ENDAT
- #!
- #!
- #!------------------------------------------------------------------------
- #AT(%ProcedureRoutines)
- #MESSAGE('Tab Control Routine',3)
- #INSERT(%TABVTabRoutines)
- #ENDAT
- #!
- #!
- #!
- #! in case we have a TResizableBrowseExtension
- #!-------------------------------------------------------------------------
- #AT(%TABAfterResizingBrowseWindow)
- DO TAB%ActiveTemplateInstance:RefreshTabs
- #ENDAT
- #!
- #!
- #! in case we have a TMoveableControl
- #!-------------------------------------------------------------------------
- #AT(%TABAfterMovingControl,%TabControl)
- DO TAB%ActiveTemplateInstance:RefreshTabs
- #ENDAT
- #!
- #! in case we have a TResizableBrowseBox
- #!-------------------------------------------------------------------------
- #AT(%TABAfterMovingBrowseBox,%TabControl)
- DO TAB%ActiveTemplateInstance:RefreshTabs
- #ENDAT
- #!
- #!**************************************************************************
- #! Name..........: %TABTabDataSection
- #! Description...: This group writes the DataSection code
- #!**************************************************************************
- #GROUP(%TABVTabDataSection)
- #DECLARE(%ati)
- #DECLARE(%i) #! instance number, for various uses
- #DECLARE(%locP)
- #DECLARE(%locCtr)
- #SET(%ati,%ActiveTemplateInstance)
- #SET(%locCtr,32*%ActiveTemplateInstance)
- #FOR(%TABText)
- #SET(%i, INSTANCE(%TABText) )
- %TPrompt_%i EQUATE(%(%locCtr+1))
- #SET(%locCtr, %locCtr + 1)
- #IF(%TABUseImages)
- #SELECT(%TABData, %i)
- #IF(%TABTabImage)
- ?TImage:%ati_%i EQUATE(%(%locCtr+1))
- #SET(%locCtr, %locCtr + 1)
- #ENDIF
- #ENDIF
- #ENDFOR
- ?TABTopLine:%ati EQUATE(%(%locCtr+1))
- ?TABRightLine:%ati EQUATE(%(%locCtr+2))
- ?TABBottomLine:%ati EQUATE(%(%locCtr+3))
- ?TABLeftBotLine:%ati EQUATE(%(%locCtr+4))
- ?TABLeftTopLine:%ati EQUATE(%(%locCtr+5))
- ?TABTopWhite:%ati EQUATE(%(%locCtr+6))
- ?TABLeftBotWhite:%ati EQUATE(%(%locCtr+7))
- ?TABLeftTopWhite:%ati EQUATE(%(%locCtr+8))
- #!
- #!
- #!
- #!
- P:%ati GROUP
- #FOR(%TABText)
- SHORT(%(%TABCurrentX+2)) #<! Upper Left corner
- SHORT(%TABCurrentY)
- SHORT(%(%TABCurrentX+%TStdStraightLen+2)) #<! Upper-Right corner
- SHORT(%TABCurrentY)
- SHORT(%(%TABCurrentX+%TStdStraightLen+2)) #<! Lower-Right corner
- SHORT(%(%TABCurrentY+%TStdTabHeight))
- SHORT(%(%TABCurrentX+2)) #<! Lower-left corner
- SHORT(%(%TABCurrentY+%TStdTabHeight))
- SHORT(%TABCurrentX) #<! Left lower corner
- SHORT(%(%TABCurrentY+%TStdTabHeight-2))
- SHORT(%TABCurrentX) #<! Left upper corner
- SHORT(%(%TABCurrentY+2))
- #SET(%TABCurrentY, %TABCurrentY+%TStdTabHeight)
- #ENDFOR
- .
- Pol:%ati SHORT,DIM(%TABTabCount,12),OVER(P:%ActiveTemplateInstance)
- #SET(%TABCurrentX,%TABXPos)
- ActiveTab:%ati BYTE(1),STATIC
- Starting:%ati BYTE
- #!
- #!
- #!**************************************************************************
- #! Name..........: %TABTabEventHandling
- #! Description...: This group writes the Event Handling code
- #!**************************************************************************
- #GROUP(%TABVTabEventHandling)
- TabX = MouseX()
- TabY = MouseY()
- TabNewX = ActiveTab:%ati ! Save active tab...
- #FOR(%TABText)
- #SET(%i,INSTANCE(%TABText))
- #IF(INSTANCE(%TABText) = 1)
- IF (TabX>=Pol:%ati[%i,11] AND TabX<=Pol:%ati[%i,3] AND TabY>Pol:%ati[%i,2] AND TabY<Pol:%ati[%i,6])
- #ELSE
- ELSIF (TabX>=Pol:%ati[%i,11] AND TabX<=Pol:%ati[%i,3] AND TabY>Pol:%ati[%i,2] AND TabY<Pol:%ati[%i,6])
- #ENDIF
- #! New Active
- ActiveTab:%ati = %i
- #ENDFOR
- END
- DO TAB%ActiveTemplateInstance:ChangeTab
- #!
- #!
- #!**************************************************************************
- #! Name..........: %TABTabRoutines
- #! Description...: This group writes the ROUTINES
- #!**************************************************************************
- #GROUP(%TABVTabRoutines)
- !-------------------------------------------------------------------------
- TAB%ActiveTemplateInstance:CreateControls ROUTINE
- #! Enclose
- CREATE(?TABTopLine:%ati,CREATE:Line,%TabControl)
- CREATE(?TABRightLine:%ati,CREATE:Line,%TabControl)
- CREATE(?TABBottomLine:%ati,CREATE:Line,%TabControl)
- CREATE(?TABLeftBotLine:%ati,CREATE:Line,%TabControl)
- CREATE(?TABLeftTopLine:%ati,CREATE:Line,%TabControl)
- #!CREATE(?TABTopWhite:%ati,CREATE:Line,%TabControl)
- CREATE(?TABLeftBotWhite:%ati,CREATE:Line,%TabControl)
- CREATE(?TABLeftTopWhite:%ati,CREATE:Line,%TabControl)
- #!
- SETPENWIDTH(1)
- ?TABTopLine:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)
- ?TABTopLine:%ati{PROP:YPos} = %TABStartY
- ?TABTopLine:%ati{PROP:Width} = %TABOverControl{PROP:Width}+18
- ?TABTopLine:%ati{PROP:Height} = 0
- #!
- ?TABRightLine:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth+18)+%TABOverControl{PROP:Width}
- ?TABRightLine:%ati{PROP:YPos} = %TABStartY
- ?TABRightLine:%ati{PROP:Width} = 0
- ?TABRightLine:%ati{PROP:Height} = %TABOverControl{PROP:Height}+22
- #!
- ?TABBottomLine:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)
- ?TABBottomLine:%ati{PROP:YPos} = %(%TABStartY+22) + %TABOverControl{PROP:Height}
- ?TABBottomLine:%ati{PROP:Width} = %TABOverControl{PROP:Width}+18
- ?TABBottomLine:%ati{PROP:Height} = 0
- #!
- #!
- ?TABLeftBotLine:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)
- ?TABLeftBotLine:%ati{PROP:YPos} = %(%TABStartY+22) + %TABOverControl{PROP:Height}
- ?TABLeftBotLine:%ati{PROP:Width} = 0
- ?TABLeftBotLine:%ati{PROP:Height} = ActiveTab:%ati*%TStdTabHeight - (%TABOverControl{PROP:Height}+22)
- #!
- #!
- ?TABLeftTopLine:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)
- ?TABLeftTopLine:%ati{PROP:YPos} = %TABStartY
- ?TABLeftTopLine:%ati{PROP:Width} = 0
- ?TABLeftTopLine:%ati{PROP:Height} = (ActiveTab:%ati - 1) * %TStdTabHeight
- #!
- #!
- #!
- #! White lines
- #!
- SETPENCOLOR(COLOR:White)
- SETPENWIDTH(2)
- LINE(%(%TABStartX+%TABTabWidth),%(%TABStartY+1),%TABOverControl{PROP:Width}+17,0)
- #!?TABTopWhite:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)
- #!?TABTopWhite:%ati{PROP:YPos} = %(%TABStartY+1)
- #!?TABTopWhite:%ati{PROP:Width} = %TABOverControl{PROP:Width}+15
- #!?TABTopWhite:%ati{PROP:Height} = 0
- #!?TABTopWhite:%ati{PROP:COLOR} = COLOR:White
- #!
- #!
- ?TABLeftBotWhite:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)+1
- ?TABLeftBotWhite:%ati{PROP:YPos} = %(%TABStartY+22) + %TABOverControl{PROP:Height} -1
- ?TABLeftBotWhite:%ati{PROP:Width} = 0
- ?TABLeftBotWhite:%ati{PROP:Height} = ActiveTab:%ati*%TStdTabHeight - (%TABOverControl{PROP:Height}+23)
- ?TABLeftBotWhite:%ati{PROP:COLOR} = COLOR:White
- #!
- #!
- ?TABLeftTopWhite:%ati{PROP:XPos} = %(%TABStartX+%TABTabWidth)+1
- ?TABLeftTopWhite:%ati{PROP:YPos} = %TABStartY+1
- ?TABLeftTopWhite:%ati{PROP:Width} = 0
- ?TABLeftTopWhite:%ati{PROP:Height} = ((ActiveTab:%ati - 1) * %TStdTabHeight) -1
- ?TABLeftBotWhite:%ati{PROP:COLOR} = COLOR:White
- #!
- #!
- SETPENCOLOR(COLOR:BLACK)
- UNHIDE(?TABTopLine:%ati)
- UNHIDE(?TABRightLine:%ati)
- UNHIDE(?TABBottomLine:%ati)
- UNHIDE(?TABLeftBotLine:%ati)
- UNHIDE(?TABLeftTopLine:%ati)
- #!UNHIDE(?TABTopWhite:%ati)
- UNHIDE(?TABLeftBotWhite:%ati)
- UNHIDE(?TABLeftTopWhite:%ati)
- #!
- #!
- #IF(%TABUseImages)
- #FOR(%TABData)
- #SET(%i,INSTANCE(%TABData))
- #IF(%TABTabImage)
- CREATE(?TImage:%ati_%i,CREATE:Image,%TABControl)
- ?TImage:%ati_%i{PROP:XPos} = Pol:%ati[%i,1]
- ?TImage:%ati_%i{PROP:YPos} = Pol:%ati[%i,12]
- ?TImage:%ati_%i{PROP:Width} = 12
- ?TImage:%ati_%i{PROP:Height} = 9
- ?TImage:%ati_%i{PROP:Text} = %TABTabImage
- UNHIDE(?TImage:%ati_%i)
- #ENDIF
- #ENDFOR
- #ENDIF
- !-------------------------------------------------------------------------
- TAB%ActiveTemplateInstance:RefreshTabs ROUTINE
- ! BLANK(%TABStartX,%TABStartY,24,%TABOverControl{PROP:Height}+22)
- ! BLANK(0,0,0,0)
- #!
- #!
- #FOR(%TABText)
- #SET(%i, INSTANCE(%TABText))
- #SET(%TPromptLen, LEN(%TABText))
- #SET(%TPromptLen, (%TPromptLen*4))
- #!
- #! Write the inactive polygons
- #! and strings
- #!
- SETPENCOLOR(COLOR:Black) ! set border to black
- POLYGON(Pol:%ati[%i],COLOR:Silver)
- #INSERT(%TABExtras,%False,%i)
- IF Starting:%ati ! Create it only when starting
- CREATE(%TPrompt_%i,CREATE:string,%TabControl)
- %TPrompt_%i{PROP:FontName} = 'MS Serif'
- %TPrompt_%i{PROP:FontSize} = '7'
- %TPrompt_%i{PROP:Text} = '%TABText'
- %TPrompt_%i{PROP:Trn} = 1
- .
- %TPrompt_%i{PROP:FontColor} = COLOR:BLACK
- %TPrompt_%i{PROP:FontStyle} = FONT:Regular
- SETPOSITION(%TPrompt_%i,Pol:%ati[%i,9]+2,Pol:%ati[%i,8]-7,%TPromptLEN,8)
- ?TImage:%ati_%i{PROP:XPos} = Pol:%ati[%i,1]
- #!
- UNHIDE(%TPrompt_%i)
- #ENDFOR
- Starting:%ati = FALSE ! So we don't "CREATE" the prompts again...
- #!
- #! write the active one over...
- CASE(ActiveTab:%ati)
- #FOR(%TABText)
- #SET(%i, INSTANCE(%TABText) )
- OF %i
- SETPENCOLOR(COLOR:Black) ! set border to silver
- POLYGON(Pol:%ati[%i],COLOR:Silver)
- #INSERT(%TABExtras,%True,%i)
- %TPrompt_%i{PROP:FontStyle} = FONT:Bold
- SETPOSITION(%TPrompt_%i,Pol:%ati[%i,9]+2,Pol:%ati[%i,8]-7,,)
- ?TImage:%ati_%i{PROP:XPos} = Pol:%ati[%i,1]+1
- #ENDFOR
- END
- ?TABLeftBotLine:%ati{PROP:Height} = ActiveTab:%ati*%TStdTabHeight - (%TABOverControl{PROP:Height}+23)
- ?TABLeftTopLine:%ati{PROP:Height} = (ActiveTab:%ati - 1) * %TStdTabHeight
- ?TABLeftTopWhite:%ati{PROP:Height} = ((ActiveTab:%ati - 1) * %TStdTabHeight) -1
- ?TABLeftBotWhite:%ati{PROP:Height} = ActiveTab:%ati*%TStdTabHeight - (%TABOverControl{PROP:Height}+23)
- ?TABLeftTopWhite:%ati{PROP:COLOR} = COLOR:White
- ?TABLeftBotWhite:%ati{PROP:COLOR} = COLOR:White
-
- !-------------------------------------------------------------------------
- TAB%ActiveTemplateInstance:ChangeTab ROUTINE
- IF ActiveTab:%ati <> TABNewX ! If changed Tabs...
- DO TAB%ActiveTemplateInstance:RefreshTabs
- HIDE(%TABControl)
- UNHIDE(%TABControl)
- TABNewX = ActiveTab:%ati
- #EMBED(%TABChooseTab,'TABOGA-Choose a New Tab'),%ActiveTemplateInstance,MAP(%ActiveTemplateInstance,'TABOGA-Code to Execute After Choosing a New Tab')
- END
- #!
- #!
- #!
- #!**************************************************************************
- #! Name..........: %TABExtras
- #! Description...: This group writes the code to make the tabs appear
- #! as the Microsoft Access tabs...
- #! Parameters....: %TActive - Are we writing the Active Tab?
- #! %i - instance number of the tab we are writing...
- #!**************************************************************************
- #GROUP(%TABExtras, %TActive, %i)
- #IF(%TActive) #! For the active instance...
- #! Part we need to erase
- !BLANK(Pol:%ati[%i,3],Pol:%ati[%i,4]+1, 3, Pol:%ati[%i,6]-Pol:%ati[%i,4]-3)
- !BLANK(0,0,0,0)
- SETPENWIDTH(1)
- SETPENCOLOR(COLOR:Silver)
- BOX(Pol:%ati[%i,3],Pol:%ati[%i,4]+2, 3, Pol:%ati[%i,6]-Pol:%ati[%i,4]-3,COLOR:Silver)
- #! White
- SETPENCOLOR(COLOR:White)
- SETPENWIDTH(2)
- LINE(Pol:%ati[%i,1]+1,Pol:%ati[%i,2]+1,Pol:%ati[%i,3]-Pol:%ati[%i,1],0)
- LINE(Pol:%ati[%i,11]+1,Pol:%ati[%i,12]+1,0,Pol:%ati[%i,10]-Pol:%ati[%i,12]-2)
- SETPENWIDTH(1)
- LINE(Pol:%ati[%i,11]+1,Pol:%ati[%i,12]+1,3,-3)
- LINE(Pol:%ati[%i,11]+1,Pol:%ati[%i,12],2,-2)
- SETPENWIDTH(2)
- #! Gray
- SETPENCOLOR(COLOR:Gray)
- LINE(Pol:%ati[%i,9]+1,Pol:%ati[%i,10],Pol:%ati[%i,7]-Pol:%ati[%i,9],Pol:%ati[%i,8]-Pol:%ati[%i,10])
- BOX(Pol:%ati[%i,7]+1,Pol:%ati[%i,8]-1,Pol:%ati[%i,5]-Pol:%ati[%i,7]-1,1,COLOR:Gray)
- SETPENWIDTH(1)
- #!---------------------------------------------------------------
- #ELSE #! if ~%TActive
- #!---------------------------------------------------------------
- SETPENCOLOR(COLOR:White)
- LINE(Pol:%ati[%i,1],Pol:%ati[%i,2]+1,Pol:%ati[%i,3]-Pol:%ati[%i,1]-1,0)
- #!---------------------------------------------------------------
- #ENDIF
- #!---------------------------------------------------------------
- #!
- #!
-