Blame addon/doxywizard/inputstrlist.cpp

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