variablechooser.cpp 3.92 KB
Newer Older
con's avatar
con committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
/**************************************************************************
**
** This file is part of Qt Creator
**
** Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
**
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** No Commercial Usage
**
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the Technology Preview License Agreement accompanying
** this package.
**
** GNU Lesser General Public License Usage
**
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain additional
** rights.  These rights are described in the Nokia Qt LGPL Exception
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
**
** If you have questions regarding the use of this file, please contact
** Nokia at qt-info@nokia.com.
**
**************************************************************************/

#include "variablechooser.h"
#include "ui_variablechooser.h"
#include "variablemanager.h"

using namespace Core;

VariableChooser::VariableChooser(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::VariableChooser),
    m_lineEdit(0),
    m_textEdit(0),
    m_plainTextEdit(0)
{
    setAttribute(Qt::WA_DeleteOnClose);
    ui->setupUi(this);
    m_defaultDescription = ui->variableDescription->text();
    ui->variableList->setAttribute(Qt::WA_MacSmallSize);
    ui->variableList->setAttribute(Qt::WA_MacShowFocusRect, false);
    ui->variableDescription->setAttribute(Qt::WA_MacSmallSize);
    setWindowFlags(Qt::Tool | Qt::WindowStaysOnTopHint);
    setFocusProxy(ui->variableList);

    VariableManager *vm = VariableManager::instance();
    foreach (const QString &variable, vm->variables()) {
        ui->variableList->addItem(variable);
    }

    connect(ui->variableList, SIGNAL(currentTextChanged(QString)),
            this, SLOT(updateDescription(QString)));
    connect(ui->variableList, SIGNAL(itemActivated(QListWidgetItem*)),
            this, SLOT(handleItemActivated(QListWidgetItem*)));
    connect(qApp, SIGNAL(focusChanged(QWidget*,QWidget*)),
            this, SLOT(updateCurrentEditor(QWidget*)));
    updateCurrentEditor(qApp->focusWidget());
}

VariableChooser::~VariableChooser()
{
    delete ui;
}

void VariableChooser::updateDescription(const QString &variable)
{
    if (variable.isNull())
        ui->variableDescription->setText(m_defaultDescription);
    else
        ui->variableDescription->setText(VariableManager::instance()->variableDescription(variable));
}

void VariableChooser::updateCurrentEditor(QWidget *widget)
{
    if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(widget)) {
        m_lineEdit = lineEdit;
        m_textEdit = 0;
        m_plainTextEdit = 0;
    } else if (QTextEdit *textEdit = qobject_cast<QTextEdit *>(widget)) {
        m_lineEdit = 0;
        m_textEdit = textEdit;
        m_plainTextEdit = 0;
    } else if (QPlainTextEdit *plainTextEdit = qobject_cast<QPlainTextEdit *>(widget)) {
        m_lineEdit = 0;
        m_textEdit = 0;
        m_plainTextEdit = plainTextEdit;
    }
}

void VariableChooser::handleItemActivated(QListWidgetItem *item)
{
    if (item)
        insertVariable(item->text());
}

void VariableChooser::insertVariable(const QString &variable)
{
    const QString &text = QLatin1String("${") + variable + QLatin1String("}");
    if (m_lineEdit) {
        m_lineEdit->insert(text);
    } else if (m_textEdit) {
        m_textEdit->insertPlainText(text);
    } else if (m_plainTextEdit) {
        m_plainTextEdit->insertPlainText(text);
    }
}