This patch removes the test of "file name with space" from the file browser
and places it in the input widget itself. (Qt frontend only for now.)
A warning is popped up the first time that an invalid file name is input.
The "OK" button is disabled if the input is invalid.
It "feels" nice to me, but I'd value some testing. It's my view that this
patch makes the LyX/Win port fully operational.
--
Angus
Index: src/frontends/controllers/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/ChangeLog,v
retrieving revision 1.480
diff -u -p -r1.480 ChangeLog
--- src/frontends/controllers/ChangeLog 12 May 2005 22:37:43 -0000 1.480
+++ src/frontends/controllers/ChangeLog 13 May 2005 08:33:45 -0000
@@ -1,3 +1,9 @@
+2005-05-09 Angus Leeming <[EMAIL PROTECTED]>
+
+ * helper_funcs.C (browseFile, browseDir): remove the loop that tested
+ whether the returned file name is valid in order to break out of the
+ loop.
+
2005-05-08 Angus Leeming <[EMAIL PROTECTED]>
* Kernel.h (KernelDocType): wrapper class for the Kernel::DocTypes
Index: src/frontends/controllers/helper_funcs.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/controllers/helper_funcs.C,v
retrieving revision 1.40
diff -u -p -r1.40 helper_funcs.C
--- src/frontends/controllers/helper_funcs.C 10 Jan 2005 19:17:40 -0000 1.40
+++ src/frontends/controllers/helper_funcs.C 13 May 2005 08:33:45 -0000
@@ -16,10 +16,10 @@
#include "gettext.h"
-#include "frontends/Alert.h"
#include "frontends/FileDialog.h"
#include "support/filetools.h"
+#include "support/lstrings.h"
#include "support/package.h"
using std::pair;
@@ -61,27 +61,12 @@ string const browseFile(string const & f
FileDialog::Result result;
- while (true) {
- if (save)
- result = fileDlg.save(lastPath, filters,
- OnlyFilename(filename));
- else
- result = fileDlg.open(lastPath, filters,
- OnlyFilename(filename));
-
- if (result.second.empty())
- return result.second;
-
- lastPath = OnlyPath(result.second);
-
- if (result.second.find_first_of("#~$% ") == string::npos)
- break;
-
- Alert::error(_("Invalid filename"),
- _("Filename can't contain any "
- "of these characters:\n"
- "space, '#', '~', '$' or '%'."));
- }
+ if (save)
+ result = fileDlg.save(lastPath, filters,
+ OnlyFilename(filename));
+ else
+ result = fileDlg.open(lastPath, filters,
+ OnlyFilename(filename));
return result.second;
}
@@ -150,25 +135,8 @@ string const browseDir(string const & pa
FileDialog fileDlg(title, LFUN_SELECT_FILE_SYNC, dir1, dir2);
- FileDialog::Result result;
-
- while (true) {
- result = fileDlg.opendir(lastPath,
- OnlyFilename(pathname));
-
- if (result.second.empty())
- return result.second;
-
- lastPath = OnlyPath(result.second);
-
- if (result.second.find_first_of("#~$% ") == string::npos)
- break;
-
- Alert::error(_("Invalid filename"),
- _("Filename can't contain any "
- "of these characters:\n"
- "space, '#', '~', '$' or '%'."));
- }
+ FileDialog::Result const result =
+ fileDlg.opendir(lastPath, OnlyFilename(pathname));
return result.second;
}
Index: src/frontends/qt2/ChangeLog
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/ChangeLog,v
retrieving revision 1.779
diff -u -p -r1.779 ChangeLog
--- src/frontends/qt2/ChangeLog 13 May 2005 08:33:01 -0000 1.779
+++ src/frontends/qt2/ChangeLog 13 May 2005 08:33:51 -0000
@@ -1,3 +1,22 @@
+2005-05-09 Angus Leeming <[EMAIL PROTECTED]>
+
+ * QBibtex.C (build_dialog):
+ * QBibtexDialog.C (c-tor, bibEDChanged, addPressed): add a
+ PathValidator of the add_->BibED widget and use it to control
+ the activation state of the "Add" button.
+
+ * QExternal.C (build_dialog, update_contents):
+ * QExternalDialog.C (c-tor): add a PathValidator of the fileED
+ widget.
+
+ * QGraphics.C (build_dialog, update_contents):
+ * QGraphicsDialog.C (c-tor): add a PathValidator of the filename
+ widget.
+
+ * QInclude.C (build_dialog, update_contents):
+ * QIncludeDialog.C (c-tor): add a PathValidator of the filenameED
+ widget.
+
2005-05-09 Michael Schmitt <[EMAIL PROTECTED]>
* *.C: strip "LyX: " prefix from dialog titles; harmonize
Index: src/frontends/qt2/QBibtex.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QBibtex.C,v
retrieving revision 1.39
diff -u -p -r1.39 QBibtex.C
--- src/frontends/qt2/QBibtex.C 12 May 2005 23:12:42 -0000 1.39
+++ src/frontends/qt2/QBibtex.C 13 May 2005 08:33:52 -0000
@@ -17,6 +17,9 @@
#include "ui/QBibtexAddDialogBase.h"
#include "Qt2BC.h"
#include "qt_helpers.h"
+#include "validators.h"
+
+#include "lyxrc.h"
#include "controllers/ControlBibtex.h"
@@ -66,6 +69,11 @@ void QBibtex::build_dialog()
void QBibtex::update_contents()
{
+ PathValidator * path_validator =
+ getPathValidator(dialog_->add_->bibED);
+ if (path_validator)
+ path_validator->setChecker(kernel().docType(), lyxrc);
+
bool bibtopic = controller().usingBibtopic();
dialog_->databaseLB->clear();
Index: src/frontends/qt2/QBibtexDialog.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QBibtexDialog.C,v
retrieving revision 1.31
diff -u -p -r1.31 QBibtexDialog.C
--- src/frontends/qt2/QBibtexDialog.C 8 Aug 2004 13:17:21 -0000 1.31
+++ src/frontends/qt2/QBibtexDialog.C 13 May 2005 08:33:52 -0000
@@ -13,10 +13,17 @@
#include "QBibtexDialog.h"
#include "ui/QBibtexAddDialogBase.h"
#include "QBibtex.h"
+
+#include "checkedwidgets.h"
+#include "Qt2BC.h"
#include "qt_helpers.h"
+#include "validators.h"
#include "controllers/ControlBibtex.h"
+#include "controllers/ButtonPolicies.h"
+
#include "support/filetools.h"
+#include "support/lstrings.h"
#include <qpushbutton.h>
#include <qcombobox.h>
@@ -24,6 +31,7 @@
#include <qlistbox.h>
using lyx::support::ChangeExtension;
+using lyx::support::trim;
using std::string;
@@ -40,12 +48,41 @@ QBibtexDialog::QBibtexDialog(QBibtex * f
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);
}
@@ -82,7 +119,7 @@ void QBibtexDialog::browsePressed()
void QBibtexDialog::browseBibPressed()
{
- string const file = form_->controller().browseBib("");
+ string const file = trim(form_->controller().browseBib(""));
if (!file.empty()) {
string const f = ChangeExtension(file, "");
@@ -102,16 +139,18 @@ 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();
+ QString const file = trim(add_->bibED->text());
if (sel < 0 && file.isNull())
return;
Index: src/frontends/qt2/QBibtexDialog.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QBibtexDialog.h,v
retrieving revision 1.11
diff -u -p -r1.11 QBibtexDialog.h
--- src/frontends/qt2/QBibtexDialog.h 19 May 2004 15:11:33 -0000 1.11
+++ src/frontends/qt2/QBibtexDialog.h 13 May 2005 08:33:52 -0000
@@ -13,6 +13,7 @@
#define QBIBTEXDIALOG_H
#include "ui/QBibtexDialogBase.h"
+#include "ButtonController.h"
class QBibtexAddDialogBase;
@@ -26,6 +27,7 @@ class QBibtexDialog : public QBibtexDial
public:
QBibtexDialog(QBibtex * form);
+ ~QBibtexDialog();
QBibtexAddDialogBase * add_;
@@ -38,12 +40,14 @@ protected slots:
virtual void deletePressed();
virtual void databaseChanged();
virtual void availableChanged();
+ void bibEDChanged();
protected:
virtual void closeEvent(QCloseEvent * e);
private:
QBibtex * form_;
+ ButtonController add_bc_;
};
} // namespace frontend
Index: src/frontends/qt2/QExternal.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QExternal.C,v
retrieving revision 1.44
diff -u -p -r1.44 QExternal.C
--- src/frontends/qt2/QExternal.C 12 May 2005 23:12:42 -0000 1.44
+++ src/frontends/qt2/QExternal.C 13 May 2005 08:33:52 -0000
@@ -31,6 +31,7 @@
#include "checkedwidgets.h"
#include "lengthcombo.h"
#include "qt_helpers.h"
+#include "validators.h"
#include <qlineedit.h>
#include <qpushbutton.h>
@@ -320,6 +321,7 @@ void QExternal::build_dialog()
addCheckedLineEdit(bcview(), dialog_->ybED, dialog_->lbLA);
addCheckedLineEdit(bcview(), dialog_->xrED, dialog_->rtLA);
addCheckedLineEdit(bcview(), dialog_->ytED, dialog_->rtLA);
+ addCheckedLineEdit(bcview(), dialog_->fileED, dialog_->fileLA);
std::vector<string> templates(controller().getTemplates());
@@ -343,6 +345,10 @@ void QExternal::build_dialog()
void QExternal::update_contents()
{
+ PathValidator * path_validator = getPathValidator(dialog_->fileED);
+ if (path_validator)
+ path_validator->setChecker(kernel().docType(), lyxrc);
+
dialog_->tab->setCurrentPage(0);
InsetExternalParams const & params = controller().params();
Index: src/frontends/qt2/QExternalDialog.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QExternalDialog.C,v
retrieving revision 1.25
diff -u -p -r1.25 QExternalDialog.C
--- src/frontends/qt2/QExternalDialog.C 12 May 2005 22:37:43 -0000 1.25
+++ src/frontends/qt2/QExternalDialog.C 13 May 2005 08:33:53 -0000
@@ -68,6 +68,8 @@ QExternalDialog::QExternalDialog(QExtern
widthED->setValidator(unsignedLengthValidator(widthED));
heightED->setValidator(unsignedLengthValidator(heightED));
+
+ fileED->setValidator(new PathValidator(true, fileED));
}
Index: src/frontends/qt2/QGraphics.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QGraphics.C,v
retrieving revision 1.57
diff -u -p -r1.57 QGraphics.C
--- src/frontends/qt2/QGraphics.C 12 May 2005 23:12:42 -0000 1.57
+++ src/frontends/qt2/QGraphics.C 13 May 2005 08:33:53 -0000
@@ -19,6 +19,7 @@
#include "QGraphicsDialog.h"
#include "Qt2BC.h"
#include "qt_helpers.h"
+#include "validators.h"
#include "lengthcommon.h"
#include "lyxrc.h"
@@ -114,6 +115,7 @@ void QGraphics::build_dialog()
addCheckedLineEdit(bcview(), dialog_->lbY, dialog_->yL);
addCheckedLineEdit(bcview(), dialog_->rtX, dialog_->xL_2);
addCheckedLineEdit(bcview(), dialog_->rtY, dialog_->yL_2);
+ addCheckedLineEdit(bcview(), dialog_->filename, dialog_->filenameL);
}
@@ -131,6 +133,10 @@ int getItemNo(vector<string> v, string c
void QGraphics::update_contents()
{
+ PathValidator * path_validator = getPathValidator(dialog_->filename);
+ if (path_validator)
+ path_validator->setChecker(kernel().docType(), lyxrc);
+
// clear and fill in the comboboxes
vector<string> const bb_units = lyx::frontend::getBBUnits();
dialog_->lbXunit->clear();
Index: src/frontends/qt2/QGraphicsDialog.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QGraphicsDialog.C,v
retrieving revision 1.32
diff -u -p -r1.32 QGraphicsDialog.C
--- src/frontends/qt2/QGraphicsDialog.C 12 May 2005 22:37:43 -0000 1.32
+++ src/frontends/qt2/QGraphicsDialog.C 13 May 2005 08:33:53 -0000
@@ -58,6 +58,8 @@ QGraphicsDialog::QGraphicsDialog(QGraphi
displayscale->setValidator(new QIntValidator(displayscale));
height->setValidator(unsignedLengthValidator(height));
width->setValidator(unsignedLengthValidator(width));
+
+ filename->setValidator(new PathValidator(true, filename));
}
Index: src/frontends/qt2/QInclude.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QInclude.C,v
retrieving revision 1.30
diff -u -p -r1.30 QInclude.C
--- src/frontends/qt2/QInclude.C 12 May 2005 23:12:42 -0000 1.30
+++ src/frontends/qt2/QInclude.C 13 May 2005 08:33:53 -0000
@@ -12,8 +12,13 @@
#include "QIncludeDialog.h"
#include "QInclude.h"
+
+#include "checkedwidgets.h"
#include "Qt2BC.h"
#include "qt_helpers.h"
+#include "validators.h"
+
+#include "lyxrc.h"
#include "controllers/ControlInclude.h"
@@ -45,11 +50,17 @@ void QInclude::build_dialog()
bcview().addReadOnly(dialog_->browsePB);
bcview().addReadOnly(dialog_->visiblespaceCB);
bcview().addReadOnly(dialog_->typeCO);
+
+ addCheckedLineEdit(bcview(), dialog_->filenameED, dialog_->filenameLA);
}
void QInclude::update_contents()
{
+ PathValidator * path_validator = getPathValidator(dialog_->filenameED);
+ if (path_validator)
+ path_validator->setChecker(kernel().docType(), lyxrc);
+
InsetCommandParams const & params = controller().params();
dialog_->filenameED->setText(toqstr(params.getContents()));
Index: src/frontends/qt2/QIncludeDialog.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/frontends/qt2/QIncludeDialog.C,v
retrieving revision 1.15
diff -u -p -r1.15 QIncludeDialog.C
--- src/frontends/qt2/QIncludeDialog.C 2 Jun 2004 20:13:18 -0000 1.15
+++ src/frontends/qt2/QIncludeDialog.C 13 May 2005 08:33:53 -0000
@@ -12,6 +12,7 @@
#include "QIncludeDialog.h"
#include "QInclude.h"
+#include "validators.h"
#include <qpushbutton.h>
#include <qcheckbox.h>
@@ -29,6 +30,8 @@ QIncludeDialog::QIncludeDialog(QInclude
form, SLOT(slotOK()));
connect(closePB, SIGNAL(clicked()),
form, SLOT(slotClose()));
+
+ filenameED->setValidator(new PathValidator(true, filenameED));
}