[bmx] A Simple Text Editor by po [ 1+ years ago ]

Started by BlitzBot, June 29, 2017, 00:28:41

Previous topic - Next topic

BlitzBot

Title : A Simple Text Editor
Author : po
Posted : 1+ years ago

Description : It's my version of MS Notepad. I figure someone out there must be looking for something like this. =)
It probably isn't the best way of doing it, and it is messy in places, but it should still be pretty easy to understand. Oh, and comments aren't my thing.


Code :
Code (blitzmax) Select
SuperStrict

Const MENU_NEW:Int=11
Const MENU_OPEN:Int=3
Const MENU_SAVE:Int=4
Const MENU_SAVEAS:Int=12
Const MENU_EXIT:Int=1

Const MENU_CUT:Int=5
Const MENU_COPY:Int=6
Const MENU_PASTE:Int=7
Const MENU_SELECT:Int=10

Const MENU_ABOUT:Int=2

Global filename$
Global content$
Global latestsave$
Global name$
Global prosave:Int
Global action:Int
Global skip:Int=False
Global s$,c$

Local font:TGuiFont
Local linenum:Int
Local line:Int

Local font1:TGuiFont=LoadGuiFont("verdana",10,False,False,False)

Local window:TGadget=CreateWindow("Untitled - Text Editor",100,100,600,500,Null,WINDOW_TITLEBAR|WINDOW_RESIZABLE|WINDOW_MENU|WINDOW_STATUS)

SetMinWindowSize(window,200,200)

Local filemenu:TGadget=CreateMenu("File",0,WindowMenu(window))
CreateMenu "New",MENU_NEW,filemenu,78,2
CreateMenu "Open",MENU_OPEN,filemenu,79,2
CreateMenu "Save",MENU_SAVE,filemenu,83,2
CreateMenu "Save As",MENU_SAVEAS,filemenu,83,1+2
CreateMenu "",Null,filemenu
CreateMenu "Exit",MENU_EXIT,filemenu

Local editmenu:TGadget=CreateMenu("Edit",0,WindowMenu(window))
CreateMenu "Cut",MENU_CUT,editmenu,88,2
CreateMenu "Copy",MENU_COPY,editmenu,67,2
CreateMenu "Paste",MENU_PASTE,editmenu,86,2
CreateMenu "",Null,editmenu
CreateMenu "Select All",MENU_SELECT,editmenu,65,2

Local helpmenu:TGadget=CreateMenu("Help",0,WindowMenu(window))
CreateMenu "About",MENU_ABOUT,helpmenu

UpdateWindowMenu(window)

Global textbox:TGadget=CreateTextArea(0,0,592,434,window,0)
SetGadgetLayout(textbox,1,1,1,1)
SetGadgetColor(textbox,255,255,255,True)
SetTextAreaFont(textbox,font1)
SetTextAreaColor(textbox,0,0,0,False)


While WaitEvent()

Select EventID()

Case EVENT_WINDOWCLOSE
ProceedSave(1)

Case EVENT_MENUACTION

Select EventData()

Case MENU_EXIT
ProceedSave(1)

Case MENU_ABOUT
AppTitle="Text Editor"
Notify "Text Editor v1.0 by Paul Leduc."

Case MENU_CUT
GadgetCut(textbox)

Case MENU_COPY
GadgetCopy(textbox)

Case MENU_PASTE
GadgetPaste(textbox)

Case MENU_SELECT
SelectTextAreaText(textbox,0,TextAreaLen(textbox,1),1)

Case MENU_NEW
ProceedSave(2)
If skip=False Then SetTextAreaText(textbox,"")
filename$=""
name$=""
latestsave$=TextAreaText(textbox)
SetGadgetText(window,"Untitled - Text Editor")

Case MENU_OPEN
ProceedSave(2)
If skip=False Then
filename$=RequestFile("Open","Text Files (*.txt):txt;All Files (*):*")
If filename$ Then
Local file:TStream=ReadFile(filename$)
SetTextAreaText(textbox,LoadString$(file),0,-1,1)
latestsave$=TextAreaText(textbox)
name$=StripDir(filename$)
SetGadgetText(window,name$+" - Text Editor")
EndIf
EndIf

Case MENU_SAVE
Save()

Case MENU_SAVEAS
SaveAs()

End Select


Default

line=TextAreaLine(textbox,TextAreaCursor(textbox,1))+1
SetStatusText window," Line: "+line

End Select

Wend

Function Save()

Print filename$

content$=TextAreaText(textbox)

If filename$ Then

SaveString(content$,filename$)

latestsave$=TextAreaText(textbox)

Else

SaveAs()

EndIf

End Function

Function SaveAs()

content$=TextAreaText(textbox)

filename$=RequestFile("Save As","Text Files (*.txt):txt;All Files (*):*",True)

If filename$ Then

If ExtractExt(filename$)="" Then filename$=filename$+".txt"

Local newfile:TStream=WriteFile(filename$)
SaveString(content$,newfile)

While Not(Eof(newfile))
s$=ReadLine(newfile)
c$=c$+s$+Chr(13)+Chr(10)
Print s$
Wend

SaveString("",newfile)

SaveString(c$,newfile)

CloseStream(newfile)

latestsave$=TextAreaText(textbox)
name$=StripDir(filename$)

Else

skip=True

EndIf

End Function

Function ProceedSave(action:Int)

skip=False

If latestsave$=TextAreaText(textbox) Then
If action=1 Then End
Else
If name$ Then
prosave=Proceed("Save changes to "+name$+"?")
Else
prosave=Proceed("Save changes to Untitled?")
EndIf
If prosave=0 And action=1 Then End
If prosave=-1 And action=2 Then skip=True
If prosave=1 Then Save()
EndIf

End Function


Comments : none...