]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/qt2/QBibtexDialog.C
* filetools.[Ch]: Make functions that start with a capital
[lyx.git] / src / frontends / qt2 / QBibtexDialog.C
index e4505fe4f567317b07c69af7057c1e22aec41025..38f5938b0995867f677ac17fae545166baa6a6cf 100644 (file)
@@ -5,34 +5,38 @@
  *
  * \author John Levon
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #include <config.h>
 
+#include "QBibtexDialog.h"
+#include "ui/QBibtexAddDialogBase.h"
+#include "QBibtex.h"
 
-#include "ControlBibtex.h"
+#include "checkedwidgets.h"
+#include "Qt2BC.h"
 #include "qt_helpers.h"
-#include "debug.h"
+#include "validators.h"
+
+#include "controllers/ControlBibtex.h"
+#include "controllers/ButtonPolicies.h"
 
 #include "support/filetools.h"
-#include "support/lyxalgo.h" // eliminate_duplicates
+#include "support/lstrings.h"
 
-#include <qwidget.h>
 #include <qpushbutton.h>
 #include <qcombobox.h>
 #include <qlineedit.h>
 #include <qlistbox.h>
-#include <qcheckbox.h>
-#include <qfiledialog.h>
 
-#include "ui/QBibtexAddDialogBase.h"
-#include "QBibtexDialog.h"
-#include "QBibtex.h"
+using lyx::support::changeExtension;
+using lyx::support::trim;
 
-#include <vector>
+using std::string;
 
-using namespace lyx::support;
+namespace lyx {
+namespace frontend {
 
 QBibtexDialog::QBibtexDialog(QBibtex * form)
        : QBibtexDialogBase(0, 0, false, 0),
@@ -44,12 +48,41 @@ QBibtexDialog::QBibtexDialog(QBibtex * form)
                form, SLOT(slotClose()));
 
        add_ = new QBibtexAddDialogBase(this, "", true);
-       connect(add_->addPB, SIGNAL(clicked()), this, SLOT(addDatabase()));
-       connect(add_->addPB, SIGNAL(clicked()), this, SLOT(addDatabase()));
-       connect(add_->bibLB, SIGNAL(selected(QListBoxItem *)), this, SLOT(addDatabase()));
-       connect(add_->bibLB, SIGNAL(selected(QListBoxItem *)), add_, SLOT(accept()));
-       connect(add_->bibLB, SIGNAL(currentChanged(QListBoxItem *)), this, SLOT(availableChanged()));
-       connect(add_->browsePB, SIGNAL(clicked()), this, SLOT(browseBibPressed()));
+       Qt2BC * bcview = new Qt2BC(add_bc_);
+       add_bc_.view(bcview);
+       add_bc_.bp(new OkCancelPolicy);
+
+       bcview->setOK(add_->addPB);
+       bcview->setCancel(add_->closePB);
+
+       add_->bibED->setValidator(new PathValidator(false, add_->bibED));
+       addCheckedLineEdit(add_bc_.view(), add_->bibED, 0);
+
+       connect(add_->bibED, SIGNAL(textChanged(const QString&)),
+               this, SLOT(bibEDChanged()));
+       connect(add_->addPB, SIGNAL(clicked()),
+               this, SLOT(addDatabase()));
+       connect(add_->bibLB, SIGNAL(selected(QListBoxItem *)),
+               this, SLOT(addDatabase()));
+       connect(add_->bibLB, SIGNAL(selected(QListBoxItem *)),
+               add_, SLOT(accept()));
+       connect(add_->bibLB, SIGNAL(currentChanged(QListBoxItem *)),
+               this, SLOT(availableChanged()));
+       connect(add_->browsePB, SIGNAL(clicked()),
+               this, SLOT(browseBibPressed()));
+}
+
+
+QBibtexDialog::~QBibtexDialog()
+{}
+
+
+void QBibtexDialog::bibEDChanged()
+{
+       // Indicate to the button controller that the contents have
+       // changed. The actual test of validity is carried out by
+       // the checkedLineEdit.
+       add_bc_.valid(true);
 }
 
 
@@ -61,14 +94,10 @@ void QBibtexDialog::change_adaptor()
 
 void QBibtexDialog::browsePressed()
 {
-       QString const file =
-               QFileDialog::getOpenFileName(QString::null,
-                                            qt_("BibTeX style files (*.bst)"),
-                                            this,
-                                            0,
-                                            qt_("Select a BibTeX style"));
-       if (!file.isNull()) {
-               string const filen = ChangeExtension(fromqstr(file), "");
+       string const file = form_->controller().browseBst("");
+
+       if (!file.empty()) {
+               string const filen = changeExtension(file, "");
                bool present = false;
                unsigned int pres = 0;
 
@@ -90,11 +119,10 @@ void QBibtexDialog::browsePressed()
 
 void QBibtexDialog::browseBibPressed()
 {
-       QString const file = QFileDialog::getOpenFileName(QString::null,
-               qt_("BibTeX database files (*.bib)"), add_, 0, qt_("Select a BibTeX database to add"));
+       string const file = trim(form_->controller().browseBib(""));
 
-       if (!file.isNull()) {
-               string const f = ChangeExtension(fromqstr(file), "");
+       if (!file.empty()) {
+               string const f = changeExtension(file, "");
                bool present = false;
 
                for (unsigned int i = 0; i != add_->bibLB->count(); i++) {
@@ -111,18 +139,20 @@ void QBibtexDialog::browseBibPressed()
        }
 }
 
+
 void QBibtexDialog::addPressed()
 {
        add_->exec();
+       add_bc_.valid(false);
 }
 
 
 void QBibtexDialog::addDatabase()
 {
        int const sel = add_->bibLB->currentItem();
-       QString const file = add_->bibED->text();
+       string const file = trim(fromqstr(add_->bibED->text()));
 
-       if (sel < 0 && file.isNull())
+       if (sel < 0 && file.empty())
                return;
 
        // Add the selected browser_bib keys to browser_database
@@ -135,8 +165,8 @@ void QBibtexDialog::addDatabase()
                }
        }
 
-       if (!file.isEmpty()) {
-               QString const f = toqstr(ChangeExtension(fromqstr(file), ""));
+       if (!file.empty()) {
+               QString const f = toqstr(changeExtension(file, ""));
                if ((databaseLB->findItem(f)) == 0)
                        databaseLB->insertItem(f);
        }
@@ -169,3 +199,6 @@ void QBibtexDialog::closeEvent(QCloseEvent *e)
        form_->slotWMHide();
        e->accept();
 }
+
+} // namespace frontend
+} // namespace lyx