Subversion Repositories DevTools

Rev

Rev 64 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%
'=============================================================
'//
'//                                             Action Button Control
'//
'// version:            1.2
'//     last modified:  11-Aug-2004 14:08 by Sasha Vukovic
'=============================================================
%>
<%
'--------------- Global Constants ----------------
Const enumABTNCTRL_ON_READONLY_HIDE = 1
Const enumABTNCTRL_ON_READONLY_DISABLE = 2
'-------------------------------------------------

Class ActionButtonControl
        
        Private mArrAbtnDef()
        Private mobjNameDefMap                  ' Item can be accesed by name. Must be unique within one page
        Private mobjIdDefMap                    ' Item can be accesed by id. Must be unique within one page. If NULL, ubound is assigned to it
        Private mobjSeparator                   ' Has a name of item after separator is applied
        
        Private mnButtonSpacer
        Private mnButtonTextSpace
        
        Private mNumOfProperties
        Private mLastPropertyInx
        
        Private mbDisableAll
        
        Private mbIsReadonly
        Private mReadonlyActionBehaviour
        
        Private InxID
        Private InxName
        Private InxTxt
        Private InxLink
        Private InxEventHandler
        Private InxImg
        Private InxImgOff
        Private InxHint
        Private InxVisible
        Private InxActive
        Private InxIsReadonlyAction
        
        
        
        Public Property Let AllActive ( cActive )
                If cActive = enumDB_NO Then
                        mbDisableAll = TRUE
                Else
                        mbDisableAll = FALSE
                End If
                
        End Property
        
        Public Property Let ButtonSpacer ( nWidth )
                mnButtonSpacer = nWidth
        End Property
        
        Public Property Let ButtonTextSpacer ( nWidth )
                mnButtonTextSpace = nWidth
        End Property
        
        Public Property Let IsReadonlyAction ( IsReadonly )
                If IsReadonly = enumDB_YES Then
                        mbIsReadonly = TRUE
                        
                ElseIf IsReadonly = enumDB_NO Then
                        mbIsReadonly = FALSE
                Else
                        mbIsReadonly = IsReadonly
                        
                End If
                
        End Property
        
        Public Property Let ReadonlyActionBehaviour ( nEnum )
                mReadonlyActionBehaviour = nEnum
        End Property
        
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub SetItemPropertyByIndex ( nInx, nProperty, Value )
                If nInx = ""  OR  nProperty = ""  OR  Value = "" Then Err.Raise 8, "Method SetItemPropertyByIndex", "Empty parameters found. nInx="& nInx &", nProperty="& nProperty &", Value="& Value 
                
                mArrAbtnDef ( nProperty, nInx ) = Value
                
                'Response.write "mArrAbtnDef ( "& nProperty &", "& nInx &" ) = "& Value &"<br>"
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Function LastItemInx ()
                 LastItemInx = UBound ( mArrAbtnDef, 2 )
        End Function
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub AddActionButton ( sItemName, nItemID )
                Dim newArrayDim
                
                If InStr( sItemName, " " ) > 0 Then     Err.Raise 8, "Method AddActionButton", "Item Name '"& sItemName &"' cannot have spaces."
                
                
                
                If NOT mobjNameDefMap.Exists (CStr( sItemName )) Then
                        
                        newArrayDim = LastItemInx() + 1
                        
                        ReDim Preserve mArrAbtnDef( mNumOfProperties, newArrayDim )
                        
                        ' Store name
                        Call SetItemPropertyByIndex ( newArrayDim, InxName, sItemName )
                        mobjNameDefMap.Add Cstr( sItemName ), CStr( newArrayDim )
                        
                        If Not IsNull(nItemID) Then
                                ' Store ID
                                Call SetItemPropertyByIndex ( newArrayDim, InxdbID, nItemID )
                                mobjIdDefMap.Add Cstr( nItemID ), CStr( newArrayDim )
                        End If
                        
                        ' Set Defaults
                        Call SetItemDefaults ( sItemName )
                Else
                        
                        Err.Raise 8, "Method AddActionButton", "Item Name '"& sItemName &"' has been already defined."
                        
                End If
                
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Render ( aAbtnList )
                Dim itemInx, itemName, nLastItemInx, btnImage, ButtonStr, ButtonStrDisabled
                Response.write "<table cellpadding='0' cellspacing='0' width='1'><tr>"
                
                For Each itemName in aAbtnList
                        
                        itemInx = mobjNameDefMap.Item (Cstr(itemName))
                        'If itemInx = "" Then   Err.Raise 8, "Method Render", "Definition for item name '"& itemName &"' not found."
                        
                        
                        '-- Define Image
                        btnImage = "<img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle' border='0'>"
                        If (mArrAbtnDef( InxImg, itemInx ) <> "") Then
                                btnImage = "<img src='"& mArrAbtnDef( InxImg, itemInx ) &"' hspace='"& mnButtonTextSpace &"' border='0' align='absmiddle'>"
                        End If
                        
                        
                        '-- Define Button
                        ButtonStr = _
                                "<td nowrap>"&_
                                "<a id='"& mArrAbtnDef( InxName, itemInx ) &"' "&_
                                " name='"& mArrAbtnDef( InxName, itemInx ) &"' href='"& Eval( mArrAbtnDef( InxLink, itemInx ) ) &"' "&_
                                " "& Eval( mArrAbtnDef( InxEventHandler, itemInx ) ) &" class='menu_link' title='"& mArrAbtnDef( InxHint, itemInx )  &"'>"&_
                                btnImage & mArrAbtnDef( InxTxt, itemInx ) &"</a>"&_
                                "</td>"
                        
                        
                        '-- Define Disabled Button
                        ButtonStrDisabled = _
                                "<td nowrap>"&_
                                "<img src='"& mArrAbtnDef( InxImgOff, itemInx ) &"' hspace='"& mnButtonTextSpace &"' border='0' align='absmiddle'>"&_
                                "<label class='menu_txt'>"& mArrAbtnDef( InxTxt, itemInx ) &"</label>"&_
                                "</td>"
                        
                        
                        
                        If mArrAbtnDef( InxVisible, itemInx ) = enumDB_YES Then
                                ' --- Display if Visible ---
                                
                                If  ( mbDisableAll OR ( mArrAbtnDef( InxActive, itemInx ) = enumDB_NO ) ) AND ( itemInx <> "" )  Then
                                        ' --- Display DISABLED Button Item ---
                                        Response.write ButtonStrDisabled
                                        
                                        If mnButtonSpacer > 0 Then
                                                Response.write "<td><img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle'></td>"
                                        End If
                                        
                                Else
                                        
                                        ' --- Display Action Button Item ---
                                        If      ( NOT mbIsReadonly )  OR _
                                                ( mbIsReadonly  AND  mArrAbtnDef( InxIsReadonlyAction, itemInx ) = enumDB_YES ) Then
                                                
                                                If InStr( itemName, "width=" ) > 0 Then
                                                        Response.write "<td><img src='images/spacer.gif' "& itemName &" height='1' align='absmiddle'></td>"
                                                        
                                                ElseIf InStr( itemName, "height=" ) > 0 Then
                                                        Response.write "<td><img src='images/bg_bage_2.gif' width='1' "& itemName &" align='absmiddle' hspace='4'></td>"
                                                        
                                                Else
                                                        '/* It is a button, i.e. Display Button */
                                                        Response.write ButtonStr
                                                        
                                                        If mnButtonSpacer > 0 Then
                                                                Response.write "<td><img src='images/spacer.gif' width='"& mnButtonSpacer &"' height='1' align='absmiddle'></td>"
                                                        End If
                                                        
                                                End If
                                                
                                                
                                        ElseIf ( mbIsReadonly  AND  mArrAbtnDef( InxIsReadonlyAction, itemInx ) = enumDB_NO ) Then
                                                
                                                
                                                
                                                If mReadonlyActionBehaviour = enumABTNCTRL_ON_READONLY_DISABLE Then
                                                        Response.write ButtonStrDisabled
                                                End If
                                                
                                                
                                                
                                        End If
                                        
                                End If
                                
                        End If
                        
                        
                        
                        
                        ' --- Separators added manually using  method AddSeparator or AddSeparatorAfter ---
                        If mobjSeparator.Exists ( Cstr(mArrAbtnDef( InxName, itemInx )) ) Then
                                Response.write "<td><img src='images/spacer.gif' width='"& mobjSeparator.Item ( Cstr(mArrAbtnDef( InxName, itemInx )) ) &"' height='1'></td>"
                                
                        End If
                        
                        
                Next
                
                Response.write "</tr></table>"
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub LoadActionButtons ( aAbtnList, ByRef objOraDatabase )
                Dim rsQry, query
                
                query = _
                " SELECT "&_
                "        abd.abtn_id,"&_
                "        abd.abtn_name,"&_
                "        abd.text,"&_
                "        abd.action_link,"&_
                "        abd.event_handler,"&_
                "        abd.img_enabled,"&_
                "        abd.img_disabled,"&_
                "        abd.hint,"&_
                "        abd.visible,"&_
                "        abd.active,"&_
                "        abd.is_readonly_action "&_
                "   FROM DEF_ACTION_BUTTONS abd  WHERE abd.abtn_name IN ('"& Join ( aAbtnList, "','") &"')"
                
                Set rsQry = OraDatabase.DbCreateDynaset( query , ORADYN_DEFAULT )
                
                If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
                        Call LoadButtons ( rsQry.GetRows() )
                        
                End If
                
                rsQry.Close
                Set rsQry = Nothing
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub LoadButtons ( aRows )
                Dim nProperty, newArrayDim, LastRow, rowNum
                
                LastRow = UBound( aRows, 2 )
                
                For rowNum = 0 To LastRow
                        ' Increase array by 1
                        newArrayDim = LastRowInx() + 1
                        ReDim Preserve mArrAbtnDef( mNumOfProperties, newArrayDim )
                        
                        
                        mobjNameDefMap.Item ( Cstr( aRows ( InxName, rowNum ) ) ) = newArrayDim
                        
                        For nProperty = 0 To mLastPropertyInx
                                mArrAbtnDef ( nProperty, newArrayDim ) = aRows ( nProperty, rowNum )
                                
                        Next
                        
                Next
                
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Function LastRowInx ()
                 LastRowInx = UBound ( mArrAbtnDef, 2 )
        End Function
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub AddSeparatorAfter ( sItemName, sSeparatorWidth )
                If InStr( sItemName, " " ) > 0 Then     Err.Raise 8, "Method AddSeparatorAfter", "Item Name '"& sItemName &"' cannot have spaces."
                mobjSeparator.Add (Cstr(sItemName)), CStr(sSeparatorWidth)
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub AddSeparator ( sSeparatorWidth )
                mobjSeparator.Add ( Cstr(mArrAbtnDef(InxName, LastItemInx())) ), CStr(sSeparatorWidth)
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub SetItemDefaults ( sItemName )
                ' Additional default setup
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, enumDB_YES )                    ' Default Active = enumDB_YES
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Text ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxTxt, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub ItemID ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxID, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Image ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxImg, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxImgOff, Value )                 ' Default image disable to be the same as image
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub ImageOff ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxImgOff, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Link ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxLink, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub EventHandler ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxEventHandler, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Hint ( sItemName, Value )
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxHint, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Visible ( sItemName, Value )
                'Response.write sItemName &"here"& mobjNameDefMap.Item (Cstr(sItemName))
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxVisible, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Public Sub Active ( sItemName, Value )
                'Response.write sItemName &"here"& mobjNameDefMap.Item (Cstr(sItemName))
                Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, Value )
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub Class_Initialize()
                '// Perform action on creation of object. e.g. Set myObj = New ThisClassName
                Set mobjNameDefMap = CreateObject("Scripting.Dictionary")
                Set mobjIdDefMap = CreateObject("Scripting.Dictionary")
                Set mobjSeparator = CreateObject("Scripting.Dictionary")
                
                'mbIsReadonly = FALSE   ' Tell control that it should use only readonly action buttons (i.e. actions which will not alter database )
                mReadonlyActionBehaviour = enumABTNCTRL_ON_READONLY_HIDE                ' Tell control what to do by default if mbIsReadonly = TRUE
                
                mnButtonSpacer = 0
                mnButtonTextSpace = 4
                
                mNumOfProperties = 11   ' Number of properties in array which define one menu item.
                mLastPropertyInx = mNumOfProperties - 1
                
                mbDisableAll = FALSE
                
                ReDim mArrAbtnDef ( mNumOfProperties, -1 )
                InxID                                   = 0
                InxName                                 = 1
                InxTxt                                  = 2
                InxLink                                 = 3
                InxEventHandler                 = 4
                InxImg                                  = 5
                InxImgOff                               = 6
                InxHint                                 = 7
                InxVisible                              = 8
                InxActive                               = 9
                InxIsReadonlyAction             = 10
                
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
        Private Sub Class_Terminate()
                '// Perform action on object disposal. e.g. Set myObj = Nothing
                Set mobjNameDefMap = Nothing
                Set mobjIdDefMap = Nothing
                Set mobjSeparator = Nothing
                
                
        End Sub
        '-----------------------------------------------------------------------------------------------------------------
End Class
%>