164 lines
4.8 KiB
Lua

require"iuplua"
notepad = {}
-- Notepad Dialog
notepad.lastfilename = nil -- Last file open
notepad.mlCode = iup.multiline{expand="YES", size="200x120", font="Courier, 10"}
notepad.lblPosition = iup.label{title="Lin 0, Col 0", size="50x"}
notepad.lblFileName = iup.label{title="", size="50x", expand="HORIZONTAL"}
function notepad.mlCode:caret_cb(lin, col)
notepad.lblPosition.title = "Lin ".. lin .. ", Col " .. col
end
function notepad.New()
notepad.mlCode.value=''
notepad.lblFileName.title = ''
notepad.lastfilename = nil
end
notepad.butExecute = iup.button{size="50x15", title="Execute",
action="iup.dostring(notepad.mlCode.value)"}
notepad.butNewCommands = iup.button{size="50x15", title="New", action=notepad.New}
notepad.butLoadFile = iup.button{size="50x15", title="Load..."}
notepad.butSaveasFile = iup.button{size="50x15", title="Save As..."}
notepad.butSaveFile = iup.button{size="50x15", title="Save"}
function notepad.butSaveFile:action()
if (notepad.lastfilename == nil) then
notepad.butSaveasFile:action()
else
newfile = io.open(notepad.lastfilename, "w+")
if (newfile) then
newfile:write(notepad.mlCode.value)
newfile:close()
else
error ("Cannot Save file: "..filename)
end
end
end
function notepad.butSaveasFile:action()
local fd = iup.filedlg{dialogtype="SAVE", title="Save File",
nochangedir="NO", directory=notepad.last_directory,
filter="*.*", filterinfo="All files",allownew=yes}
fd:popup(iup.LEFT, iup.LEFT)
local status = fd.status
notepad.lastfilename = fd.value
notepad.lblFileName.title = fd.value
notepad.last_directory = fd.directory
fd:destroy()
if status ~= "-1" then
if (notepad.lastfilename == nil) then
error ("Cannot Save file "..filename)
end
local newfile=io.open(notepad.lastfilename, "w+")
if (newfile) then
newfile:write(notepad.mlCode.value)
newfile:close(newfile)
else
error ("Cannot Save file")
end
end
end
function notepad.LoadFile(filename)
local newfile = io.open (filename, "r")
if (newfile == nil) then
error ("Cannot load file "..filename)
else
notepad.mlCode.value=newfile:read("*a")
newfile:close (newfile)
notepad.lastfilename = filename
notepad.lblFileName.title = notepad.lastfilename
end
end
function notepad.butLoadFile:action()
local fd=iup.filedlg{dialogtype="OPEN", title="Load File",
nochangedir="NO", directory=notepad.last_directory,
filter="*.*", filterinfo="All Files", allownew="NO"}
fd:popup(iup.CENTER, iup.CENTER)
local status = fd.status
local filename = fd.value
notepad.last_directory = fd.directory
fd:destroy()
if (status == "-1") or (status == "1") then
if (status == "1") then
error ("Cannot load file "..filename)
end
else
notepad.LoadFile(filename)
end
end
notepad.vbxNotepad = iup.vbox
{
iup.frame{iup.hbox{iup.vbox{notepad.butLoadFile,
notepad.butSaveFile,
notepad.butSaveasFile,
notepad.butNewCommands,
notepad.butExecute,
margin="0x0", gap="10"},
iup.vbox{notepad.lblFileName,
notepad.mlCode,
notepad.lblPosition,
alignment = "ARIGHT"},
alignment="ATOP"}, title="Commands"}
,alignment="ACENTER", margin="5x5", gap="5"
}
-- Main Menu Definition.
notepad.mnuMain = iup.menu
{
iup.submenu
{
iup.menu
{
iup.item{title="Exit", action="return iup.CLOSE"}
}, title="&File"
},
-- iup.submenu{iup.menu
-- {
-- iup.item{title="Print Version Info...", action=notepad.print_version_info},
-- iup.item{title="About...", action="notepad.dlgAbout:popup(iup.CENTER, iup.CENTER)"}
-- },title="Help"}
}
-- Main Dialog Definition.
notepad.dlgMain = iup.dialog{notepad.vbxNotepad,
title="Lua Notepad",
menu=notepad.mnuMain,
dragdrop = "YES",
defaultenter=notepad.butExecute}
function notepad.dlgMain:dropfiles_cb(filename, num, x, y)
if (num == 0) then -- only the first one
notepad.LoadFile(filename)
end
end
function notepad.dlgMain:close_cb()
iup.ExitLoop() -- should be removed if used inside a bigger application
notepad.dlgMain:destroy()
return iup.IGNORE
end
-- Displays the Main Dialog
notepad.dlgMain:show()
notepad.mlCode.size = nil -- reset initial size, allow resize to smaller values
iup.SetFocus(notepad.mlCode)
if (iup.MainLoopLevel()==0) then
iup.MainLoop()
end