void MFXAddEditTypedTable::setItemFromControl_NoRelease(FXint r, FXint c, FXWindow* control) { register FXTableItem* item = cells[r * ncols + c]; if (item == NULL) { return; } switch (getCellType(c)) { case CT_UNDEFINED: case CT_STRING: item->setFromControl(control); break; case CT_REAL: item->setText(toString(static_cast<FXRealSpinDial*>(control)->getValue()).c_str()); break; case CT_INT: item->setText(toString((int) static_cast<FXRealSpinDial*>(control)->getValue()).c_str()); break; case CT_BOOL: // return myBoolEditor; case CT_ENUM: // return myEnumEditor; default: throw 1; } EditedTableItem edited; edited.item = item; edited.row = r; edited.col = c; edited.updateOnly = true; if (target) { if (!target->handle(this, FXSEL(SEL_CHANGED, ID_TEXT_CHANGED), (void*) &edited)) { // !!! item->setText(myPreviousText); } } }
void MFXAddEditTypedTable::setItemFromControl(FXint r, FXint c, FXWindow* control) { register FXTableItem* item = cells[r * ncols + c]; if (item == NULL) { cells[r * ncols + c] = item = createItem("", NULL, NULL); if (isItemSelected(r, c)) { item->setSelected(FALSE); } } switch (getCellType(c)) { case CT_UNDEFINED: case CT_STRING: item->setFromControl(control); break; case CT_REAL: item->setText(toString(static_cast<FXRealSpinDial*>(control)->getValue()).c_str()); break; case CT_INT: item->setText(toString((int) static_cast<FXRealSpinDial*>(control)->getValue()).c_str()); break; case CT_BOOL: // return myBoolEditor; case CT_ENUM: // return myEnumEditor; default: throw 1; } // current.row = -1; // current.col = -1; EditedTableItem edited; edited.item = item; edited.row = r; edited.col = c; edited.updateOnly = false; killSelection(true); bool accepted = true; if (target) { if (!target->handle(this, FXSEL(SEL_CHANGED, ID_TEXT_CHANGED), (void*) &edited)) { accepted = false; // !!! item->setText(myPreviousText); } } if (accepted) { if (edited.row == getNumRows() - 1) { insertRows(getNumRows(), 1, true); for (int i = 0; i < getNumColumns(); i++) { setItemText(getNumRows() - 1, i, ""); setItemJustify(getNumRows() - 1, i, JUSTIFY_CENTER_X); } } } mode = MOUSE_NONE; }
FXWindow* MFXAddEditTypedTable::getControlForItem(FXint r, FXint c) { register FXTableItem* item = cells[r * ncols + c]; if (item == NULL) { return 0; // cells[r * ncols + c] = item = createItem("", NULL, NULL); // if (isItemSelected(r, c)) { // item->setSelected(FALSE); // } } delete editor; editor = NULL; switch (getCellType(c)) { case CT_UNDEFINED: case CT_STRING: { register FXTextField* field; register FXuint justify = 0; field = new FXTextField(this, 1, NULL, 0, TEXTFIELD_ENTER_ONLY, 0, 0, 0, 0, getMarginLeft(), getMarginRight(), getMarginTop(), getMarginBottom()); // !!! if(state&LEFT) justify|=JUSTIFY_LEFT; // !!! if(state&RIGHT) justify|=JUSTIFY_RIGHT; // !!! if(state&TOP) justify|=JUSTIFY_TOP; // !!! if(state&BOTTOM) justify|=JUSTIFY_BOTTOM; field->create(); field->setJustify(justify); field->setFont(getFont()); field->setBackColor(getBackColor()); field->setTextColor(getTextColor()); field->setSelBackColor(getSelBackColor()); field->setSelTextColor(getSelTextColor()); field->setText(item->getText()); field->selectAll(); return field; } case CT_REAL: // return myNumberEditor; case CT_INT: { register FXRealSpinDial* field; //register FXuint justify=0; field = new FXRealSpinDial(this, 1, NULL, 0, TEXTFIELD_ENTER_ONLY, 0, 0, 0, 0, getMarginLeft(), getMarginRight(), getMarginTop(), getMarginBottom()); // !!! if(state&LEFT) justify|=JUSTIFY_LEFT; // !!! if(state&RIGHT) justify|=JUSTIFY_RIGHT; // !!! if(state&TOP) justify|=JUSTIFY_TOP; // !!! if(state&BOTTOM) justify|=JUSTIFY_BOTTOM; field->create(); // field->setJustify(justify); field->setFont(getFont()); field->setBackColor(getBackColor()); field->setTextColor(getTextColor()); field->setSelBackColor(getSelBackColor()); field->setSelTextColor(getSelTextColor()); NumberCellParams p = getNumberCellParams(c); if (p.format != "undefined") { field->setFormatString((char*) p.format.c_str()); field->setIncrements(p.steps1, p.steps2, p.steps3); field->setRange(p.min, p.max); } try { if (getCellType(c) == CT_REAL) { field->setValue(TplConvert::_2SUMOReal(item->getText().text())); } else { field->setValue(TplConvert::_2int(item->getText().text())); } } catch (NumberFormatException&) { field->setValue(0); } field->selectAll(); return field; } case CT_BOOL: // return myBoolEditor; case CT_ENUM: // return myEnumEditor; default: throw 1; } }
void Mesh::buildInternalFaces() { if(faces_built) { return; } faces_built = true; //build naive list of faces int num_naive_faces{0}; for (auto i : IRange(0, nCells())) { num_naive_faces += numCellFaces(getCellType(i)); } internal_faces_.clear(); internal_faces_.reserve(num_naive_faces); std::vector<int> cell_nodes(8); for (auto i : IRange(0, nCells())) { getCellNodes(i, cell_nodes); auto ct = getCellType(i); for(auto f : IRange(0, numCellFaces(ct))) { auto F = CellFace::canonicalCellFace(ct,f); for(auto n : IRange(0,F.n_nodes)) { F.nodes[n] = cell_nodes[F.nodes[n]]; } F.left = i; F.left_flocal = f; F.orient(); internal_faces_.push_back(F); } } std::sort(internal_faces_.begin(), internal_faces_.end(), [](const CellFace &L, const CellFace &R) { return L.nodes < R.nodes; } ); for (auto i : IRange(1, static_cast<int>(internal_faces_.size()))) { auto &F = internal_faces_[i]; auto &Fprev = internal_faces_[i - 1]; if (F.nodes == Fprev.nodes) { Fprev.left = std::max(Fprev.left, F.left); Fprev.right = std::max(Fprev.right, F.right); Fprev.left_flocal = std::max(Fprev.left_flocal, F.left_flocal); Fprev.right_flocal = std::max(Fprev.right_flocal, F.right_flocal); Fprev.left_rot = std::max(Fprev.left_rot, F.left_rot); Fprev.right_rot = std::max(Fprev.right_rot, F.right_rot); } } auto new_end = std::unique(internal_faces_.begin(), internal_faces_.end(), [](const CellFace &L, const CellFace &R) { return L.nodes == R.nodes; }); auto new_size = std::distance(internal_faces_.begin(), new_end); internal_faces_.resize(new_size); internal_faces_.shrink_to_fit(); for (auto i : IRange(0, static_cast<int>(internal_faces_.size()))) { if (internal_faces_[i].left < 0 || internal_faces_[i].right < 0) { boundary_face_idxs_.push_back(i); } } }