|
Packit |
1c1d7e |
/******************************************************************************
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Copyright (C) 1997-2015 by Dimitri van Heesch.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
* Permission to use, copy, modify, and distribute this software and its
|
|
Packit |
1c1d7e |
* documentation under the terms of the GNU General Public License is hereby
|
|
Packit |
1c1d7e |
* granted. No representations are made about the suitability of this software
|
|
Packit |
1c1d7e |
* for any purpose. It is provided "as is" without express or implied warranty.
|
|
Packit |
1c1d7e |
* See the GNU General Public License for more details.
|
|
Packit |
1c1d7e |
*
|
|
Packit |
1c1d7e |
*/
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include "inputstrlist.h"
|
|
Packit |
1c1d7e |
#include "helplabel.h"
|
|
Packit |
1c1d7e |
#include "doxywizard.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <QToolBar>
|
|
Packit |
1c1d7e |
#include <QGridLayout>
|
|
Packit |
1c1d7e |
#include <QLineEdit>
|
|
Packit |
1c1d7e |
#include <QListWidget>
|
|
Packit |
1c1d7e |
#include <QFileInfo>
|
|
Packit |
1c1d7e |
#include <QFileDialog>
|
|
Packit |
1c1d7e |
#include <QTextStream>
|
|
Packit |
1c1d7e |
#include <QTextCodec>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
InputStrList::InputStrList( QGridLayout *layout,int &row,
|
|
Packit |
1c1d7e |
const QString & id,
|
|
Packit |
1c1d7e |
const QStringList &sl, ListMode lm,
|
|
Packit |
1c1d7e |
const QString & docs)
|
|
Packit |
1c1d7e |
: m_default(sl), m_strList(sl), m_docs(docs), m_id(id)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lab = new HelpLabel( id );
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_le = new QLineEdit;
|
|
Packit |
1c1d7e |
m_le->clear();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QToolBar *toolBar = new QToolBar;
|
|
Packit |
1c1d7e |
toolBar->setIconSize(QSize(24,24));
|
|
Packit |
1c1d7e |
m_add = toolBar->addAction(QIcon(QString::fromLatin1(":/images/add.png")),QString(),
|
|
Packit |
1c1d7e |
this,SLOT(addString()));
|
|
Packit |
1c1d7e |
m_add->setToolTip(tr("Add item"));
|
|
Packit |
1c1d7e |
m_del = toolBar->addAction(QIcon(QString::fromLatin1(":/images/del.png")),QString(),
|
|
Packit |
1c1d7e |
this,SLOT(delString()));
|
|
Packit |
1c1d7e |
m_del->setToolTip(tr("Delete selected item"));
|
|
Packit |
1c1d7e |
m_upd = toolBar->addAction(QIcon(QString::fromLatin1(":/images/refresh.png")),QString(),
|
|
Packit |
1c1d7e |
this,SLOT(updateString()));
|
|
Packit |
1c1d7e |
m_upd->setToolTip(tr("Update selected item"));
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_lb = new QListWidget;
|
|
Packit |
1c1d7e |
//m_lb->setMinimumSize(400,100);
|
|
Packit |
1c1d7e |
foreach (QString s, m_strList) m_lb->addItem(s);
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_brFile=0;
|
|
Packit |
1c1d7e |
m_brDir=0;
|
|
Packit |
1c1d7e |
if (lm!=ListString)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (lm&ListFile)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_brFile = toolBar->addAction(QIcon(QString::fromLatin1(":/images/file.png")),QString(),
|
|
Packit |
1c1d7e |
this,SLOT(browseFiles()));
|
|
Packit |
1c1d7e |
m_brFile->setToolTip(tr("Browse to a file"));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (lm&ListDir)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_brDir = toolBar->addAction(QIcon(QString::fromLatin1(":/images/folder.png")),QString(),
|
|
Packit |
1c1d7e |
this,SLOT(browseDir()));
|
|
Packit |
1c1d7e |
m_brDir->setToolTip(tr("Browse to a folder"));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
QHBoxLayout *rowLayout = new QHBoxLayout;
|
|
Packit |
1c1d7e |
rowLayout->addWidget( m_le );
|
|
Packit |
1c1d7e |
rowLayout->addWidget( toolBar );
|
|
Packit |
1c1d7e |
layout->addWidget( m_lab, row,0 );
|
|
Packit |
1c1d7e |
layout->addLayout( rowLayout, row,1,1,2 );
|
|
Packit |
1c1d7e |
layout->addWidget( m_lb, row+1,1,1,2 );
|
|
Packit |
1c1d7e |
row+=2;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
m_value = m_strList;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
connect(m_le, SIGNAL(returnPressed()),
|
|
Packit |
1c1d7e |
this, SLOT(addString()) );
|
|
Packit |
1c1d7e |
connect(m_lb, SIGNAL(currentTextChanged(const QString &)),
|
|
Packit |
1c1d7e |
this, SLOT(selectText(const QString &)));
|
|
Packit |
1c1d7e |
connect( m_lab, SIGNAL(enter()), SLOT(help()) );
|
|
Packit |
1c1d7e |
connect( m_lab, SIGNAL(reset()), SLOT(reset()) );
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::help()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
showHelp(this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::addString()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!m_le->text().isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lb->addItem(m_le->text());
|
|
Packit |
1c1d7e |
m_strList.append(m_le->text());
|
|
Packit |
1c1d7e |
m_value = m_strList;
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
emit changed();
|
|
Packit |
1c1d7e |
m_le->clear();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::delString()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_lb->currentRow()!=-1)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int itemIndex = m_lb->currentRow();
|
|
Packit |
1c1d7e |
delete m_lb->currentItem();
|
|
Packit |
1c1d7e |
m_strList.removeAt(itemIndex);
|
|
Packit |
1c1d7e |
m_value = m_strList;
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
emit changed();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::updateString()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_lb->currentRow()!=-1 && !m_le->text().isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lb->currentItem()->setText(m_le->text());
|
|
Packit |
1c1d7e |
m_strList.insert(m_lb->currentRow(),m_le->text());
|
|
Packit |
1c1d7e |
m_strList.removeAt(m_lb->currentRow()+1);
|
|
Packit |
1c1d7e |
m_value = m_strList;
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
emit changed();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::selectText(const QString &s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_le->setText(s);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::setEnabled(bool state)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lab->setEnabled(state);
|
|
Packit |
1c1d7e |
m_le->setEnabled(state);
|
|
Packit |
1c1d7e |
m_add->setEnabled(state);
|
|
Packit |
1c1d7e |
m_del->setEnabled(state);
|
|
Packit |
1c1d7e |
m_upd->setEnabled(state);
|
|
Packit |
1c1d7e |
m_lb->setEnabled(state);
|
|
Packit |
1c1d7e |
if (m_brFile) m_brFile->setEnabled(state);
|
|
Packit |
1c1d7e |
if (m_brDir) m_brDir->setEnabled(state);
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::browseFiles()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString path = QFileInfo(MainWindow::instance().configFileName()).path();
|
|
Packit |
1c1d7e |
QStringList fileNames = QFileDialog::getOpenFileNames();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!fileNames.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QStringList::Iterator it;
|
|
Packit |
1c1d7e |
for ( it= fileNames.begin(); it != fileNames.end(); ++it )
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString fileName;
|
|
Packit |
1c1d7e |
QDir dir(path);
|
|
Packit |
1c1d7e |
if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fileName = dir.relativeFilePath(*it);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (fileName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fileName = *it;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_lb->addItem(fileName);
|
|
Packit |
1c1d7e |
m_strList.append(fileName);
|
|
Packit |
1c1d7e |
m_value = m_strList;
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
emit changed();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_le->setText(m_strList[0]);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::browseDir()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString path = QFileInfo(MainWindow::instance().configFileName()).path();
|
|
Packit |
1c1d7e |
QString dirName = QFileDialog::getExistingDirectory();
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (!dirName.isNull())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QDir dir(path);
|
|
Packit |
1c1d7e |
if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
dirName = dir.relativeFilePath(dirName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (dirName.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
dirName=QString::fromLatin1(".");
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_lb->addItem(dirName);
|
|
Packit |
1c1d7e |
m_strList.append(dirName);
|
|
Packit |
1c1d7e |
m_value = m_strList;
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
emit changed();
|
|
Packit |
1c1d7e |
m_le->setText(dirName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::setValue(const QStringList &sl)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_le->clear();
|
|
Packit |
1c1d7e |
m_lb->clear();
|
|
Packit |
1c1d7e |
m_strList = sl;
|
|
Packit |
1c1d7e |
for (int i=0;i
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lb->addItem(m_strList[i].trimmed());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QVariant &InputStrList::value()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return m_value;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::update()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setValue(m_value.toStringList());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::updateDefault()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_strList==m_default || !m_lab->isEnabled())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lab->setText(QString::fromLatin1("<qt>")+m_id+QString::fromLatin1("
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lab->setText(QString::fromLatin1("<qt><font color='red'>")+m_id+QString::fromLatin1("</font></qt>"));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::reset()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setValue(m_default);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputStrList::writeValue(QTextStream &t,QTextCodec *codec)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
bool first=true;
|
|
Packit |
1c1d7e |
foreach (QString s, m_strList)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (!first)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
t << " \\" << endl;
|
|
Packit |
1c1d7e |
t << " ";
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
first=false;
|
|
Packit |
1c1d7e |
writeStringValue(t,codec,s);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|