ExprEditor::ExprEditor(QWidget* parent,ExprControlCollection* controls) : QWidget(parent),_updatingText(0),errorHeight(0) { // timers controlRebuildTimer=new QTimer(); previewTimer=new QTimer(); // title and minimum size setWindowTitle("Expression Editor"); setMinimumHeight(100); // expression controls, we need for signal connections this->controls = controls; // make layout QVBoxLayout* exprAndErrors=new QVBoxLayout; exprAndErrors->setMargin(0); setLayout(exprAndErrors); // create text editor widget exprTe = new ExprTextEdit(this); exprTe->setMinimumHeight(50); // calibrate the font size int fontsize = 12; while (QFontMetrics(QFont("Liberation Sans",fontsize)).width("abcdef")<38 && fontsize<20) fontsize++; while (QFontMetrics(QFont("Liberation Sans",fontsize)).width("abcdef")>44 && fontsize>3) fontsize--; exprTe->setFont(QFont("Liberation Sans",fontsize)); exprAndErrors->addWidget(exprTe); // create error widget errorWidget=new QListWidget(); errorWidget->setSelectionMode(QAbstractItemView::SingleSelection); errorWidget->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Maximum)); connect(errorWidget,SIGNAL(itemSelectionChanged()),SLOT(selectError())); clearErrors(); exprAndErrors->addWidget(errorWidget); // wire up signals connect(exprTe, SIGNAL(applyShortcut()), SLOT(sendApply())); connect(exprTe, SIGNAL(nextError()), SLOT(nextError())); connect(exprTe, SIGNAL(textChanged()), SLOT(exprChanged())); connect(controls,SIGNAL(controlChanged(int)),SLOT(controlChanged(int))); connect(controls,SIGNAL(insertString(const std::string&)),SLOT(insertStr(const std::string&))); connect(controlRebuildTimer, SIGNAL(timeout()), SLOT(rebuildControls())); connect(previewTimer, SIGNAL(timeout()), SLOT(sendPreview())); }
ExprShortEdit::ExprShortEdit(QWidget* parent, bool expanded, bool applyOnSelect) : QWidget(parent), _dialog(0), _context(""), _searchPath(""), _applyOnSelect(applyOnSelect) { controlRebuildTimer = new QTimer(this); vboxlayout = new QVBoxLayout(); vboxlayout->setSpacing(2); vboxlayout->setContentsMargins(0, 0, 0, 0); hboxlayout = new QHBoxLayout(); hboxlayout->setSpacing(2); hboxlayout->setContentsMargins(0, 0, 0, 0); edit = new ExprShortTextEdit(parent); error = new QLabel(); error->setPixmap(QPixmap(stop_xpm)); error->setHidden(true); expandButton = new QToolButton(); expandButton->setFixedSize(20, 20); expandButton->setFocusPolicy(Qt::NoFocus); if (expanded) expandButton->setArrowType(Qt::DownArrow); else expandButton->setArrowType(Qt::RightArrow); connect(expandButton, SIGNAL(clicked()), SLOT(expandPressed())); QToolButton* button = new QToolButton(); editDetail = button; button->setIcon(QIcon(QPixmap(sum_xpm))); hboxlayout->addWidget(expandButton); hboxlayout->addWidget(edit); hboxlayout->addWidget(error); hboxlayout->addWidget(editDetail); editDetail->setFixedSize(20, 20); connect(editDetail, SIGNAL(clicked()), SLOT(detailPressed())); connect(edit, SIGNAL(editingFinished()), SLOT(textFinished())); vboxlayout->addLayout(hboxlayout); controls = 0; if (expanded) expandPressed(); setLayout(vboxlayout); connect(controlRebuildTimer, SIGNAL(timeout()), SLOT(rebuildControls())); }