0% found this document useful (0 votes)
13 views15 pages

Appendix

The document contains the source code for the ClsSlidingSidebar class module used in Basic4android for creating Android applications. It includes methods for initializing the sidebar, handling animations, and managing touch events for opening and closing the sidebar. The code also provides functionality for setting up gesture controls and managing the sidebar's visibility and position within the parent panel.

Uploaded by

linnmobile216
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
13 views15 pages

Appendix

The document contains the source code for the ClsSlidingSidebar class module used in Basic4android for creating Android applications. It includes methods for initializing the sidebar, handling animations, and managing touch events for opening and closing the sidebar. The code also provides functionality for setting up gesture controls and managing the sidebar's visibility and position within the parent panel.

Uploaded by

linnmobile216
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Appendix
Source Code for
ClsSlidingSidebar Class Module

Sub Class_Globals
Private pnlContent As Panel
Private pnlSidebar As Panel
Private pnlGesture As Panel
Private sbParent As Panel
Private sbPosition As Byte
Private sbAnimType As Byte
Private sbInterpolator As Float
Private sbAnimInProgress As Byte
Private sbStopAnim As Boolean
Private sbOpenDuration As Int
Private sbCloseDuration As Int
Private sbIsVisible As Boolean
Private sbIsOpening As Boolean
Private sbStartX, sbStartY As Int
Private pnlSidebarStartX, pnlSidebarStartY As Int
Private pnlContentStartX, pnlContentStartY As Int
Private sbHandle As View
Private sbFinalMovement As Byte
Private sbSubFullyOpen As String
Private sbSubFullyClosed As String
Private sbSubMove As String
Private sbModule As Object
Private FROM_OPEN As Boolean: FROM_OPEN = True
Private FROM_CLOSE As Boolean: FROM_CLOSE = False
Private OPEN_ANIM As Boolean: OPEN_ANIM = False
Private CLOSE_ANIM As Boolean: CLOSE_ANIM = True
Private OPENING As Byte: OPENING = 1
Private CLOSING As Byte: CLOSING = 2
End Sub

730
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Public Sub Initialize(Parent As Panel, SidebarSize As Int, SidebarPosition As Byte, AnimType As Byte,
OpenDuration As Int, CloseDuration As Int)
sbParent = Parent
[Link]("Block")
[Link](pnlContent, 0, 0, getParentWidth, getParentHeight)

[Link]("Block")
Select SidebarPosition
Case 0 'LEFT
If AnimType = 0 Then
[Link](pnlSidebar, 0, 0, SidebarSize, getParentHeight)
Else
[Link](pnlSidebar, -SidebarSize, 0, SidebarSize,
getParentHeight)
End If
Case 1 'RIGHT
If AnimType = 0 Then
[Link](pnlSidebar, getParentWidth - SidebarSize, 0,
SidebarSize, getParentHeight)
Else
[Link](pnlSidebar, getParentWidth, 0, SidebarSize,
getParentHeight)
End If
Case 2 'TOP
If AnimType = 0 Then
[Link](pnlSidebar, 0, 0, getParentWidth, SidebarSize)
Else
[Link](pnlSidebar, 0, -SidebarSize, getParentWidth,
SidebarSize)
End If
Case 3 'BOTTOM
If AnimType = 0 Then
[Link](pnlSidebar, 0, getParentHeight - SidebarSize,
getParentWidth, SidebarSize)
Else
[Link](pnlSidebar, 0, getParentHeight, getParentWidth,
SidebarSize)
End If
End Select

731
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

If AnimType = 0 Then [Link]

sbPosition = SidebarPosition
sbAnimType = AnimType
sbInterpolator = 0.7
sbOpenDuration = OpenDuration
sbCloseDuration = CloseDuration
sbIsVisible = False
End Sub

Private Sub Block_Touch(Action As Int, X As Float, Y As Float)


End Sub

Public Sub LoadDrawable(Name As String) As Object


Dim r As Reflector
[Link] = [Link]
[Link] = [Link]("getResources")
[Link] = [Link]("getSystem")
Dim ID_Drawable As Int
ID_Drawable = r.RunMethod4("getIdentifier", Array As Object(Name, "drawable", "android"), _
Array As String("[Link]", "[Link]",
"[Link]"))
[Link] = [Link]
[Link] = [Link]("getResources")
Return r.RunMethod2("getDrawable", ID_Drawable, "[Link]")
End Sub

Public Sub SetOnChangeListeners(Module As Object, SubOnFullyOpen As String, SubOnFullyClosed As


String, SubOnMove As String)
sbModule = Module
sbSubFullyOpen = SubOnFullyOpen
sbSubFullyClosed = SubOnFullyClosed
sbSubMove = SubOnMove
End Sub

Public Sub Sidebar As Panel


Return pnlSidebar
End Sub

732
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Public Sub ContentPanel As Panel


Return pnlContent
End Sub

#Region Parent Width/Height


Private Sub getParentWidth As Int
If [Link] < 0 Then
Dim r As Reflector, RealWidth As Int
[Link] = sbParent
RealWidth = [Link]("getWidth")
If RealWidth = 0 Then
DoEvents
RealWidth = [Link]("getWidth")
End If
Return RealWidth
Else
Return [Link]
End If
End Sub

Private Sub getParentHeight As Int


If [Link] < 0 Then
Dim r As Reflector, RealHeight As Int
[Link] = sbParent
RealHeight = [Link]("getHeight")
If RealHeight = 0 Then
DoEvents
RealHeight = [Link]("getHeight")
End If
Return RealHeight
Else
Return [Link]
End If
End Sub
#End Region

#Region Animation
Public Sub SetInterpolator(Value As Float)
sbInterpolator = Value

733
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

End Sub

Private Sub Animate(Progression As Int)


Select sbPosition
Case 0 'LEFT
If sbAnimType > 0 Then [Link] = pnlSidebarStartX + Progression
If sbAnimType < 2 Then [Link] = pnlContentStartX + Progression
If sbAnimType = 2 Then
If [Link] Then [Link] = [Link] +
[Link]
If [Link] Then [Link] = [Link] +
[Link] - ([Link] / 2)
Else
If [Link] Then [Link] = [Link]
If [Link] Then [Link] = [Link] -
([Link] / 2)
End If
Case 1 'RIGHT
If sbAnimType > 0 Then [Link] = pnlSidebarStartX + Progression
If sbAnimType < 2 Then [Link] = pnlContentStartX + Progression
If sbAnimType = 2 Then
If [Link] Then [Link] = [Link] -
[Link]
If [Link] Then [Link] = [Link] -
([Link] / 2)
Else
If [Link] Then [Link] = [Link] +
[Link] - [Link]
If [Link] Then [Link] = [Link] +
[Link] - ([Link] / 2)
End If
Case 2 'TOP
If sbAnimType > 0 Then [Link] = pnlSidebarStartY + Progression
If sbAnimType < 2 Then [Link] = pnlContentStartY + Progression
If sbAnimType = 2 Then
If [Link] Then [Link] = [Link] +
[Link]
If [Link] Then [Link] = [Link] +
[Link] - ([Link] / 2)

734
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Else
If [Link] Then [Link] = [Link]
If [Link] Then [Link] = [Link] -
([Link] / 2)
End If
Case 3 'BOTTOM
If sbAnimType > 0 Then [Link] = pnlSidebarStartY + Progression
If sbAnimType < 2 Then [Link] = pnlContentStartY + Progression
If sbAnimType = 2 Then
If [Link] Then [Link] = [Link] -
[Link]
If [Link] Then [Link] = [Link] -
([Link] / 2)
Else
If [Link] Then [Link] = [Link] +
[Link] - [Link]
If [Link] Then [Link] = [Link] +
[Link] - ([Link] / 2)
End If
End Select
sbIsVisible = (CalcDistance(FROM_CLOSE) <> 0)
End Sub

Private Sub AnimateSidebar(Close As Boolean)


Dim AnimDistance, AnimDuration As Int
Dim PctStillToMove As Float
If Close Then
AnimDistance = CalcDistance(FROM_CLOSE)
PctStillToMove = Abs(AnimDistance) / [Link]
AnimDuration = sbCloseDuration * PctStillToMove
sbAnimInProgress = CLOSING
Else
AnimDistance = CalcDistance(FROM_OPEN)
PctStillToMove = Abs(AnimDistance) / [Link]
AnimDuration = sbOpenDuration * PctStillToMove
sbAnimInProgress = OPENING
End If
If AnimDistance = 0 Then
sbAnimInProgress = 0

735
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

TriggerFinalEvent
Return
End If

pnlSidebarStartX = [Link]
pnlSidebarStartY = [Link]
pnlContentStartX = [Link]
pnlContentStartY = [Link]
sbStopAnim = False
Dim Progression As Float
Dim EndTime, DeltaTime As Long
EndTime = [Link] + AnimDuration
Do While [Link] < EndTime
DeltaTime = EndTime - [Link]
Animate(Power(1 - (DeltaTime / AnimDuration), sbInterpolator) * AnimDistance)
If SubExists(sbModule, sbSubMove) Then
CallSub2(sbModule, sbSubMove, Not(Close))
End If
DoEvents 'Processes the draw messages and keeps the UI responsive
If sbStopAnim Then
DeltaTime = 0
Exit
End If
Loop
If DeltaTime <> 0 Then Animate(AnimDistance)

sbAnimInProgress = 0
TriggerFinalEvent
End Sub
#End Region

Public Sub OpenSidebar


If sbAnimInProgress = CLOSING Then
sbStopAnim = True
CallSubDelayed2(Me, "AnimateSidebar", OPEN_ANIM)
Else If sbAnimInProgress = 0 Then
AnimateSidebar(OPEN_ANIM)
End If
End Sub

736
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Public Sub CloseSidebar


If sbAnimInProgress = OPENING Then
sbStopAnim = True
CallSubDelayed2(Me, "AnimateSidebar", CLOSE_ANIM)
Else If sbAnimInProgress = 0 Then
AnimateSidebar(CLOSE_ANIM)
End If
End Sub

Public Sub IsSidebarVisible As Boolean


Return sbIsVisible
End Sub

#Region Button, handle & swipe gesture


Public Sub SetOpenCloseButton(Btn As View)
If Btn = Null Then Return
Dim r As Reflector
[Link] = Btn
[Link]("Btn_Click")
End Sub

Private Sub Btn_Click(ViewTag As Object)


If IsSidebarVisible Then
If sbAnimInProgress = CLOSING Then
OpenSidebar
Else
CloseSidebar
End If
Else
OpenSidebar
End If
End Sub

Public Sub AddOpenCloseHandle(Hdl As View, Position As Int, Width As Int, Height As Int, FinalMovement
As Byte)
If Hdl = Null Then Return

sbHandle = Hdl
Select sbPosition

737
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Case 0 'LEFT
[Link](Hdl, [Link], Position, Width, Height)
Case 1 'RIGHT
[Link](Hdl, [Link] + [Link] - Width, Position,
Width, Height)
Case 2 'TOP
[Link](Hdl, Position, [Link], Width, Height)
Case 3 'BOTTOM
[Link](Hdl, Position, [Link] + [Link] - Height,
Width, Height)
End Select
sbFinalMovement = FinalMovement

Dim r As Reflector
[Link] = Hdl
[Link]("Gesture_onTouch")
End Sub

Public Sub EnableSwipeGesture(Enabled As Boolean, GestureAreaSize As Int, FinalMovement As Byte)


If Not(Enabled) Then
If [Link] Then [Link]
pnlGesture = Null
Return
End If

If [Link] Then
Select sbPosition
Case 0 'LEFT
[Link]([Link] - (GestureAreaSize / 2), 0,
GestureAreaSize, getParentHeight)
Case 1 'RIGHT
[Link]([Link] + [Link] -
(GestureAreaSize / 2), 0, GestureAreaSize, getParentHeight)
Case 2 'TOP
[Link](0, [Link] - (GestureAreaSize / 2),
getParentWidth, GestureAreaSize)
Case 3 'BOTTOM
[Link](0, [Link] + [Link] -
(GestureAreaSize / 2), getParentWidth, GestureAreaSize)

738
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

End Select
Else
[Link]("")
Select sbPosition
Case 0 'LEFT
[Link](pnlGesture, [Link] - (GestureAreaSize / 2),
0, GestureAreaSize, getParentHeight)
Case 1 'RIGHT
[Link](pnlGesture, [Link] + [Link] -
(GestureAreaSize / 2), 0, GestureAreaSize, getParentHeight)
Case 2 'TOP
[Link](pnlGesture, 0, [Link] - (GestureAreaSize /
2), getParentWidth, GestureAreaSize)
Case 3 'BOTTOM
[Link](pnlGesture, 0, [Link] + [Link] -
(GestureAreaSize / 2), getParentWidth, GestureAreaSize)
End Select

Dim r As Reflector
[Link] = pnlGesture
[Link]("Gesture_onTouch")
End If
sbFinalMovement = FinalMovement
End Sub
#End Region

Private Sub CalcDistance(FromOpen As Boolean) As Int


Select sbPosition
Case 0 'LEFT
If sbAnimType = 2 Then
If FromOpen Then
Return - [Link]
Else
Return - [Link] - [Link]
End If
Else
If FromOpen Then
Return [Link] - [Link]
Else

739
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Return - [Link]
End If
End If
Case 1 'RIGHT
If sbAnimType = 2 Then
If FromOpen Then
Return - [Link] + [Link] -
[Link]
Else
Return - [Link] + [Link]
End If
Else
If FromOpen Then
Return - [Link] - [Link]
Else
Return - [Link]
End If
End If
Case 2 'TOP
If sbAnimType = 2 Then
If FromOpen Then
Return - [Link]
Else
Return - [Link] - [Link]
End If
Else
If FromOpen Then
Return [Link] - [Link]
Else
Return - [Link]
End If
End If
Case 3 'BOTTOM
If sbAnimType = 2 Then
If FromOpen Then
Return - [Link] + [Link] -
[Link]
Else
Return - [Link] + [Link]

740
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

End If
Else
If FromOpen Then
Return - [Link] - [Link]
Else
Return - [Link]
End If
End If
End Select
End Sub

Private Sub Gesture_onTouch(ViewTag As Object, Action As Int, X As Float, Y As Float, MotionEvent As


Object) As Boolean
If Action = 0 Then
sbStopAnim = True
sbStartX = X
sbStartY = Y

Else If Action = 2 Then


Dim OldPos As Int
Select sbPosition
Case 0 'LEFT
If sbAnimType = 2 Then
OldPos = [Link]
[Link] = Max(-[Link], Min([Link]
+ X - sbStartX, 0))
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
Else
OldPos = [Link]
[Link] = Max(0, Min([Link] + X - sbStartX,
[Link]))
If sbAnimType = 1 Then [Link] = [Link] -
[Link]
If [Link] Then [Link] = [Link] -
OldPos + [Link]

741
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

If [Link] Then [Link] =


[Link] - OldPos + [Link]
End If
sbIsOpening = X > sbStartX
Case 1 'RIGHT
If sbAnimType = 2 Then
OldPos = [Link]
[Link] = Max([Link] - [Link],
Min([Link] + X - sbStartX, [Link]))
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
Else
OldPos = [Link]
[Link] = Max(-[Link], Min([Link]
+ X - sbStartX, 0))
If sbAnimType = 1 Then [Link] = [Link] +
[Link]
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
End If
sbIsOpening = X < sbStartX
Case 2 'TOP
If sbAnimType = 2 Then
OldPos = [Link]
[Link] = Max(-[Link], Min([Link]
+ Y - sbStartY, 0))
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
Else
OldPos = [Link]
[Link] = Max(0, Min([Link] + Y - sbStartY,
[Link]))

742
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

If sbAnimType = 1 Then [Link] = [Link] -


[Link]
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
End If
sbIsOpening = Y > sbStartY
Case 3 'BOTTOM
If sbAnimType = 2 Then
OldPos = [Link]
[Link] = Max([Link] - [Link],
Min([Link] + Y - sbStartY, [Link]))
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
Else
OldPos = [Link]
[Link] = Max(-[Link], Min([Link]
+ Y - sbStartY, 0))
If sbAnimType = 1 Then [Link] = [Link] +
[Link]
If [Link] Then [Link] = [Link] -
OldPos + [Link]
If [Link] Then [Link] =
[Link] - OldPos + [Link]
End If
sbIsOpening = Y < sbStartY
End Select
sbIsVisible = (CalcDistance(FROM_CLOSE) <> 0)

If SubExists(sbModule, sbSubMove) Then


If sbIsOpening Then
CallSub2(sbModule, sbSubMove, True)
Else
CallSub2(sbModule, sbSubMove, False)
End If
End If

743
ထာ့ထာ့ေစာလျငး Basic4android ်ဖငးံ Android Application ေရ့နညး့ (ဿ)

Else If Action = 1 Then


If sbFinalMovement > 0 AND sbIsVisible Then
If sbFinalMovement = 2 Then sbIsOpening = Abs(CalcDistance(FROM_CLOSE))
>= Abs(CalcDistance(FROM_OPEN))
If sbIsOpening Then
CallSubDelayed2(Me, "AnimateSidebar", OPEN_ANIM)
Else
CallSubDelayed2(Me, "AnimateSidebar", CLOSE_ANIM)
End If
Else
TriggerFinalEvent
End If
End If
Return True
End Sub

Sub TriggerFinalEvent
If CalcDistance(FROM_OPEN) = 0 AND SubExists(sbModule, sbSubFullyOpen) Then
CallSub(sbModule, sbSubFullyOpen)
Else If CalcDistance(FROM_CLOSE) = 0 AND SubExists(sbModule, sbSubFullyClosed) Then
CallSub(sbModule, sbSubFullyClosed)
End If
End Sub

Reference: [Link]

744

You might also like