' Very simple notepad like editor, in less than 200 lines of code! 

$APPTYPE   GUI
$TYPECHECK ON              '' Strict type checking, so I don't make mistakes. 
$INCLUDE   "RAPIDQ.INC"    '' You don't need them all in this example. 

DIM MainForm AS QForm
DIM DialogBox AS QForm
DIM EditBox AS QEdit
DIM RichEdit AS QRichEdit
DIM MainMenu AS QMainMenu
DIM File AS QMenuItem, Edit AS QMenuItem
DIM New AS QMenuItem, Open AS QMenuItem, ReOpen AS QMenuItem
DIM ReOpen1 AS QMenuItem, ReOpen2 AS QMenuItem, ReOpen3 AS QMenuItem
DIM Save AS QMenuItem, SaveAs AS QmenuItem
DIM Break1 AS QMenuItem
DIM ExitEditor AS QMenuItem
DIM Copy AS QMenuItem, Cut AS QMenuItem, Paste AS QMenuItem, SelectAll AS QMenuItem
DIM Search AS QMenuItem, Find AS QMenuItem
DIM FileName AS STRING
    FileName = "UNTiTLED"
DIM CountFiles AS BYTE
    CountFiles = 0

SUB ExitEditorClick    '' Exit item clicked 
  MainForm.Close
END SUB

SUB NewClick           '' New item clicked 
  RichEdit.Clear
  FileName = "UNTiTLED"
END SUB

SUB OpenClick          '' Open item clicked 
  DIM OpenDialog AS QOpenDialog

  IF OpenDialog.Execute THEN
    FileName = OpenDialog.FileName
    RichEdit.LoadFromFile FileName
    IF CountFiles = 0 THEN
      ReOpen.Enabled = True
      ReOpen1.Caption = "&1. "+FileName
      ReOpen.Insert 0, ReOpen1
    ELSEIF CountFiles = 1 THEN
      ReOpen2.Caption = "&2. "+FileName
      ReOpen.Insert 1, ReOpen2
    ELSEIF CountFiles = 2 THEN
      ReOpen3.Caption = "&3. "+FileName
      ReOpen.Insert 2, ReOpen3
    ELSE
      CountFiles = CountFiles - 1
      ReOpen1.Caption = "&1. "+RIGHT$(ReOpen2.Caption, LEN(ReOpen2.Caption)-4)
      ReOpen2.Caption = "&2. "+RIGHT$(ReOpen3.Caption, LEN(ReOpen3.Caption)-4)
      ReOpen3.Caption = "&3. "+FileName
    END IF
    CountFiles = CountFiles + 1
    RichEdit.Modified = False
  END IF
END SUB

SUB SaveAsClick          '' SaveAs item clicked 
  DIM SaveDialog AS QSaveDialog

  IF SaveDialog.Execute THEN
    RichEdit.SaveToFile SaveDialog.FileName
  END IF
END SUB

SUB SaveClick
  IF FileName = "UNTiTLED" THEN
    SaveAsClick
  ELSE
    RichEdit.SaveToFile FileName
  END IF
END SUB

SUB CopyClick:  RichEdit.CopyToClipBoard:    END SUB   '' Oh yeah, that was easy 
SUB CutClick:   RichEdit.CutToClipBoard:     END SUB
SUB PasteClick: RichEdit.PasteFromClipBoard: END SUB
SUB SelectAllClick: RichEdit.SelectAll:      END SUB

SUB Reopen1Click
  IF RichEdit.Modified THEN
    SHOWMESSAGE "Abandoning changes"
  END IF
  RichEdit.LoadFromFile RIGHT$(ReOpen1.Caption, LEN(ReOpen1.Caption)-4)
  RichEdit.Modified = False
END SUB

SUB Reopen2Click
  IF RichEdit.Modified THEN
    SHOWMESSAGE "Abandoning changes"
  END IF
  RichEdit.LoadFromFile RIGHT$(ReOpen2.Caption, LEN(ReOpen2.Caption)-4)
  RichEdit.Modified = False
END SUB

SUB Reopen3Click
  IF RichEdit.Modified THEN
    SHOWMESSAGE "Abandoning changes"
  END IF
  RichEdit.LoadFromFile RIGHT$(ReOpen3.Caption, LEN(ReOpen3.Caption)-4)
  RichEdit.Modified = False
END SUB

SUB FindText   '' Primitive search... 
  RichEdit.SelStart = INSTR(UCASE$(RichEdit.Text), UCASE$(EditBox.Text))-1
  IF RichEdit.SelStart > 0 THEN
    RichEdit.SelLength = LEN(EditBox.Text)
    DialogBox.Close
  ELSE
    SHOWMESSAGE EditBox.Text+" not found."
  END IF
END SUB

SUB FindClick
  DIM Button AS QButton

  Button.Parent = DialogBox
  Button.OnClick = FindText
  Button.Caption = "&OK"
  Button.Top = 13
  Button.Left = 210
  Button.Width = 70

  EditBox.Parent = DialogBox
  EditBox.Top = 15
  EditBox.Left = 20
  EditBox.Width = 170

  DialogBox.BorderStyle = bsDialog
  DialogBox.Caption = "Search..."
  DialogBox.Width = 300
  DialogBox.Height = 80
  DialogBox.Center

  DialogBox.ShowModal
END SUB

SUB FormResize
  RichEdit.Width = MainForm.ClientWidth
  RichEdit.Height = MainForm.ClientHeight
END SUB


New.Caption = "&New"           : New.OnClick = NewClick
Open.Caption = "&Open"         : Open.OnClick = OpenClick
ReOpen.Caption = "&ReOpen"
ReOpen.Enabled = False
ReOpen1.Caption = ""           : ReOpen1.OnClick = Reopen1Click
ReOpen2.Caption = ""           : ReOpen2.OnClick = Reopen2Click
ReOpen3.Caption = ""           : ReOpen3.OnClick = Reopen3Click
Save.Caption = "&Save"         : Save.OnClick = SaveClick
SaveAs.Caption = "Save &As..." : SaveAs.OnClick = SaveAsClick
Break1.Caption ="-"
ExitEditor.Caption = "E&xit"   : ExitEditor.OnClick = ExitEditorClick

File.Caption = "&File"
File.AddItems New,Open,ReOpen,Save,SaveAs,Break1,ExitEditor

Copy.Caption = "&Copy"   : Copy.OnClick = CopyClick
Copy.ShortCut = "CTRL+C"
Cut.Caption  = "Cu&t"   : Cut.OnClick = CutClick
Cut.ShortCut = "CTRL+X"
Paste.Caption = "&Paste" : Paste.OnClick = PasteClick
Paste.ShortCut = "CTRL+V"
SelectAll.Caption = "&Select All" : SelectAll.OnClick = SelectAllClick

Edit.Caption = "&Edit"
Edit.AddItems Copy,Cut,Paste,SelectAll

Find.Caption = "&Find"
Find.OnClick = FindClick

Search.Caption = "&Search"
Search.AddItems Find

MainMenu.Parent = MainForm
MainMenu.AddItems File,Edit,Search

RichEdit.Parent = MainForm
RichEdit.Width = MainForm.ClientWidth
RichEdit.Height = MainForm.ClientHeight
RichEdit.ScrollBars = ssBoth
RichEdit.PlainText = True
RichEdit.WordWrap = False

MainForm.Caption = "Simple, notepad like editor"
MainForm.Width = 500
MainForm.Height = 400
MainForm.Center
MainForm.OnResize = FormResize
MainForm.ShowModal