ultimatepp/bazaar/PyConsoleCtrl/PyConsoleCtrl.cpp
kohait eb05c98dde basaar: Py: boost example and bugfix for PyConsoleCtrl: single statement echoes return value, multiple statements now execute as well
git-svn-id: svn://ultimatepp.org/upp/trunk@3335 f0d560ea-af0d-0410-9eb7-867de7ffcac7
2011-04-11 11:59:30 +00:00

70 lines
1.3 KiB
C++

#include "PyConsoleCtrl.h"
void PyConsoleCtrl::LoadDlg()
{
fs.Types("Python Files\t*.py\nAll Files\t*.*\n");
if(!fs.ExecuteOpen("Load a Python script")) return;
FileIn in(fs.Get());
cmd.Load(in);
}
void PyConsoleCtrl::SaveDlg()
{
fs.Types("Python Files\t*.py\nAll Files\t*.*\n");
if(!fs.ExecuteSaveAs("Save a Python script")) return;
FileOut out(fs.Get());
cmd.Save(out);
}
void PyConsoleCtrl::Clear()
{
cmd.Clear();
}
void PyConsoleCtrl::Exec()
{
String c = cmd.GetData();
if(c.IsEmpty()) return;
int ret = -1;
int n = cmd.GetLineCount();
if(n<=1)
ret = MyPyRun_SimpleStringFlags(c, NULL); //executes with Py_single_input echoing to stdout
else
ret = PyRun_SimpleStringFlags(c, NULL); //executes with Py_file_input, no interactive echo
if(ret == 0 && clonex.Get())
cmd.Clear();
ex.Clear();
ex <<= ret;
}
PyConsoleCtrl::PyConsoleCtrl()
{
CtrlLayout(*this);
spl.Vert(log, cmd);
spl.SetPos(6600);
Add(spl.HSizePos().VSizePos(0,20));
load <<= THISBACK(LoadDlg);
save <<= THISBACK(SaveDlg);
clear <<= THISBACK(Clear);
exec <<= THISBACK(Exec);
cmd.WhenCmdDone = THISBACK(Exec);
savelog <<= THISBACK(SaveLog);
clearlog <<= THISBACK(ClearLog);
clonex.SetLabel("AutoCl");
clonex.Set(1);
PyCon::SetStream(log);
PyCon::Init();
}