예제 #1
0
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()));
}
예제 #2
0
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()));
}