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"
25 #include "QObjectProxy.h"
27 #include <PyrKernel.h>
33 extern double elapsedTime();
35 using namespace QtCollider
;
38 int QtCollider::run(int argc
, char** argv
) {
39 QtCollider::LangClient
app("sclang");
40 return app
.run(argc
, argv
);
43 LangClient::LangClient( const char* name
)
44 : SC_TerminalClient( name
)
48 void LangClient::doInput()
50 qcDebugMsg(2, "input");
53 QApplication::removePostedEvents( this, Event_SCRequest_Input
);
57 void LangClient::doSchedule()
59 qcDebugMsg(2, "tick");
65 next
= tickLocked( &t
);
66 QApplication::removePostedEvents( this, Event_SCRequest_Sched
);
74 int ti
= qMax(0,qCeil(t
));
75 qcDebugMsg(2, QString("next at %1").arg(ti
) );
76 appClockTimer
.start( ti
, this );
83 void LangClient::commandLoop()
86 QcApplication::instance()->exec();
89 void LangClient::daemonLoop()
94 void LangClient::sendSignal( Signal sig
)
96 QtCollider::EventType type
;
100 type
= Event_SCRequest_Input
; break;
102 type
= Event_SCRequest_Sched
; break;
104 type
= Event_SCRequest_Recompile
; break;
106 type
= Event_SCRequest_Stop
; break;
111 QApplication::postEvent( this, new SCRequestEvent(type
) );
114 void LangClient::onQuit( int exitCode
)
116 QApplication::postEvent( this,
117 new SCRequestEvent( Event_SCRequest_Quit
, exitCode
) );
120 void LangClient::onLibraryShutdown()
122 QWidgetList windows
= QApplication::topLevelWidgets();
123 Q_FOREACH( QWidget
*w
, windows
)
127 void LangClient::customEvent( QEvent
*e
)
129 int type
= e
->type();
131 case Event_SCRequest_Input
:
134 case Event_SCRequest_Sched
:
137 case Event_SCRequest_Stop
:
140 case Event_SCRequest_Quit
:
142 int code
= static_cast<SCRequestEvent
*>(e
)->data
.toInt();
143 qcDebugMsg( 1, QString("Quit requested with code %1").arg(code
) );
147 case Event_SCRequest_Recompile
:
154 void LangClient::timerEvent( QTimerEvent
*e
)
156 if( e
->timerId() == appClockTimer
.timerId() ) doSchedule();