/* -------------------------------------------------------------------------
 * Generally useful widget
 * -------------------------------------------------------------------------
 *
 * Class:      qtFileChooser
 *
 * Purpose:    Widget for selecting a file or directory
 *
 * Author:     L. Mervart
 *
 * Created:    10-May-2011
 *
 * Changes:
 *
 * -----------------------------------------------------------------------*/

#include "qtfilechooser.h"

// Constructor
////////////////////////////////////////////////////////////////////////////////
qtFileChooser::qtFileChooser(QWidget* parent) : QWidget(parent), _mode(File) {

  QHBoxLayout* layout = new QHBoxLayout( this );
  layout->setMargin(0);

  _lineEdit = new QLineEdit(this);
  layout->addWidget(_lineEdit);

  connect(_lineEdit, SIGNAL(textChanged(const QString &)),
          this, SIGNAL(fileNameChanged(const QString &)));

  _button = new QPushButton("...", this);
  _button->setFixedWidth(_button->fontMetrics().width(" ... "));
  layout->addWidget(_button);

  connect(_button, SIGNAL(clicked()), this, SLOT(chooseFile()));
  setFocusProxy(_lineEdit);
}

// Destructor
////////////////////////////////////////////////////////////////////////////////
qtFileChooser::~qtFileChooser() {
}

// 
////////////////////////////////////////////////////////////////////////////////
void qtFileChooser::setFileName(const QString& fileName) {
  _lineEdit->setText(fileName);
}

// 
////////////////////////////////////////////////////////////////////////////////
QString qtFileChooser::fileName() const {
  return _lineEdit->text();
}

// 
////////////////////////////////////////////////////////////////////////////////
void qtFileChooser::chooseFile() {
  QString fileName;
  if (mode() == File) {
    fileName = QFileDialog::getOpenFileName(this);
  }
  else {
    fileName = QFileDialog::getExistingDirectory(this);
  }

  if (!fileName.isEmpty()) {
    _lineEdit->setText(fileName);
    emit fileNameChanged(fileName);
  }
}