LangStatusBox::LangStatusBox(ScProcess *lang, QWidget *parent): StatusBox(parent) { mLabel = new StatusLabel; QHBoxLayout *layout = new QHBoxLayout; layout->setContentsMargins(0,0,0,0); layout->addWidget(mLabel); setLayout(layout); addAction( lang->action(ScProcess::ToggleRunning) ); addAction( lang->action(ScProcess::Restart) ); addAction( lang->action(ScProcess::RecompileClassLibrary) ); connect( lang, SIGNAL( stateChanged(QProcess::ProcessState) ), this, SLOT( onInterpreterStateChanged(QProcess::ProcessState) ) ); onInterpreterStateChanged( lang->state() ); }
MainWindow::MainWindow(Main * main) : mMain(main) { setCorner( Qt::BottomLeftCorner, Qt::LeftDockWidgetArea ); // Construct status bar: mLangStatus = new StatusLabel(); mLangStatus->setText("Inactive"); mSynthStatus = new StatusLabel(); mSynthStatus->setText("Inactive"); QStatusBar *status = statusBar(); status->addPermanentWidget( new QLabel("Interpreter:") ); status->addPermanentWidget( mLangStatus ); status->addPermanentWidget( new QLabel("Synth:") ); status->addPermanentWidget( mSynthStatus ); // Code editor mEditors = new MultiEditor(main); // Docks mDocListDock = new DocumentsDock(main->documentManager(), this); mPostDock = new PostDock(this); // Layout // use a layout for tool widgets, to provide for separate margin control QVBoxLayout *tool_box = new QVBoxLayout; tool_box->addWidget(cmdLine()); tool_box->setContentsMargins(5,2,5,2); QVBoxLayout *center_box = new QVBoxLayout; center_box->setContentsMargins(0,0,0,0); center_box->setSpacing(0); center_box->addWidget(mEditors); center_box->addLayout(tool_box); QWidget *central = new QWidget; central->setLayout(center_box); setCentralWidget(central); addDockWidget(Qt::LeftDockWidgetArea, mDocListDock); addDockWidget(Qt::BottomDockWidgetArea, mPostDock); // A system for easy evaluation of pre-defined code: connect(&mCodeEvalMapper, SIGNAL(mapped(QString)), this, SIGNAL(evaluateCode(QString))); connect(this, SIGNAL(evaluateCode(QString,bool)), main->scProcess(), SLOT(evaluateCode(QString,bool))); // Interpreter: post output connect(main->scProcess(), SIGNAL( scPost(QString) ), mPostDock->mPostWindow, SLOT( post(QString) ) ); // Interpreter: monitor running state connect(main->scProcess(), SIGNAL( stateChanged(QProcess::ProcessState) ), this, SLOT( onInterpreterStateChanged(QProcess::ProcessState) ) ); // Interpreter: forward status messages connect(main->scProcess(), SIGNAL(statusMessage(const QString&)), status, SLOT(showMessage(const QString&))); // Document list interaction connect(mDocListDock->list(), SIGNAL(clicked(Document*)), mEditors, SLOT(setCurrent(Document*))); connect(mEditors, SIGNAL(currentChanged(Document*)), mDocListDock->list(), SLOT(setCurrent(Document*)), Qt::QueuedConnection); createMenus(); QIcon icon; icon.addFile(":/icons/sc-cube-128"); icon.addFile(":/icons/sc-cube-48"); icon.addFile(":/icons/sc-cube-32"); icon.addFile(":/icons/sc-cube-16"); QApplication::setWindowIcon(icon); }