/** * Stop(): Stops the negotiator controller; requests the working thread * to join the main process by adding 'q' to the input buffer */ void Negotiator::Stop() { //push a 'q' letter to stop thread execution AppendInput('q'); //wait for the entire input buffer to be processed std::cout << "Program terminated - waiting for summary to be generated ..." << std::endl; if (m_workThread.joinable()) m_workThread.join(); }
GroupCell::GroupCell(int groupType, wxString initString) : MathCell() { m_input = NULL; m_output = NULL; m_hiddenTree = NULL; m_hiddenTreeParent = NULL; m_outputRect.x = -1; m_outputRect.y = -1; m_outputRect.width = 0; m_outputRect.height = 0; m_group = this; m_forceBreakLine = true; m_breakLine = true; m_type = MC_TYPE_GROUP; m_indent = MC_GROUP_LEFT_INDENT; m_hide = false; m_working = false; m_groupType = groupType; m_lastInOutput = NULL; m_appendedCells = NULL; // set up cell depending on groupType, so we have a working cell if (groupType != GC_TYPE_PAGEBREAK) { if (groupType == GC_TYPE_CODE) m_input = new TextCell(EMPTY_INPUT_LABEL); else m_input = new TextCell(wxT(" ")); m_input->SetType(MC_TYPE_MAIN_PROMPT); } bool match = true; bool insertAns = false; wxConfig::Get()->Read(wxT("matchParens"), &match); wxConfig::Get()->Read(wxT("insertAns"), &insertAns); EditorCell *editor = new EditorCell(); editor->SetMatchParens(match); editor->SetInsertAns(insertAns); switch (groupType) { case GC_TYPE_CODE: editor->SetType(MC_TYPE_INPUT); AppendInput(editor); break; case GC_TYPE_TEXT: m_input->SetType(MC_TYPE_TEXT); editor->SetType(MC_TYPE_TEXT); AppendInput(editor); break; case GC_TYPE_TITLE: m_input->SetType(MC_TYPE_TITLE); editor->SetType(MC_TYPE_TITLE); AppendInput(editor); break; case GC_TYPE_SECTION: m_input->SetType(MC_TYPE_SECTION); editor->SetType(MC_TYPE_SECTION); AppendInput(editor); break; case GC_TYPE_SUBSECTION: m_input->SetType(MC_TYPE_SUBSECTION); editor->SetType(MC_TYPE_SUBSECTION); AppendInput(editor); break; case GC_TYPE_SUBSUBSECTION: m_input->SetType(MC_TYPE_SUBSUBSECTION); editor->SetType(MC_TYPE_SUBSUBSECTION); AppendInput(editor); break; case GC_TYPE_IMAGE: m_input->SetType(MC_TYPE_TEXT); editor->SetType(MC_TYPE_TEXT); editor->SetValue(wxEmptyString); AppendInput(editor); break; default: delete editor; editor = NULL; break; } if (editor != NULL) editor->SetValue(initString); // when creating an image cell, if a string is provided // it loads an image (without deleting it) if ((groupType == GC_TYPE_IMAGE) && (initString.Length() > 0)) { ImgCell *ic = new ImgCell(initString, false); AppendOutput(ic); } SetParent(this); }