Rev 64 | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%'============================================================='//'// Popup Menu Control'//'// version: 0.4'// last modified: 09-May-2004 03:03 by Sasha Vukovic'=============================================================%><%Class PopupMenuControlPrivate mArrPopupMenuDef()Private mobjNameDefMap ' Item can be accesed by name. Must be unique within one pagePrivate mobjIdDefMap ' Item can be accesed by id. Must be unique within one page. If NULL, ubound is assigned to itPrivate mobjSeparator ' Has a name of item after separator is appliedPrivate mPreCodeTemplatePrivate mPostCodeTemplatePrivate mMenuItemTemplatePrivate mSeparatorTemplatePrivate mNumOfItemPropertiesPrivate mLastItemPropertyInxPrivate mbHideAllPrivate mbDisableAllPrivate InxItemTableNamePrivate InxdbAccessManagerObjIDPrivate InxdbNamePrivate InxTxtPrivate InxImgPrivate InxImgOffPrivate InxLinkPrivate InxEventHandlerPrivate InxHintPrivate InxActivePrivate InxVisiblePublic Property Let AllVisible ( cVal )If cVal = enumDB_YES ThenmbHideAll = FALSEElsembHideAll = TRUEEnd IfEnd PropertyPublic Property Let AllActive ( cVal )If cVal = enumDB_YES ThenmbDisableAll = FALSEElsembDisableAll = TRUEEnd IfEnd Property'-----------------------------------------------------------------------------------------------------------------Public Sub PopupMenuStyle( sTemplateDoc, sStyleId )Dim mobjTemplateManagerSet mobjTemplateManager = New TemplateManagermobjTemplateManager.TemplateDoc = sTemplateDoc' Set TemplatesmPreCodeTemplate = mobjTemplateManager.getElementValue ( sStyleId &"/PreMenuCode" )mMenuItemTemplate = mobjTemplateManager.getElementValue ( sStyleId &"/MenuItem" )mSeparatorTemplate = mobjTemplateManager.getElementValue ( sStyleId &"/Separator" )mPostCodeTemplate = mobjTemplateManager.getElementValue ( sStyleId &"/PostMenuCode" )Set mobjTemplateManager = NothingEnd Sub'-----------------------------------------------------------------------------------------------------------------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="& ValuemArrPopupMenuDef ( nProperty, nInx ) = Value'Response.write "mArrPopupMenuDef ( "& nProperty &", "& nInx &" ) = "& Value &"<br>"End Sub'-----------------------------------------------------------------------------------------------------------------Private Function LastItemInx ()LastItemInx = UBound ( mArrPopupMenuDef, 2 )End Function'-----------------------------------------------------------------------------------------------------------------Public Sub LoadRows ( aRows )' Pass the full array row matching the columns of mArrPopupMenuDef()Dim nProperty, newArrayDim, numOfRows, rowNumnumOfRows = UBound( aRows, 2 )For rowNum = 0 To numOfRows' Increase array by 1newArrayDim = LastItemInx() + 1ReDim Preserve mArrPopupMenuDef( mNumOfItemProperties, newArrayDim )mobjNameDefMap.Add ( Cstr( aRows ( InxdbName, rowNum ) ) ), CStr( newArrayDim )For nProperty = 0 To mLastItemPropertyInxIf (nProperty = InxLink) OR (nProperty = InxEventHandler) Then' Link And EventHandlers need to be evaluatedmArrPopupMenuDef ( nProperty, newArrayDim ) = Eval ( aRows ( nProperty, rowNum ) )ElsemArrPopupMenuDef ( nProperty, newArrayDim ) = aRows ( nProperty, rowNum )End IfNextNextEnd Sub'-----------------------------------------------------------------------------------------------------------------Public Sub AddMenuItem ( sItemName, nItemID )Dim newArrayDimIf InStr( sItemName, " " ) > 0 Then Err.Raise 8, "Method AddMenuItem", "Item Name '"& sItemName &"' cannot have spaces."If NOT mobjNameDefMap.Exists (CStr( sItemName )) ThennewArrayDim = LastItemInx() + 1ReDim Preserve mArrPopupMenuDef( mNumOfItemProperties, newArrayDim )' Store nameCall SetItemPropertyByIndex ( newArrayDim, InxdbName, sItemName )mobjNameDefMap.Add ( Cstr( sItemName ) ), CStr( newArrayDim )If Not IsNull(nItemID) Then' If ID is supplied, map it to array indexmobjIdDefMap.Add Cstr( nItemID ), CStr( newArrayDim )' Store IDCall SetItemPropertyByIndex ( newArrayDim, InxdbAccessManagerObjID, nItemID )Else' else use array index as IDmobjIdDefMap.Add Cstr( newArrayDim ), CStr( newArrayDim )' Store array index as IDCall SetItemPropertyByIndex ( newArrayDim, InxdbAccessManagerObjID, newArrayDim )End If' Set Defaults'Call SetItemDefaults ( sItemName )Else'TODOEnd IfEnd Sub'-----------------------------------------------------------------------------------------------------------------Private Sub RenderItem ( itemIndex, bIsActiveByAccessControl )Dim sMenuItemsMenuItem = mMenuItemTemplate ' Get menu item template' --- Menu Item ---' Check Active stateIf bIsActiveByAccessControl AND mArrPopupMenuDef( InxActive, itemIndex ) <> enumDB_NO Then ' Check if menu item is ActivesMenuItem = Replace ( sMenuItem, "%TEXT%", "<a href='"& ( mArrPopupMenuDef( InxLink, itemIndex ) ) &"' "&_" "& ( mArrPopupMenuDef( InxEventHandler, itemIndex ) ) &" class='menu_link' title='"& mArrPopupMenuDef( InxHint, itemIndex ) &"'>"& mArrPopupMenuDef( InxTxt, itemIndex ) &"</a>" )If NOT IsNull(mArrPopupMenuDef( InxImg, itemIndex )) AND (mArrPopupMenuDef( InxImg, itemIndex ) <> "") ThensMenuItem = Replace ( sMenuItem, "%IMAGE%", "<img src='"& mArrPopupMenuDef( InxImg, itemIndex ) &"'>" )Else' No image suppliedsMenuItem = Replace ( sMenuItem, "%IMAGE%", "<img src='images/spacer.gif' height='19'>" )End IfElse' Render DISABLE menu itemsMenuItem = Replace ( sMenuItem, "%TEXT%", mArrPopupMenuDef( InxTxt, itemIndex ) )If NOT IsNull(mArrPopupMenuDef( InxImgOff, itemIndex )) AND (mArrPopupMenuDef( InxImgOff, itemIndex ) <> "") ThensMenuItem = Replace ( sMenuItem, "%IMAGE%", "<img src='"& mArrPopupMenuDef( InxImgOff, itemIndex ) &"' title='"& mArrPopupMenuDef( InxHint, itemIndex ) &"'>" )Else' No image suppliedsMenuItem = Replace ( sMenuItem, "%IMAGE%", Empty )End IfEnd IfResponse.write sMenuItem ' Finally render Menu ItemEnd Sub'-----------------------------------------------------------------------------------------------------------------Public Sub RenderInOrder ( sDivName, aItemsList, oAccessControl, cObjectName )Dim itemInx, itemName, nLastItemInx, bIsVisible, bIsActiveResponse.write "<DIV id='"& sDivName &"' name='"& sDivName &"' style='display:none;'>"Response.write mPreCodeTemplateFor Each itemName in aItemsListitemInx = mobjNameDefMap.Item (Cstr(itemName))'If itemInx = "" Then Err.Raise 8, "Method Render", "Definition for item name '"& itemName &"' not found."'===== Access Control =====If IsObject(oAccessControl) Then' Access Control takes prioritybIsVisible = oAccessControl.IsDataVisible ( mArrPopupMenuDef( InxItemTableName, itemInx ), mArrPopupMenuDef( InxdbAccessManagerObjID, itemInx ), cObjectName )bIsActive = oAccessControl.IsDataActive ( mArrPopupMenuDef( InxItemTableName, itemInx ), mArrPopupMenuDef( InxdbAccessManagerObjID, itemInx ), cObjectName )Else' set VisibleIf mArrPopupMenuDef( InxVisible, itemInx ) = enumDB_YES ThenbIsVisible = TRUEElsebIsVisible = FALSEEnd If' set ActiveIf NOT mbDisableAll AND (mArrPopupMenuDef( InxActive, itemInx ) = enumDB_YES) ThenbIsActive = TRUEElsebIsActive = FALSEEnd IfEnd If'=========================If itemName = enumSEPARATOR_LABEL AND bIsVisible ThenResponse.write mSeparatorTemplateElse'TODOIf bIsVisible ThenCall RenderItem ( itemInx, bIsActive )End IfEnd If' --- Separators added manually using method AddSeparator or AddSeparatorAfter ---If mobjSeparator.Exists ( Cstr(mArrPopupMenuDef( InxdbName, itemInx )) ) AND bIsVisible ThenResponse.write mSeparatorTemplateEnd IfNextResponse.write mPostCodeTemplateResponse.write "</DIV>"End Sub'-----------------------------------------------------------------------------------------------------------------Public Sub Render ( sDivName )Dim item, nLastItemInx, sMenuItem' --- Check if GLOBAL VisibleIf NOT mbHideAll ThenResponse.write "<DIV id='"& sDivName &"' name='"& sDivName &"' style='display:none;'>"Response.write mPreCodeTemplatenLastItemInx = LastItemInx()For item = 0 To nLastItemInx' --- Check if GLOBAL Active'If mArrPopupMenuDef( InxdbName, item ) ThenCall RenderItem ( item, TRUE ) ' TODO' --- Separator ---If mobjSeparator.Exists ( Cstr(mArrPopupMenuDef( InxdbName, item )) ) ThenResponse.write mSeparatorTemplateEnd If'End IfNextResponse.write mPostCodeTemplateResponse.write "</DIV>"End IfEnd Sub'-----------------------------------------------------------------------------------------------------------------Public Sub AddSeparatorAfter ( sItemName )If InStr( sItemName, " " ) > 0 Then Err.Raise 8, "Method AddSeparatorAfter", "Item Name '"& sItemName &"' cannot have spaces."mobjSeparator.Add (Cstr(sItemName)), ""End Sub'-----------------------------------------------------------------------------------------------------------------Public Sub AddSeparator ()mobjSeparator.Add ( Cstr(mArrPopupMenuDef(InxdbName, LastItemInx())) ), ""End Sub'-----------------------------------------------------------------------------------------------------------------'Private Sub SetItemDefaults ( sItemName )' ' Additional default setup' 'Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, enumDB_YES ) ' Default Active = enumDB_YES' 'Call SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxVisible, 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 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 imageEnd 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 Active ( sItemName, Value )' Y = enabled, N = disabledCall SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxActive, Value )End Sub'-----------------------------------------------------------------------------------------------------------------Public Sub Visible ( sItemName, Value )' Y = show, N = hideCall SetItemPropertyByIndex ( mobjNameDefMap.Item (Cstr(sItemName)), InxVisible, Value )End Sub'-----------------------------------------------------------------------------------------------------------------Private Sub Class_Initialize()'// Perform action on creation of object. e.g. Set myObj = New ThisClassNameSet mobjNameDefMap = CreateObject("Scripting.Dictionary")Set mobjIdDefMap = CreateObject("Scripting.Dictionary")Set mobjSeparator = CreateObject("Scripting.Dictionary")mNumOfItemProperties = 11 ' Number of properties in array which define one menu item.mLastItemPropertyInx = mNumOfItemProperties - 1mbHideAll = FALSEmbDisableAll = FALSEReDim mArrPopupMenuDef ( mNumOfItemProperties, -1 )InxItemTableName = 0InxdbAccessManagerObjID = 1InxdbName = 2InxTxt = 3InxLink = 4InxEventHandler = 5InxImg = 6InxImgOff = 7InxHint = 8InxVisible = 9InxActive = 10End Sub'-----------------------------------------------------------------------------------------------------------------Private Sub Class_Terminate()'// Perform action on object disposal. e.g. Set myObj = NothingSet mobjNameDefMap = NothingSet mobjIdDefMap = NothingSet mobjSeparator = NothingEnd Sub'-----------------------------------------------------------------------------------------------------------------End Class%>