'***************************************************
' *** Test code 
'***************************************************
$TYPECHECK ON
$INCLUDE <RapidQ2.inc>
$INCLUDE <QScintilla.inc>

DECLARE SUB EditOnKeyDown (TheChar AS WORD, Shift AS INTEGER)
DECLARE SUB MyProc(Hwnd AS Long, Msg AS Long, wParam AS Long, lParam AS Long)
DECLARE SUB editDblClick
DECLARE SUB editMarginClick(MargNum As Integer, Line As Integer)
DECLARE SUB editOnChange
DECLARE SUB editOnMouseDown(Butn%, x%, y%)
DECLARE Sub TestMenu
declare SUB editOnMouseMove(x%, y%,Shift%)


declare Sub TestMenu


CREATE Form AS QForm
    Left = 400
    Width = 800
    Height = 700
    KeyPreview = True

    CREATE MainMenu AS QMainMenu
        CREATE mnuItem1 AS QMenuItem
            Caption = "&File"

        CREATE mnuItem2 AS QMenuItem   
            Caption = "save"     
            Shortcut = "shift+ctrl+S"
            OnClick = TestMenu
        END CREATE
        END CREATE
    END CREATE

    CREATE RichEdit AS QScintilla
    Top = 10
    Left = 10
    Width = Form.ClientWidth        'Screen.Width
    Height = Form.ClientHeight      'Screen.Height
    Init(Form.Handle)
    OnMouseDown = editOnMouseDown
    OnChange = editOnChange
    OnDblClick = editDblClick
    OnMarginClick = editMarginClick
    OnKeyDown = EditOnKeyDown
    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)


'ShowMessage "number of lines = "+STR$(RichEdit.LineCount)
'Showmessage "line 1 is " + RichEdit.Line(1)
RichEdit.Set_Scrollbars = ssVertical
RichEdit.AddStrings ("Hello world!", "whatever ", CHR$(13))
'Showmessage "line 1 is now " + RichEdit.Line(1)

RichEdit.Set_LineNumbers(True)
RichEdit.LoadFromFile("QScintilla.inc")
RichEdit.GoToLine(1862)
RichEdit.Set_SelColor(clWhite, RGB(38,104,183))


RichEdit.Set_CodeFolding(True, True)


 '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

Richedit.ViewWhiteSpace(0)

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
'RichEdit.GotoText("qform")

Form.Showmodal


SUB editOnMouseMove(x%, y%,Shift%)
    print "y ", Richedit.WhereY, "  x=", RichEdit.WhereX
END SUB


SUB editOnMouseDown(Butn%, x%, y%)
    print "butn%", butn%
    print "x= ", x%, "  y= ", y%
    if butn% = 1 THEN PopupMenu.Popup(Screen.MouseX, Screen.MouseY)  'PopForm.Showmodal: PopupMenu.Popup(0,200)
END SUB

SUB editOnChange
    print "changed"
END SUB

SUB editDblClick        'display selected text
    Showmessage RichEdit.SelText
END SUB

SUB EditOnKeyDown (TheChar AS WORD, Shift AS INTEGER)
    print "key down char   =", TheChar , "   shift = ", Shift
END SUB


SUB editMarginClick(MargNum As Integer, Line As Integer)
    IF MargNum = 0 THEN RichEdit.ToggleCodeFolding: RichEdit.FoldCollapseAll
    IF MargNum = 1 THEN RichEdit.FoldExpandAll 
END SUB



Sub TestMenu
    Showmessage "menu clicked"
    RichEdit.GotoText("QFORM")
    Showmessage str$(RichEdit.WhereY)  'CurrentLineNumber)
    RichEdit.SendEditor(SCI_LINESCROLL, 0, 5)       'scroll down 5 lines
end sub

