// ----------------------------------------------------------- // Is called if user clicked on component text of if return is // pressed in the component text QLineEdit. // In "view->MAx3" is the number of the current property. void QucsApp::slotApplyCompText() { QString s; QFont f = QucsSettings.font; Schematic *Doc = (Schematic*)DocumentTab->currentPage(); f.setPointSizeFloat( Doc->Scale * float(f.pointSize()) ); editText->setFont(f); Property *pp = 0; Component *pc = (Component*)view->focusElement; if(!pc) return; // should never happen view->MAx1 = pc->cx + pc->tx; view->MAy1 = pc->cy + pc->ty; int z, n=0; // "n" is number of property on screen pp = pc->Props.first(); for(z=view->MAx3; z>0; z--) { // calculate "n" if(!pp) { // should never happen editText->setHidden(true); return; } if(pp->display) n++; // is visible ? pp = pc->Props.next(); } pp = 0; if(view->MAx3 > 0) pp = pc->Props.at(view->MAx3-1); // current property else s = pc->Name; if(!editText->isHidden()) { // is called the first time ? // no -> apply value to current property if(view->MAx3 == 0) { // component name ? Component *pc2; if(!editText->text().isEmpty()) if(pc->Name != editText->text()) { for(pc2 = Doc->Components->first(); pc2!=0; pc2 = Doc->Components->next()) if(pc2->Name == editText->text()) break; // found component with the same name ? if(!pc2) { pc->Name = editText->text(); Doc->setChanged(true, true); // only one undo state } } } else if(pp) { // property was applied if(pp->Value != editText->text()) { pp->Value = editText->text(); Doc->recreateComponent(pc); // because of "Num" and schematic symbol Doc->setChanged(true, true); // only one undo state } } n++; // next row on screen (view->MAx3)++; // next property pp = pc->Props.at(view->MAx3-1); // search for next property Doc->viewport()->update(); view->drawn = false; if(!pp) { // was already last property ? editText->setHidden(true); return; } while(!pp->display) { // search for next visible property (view->MAx3)++; // next property pp = pc->Props.next(); if(!pp) { // was already last property ? editText->setHidden(true); return; } } } // avoid seeing the property text behind the line edit if(pp) // Is it first property or component name ? s = pp->Value; editText->setMinimumWidth(editText->fontMetrics().width(s)+4); Doc->contentsToViewport(int(Doc->Scale * float(view->MAx1 - Doc->ViewX1)), int(Doc->Scale * float(view->MAy1 - Doc->ViewY1)), view->MAx2, view->MAy2); editText->setReadOnly(false); if(pp) { // is it a property ? s = pp->Value; view->MAx2 += editText->fontMetrics().width(pp->Name+"="); if(pp->Description.find('[') >= 0) // is selection list ? editText->setReadOnly(true); Expr_CompProp.setPattern("[^\"]*"); if(!pc->showName) n--; } else // it is the component name Expr_CompProp.setPattern("[\\w_]+"); Val_CompProp.setRegExp(Expr_CompProp); editText->setValidator(&Val_CompProp); z = editText->fontMetrics().lineSpacing(); view->MAy2 += n*z; editText->setText(s); editText->setPaletteBackgroundColor(QucsSettings.BGColor); editText->setFocus(); editText->selectAll(); editText->reparent(Doc->viewport(), 0, QPoint(view->MAx2, view->MAy2), true); }