'Activity module
Sub Process_Globals
	'These global variables will be declared once when the application starts.
	'These variables can be accessed from all modules.
	Dim SQLMusic As SQL
	Dim DBFilename As String	:DBFilename="BMBMobile.s3db"
	Dim DBFileDir As String		:DBFileDir=File.DirRootExternal
	Dim DBETableName As String	:DBETableName="Events"
	Dim DBMTableName As String	:DBMTableName="Music"

' variables from the ScrollviewExample	
	Dim NumberOfColumns As Int				: NumberOfColumns = 5
	Dim NumberOfRows As Int					: NumberOfRows = 0
	Dim NumberOfVisibleRows As Int	
	Dim RowHeight As Int					: RowHeight = 40dip
	Dim RowLineWidth As Int					: RowLineWidth = 1dip
	Dim RowHeight_1 As Int					: RowHeight_1 = RowHeight - RowLineWidth
	Dim ColLineWidth As Int					: ColLineWidth = 1dip
	Dim ColumnWidth(NumberOfColumns) As Int
		ColumnWidth(0) = 50dip
		ColumnWidth(1) = 150dip
		ColumnWidth(2) = 80dip
		ColumnWidth(3) = 100dip
		ColumnWidth(4) = 100dip
'		ColumnWidth(5) = 100dip
'		ColumnWidth(6) = 100dip
'		ColumnWidth(7) = 80dip
	Dim ColumnWidth_1(NumberOfColumns) As Int
	Dim TotalColumnWidth(NumberOfColumns + 1) As Int
	Dim HeaderColor As Int					: HeaderColor = Colors.Blue
	Dim HeaderFontColor As Int				: HeaderFontColor = Colors.Yellow
	Dim HeaderLineColor As Int				: HeaderLineColor = Colors.cyan
	Dim LineColor As Int					: LineColor = Colors.Black
	Dim CellColor As Int					: CellColor = Colors.RGB(255,255,220)
	Dim FontColor As Int					: FontColor = Colors.Black
	Dim FontSize As Float					: FontSize = 14
	Dim Alignment As Int					: Alignment = Gravity.CENTER
	Dim SelectedRow As Int					: SelectedRow = -1
	Dim SelectedRowColor As Int				: SelectedRowColor=Colors.RGB(255,196,255)
	Dim SelectedCellColor As Int			: SelectedCellColor=Colors.RGB(255,150,255)
	Type RowCol (Row As Int, Col As Int)
	Dim MoveLeft0, MoveX0, MoveX1, DeltaScroll, DeltaX As Float
	Dim Time0 As Long

' variables for SQLExamle
	Dim ColumnName(NumberOfColumns) As String	' names of the columns
		ColumnName(0) = "CatNo"
		ColumnName(1) = "Title"
		ColumnName(2) = "Book"
		ColumnName(3) = "Composer"
		ColumnName(4) = "Arranger"
'		ColumnName(5) = "Source"
'		ColumnName(6) = "Scanned"
'		ColumnName(7) = "Book"
	Dim ColumnToSort As String				: ColumnToSort = 0		' index of the column to sort 
	Dim Filter As Boolean					: Filter = False		' flag for the filter function
	Dim FilterType As String				: FilterType = "AND"	' variable for the filter AND / OR
	Dim SortDirection(NumberOfColumns) As String					' sort direction for the columns
	
' variables from the ScrollviewExample	
End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
	Dim imgSelctionBack As ImageView
	Dim lblAboutUs As Label
	Dim lblContactUs As Label
	Dim lblEvents As Label
	Dim lblJoinUs As Label
	Dim btnBand As Button
	Dim btnEveryone As Button
	Dim imgMainLogo As ImageView
	Dim lblMainTitle As Label
	Dim PrevPanel As String
	Dim lblNamePlate As Label
	Dim Timer1 As Timer
	Dim scvFilter, scvEdit As ScrollView
	Dim pnlHeader As Panel
	Dim pnlToolBox, pnlEdit, pnlEditTools, pnlFilter, pnlFilterTools As Panel
	Dim pnlScroll As Panel

	Dim btnAll As Button
	Dim btnBlue As Button
	Dim btnConcert As Button
	Dim btnFind As Button
	Dim btnWhite As Button
	Dim btnXmas As Button
	Dim scvLibrary As ScrollView
	Dim skbScroll As SeekBar
	Dim IsBandMember As Boolean
	Dim BandMemberName As String
	Dim BMBPanel As Panel
	Dim LHeight As Float
	Dim EHeight As Float
	Dim THeight As Float
	Dim btnFilter, btnFilterGo, btnFilterAND, btnFilterOR As Button
	Dim btnGoAll As Button
	Dim btnGoBlue As Button
	Dim btnGoConcert As Button
	Dim btnGoLibrary As Button
	Dim btnGoRed As Button
	Dim btnGoWhite As Button
	Dim TheButtonPressed As String
	Dim TheMusicString As String
End Sub

Sub Activity_Create(FirstTime As Boolean)
	Log(GetDeviceId)
	If File.ExternalWritable=False Then
		Msgbox("Unable to write on storage card","")
		Return
	End If
	LoadLayoutToPanel("main")

	GetPhoneNumber
	If IsBandMember Then
		lblNamePlate.text = BandMemberName
		btnBand.Visible = True
	End If
	ProgressDialogShow("Initialising database...")
	File.Copy(File.DirAssets, DBFilename, DBFileDir, DBFilename)
	SQLMusic.Initialize(DBFileDir,DBFilename, True)
	ProgressDialogHide
	


End Sub
Sub Activity_Resume
End Sub

Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub GetDeviceId As String    
Dim r As Reflector   
Dim Api As Int    
Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT")    
If Api < 9 Then        'Old device        
	If File.Exists(File.DirInternal, "__id") Then            
		Return File.ReadString(File.DirInternal, "__id")        
	Else            
		Dim ID As Int            
		ID = Rnd(0x10000000, 0x7FFFFFFF)            
		File.WriteString(File.DirInternal, "__id", ID)            
		Return ID        
	End If    
Else        'New device        
	Return r.GetStaticField("android.os.Build", "SERIAL")    
End If
End Sub
Sub GetPhoneNumber
	Dim Pin As PhoneId
	Dim BandMember As String
	BandMember=Pin.GetLine1Number
	Select BandMember
		Case "07790771009"
			BandMemberName = "Graham"
			IsBandMember = True
		Case "07528569512"
			BandMemberName = "James"
			IsBandMember = True
		Case "07762567696"
			BandMemberName = "Alan"
			IsBandMember = True
	End Select
		If IsBandMember Then
		lblNamePlate.text = BandMemberName
		btnBand.Visible = True
	End If

End Sub
Sub LoadLayoutToPanel (Layout As String) 
If BMBPanel.IsInitialized Then 
	Select Case Layout
		Case "main"
			PrevPanel = "none"
			If IsBandMember Then
				Activity.Title = "Bude Metric Brass - " & BandMemberName
			Else
				Activity.Title = "Bude Metric Brass"
			End If
		Case "PublicSelection"
			PrevPanel = "main"
			If IsBandMember Then
				Activity.Title = "Select View - " & BandMemberName
			Else
				Activity.Title = "Select View"
			End If
		Case "MusicLibrary"
			PrevPanel = "main"
			If IsBandMember Then
				Activity.Title = "Find Music - " & BandMemberName
			End If
	End Select
	Activity.RemoveViewAt(0) 
End If 
BMBPanel.Initialize("BMBPanel") 
BMBPanel.LoadLayout(Layout) 
Activity.AddView(BMBPanel, 0, 0, 100%x, 100%y)
End Sub
Sub btnEveryone_Click
	LoadLayoutToPanel("PublicSelection")
	PrevPanel= "main"
	' position pnlToolBox on the bottom of the screen
	pnlToolBox.Top = Activity.Height - pnlToolBox.Height
	Dim i As Int

	' initialze the internal column width and left coordinates
	TotalColumnWidth(0) = ColLineWidth
	For i = 0 To NumberOfColumns - 1
		ColumnWidth_1(i) = ColumnWidth(i) - ColLineWidth
		TotalColumnWidth(i + 1) = TotalColumnWidth(i) + ColumnWidth(i)
	Next
	
	' initialize the ScrollView width
	SelectedRow = -1		' sets the selected row index to -1
	
	' initilize the database
			File.Copy(File.DirAssets, DBFilename, DBFileDir, DBFilename)
			SQLMusic.Initialize(DBFileDir, DBFilename, True)

End Sub
Sub btnBand_Click
	PrevPanel= "main"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'Library' ORDER BY 'Title' ASC"
	TheButtonPressed = "Library"
	Activity.LoadLayout("MusicLibrary")
	scvLibrary.Initialize(1000dip)
	scvLibrary.Panel.AddView(scvLibrary,0,0,330,450)
	SQLTableRead(TheMusicString)	
End Sub
Sub btnGoWhite_Click
	TheButtonPressed = "White"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'White' ORDER BY 'Title' ASC"
End Sub
Sub btnGoRed_Click
	TheButtonPressed = "Red"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'Red' ORDER BY 'Title' ASC"
End Sub
Sub btnGoLibrary_Click
	TheButtonPressed = "Library"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'Library' ORDER BY 'Title' ASC"
End Sub
Sub btnGoConcert_Click
	TheButtonPressed = "Concert"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'Concert' ORDER BY 'Title' ASC"
End Sub
Sub btnGoBlue_Click
	TheButtonPressed = "Blue"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'Blue' ORDER BY 'Title' ASC"
End Sub
Sub btnGoAll_Click
	TheButtonPressed = "All"
	TheMusicString = "SELECT * FROM Music WHERE Book LIKE 'Library' ORDER BY 'Title' ASC"
End Sub

Sub SQLTableRead(txt As String)
' Reads the SQL data base
	Dim i As Int
	Dim curBlue,curWhite,curRed,curConcert,curAll,curLibrary As Cursor
		Select TheButtonPressed
		Case "All"
			curAll = SQLMusic.ExecQuery(txt)
			Dim Col(NumberOfColumns) As String
			SetHeader(ColumnName)
			NumberOfRows = 0
			For i = 0 To curAll.RowCount - 1
				Dim Col(NumberOfColumns) As String
				curAll.Position = i
				For j = 0 To NumberOfColumns - 1
					Col(j) = curAll.GetString(ColumnName(j))
				Next
				AddRow(Col)
			Next
			curAll.Close
		Case "Blue"
			curBlue = SQLMusic.ExecQuery(txt)
				Dim Col(NumberOfColumns) As String
				SetHeader(ColumnName)
				NumberOfRows = 0
				For i = 0 To curBlue.RowCount - 1
					Dim Col(NumberOfColumns) As String
					curBlue.Position = i
					For j = 0 To NumberOfColumns - 1
						Col(j) = curBlue.GetString(ColumnName(j))
					Next
					AddRow(Col)
				Next
				curBlue.Close
		Case "White"
			curWhite = SQLMusic.ExecQuery(txt)
			Dim Col(NumberOfColumns) As String
			SetHeader(ColumnName)
			NumberOfRows = 0
			For i = 0 To curWhite.RowCount - 1
				Dim Col(NumberOfColumns) As String
				curWhite.Position = i
				For j = 0 To NumberOfColumns - 1
					Col(j) = curWhite.GetString(ColumnName(j))
				Next
				AddRow(Col)
			Next
			curWhite.Close
		Case "Library"
			curLibrary = SQLMusic.ExecQuery(txt)
			Dim Col(NumberOfColumns) As String
			SetHeader(ColumnName)
			NumberOfRows = 0
			For i = 0 To curLibrary.RowCount - 1
				Dim Col(NumberOfColumns) As String
				curLibrary.Position = i
				For j = 0 To NumberOfColumns - 1
					Col(j) = curLibrary.GetString(ColumnName(j))
				Next
				AddRow(Col)
			Next
			curLibrary.Close
		Case "Red"
			curRed = SQLMusic.ExecQuery(txt)
			Dim Col(NumberOfColumns) As String
			SetHeader(ColumnName)
			NumberOfRows = 0
			For i = 0 To curRed.RowCount - 1
				Dim Col(NumberOfColumns) As String
				curRed.Position = i
				For j = 0 To NumberOfColumns - 1
					Col(j) = curRed.GetString(ColumnName(j))
				Next
				AddRow(Col)
			Next
			curRed.Close
		Case "Concert"
			curConcert = SQLMusic.ExecQuery(txt)
			Dim Col(NumberOfColumns) As String
			SetHeader(ColumnName)
			NumberOfRows = 0
			For i = 0 To curConcert.RowCount - 1
				Dim Col(NumberOfColumns) As String
				curConcert.Position = i
				For j = 0 To NumberOfColumns - 1
					Col(j) = curConcert.GetString(ColumnName(j))
				Next
				AddRow(Col)
			Next
			curConcert.Close
	End Select
	Activity.Title = "Music Library"
End Sub
Sub SetHeader(Values() As String)
	'Set the headers values
	If pnlHeader.IsInitialized Then 'should only be called once
		Return
	End If
	pnlHeader.Initialize("")
	pnlHeader.Color = HeaderLineColor

	For i = 0 To NumberOfColumns - 1
		Dim l As Label
		l.Initialize("Header")
		If SortDirection(i) = "ASC" Then
			l.Text = Values(i) & " ?"
		Else 
			l.Text = Values(i) & " ?"
		End If
		l.Text = Values(i)
		l.Gravity = Gravity.CENTER
		l.TextSize = FontSize
		l.Color = HeaderColor
		l.TextColor = HeaderFontColor
		l.Tag = i
		pnlHeader.AddView(l, TotalColumnWidth(i), 0, ColumnWidth_1(i), RowHeight_1)
	Next
	Activity.AddView(pnlHeader, scvLibrary.Left, 0, scvLibrary.Width, RowHeight)
	
End Sub
Sub AddRow(Values() As String)
	'Adds a row to the table
	Dim l As Label
	If Values.Length <> NumberOfColumns Then
		Log("Wrong number of values.")
		Return
	End If

	For i = 0 To NumberOfColumns - 1
		Dim l As Label
		l.Initialize("cell")
		l.Text = Values(i)
		If i = 2 Then
			l.gravity = Gravity.LEFT
		Else
			l.Gravity = Alignment
		End If
		l.TextSize = FontSize
		l.TextColor = FontColor
		l.Color=CellColor
		Dim rc As RowCol
		rc.Initialize
		rc.Col = i
		rc.Row = NumberOfRows
		l.Tag = rc
		scvLibrary.Panel.AddView(l, TotalColumnWidth(i), RowHeight * NumberOfRows, ColumnWidth_1(i), RowHeight_1)
	Next
	NumberOfRows = NumberOfRows + 1
	scvLibrary.Panel.Height = NumberOfRows * RowHeight
End Sub
Sub GetView(Row As Int, Col As Int) As Label
	'Returns the label in the specific cell
	Dim l As Label
	
	l = scvLibrary.Panel.GetView(Row * NumberOfColumns + Col)
	Return l
End Sub
Sub scvLibrary_ScrollChanged(Position As Int)
	
End Sub
Sub lblJoinUs_Click
	
End Sub
Sub lblContactUs_Click
	
End Sub
Sub lblAboutUs_Click
	
End Sub
Sub Cell_Click
	Dim rc As RowCol
	Dim l As Label
	
	l = Sender
	rc = l.Tag
	SelectRow(rc)
	Activity.Title = "Cell: (" & rc.Row & ", " & rc.Col & ")  " & GetCell(rc.Row, rc.Col)
End Sub

Sub Header_Click
	Dim l As Label
	Dim col As Int
	
	l = Sender
	col = l.Tag
	Activity.Title = "Header clicked: " & col

	ColumnToSort = col
	
End Sub

Sub SelectRow(rc As RowCol)
	Dim col As Int

	'Removes the color of previously selected row
	If SelectedRow > -1 Then
		For col = 0 To NumberOfColumns - 1
			GetView(SelectedRow, col).Color = CellColor
		Next
	End If

	SelectedRow = rc.Row
	
	'Sets the color of the selected row and selected cell
	For col = 0 To NumberOfColumns - 1
		If col = rc.col Then
			GetView(rc.Row, col).Color = SelectedCellColor
		Else
			GetView(rc.Row, col).Color = SelectedRowColor
		End If
	Next
	
	If SelectedRow > -1 Then
		btnGoBlue.Visible = True
		btnGoWhite.Visible = True
		btnGoLibrary.Visible = True
		btnGoRed.Visible = True
		btnGoConcert.Visible = True
		btnGoAll.Visible = True
	Else
		btnGoBlue.Visible = False
		btnGoWhite.Visible = False
		btnGoLibrary.Visible = False
		btnGoRed.Visible = False
		btnGoConcert.Visible = False
		btnGoAll.Visible = False
	End If
End Sub
Sub SetCell(Row As Int, Col As Int, Value As String)
	'Sets the value of the given cell
	GetView(Row, Col).Text = Value
End Sub

Sub GetCell(Row As Int, Col As Int) As String
	'Gets the value of the given cell
	Return GetView(Row, Col).Text
End Sub

Sub ClearAll
	'Clears the table
	For i = scvLibrary.Panel.NumberOfViews -1 To 0 Step -1
		scvLibrary.Panel.RemoveViewAt(i)
	Next
	scvLibrary.Panel.Height = 0
	SelectedRow = -1
End Sub
Sub pnlScroll_Touch (Action As Int, X As Float, Y As Float)
	Dim Left As Float
	
	Select Action
	Case Activity.ACTION_DOWN
		MoveLeft0 = -scvLibrary.Left
		MoveX0 = X
		MoveX1 = X
		Time0 = DateTime.Now
	Case Activity.ACTION_MOVE
		Left = MoveLeft0 + (MoveX0 - X)
		Left = Max(Left, 0)
		Left = Min(Left, TotalColumnWidth(NumberOfColumns) - Activity.Width)
		scvLibrary.Left = -Left
		pnlHeader.Left = -Left
		DeltaX = X - MoveX1
		MoveX1 = X
	Case Activity.ACTION_UP
		Time0 = (DateTime.Now - Time0)
		DeltaScroll = (X - MoveX0) / Time0 * 80
		If Abs(DeltaScroll) > 5dip AND Abs(DeltaX) > 10dip Then
			Timer1.Enabled = True
		End If
	End Select
End Sub






Sub btnEdit_Click
	Dim i As Int
	
	pnlEdit.Visible = True
	pnlEdit.BringToFront
	Activity.Title = "Editor"
	
	If NumberOfRows > 0 Then
		EditDispItem(SelectedRow)
	Else
		For i = 0 To NumberOfColumns - 1
			Dim e As EditText
			e = scvEdit.Panel.GetView(i * 2 + 1)
			e.Text = ""
		Next
	End If
End Sub

Sub EditDispItem(Row As Int)
	Dim Cursor1 As Cursor
	Dim i As Int
	Dim txt As String
	
	txt = "SELECT * FROM " & DBMTableName & " WHERE " & ColumnName(0) & " = " & GetCell(Row,0)
	Cursor1 = SQLMusic.ExecQuery(txt)
	Cursor1.Position = 0
	For i = 0 To NumberOfColumns - 1
		Dim e As EditText
		e = scvEdit.Panel.GetView(i * 2 + 1)
		e.Text = Cursor1.GetString(ColumnName(e.Tag))
	Next
End Sub

Sub btnEditBack_Click
	pnlEdit.Visible = False
	Activity.Title = "Database"
End Sub

Sub btnEditModif_Click
	Dim row(NumberOfColumns) As String
	Dim i As Int
	Dim txt As String

	For i = 0 To NumberOfColumns - 1
		Dim e As EditText
		e = scvEdit.Panel.GetView(i * 2 + 1)
		row(e.Tag) = e.Text
	Next
	
	txt="UPDATE "&DBMTableName&" Set "&ColumnName(0)&" = '" & row(0)
	For i = 1 To NumberOfColumns - 1
		txt = txt & "', "&ColumnName(i) & " = '" & row(i)
	Next 
	txt=txt&"' WHERE "&ColumnName(0)&" = '"&GetCell(SelectedRow,0)& "'"
	SQLMusic.ExecNonQuery(txt)
	
	For i = 0 To NumberOfColumns - 1
		SetCell(SelectedRow,i,row(i))
	Next
	
End Sub
Sub Activity_KeyPress (KeyCode As Int) As Boolean
If KeyCode = KeyCodes.KEYCODE_BACK Then
	If PrevPanel = "none" Then
		Return False
	Else
		LoadLayoutToPanel(PrevPanel)
		If IsBandMember Then
			lblNamePlate.text = BandMemberName
			btnBand.Visible = True
		End If
		Return True
	End If
Else
	Return False
End If
End Sub
Sub Timer1_Tick
	Dim Left As Float
	
	Left = scvLibrary.Left + DeltaScroll
	If Left > 0 Then
		Left = 0
		Timer1.Enabled = False
	End If
	If Left < -(TotalColumnWidth(NumberOfColumns) - Activity.Width) Then
		Left = -(TotalColumnWidth(NumberOfColumns) - Activity.Width)
		Timer1.Enabled = False
	End If
	
	scvLibrary.Left = Left
	
	DeltaScroll = DeltaScroll / 1.2
	If Abs(DeltaScroll) < 5dip Then
		Timer1.Enabled = False
	End If
End Sub
Sub pnlHeader_Click
	
End Sub