diff options
Diffstat (limited to 'showlicense.mod/showlicense.bmx')
-rw-r--r-- | showlicense.mod/showlicense.bmx | 399 |
1 files changed, 199 insertions, 200 deletions
diff --git a/showlicense.mod/showlicense.bmx b/showlicense.mod/showlicense.bmx index 09ea7c3..06651d2 100644 --- a/showlicense.mod/showlicense.bmx +++ b/showlicense.mod/showlicense.bmx @@ -1,200 +1,199 @@ -' Copyright (c) 2006 Ian Cowburn -' -' Permission is hereby granted, free of charge, to any person obtaining a copy of -' this software and associated documentation files (the "Software"), to deal in -' the Software without restriction, including without limitation the rights to -' use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -' of the Software, and to permit persons to whom the Software is furnished to do -' so, subject to the following conditions: -' -' The above copyright notice and this permission notice shall be included in all -' copies or substantial portions of the Software. -' -' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -' SOFTWARE. -' -' $Id$ -' -Rem -bbdoc: noddybox.showlicense -EndRem -Module noddybox.showlicense - -ModuleInfo "Framework: License acceptance routines" -ModuleInfo "Copyright: Ian Cowburn -- released under the MIT License" -ModuleInfo "Author: Ian Cowburn" -ModuleInfo "Version: $Revision$" - -Strict -Import brl.max2d -Import brl.stream -Import brl.basic -Import brl.linkedlist - -Rem -bbdoc: Displays a license for the user to accept. -returns: True if the license is accepted, false otherwise. -about: The license stored in text format at the URL @short_license is displayed with a title of @title. -If the URL @full_license is not null then the user is provided with an option to display that too. -The width of text in the license files must fit on the screen... -EndRem -Function ShowLicense:Int(title:String, short_license:String, full_license:String) - Local accepted:Int=False - Local license:TLicense=New TLicense - - If full_license - license.Init(title,short_license,["ACCEPT","DECLINE","VIEW FULL LICENSE"]) - Else - license.Init(title,short_license,["ACCEPT","DECLINE"]) - EndIf - - Select license.Show() - Case 0 - accepted=True - Case 1 - Case 2 - license=New TLicense - license.Init(title,full_license,["ACCEPT","DECLINE"]) - If (license.Show()=0) - accepted=True - End If - End Select - - Return accepted -End Function - -Private - -Type TLicense - Field top:Int - Field bottom:Int - Field list:TList - Field item:TLink - Field title:String - Field opts:String[] - Field sel:Int - Field col:Int - Field coli:Int - - Method New() - End Method - - Method Centre(s:String, y:Int) - DrawText(s,(GraphicsWidth()-TextWidth(s))/2,y) - End Method - - Method MaxHeight:Int() - Return TextHeight("X") - End Method - - Method Init(t:String, u:String, o:String[]) - Local str:TStream=ReadStream(u) - - Assert str,"Unable to open help file" - - list=CreateList() - - While Not str.Eof() - list.AddLast(str.ReadLine()) - Wend - - str.Close() - - title=t - item=list.FirstLink() - - top=MaxHeight()*2 - bottom=GraphicsHeight()-MaxHeight()*3 - opts=o - sel=0 - col=255 - coli=-5 - End Method - - Method Draw() - Local y:Int=top+1 - Local i:TLink=item - - While y<bottom And i - Local s:String=String(i.Value()) - DrawText(s,0,y) - y:+TextHeight(s) - i=i.NextLink() - Wend - - SetColor(0,0,0) - DrawRect(0,0,GraphicsWidth(),top) - DrawRect(0,bottom,GraphicsWidth(),GraphicsHeight()-bottom) - - SetColor(255,255,255) - DrawLine(0,TOP,GraphicsWidth(),TOP) - DrawLine(0,BOTTOM,GraphicsWidth(),BOTTOM) - - Centre(title,MaxHeight()/2) - Centre("CURSORS VIEW AND CHOOSE. RETURN SELECTS.",bottom+MaxHeight()/2) - - Local x:Int=0 - y=GraphicsHeight()-MaxHeight() - - For Local f:Int=0 Until opts.length - If f=sel - SetColor(col/2,col/2,128+col) - DrawRect(x,y,TextWidth(opts[f]),MaxHeight()) - SetColor(255,255,255) - EndIf - DrawText(opts[f],x,y) - x:+TextWidth(opts[f])+20 - Next - - col:+coli - - If col<128 Or col>255 - coli=-coli - col:+coli - EndIf - End Method - - Method Current:String() - Return String(item.Value()) - End Method - - Method Show:Int() - Local done:Int=False - - FlushKeys() - - While Not done - Cls - - Draw() - - If KeyDown(KEY_DOWN) - If item.NextLink() - item=item.NextLink() - EndIf - ElseIf KeyDown(KEY_UP) - If item.PrevLink() - item=item.PrevLink() - EndIf - ElseIf KeyHit(KEY_LEFT) - sel=Max(0,sel-1) - ElseIf KeyHit(KEY_RIGHT) - sel=Min(opts.length-1,sel+1) - ElseIf KeyHit(KEY_RETURN) - done=True - EndIf - - Flip - Wend - - FlushKeys() - - Return sel - End Method -End Type - +' Copyright (c) 2006 Ian Cowburn
+'
+' Permission is hereby granted, free of charge, to any person obtaining a copy of
+' this software and associated documentation files (the "Software"), to deal in
+' the Software without restriction, including without limitation the rights to
+' use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+' of the Software, and to permit persons to whom the Software is furnished to do
+' so, subject to the following conditions:
+'
+' The above copyright notice and this permission notice shall be included in all
+' copies or substantial portions of the Software.
+'
+' THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+' IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+' FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+' AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+' LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+' OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+' SOFTWARE.
+'
+' $Id$
+'
+Rem
+bbdoc: noddybox.showlicense
+EndRem
+Module noddybox.showlicense
+
+ModuleInfo "Framework: License acceptance routines"
+ModuleInfo "Copyright: Ian Cowburn -- released under the MIT License"
+ModuleInfo "Author: Ian Cowburn"
+ModuleInfo "Version: $Revision$"
+
+Import brl.max2d
+Import brl.stream
+Import brl.basic
+Import brl.linkedlist
+
+Rem
+bbdoc: Displays a license for the user to accept.
+returns: True if the license is accepted, false otherwise.
+about: The license stored in text format at the URL @short_license is displayed with a title of @title.
+If the URL @full_license is not null then the user is provided with an option to display that too.
+The width of text in the license files must fit on the screen...
+EndRem
+Function ShowLicense:Int(title:String, short_license:String, full_license:String)
+ Local accepted:Int=False
+ Local license:TLicense=New TLicense
+
+ If full_license
+ license.Init(title,short_license,["ACCEPT","DECLINE","VIEW FULL LICENSE"])
+ Else
+ license.Init(title,short_license,["ACCEPT","DECLINE"])
+ EndIf
+
+ Select license.Show()
+ Case 0
+ accepted=True
+ Case 1
+ Case 2
+ license=New TLicense
+ license.Init(title,full_license,["ACCEPT","DECLINE"])
+ If (license.Show()=0)
+ accepted=True
+ End If
+ End Select
+
+ Return accepted
+End Function
+
+Private
+
+Type TLicense
+ Field top:Int
+ Field bottom:Int
+ Field list:TList
+ Field item:TLink
+ Field title:String
+ Field opts:String[]
+ Field sel:Int
+ Field col:Int
+ Field coli:Int
+
+ Method New()
+ End Method
+
+ Method Centre(s:String, y:Int)
+ DrawText(s,(GraphicsWidth()-TextWidth(s))/2,y)
+ End Method
+
+ Method MaxHeight:Int()
+ Return TextHeight("X")
+ End Method
+
+ Method Init(t:String, u:String, o:String[])
+ Local str:TStream=ReadStream(u)
+
+ Assert str,"Unable to open help file"
+
+ list=CreateList()
+
+ While Not str.Eof()
+ list.AddLast(str.ReadLine())
+ Wend
+
+ str.Close()
+
+ title=t
+ item=list.FirstLink()
+
+ top=MaxHeight()*2
+ bottom=GraphicsHeight()-MaxHeight()*3
+ opts=o
+ sel=0
+ col=255
+ coli=-5
+ End Method
+
+ Method Draw()
+ Local y:Int=top+1
+ Local i:TLink=item
+
+ While y<bottom And i
+ Local s:String=String(i.Value())
+ DrawText(s,0,y)
+ y:+TextHeight(s)
+ i=i.NextLink()
+ Wend
+
+ SetColor(0,0,0)
+ DrawRect(0,0,GraphicsWidth(),top)
+ DrawRect(0,bottom,GraphicsWidth(),GraphicsHeight()-bottom)
+
+ SetColor(255,255,255)
+ DrawLine(0,TOP,GraphicsWidth(),TOP)
+ DrawLine(0,BOTTOM,GraphicsWidth(),BOTTOM)
+
+ Centre(title,MaxHeight()/2)
+ Centre("CURSORS VIEW AND CHOOSE. RETURN SELECTS.",bottom+MaxHeight()/2)
+
+ Local x:Int=0
+ y=GraphicsHeight()-MaxHeight()
+
+ For Local f:Int=0 Until opts.length
+ If f=sel
+ SetColor(col/2,col/2,128+col)
+ DrawRect(x,y,TextWidth(opts[f]),MaxHeight())
+ SetColor(255,255,255)
+ EndIf
+ DrawText(opts[f],x,y)
+ x:+TextWidth(opts[f])+20
+ Next
+
+ col:+coli
+
+ If col<128 Or col>255
+ coli=-coli
+ col:+coli
+ EndIf
+ End Method
+
+ Method Current:String()
+ Return String(item.Value())
+ End Method
+
+ Method Show:Int()
+ Local done:Int=False
+
+ FlushKeys()
+
+ While Not done
+ Cls
+
+ Draw()
+
+ If KeyDown(KEY_DOWN)
+ If item.NextLink()
+ item=item.NextLink()
+ EndIf
+ ElseIf KeyDown(KEY_UP)
+ If item.PrevLink()
+ item=item.PrevLink()
+ EndIf
+ ElseIf KeyHit(KEY_LEFT)
+ sel=Max(0,sel-1)
+ ElseIf KeyHit(KEY_RIGHT)
+ sel=Min(opts.length-1,sel+1)
+ ElseIf KeyHit(KEY_RETURN)
+ done=True
+ EndIf
+
+ Flip
+ Wend
+
+ FlushKeys()
+
+ Return sel
+ End Method
+End Type
+
|