mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-15 22:02:49 -06:00
125 lines
2.2 KiB
C++
125 lines
2.2 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();
|
|
ret = PyCon::Exec(c, n<=1);
|
|
|
|
if(ret == 0)
|
|
{
|
|
if( clonex.Get())
|
|
cmd.Clear();
|
|
|
|
//history
|
|
if(idx < ac.GetCount())
|
|
{
|
|
//executed sth from the history, move it to the end of history
|
|
ac.Move(idx, ac.GetCount());
|
|
}
|
|
else
|
|
{
|
|
//executed new, add to the end, if not yet at the end.
|
|
if(ac.IsEmpty() || ac[ac.GetCount()-1] != c)
|
|
ac.Add(c);
|
|
}
|
|
idx = ac.GetCount(); //'commit' the history
|
|
}
|
|
ex.Clear();
|
|
ex <<= ret;
|
|
}
|
|
|
|
void PyConsoleCtrl::ShowHistory(int i)
|
|
{
|
|
i = minmax(i, 0, ac.GetCount()-1);
|
|
cmd.SetData(ac[i]);
|
|
}
|
|
|
|
void PyConsoleCtrl::Inc()
|
|
{
|
|
//got to next in hostory and display it
|
|
++idx;
|
|
if(idx >= ac.GetCount())
|
|
{
|
|
idx = ac.GetCount();
|
|
Clear();
|
|
}
|
|
else
|
|
ShowHistory(idx);
|
|
}
|
|
|
|
void PyConsoleCtrl::Dec()
|
|
{
|
|
//go to previous in history
|
|
--idx;
|
|
if(idx < 0)
|
|
{
|
|
idx = 0;
|
|
// Clear(); //no clear at beginning of history
|
|
}
|
|
// else
|
|
ShowHistory(idx);
|
|
}
|
|
|
|
void PyConsoleCtrl::Dirtify()
|
|
{
|
|
idx = ac.GetCount();
|
|
}
|
|
|
|
PyConsoleCtrl::PyConsoleCtrl()
|
|
: idx(0)
|
|
{
|
|
CtrlLayout(*this);
|
|
|
|
exec.AddFrame(sb);
|
|
sb.inc.WhenRepeat = sb.inc.WhenAction = THISBACK(Dec); //reverse because of history
|
|
sb.dec.WhenRepeat = sb.dec.WhenAction = THISBACK(Inc);
|
|
cmd <<= THISBACK(Dirtify);
|
|
|
|
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();
|
|
}
|
|
|