{"schema_version":1,"content_order":["schema_version","content_order","description","platform","platform_version","generation_time","project_name","useful_links","logs","warnings","ide_state","libraries","b4j_app_type","code_modules","project_files"],"description":"This is a structured summary of a B4J project generated for AI assistants.\n\nThe bundle is optimized to allow AI systems to analyze, debug, explain and refactor the project without requiring access to the original IDE.\nThe bundle should be treated as the authoritative representation of the project state at generation time.\n\nIt includes:\n- full code modules as raw source code\n- extracted public APIs (methods, properties, events)\n- layout files converted to JSON\n- libraries and related documentation\n- IDE state and build configuration\n- logs and compilation information\n- project files and metadata\n\nSections are intentionally ordered to provide high-level project context before detailed implementation code.\n\nThe caret position may indicate the area currently being edited or investigated.\nUseful links reference authoritative B4X resources and best-practice guides which may be consulted when evaluating framework usage or architectural decisions.\nB4X applications are event-driven and may rely on asynchronous patterns such as resumable subs and Wait For events.\nSensitive information such as API keys may be automatically sanitized.\n\nGenerated by B4X CodeBundle tool v1.0","platform":"b4j","platform_version":null,"generation_time":"2026-04-25T08:02:36.4150784Z","project_name":"InfoTank","useful_links":{"b4x_github_repository":"https:\/\/github.com\/AnywhereSoftware\/B4X_Forum_Resources\/tree\/main","b4x_forum":"https:\/\/www.b4x.com\/android\/forum\/","official_deprecated_features":"https:\/\/github.com\/AnywhereSoftware\/B4X_Forum_Resources\/tree\/main\/B4X\/Tutorials\/Features%20that%20Erel%20recommends%20to%20avoid","official_best_practices":"https:\/\/github.com\/AnywhereSoftware\/B4X_Forum_Resources\/tree\/main\/B4X\/Tutorials\/_Code%20Smells_%20-%20common%20mistakes%20and%20other%20tips"},"logs":"","warnings":["error: CSSUtils wurde zwei Mal deklariert. Sie sollten entweder die Libraryreferenz oder das Codemodul entfernen."],"ide_state":{"running_mode":"Debug","build":{"configuration_name":"MainFormGUI","package":"MainFormGUI.example"},"caret_position":{"module":"TreeTools","sub":"print","line_number":146,"caret_context":"\tIf expanded Then\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tDim g As TreeItem = eTV.root.children.get(x)\r\n\t\t\tIf g.Expanded Then oldexp=g.text\r\n\t\t\tg.Expanded = True\r\n\t\tNext\r\n\tEnd If\r\n\tDim P As Printer = Printer_Static.GetDefaultPrinter\r\n\tDim PJ As PrinterJob = PrinterJob_Static.CreatePrinterJob2(P)\r\n\tPJ.PrintPage(eTV)\r\n\tPJ.EndJob\r\n\tIf oldexp.Length > 0 Then\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tDim g1 As TreeItem = eTV.root.children.get(x)\r\n\t\t\tg1.Expanded=False\r\n\t\t\tIf g1.Text = oldexp Then g1.expanded=True\r\n\t\tNext\r\n\tEnd If\r\nEnd Sub\r\n#end region\r\n","focus_weight":"high"},"paths":{"java_version":19,"java_path":"C:\\Java\\jdk-19.0.2\\bin","additional_libraries":["G:\\addLib\\b4j","G:\\addLib\\B4X"]}},"libraries":[{"name":"b4xbeep"},{"name":"jreflection"},{"name":"jsql"},{"name":"jtreeviewextended"},{"name":"juuid"},{"name":"jxui"},{"snippet":"###  XUI Views - Cross platform views and dialogs by Erel\n### 11\/26\/2025\n[B4X Forum - B4X - Libraries](https:\/\/www.b4x.com\/android\/forum\/threads\/100836\/)\n\n[MEDIA=vimeo]311915599[\/MEDIA]  \n  \nXUI Views is a b4x library (<https:\/\/www.b4x.com\/android\/forum\/threads\/100383\/#content>). The same b4xlib library is compatible with B4A, B4i and B4J  \n  \nIt is a collection of custom views and dialogs. Everything is written in B4X. The source code is included inside the b4xlib file, which is a zip file.  \n  \nViews:  \n  \n- B4XRadioButton - Cross platform radio button.  \n- B4XComboBox - Cross platform ComboBox \/ Spinner \/ ActionSheet.  \n- ScrollingLabel - A label that scrolls the text when it is wider than the label. Search for BBScrollingLabel for a similar view that supports rich text.  \n- AnotherProgressBar - Vertical or horizontal animated progress bar.  \n- B4XLoadingIndicator - 6 different animated loading indicators.  \n- RoundSlider - A round slider.  \n- SwiftButton - 3d button  \n- AnimatedCou...","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Libraries\/XUI%20Views%20-%20Cross%20platform%20views%20and%20dialogs\/XUI%20Views.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/100836\/","library_type":"b4xlib","name":"XUI Views","title":" XUI Views - Cross platform views and dialogs","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Libraries\/XUI%20Views%20-%20Cross%20platform%20views%20and%20dialogs\/readme.md"},{"snippet":"### B4j Print JavaFX8 + 17 by stevel05\n### 08\/10\/2025\n[B4X Forum - B4J - Libraries](https:\/\/www.b4x.com\/android\/forum\/threads\/49836\/)\n\nHere is a B4j library written in B4j to access the full Printer modules provided with JavaFX8. Full source code is available.  \n  \nAt it's simplest, you can print a node using:  \n\n```B4X\n    Dim P As Printer = Printer_Static.GetDefaultPrinter  \n    Dim PJ As PrinterJob = PrinterJob_Static.CreatePrinterJob2(P)  \n    PJ.PrintPage(lblTest)  \n    PJ.EndJob\n```\n\n  \n  \nOr with dialogs:  \n  \n\n```B4X\n    Dim PJ As PrinterJob = PrinterJob_Static.CreatePrinterJob  \n    PJ.ShowPageSetupDialog(Null)  \n    PJ.ShowPrintDialog(Null)  \n    PJ.PrintPage(MainForm.RootPane)  \n    PJ.EndJob\n```\n\n  \n  \nCode to scale a view to print on a single page.  \n\n```B4X\nSub ScaleOutput(P As Printer,N As Node) As Node  \n    Dim PL As PageLayout = P.GetDefaultPageLayout  \n    Dim ScaleX,ScaleY As Double  \n    Dim NJO As JavaObject = N  \n    Dim JO As JavaObject = N  \n    ScaleX = PL.Get...","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4J\/Libraries\/B4j%20Print%20JavaFX8%20%2B%2017\/jFX8Print.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/49836\/","library_type":"b4xlib","name":"jFX8Print","title":"B4j Print JavaFX8 + 17","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4J\/Libraries\/B4j%20Print%20JavaFX8%20%2B%2017\/readme.md"},{"snippet":"### [B4x] B4xDialog4Button by stevel05\n### 12\/21\/2020\n[B4X Forum - B4J - Libraries](https:\/\/www.b4x.com\/android\/forum\/threads\/124104\/)\n\nI needed a dialog with 4 options and rather than rewrite the b4xDialog class I opted for a different approach.  \n  \nThis class adds a panel to an existing B4xDialog and adds 4 Buttons. quite simple really.  \n  \n![](https:\/\/www.b4x.com\/android\/forum\/attachments\/102335) ![](https:\/\/www.b4x.com\/android\/forum\/attachments\/102334)  \n  \n  \nSome code was borrowed from the B4xDialog B4xLib so I could ensure compatibility across platforms.  \n  \nI attach a b4xlib and the source code in a b4j project.  \n  \n**Depends On:**  \n\n- XUI\n- XUI Views\n\n**Usage:**  \n  \n\n```B4X\n    Dialog.Title = \"Add type\"  \n    Dialog.ButtonsFont = xui.CreateDefaultFont(14)  \n  \n    Dim D4 As B4xDialog4Button  \n    D4.Initialize(Dialog)  \n    Wait For (D4.Show(\"Select\",\"NewBtn\",\"Positive\",\"Negative\",\"Cancel\")) Complete (Resp As Int)  \n  \n    Select Resp  \n        Case D4.DialogResponse_New...","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4J\/Libraries\/%5BB4x%5D%20B4xDialog4Button\/B4xDialog4Button.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/124104\/","library_type":"b4xlib","name":"B4xDialog4Button","title":"[B4x] B4xDialog4Button","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4J\/Libraries\/%5BB4x%5D%20B4xDialog4Button\/readme.md"},{"snippet":"###  B4XGifView - Cross platform animated gif view by Erel\n### 11\/19\/2025\n[B4X Forum - B4X - Libraries](https:\/\/www.b4x.com\/android\/forum\/threads\/118550\/)\n\n![](https:\/\/www.b4x.com\/android\/forum\/attachments\/95135)  \n  \nI was missing a cross platform, animated gif view, so created one.  \n  \nUsage is simple:  \nAdd with the visual designer and call SetGif to set the gif file.  \n  \n  \nThe B4i implementation depends on FLAnimatedImage open source project: <https:\/\/github.com\/Flipboard\/FLAnimatedImage>  \nThe B4A implementation is based on this open source project: <https:\/\/github.com\/koral--\/android-gif-drawable>  \nThe two dependent aars are attached. Copy them to B4A additional libraries folder.  \n  \nUpdates:  \n  \n1.20 - Change dependency declaration to be compatible with B4i v10+  \n1.15 - Updated the B4A dependencies to fix a compatibility issue with targetSdkVersion 35.  \n1.12 - SetGif2 - Allows loading an animated gif from an array of bytes.  \n1.11 - GIF image ratio is preserved.  \n1.10 -...","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Libraries\/B4XGifView%20-%20Cross%20platform%20animated%20gif%20view\/B4XGifView.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/118550\/","library_type":"b4xlib","name":"B4XGifView","title":" B4XGifView - Cross platform animated gif view","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Libraries\/B4XGifView%20-%20Cross%20platform%20animated%20gif%20view\/readme.md"},{"snippet":"###  GradientMaker - cross platform gradient background by Erel\n### 02\/13\/2025\n[B4X Forum - B4X - Libraries](https:\/\/www.b4x.com\/android\/forum\/threads\/165597\/)\n\n![](https:\/\/www.b4x.com\/android\/forum\/attachments\/161692) ![](https:\/\/www.b4x.com\/android\/forum\/attachments\/161693) ![](https:\/\/www.b4x.com\/android\/forum\/attachments\/161694)  \n  \n  \nUsage example:  \n\n```B4X\nDim gd As GradientMaker  \ngd.Initialize  \ngd.SetGradient(View, \"TOP_BOTTOM\", Array(XUI.Colors_Red, 0xFF00FF00)) 'same orientations as GradientDrawable. Supports any number of colors.\n```\n\n  \n  \nSee the attached example.  \n  \nBTW, the example uses the nice DDDGrid class: <https:\/\/www.b4x.com\/android\/forum\/threads\/b4x-dse-dddgrid-designer-script-grid.142402\/#content>","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Libraries\/GradientMaker%20-%20cross%20platform%20gradient%20background\/GradientMaker.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/165597\/","library_type":"b4xlib","name":"GradientMaker","title":" GradientMaker - cross platform gradient background","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Libraries\/GradientMaker%20-%20cross%20platform%20gradient%20background\/readme.md"},{"snippet":"### jAudioClip by stevel05\n### 09\/06\/2022\n[B4X Forum - B4J - Libraries](https:\/\/www.b4x.com\/android\/forum\/threads\/37828\/)\n\nThis is a wrapper for the JavaFX AudioClip class. the Oracle documentation is [here](http:\/\/docs.oracle.com\/javafx\/2\/api\/javafx\/scene\/media\/AudioClip.html).  \n  \nIt is similar to the Android SoundPool in that it is intended to play short audio files with low latency, mainly for use with games and audio effects.  \n  \nYou can control the volume, pan, rate, looping (cyclecount, set to -1 to play indefinitly) and priority.  \n  \n**AudioClip  \nAuthor:** Steve Laming  \n**Version:** 1.0  \n  \n\n- **Methods:**\n\n- **Balance**(balance As double)  As double\n*Get \/ Set the default balance level for this clip.*\n**CycleCount**(count As int)  As int\n*Get \/ Set the default cycle count.*\n**Initialize**(URI As java.lang.String)  As void\n*Initialize the object.  \n Requires a URI obtainable as File.GetURI(Dir,FileName))*\n**isPlaying**  As boolean\n*Indicate whether this AudioClip is playi...","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4J\/Libraries\/jAudioClip\/JAudioClip-b4xlib.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/37828\/","library_type":"b4xlib","name":"JAudioClip-b4xlib","title":"jAudioClip","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4J\/Libraries\/jAudioClip\/readme.md"},{"name":"javaobject"},{"name":"jcore"},{"name":"jfx"},{"snippet":"###  OkHttpUtils2 with Wait For by Erel\n### 12\/25\/2025\n[B4X Forum - B4X - Tutorials](https:\/\/www.b4x.com\/android\/forum\/threads\/79345\/)\n\n[MEDIA=vimeo]256583317[\/MEDIA]  \n  \nDownloading resources is simpler with the new [Resumable Subs](https:\/\/www.b4x.com\/android\/forum\/threads\/78601\/#content) feature.  \n  \nUsing *Wait For* we can wait for the JobDone event in the same sub that started the download.  \nNo longer is it needed to have a single sub that handles all requests results.  \n  \nSimplest example:  \n\n```B4X\nDim j As HttpJob  \nj.Initialize(\"\", Me)  \nj.Download(\"https:\/\/www.google.com\")  \nWait For (j) JobDone(j As HttpJob)  \nIf j.Success Then  \n   Log(j.GetString)  \nEnd If  \nj.Release\n```\n\n  \n  \n  \nExample of downloading a quote from a quotes service:  \n\n```B4X\nSub DownloadQuote  \n   Dim j As HttpJob  \n   j.Initialize(\"\", Me) 'name is empty as it is no longer needed  \n   j.Download(\"http:\/\/quotesondesign.com\/wp-json\/posts?filter[orderby]=rand\")  \n   Wait For (j) JobDone(j As HttpJob)  ...","library_file":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Tutorials\/OkHttpUtils2%20with%20Wait%20For\/jOkHttpUtils2.b4xlib","forum_thread":"https:\/\/www.b4x.com\/android\/forum\/threads\/79345\/","library_type":"b4xlib","name":"jOkHttpUtils2","title":" OkHttpUtils2 with Wait For","readme_url":"https:\/\/raw.githubusercontent.com\/AnywhereSoftware\/B4X_Forum_Resources\/main\/B4X\/Tutorials\/OkHttpUtils2%20with%20Wait%20For\/readme.md"}],"b4j_app_type":"JavaFX","code_modules":[{"name":"Main","module_type":"","code":"'# ########################################################\r\n'# Example Project do demonstrate usage of \r\n'# Projecttemplate customized custMainForm\r\n'# ########################################################\r\n'# Main: MainForm\r\n'# --------------------------------------------------------\r\n'# Name\/Type:\tMainForm \/ Form\r\n'# ID:\t\t\tMain\r\n'# Version:\t\t1.0.0\r\n'# Depends On:\tFormUtils\r\n'# Libs:\t\tjFX, jXUI, jCore,GradientMaker, JavaObject\r\n'#\t\t\t\tB4XDialog4Button\r\n'# Files:\t\t-\r\n'# Layouts:\t\tMainPage\r\n'# ########################################################\r\n'# (C) Günter Becker private use roylaty free else licenced\r\n'# (C) B4XDialog4Button stevel05 https:\/\/www.b4x.com\/android\/forum\/threads\/b4x-b4xdialog4button.124104\/#content\r\n'# (C) jAudioClip-b4x setevel05 https:\/\/www.b4x.com\/android\/forum\/threads\/jaudioclip.37828\/#content\r\n'# (C Images) icon8.com royalty free\r\n'# ########################################################\r\n'# History:\r\n'# 1.0 2026\/03\r\n'# ########################################################\r\n\r\n#Region Project Attributes \r\n\t'# No longer neccessary done by GUI Class\r\n\t'#MainFormWidth: 600\r\n\t'#MainFormHeight: 600 \r\n\t\r\n\t'## merges the activated lib files into the compiled JAR File\r\n\t#MergeLibraries: True\r\n\t\r\n\t'# libraries to manage sqlite\/sqlcipher database\r\n\t#AdditionalJar: sqlite-jdbc-3.46.0.0\r\n\t#AdditionalJar: slf4j-api-1.7.36.jar \r\n#End Region\r\n\r\n#region Page\r\n'## Create Globals\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nSub Process_Globals\r\n\tPrivate fx As JFX\r\n\tPrivate xui As XUI \r\n\tPrivate MainForm As Form\r\n\t\r\n\t'# GUI Class reference\r\n\tPrivate GUI1 As GUI\r\n\t\r\n\t'# Windows Mainform Management\r\n\tPrivate MFox,MFoy As Int\t\t\t\t' current MousePressed position\r\n\t'------\r\n\t\r\n\tPrivate SQL As SQL\r\n\tPrivate toast As B4XToast\r\n\tPrivate TreeView1EX As TreeViewExtended\r\n\tPrivate Dlg As B4XDialog\r\n\tPrivate DLGD4 As B4xDialog4Button\r\n\tPrivate TT As TreeTools\r\n\t\r\n\tPrivate user, version, license, sernr,lng,lastBckUp As String\r\n\tPrivate lastCatID As Long\r\n\tPrivate lastCatIDTxt As String\r\n\tPrivate lastGrpID As Long\r\n\tPrivate lastGrpIDTxt As String\r\n\tPrivate lastItemID As Long\r\n\tPrivate lastItemIDTxt As String\r\n\t\r\n\t'# Layout Layout1\r\n\t'Header\r\n\tPrivate Logo As ImageView\r\n\tPrivate Title As Label\r\n\tPrivate btMenu As Label\r\n\t' Footer\r\n\tPrivate FooterbarPane As Pane\r\n\tPrivate ProgMsg As Label\r\n\t' Wait Indicator\r\n\tPrivate WaitPane As Pane\r\n\tPrivate WaitLIndicator As B4XGifView\r\n\tPrivate WaitProgBar As ProgressBar\r\n\tPrivate WaitProgIndic As Label\r\n\tPrivate WaitLblText As Label\r\n\tPublic WorkAreaPane As Pane\r\n\tPrivate selGrp As ScrollingLabel\r\n\tPrivate TitlebarPane As Pane\r\n\tPrivate MenuBar1 As MenuBar\r\n\t'# Layout TabPage1\r\n\tPrivate TreeView1 As TreeView\r\n\tPrivate CatLbl As Label\r\n\tPrivate CatCombo As ComboBox\r\n\tPrivate TabPane1 As TabPane\r\n\tPrivate GrpLbl As Label\r\n\tPrivate T1CatLbl As Label\r\n\tPrivate T1GrpLbl As Label\r\n\tPrivate T1ItemLbl As Label\r\n\tPrivate T1WebLbl As Label\r\n\tPrivate T1RemLbl As Label\r\n\tPrivate T1Cat As Label\r\n\tPrivate T1Grp As Label\r\n\tPrivate T1Item As TextField\r\n\tPrivate T1Web As TextArea\r\n\tPrivate T1Rem As TextArea\r\n\tPrivate T1ImageView1 As ImageView\r\n\tPrivate T1ImageView2 As ImageView\r\n\tPrivate T1ImageView3 As ImageView\r\n\t'# Layout Dialog Confirm\r\n\tPrivate ConfirmLbl As Label\r\n\t'# Layout Dialog Restore\r\n\tPrivate RestoreLv As ListView\r\n\t'# Layout ImageViewer\r\n\tPrivate ViewerImageView As ImageView\r\nEnd Sub\r\n'## Create customized MainForm\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nSub AppStart (Form1 As Form, Args() As String)\r\n\tMainForm = Form1\r\n\tMainForm.RootPane.LoadLayout(\"MainForm\")\r\n\t'MainForm.Show Comment this out it must be done by GUI Class!\r\n\t\r\n\t'## set values to customize form ##\r\n\t'## depends on Class GUI\r\n\t'# Form width\/height\/Style\/color\r\n\tDim p As Map: p.initialize\r\n\tp.Put(\"fwidth\",900dip) : p.Put(\"fheight\",700dip)\r\n\tp.Put(\"fstyle\",\"TRANSPARENT\") ' should be transparent\r\n\tp.Put(\"fbackcolor\",fx.Colors.Transparent) ' should be transparent\r\n\t\r\n\t'# solid workarea backgroundcolor\r\n\tp.Put(\"frootcolor\",xui.Color_white)\r\n\t'# or gradient work area background color\r\n\t'Dim col As List: col.initialize\r\n\t'col.Add(0xFF0000FF) : col.add(0xFF87CEEB)\r\n\t'p.Put(\"fgradcolor\",col)\r\n\t'p.Put(\"fgraddir\",\"TOP_BOTTOM\")\r\n\t'# or workarea backgroundimage\r\n\t'p.put(\"fimage\",\"backgroundimage.png\")\r\n\t\r\n\t'# Form Border\r\n\tp.Put(\"fbcolor\",fx.Colors.Black) :\tp.Put(\"fbwidth\",2dip) :\tp.Put(\"fbradius\",25dip)\r\n\t'# Form icon\r\n\tp.Put(\"ficon\",\"\")\r\n\t'# Form top\/left if not used Form will be centered\r\n\t'p.Put(\"fleft\",0) : p.Put(\"ftop\",0)\r\n\t'# initialize Class and do customizing\r\n\tGUI1.Initialize(MainForm,p,WorkAreaPane)\r\n\t\r\n\t'# Create Menubar\r\n\tcreateMenu\r\n\t\r\n\t'# Create TabHost\r\n\tTabPane1.LoadLayout(\"TabPage1\",\"Details\")\r\n\tTabPane1.LoadLayout(\"TabPage2\",\"Text\")\r\n\t\r\n\t'# open Database access\r\n\tFile.Copy(File.DirAssets,\"InfoTank.db\",File.DirApp,\"InfoTank.db\")\r\n\tSQL.InitializeSQLite(File.DirApp,\"InfoTank.db\",False)\r\n\tIf SQL.IsInitialized = False Then\r\n\t\tfx.Msgbox(MainForm,\"Cannot open Database!\",\"Opening Database access\")\r\n\t\tExitApplication\r\n\tElse\r\n\t\t'# read options\r\n\t\tDim rs As ResultSet = SQL.ExecQuery(\"Select * FROM Option ORDER By Title ASC\")\r\n\t\tDo While rs.NextRow\r\n\t\t\tIf rs.GetString(\"Title\") = \"User\" Then\r\n\t\t\t\tuser = rs.GetString(\"Title\")\r\n\t\t\telse If rs.GetString(\"Title\") = \"Version\" Then\r\n\t\t\t\tversion = rs.GetString(\"Title\")\r\n\t\t\telse If rs.GetString(\"Title\") = \"License\" Then\r\n\t\t\t\tlicense = rs.GetString(\"Title\")\r\n\t\t\telse If rs.GetString(\"Title\") = \"SerNr\" Then\r\n\t\t\t\tsernr = rs.GetString(\"Title\")\r\n\t\t\telse If rs.GetString(\"Title\") = \"Lng\" Then\r\n\t\t\t\tlng = rs.GetString(\"Title\")\r\n\t\t\telse If rs.GetString(\"Title\") = \"lastGroup\" Then\r\n\t\t\t\tlastCatID = rs.GetLong(\"Numeric\")\r\n\t\t\telse If rs.GetString(\"Title\") = \"lastBckUp\" Then\r\n\t\t\t\tlastBckUp = rs.GetString(\"Title\")\r\n\t\t\tEnd If\r\n\t\tLoop\r\n\t\t'# read Category values\r\n\t\tCatCombo.Items.Add(\"?\")\r\n\t\tDim lcid As String =\"\"\r\n\t\trs = SQL.ExecQuery(\"Select * FROM Category WHERE Deleted=0 ORDER By Title ASC\")\r\n\t\tDo While rs.NextRow\r\n\t\t\tCatCombo.Items.Add(rs.GetString(\"Title\"))\r\n\t\t\tIf rs.GetLong(\"Numeric\") = lastCatID Then lcid =rs.GetString(\"Title\")\r\n\t\tLoop\r\n\t\trs.close\r\n\t\t\r\n\t\t'# initialize TreeTools\r\n\t\tTT.Initialize(MainForm.RootPane,\"TT\",TreeView1,24dip,24dip)\r\n\t\t\r\n\t\t'# set las selected category (loads tree)\r\n\t\tIf lcid <> \"\" Then \r\n\t\t\tCatCombo.SelectedIndex=CatCombo.Items.IndexOf(lcid)\r\n\t\tEnd If\r\n\t\t\r\n\t\t'# localize\r\n\t\tIf lng <> \"en\" Then localize\r\n\t\t\r\n\t\t'# Titlebar & Footer\r\n\t\tbtMenu.Visible=False\r\n\t\tTitle.Text = \"InfoTank 1.0\"\r\n\t\tProgMsg.Text = \"Ready...\"\r\n\tEnd If\r\n\t\r\n\t'# Initialize toast\r\n\ttoast.Initialize(MainForm.RootPane,500,3000,True,300dip,100dip)\r\n\t\r\n\r\nEnd Sub\r\n'## Localize Strings\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\t\r\nprivate Sub localize\r\n\t\r\nEnd Sub\r\n#end region\r\n\r\n'##########################################\r\n\r\n#region Windows Management\r\n'## Event: MainForm Mouse left button pressed\r\n'## get current mouse pointer position\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nprivate Sub MainForm_MousePressed (EventData As MouseEvent)\r\n\t'# Window Management: get Mouse position\r\n\tMFox = EventData.X\r\n\tMFoy = EventData.Y\r\n\t'# ------------------\r\nEnd Sub\r\n'## EVENT: MainForm Mouse dragged resize or reposition Form\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026PrivatePrivatePrivate\r\nPrivate Sub MainForm_MouseDragged (EventData As MouseEvent)\r\n\tTry\r\n\t\t'# Window Management: Resize or Reposition WIndow\r\n\t\tDim jo As JavaObject = EventData\r\n\t\tDim ScreenX As Double = jo.RunMethod(\"getScreenX\", Null)\r\n\t\tDim ScreenY As Double = jo.RunMethod(\"getScreenY\", Null)\r\n\t\t'# resize\r\n\t\tIf MFox >= GUI1.MFormGUI.DragResize(0) And MFoy >= GUI1.MFormGUI.Dragresize(1) Then\r\n\t\t\tMainForm.RootPane.MouseCursor=fx.Cursors.MOVE\r\n\t\t\tMainForm.WindowWidth = ScreenX - MainForm.WindowLeft\r\n\t\t\tMainForm.WindowHeight = ScreenY - MainForm.WindowTop\r\n\t\tElse If MFox <= GUI1.MFormGUI.Dragpos(0) And MFoy <= GUI1.MFormGUI.Dragpos(1) Then\r\n\t\t\tMainForm.RootPane.MouseCursor=fx.Cursors.hand\r\n\t\t\tMainForm.WindowLeft = jo.RunMethod(\"getScreenX\", Null) - MFox\r\n\t\t\tMainForm.WindowTop = jo.RunMethod(\"getScreenY\", Null) - MFoy\r\n\t\tEnd If\r\n\t\t' store values\r\n\t\tGUI1.MFormGUI.currDIM(0)=MainForm.windowwidth\r\n\t\tGUI1.MFormGUI.currDIM(1)=MainForm.WindowHeight\r\n\t\tGUI1.MFormGUI.currPos(0)=MainForm.WindowTop\r\n\t\tGUI1.MFormGUI.currPos(1)=MainForm.Windowleft\r\n\t\t'# ------------------\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n'## EVENT: Mouse button is released\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nprivate Sub MainForm_MouseReleased (EventData As MouseEvent)\r\n\t'# Window Management: reset Mouse Cursor\r\n\tMainForm.RootPane.MouseCursor=fx.Cursors.DEFAULT\r\n\t'# ------------------\r\nEnd Sub\r\n'## EVENT: Titlebar Window management button clicked\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nPrivate Sub TitleBt_MouseClicked (EventData As MouseEvent)\r\n\tTry\r\n\t\tDim br As Label = Sender\r\n\t\tLog(br.Tag)\r\n\t\tSelect br.Tag.As(String).ToLowerCase\r\n\t\t\tCase \"minimize\"\r\n\t\t\t\tFormUtils.SetIconified(MainForm,True)\r\n\t\t\tCase \"maximize\"\r\n\t\t\t\tMainForm.WindowWidth = fx.PrimaryScreen.MaxX\r\n\t\t\t\tMainForm.WindowHeight = fx.PrimaryScreen.Maxy\r\n\t\t\t\tMainForm.windowtop = 0\r\n\t\t\t\tMainForm.WindowLeft = 0\r\n\t\t\tCase \"close\"\r\n\t\t\t\tExitApplication\r\n\t\t\tCase Else\r\n\t\t\t\t'\tCase \"restore\"\r\n\t\t\t\tMainForm.WindowWidth = GUI1.MFormGUI.normalwidth\r\n\t\t\t\tMainForm.WindowHeight = GUI1.MFormGUI.normalheight\r\n\t\t\t\tMainForm.windowtop = GUI1.MFormGUI.currPos(0)\r\n\t\t\t\tMainForm.WindowLeft = GUI1.MFormGUI.currpos(1)\r\n\t\tEnd Select\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n'--------------\r\n#end region\r\n\r\n#region Header \/ Footer \/ Wait WaitLIndicator\r\n'## EVENT Header\/Logo clicked\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\t\r\nPrivate Sub Logo_MouseClicked (EventData As MouseEvent)\r\n\t\r\nEnd Sub\r\n'## EVENT Header\/Title clicked\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\t\r\nPrivate Sub Title_MouseClicked (EventData As MouseEvent)\r\n\t\r\nEnd Sub\r\n'## EVENT Footer\/Message label clicked\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\t\r\nPrivate Sub ProgMsg_MouseClicked (EventData As MouseEvent)\r\n\t\r\nEnd Sub\r\n'## EVENT Wait indicator clicked -close it-\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nPrivate Sub WaitIndicator_MouseClicked (EventData As MouseEvent)\r\n\tWaitPane.Visible=False\r\nEnd Sub\r\n\r\nPrivate Sub btMenu_MouseClicked (EventData As MouseEvent)\r\n\tMenuPane.Left = btMenu.Left + btMenu.PrefWidth - MenuPane.PrefWidth\r\n\tMenuPane.Top = \tTitlebarPane.Top+TitlebarPane.Height - 5dip\r\n\tMenuPane.Visible=Not(MenuPane.Visible)\r\nEnd Sub\r\n\r\nPrivate Sub MenuList_SelectedIndexChanged(Index As Int)\r\n\tMenuPane.Visible = False\r\n\tSelect Index\r\n\t\t\r\n\tEnd Select\r\nEnd Sub\r\n#end region\r\n\r\n#region MenuBar1\r\n\r\nprivate Sub createMenu\r\n\tMenuBar1.Menus.Clear\r\n\t\r\n\t'# Menu Category\r\n\tDim G1 As Menu\r\n\tG1.Initialize(\"Category\",\"Category\")\r\n\tG1.Tag = \"G1\"\r\n\tPlaceIcon(G1,\"Category.png\",48dip,48dip)\r\n\tDim G11 As MenuItem\r\n\tG11.Initialize(\"New\",\"Category\")\r\n\tG11.Image = fx.LoadImageSample(File.DirAssets,\"icons8-add-48.png\",48dip,48dip)\r\n\tG11.Tag = \"G11\"\r\n\tG1.MenuItems.Add(G11)\r\n\tDim G12 As MenuItem\r\n\tG12.Initialize(\"Delete\",\"Category\")\r\n\tG12.Image = fx.LoadImageSample(File.DirAssets,\"icons8-delete-48.png\",48dip,48dip)\r\n\tG12.Tag = \"G12\"\r\n\tG1.MenuItems.Add(G12)\r\n\tDim G12a As MenuItem\r\n\tG12a.Initialize(\"Restore\",\"Category\")\r\n\tG12a.Image = fx.LoadImageSample(File.DirAssets,\"icons8-restore-48.png\",48dip,48dip)\r\n\tG12a.Tag = \"G12a\"\r\n\tG1.MenuItems.Add(G12a)\r\n\tDim G13 As MenuItem\r\n\tG13.Initialize(\"Change Title\",\"Category\")\r\n\tG13.Image = fx.LoadImageSample(File.DirAssets,\"icons8-abc-48.png\",48dip,48dip)\r\n\tG13.Tag = \"G13\"\r\n\tG1.MenuItems.Add(G13)\r\n\tMenuBar1.Menus.Add(G1)\r\n\t\r\n\t'# Menu Group\r\n\tDim G2 As Menu\r\n\tG2.Initialize(\"Group\",\"Group\")\r\n\tG2.Tag = \"G2\"\r\n\tPlaceIcon(G2,\"Group.png\",48dip,48dip)\r\n\tDim G21 As MenuItem\r\n\tG21.Initialize(\"New\",\"Group\")\r\n\tG21.Image = fx.LoadImageSample(File.DirAssets,\"icons8-add-48.png\",48dip,48dip)\r\n\tG21.Tag = \"G21\"\r\n\tG2.MenuItems.Add(G21)\r\n\tDim G22 As MenuItem\r\n\tG22.Initialize(\"Delete\",\"Group\")\r\n\tG22.Image = fx.LoadImageSample(File.DirAssets,\"icons8-delete-48.png\",48dip,48dip)\r\n\tG22.Tag = \"G22\"\r\n\tG2.MenuItems.Add(G22)\r\n\tDim G22a As MenuItem\r\n\tG22a.Initialize(\"Restore\",\"Group\")\r\n\tG22a.Image = fx.LoadImageSample(File.DirAssets,\"icons8-restore-48.png\",48dip,48dip)\r\n\tG22a.Tag = \"G22a\"\r\n\tG2.MenuItems.Add(G22a)\r\n\tDim G23 As MenuItem\r\n\tG23.Initialize(\"Change Category\",\"Group\")\r\n\tG23.Image = fx.LoadImageSample(File.DirAssets,\"Category.png\",48dip,48dip)\r\n\tG23.Tag = \"G23\"\r\n\tG2.MenuItems.Add(G23)\r\n\tDim G24 As MenuItem\r\n\tG24.Initialize(\"Change Title\",\"Group\")\r\n\tG24.Image = fx.LoadImageSample(File.DirAssets,\"icons8-abc-48.png\",48dip,48dip)\r\n\tG24.Tag = \"G24\"\r\n\tG2.MenuItems.Add(G24)\r\n\tMenuBar1.Menus.Add(G2)\r\n\t\r\n\t'# Menu Item\r\n\tDim G3 As Menu\r\n\tG3.Initialize(\"Item\",\"Item\")\r\n\tG3.Tag = \"G3\"\r\n\tPlaceIcon(G3,\"Item.png\",48dip,48dip)\r\n\tDim G31 As MenuItem\r\n\tG31.Initialize(\"New\/Update\",\"Item\")\r\n\tG31.Image = fx.LoadImageSample(File.DirAssets,\"icons8-save-48.png\",48dip,48dip)\r\n\tPlaceShortCut(G31,\"ctrl+s\")\r\n\tG31.Tag = \"G31\"\r\n\tG3.MenuItems.Add(G31)\r\n\tDim G32 As MenuItem\r\n\tG32.Initialize(\"Delete\",\"Item\")\r\n\tG32.Image = fx.LoadImageSample(File.DirAssets,\"icons8-delete-48.png\",48dip,48dip)\r\n\tPlaceShortCut(G32,\"ctrl+d\")\r\n\tG32.Tag = \"G32\"\r\n\tG3.MenuItems.Add(G32)\r\n\tDim G32a As MenuItem\r\n\tG32a.Initialize(\"Restore\",\"Item\")\r\n\tG32a.Image = fx.LoadImageSample(File.DirAssets,\"icons8-restore-48.png\",48dip,48dip)\r\n\tG32a.Tag = \"G32a\"\r\n\tG3.MenuItems.Add(G32a)\r\n\tDim G33 As MenuItem\r\n\tG33.Initialize(\"Change Category\",\"Item\")\r\n\tG33.Image = fx.LoadImageSample(File.DirAssets,\"Category.png\",48dip,48dip)\r\n\tG33.Tag = \"G33\"\r\n\tG3.MenuItems.Add(G33)\r\n\tDim G34 As MenuItem\r\n\tG34.Initialize(\"Change Group\",\"Item\")\r\n\tG34.Image = fx.LoadImageSample(File.DirAssets,\"Group.png\",48dip,48dip)\r\n\tG34.Tag = \"G34\"\r\n\tG3.MenuItems.Add(G34)\r\n\tDim G35 As MenuItem\r\n\tG35.Initialize(\"Change Title\",\"Item\")\r\n\tG35.Image = fx.LoadImageSample(File.DirAssets,\"icons8-abc-48.png\",48dip,48dip)\r\n\tG35.Tag = \"G35\"\r\n\tG3.MenuItems.Add(G35)\r\n\tDim s As JavaObject\r\n\ts.InitializeNewInstance(\"javafx.scene.control.SeparatorMenuItem\",Null)\r\n\tG3.MenuItems.Add(s)\r\n\tDim G37 As MenuItem\r\n\tG37.Initialize(\"Clear\",\"Item\")\r\n\tG37.Image = fx.LoadImageSample(File.DirAssets,\"icons8-clear-48.png\",48dip,48dip)\r\n\tPlaceShortCut(G37,\"alt+x\")\r\n\tG37.Tag = \"G37\"\r\n\tG3.MenuItems.Add(G37)\r\n\tMenuBar1.Menus.Add(G3)\r\n\t\r\n\t'# Menu Option\r\n\tDim G4 As Menu\r\n\tG4.Initialize(\"Option\",\"Option\")\r\n\tG4.Tag = \"G4\"\r\n\tPlaceIcon(G4,\"icons8-option-64.png\",48dip,48dip)\r\n\tDim G41 As MenuItem\r\n\tG41.Initialize(\"Language\",\"Option\")\r\n\tG41.Image = fx.LoadImageSample(File.DirAssets,\"icons8-translate-64.png\",48dip,48dip)\r\n\tG41.Tag = \"G41\"\r\n\tG4.MenuItems.Add(G41)\r\n\tDim G42 As MenuItem\r\n\tG42.Initialize(\"Prog.-Info\",\"Option\")\r\n\tG42.Image = fx.LoadImageSample(File.DirAssets,\"icons8-info-48.png\",48dip,48dip)\r\n\tG42.Tag = \"G42\"\r\n\tG4.MenuItems.Add(G42)\r\n\tDim G43 As MenuItem\r\n\tG43.Initialize(\"Help\",\"Option\")\r\n\tG43.Image = fx.LoadImageSample(File.DirAssets,\"icons8-book-94.png\",48dip,48dip)\r\n\tG43.Tag = \"G43\"\r\n\tG4.MenuItems.Add(G43)\r\n\tDim s As JavaObject\r\n\ts.InitializeNewInstance(\"javafx.scene.control.SeparatorMenuItem\",Null)\r\n\tG4.MenuItems.Add(s)\r\n\tDim G44 As MenuItem\r\n\tG44.Initialize(\"Backup\",\"Option\")\r\n\tG44.Image = fx.LoadImageSample(File.DirAssets,\"icons8-database-94.png\",48dip,48dip)\r\n\tG44.Tag = \"G42\"\r\n\tG4.MenuItems.Add(G44)\r\n\tDim G45 As MenuItem\r\n\tG45.Initialize(\"Compress\",\"Option\")\r\n\tG45.Image = fx.LoadImageSample(File.DirAssets,\"icons8-database-94.png\",48dip,48dip)\r\n\tG45.Tag = \"G45\"\r\n\tG4.MenuItems.Add(G45)\r\n\tDim s As JavaObject\r\n\ts.InitializeNewInstance(\"javafx.scene.control.SeparatorMenuItem\",Null)\r\n\tG4.MenuItems.Add(s)\r\n\tDim G46 As MenuItem\r\n\tG46.Initialize(\"Print\",\"Modify\")\r\n\tG46.Image = fx.LoadImageSample(File.DirAssets,\"icons8-print-48.png\",48dip,48dip)\r\n\tPlaceShortCut(G46,\"ctrl+p\")\r\n\tG46.Tag = \"G46\"\r\n\tG4.MenuItems.Add(G46)\r\n\tMenuBar1.Menus.Add(G4)\r\n\t\r\n\t'# Menu Clipoard\r\n\tDim G5 As Menu\r\n\tG5.Initialize(\"Clipboard\",\"Clipb\")\r\n\tG5.Tag = \"G5\"\r\n\tPlaceIcon(G5,\"icons8-clipboard-30.png\",48dip,48dip)\r\n\tDim G51 As MenuItem\r\n\tG51.Initialize(\"Copy\",\"Clipb\")\r\n\tG51.Image = fx.LoadImageSample(File.DirAssets,\"icons8-copy-to-clipboard-40.png\",48dip,48dip)\r\n\tPlaceShortCut(G51,\"ctrl+c\")\r\n\tG51.Tag = \"G51\"\r\n\tG5.MenuItems.Add(G51)\r\n\tDim G52 As MenuItem\r\n\tG52.Initialize(\"Cut\",\"Clipb\")\r\n\tG52.Image = fx.LoadImageSample(File.DirAssets,\"icons8-clipboard-30.png\",48dip,48dip)\r\n\tPlaceShortCut(G52,\"ctrl+x\")\r\n\tG52.Tag = \"G52\"\r\n\tG5.MenuItems.Add(G52)\r\n\tDim G53 As MenuItem\r\n\tG53.Initialize(\"Paste\",\"Clipb\")\r\n\tG53.Image = fx.LoadImageSample(File.DirAssets,\"icons8-paste-94.png\",48dip,48dip)\r\n\tPlaceShortCut(G53,\"ctrl+v\")\r\n\tG53.Tag = \"G53\"\r\n\tG5.MenuItems.Add(G53)\r\n\tMenuBar1.Menus.Add(G5)\t\r\n\t\r\nEnd Sub\r\n\r\n#end region\r\n\r\n#region menu category\r\nprivate Sub Category_Action\r\n\tIf Sender Is MenuItem Then\r\n\t\tDim i As MenuItem = Sender\r\n\t\tSelect i.Tag\r\n\t\t\tCase \"G11\" ' Insert\r\n\t\t\t\t'# Create Dialog\r\n\t\t\t\tDim Dlg As B4XDialog\r\n\t\t\t\tDlg.Initialize(MainForm.RootPane)\r\n\t\t\t\tDlg.Title = \"Add new Categrory\"\r\n\t\t\t\tsetupDialog\r\n\t\t\t\t'# Create Template\r\n\t\t\t\tDim input As B4XInputTemplate\r\n\t\t\t\tinput.Initialize\r\n\t\t\t\tinput.lblTitle.TextColor = xui.color_blue\r\n\t\t\t\tinput.lblTitle.Text = \"Title:\"\r\n\t\t\t\tProgMsg.Text = \"Enter new Category Title. Ready...\"\r\n\t\t\t\t'# show Dialog\r\n\t\t\t\tDim rsb As ResumableSub = Dlg.ShowTemplate(input,\"save\",\"\",\"cancel\")\r\n\t\t\t\twait for (rsb) complete (result As Int)\r\n\t\t\t\t'# Actiob\r\n\t\t\t\tIf result = xui.DialogResponse_Positive Then\r\n\t\t\t\t\tIf CatCombo.Items.index0f(input.Text) = -1 Then 'check if unique\r\n\t\t\t\t\t\tTry\r\n\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"INSERT INTO Category (Title) VALUES(?)\",Array As String(input.Text))\r\n\t\t\t\t\t\t\tCatCombo.Items.Add(input.Text)\r\n\t\t\t\t\t\t\ttoast.show(\"success\",\"New Categrory saved.\",True,False)\r\n\t\t\t\t\t\tCatch\r\n\t\t\t\t\t\t\ttoast.show(\"error\",\"Database Error!\",True,False)\r\n\t\t\t\t\t\tEnd Try\r\n\t\t\t\t\tElse\r\n\t\t\t\t\t\t'error \r\n\t\t\t\t\t\ttoast.show(\"attention\",\"Categrory exists!\",True,False)\r\n\t\t\t\t\tEnd If\r\n\t\t\t\tEnd If\r\n\t\t\t\tProgMsg.Text = \"Ready...\"\r\n\t\t\tCase \"G12\" 'Delete\r\n\t\t\t\t'# Create Dialog\r\n\t\t\t\tDim Dlg As B4XDialog\r\n\t\t\t\tDlg.Initialize(MainForm.RootPane)\r\n\t\t\t\tDlg.Title = \"Consent requested\"\r\n\t\t\t\tsetupDialog\r\n\t\t\t\t'# Create Dialog panel\r\n\t\t\t\tDim p As Pane : p.initialize(\"\")\r\n\t\t\t\tP.SetLayoutAnimated(0,0,0,350dip, 200dip)\r\n\t\t\t\tp.LoadLayout(\"Confirm\")\r\n\t\t\t\tConfirmLbl.Text = \"Please consent restorable delete.\"\r\n\t\t\t\tProgMsg.Text = \"Consent deleting Category. Ready...\"\r\n\t\t\t\t'# show Dialog\r\n\t\t\t\tDim rsb As ResumableSub = Dlg.Showcustom(input,\"confirmed\",\"\",\"cancel\")\r\n\t\t\t\twait for (rsb) complete (result As Int)\r\n\t\t\t\tIf result = xui.DialogResponse_Positive Then\r\n\t\t\t\t\tProgMsg.Text = \"Deleting Category and attached Groups\/Items....\"\r\n\t\t\t\t\t'# get ID of selected Category\r\n\t\t\t\t\tDim cattit As String = CatCombo.Value\r\n\t\t\t\t\tDim catid As Long = SQL.ExecQuerySingleResult2(\"SELECT ID FROM Category Where Title=?\",Array As String(cattit))\r\n\t\t\t\t\t' 1st attached groups set column deleted to 1\t\r\n\t\t\t\t\tDim grplist As List : grplist.initialize\r\n\t\t\t\t\tTry\r\n\t\t\t\t\t\tDim rs As ResultSet = SQL.ExecQuery2(\"SELECT * FROM Grp WHERE secID=?\",Array As String(catid))\r\n\t\t\t\t\t\tDim rs1 As ResultSet\r\n\t\t\t\t\t\tDo While rs.nextrow 'groups\r\n\t\t\t\t\t\t\t'# attached items\r\n\t\t\t\t\t\t\trs1 = SQL.ExecQuery2(\"SELECT * FROM Item WHERE secID=? AND grpID=?\",Array As String(catid,rs.GetLong(\"ID\")))\r\n\t\t\t\t\t\t\tDo While rs1.NextRow ' items\r\n\t\t\t\t\t\t\t\t'# update item\r\n\t\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE OR IGNORE Item Set Deleted=? WHERE secID=? AND grpID=?\", _\r\n\t\t\t\t\t\t\t\t\tArray As Long(1,catid,rs.Getlong(\"ID\")))\r\n\t\t\t\t\t\t\tLoop\r\n\t\t\t\t\t\t\t'# update group\t\t\t\t\t\r\n\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE OR IGNORE Grp Set Deleted=? WHERE ID=?\",Array As Long(1,rs.GetLong(\"ID\")))\r\n\t\t\t\t\t\tLoop\r\n\t\t\t\t\t\t'# 2nd Update Cat\r\n\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE OR IGNORE Category Set Deleted=? WHERE ID=?\",Array As Long(1,catid))\r\n\t\t\t\t\t\trs1.Close\r\n\t\t\t\t\t\trs.close\r\n\t\t\t\t\t\t'# update combobox and treeview\r\n\t\t\t\t\t\tCatCombo.Items.RemoveAt(CatCombo.Items.IndexOf(cattit))\r\n\t\t\t\t\t\tCatCombo.SelectedIndex = -1\r\n\t\t\t\t\t\tTreeView1.Root.Children.Clear\r\n\t\t\t\t\t\t'# clear TabPage1\r\n\t\t\t\t\t\tclearTabPage1\r\n\t\t\t\t\t\t'# toast\r\n\t\t\t\t\t\ttoast.show(\"success\",\"Category restorable deleted.\",500,False)\r\n\t\t\t\t\t\tProgMsg.Text = \"Select Category or add new one. Ready...\"\r\n\t\t\t\t\tCatch\r\n\t\t\t\t\t\trs1.Close\r\n\t\t\t\t\t\trs.close\r\n\t\t\t\t\t\ttoast.show(\"error\",\"Database Error!\",True,False)\r\n\t\t\t\t\tEnd Try\t\t\t\t\t\t\r\n\t\t\t\tEnd If\r\n\t\t\t\t\r\n\t\t\tCase \"G12a\" 'Restore\r\n\t\t\t\t'# Create Dialog\r\n\t\t\t\tDim Dlg As B4XDialog\r\n\t\t\t\tDlg.Initialize(MainForm.RootPane)\r\n\t\t\t\tDlg.Title = \"Restore Categrory\"\r\n\t\t\t\tsetupDialog\r\n\t\t\t\t'# Create Dialog panel\r\n\t\t\t\tDim p As Pane : p.initialize(\"\")\r\n\t\t\t\tP.SetLayoutAnimated(0,0,0,350dip, 200dip)\r\n\t\t\t\tp.LoadLayout(\"Restore\")\r\n\t\t\t\tTry\r\n\t\t\t\t\tDim rs As ResultSet = SQL.ExecQuery(\"SELECT * FROM Category where Deleted = 1 ORDER By Title ASC\")\r\n\t\t\t\t\tRestoreLv.Items.clear\r\n\t\t\t\t\tDo While rs.NextRow\r\n\t\t\t\t\t\tRestoreLv.Items.Add(rs.GetString(\"Title\"))\r\n\t\t\t\t\tLoop\r\n\t\t\t\t\trs.close\r\n\t\t\t\t\tProgMsg.Text=\"Select Category to be restored. Ready...\"\t\t\t\t\r\n\t\t\t\t\t'# show Dialog\r\n\t\t\t\t\tDim rsb As ResumableSub = Dlg.Showcustom(input,\"restore\",\"\",\"cancel\")\r\n\t\t\t\t\twait for (rsb) complete (result As Int)\r\n\t\t\t\t\tIf result = xui.DialogResponse_Positive Then\r\n\t\t\t\t\t\tProgMsg.Text=\"Restoring Category and attached Groups\/Items...\"\r\n\t\t\t\t\t\tDim sellist As List = RestoreLv.GetSelectedIndices\r\n\t\t\t\t\t\tTry\r\n\t\t\t\t\t\t\tFor x = 0 To sellist.Size-1\r\n\t\t\t\t\t\t\t\tDim seltit As String = sellist.Get(x)\r\n\t\t\t\t\t\t\t\tDim xsecid As Long = SQL.ExecQuerySingleResult2(\"SELECT ID FROM Category WHERE Title=?\", _\r\n\t\t\t\t\t\t\t\t\tArray As String(seltit))\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE Category Set Deleted=0 WHERE ID=?\",Array As String(xsecid))\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE Item Set Deleted=0 WHERE secID=?\",Array As String(xsecid))\r\n\t\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE Grp Set Deleted=0 WHERE secID=?\",Array As String(xsecid))\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\tCatCombo.Items.Add(sellist.Get(x))\r\n\t\t\t\t\t\t\t\tcreateTree\r\n\t\t\t\t\t\t\t\ttoast.show(\"success\",\"Category restored\",True,False)\r\n\t\t\t\t\t\t\tNext\r\n\t\t\t\t\t\tCatch\r\n\t\t\t\t\t\t\ttoast.show(\"error\",\"Database Error!\",True,False)\r\n\t\t\t\t\t\tEnd Try\r\n\t\t\t\t\tEnd If\r\n\t\t\t\tCatch\r\n\t\t\t\t\ttoast.show(\"error\",\"Database Error!\",True,False)\r\n\t\t\t\tEnd Try\r\n\t\t\t\tProgMsg.Text=\"Ready...\"\r\n\t\t\tCase \"G13\" 'Change Title\r\n\t\t\t\t'# Create Dialog\r\n\t\t\t\tDim Dlg As B4XDialog\r\n\t\t\t\tDlg.Initialize(MainForm.RootPane)\r\n\t\t\t\tDlg.Title = \"Change Title\"\r\n\t\t\t\tsetupDialog\r\n\t\t\t\t'# Create Template\r\n\t\t\t\tDim input As B4XInputTemplate\r\n\t\t\t\tinput.Initialize\r\n\t\t\t\tinput.lblTitle.TextColor = xui.color_blue\r\n\t\t\t\tinput.lblTitle.Text = \"Title:\"\r\n\t\t\t\tinput.Text = CatCombo.value\r\n\t\t\t\tProgMsg.Text=\"Enter new Category Title. Ready...\"\r\n\t\t\t\t'# show Dialog\r\n\t\t\t\tDim rsb As ResumableSub = Dlg.ShowTemplate(input,\"save\",\"\",\"cancel\")\r\n\t\t\t\twait for (rsb) complete (result As Int)\r\n\t\t\t\t'# Action\r\n\t\t\t\tDim oldTitle As String = CatCombo.value\r\n\t\t\t\tIf result = xui.DialogResponse_Positive Then\r\n\t\t\t\t\tDim ex As Int = SQL.ExecQuerySingleResult2(\"SELECT Title FROM Category WHERE Title=?\", _\r\n\t\t\t\t\t\tArray As String(input.text))\r\n\t\t\t\t\tIf ex < 0 Then\r\n\t\t\t\t\t\tTry\r\n\t\t\t\t\t\t\tSQL.ExecNonQuery2(\"UPDATE Category Set Title=? Where Title=?\",Array As String(input.Text,oldTitle))\r\n\t\t\t\t\t\t\tDim idx As Int = CatCombo.Items.IndexOf(oldTitle)\r\n\t\t\t\t\t\t\tIf idx >=0 Then CatCombo.Items.Set(idx) = input.text\r\n\t\t\t\t\t\t\ttoast.show(\"success\",\"Title changed.\",True,False)\r\n\t\t\t\t\t\tCatch\r\n\t\t\t\t\t\t\ttoast.show(\"error\",\"Database Error!\",True,False)\r\n\t\t\t\t\t\tEnd Try\r\n\t\t\t\t\tElse\r\n\t\t\t\t\t\t'error\r\n\t\t\t\t\t\ttoast.show(\"attention\",\"Title exists!\",True,False)\r\n\t\t\t\t\tEnd If\r\n\t\t\t\tEnd If\r\n\t\t\t\tProgMsg.Text=\"Ready...\"\r\n\t\tEnd Select\r\n\tEnd If\r\nEnd Sub\r\n\r\nPrivate Sub CatCombo_SelectedIndexChanged(Index As Int, Value As Object)\r\n\tlastCatID As Long = SQL.ExecQuerySingleResult2(\"SELECT ID FROM Category Where Title=?\",Array As String(Value))\r\n\tlastCatIDTxt As String = Value\r\n\tIf lastCatIDTxt.length > 0 Then\r\n\t\tcreateTree\r\n\t\tT1Cat.Text=\"\"\r\n\t\tT1Grp.Text=\"\"\r\n\t\tT1Web.Text=\"\"\r\n\t\tT1Item.Text=\"\"\r\n\t\tT1Rem.Text=\"\"\r\n\tEnd If\r\nEnd Sub\r\n#end region\r\n\r\n#region menu Group \/ ITEM (TreeView)\r\nPublic Sub createTree\r\n\tTry\r\n\t\t'# show message and toast\r\n\t\tProgMsg.Text = \"Building Tree...\"\r\n\t\ttoast.show(\"wait\",\"Please Wait...\",False,False)\r\n\t\t'# get ID of selected Category\r\n\t\tDim cattit As String = CatCombo.Value\r\n\t\tDim catid As Long = SQL.ExecQuerySingleResult2(\"SELECT ID FROM Category Where Title=?\",Array As String(cattit))\r\n\t\tDim rg As ResultSet = SQL.ExecQuery2(\"SELECT * FROM Grp WHERE secID=? ORDER BY Ttile ASC\",Array As String(catid))\r\n\t\t'# clear tree and build it\r\n\t\tTreeView1.Root.Children.clear\r\n\t\tDo While rg.nextrow\r\n\t\t\t'# add group\r\n\t\t\tTT.createGroup(rg.GetString(\"Title\"),rg.GetString(\"Icon\"))\r\n\t\t\tTT.addGroupLst\r\n\t\t\t'## add items\r\n\t\t\tDim g As TreeItem = TT.findGroup(rg.GetString(\"Title\"))\r\n\t\t\tDim ri As ResultSet = SQL.ExecQuery2(\"SELECT * from Grp WHERE secID=? AND grpID=? ORDER BY Ttile(ASC)\", _\r\n\t\t\t\tArray As String(catid,rg.getlong(\"ID\")))\r\n\t\t\tDo While ri.NextRow\r\n\t\t\t\tTT.createItem(rg.GetString(\"Title\"),ri.GetString(\"Title\"),ri.GetString(\"Icon\"))\r\n\t\t\tLoop\r\n\t\tLoop\r\n\t\trg.Close\r\n\t\tri.Close\r\n\t\ttoast.hide\r\n\t\ttoast.show(\"success\",\"Tree successfull builded. Ready...\",True,False)\r\n\t\tProgMsg.Text=(\"Ready...\")\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n#end region\r\n\r\n#region option\r\n\r\n#end region\r\n\r\n'##########################################\r\n\r\n#region workarea\r\nSub Button1_Click\r\n\tWaitProgBar.Progress = 0.5\r\n\tWaitProgIndic.Text = \"50%\"\r\n\tWaitLblText.Text = \"Please wait...\"\r\n\tWaitPane.Top = MainForm.WindowHeight\/2 - WaitPane.PrefHeight\/2\r\n\tWaitPane.left = MainForm.Windowwidth\/2 - WaitPane.Prefwidth\/2\r\n\tWaitPane.Visible=True\r\nEnd Sub\r\n\r\nprivate Sub showWait(Progress As Int)\r\n\tTry\r\n\t\tDim p As Int = Progress\/10\r\n\t\tWaitProgBar.Progress = Progress\r\n\t\tWaitProgIndic.Text = p & \"%\"\r\n\t\tWaitLblText.Text = \"Please wait...\"\r\n\t\tIf Progress < 100 Then\r\n\t\t\tWaitPane.visible = True\r\n\t\tElse\r\n\t\t\tWaitPane.Visible=False\r\n\t\tEnd If\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n\r\nprivate Sub clearTabPage1\r\n\tlastItemID = -1\r\n\tlastItemIDTxt=\"\"\r\n\tT1Grp.Text=\"\"\r\n\tT1Item.Text=\"\"\r\n\tT1ImageView1.SetImage = Null\r\n\tT1ImageView2.SetImage = Null\r\n\tT1ImageView3.SetImage = Null\r\n\tT1Web.Text=\"\"\r\n\tT1Rem-LastException=\"\"\r\nEnd Sub\r\n\r\nPrivate Sub T1ImageView_MouseClicked (EventData As MouseEvent)\r\n\tTry\r\n\t\tDim img As ImageView = Sender\r\n\t\tDim Dlg As B4XDialog\r\n\t\tDlg.Title = \"Imageviewer\"\r\n\t\tsetupDialog(Dlg)\r\n\t\tDim p As Pane\r\n\t\tp.SetLayoutAnimated(250,MainForm.WindowWidth - 250dip,MainForm.WindowHeight-250dip,MainForm.WindowWidth,500dip,500dip)\r\n\t\tp.loadlayout(\"ImageViewer\")\r\n\t\tDim imgbitmap As Image = img.GetImage\r\n\t\tViewerImageView.SetImage = imgbitmap\r\n\t\tDim rs As ResumableSub = Dlg.ShowCustom(p,\"\",\"\",\"close\")\r\n\t\twait for (rs) completed\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n\r\n\r\nPrivate Sub TreeView1_SelectedItemChanged (SelectedItem As TreeItem)\r\n\tTry\r\n\t\tIf SelectedItem.Root Then ' group selected\r\n\t\t\tlastGrpID = SQL.ExecQuerySingleResult2(\"SELECT ID FROM Grp WHERE secID=?,Title=?\", _\r\n\t\t\t\tArray As String(lastCatID,SelectedItem.text))\r\n\t\t\tlastGrpIDTxt = SQL.ExecQuerySingleResult2(\"SELECT Title FROM Grp WHERE secID=?\", _\r\n\t\t\t\tArray As String(lastCatID))\r\n\t\t\tselGrp.Text = lastGrpIDTxt\r\n\t\tElse ' item selected\r\n\t\t\tlastGrpID = SQL.ExecQuerySingleResult2(\"SELECT ID FROM Grp WHERE secID=?,Title=?\", _\r\n\t\t\t\tArray As String(lastCatID,SelectedItem.text))\r\n\t\t\t'lastGrpIDTxt = SQL.ExecQuerySingleResult2(\"SELECT Title FROM Grp WHERE secID=?\", _\r\n\t\t\t'\tArray As String(SelectedItem.Parent.text))\r\n\t\t\tlastGrpIDTxt = SelectedItem.Parent.text\r\n\t\t\tselGrp.Text = lastGrpIDTxt\r\n\t\t\tIf lastGrpID > -1 Then\r\n\t\t\t\tDim ri As ResultSet = SQL.ExecQuery2(\"SELECT * FROM Item WHERE secID=? AND grpID=? ORDER BY Title ASC\", _\r\n\t\t\t\t\tArray As String(lastCatID,lastGrpID))\r\n\t\t\t\tDo While ri.nextrow\r\n\t\t\t\t\tlastItemID = ri.GetLong(\"ID\")\r\n\t\t\t\t\tlastItemIDTxt = ri.GetString(\"Title\")\r\n\t\t\t\t\tT1Cat.Text = lastCatIDTxt\r\n\t\t\t\t\tT1Grp.Text = lastGrpIDTxt\r\n\t\t\t\t\tT1Item.Text = lastItemIDTxt\r\n\t\t\t\t\tT1Web.Text = ri.GetString(\"Web\")\r\n\t\t\t\t\tT1Rem.Text = ri.GetString(\"Remarks\")\r\n\t\t\t\t\tT1ImageView1.SetImage = blob2img(ri.GetBlob(\"DataBlob\"))\r\n\t\t\t\t\tT1ImageView2.SetImage = blob2img(ri.GetBlob(\"DataBlob1\"))\r\n\t\t\t\t\tT1ImageView3.SetImage = blob2img(ri.GetBlob(\"DataBlob2\"))\r\n\t\t\t\t\t'T2.Text = ri.getstring(\"Data\")\r\n\t\t\t\tLoop\r\n\t\t\tEnd If\r\n\t\tEnd If\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n#end region\r\n\r\n'##########################################\r\n\r\n#region helpers\r\nprivate Sub PlaceIcon(Mn As Menu, Icon As String,iconWidth As Int, IconHeight As Int)\r\n\tDim jo As JavaObject = Mn\r\n\tDim imv As ImageView\r\n\timv.Initialize(\"MnuTitle\")\r\n\timv.SetImage(fx.LoadImageSample(File.DirAssets,Icon,iconWidth,IconHeight))\r\n\tjo.RunMethod(\"setGraphic\",Array(imv))\r\n\t\r\n\t'# Add Menu clickevent\r\n\tDim theMenu As JavaObject = Mn ' this bit was mi\tssing\r\n\tDim e As Object = theMenu.CreateEvent(\"javafx.event.EventHandler\",\"menuTitleClick\",False)\r\n\ttheMenu.RunMethod(\"setOnShowing\",Array(e))\r\nEnd Sub\r\n\r\nprivate Sub PlaceShortCut(Mi As JavaObject, SC As String)\r\n\tSC=SC.ToLowerCase\r\n\tIf SC.ToLowerCase.Contains(\"ctrl+\") Or SC.ToLowerCase.Contains(\"alt+\") Then\r\n\t\tDim KC As JavaObject\r\n\t\tDim combination(2) As String\r\n\t\tIf SC.ToUpperCase.Contains(\"alt\") Then\r\n\t\t\tcombination(0) = \"Alt\"\r\n\t\t\tSC = SC.Replace(\"alt+\",\"\")\r\n\t\tElse\r\n\t\t\tcombination(0) = \"Ctrl\"\r\n\t\t\tSC = SC.Replace(\"ctrl+\",\"\")\r\n\t\tEnd If\r\n\t\tcombination(1) = SC.ToLowerCase\r\n\t\tKC.InitializeStatic(\"javafx.scene.input.KeyCombination\")\r\n\t\tDim KCS As String\r\n\t\tFor i = 0 To combination.Length - 1\r\n\t\t\tIf i > 0 Then KCS = KCS & \"+\"\r\n\t\t\tKCS = KCS & combination(i)\r\n\t\tNext\r\n\t\tMi.RunMethod(\"setAccelerator\",Array(KC.RunMethod(\"keyCombination\",Array(KCS))))\r\n\tEnd If\r\nEnd Sub\r\n\r\nprivate Sub setupDialog(D As B4XDialog)\r\n\tD.BackgroundColor = xui.color_white\r\n\tD.BlurBackground = False\r\n\tD.BodyTextColor = xui.color_black\r\n\tD.BorderColor = xui.color_black\r\n\tD.BorderCornersRadius = 10dip\r\n\tD.BorderWidth = 2dip\r\n\tD.ButtonsColor = xui.color_blue\r\n\t'D.ButtonsFont\r\n\t'D.ButtonsHeight\r\n\t'D.ButtonsOrder\r\n\tD.ButtonsTextColor  = xui.color_white\r\n\tD.ButtonsTextColorDisabled = xui.color_black\r\n\tD.OverlayColor = xui.color_transparent\r\n\tD.TitleBarColor = xui.color_blue\r\n\tD.TitleBarFont = xui.CreateDefaultBoldFont(15)\r\n\tD.TitleBarHeight=60dip\r\n\tD.TitleBarTextColor = xui.color_white\r\nEnd Sub\r\n\r\nprivate Sub blob2img(Buffer() As Byte) As Byte() As Image\r\n\tDim InputStream1 As InputStream\r\n\tInputStream1.InitializeFromBytesArray(Buffer, 0, Buffer.Length)\r\n\tDim Bmp As Image\r\n\tBmp.Initialize2(InputStream1)\r\n\tInputStream1.Close\r\n\tReturn Bmp\r\nEnd Sub\r\n\r\nPrivate Sub img2blob(Img As Image) As Byte()\r\n\tDim OutputStream1 As OutputStream\r\n\tOutputStream1.InitializeToBytesArray(1000)\r\n\tImg.WriteToStream(OutputStream1, 90, \"JPEG\")\r\n\tReturn OutputStream1.ToBytesArray\r\nEnd Sub\r\n#end region\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","module_public_elements":{"method":[{"name":"createTree","comment":"","returntype":""}],"field":[{"name":"WorkAreaPane","comment":"","returntype":"Pane"}]}},{"name":"B4XToast","module_type":"Class","code":"'##########################################################\r\n'# custom Toast with themes\r\n'# --------------------------------------------------------\r\n'# Name\/Type:\tB4XToast \/ Class B4J + B4A\r\n'# ID:\t\t\tB4XToast\r\n'# Version:\t\t1.0.0\r\n'# Depends On:\t-\r\n'# Libs:\t\tB4XGifView, B4XBeep\r\n'# Files:\t\t-\r\n'# Layouts:\t\tB4XToast\r\n'# ########################################################\r\n'# (C) Günter Becker private use roylaty free\r\n'# (C Images) icon8.com royalty free\r\n'# ########################################################\r\n'# History:\r\n'# 2.0 2026\/04\r\n'# ########################################################\r\n\r\n#region Globals and initialize\r\n'## Globals and Objects\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J B4A 04\/2026\r\nSub Class_Globals\r\n\t#if B4J\r\n\t\tPrivate fx As JFX\r\n\t\tPrivate ToastPane As Pane\r\n\t#else\r\n\t\tPrivate ToastPane As Panel\r\n\t#end if\r\n\t\r\n\tPublic col(11) As Int\r\n\tcol(0)= xui.color_Blue\r\n\tcol(1)= xui.color_yellow\r\n\tcol(2)= xui.color_red\r\n\tcol(3)= xui.color_blue\r\n\tcol(4)=xui.color_white\r\n\tcol(5)=xui.color_white\r\n\tcol(6)=xui.color_black\r\n\tcol(7)=xui.color_white\r\n\tcol(8)=xui.color_white\r\n\tcol(9)=xui.color_black\r\n\tcol(10)=xui.color_green\r\n\tPrivate xui As XUI\r\n\t\r\n\tPrivate MsgLabel As Label\r\n\tPrivate B4XGifView1 As B4XGifView\r\n\t\r\n\tPrivate CatLogo As ImageView\r\n\tPrivate Flashtimer As Timer\r\n\tPrivate ShowTimer As Timer\r\n\tPrivate Beep As B4XBeep\r\n\t\r\n\tPrivate mCallback As B4XView\r\n\tPrivate mBeepSig As Boolean  = False\r\n\t\r\n\tPrivate MsgLabel1 As Label\r\nEnd Sub\r\n'## Initialize variables and objects\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Parameter:\tParent View, Eventname\r\n'##\t\t\t\tFlashtimer duration in ms, Showtimerduration in ms, Beep-Sginal,\r\n'##\t\t\t\ttoast width, toast height, top position, left position\r\n'## Tested:\t\tB4J B4A 04\/2026\r\nPublic Sub Initialize(callback As B4XView, _\r\n\tFTimerDur As Int, STimerDur As Int,BeepSig As Boolean, _\r\n\twidth As Int, height As  Int)\r\n\tmCallback=callback\r\n\tmBeepSig=BeepSig\r\n\tFlashtimer.Initialize(\"FTimer\",FTimerDur)\r\n\tShowTimer.Initialize(\"STimer\",STimerDur)\r\n\tBeep.Initialize\r\n\tBeep.Duration=300\r\n\tBeep.Frequency=300\r\n\t\r\n\tToastPane.Initialize(\"Toast\")\r\n\t#if B4J\r\n\t\tIf ToastPane.prefwidth > mCallback.Width Then\r\n\t\t\tToastPane.prefWidth = mCallback.width\r\n\t\tElse\r\n\t\t\tToastPane.prefWidth=width\r\n\t\tEnd If\r\n\t\tIf ToastPane.prefheight > mCallback.Height Then\r\n\t\t\tToastPane.prefheight = mCallback.height\r\n\t\tElse\r\n\t\t\tToastPane.prefheight=height\r\n\t\tEnd If\r\n\t\tToastPane.SetLayoutAnimated(250,0,0,ToastPane.prefwidth,ToastPane.prefheight)\r\n\t#else\r\n\t\tIf ToastPane.width > mCallback.Width Then\r\n\t\t\tToastPane.Width = mCallback.width\r\n\t\tElse\r\n\t\t\tToastPane.Width=width\r\n\t\tEnd If\r\n\t\tIf ToastPane.height > mCallback.Height Then\r\n\t\t\tToastPane.height = mCallback.height\r\n\t\tElse\r\n\t\t\tToastPane.height=height\r\n\t\tEnd If\r\n\t\tToastPane.SetLayoutAnimated(250,0,0,ToastPane.width,ToastPane.height)\r\n\t#end if\r\n\t\r\n\tToastPane.LoadLayout(\"B4XToast\")\r\nEnd Sub\r\n#end region\r\n\r\n'# ########################################################\r\n\r\n#region events\r\n'## EVENT:\t\tToast clicked to close\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J B4A 04\/2026\r\n#if B4J\r\nPrivate Sub Toast_MouseClicked (EventData As MouseEvent)\r\n#else\r\nPrivate Sub Toast_Click\r\n#end if\r\n\tremove\r\n\tShowTimer.Enabled=False\r\n\tFlashtimer.Enabled=False\r\nEnd Sub\r\n'## EVENT: Flastimer flash\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J B4A 04\/2026\r\nprivate Sub FTimer_tick\r\n\tMsgLabel.Visible=Not(MsgLabel.Visible)\r\n\tIf mBeepSig Then\r\n\t\tBeep.DoBeep(1,0)\r\n\tEnd If\r\n\tSleep(0)\r\nEnd Sub\r\n'## EVENT: Showtimer hide\/remove\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J B4A 04\/2026\r\nprivate Sub STimer_tick\r\n\tremove\r\n\tShowTimer.Enabled=False\r\n\tSleep(0)\r\nEnd Sub\r\n#end region\r\n\r\n'# ########################################################\r\n\r\n#region features\r\n'## show Toast\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Parameter:\tcat info\/attention\/error\/wait\/custom\r\n'##\t\t\t\tText the message\r\n'##\t\t\t\tSTimer hide automativ FTimer flash message text\r\n'## Tested:\t\tB4J B4A 04\/2026\r\npublic Sub show(cat As String, Text As String,STimer As Boolean, FTimer As Boolean)\r\n\tB4XGifView1.mbase.visible=False\r\n\tMsgLabel.Text = Text\r\n\tMsgLabel.Visible=True\r\n\tMsgLabel1.Visible=False\r\n\tShowTimer.enabled=False\r\n\tFlashtimer.Enabled=False\r\n\t#if B4J\r\n\t\tToastPane.StyleClasses.Clear\r\n\t\tDim xp As B4XView= ToastPane\r\n\t\tDim ml As B4XView=MsgLabel\r\n\t\tSelect cat.ToLowerCase\r\n\t\t\tCase \"info\"\r\n\t\t\t\tCatLogo.SetImage(fx.LoadImageSample(File.DirAssets,\"Information_48x48.png\",40dip,40dip))\r\n\t\t\t\txp.Color = col(0)\r\n\t\t\t\tml.TextColor=col(5)\r\n\t\t\tCase \"attention\"\r\n\t\t\t\tCatLogo.SetImage(fx.LoadImageSample(File.DirAssets,\"icons8-attention-94.png\",40dip,40dip))\r\n\t\t\t\txp.Color = col(1)\r\n\t\t\t\tml.TextColor=col(6)\r\n\t\t\tCase \"error\"\r\n\t\t\t\tCatLogo.SetImage(fx.LoadImageSample(File.DirAssets,\"icons8-error-94.png\",40dip,40dip))\r\n\t\t\t\txp.Color = col(2)\r\n\t\t\t\tml.TextColor=col(7)\r\n\t\t\tCase \"success\"\r\n\t\t\t\tCatLogo.SetImage(fx.LoadImageSample(File.DirAssets,\"icons8-success-48.png\",40dip,40dip))\r\n\t\t\t\txp.Color = col(2)\r\n\t\t\t\tml.TextColor=col(7)\r\n\t\t\tCase \"wait\"\r\n\t\t\t\tCatLogo.SetImage(fx.LoadImageSample(File.DirAssets,\"Information_48x48.png\",40dip,40dip))\r\n\t\t\t\txp.Color = col(3)\r\n\t\t\t\tB4XGifView1.mbase.visible=True\r\n\t\t\t\tml.TextColor= col(8)\r\n\t\t\t\tml.Text = Text\r\n\t\t\t\tml.Visible=False\r\n\t\t\t\tml.Visible=True \r\n\t\t\tCase Else\r\n\t\t\t\tCatLogo.SetImage(fx.LoadImageSample(File.DirAssets,\"Information_48x48.png\",40dip,40dip))\r\n\t\t\t\txp.Color = col(4)\r\n\t\t\t\tml.TextColor=col(9)\r\n\t\t\t\tB4XGifView1.mBase.Visible=False\r\n\t\tEnd Select\r\n\t#else\r\n\t\tDim xp As B4XView= ToastPane\r\n\t\tB4XGifView1.SetGif(File.DirAssets,\"spinner2.gif\")\r\n\t\tSelect cat.ToLowerCase\r\n\t\t\tCase \"info\"\r\n\t\t\t\tCatLogo.bitmap = LoadBitmapResize(File.DirAssets,\"Information_48x48.png\",40dip,40dip,False)\r\n\t\t\t\txp.SetColorAndBorder(col(0),2dip,xui.Color_Black,5dip)\r\n\t\t\t\tMsgLabel.TextColor=col(5)\r\n\t\t\tCase \"attention\"\r\n\t\t\t\tCatLogo.bitmap = LoadBitmapResize(File.DirAssets,\"icons8-attention-94.png\",40dip,40dip,False)\r\n\t\t\t\txp.SetColorAndBorder(col(1),2dip,xui.Color_Black,5dip)\r\n\t\t\t\tMsgLabel.TextColor=col(6)\r\n\t\t\tCase \"error\"\r\n\t\t\t\tCatLogo.bitmap = LoadBitmapResize(File.DirAssets,\"icons8-error-94.png\",40dip,40dip,False)\r\n\t\t\t\txp.SetColorAndBorder(col(2),2dip,xui.Color_Black,5dip)\r\n\t\t\t\tMsgLabel.TextColor=col(7)\r\n\t\t\tCase \"sucess\"\r\n\t\t\t\tCatLogo.bitmap = LoadBitmapResize(File.DirAssets,\"icons8-success-48.png\",40dip,40dip,False)\r\n\t\t\t\txp.SetColorAndBorder(col(11),2dip,xui.Color_Black,5dip)\r\n\t\t\t\tMsgLabel.TextColor=col(7)\r\n\t\t\tCase \"wait\"\r\n\t\t\t\tCatLogo.bitmap = LoadBitmapResize(File.DirAssets,\"Information_48x48.png\",40dip,40dip,False)\r\n\t\t\t\txp.SetColorAndBorder(col(3),2dip,xui.Color_Black,5dip)\r\n\t\t\t\tB4XGifView1.mbase.visible=True\r\n\t\t\t\tMsgLabel1.TextColor=col(8)\r\n\t\t\t\tMsgLabel1.Text = Text\r\n\t\t\t\tMsgLabel.Visible=False\r\n\t\t\t\tMsgLabel1.Visible=True \r\n\t\t\tCase Else\r\n\t\t\t\tCatLogo.bitmap = LoadBitmapResize(File.DirAssets,\"Information_48x48.png\",40dip,40dip,False)\r\n\t\t\t\txp.SetColorAndBorder(col(4),2dip,xui.Color_Black,5dip)\t\r\n\t\t\t\tMsgLabel.TextColor=col(9)\r\n\t\tEnd Select\r\n\t#end if\r\n\tToastPane=xp\r\n\tMsgLabel=ml\r\n\t#if B4J\r\n\t\tremove\r\n\t\tmCallback.Addview(ToastPane, _\r\n\t\t\tmCallback.Width* 0.5 - ToastPane.prefWidth * 0.5, _\r\n\t\t\tmCallback.height*0.70 - ToastPane.prefheight * 0.5, _\r\n\t\t\tToastPane.prefWidth,ToastPane.prefheight)\t\r\n\t#Else\r\n\t\tremove\r\n\t\tmCallback.AddView(ToastPane, _\r\n\t\t\tmCallback.Width* 0.5 - ToastPane.Width * 0.5, _\r\n\t\t\tmCallback.height*0.70 - ToastPane.height * 0.5, _\r\n\t\t\tToastPane.Width,ToastPane.height)\r\n\t#End If\r\n\tSleep(0)\r\n\tShowTimer.enabled=STimer\r\n\tFlashtimer.Enabled=FTimer\r\n\tIf mBeepSig Then\r\n\t\tBeep.DoBeep(1,0)\r\n\tEnd If\r\nEnd Sub\r\n'## hide toast and remove from parent\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J B4A 04\/2026\r\npublic Sub hide\r\n\tremove\r\n\tShowTimer.Enabled=False\r\n\tFlashtimer.Enabled=False\r\nEnd Sub\r\n'## remove toast\r\n'## Version:\t1.0\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J B4A 04\/2026\r\nprivate Sub remove\r\n\tTry\r\n\t\t#if B4J\r\n\t\t\tToastPane.RemoveNodeFromParent\r\n\t\t#Else\r\n\t\t\tToastPane.RemoveView\r\n\t\t#End If\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n#end region","module_public_elements":{"method":[{"name":"Initialize","comment":"## Initialize variables and objects\n## Version:\t1.0\n## (C):\t\tGünter Becker\n## Parameter:\tParent View, Eventname\n##\t\t\t\tFlashtimer duration in ms, Showtimerduration in ms, Beep-Sginal,\n##\t\t\t\ttoast width, toast height, top position, left position\n## Tested:\t\tB4J B4A 04\/2026","returntype":""},{"name":"show","comment":"## show Toast\n## Version:\t1.0\n## (C):\t\tGünter Becker\n## Parameter:\tcat info\/attention\/error\/wait\/custom\n##\t\t\t\tText the message\n##\t\t\t\tSTimer hide automativ FTimer flash message text\n## Tested:\t\tB4J B4A 04\/2026","returntype":"","parameter":[{"name":"cat","type":"String"},{"name":"Text","type":"String"},{"name":"STimer","type":"Boolean"},{"name":"FTimer","type":"Boolean"}]},{"name":"hide","comment":"## hide toast and remove from parent\n## Version:\t1.0\n## (C):\t\tGünter Becker\n## Tested:\t\tB4J B4A 04\/2026","returntype":""}]}},{"name":"FormUtils","module_type":"StaticCode","code":"'# ########################################################\r\n'# Form utilities\r\n'# --------------------------------------------------------\r\n'# Name\/Type:\tFORMUTILS \/ static Code Module\r\n'# ID:\t\t\t\r\n'# Version:\t\t1\r\n'# Depends On:\t-\r\n'# Libs:\t\tCSSUTILS, jFX, jCore\r\n'# Files:\t\t-\r\n'# Layouts:\t\t-\r\n'# ########################################################\r\n'# (C) https:\/\/www.b4x.com\/android\/forum\/threads\/formutils.84460\/#content\r\n'# ########################################################\r\n'# History:\r\n'# 1.0 2026\/03\r\n'# ########################################################\r\n'Static code module\r\nSub Process_Globals\r\n\tPrivate fx As JFX\r\nEnd Sub\r\n'Gets the icon images to be used in the window decorations and when minimized.\r\n'Also adds the icon to the form\r\n'<code>Dim Img As Image = fx.LoadImage(File.DirAssets,\"icon.png\")\r\n'FormUtils.GetIcons(MainForm).Add(Img)<\/code>\r\nPublic Sub GetIcons(F As Form) As List\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"getIcons\",Null)\r\nEnd Sub\r\n'Gets the value of the property minHeight.\r\nPublic Sub GetMinHeight(F As Form) As Double\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"getMinHeight\",Null)\r\nEnd Sub\r\n'Gets the value of the property minWidth.\r\nPublic Sub GetMinWidth(F As Form) As Double\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"getMinWidth\",Null)\r\nEnd Sub\r\n'Gets the value of the property alwaysOnTop.\r\nPublic Sub IsAlwaysOnTop(F As Form) As Boolean\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"isAlwaysOnTop\",Null)\r\nEnd Sub\r\n'Gets the value of the property fullScreen.\r\nPublic Sub IsFullScreen (F As Form) As Boolean\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"isFullScreen\",Null)\r\nEnd Sub\r\n'Gets the value of the property iconified.\r\nPublic Sub IsIconified (F As Form) As Boolean\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"isIconified\",Null)\r\nEnd Sub\r\n'Gets the value of the property maximized.\r\nPublic Sub IsMaximized (F As Form) As Boolean\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"isMaximized\",Null)\r\nEnd Sub\r\n'Gets the value of the property resizable.\r\nPublic Sub IsResizable (F As Form) As Boolean\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tReturn TJo.RunMethod(\"isResizable\",Null)\r\nEnd Sub\r\n'Sets the value of the property fullScreen.\r\nPublic Sub SetFullScreen(F As Form, Value As Boolean)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setFullScreen\",Array As Object(Value))\r\nEnd Sub\r\n'Specifies the text to show when a user enters full screen mode, usually used to indicate the way a user should go about exiting out of full screen mode.\r\nPublic Sub SetFullScreenExitHint(F As Form, Value As String)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setFullScreenExitHint\",Array As Object(Value))\r\nEnd Sub\r\n'Specifies the KeyCombination that will allow the user to exit full screen mode.\r\nPublic Sub SetFullScreenExitKeyCombination(F As Form,TKeyCombination As Object)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setFullScreenExitKeyCombination\",Array As Object(TKeyCombination))\r\nEnd Sub\r\n'Sets the value of the property iconified.\r\nPublic Sub SetIconified(F As Form, Value As Boolean)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setIconified\",Array As Object(Value))\r\nEnd Sub\r\n'Sets the value of the property maxHeight.\r\nPublic Sub SetMaxHeight(F As Form, Value As Double)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setMaxHeight\",Array As Object(Value))\r\nEnd Sub\r\n'Sets the value of the property maximized.\r\nPublic Sub SetMaximized(F As Form, Value As Boolean)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setMaximized\",Array As Object(Value))\r\nEnd Sub\r\n'Sets the value of the property maxWidth.\r\nPublic Sub SetMaxWidth(F As Form, Value As Double)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setMaxWidth\",Array As Object(Value))\r\nEnd Sub\r\n'Sets the value of the property minHeight.\r\nPublic Sub SetMinHeight(F As Form, Value As Double)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setMinHeight\",Array As Object(Value))\r\nEnd Sub\r\n'Sets the value of the property minWidth.\r\nPublic Sub SetMinWidth(F As Form, Value As Double)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"setMinWidth\",Array As Object(Value))\r\nEnd Sub\r\n'Send the Window to the background.\r\nPublic Sub ToBack(F As Form)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"toBack\",Null)\r\nEnd Sub\r\n'Bring the Window to the foreground.\r\nPublic Sub ToFront(F As Form)\r\n\tDim TJo As JavaObject = GetStage(F)\r\n\tTJo.RunMethod(\"toFront\",Null)\r\nEnd Sub\r\n\r\nPrivate Sub GetStage(F As JavaObject) As JavaObject\r\n\tReturn F.GetField(\"stage\")\r\nEnd Sub","module_public_elements":{"method":[{"name":"GetIcons","comment":"Gets the icon images to be used in the window decorations and when minimized.\nAlso adds the icon to the form\n<code>Dim Img As Image = fx.LoadImage(File.DirAssets,\"icon.png\")\nFormUtils.GetIcons(MainForm).Add(Img)<\/code>","returntype":"List","parameter":[{"name":"F","type":"Form"}]},{"name":"GetMinHeight","comment":"Gets the value of the property minHeight.","returntype":"Double","parameter":[{"name":"F","type":"Form"}]},{"name":"GetMinWidth","comment":"Gets the value of the property minWidth.","returntype":"Double","parameter":[{"name":"F","type":"Form"}]},{"name":"IsAlwaysOnTop","comment":"Gets the value of the property alwaysOnTop.","returntype":"Boolean","parameter":[{"name":"F","type":"Form"}]},{"name":"IsFullScreen","comment":"Gets the value of the property fullScreen.","returntype":"Boolean","parameter":[{"name":"F","type":"Form"}]},{"name":"IsIconified","comment":"Gets the value of the property iconified.","returntype":"Boolean","parameter":[{"name":"F","type":"Form"}]},{"name":"IsMaximized","comment":"Gets the value of the property maximized.","returntype":"Boolean","parameter":[{"name":"F","type":"Form"}]},{"name":"IsResizable","comment":"Gets the value of the property resizable.","returntype":"Boolean","parameter":[{"name":"F","type":"Form"}]},{"name":"SetFullScreen","comment":"Sets the value of the property fullScreen.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Boolean"}]},{"name":"SetFullScreenExitHint","comment":"Specifies the text to show when a user enters full screen mode, usually used to indicate the way a user should go about exiting out of full screen mode.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"String"}]},{"name":"SetFullScreenExitKeyCombination","comment":"Specifies the KeyCombination that will allow the user to exit full screen mode.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"TKeyCombination","type":"Object"}]},{"name":"SetIconified","comment":"Sets the value of the property iconified.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Boolean"}]},{"name":"SetMaxHeight","comment":"Sets the value of the property maxHeight.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Double"}]},{"name":"SetMaximized","comment":"Sets the value of the property maximized.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Boolean"}]},{"name":"SetMaxWidth","comment":"Sets the value of the property maxWidth.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Double"}]},{"name":"SetMinHeight","comment":"Sets the value of the property minHeight.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Double"}]},{"name":"SetMinWidth","comment":"Sets the value of the property minWidth.","returntype":"","parameter":[{"name":"F","type":"Form"},{"name":"Value","type":"Double"}]},{"name":"ToBack","comment":"Send the Window to the background.","returntype":"","parameter":[{"name":"F","type":"Form"}]},{"name":"ToFront","comment":"Bring the Window to the foreground.","returntype":"","parameter":[{"name":"F","type":"Form"}]}]}},{"name":"GUI","module_type":"Class","code":"Sub Class_Globals\r\n\t#if B4J\r\n\t\tPrivate fx As JFX\r\n\t\tPrivate mWorkArea As Pane\r\n\t\tType MFGUI( _\r\n\t\tMaxWidth As Int, MaxHeight As Int, MinWidth As Int,MinHeight As Int, _\r\n\t\tNormalWidth As Int, NormalHeight As Int, _\r\n\t\tcurrPos(2) As Int, currDIM(2) As  Int, DragPos(2) As Int, DragResize(2) As Int, _\r\n\t\tFormStyle As String,FormIcon As String, FormTitle As String, _\r\n\t\tBckColor As Paint, BColor As Paint, BRadius As Int, BWidth As Int)\r\n\t\tPrivate mFrm As Form\r\n\t#else\r\n\t\tPrivate mWorkArea As Panel\r\n\t\tType MFGUI( _\r\n\t\tMaxWidth As Int, MaxHeight As Int, MinWidth As Int,MinHeight As Int, _\r\n\t\tNormalWidth As Int, NormalHeight As Int, _\r\n\t\tcurrPos(2) As Int, currDIM(2) As  Int, DragPos(2) As Int, DragResize(2) As Int, _\r\n\t\tFormStyle As String,FormIcon As String, FormTitle As String, _\r\n\t\tBckColor As int, BColor As int, BRadius As Int, BWidth As Int)\r\n\t\tPrivate mFrm as B4XView\r\n\t#end if\r\n\t\r\n\tPrivate xui As XUI\r\n\tPublic MFormGUI As MFGUI\r\n\tPrivate par As Map\r\n\t\r\nEnd Sub\r\n\r\n#if B4J\r\nPublic Sub Initialize(Frm As Form, Param As Map,WorkArea As Pane)\r\n#else\r\nPublic Sub Initialize(Frm As B4XView, Param As Map,WorkArea As Panel)\r\n#end if\r\n\tmFrm = Frm\r\n\tpar = Param\r\n\tmWorkArea=WorkArea\r\n\tcustFormGUI\r\nEnd Sub\r\n\r\n'## customize mFrm GUI\r\n'## Version:\t1\r\n'## Layout:\t\tmFrm\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\n#if B4J\r\nprivate Sub custFormGUI\r\n\tTry\r\n\t\tMFormGUI.Initialize\r\n\t\tDim gd As GradientMaker: gd.Initialize\r\n\t\t\r\n\t\t'# Main Style DECORATED UNDECORATED TRANSPARENT UTILITY\r\n\t\tMFormGUI.formstyle = par.get(\"fstyle\")\r\n\t\tmFrm.SetFormStyle(MFormGUI.formstyle)\r\n\t\tmFrm.Resizable=True\r\n\t\t'# work area back color as solid color\r\n\t\tIf par.ContainsKey(\"frootcolor\") Then\r\n\t\t\tDim xwa As B4XView = mWorkArea\r\n\t\t\txwa.Color = par.Get(\"frootcolor\")\r\n\t\t\tmWorkArea = xwa\r\n\t\tEnd If\r\n\t\tIf par.ContainsKey(\"fbackcolor\") Then _\r\n\t\tmFrm.BackColor = par.Get(\"fbackcolor\")\r\n\t\t'# or set workarea background to gradient\r\n\t\t'# TOP_BOTTOM TOP_LEFT TOP_RIGHT BOTTOM_TOP BOTTOM_LEFT BOTTOM_RIGHT\r\n\t\t'# LEFT_RIGHT RIGHT_LEFT\r\n\t\tIf par.ContainsKey(\"fgraddir\") And par.ContainsKey(\"fgradcolor\") Then\r\n\t\t\tgd.SetGradient(mWorkArea,par.Get(\"fgraddir\"),par.Get(\"fgradcolor\"))\r\n\t\tEnd If\r\n\t\tIf par.ContainsKey(\"fimage\") Then\r\n\t\t\tCSSUtils.SetBackgroundImage(mWorkArea,File.DirAssets,par.Get(\"fimage\"))\r\n\t\tEnd If\r\n\t\t'# store max\/min dimensions\r\n\t\tMFormGUI.MaxHeight = fx.PrimaryScreen.MaxY\r\n\t\tMFormGUI.Maxwidth= fx.PrimaryScreen.MaxX\r\n\t\tMFormGUI.MinHeight = fx.PrimaryScreen.MinY\r\n\t\tMFormGUI.MinWidth = fx.PrimaryScreen.MinX\r\n\t\tmFrm.SetWindowSizeLimits(MFormGUI.MaxHeight,MFormGUI.MaxHeight, _\r\n\t\t\tMFormGUI.MinWidth,MFormGUI.MinHeight)\r\n\t\t\t\r\n\t\t'# set mFrm normal startup\/restore dimensions\r\n\t\tMFormGUI.NormalHeight = par.Get(\"fheight\")\r\n\t\tMFormGUI.NormalWidth = par.Get(\"fwidth\")\r\n\t\tmFrm.WindowHeight = MFormGUI.NormalHeight\r\n\t\tmFrm.WindowWidth = MFormGUI.NormalWidth\r\n\r\n\t\t'# Center mFrm or set top\/left\r\n\t\tcentermFrm\t\r\n\t\tIf par.ContainsKey(\"ftop\") Then _\r\n\t\t\tmFrm.WindowTop=par.Get(\"ftop\")\r\n\t\tIf par.ContainsKey(\"flleft\") Then _\r\n\t\t\tmFrm.Windowleft=par.Get(\"fleft\")\r\n\t\t\r\n\t\t'# set borderradius in mFrm Layout!\r\n\t\t'# if using UNDECORATED than place Titlebar and or Footerbar as pane in mFrmLayout\r\n\t\t'# if mFrm Borderradius than set Titlebar\/Footer to same value\r\n\t\tIf par.Get(\"fbwidth\") > 0 And par.Get(\"fbradius\") > 0 Then\r\n\t\t\tMFormGUI.BColor = par.Get(\"fbcolor\")\r\n\t\t\tMFormGUI.BWidth = par.Get(\"fbwidth\")\r\n\t\t\tMFormGUI.BRadius = par.get(\"fbradius\")\r\n\t\t\tSetPanelCornerRadius(mFrm.rootpane,MFormGUI.bradius,True,True,True,True)\r\n\t\t\t'# set Titlebar and Footerbar corner radius to meet mFrm Corner radius\r\n\t\t\t'# set TAG Value \"Titelbar\"\" or \"Footerbar\"\r\n\t\t\tIf MFormGUI.formstyle=\"TRANSPARENT\" Or MFormGUI.formstyle=\"UNDECORATED\" And _\r\n\t\t\t\tpar.Get(\"fbwidth\") > 0 And par.Get(\"fbradius\") > 0 Then\r\n\t\t\t\tFor Each v As Node In mFrm.RootPane.GetAllViewsRecursive\r\n\t\t\t\t\tIf v.Tag = \"Titlebar\" Then\r\n\t\t\t\t\t\tDim xV As B4XView = v\r\n\t\t\t\t\t\tSetPanelCornerRadius(xV,MFormGUI.bradius,True,True,False,False)\r\n\t\t\t\t\telse if v.Tag = \"Footerbar\" Then\r\n\t\t\t\t\t\tDim xV1 As B4XView = v\r\n\t\t\t\t\t\tSetPanelCornerRadius(xV1,MFormGUI.bradius,False,False,True,True)\r\n\t\t\t\t\tEnd If\r\n\t\t\t\tNext\r\n\t\t\tEnd If\t\t\t\r\n\t\tEnd If\r\n\t\t\t'# mFrm logo\r\n\t\tIf MFormGUI.FormIcon <> \"\" And File.Exists(File.DirAssets,MFormGUI.FormIcon) Then\r\n\t\t\tmFrm.Icon = fx.LoadImage(File.DirAssets,MFormGUI.FormIcon)\r\n\t\tEnd If\r\n\t\t\r\n\t\t'# set area of Maus pressed to move form\r\n\t\t'# should be at top (here full titlebar hight)\r\n\t\tMFormGUI.DragPos(0) = mFrm.WindowWidth\r\n\t\tMFormGUI.DragPos(1) = 50dip\r\n\t\t\r\n\t\t'# set area of Maus presssed to resize form\r\n\t\t'# should be at bottom (here right corner)\r\n\t\tMFormGUI.DragResize(0) = mFrm.WindowWidth - 50dip\r\n\t\tMFormGUI.DragResize(1) = mFrm.Windowheight - 50dip\r\n\t\t\r\n\t\t'# show mFrm\r\n\t\tmFrm.Show\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n\r\n\r\n'## Center mFrm\r\n'## Version:\t1\r\n'## (C):\t\tGünter Becker\r\n'## Tested:\t\tB4J 03\/2026\r\nPrivate Sub centermFrm\r\n\tTry\r\n\t\tmFrm.WindowTop = fx.PrimaryScreen.MaxY\/2 - mFrm.windowheight\/2\r\n\t\tmFrm.Windowleft = fx.PrimaryScreen.MaxX\/2 - mFrm.WindowWidth\/2\r\n\t\tMFormGUI.currPos(0) = mFrm.WindowTop\r\n\t\tMFormGUI.currPos(1) = mFrm.Windowleft\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n'## set Pane corners\r\n'## Version:\t1\r\n'## (C):\t\t'https:\/\/www.b4x.com\/android\/forum\/threads\/b4x-setpanelcornerradius-only-for-certain-corners.164567\/post-1008965\r\n'## Tested:\t\tB4J 03\/2026\r\nPrivate Sub SetPanelCornerRadius(View As B4XView, CornerRadius As Float, _\r\n\tTopLeft As Boolean,TopRight As Boolean,BottomLeft As Boolean,BottomRight As Boolean)\r\n\tDim Corners As String = \"\"\r\n\tCorners = Corners & IIf(TopLeft, CornerRadius, 0) & \" \"\r\n\tCorners = Corners & IIf(TopRight, CornerRadius, 0) & \" \"\r\n\tCorners = Corners & IIf(BottomLeft, CornerRadius, 0) & \" \"\r\n\tCorners = Corners & IIf(BottomRight, CornerRadius, 0)\r\n\tCSSUtils.SetStyleProperty(View, \"-fx-background-radius\", Corners)\r\nEnd Sub\r\n#Else\r\n\r\n#end if\r\n'## set Alpha of a views background color\r\n'## Version:\t1\r\n'## (C):\t\thttps:\/\/www.b4x.com\/android\/forum\/threads\/b4x-change-the-views-alpha-level-transparency.123209\/#content\r\n'## Tested:\t\tB4J 03\/2026\r\nPublic Sub SetAlpha (View As B4XView, Level As Float)\r\n    #if B4A\r\n    Dim jo As JavaObject = View\r\n    Dim alpha As Float = Level\r\n    jo.RunMethod(\"setAlpha\", Array(alpha))\r\n    #Else If B4J\r\n\tDim n As Node = View\r\n\tn.Alpha = Level\r\n    #else if B4i\r\n    Dim v As View = View\r\n    v.Alpha = Level\r\n    #End If\r\nEnd Sub","module_public_elements":{"method":[{"name":"Initialize","comment":"","returntype":"","parameter":[{"name":"Frm","type":"Form"},{"name":"Param","type":"Map"},{"name":"WorkArea","type":"Pane"}]},{"name":"SetAlpha","comment":"## set Alpha of a views background color\n## Version:\t1\n## (C):\t\thttps:\/\/www.b4x.com\/android\/forum\/threads\/b4x-change-the-views-alpha-level-transparency.123209\/#content\n## Tested:\t\tB4J 03\/2026","returntype":"","parameter":[{"name":"View","type":"B4XView"},{"name":"Level","type":"Float"}]}],"field":[{"name":"MFormGUI","comment":"","returntype":"MFGUI"}]}},{"name":"TreeTools","module_type":"Class","code":"'# ########################################################\r\n'# Code Class with functions to manage a TreeView view.\r\n'#\r\n'## A TreeView has a Root object. A root has Groups and a Group has Items.\r\n'## A Group title has to be unique in the root (Group) children.\r\n'## An Item title has to be unique in the Group children.\r\n'## Group and Item title have a controled max length.\r\n'## Deleting a Group will delete it's Children also.\r\n'## Deleting of a Group or Item is not restorable!\r\n'# ########################################################\r\n'# Name\/Type:\tTreeTools \/ Code Class\r\n'# ID:\t\t\tTreeTools\r\n'# Version:\t\t1.0.0\r\n'# Depends On:\t-\r\n'# Libs:\t\tjTreeViewExtended, jfx8print\r\n'# Files:\t\t-\r\n'# Layouts:\t\t-\r\n'# ########################################################\r\n'# (C) Günter Becker private use roylaty free else licenced\r\n'# (C) jTreeviewExtended informatix https:\/\/www.b4x.com\/android\/forum\/threads\/jtreeviewextended.77464\/#content\r\n'# (C) jFX8print stevel05 https:\/\/www.b4x.com\/android\/forum\/threads\/b4j-print-javafx8-17.49836\/#content\r\n'# (C Images) icon8.com royalty free\r\n'# ########################################################\r\n'# History:\r\n'# 1.0 2026\/04\r\n'# ########################################################\r\n\r\n#region cust vents\r\n#EVENT: error(SubID as string, Msg as string)\r\n#Event: ItemSelected(Item as TreeItem, Index as int)\r\n#end region\r\n\r\n'# ########################################################\r\n\r\n#region Globals and Initialize\r\n'## Create Variables and Objects\r\n'## Version:\t1.0\r\n'## Tested:\t\r\nSub Class_Globals\r\n\tPrivate fx As JFX\r\n\t\r\n\tPrivate mTV As TreeView\t\t\t\t\t\t\t'attached Treeview (parent clone)\r\n\tPublic eTV As TreeViewExtended\t\t\t\t\t'extended Treeview features\r\n\t\r\n\tPrivate mImgWidth, mImgheight As Int\t\t\t'Icon dimensions\r\n\tPrivate mCallback As B4XView\t\t\t\t\t'Parent Panel\r\n\tPrivate mEventname As String\t\t\t\t\t'cust Eventname\r\n\tPrivate GrpLst1 As List\t\t\t\t\t\t\t'List to reset Tree\r\n\tPublic GrpLst As List\t\t\t\t\t\t\t'Group Batch\r\nEnd Sub\r\n\r\n'## Initalize Variables and Objects\r\n'## Version:\t1.0\r\n'## Parameter:\tCallback=Parent, Eventname,\r\n'##\t\t\t\tTV attached TreeView, ImgWith=Icon width, ImgHeight = Icon height\r\n'## Tested:\t\t\r\nPublic Sub Initialize(Callback As B4XView, Eventname As String, _\r\n\tTV As TreeView, ImgWidth As Int, ImgHeight As Int)\r\n\t'# save icon dimensions\r\n\tmImgWidth=ImgWidth : mImgheight=ImgHeight\r\n\t'# set values to be used by error event\r\n\tmCallback=Callback : mEventname=Eventname\r\n\t'## attach treeview and extended treeview\r\n\tmTV = TV :\teTV.InitializeByExtending(mTV)\r\n\t'# set lists\r\n\tGrpLst. initialize\r\n\tGrpLst1.initialize\r\n\t\r\n\teTV.SetTreeViewCellFactory(\"eTVSF\")\r\nEnd Sub\r\n#end region\r\n\r\n'# ########################################################\r\n\r\n#region Treeview\r\n'## Create a tree by give structure description in a textfile\r\n'## Version:\t1.0\r\n'## Parameter:\tFilename of structure textfile, clear treeview= true\r\n'## Return:\t\tTrue if OK -  False if error\r\n'## Notice:\t\tGroup title may be truncated!\r\n'## Tested:\t\t2026\/04\r\nPublic Sub CreateTree(Filename As String,clear As Boolean) As Boolean\r\n\tTry\r\n\t\t'# clear root\/Treeview\r\n\t\tIf clear Then\r\n\t\t\teTV.Root.children.clear\r\n\t\tEnd If\r\n\t\t'# read into a list the lines of the structer Textfile\r\n\t\tDim ri As List = File.ReadList(File.DirAssets,Filename)\r\n\t\tDim start As Int\r\n\t\tDim G,I As Int\r\n\t\t'# strip off header\r\n\t\tFor x = 0 To ri.Size-1\r\n\t\t\tIf ri.Get(x).as(String).startswith(\"'##\") Then\r\n\t\t\t\tstart=start+1\r\n\t\t\tElse\r\n\t\t\t\tExit\t\t\t\r\n\t\t\tEnd If\r\n\t\tNext\r\n\t\t'# loop throught the list ot creat groups and their items\r\n\t\tFor x = start To ri.Size-1\r\n\t\t\t'# get list entry\r\n\t\t\tDim litem As String = ri.Get(x)\r\n\t\t\tIf litem.StartsWith(\"'##\") = False Then 'is it a comment?\r\n\t\t\t\tIf litem.Contains(\"@\") Then 'is it a Group?\r\n\t\t\t\t\tDim item() As String = Regex.Split(\"@\",litem)\r\n\t\t\t\t\tDim Grp As TreeItem\r\n\t\t\t\t\tGrp.Initialize(\"\",item(0))\r\n\t\t\t\t\tIf item.Length = 2 And item(1).Length > 0 Then _\r\n\t\t\t\t\t\tGrp.Image = fx.LoadImageSample(File.DirAssets,item(1),mImgWidth,mImgheight)\r\n\t\t\t\t\teTV.Root.children.add(Grp)\t\t\t\t\r\n\t\t\t\tElse if litem.Contains(\"~\") And Grp.IsInitialized Then 'is an item?\r\n\t\t\t\t\tDim item2() As String = Regex.Split(\"~\",litem)\r\n\t\t\t\t\tDim IT As TreeItem\r\n\t\t\t\t\tIT.Initialize(\"\",item2(0))\r\n\t\t\t\t\tIf item2.Length = 2 And item2(1).length > 0 Then _\r\n\t\t\t\t\t\tIT.Image = fx.LoadImageSample(File.DirAssets,item2(1),mImgWidth,mImgheight)\r\n\t\t\t\t\tGrp.Children.Add(IT)\r\n\t\t\t\tEnd If\r\n\t\t\tEnd If\r\n\t\tNext\r\n\t\tReturn True\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## print tree\r\n'## Version:\t1.0\r\n'## Parameter:\tGroup title, Image Filename\r\n'## Return:\t\tTrue if OK -  False if \r\n'## Notice:\t\tGroup title may be truncated!\r\n'## Tested:\t\t2026\/04\r\npublic Sub print(expanded As Boolean)\r\n\tDim oldexp As String\r\n\tIf expanded Then\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tDim g As TreeItem = eTV.root.children.get(x)\r\n\t\t\tIf g.Expanded Then oldexp=g.text\r\n\t\t\tg.Expanded = True\r\n\t\tNext\r\n\tEnd If\r\n\tDim P As Printer = Printer_Static.GetDefaultPrinter\r\n\tDim PJ As PrinterJob = PrinterJob_Static.CreatePrinterJob2(P)\r\n\tPJ.PrintPage(eTV)\r\n\tPJ.EndJob\r\n\tIf oldexp.Length > 0 Then\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tDim g1 As TreeItem = eTV.root.children.get(x)\r\n\t\t\tg1.Expanded=False\r\n\t\t\tIf g1.Text = oldexp Then g1.expanded=True\r\n\t\tNext\r\n\tEnd If\r\nEnd Sub\r\n#end region\r\n\r\n'# ########################################################\r\n\r\n#region Group\r\n'## Create a unique group and add to batch\r\n'## Version:\t1.0\r\n'## Parameter:\tGroup title, Image Filename\r\n'## Return:\t\tTrue if OK -  False if \r\n'## Notice:\t\tGroup title may be truncated!\r\n'## Tested:\t\t2026\/04\r\npublic Sub createGroup(GrpTitle As String, Image As String) As Boolean\r\n\tTry\r\n\t\tDim g As TreeItem\r\n\t\tg.initialize(\"\",GrpTitle)\r\n\t\tIf Image.Length > 0 Then _\r\n\t\t\tg.Image=fx.LoadImageSample(File.DirAssets,Image,mImgWidth,mImgheight)\r\n\t\tDim l As List : l.initialize\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tl.Add(eTV.root.children.get(x).As(TreeItem).Text)\r\n\t\tNext\r\n\t\tIf l.IndexOf(g.Text) = -1 Then\r\n\t\t\tGrpLst.Add(g) ' Batch\r\n\t\t\tReturn True\r\n\t\tElse\r\n\t\t\tReturn False\r\n\t\tEnd If\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"createGroup\",\"\")\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## find a Group by Title and return ist treeitem\r\n'## Version:\t1.0\r\n'## Parameter:\tGroup title\r\n'## Return:\t\tGroup Treeitem or Null if error\r\n'## Tested:\t\t2026\/04\r\npublic Sub findGroup(GrpTitle As String) As TreeItem\r\n\tTry\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tDim g As TreeItem = eTV.Root.Children.Get(x)\r\n\t\t\tIf g.Text = GrpTitle Then Return g\r\n\t\tNext\r\n\t\tReturn Null\r\n\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"findGroup\",\"\")\r\n\t\tReturn Null\r\n\tEnd Try\r\nEnd Sub\r\n'## find a group by Title and return its index\r\n'## Version:\t1.0\r\n'## Parameter:\tGroup title\r\n'## Return:\t\tGroup index in Parent childlist or -1 if error\r\n'## Tested:\t\t2026\/04\r\npublic Sub findGroup2(GrpTitle As String) As Int\r\n\tTry\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\tDim g As TreeItem = eTV.Root.Children.Get(x)\r\n\t\t\tIf g.Text = GrpTitle Then Return x\r\n\t\tNext\r\n\t\tReturn -1\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"findGroup2\",\"\")\r\n\t\tReturn -1\r\n\tEnd Try\r\nEnd Sub\r\n'## ad all created groups to the parent root\r\n'## Version:\t1.0\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub addGroupLst As Boolean\r\n\tTry\r\n\t\tIf GrpLst.Size > 0 Then\r\n\t\t\teTV.root.children.addall(GrpLst)\r\n\t\tEnd If\r\n\t\tGrpLst.Clear\r\n\t\tReturn True\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"addGroupLst\",\"\")\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## insert a single group at given index to the parent\r\n'## Version:\t1.0\r\n'## Parameter:\tGroup, index as insert point into childlist (zero based)\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub insertGroup(Item As TreeItem, Index As Int) As Boolean\r\n\tTry\r\n\t\tDim s As Int = eTV.Root.Children.Size-1\r\n\t\tIf Index >= 0 And Index <= s And Item.IsInitialized Then\r\n\t\t\teTV.Root.Children.InsertAt(Index,Item)\r\n\t\t\tReturn  True\r\n\t\tEnd If\r\n\t\tReturn False\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"insertGroup\",\"\")\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## delete a single group from the parent\r\n'## and its attached Items\r\n'## Version:\t1.0\r\n'## Parameter:\tGroup title\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub deleteGroup(GrpTitle As String) As Boolean\r\n\tTry\r\n\t\tIf eTV.root.children.indexof(GrpTitle) > -1 Then\r\n\t\t\tDim idx As Int = eTV.root.children.indexof(GrpTitle)\r\n\t\t\teTV.Root.Children.RemoveAt(idx)\r\n\t\t\tReturn True\r\n\t\tEnd If\r\n\t\tReturn False\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"deleteGroup\",\"\")\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## change the group Title\r\n'## Version:\t1.0\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub changeGroupTitle(Old As String, new As String) As Boolean\r\n\tTry\r\n\t\tDim tg As TreeItem = findGroup(Old)\r\n\t\tIf tg.IsInitialized Then \r\n\t\t\ttg.Text = new\r\n\t\t\tFor x = 0 To GrpLst.Size-1\r\n\t\t\t\tDim tg1 As TreeItem = GrpLst.Get(x)\r\n\t\t\t\tIf tg1.text = Old Then\r\n\t\t\t\t\ttg1.Text = new\r\n\t\t\t\t\tGrpLst.set(x,tg1)\r\n\t\t\t\t\tReturn True\r\n\t\t\t\tEnd If\r\n\t\t\tNext\r\n\t\tEnd If\r\n\t\tReturn False\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"changeGroupTitle\",\"\")\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n\r\n' ----------------------\r\n\r\n'## set checkBoxMode (WORK IN PROGRESS!)\r\n'## Version:\t1.0\r\n'## Parameter:\ttrue=checkbox false=no checkbox\r\n'## Tested:\t\t2026\/04\r\npublic Sub setCheckBoxMode(Active As Boolean)\r\n\tTry\r\n\t\tIf Active Then\r\n\t\t\tGrpLst1.clear\r\n\t\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\t\tGrpLst1.Add(eTV.Root.Children.Get(x))\r\n\t\t\tNext\r\n\t\t\teTV.SetCheckBoxesMode\r\n\t\tElse\r\n\t\t\tIf GrpLst1.Size > 0 Then\r\n\t\t\t\teTV.Root.Children.Clear\r\n\t\t\t\tFor x = 0 To GrpLst1.Size-1\r\n\t\t\t\t\teTV.Root.Children.Add(GrpLst1.Get(x))\r\n\t\t\t\tNext\r\n\t\t\tEnd If\r\n\t\tEnd If\r\n\t\t\t\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"setCheckBoxMode\",\"\")\r\n\tEnd Try\r\nEnd Sub\r\n'## Full text search \r\n'## Version:\t1.0\r\n'## Parameter:\tStrToSearch Title or Portion to search for\r\n'##\t\t\t\tMatchCase if true upper\/lower case format checked\r\n'##\t\t\t\tMatchWholeWord if true full Title is false Portion is searched\r\n'##\t\t\t\tMaxDepth maximum of list entries = found items\r\n'##\t\t\t\tStopAtFirst if true search loope is exited after first found\r\n'## Return:\t\tList of treeitems found\r\n'## Tested:\t\t2026\/04\r\npublic Sub Search (StrToSearch As String, MatchCase As Boolean, _\r\n\t MatchWholeWord As Boolean, MaxDepth As Int, StopAtFirst As Boolean) As List\r\n\t Try\r\n\t\tReturn eTV.Search(StrToSearch,MatchCase,MatchWholeWord,MaxDepth,StopAtFirst)\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"Search\",\"\")\r\n\t\tReturn Null\r\n\tEnd Try\r\nEnd Sub\r\n'## expand the group of the item\r\n'## Version:\t1.0\r\n'## Tested:\t\t2026\/04\r\npublic Sub expandGroup(GrpTitle As String,ItemTitle As String)\r\n\tTry\r\n\t\teTV.ExpandFromRoot(findItem(GrpTitle,ItemTitle))\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"expandGroup\",\"\")\r\n\tEnd Try\r\nEnd Sub\r\n\r\n'##  goto a group and expand it\r\n'## Version:\t1.0\r\n'## Tested:\t\t2026\/04\r\npublic Sub gotoGroup(GrpTitle As String,ItemTitle As String)\r\n\tTry\r\n\t\teTV.GiveFocusTo(findItem2(GrpTitle,ItemTitle))\r\n\t\texpandGroup(GrpTitle,ItemTitle)\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n\r\n'## scroll to an item\r\n'## Version:\t1.0\r\n'## Tested:\t\t2026\/04\r\npublic Sub scrollTo(GrpTitle As String,ItemTitle As String)\r\n\tTry\r\n\t\tgotoGroup(GrpTitle,ItemTitle)\r\n\t\teTV.ScrollTo(findItem2(GrpTitle,ItemTitle))\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\trelaseError(\"scrollTo\",\"\")\r\n\tEnd Try\r\nEnd Sub\r\n'## colapse all groups\r\n'## Version:\t1.0\r\n'## Tested:\t\t2026\/04\r\npublic Sub collapseAll\r\n\tTry\r\n\t\tFor x = 0 To eTV.Root.Children.Size-1\r\n\t\t\teTV.root.children.get(x).as(TreeItem).Expanded=False\r\n\t\tNext\r\n\tCatch\r\n\t\tLog(LastException)\r\n\tEnd Try\r\nEnd Sub\r\n#end region\r\n\r\n'# ########################################################\r\n\r\n#region Item\r\n'## Create an Item and add to batch\r\n'## Version:\t1.0\r\n'## Parameter:\tItem title, Image Filename\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Notice:\t\tItem title may be truncated!\r\n'## Tested:\t\t2026\/04\r\npublic Sub createItem(GrpTitle As String,ItemTitle As String, Image As String) As Boolean\r\n\tTry\r\n\t\tDim i As TreeItem :\ti.initialize(\"\",ItemTitle)\r\n\t\tIf Image.Length > 0 Then _\r\n\t\t\ti.Image=fx.LoadImageSample(File.DirAssets,Image,mImgWidth,mImgheight)\r\n\t\tDim g As TreeItem = findGroup(GrpTitle)\r\n\t\tIf g.IsInitialized Then\r\n\t\t\tg.children.add(i)\r\n\t\t\tReturn True\r\n\t\tEnd If\r\n\t\tReturn False\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## find a Item by Title and return ist treeitem\r\n'## Version:\t1.0\r\n'## Parameter:\tItem title\r\n'## Return:\t\tItem Treeitem or Null if error\r\n'## Tested:\t\t2026\/04\r\npublic Sub findItem(GrpTitle As String,ItemTitle As String) As TreeItem\r\n\tTry\r\n\t\tDim g As TreeItem = findGroup(GrpTitle)\r\n\t\tIf g.IsInitialized Then\r\n\t\t\tFor x = 0 To g.Children.Size-1\r\n\t\t\t\tIf g.Children.Get(x).As(TreeItem).Text = ItemTitle Then\r\n\t\t\t\t\tReturn g.Children.Get(x)\r\n\t\t\t\tEnd If\r\n\t\t\tNext\r\n\t\tEnd If\r\n\t\tReturn Null\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn Null\r\n\tEnd Try\r\nEnd Sub\r\n'## find a Item by Title and return its index\r\n'## Version:\t1.0\r\n'## Parameter:\tItem title\r\n'## Return:\t\tItem index in Parent childlist or -1 if error\r\n'## Tested:\t\t\r\npublic Sub findItem2(GrpTitle As String,ItemTitle As String) As Int\r\n\tTry\r\n\t\tDim g As TreeItem = findGroup(GrpTitle)\r\n\t\tIf g.IsInitialized Then\r\n\t\t\tFor x = 0 To g.Children.Size-1\r\n\t\t\t\tIf g.Children.Get(x).As(TreeItem).Text = ItemTitle Then Return x\r\n\t\t\tNext\r\n\t\tEnd If\r\n\t\tReturn -1\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn -1\r\n\tEnd Try\r\nEnd Sub\r\n'## insert a single Item at given index to the parent\r\n'## Version:\t1.0\r\n'## Parameter:\tItem title, index as insert point into childlist (zero based)\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub insertItem(GrpTitle As String, Item As TreeItem, Index As Int) As Boolean\r\n\tTry\r\n\t\tDim tg As TreeItem = findGroup(GrpTitle)\r\n\t\tIf tg.IsInitialized Then\r\n\t\t\tDim s As Int = tg.Children.Size-1\r\n\t\t\tIf Index >= 0 And Index <= s Then\r\n\t\t\t\ttg.Children.InsertAt(Index,Item)\r\n\t\t\tEnd If\r\n\t\tEnd If\r\n\t\tReturn  True\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## delete a single Item from the parent\r\n'## and its attached Items\r\n'## Version:\t1.0\r\n'## Parameter:\tItem title\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub deleteItem(GrpTitle As String,ItemTitle As String) As Boolean\r\n\tTry\r\n\t\tDim l As List = eTV.Search(GrpTitle,False,True,9999,True)\r\n\t\tIf l.Size>0 Then \r\n\t\t\tDim g As TreeItem = l.get(0)\r\n\t\t\tIf g.IsInitialized Then\r\n\t\t\t\tFor x = 0 To g.Children.Size-1\r\n\t\t\t\t\tIf g.Children.Get(x).As(TreeItem).Text = ItemTitle Then\r\n\t\t\t\t\t\tg.Children.RemoveAt(x)\r\n\t\t\t\t\t\tReturn True\r\n\t\t\t\t\tEnd If\r\n\t\t\t\tNext\t\r\n\t\t\tEnd If\r\n\t\tEnd If\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n'## change the Item Title\r\n'## Version:\t1.0\r\n'## Return:\t\tTrue if OK -  False if Error\r\n'## Tested:\t\t2026\/04\r\npublic Sub changeItemTitle(GrpTitle As String,Old As String, new As String) As Boolean\r\n\tTry\r\n\t\tDim g As TreeItem = findGroup(GrpTitle)\r\n\t\tIf g.IsInitialized Then\r\n\t\t\tFor x = 0 To g.Children.Size-1\r\n\t\t\t\tIf g.Children.Get(x).As(TreeItem).Text = Old Then\r\n\t\t\t\t\tg.Children.Get(x).As(TreeItem).Text = new\r\n\t\t\t\t\tReturn True\r\n\t\t\t\tEnd If\r\n\t\t\tNext\r\n\t\t\tReturn False\r\n\t\tElse\r\n\t\t\tReturn False\r\n\t\tEnd If\r\n\tCatch\r\n\t\tLog(LastException)\r\n\t\tReturn False\r\n\tEnd Try\r\nEnd Sub\r\n#end region\r\n\r\n#region Event\r\n'## EVENT: error - release to parent\r\n'## Version:\t1.0\r\n'## Parameter:\tSubID=Subname, Msg=Error message\r\n'## Tested:\t\r\nprivate Sub relaseError(SubID As String, Msg As String)\r\n\tIf Msg.Length = 0 Then Msg = LastException.message\r\n\tIf SubExists(mCallback, mEventname & \"error\") Then\r\n\t\tCallSub3(mCallback, mEventname & \"error\",SubID,Msg)\r\n\tEnd If\r\nEnd Sub\r\n#end region\r\n'# ########################################################\r\n'# TreeView select event has to be handled by class parent.\r\n'# ########################################################","module_public_elements":{"method":[{"name":"Initialize","comment":"## Initalize Variables and Objects\n## Version:\t1.0\n## Parameter:\tCallback=Parent, Eventname,\n##\t\t\t\tTV attached TreeView, ImgWith=Icon width, ImgHeight = Icon height\n## Tested:","returntype":""},{"name":"CreateTree","comment":"## Create a tree by give structure description in a textfile\n## Version:\t1.0\n## Parameter:\tFilename of structure textfile, clear treeview= true\n## Return:\t\tTrue if OK -  False if error\n## Notice:\t\tGroup title may be truncated!\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"Filename","type":"String"},{"name":"clear","type":"Boolean"}]},{"name":"print","comment":"## print tree\n## Version:\t1.0\n## Parameter:\tGroup title, Image Filename\n## Return:\t\tTrue if OK -  False if\n## Notice:\t\tGroup title may be truncated!\n## Tested:\t\t2026\/04","returntype":"","parameter":[{"name":"expanded","type":"Boolean"}]},{"name":"createGroup","comment":"## Create a unique group and add to batch\n## Version:\t1.0\n## Parameter:\tGroup title, Image Filename\n## Return:\t\tTrue if OK -  False if\n## Notice:\t\tGroup title may be truncated!\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"GrpTitle","type":"String"},{"name":"Image","type":"String"}]},{"name":"findGroup","comment":"## find a Group by Title and return ist treeitem\n## Version:\t1.0\n## Parameter:\tGroup title\n## Return:\t\tGroup Treeitem or Null if error\n## Tested:\t\t2026\/04","returntype":"TreeItem","parameter":[{"name":"GrpTitle","type":"String"}]},{"name":"findGroup2","comment":"## find a group by Title and return its index\n## Version:\t1.0\n## Parameter:\tGroup title\n## Return:\t\tGroup index in Parent childlist or -1 if error\n## Tested:\t\t2026\/04","returntype":"Int","parameter":[{"name":"GrpTitle","type":"String"}]},{"name":"addGroupLst","comment":"## ad all created groups to the parent root\n## Version:\t1.0\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean"},{"name":"insertGroup","comment":"## insert a single group at given index to the parent\n## Version:\t1.0\n## Parameter:\tGroup, index as insert point into childlist (zero based)\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"Item","type":"TreeItem"},{"name":"Index","type":"Int"}]},{"name":"deleteGroup","comment":"## delete a single group from the parent\n## and its attached Items\n## Version:\t1.0\n## Parameter:\tGroup title\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"GrpTitle","type":"String"}]},{"name":"changeGroupTitle","comment":"## change the group Title\n## Version:\t1.0\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"Old","type":"String"},{"name":"new","type":"String"}]},{"name":"Search","comment":"## Full text search\n## Version:\t1.0\n## Parameter:\tStrToSearch Title or Portion to search for\n##\t\t\t\tMatchCase if true upper\/lower case format checked\n##\t\t\t\tMatchWholeWord if true full Title is false Portion is searched\n##\t\t\t\tMaxDepth maximum of list entries = found items\n##\t\t\t\tStopAtFirst if true search loope is exited after first found\n## Return:\t\tList of treeitems found\n## Tested:\t\t2026\/04","returntype":""},{"name":"expandGroup","comment":"## expand the group of the item\n## Version:\t1.0\n## Tested:\t\t2026\/04","returntype":"","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"}]},{"name":"gotoGroup","comment":"##  goto a group and expand it\n## Version:\t1.0\n## Tested:\t\t2026\/04","returntype":"","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"}]},{"name":"scrollTo","comment":"## scroll to an item\n## Version:\t1.0\n## Tested:\t\t2026\/04","returntype":"","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"}]},{"name":"collapseAll","comment":"## colapse all groups\n## Version:\t1.0\n## Tested:\t\t2026\/04","returntype":""},{"name":"createItem","comment":"## Create an Item and add to batch\n## Version:\t1.0\n## Parameter:\tItem title, Image Filename\n## Return:\t\tTrue if OK -  False if Error\n## Notice:\t\tItem title may be truncated!\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"},{"name":"Image","type":"String"}]},{"name":"findItem","comment":"## find a Item by Title and return ist treeitem\n## Version:\t1.0\n## Parameter:\tItem title\n## Return:\t\tItem Treeitem or Null if error\n## Tested:\t\t2026\/04","returntype":"TreeItem","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"}]},{"name":"findItem2","comment":"## find a Item by Title and return its index\n## Version:\t1.0\n## Parameter:\tItem title\n## Return:\t\tItem index in Parent childlist or -1 if error\n## Tested:","returntype":"Int","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"}]},{"name":"insertItem","comment":"## insert a single Item at given index to the parent\n## Version:\t1.0\n## Parameter:\tItem title, index as insert point into childlist (zero based)\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"GrpTitle","type":"String"},{"name":"Item","type":"TreeItem"},{"name":"Index","type":"Int"}]},{"name":"deleteItem","comment":"## delete a single Item from the parent\n## and its attached Items\n## Version:\t1.0\n## Parameter:\tItem title\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"GrpTitle","type":"String"},{"name":"ItemTitle","type":"String"}]},{"name":"changeItemTitle","comment":"## change the Item Title\n## Version:\t1.0\n## Return:\t\tTrue if OK -  False if Error\n## Tested:\t\t2026\/04","returntype":"Boolean","parameter":[{"name":"GrpTitle","type":"String"},{"name":"Old","type":"String"},{"name":"new","type":"String"}]}],"field":[{"name":"eTV","comment":"","returntype":"TreeViewExtended"},{"name":"GrpLst","comment":"","returntype":"List"}],"property":[{"name":"CheckBoxMode","comment":"## set checkBoxMode (WORK IN PROGRESS!)\n## Version:\t1.0\n## Parameter:\ttrue=checkbox false=no checkbox\n## Tested:\t\t2026\/04","returntype":"","parameter":[{"name":"Active","type":"Boolean"}]}]}}],"project_files":[{"name":"B4XToast.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"B4XGifView1","JavaType":".CustomViewWrapper","DesignerType":"CustomView"},{"Name":"CatLogo","JavaType":".ImageViewWrapper","DesignerType":"ImageView"},{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"MsgLabel","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"MsgLabel1","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"ToastPane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"}],"Files":["Information_48x48.png","spinner2.gif"],"DesignerScript":["'All variants script","'Variant specific script: 600x600,scale=1\n"]},"Variants":[{"Scale":1,"Width":600,"Height":600}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":2},"cornerRadius":{"ValueType":7,"Value":10},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"Toast","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":100,"name":"ToastPane","orientation":"INHERIT","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":-2},"offsetY":{"ValueType":7,"Value":-2},"radius":{"ValueType":7,"Value":5},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":2},"tag":"","top":100,"vanchor":0,"visible":true,"width":200,"variant0":{"left":0,"top":0,"width":300,"height":60,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":"Information_48x48.png"},"enabled":true,"eventName":"Toast","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":100,"name":"CatLogo","parent":"ToastPane","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":5,"top":10,"width":40,"height":40,"hanchor":0,"vanchor":0}},"1":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0x00FFFFFF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"Toast","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":12},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"MsgLabel","parent":"ToastPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Text","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":true,"variant0":{"left":50,"top":10,"width":10,"height":40,"hanchor":2,"vanchor":0}},"2":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0x00FFFFFF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"Toast","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":12},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"MsgLabel1","parent":"ToastPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Text","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":false,"width":100,"wrapText":true,"variant0":{"left":50,"top":10,"width":190,"height":40,"hanchor":0,"vanchor":0}},"3":{"csType":"Dbasic.Designer.MetaCustomView","type":".CustomViewWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"customProperties":{"csType":"Dbasic.Designer.MetaCustomView+CustomDataGrid","type":"","customType":"b4j.example.b4xgifview","shortType":"B4XGifView"},"customType":"b4j.example.b4xgifview","drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":"spinner2.gif","gravity":"Fill"},"enabled":true,"eventName":"Toast","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":100,"javaType":".CustomViewWrapper","left":10,"materialIcons":"","name":"B4XGifView1","parent":"ToastPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"shortType":"B4XGifView","tag":"","text":"","textColor":{"ValueType":6,"Value":"0x00FFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":false,"width":100,"wrapText":false,"variant0":{"left":10,"top":10,"width":40,"height":40,"hanchor":1,"vanchor":0}}}}}},"FontAwesome":false,"MaterialIcons":false}},{"name":"backgroundimage.png"},{"name":"Category.png"},{"name":"Confirm.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"ConfirmLbl","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"ImageView1","JavaType":".ImageViewWrapper","DesignerType":"ImageView"},{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"}],"Files":["icons8-thumbs-up-94.png"],"DesignerScript":["'All variants script\n","'Variant specific script: 600x600,scale=1\n"]},"Variants":[{"Scale":1,"Width":600,"Height":600}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"ConfirmLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"ConfirmLbl","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Text","textColor":{"ValueType":6,"Value":"0xFFF0F8FF"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":20,"top":20,"width":200,"height":170,"hanchor":0,"vanchor":0}},"1":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":"icons8-thumbs-up-94.png"},"enabled":true,"eventName":"ImageView1","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":100,"name":"ImageView1","parent":"Main","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":230,"top":20,"width":100,"height":100,"hanchor":0,"vanchor":0}}}},"FontAwesome":false,"MaterialIcons":false}},{"name":"Group.png"},{"name":"icons8-abc-48.png"},{"name":"icons8-add-48.png"},{"name":"icons8-attention-94.png"},{"name":"icons8-book-94.png"},{"name":"icons8-category-58.png"},{"name":"icons8-clear-48.png"},{"name":"icons8-clipboard-30.png"},{"name":"icons8-code-64.png"},{"name":"icons8-copy-to-clipboard-40.png"},{"name":"icons8-database-94.png"},{"name":"icons8-delete-48.png"},{"name":"icons8-error-94.png"},{"name":"icons8-info-48.png"},{"name":"icons8-knowledge-64.png"},{"name":"icons8-option-64.png"},{"name":"icons8-paste-94.png"},{"name":"icons8-print-48.png"},{"name":"icons8-restore-48.png"},{"name":"icons8-save-48.png"},{"name":"icons8-success-48.png"},{"name":"icons8-text-64.png"},{"name":"icons8-thumbs-up-94.png"},{"name":"icons8-translate-64.png"},{"name":"icons8-update-48.png"},{"name":"ImageViewer.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"ViewerImageView","JavaType":".ImageViewWrapper","DesignerType":"ImageView"}],"Files":[],"DesignerScript":["'All variants script\n","'Variant specific script: 600x600,scale=1\n"]},"Variants":[{"Scale":1,"Width":600,"Height":600}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":""},"enabled":true,"eventName":"ViewerImageView","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":100,"name":"ViewerImageView","parent":"Main","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":10,"top":20,"width":10,"height":10,"hanchor":2,"vanchor":2}}}},"FontAwesome":false,"MaterialIcons":false}},{"name":"Information_48x48.png"},{"name":"InfoTank.db"},{"name":"InfoTank.sqbpro"},{"name":"Item.png"},{"name":"MainForm.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"btMenu","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"CatCombo","JavaType":".ComboBoxWrapper","DesignerType":"ComboBox"},{"Name":"CatLbl","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"CatPane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"FooterbarPane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"Logo","JavaType":".ImageViewWrapper","DesignerType":"ImageView"},{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"MenuBar1","JavaType":".MenuItemWrapper$MenuBarWrapper","DesignerType":"MenuBar"},{"Name":"ProgMsg","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"selGrp","JavaType":".CustomViewWrapper","DesignerType":"CustomView"},{"Name":"TabPane1","JavaType":".TabPaneWrapper","DesignerType":"TabPane"},{"Name":"Title","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"TitlebarPane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"TitleBtClose","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"TitleBtMaximize","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"TitleBtMinize","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"TitleBtRestore","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"TreePane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"TreeView1","JavaType":".TreeViewWrapper","DesignerType":"TreeView"},{"Name":"WaitLblText","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"WaitLIndicator","JavaType":".CustomViewWrapper","DesignerType":"CustomView"},{"Name":"WaitPane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"WaitProgBar","JavaType":".ProgressIndicatorWrapper$ProgressBarWrapper","DesignerType":"ProgressBar"},{"Name":"WaitProgIndic","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"WorkAreaPane","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"}],"Files":["spinner2.gif","TechDoc2015_1_1_1.png"],"DesignerScript":["'All variants script\n","'Variant specific script: 900x700,scale=1\n"]},"Variants":[{"Scale":1,"Width":900,"Height":700}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFFFFFFF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaMenuBar","type":".MenuItemWrapper$MenuBarWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"enabled":true,"eventName":"MenuBar1","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":14},"italic":false},"hanchor":2,"height":30,"javaType":".MenuItemWrapper$MenuBarWrapper","left":10,"menuItems":"[\r\n\t{Text: \"_File\", Children: \r\n\t\t[\r\n\t\t\t\"_New\", \"_Save\", \r\n\t\t\t{Text: \"_Export\", Children: [\"Zip File\", \"Tar File\"]},\r\n\t\t\t\"-\",\r\n\t\t\t\"_Close\"\r\n\t\t]\r\n\t}, \r\n\t{Text: \"_Edit\", Children:[\"Cu_t\", \"_Copy\", \"_Paste\"] },\r\n\t{Text: \"_Help\", Children: \r\n\t\t[ \r\n\t\t\t{Text: \"Checked Item\", Selected: True, Shortcut: {Key: \"F1\"}}, \r\n\t\t\t{Text: \"Disabled Item\", Enabled: False},\r\n\t\t\t{Text: \"Item With Unique Event Name\", \r\n\t\t\t\tEventName: \"mnu1234\"},\r\n\t\t\t{Text: \"Item With Tag\", Tag: \"MyTag\"}\r\n\t\t]\r\n\t}\r\n]","name":"MenuBar1","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","toolTip":"","top":10,"vanchor":0,"visible":true,"width":0,"variant0":{"left":0,"top":50,"width":0,"height":60,"hanchor":2,"vanchor":0}},"1":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.GradientDrawable","type":"GradientDrawable","firstColor":{"ValueType":6,"Value":"0xFF0000FF"},"orientation":"BOTTOM_TOP","secondColor":{"ValueType":6,"Value":"0xFF87CEEB"}},"enabled":true,"eventName":"TitlebarPane","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":100,"name":"TitlebarPane","orientation":"INHERIT","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"Titlebar","top":100,"vanchor":0,"visible":true,"width":200,"variant0":{"left":0,"top":0,"width":0,"height":50,"hanchor":2,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"TitleBt","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"FontAwesome","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"TitleBtRestore","parent":"TitlebarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"restore","text":"","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":150,"top":10,"width":30,"height":30,"hanchor":1,"vanchor":0}},"1":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"TitleBt","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"FontAwesome","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"TitleBtMinize","parent":"TitlebarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"minimize","text":"","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":120,"top":10,"width":30,"height":30,"hanchor":1,"vanchor":0}},"2":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"TitleBt","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"FontAwesome","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"TitleBtMaximize","parent":"TitlebarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"maximize","text":"","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":90,"top":10,"width":30,"height":30,"hanchor":1,"vanchor":0}},"3":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"TitleBt","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"Arial","fontSize":{"ValueType":7,"Value":24},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"TitleBtClose","parent":"TitlebarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"close","text":"X","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":60,"top":10,"width":30,"height":30,"hanchor":1,"vanchor":0}},"4":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":"TechDoc2015_1_1_1.png"},"enabled":true,"eventName":"Logo","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":10,"name":"Logo","parent":"TitlebarPane","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":10,"vanchor":0,"visible":true,"width":100,"variant0":{"left":25,"top":5,"width":40,"height":40,"hanchor":0,"vanchor":0}},"5":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"Title","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":20},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"Title","parent":"TitlebarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Title","textColor":{"ValueType":6,"Value":"0xFFFFD700"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":70,"top":10,"width":190,"height":30,"hanchor":2,"vanchor":0}},"6":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"btMenu","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"FontAwesome","fontSize":{"ValueType":7,"Value":22},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"btMenu","parent":"TitlebarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"restore","text":"","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":24,"top":10,"width":30,"height":30,"hanchor":1,"vanchor":0}}}},"2":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.GradientDrawable","type":"GradientDrawable","firstColor":{"ValueType":6,"Value":"0xFF0000FF"},"orientation":"TOP_BOTTOM","secondColor":{"ValueType":6,"Value":"0xFF87CEEB"}},"enabled":true,"eventName":"FooterbarPane","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":100,"name":"FooterbarPane","orientation":"INHERIT","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"Footerbar","top":100,"vanchor":0,"visible":true,"width":200,"variant0":{"left":0,"top":0,"width":0,"height":40,"hanchor":2,"vanchor":1},":kids":{"0":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"ProgMsg","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":20},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"ProgMsg","parent":"FooterbarPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Text","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":5,"width":880,"height":30,"hanchor":0,"vanchor":0}}}},"3":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":1},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFFFFFFF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"WorkAreaPane","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":100,"name":"WorkAreaPane","orientation":"INHERIT","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":100,"vanchor":0,"visible":true,"width":200,"variant0":{"left":0,"top":110,"width":0,"height":40,"hanchor":2,"vanchor":2},":kids":{"0":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":1},"cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"TreePane","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":100,"name":"TreePane","orientation":"INHERIT","parent":"WorkAreaPane","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":100,"vanchor":0,"visible":true,"width":200,"variant0":{"left":0,"top":70,"width":220,"height":0,"hanchor":0,"vanchor":2},":kids":{"0":{"csType":"Dbasic.Designer.MetaTreeView","type":".TreeViewWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"enabled":true,"eventName":"TreeView1","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":300,"javaType":".TreeViewWrapper","left":10,"name":"TreeView1","parent":"TreePane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","toolTip":"","top":10,"vanchor":0,"visible":true,"width":300,"variant0":{"left":10,"top":10,"width":10,"height":40,"hanchor":2,"vanchor":2}},"1":{"csType":"Dbasic.Designer.MetaCustomView","type":".CustomViewWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"customProperties":{"csType":"Dbasic.Designer.MetaCustomView+CustomDataGrid","type":"","customType":"MainFormGUI.example.scrollinglabel","shortType":"ScrollingLabel"},"customType":"MainFormGUI.example.scrollinglabel","drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"selGrp","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":12},"italic":false},"fontAwesome":"","hanchor":0,"height":100,"javaType":".CustomViewWrapper","left":10,"materialIcons":"","name":"selGrp","parent":"TreePane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"shortType":"ScrollingLabel","tag":"","text":"","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":0,"top":0,"width":0,"height":40,"hanchor":2,"vanchor":1}}}},"1":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":1},"cornerRadius":{"ValueType":7,"Value":3},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"CatPane","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":10,"name":"CatPane","orientation":"INHERIT","parent":"WorkAreaPane","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":10,"vanchor":0,"visible":true,"width":200,"variant0":{"left":0,"top":0,"width":220,"height":70,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":1},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFF0000FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"CatLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"CatLbl","parent":"CatPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Category","textColor":{"ValueType":6,"Value":"0xFFFFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":0,"top":0,"width":0,"height":30,"hanchor":2,"vanchor":1}},"1":{"csType":"Dbasic.Designer.MetaComboBox","type":".ComboBoxWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"editable":false,"enabled":true,"eventName":"CatCombo","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":50,"javaType":".ComboBoxWrapper","left":10,"name":"CatCombo","parent":"CatPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","toolTip":"","top":10,"vanchor":0,"visible":true,"width":150,"variant0":{"left":2,"top":2,"width":2,"height":40,"hanchor":2,"vanchor":0}}}},"2":{"csType":"Dbasic.Designer.MetaTabPane","type":".TabPaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"enabled":true,"eventName":"TabPane1","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":300,"javaType":".TabPaneWrapper","left":10,"name":"TabPane1","parent":"WorkAreaPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"side":"TOP","tag":"","toolTip":"","top":10,"vanchor":0,"visible":true,"width":300,"variant0":{"left":220,"top":0,"width":680,"height":550,"hanchor":0,"vanchor":0}}}},"4":{"csType":"Dbasic.Designer.MetaPane","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":2},"cornerRadius":{"ValueType":7,"Value":10},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"WaitIndicator","extraCss":"","hanchor":0,"height":200,"javaType":".PaneWrapper$ConcretePaneWrapper","left":100,"name":"WaitPane","orientation":"INHERIT","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGridNoDrop","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","top":100,"vanchor":0,"visible":false,"width":200,"variant0":{"left":390,"top":320,"width":230,"height":100,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaCustomView","type":".CustomViewWrapper","alignment":"CENTER","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":3},"customProperties":{"csType":"Dbasic.Designer.MetaCustomView+CustomDataGrid","type":"","customType":"MainFormGUI.example.b4xgifview","shortType":"B4XGifView"},"customType":"MainFormGUI.example.b4xgifview","drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":"spinner2.gif","gravity":"Fill"},"enabled":true,"eventName":"WaitIndicator","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":100,"javaType":".CustomViewWrapper","left":10,"materialIcons":"","name":"WaitLIndicator","parent":"WaitPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"shortType":"B4XGifView","tag":"","text":"","textColor":{"ValueType":6,"Value":"0x00FFFFFF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":5,"width":50,"height":50,"hanchor":0,"vanchor":0}},"1":{"csType":"Dbasic.Designer.MetaProgressBar","type":".ProgressIndicatorWrapper$ProgressBarWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFFFFFFF"},"colorKey":"-fx-base"},"enabled":true,"eventName":"WaitIndicator","extraCss":"","hanchor":0,"height":30,"javaType":".ProgressIndicatorWrapper$ProgressBarWrapper","left":10,"name":"WaitProgBar","parent":"WaitPane","progress":{"ValueType":7,"Value":0.5},"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"variant0":{"left":10,"top":65,"width":10,"height":5,"hanchor":2,"vanchor":2}},"2":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_RIGHT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"WaitIndicator","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":24},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"WaitProgIndic","parent":"WaitPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"0%","textColor":{"ValueType":6,"Value":"0xFFF0F8FF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":70,"top":5,"width":10,"height":40,"hanchor":2,"vanchor":0}},"3":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_RIGHT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"WaitIndicator","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":10,"materialIcons":"","name":"WaitLblText","parent":"WaitPane","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Bitte warten...","textColor":{"ValueType":6,"Value":"0xFFF0F8FF"},"toolTip":"","top":10,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":70,"top":40,"width":10,"height":20,"hanchor":2,"vanchor":0}}}}}},"FontAwesome":true,"MaterialIcons":false}},{"name":"Restore.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"RestoreLv","JavaType":".ListViewWrapper","DesignerType":"ListView"}],"Files":[],"DesignerScript":["'All variants script\n","'Variant specific script: 600x600,scale=1\n"]},"Variants":[{"Scale":1,"Width":600,"Height":600}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaListView","type":".ListViewWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"enabled":true,"eventName":"RestoreLv","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":300,"javaType":".ListViewWrapper","left":100,"multipleSelection":true,"name":"RestoreLv","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","toolTip":"","top":100,"vanchor":0,"visible":true,"width":150,"variant0":{"left":20,"top":20,"width":280,"height":200,"hanchor":2,"vanchor":0}}}},"FontAwesome":false,"MaterialIcons":false}},{"name":"spinner2.gif"},{"name":"TabPage1.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"},{"Name":"T1Cat","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"T1CatLbl","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"T1Grp","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"T1GrpLbl","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"T1ImageView1","JavaType":".ImageViewWrapper","DesignerType":"ImageView"},{"Name":"T1ImageView2","JavaType":".ImageViewWrapper","DesignerType":"ImageView"},{"Name":"T1ImageView3","JavaType":".ImageViewWrapper","DesignerType":"ImageView"},{"Name":"T1Item","JavaType":".TextInputControlWrapper$TextFieldWrapper","DesignerType":"TextField"},{"Name":"T1ItemLbl","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"T1Rem","JavaType":".TextInputControlWrapper$TextAreaWrapper","DesignerType":"TextArea"},{"Name":"T1RemLbl","JavaType":".LabelWrapper","DesignerType":"Label"},{"Name":"T1Web","JavaType":".TextInputControlWrapper$TextAreaWrapper","DesignerType":"TextArea"},{"Name":"T1WebLbl","JavaType":".LabelWrapper","DesignerType":"Label"}],"Files":[],"DesignerScript":["'All variants script\n","'Variant specific script: 600x600,scale=1\n"]},"Variants":[{"Scale":1,"Width":600,"Height":600}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{"0":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1CatLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1CatLbl","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Categroy:","textColor":{"ValueType":6,"Value":"0xFF0000FF"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":10,"width":100,"height":30,"hanchor":0,"vanchor":0}},"1":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1GrpLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1GrpLbl","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Group:","textColor":{"ValueType":6,"Value":"0xFF0000FF"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":40,"width":100,"height":30,"hanchor":0,"vanchor":0}},"2":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1ItemLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1ItemLbl","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Item:","textColor":{"ValueType":6,"Value":"0xFF0000FF"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":70,"width":100,"height":30,"hanchor":0,"vanchor":0}},"3":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1WebLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1WebLbl","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Web-Links:","textColor":{"ValueType":6,"Value":"0xFF0000FF"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":110,"width":100,"height":30,"hanchor":0,"vanchor":0}},"4":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1RemLbl","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1RemLbl","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"Remaeks:","textColor":{"ValueType":6,"Value":"0xFF0000FF"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":10,"top":220,"width":100,"height":30,"hanchor":0,"vanchor":0}},"5":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1Cat","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1Cat","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"","textColor":{"ValueType":6,"Value":"0xFF000000"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":120,"top":10,"width":-30,"height":30,"hanchor":2,"vanchor":0}},"6":{"csType":"Dbasic.Designer.MetaLabel","type":".LabelWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"enabled":true,"eventName":"T1Grp","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":true,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"fontAwesome":"","hanchor":0,"height":30,"javaType":".LabelWrapper","left":100,"materialIcons":"","name":"T1Grp","parent":"Main","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"","textColor":{"ValueType":6,"Value":"0xFF000000"},"toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":120,"top":40,"width":-30,"height":30,"hanchor":2,"vanchor":0}},"7":{"csType":"Dbasic.Designer.MetaTextField","type":".TextInputControlWrapper$TextFieldWrapper","alignment":"CENTER_LEFT","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"editable":true,"enabled":true,"eventName":"T1Item","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":30,"javaType":".TextInputControlWrapper$TextFieldWrapper","left":100,"name":"T1Item","parent":"Main","password":false,"prompt":"Prompt","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"","toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":120,"top":70,"width":-30,"height":30,"hanchor":2,"vanchor":0}},"8":{"csType":"Dbasic.Designer.MetaTextArea","type":".TextInputControlWrapper$TextAreaWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"editable":true,"enabled":true,"eventName":"T1Web","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":100,"javaType":".TextInputControlWrapper$TextAreaWrapper","left":100,"name":"T1Web","parent":"Main","prompt":"Prompt","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"","toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":120,"top":110,"width":-30,"height":100,"hanchor":2,"vanchor":0}},"9":{"csType":"Dbasic.Designer.MetaTextArea","type":".TextInputControlWrapper$TextAreaWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"contextMenu":"","cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-base"},"editable":true,"enabled":true,"eventName":"T1Rem","extraCss":"","font":{"csType":"Dbasic.Designer.FontGrid","type":"B4IFontWrapper","bold":false,"fontName":"DEFAULT","fontSize":{"ValueType":7,"Value":15},"italic":false},"hanchor":0,"height":100,"javaType":".TextInputControlWrapper$TextAreaWrapper","left":100,"name":"T1Rem","parent":"Main","prompt":"Prompt","shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"","text":"","toolTip":"","top":100,"vanchor":0,"visible":true,"width":100,"wrapText":false,"variant0":{"left":120,"top":220,"width":-30,"height":100,"hanchor":2,"vanchor":0}},"10":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":""},"enabled":true,"eventName":"T1ImageView","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":100,"name":"T1ImageView1","parent":"Main","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"1","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":10,"top":340,"width":200,"height":230,"hanchor":0,"vanchor":0}},"11":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":""},"enabled":true,"eventName":"T2ImageView","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":100,"name":"T1ImageView2","parent":"Main","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"2","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":220,"top":340,"width":200,"height":230,"hanchor":0,"vanchor":0}},"12":{"csType":"Dbasic.Designer.MetaImageView","type":".ImageViewWrapper","alpha":{"ValueType":7,"Value":1},"drawable":{"csType":"Dbasic.Designer.Drawable.BitmapDrawable","type":"BitmapDrawable","file":""},"enabled":true,"eventName":"T3ImageView","extraCss":"","hanchor":0,"height":100,"javaType":".ImageViewWrapper","left":100,"name":"T1ImageView3","parent":"Main","preserveRatio":true,"shadow":{"csType":"Dbasic.Designer.ShadowGrid","type":"","offsetX":{"ValueType":7,"Value":0},"offsetY":{"ValueType":7,"Value":0},"radius":{"ValueType":7,"Value":10},"shadowColor":{"ValueType":6,"Value":"0xFF000000"},"stype":0},"tag":"3","top":100,"vanchor":0,"visible":true,"width":100,"variant0":{"left":430,"top":340,"width":200,"height":230,"hanchor":0,"vanchor":0}}}},"FontAwesome":false,"MaterialIcons":false}},{"name":"TabPage2.bjl","layout":{"LayoutHeader":{"Version":5,"GridSize":10,"ControlsHeaders":[{"Name":"Main","JavaType":".PaneWrapper$ConcretePaneWrapper","DesignerType":"Pane"}],"Files":[],"DesignerScript":["'All variants script\n","'Variant specific script: 600x600,scale=1\n"]},"Variants":[{"Scale":1,"Width":600,"Height":600}],"Data":{"csType":"Dbasic.Designer.MetaMain","type":".PaneWrapper$ConcretePaneWrapper","alpha":{"ValueType":7,"Value":1},"borderColor":{"ValueType":6,"Value":"0xFF000000"},"borderWidth":{"ValueType":7,"Value":0},"cornerRadius":{"ValueType":7,"Value":0},"drawable":{"csType":"Dbasic.Designer.Drawable.ColorDrawable","type":"ColorDrawable","color":{"ValueType":6,"Value":"0xFFF0F8FF"},"colorKey":"-fx-background-color"},"duration":0,"enabled":true,"eventName":"MainForm","extraCss":"","file":"","handleResizeEvent":true,"javaType":".PaneWrapper$ConcretePaneWrapper","name":"Main","orientation":"INHERIT","parent":"","tag":"","title":"Form","visible":true,"variant0":{"left":0,"top":0,"width":200,"height":200,"hanchor":0,"vanchor":0},":kids":{}},"FontAwesome":false,"MaterialIcons":false}},{"name":"TechDoc2015_1_1_1.png"}]}