'***************************************************
' *** Test code 
'***************************************************
' 
$TYPECHECK ON
$INCLUDE <RapidQ2.inc>
$INCLUDE "QScintilla.inc"


DECLARE SUB EditOnKeyDown (TheChar AS WORD, Shift AS INTEGER)
DECLARE SUB EditOnKeyUp (TheChar AS WORD, Shift AS INTEGER)
DECLARE SUB ResizeForm
DECLARE SUB editDblClick
DECLARE SUB editMarginClick(MargNum As Integer, Line As Integer)
DECLARE SUB editOnChange
DECLARE SUB editOnMouseDown(Butn%, x%, y%)
DECLARE SUB editOnMouseMove(x%, y%,Shift%)
DECLARE SUB editOnMouseUp(Butn%, x%, y%)
DECLARE Sub TestMenu



declare Sub TestMenu
declare SUB ResizeForm


CREATE Form AS QForm
    Width = 800
    Height = 700
    KeyPreview = True
    OnResize = ResizeForm

    CREATE MainMenu AS QMainMenu
        CREATE mnuItem1 AS QMenuItem
            Caption = "&File"

        CREATE mnuItem2 AS QMenuItem   
            Caption = "save"     
            Shortcut = "ctrl+S"
            OnClick = TestMenu
        END CREATE

        CREATE mnuItemx AS QMenuItem   
            Caption = "sdfasfd"     
            Shortcut = "ctrl+f2"
            OnClick = TestMenu
        END CREATE


        CREATE mnuItemy AS QMenuItem   
            Caption = "sdfasfd"     
            Shortcut = "shift+f2"
            OnClick = TestMenu
        END CREATE

        END CREATE
    END CREATE


' 
    CREATE RichEdit AS QScintilla
    Width = Form.ClientWidth
    Height = Form.ClientHeight
    Init(Form.Handle)
    OnMouseDown = editOnMouseDown
    OnMouseup = editOnMouseUp
    OnChange = editOnChange
    OnDblClick = editDblClick
    OnMarginClick = editMarginClick
    OnKeyDown = EditOnKeyDown
    OnKeyUp = EditOnKeyUp
    OnMouseMove = editOnMouseMove

      SendEditor(SCI_USEPOPUP, 0&, 0&)
      CREATE PopupMenu AS QPOPUPMENU
        AutoPopup = 1
        CREATE DeclarePop AS QMENUITEM
          Caption = "Auto&declare"
        END CREATE
    
        CREATE SpacerPop0 AS QMENUITEM
          Caption = "-"
        END CREATE
    
        CREATE CompilePop AS QMENUITEM
          Caption = "Co&mpile Only"
          Shortcut = "Ctrl+M"
        END CREATE
    
        CREATE RunPop AS QMENUITEM
          Caption = "&Run"
          Shortcut = "F5"
        onclick = TestMenu
        END CREATE
      END CREATE
    END CREATE
END CREATE

CREATE NewFont AS QFONT
    Name = "Arial"
    Size = 11
END CREATE

RichEdit.Set_Font(NewFont)
RichEdit.Set_Scrollbars = ssVertical



RichEdit.Set_LineNumbers(True)
RichEdit.ViewBookMarks(True)
RichEdit.LoadFromFile("QScintilla.inc")
RichEdit.Set_SelColor(clWhite, RGB(38,104,183))
RichEdit.AutoIndent = False
RichEdit.ViewIndentation(True)
RichEdit.Set_CodeFolding(True, True)
'ShowMessage "number of lines = "+STR$(RichEdit.LineCount)
'Showmessage "line 1 is " + RichEdit.Line(1)
RichEdit.AddStrings ("Hello world!", "whatever ", CHR$(13))
'Showmessage "line 1 is now " + RichEdit.Line(1)



 'pick a compiler language, see docs..
'RichEdit.Set_LanguageByName("vb")              '"powerbasic", "vbscript", etc.
RichEdit.Set_Language (SCLEX_VB)        'SCLEX_VB, SCLEX_FREEBASIC, SCLEX_IBASIC, SCLEX_POWERBASIC is compatible with RapidQ
' $define SCE_B_DEFAULT 0           'in both VB and PB lexer
' $define SCE_B_COMMENT 1           'in both VB and PB lexer
' $define SCE_B_NUMBER 2            'in both VB and PB lexer
' $define SCE_B_KEYWORD 3           'in both VB and PB lexer -fold keywords?
' $define SCE_B_STRING 4            'in both VB and PB lexer
' $define SCE_B_PREPROCESSOR 5      'VB lexer only, not in PB lexer
' $define SCE_B_OPERATOR 6          'in both VB and PB lexer
' $define SCE_B_IDENTIFIER 7        'in both VB and PB lexer
' $define SCE_B_DATE 8              'VB lexer only, not in PB lexer
' $define SCE_B_STRINGEOL 9
' $define SCE_B_KEYWORD2 10
' $define SCE_B_KEYWORD3 11
' $define SCE_B_KEYWORD4 12
' $define SCE_B_CONSTANT 13         '$DEFINE $IFxx, PB lexer only, not in VB lexer


DIM myKeywords AS QSTRINGLIST
myKeywords.AddItems("sub", "qform", "if", "else", "for", "next", "do", "loop", "create", "end")
RichEdit.LoadKeywordList(0, myKeywords)                 'keywords that will toggle code folding
RichEdit.SetStyle(SCE_B_KEYWORD, clBLue, clWhite, 1)   'set the font for the keywords
myKeywords.Clear

DEFSTR tmp = "qfont qrichedit"
RichEdit.LoadKeywords(1, tmp)                 'load up more keywords wont highlight for PowerBasic
RichEdit.SetStyle(SCE_B_KEYWORD2, clBLue, clBlack)


myKeywords.AddItems("$define", "$ifdef", "$include")
RichEdit.LoadKeywordList(2, myKeywords)
RichEdit.SetStyle(SCE_B_KEYWORD3, clBLue, clYellow)

'search for text and put cursor at start of word
'showmessage "going to text Qform"
'RichEdit.GotoText("qform")


Form.Showmodal


SUB editOnMouseMove(x%, y%,Shift%)
'    print "y ", Richedit.WhereY, "  x=", RichEdit.WhereX
END SUB


SUB editOnMouseUp(Butn%, x%, y%)
    ShowMessage "mouse up " + str$(Butn%)
    'print "butn%", butn%, " x= ", x%, "  y= ", y%
    'PopForm.Showmodal: PopupMenu.Popup(0,200)
END SUB

SUB editOnMouseDown(Butn%, x%, y%)
'    print "butn%", butn%, " x= ", x%, "  y= ", y%
    if butn% = 1 THEN PopupMenu.Popup(Screen.MouseX, Screen.MouseY) 'ELSE Richedit.EnsureLineVisible(1000)
    'PopForm.Showmodal: PopupMenu.Popup(0,200)
END SUB

SUB editOnChange
'    print "changed"
END SUB

SUB editDblClick        'display selected text
     Showmessage RichEdit.SelText
     Richedit.Set_SelText("Hello There")
END SUB

SUB EditOnKeyUp (TheChar AS WORD, Shift AS INTEGER)
    ShowMessage "key up " + str$(TheChar)
END SUB

SUB EditOnKeyDown (TheChar AS WORD, Shift AS INTEGER)
'   ShowMessage TheChar + "  " +  Shift
END SUB


SUB editMarginClick(MargNum As Integer, Line As Integer)
'    IF MargNum = 2 THEN RichEdit.ToggleCodeFolding': RichEdit.FoldCollapseAll  :RichEdit.FoldExpandAll 
    IF MargNum = 1 THEN RichEdit.AddBookMark(Richedit.WhereY)
    IF MargNum = 0 THEN RichEdit.ToggleCodeFolding
END SUB



Sub TestMenu
    Showmessage Richedit.WordAtCursor
    Showmessage "menu clicked"
    RichEdit.GoToLine(0)
'    RichEdit.Replace("Scintilla.h", "QSPILL", SCFIND_WHOLEWORD, 0) 'SCFIND_WHOLEWORD, 0)) SCFIND_WORDSTART
'    RichEdit.GotoText("qform")
'    Showmessage str$(RichEdit.WhereY)  'CurrentLineNumber)
'    RichEdit.SendEditor(SCI_LINESCROLL, 0, 5)       'scroll down 5 lines
end sub


SUB ResizeForm
    RichEdit.Resize(0, 0, Form.ClientWidth, Form.ClientHeight)
END SUB
