1 /************************************************************************
3 * Copyright 2011 Jakob Leben (jakob.leben@gmail.com)
5 * This file is part of SuperCollider Qt GUI.
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
20 ************************************************************************/
22 #include "LanguageClient.h"
23 #include "QcApplication.h"
24 #include "QtCollider.h"
28 extern double elapsedTime();
30 using namespace QtCollider
;
33 int QtCollider::run(int argc
, char** argv
) {
34 QtCollider::LangClient
app("sclang");
35 return app
.run(argc
, argv
);
38 LangClient::LangClient( const char* name
)
39 : SC_TerminalClient( name
)
43 void LangClient::doInput()
45 qcDebugMsg(2, "input");
48 QApplication::removePostedEvents( this, Event_SCRequest_Input
);
52 void LangClient::doSchedule()
54 qcDebugMsg(2, "tick");
60 next
= tickLocked( &t
);
61 QApplication::removePostedEvents( this, Event_SCRequest_Sched
);
69 int ti
= qMax(0,qCeil(t
));
70 qcDebugMsg(2, QString("next at %1").arg(ti
) );
71 appClockTimer
.start( ti
, this );
78 void LangClient::commandLoop()
81 QcApplication::instance()->exec();
84 void LangClient::daemonLoop()
89 void LangClient::onScheduleChanged()
91 QApplication::postEvent( this, new SCRequestEvent( Event_SCRequest_Sched
) );
94 void LangClient::onInput()
96 QApplication::postEvent( this, new SCRequestEvent( Event_SCRequest_Input
) );
99 void LangClient::onQuit( int exitCode
)
101 QApplication::postEvent( this,
102 new SCRequestEvent( Event_SCRequest_Quit
, exitCode
) );
105 void LangClient::onRecompileLibrary()
107 QApplication::postEvent( this, new SCRequestEvent( Event_SCRequest_Recompile
) );
110 void LangClient::customEvent( QEvent
*e
)
112 int type
= e
->type();
114 case Event_SCRequest_Input
:
117 case Event_SCRequest_Sched
:
120 case Event_SCRequest_Quit
:
122 int code
= static_cast<SCRequestEvent
*>(e
)->data
.toInt();
123 qcDebugMsg( 1, QString("Quit requested with code %1").arg(code
) );
127 case Event_SCRequest_Recompile
:
134 void LangClient::timerEvent( QTimerEvent
*e
)
136 if( e
->timerId() == appClockTimer
.timerId() ) doSchedule();