Blame addon/doxywizard/inputstring.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 "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