mirror of
https://github.com/KeymonSoft/Kelloggs_v4.git
synced 2026-04-17 18:26:11 +00:00
492 lines
13 KiB
QBasic
492 lines
13 KiB
QBasic
B4A=true
|
|
Group=Default Group
|
|
ModulesStructureVersion=1
|
|
Type=Class
|
|
Version=8.3
|
|
@EndOfDesignText@
|
|
' Update 1.0.2 (04/01/2018)
|
|
#Event: ItemClick (Position As Int, Value as String)
|
|
#DesignerProperty: Key: TextColor, DisplayName: TextColor, FieldType: Color, DefaultValue: 0xFF000000,Description: Text color
|
|
#DesignerProperty: Key: TextSize, DisplayName: TextSize, FieldType: int, DefaultValue: 14,Description: Label Text Size
|
|
#DesignerProperty: Key: HintColor, DisplayName: HintColor, FieldType: Color, DefaultValue: 0xFF888888,Description: Hint color, noselected opstion
|
|
#DesignerProperty: Key: BackgroundColor, DisplayName: Color background, FieldType: Color, DefaultValue: 0xFFFFFFFF, Description: You can use the built-in color picker to find the color values.
|
|
#DesignerProperty: Key: BackgroundColorList, DisplayName: ListColor background, FieldType: Color, DefaultValue: 0xFF000000, Description: You can use the built-in color picker to find the color values.
|
|
#DesignerProperty: Key: GrayDisplay, DisplayName: Gray Display, FieldType: boolean, DefaultValue: False, Description: Gray Display.
|
|
#DesignerProperty: Key: RoundCorner, DisplayName:RoundCorner, FieldType: boolean, DefaultValue: False, Description: RoundCorner.
|
|
|
|
Sub Class_Globals
|
|
Public SelectedItem As String
|
|
Public SelectedID As String
|
|
Public SelectedIndex As Int
|
|
Public GrayDisplay As Boolean
|
|
Public BColor, TColor,HintColor, BColorList As Int
|
|
Public RoundCorner As Boolean
|
|
Public ScrollViewParent As ScrollView = Null
|
|
|
|
Private EventName As String 'ignore
|
|
Private CallBack As Object 'ignore
|
|
Private mBase As Panel
|
|
Public MyAct As Panel
|
|
Private Lab As Label
|
|
Private AppPanel As Panel
|
|
Public Top,Left As Int
|
|
Private ListPanel As ScrollView
|
|
|
|
Private ListItem As List
|
|
Private TextSize As Int
|
|
Type Item (Text As String,TextHelp As String,ID As String, BackgroundColor As Int, TextColor As Int, Image As Bitmap, G As Int)
|
|
End Sub
|
|
|
|
Public Sub Initialize (vCallback As Object, vEventName As String)
|
|
EventName = vEventName
|
|
CallBack = vCallback
|
|
ListItem.Initialize
|
|
Lab.Initialize("Lab")
|
|
SelectedItem=""
|
|
SelectedID=""
|
|
SelectedIndex=-1
|
|
|
|
AppPanel.Initialize("AppPanel")
|
|
ListPanel.Initialize(1000dip)
|
|
End Sub
|
|
|
|
Public Sub Invalidate
|
|
mBase.Invalidate
|
|
End Sub
|
|
|
|
Public Sub DesignerCreateView (Base As Panel, Lbl As Label, Props As Map)
|
|
mBase = Base
|
|
mBase.Tag=Me
|
|
|
|
Left=0
|
|
Top=0
|
|
Try
|
|
Dim Obj As View = mBase
|
|
Log(GetType(Obj))
|
|
Do While Not(GetType(Obj) = "android.widget.FrameLayout")
|
|
Left=Left+Obj.Left
|
|
Top=Top+Obj.Top
|
|
Obj=Obj.Parent
|
|
Loop
|
|
MyAct=Obj
|
|
Catch
|
|
Dim r As Reflector
|
|
r.Target = r.GetActivityBA
|
|
MyAct=r.GetField("vg")
|
|
End Try
|
|
|
|
If Props.ContainsKey("BackgroundColor") Then BColor=Props.Get("BackgroundColor")
|
|
If Props.ContainsKey("BackgroundColorList") Then BColorList=Props.Get("BackgroundColorList")
|
|
If Props.ContainsKey("TextColor") Then TColor=Props.Get("TextColor")
|
|
If Props.ContainsKey("TextSize") Then TextSize=Props.Get("TextSize")
|
|
If Props.ContainsKey("HintColor") Then HintColor=Props.Get("HintColor")
|
|
If Props.ContainsKey("GrayDisplay") Then GrayDisplay=Props.Get("GrayDisplay")
|
|
If Props.ContainsKey("RoundCorner") Then RoundCorner=Props.Get("RoundCorner")
|
|
|
|
Lab.TextColor=TColor
|
|
Lab.Color=BColor
|
|
Lab.Gravity=Gravity.CENTER
|
|
Lab.TextSize=TextSize
|
|
Lab.BringToFront
|
|
SetIndex(SelectedIndex)
|
|
mBase.AddView(Lab,0,0,mBase.Width,mBase.Height)
|
|
|
|
Dim Ima As Panel
|
|
Ima.Initialize("")
|
|
LoadDrawableByName(Ima,"dropdown_ic_arrow_normal_holo_light")
|
|
mBase.AddView(Ima,mBase.Width-40dip,(mBase.Height/2)-20dip,40dip,40dip)
|
|
|
|
End Sub
|
|
|
|
Private Sub LoadDrawableByName(Control As View, ImageName As String) As Boolean
|
|
Dim R As Reflector
|
|
Try
|
|
R.Target = R.GetContext
|
|
R.Target = R.RunMethod("getResources")
|
|
R.Target = R.RunMethod("getSystem")
|
|
Dim ID_Drawable As Int
|
|
ID_Drawable = R.RunMethod4("getIdentifier", Array As Object(ImageName, "drawable", "android"), _
|
|
Array As String("java.lang.String", "java.lang.String", "java.lang.String"))
|
|
R.Target = R.GetContext
|
|
R.Target = R.RunMethod("getResources")
|
|
Control.Background = R.RunMethod2("getDrawable", ID_Drawable, "java.lang.int")
|
|
Return True
|
|
|
|
Catch
|
|
LogColor("ERROR.LoadDrawableByName:" & LastException.Message, Colors.Red)
|
|
Return False
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Public Sub GetBase As Panel
|
|
Return mBase
|
|
End Sub
|
|
|
|
#Region Private
|
|
|
|
private Sub Lab_Click
|
|
Dim I As IME
|
|
I.Initialize("")
|
|
I.HideKeyboard
|
|
|
|
DesignerList
|
|
End Sub
|
|
|
|
Private Sub AppPanel_Touch (Action As Int, X As Float, Y As Float)
|
|
'AppPanel.Visible=False
|
|
AppPanel.RemoveView
|
|
End Sub
|
|
|
|
Sub Corner(Colore As Int) As ColorDrawable
|
|
Dim cdb As ColorDrawable
|
|
cdb.Initialize(Colore, 20dip)
|
|
Return cdb
|
|
End Sub
|
|
|
|
Sub RoundBorders(B0 As Bitmap, radius As Int) As Bitmap
|
|
|
|
Dim B1,B2 As Bitmap
|
|
Dim cv As Canvas
|
|
Dim Rect1 As Rect
|
|
|
|
B2.InitializeMutable(40dip,40dip)
|
|
cv.Initialize2(B2)
|
|
Dim Drawable1 As ColorDrawable
|
|
Drawable1.Initialize(Colors.White,radius)
|
|
Rect1.Initialize(0,0,B2.Width-1,B2.Height-1)
|
|
cv.DrawDrawable(Drawable1,Rect1)
|
|
|
|
B1.InitializeMutable(40dip,40dip)
|
|
cv.Initialize2(B1)
|
|
cv.DrawBitmap(B0,Null,Rect1)
|
|
|
|
For r=0 To B2.Height-1
|
|
For c=0 To B2.Width-1
|
|
If B2.GetPixel(c,r)=0 Then
|
|
cv.DrawPoint(c,r,0)
|
|
End If
|
|
Next
|
|
Next
|
|
cv.DrawCircle(20dip,20dip,20dip,Colors.Black,False,1dip)
|
|
'P.SetBackgroundImage(B1)
|
|
Return B1
|
|
End Sub
|
|
|
|
private Sub DesignerList
|
|
Dim HeightListView As Int = 0
|
|
Dim Space As Int
|
|
|
|
If ListItem.size>0 Then
|
|
If AppPanel.IsInitialized Then AppPanel.RemoveView
|
|
MyAct.addview(AppPanel,0,0,100%x,100%Y)
|
|
|
|
If RoundCorner Then ListPanel.Color=Colors.Transparent Else ListPanel.Color=BColorList
|
|
ListPanel.RemoveView
|
|
ListPanel.Panel.RemoveAllViews
|
|
ListPanel.Panel.Height=0
|
|
|
|
For i=0 To ListItem.Size-1
|
|
Dim Item As Item
|
|
Item.Initialize
|
|
|
|
Item = ListItem.Get(i)
|
|
Dim P As Panel
|
|
P.Initialize("PanelClick")
|
|
If RoundCorner Then P.Background=Corner(Item.BackgroundColor) Else P.Color=Item.BackgroundColor
|
|
|
|
P.Tag=I
|
|
Try
|
|
Space=40dip
|
|
Dim Ima As ImageView
|
|
Ima.Initialize("")
|
|
Ima.Gravity=Gravity.FILL
|
|
If RoundCorner Then
|
|
Ima.SetBackgroundImage(RoundBorders(Item.Image,20dip))
|
|
Else
|
|
Ima.SetBackgroundImage(Item.Image)
|
|
End If
|
|
|
|
P.AddView(Ima,0dip,5dip,40dip,40dip)
|
|
Catch
|
|
Space=0dip
|
|
End Try
|
|
|
|
Dim La As Label
|
|
La.Initialize("")
|
|
La.Text=Item.text
|
|
La.TextSize=15
|
|
La.Color=Colors.Transparent
|
|
La.TextColor=Item.TextColor
|
|
La.Typeface=Typeface.DEFAULT_BOLD
|
|
La.Gravity=Item.G
|
|
|
|
P.AddView(La,Space,0dip,mBase.Width-Space,30dip)
|
|
If Item.texthelp.Trim<>"" Then
|
|
Dim La As Label
|
|
La.Initialize("")
|
|
La.Text=Item.TextHelp
|
|
La.TextSize=12
|
|
La.Color=Colors.Transparent
|
|
La.TextColor=Item.TextColor
|
|
La.Gravity=Item.G
|
|
P.AddView(La,Space,25dip,mBase.Width-Space,30dip)
|
|
Else
|
|
La.Height=50dip
|
|
End If
|
|
ListPanel.Panel.AddView(P,-mBase.Width,HeightListView,mBase.Width-2DIP,49dip)
|
|
P.SetLayoutAnimated(100+(HeightListView/3),1dip,HeightListView,mBase.Width-2DIP,49dip)
|
|
HeightListView=HeightListView+50dip
|
|
Next
|
|
ListPanel.Panel.Height=HeightListView
|
|
|
|
Dim LeftSpinner,TopSpinner,HeightSpinner,Yafter As Int
|
|
|
|
If GrayDisplay Then AppPanel.Color=Colors.aRGB(200,0,0,0) Else AppPanel.Color=Colors.Transparent
|
|
If ScrollViewParent.IsInitialized Then
|
|
If Left+mBase.Width+ScrollViewParent.Left>100%x Then LeftSpinner=100%x-mBase.Width Else LeftSpinner=Left
|
|
Else
|
|
If Left+mBase.Width>100%x Then LeftSpinner=100%x-mBase.Width Else LeftSpinner=Left
|
|
End If
|
|
|
|
Yafter=100%y-Top-mBase.Height
|
|
If ScrollViewParent.IsInitialized Then
|
|
Yafter=Yafter+ScrollViewParent.ScrollPosition
|
|
Top=Top-ScrollViewParent.ScrollPosition
|
|
End If
|
|
If (HeightListView>Top)And (HeightListView>Yafter) Then
|
|
' Non va bene dappertutto
|
|
If (Top>100%y-Top-mBase.Height) Then
|
|
'sopra é più grande
|
|
TopSpinner=0dip
|
|
HeightSpinner=Top
|
|
Else
|
|
'sotto è più grande
|
|
TopSpinner=Top+mBase.Height
|
|
HeightSpinner=100%y-Top-mBase.Height
|
|
End If
|
|
Else if (HeightListView>Top) And (HeightListView<=Yafter) Then
|
|
' Va bene di sotto
|
|
TopSpinner=Top+mBase.Height
|
|
HeightSpinner=HeightListView
|
|
Else If (HeightListView<=Top)And (HeightListView>Yafter) Then
|
|
' Va bene di sopra
|
|
TopSpinner=Top+mBase.Height-HeightListView
|
|
HeightSpinner=HeightListView
|
|
Else
|
|
' Haqspazio sopra e sotto
|
|
TopSpinner=Top+mBase.Height
|
|
HeightSpinner=HeightListView
|
|
End If
|
|
|
|
If ScrollViewParent.IsInitialized=False Then
|
|
AppPanel.AddView(ListPanel,LeftSpinner,TopSpinner,mBase.Width,HeightSpinner)
|
|
Else
|
|
AppPanel.AddView(ListPanel,LeftSpinner,TopSpinner,mBase.Width,HeightSpinner)
|
|
End If
|
|
'AppPanel.Visible=True
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub PanelClick_Click
|
|
Dim P As Panel = Sender
|
|
Dim Position As Int = P.Tag
|
|
|
|
SelectedIndex=Position
|
|
SelectedID=GetID(Position)
|
|
SelectedItem=GetItem(Position)
|
|
Lab.TextColor=TColor
|
|
Lab.Text=SelectedItem
|
|
Lab.BringToFront
|
|
If SubExists(CallBack,EventName & "_ItemClick") Then CallSub3(CallBack,EventName & "_ItemClick",Position,GetItem(Position))
|
|
|
|
'AppPanel.Visible=False
|
|
AppPanel.RemoveView
|
|
End Sub
|
|
|
|
#End Region
|
|
|
|
#Region Method
|
|
|
|
Public Sub Add(Text As String, TextHelp As String,ID As String, BackgroundColor As Int, TextColor As Int, Gravities As Int,Image As Bitmap)
|
|
Dim Item As Item
|
|
|
|
Item.Initialize
|
|
Item.Text=Text
|
|
Item.TextHelp=TextHelp
|
|
Item.ID=ID
|
|
Item.BackgroundColor=BackgroundColor
|
|
Item.TextColor=TextColor
|
|
Item.G=Gravities
|
|
'Log(Image)
|
|
If Image.IsInitialized Then
|
|
Item.Image=Image
|
|
Else
|
|
Dim Bmp As Bitmap
|
|
Bmp=Null
|
|
Item.Image=Bmp
|
|
End If
|
|
ListItem.Add(Item)
|
|
|
|
End Sub
|
|
|
|
Public Sub AddAll(L As List, TextHelp As String, BackgroundColor As Int, TextColor As Int, Gravities As Int)
|
|
Dim Bmp As Bitmap = Null
|
|
|
|
For i=0 To L.Size-1
|
|
Dim Item As Item
|
|
Item.Text=L.Get(i)
|
|
Item.TextHelp=TextHelp
|
|
Item.ID=i
|
|
Item.BackgroundColor=BackgroundColor
|
|
Item.TextColor=TextColor
|
|
Item.G=Gravities
|
|
Item.Image=Bmp
|
|
ListItem.Add(Item)
|
|
Next
|
|
End Sub
|
|
|
|
public Sub Size As Int
|
|
Return ListItem.Size
|
|
End Sub
|
|
|
|
Public Sub Clear
|
|
ListItem.Clear
|
|
DesignerList
|
|
SelectedIndex=-1
|
|
SelectedID=""
|
|
SelectedItem=""
|
|
Lab.Textcolor=HintColor
|
|
Lab.Text="Seleccionar Categoria"
|
|
Lab.BringToFront
|
|
End Sub
|
|
|
|
Public Sub RemoveIndex(Position As Int)
|
|
If Position>-1 And Position<ListItem.Size Then ListItem.RemoveAt(Position)
|
|
End Sub
|
|
|
|
Public Sub RemoveID(ID As String)
|
|
Dim Position As Int = -1
|
|
|
|
For i=0 To ListItem.Size-1
|
|
Dim Item As Item = ListItem.Get(i)
|
|
If Item.ID=ID Then Position=i
|
|
Next
|
|
If Position>-1 Then ListItem.RemoveAt(Position)
|
|
End Sub
|
|
|
|
Public Sub GetItem(Position As Int) As String
|
|
Dim Ret As String = ""
|
|
If Position>-1 And Position<ListItem.Size Then
|
|
Dim Item As Item = ListItem.Get(Position)
|
|
Ret=Item.text
|
|
End If
|
|
Return Ret
|
|
End Sub
|
|
|
|
Public Sub GetHelpText(Position As Int) As String
|
|
Dim Ret As String = ""
|
|
If Position>-1 And Position<ListItem.Size Then
|
|
Dim Item As Item = ListItem.Get(Position)
|
|
Ret=Item.TextHelp
|
|
End If
|
|
Return Ret
|
|
End Sub
|
|
|
|
Public Sub GetItemFromID(ID As String) As String
|
|
Dim Ret As String = ""
|
|
|
|
For i=0 To ListItem.Size-1
|
|
Dim Item As Item = ListItem.Get(i)
|
|
If Item.ID=ID Then Ret=Item.text
|
|
Next
|
|
Return Ret
|
|
End Sub
|
|
|
|
Public Sub GetID(Position As Int) As String
|
|
Dim Ret As String = ""
|
|
If Position>-1 And Position<ListItem.Size Then
|
|
Dim Item As Item = ListItem.Get(Position)
|
|
Ret=Item.ID
|
|
End If
|
|
Return Ret
|
|
End Sub
|
|
|
|
Public Sub SetLabelTextSize(TextSizeLabel As Int)
|
|
TextSize=TextSizeLabel
|
|
Lab.Textsize=TextSizeLabel
|
|
End Sub
|
|
|
|
Public Sub SetIndex(Position As Int)
|
|
If Position>-1 And Position<ListItem.Size Then
|
|
'Dim Item As Item = ListItem.Get(Position)
|
|
SelectedIndex=Position
|
|
SelectedID=GetID(Position)
|
|
SelectedItem=GetItem(Position)
|
|
Lab.TextColor=TColor
|
|
Lab.Text=SelectedItem
|
|
Lab.BringToFront
|
|
else if Position=-1 Then
|
|
SelectedIndex=Position
|
|
SelectedID=""
|
|
SelectedItem=""
|
|
Lab.Textcolor=HintColor
|
|
Lab.Text="Seleccionar Categoria" '''**** TEXTO INICIAL DEL SPPINER
|
|
Lab.BringToFront
|
|
End If
|
|
End Sub
|
|
|
|
Public Sub SetID(ID As String)
|
|
For i=0 To ListItem.Size-1
|
|
Dim Item As Item = ListItem.Get(i)
|
|
If Item.ID=ID Then
|
|
SelectedIndex=i
|
|
SelectedID=Item.id
|
|
SelectedItem=Item.text
|
|
Lab.TextColor=TColor
|
|
Lab.Text=SelectedItem
|
|
Lab.BringToFront
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Public Sub setValue(Value As String)
|
|
For i=0 To ListItem.Size-1
|
|
Dim Item As Item = ListItem.Get(i)
|
|
If Item.Text=Value Then
|
|
SelectedIndex=i
|
|
SelectedID=Item.id
|
|
SelectedItem=Item.text
|
|
Lab.TextColor=TColor
|
|
Lab.Text=SelectedItem
|
|
Lab.BringToFront
|
|
End If
|
|
Next
|
|
End Sub
|
|
|
|
Public Sub SetBackgroundDrawable(Draw As ColorDrawable)
|
|
mBase.Background=Draw
|
|
End Sub
|
|
|
|
Public Sub SetBackgroundImage(Bitmap As Bitmap)
|
|
mBase.SetBackgroundImage(Bitmap)
|
|
End Sub
|
|
|
|
Public Sub Close
|
|
AppPanel.RemoveView
|
|
End Sub
|
|
|
|
Public Sub Oper
|
|
DesignerList
|
|
End Sub
|
|
|
|
Public Sub setEnabled(B As Boolean)
|
|
Lab.Enabled=B
|
|
End Sub
|
|
|
|
Public Sub getEnabled As Boolean
|
|
Return Lab.Enabled
|
|
End Sub
|
|
|
|
#End Region
|