|
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 "inputstring.h"
|
|
Packit |
1c1d7e |
#include "helplabel.h"
|
|
Packit |
1c1d7e |
#include "doxywizard.h"
|
|
Packit |
1c1d7e |
#include "config.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
#include <QComboBox>
|
|
Packit |
1c1d7e |
#include <QLineEdit>
|
|
Packit |
1c1d7e |
#include <QGridLayout>
|
|
Packit |
1c1d7e |
#include <QWheelEvent>
|
|
Packit |
1c1d7e |
#include <QToolBar>
|
|
Packit |
1c1d7e |
#include <QFileInfo>
|
|
Packit |
1c1d7e |
#include <QFileDialog>
|
|
Packit |
1c1d7e |
#include <QTextCodec>
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class NoWheelComboBox : public QComboBox
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
protected:
|
|
Packit |
1c1d7e |
void wheelEvent(QWheelEvent *e)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
e->ignore();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
InputString::InputString( QGridLayout *layout,int &row,
|
|
Packit |
1c1d7e |
const QString & id, const QString &s,
|
|
Packit |
1c1d7e |
StringMode m, const QString &docs,
|
|
Packit |
1c1d7e |
const QString &absPath )
|
|
Packit |
1c1d7e |
: m_default(s), m_sm(m), m_index(0), m_docs(docs), m_id(id),
|
|
Packit |
1c1d7e |
m_absPath(absPath==QString::fromLatin1("1"))
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lab = new HelpLabel(id);
|
|
Packit |
1c1d7e |
if (m==StringFixed)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
layout->addWidget( m_lab, row, 0 );
|
|
Packit |
1c1d7e |
m_com = new NoWheelComboBox;
|
|
Packit |
1c1d7e |
layout->addWidget( m_com, row, 1, 1, 3, Qt::AlignLeft );
|
|
Packit |
1c1d7e |
m_le=0;
|
|
Packit |
1c1d7e |
m_br=0;
|
|
Packit |
1c1d7e |
m_im=0;
|
|
Packit |
1c1d7e |
row++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
layout->addWidget( m_lab, row, 0 );
|
|
Packit |
1c1d7e |
m_le = new QLineEdit;
|
|
Packit |
1c1d7e |
m_le->setText( s );
|
|
Packit |
1c1d7e |
m_im = 0;
|
|
Packit |
1c1d7e |
//layout->setColumnMinimumWidth(2,150);
|
|
Packit |
1c1d7e |
if (m==StringFile || m==StringDir || m==StringImage)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
layout->addWidget( m_le, row, 1 );
|
|
Packit |
1c1d7e |
m_br = new QToolBar;
|
|
Packit |
1c1d7e |
m_br->setIconSize(QSize(24,24));
|
|
Packit |
1c1d7e |
if (m==StringFile || m==StringImage)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QAction *file = m_br->addAction(QIcon(QString::fromLatin1(":/images/file.png")),QString(),this,SLOT(browse()));
|
|
Packit |
1c1d7e |
file->setToolTip(tr("Browse to a file"));
|
|
Packit |
1c1d7e |
layout->addWidget( m_br,row,2 );
|
|
Packit |
1c1d7e |
if (m==StringImage)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_im = new QLabel;
|
|
Packit |
1c1d7e |
m_im->setMinimumSize(1,55);
|
|
Packit |
1c1d7e |
m_im->setAlignment(Qt::AlignLeft|Qt::AlignTop);
|
|
Packit |
1c1d7e |
row++;
|
|
Packit |
1c1d7e |
layout->addWidget( m_im,row,1 );
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QAction *dir = m_br->addAction(QIcon(QString::fromLatin1(":/images/folder.png")),QString(),this,SLOT(browse()));
|
|
Packit |
1c1d7e |
dir->setToolTip(tr("Browse to a folder"));
|
|
Packit |
1c1d7e |
layout->addWidget( m_br,row,2 );
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
layout->addWidget( m_le, row, 1, 1, 2 );
|
|
Packit |
1c1d7e |
m_br=0;
|
|
Packit |
1c1d7e |
m_im=0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
m_com=0;
|
|
Packit |
1c1d7e |
row++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (m_le) connect( m_le, SIGNAL(textChanged(const QString&)),
|
|
Packit |
1c1d7e |
this, SLOT(setValue(const QString&)) );
|
|
Packit |
1c1d7e |
if (m_com) connect( m_com, SIGNAL(activated(const QString &)),
|
|
Packit |
1c1d7e |
this, SLOT(setValue(const QString &)) );
|
|
Packit |
1c1d7e |
m_str = s+QChar::fromLatin1('!'); // force update
|
|
Packit |
1c1d7e |
setValue(s);
|
|
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 InputString::help()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
showHelp(this);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
InputString::~InputString()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::setValue(const QString &s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_str!=s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_str = s;
|
|
Packit |
1c1d7e |
m_value = m_str;
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
void InputString::updateDefault()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_str==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 |
if (m_im)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_str.isEmpty())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_im->setText(tr("No Project logo selected."));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QFile Fout(m_str);
|
|
Packit |
1c1d7e |
if(!Fout.exists())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_im->setText(tr("Sorry, cannot find file(")+m_str+QString::fromLatin1(");"));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QPixmap pm(m_str);
|
|
Packit |
1c1d7e |
if (!pm.isNull())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_im->setPixmap(pm.scaledToHeight(55,Qt::SmoothTransformation));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_im->setText(tr("Sorry, no preview available (")+m_str+QString::fromLatin1(");"));
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
if (m_le && m_le->text()!=m_str) m_le->setText( m_str );
|
|
Packit |
1c1d7e |
emit changed();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::setEnabled(bool state)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_lab->setEnabled(state);
|
|
Packit |
1c1d7e |
if (m_le) m_le->setEnabled(state);
|
|
Packit |
1c1d7e |
if (m_im) m_im->setEnabled(state);
|
|
Packit |
1c1d7e |
if (m_br) m_br->setEnabled(state);
|
|
Packit |
1c1d7e |
if (m_com) m_com->setEnabled(state);
|
|
Packit |
1c1d7e |
updateDefault();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::browse()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString path = QFileInfo(MainWindow::instance().configFileName()).path();
|
|
Packit |
1c1d7e |
if (m_sm==StringFile || m_sm==StringImage)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString fileName = QFileDialog::getOpenFileName(&MainWindow::instance(),
|
|
Packit |
1c1d7e |
tr("Select file"),path);
|
|
Packit |
1c1d7e |
if (!fileName.isNull())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QDir dir(path);
|
|
Packit |
1c1d7e |
if (!MainWindow::instance().configFileName().isEmpty() && dir.exists())
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
fileName = m_absPath ? fileName : dir.relativeFilePath(fileName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
setValue(fileName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
else // sm==StringDir
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
QString dirName = QFileDialog::getExistingDirectory(&MainWindow::instance(),
|
|
Packit |
1c1d7e |
tr("Select directory"),path);
|
|
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 = m_absPath ? dirName : dir.relativeFilePath(dirName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
setValue(dirName);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::clear()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setValue(QString());
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::addValue(QString s)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
if (m_sm==StringFixed)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
m_values.append(s);
|
|
Packit |
1c1d7e |
m_com->addItem(s);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::setDefault()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
int index = m_values.indexOf(m_str);
|
|
Packit |
1c1d7e |
if (index!=-1 && m_com) m_com->setCurrentIndex(index);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
QVariant &InputString::value()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
return m_value;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::update()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setValue(m_value.toString().trimmed());
|
|
Packit |
1c1d7e |
setDefault();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::reset()
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
setValue(m_default);
|
|
Packit |
1c1d7e |
setDefault();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void InputString::writeValue(QTextStream &t,QTextCodec *codec)
|
|
Packit |
1c1d7e |
{
|
|
Packit |
1c1d7e |
writeStringValue(t,codec,m_str);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|