summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan C <ianc@noddybox.co.uk>2006-06-03 23:53:18 +0000
committerIan C <ianc@noddybox.co.uk>2006-06-03 23:53:18 +0000
commit7f63cfa0d7da1b9d98e21dd08d4981975b31a7ac (patch)
treea444f983ea1d41bfc8e39681d7a2b6765609873e
parentc8f2209abdb7a0e5948ec06ff31e01022fd2143e (diff)
Added module to view licenses
-rw-r--r--showlicense.mod/.cvsignore4
-rw-r--r--showlicense.mod/showlicense.bmx200
2 files changed, 204 insertions, 0 deletions
diff --git a/showlicense.mod/.cvsignore b/showlicense.mod/.cvsignore
new file mode 100644
index 0000000..a37585c
--- /dev/null
+++ b/showlicense.mod/.cvsignore
@@ -0,0 +1,4 @@
+doc
+.bmx
+*.a
+*.i
diff --git a/showlicense.mod/showlicense.bmx b/showlicense.mod/showlicense.bmx
new file mode 100644
index 0000000..09ea7c3
--- /dev/null
+++ b/showlicense.mod/showlicense.bmx
@@ -0,0 +1,200 @@
+' 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
+