From c22fb327fc065472d65d70ff148d42cf8298dd7e Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrgen=20Spitzm=C3=BCller?= Date: Wed, 27 Jul 2005 17:46:15 +0000 Subject: [PATCH] Sort the files in the TeXInfo and BibTeX dialogs correctly and remove empty items (bug 1936) git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10365 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/frontends/controllers/ChangeLog | 12 ++++++++ src/frontends/controllers/ControlBibtex.C | 4 +++ src/frontends/controllers/ControlTexinfo.C | 35 +++++++++++++++++++++- src/frontends/controllers/ControlTexinfo.h | 4 ++- src/frontends/controllers/tex_helpers.C | 25 ++++++++++++---- src/frontends/gtk/ChangeLog | 5 ++++ src/frontends/gtk/GTexinfo.C | 14 +++++---- src/frontends/qt2/ChangeLog | 8 +++++ src/frontends/qt2/QBibtex.C | 7 +++-- src/frontends/qt2/QTexinfo.C | 10 +++---- src/frontends/qt2/QTexinfoDialog.C | 7 ++++- src/frontends/xforms/ChangeLog | 5 ++++ src/frontends/xforms/FormTexinfo.C | 15 +++++----- 13 files changed, 122 insertions(+), 29 deletions(-) diff --git a/src/frontends/controllers/ChangeLog b/src/frontends/controllers/ChangeLog index a35e0e9b4b..9461c9c9b7 100644 --- a/src/frontends/controllers/ChangeLog +++ b/src/frontends/controllers/ChangeLog @@ -1,3 +1,15 @@ +2005-07-27 Jürgen Spitzmüller + + * ControlBibtex.C: sort bst files (bug 1936) + + * ControlTeXInfo.[Ch]: new member getFileType that returns the extension + of the supported files. + * ControlTeXInfo.[Ch] (getTeXFileList): takes bool withPath and sorts + correctly when no path is requested (bug 1936) + + * tex_helpers.C (getTeXFileList): remove empty items from the list + (bug 1936); proper support the other file types than *cls. + 2005-07-27 Jürgen Spitzmüller * ControlToc.[Ch]: getGuiName takes a type argument now. diff --git a/src/frontends/controllers/ControlBibtex.C b/src/frontends/controllers/ControlBibtex.C index 6d4c4328f0..0573d24004 100644 --- a/src/frontends/controllers/ControlBibtex.C +++ b/src/frontends/controllers/ControlBibtex.C @@ -79,6 +79,8 @@ void ControlBibtex::getBibStyles(vector & data) const for (; it != end; ++it) { *it = OnlyFilename(*it); } + // sort on filename only (no path) + std::sort(data.begin(), data.end()); } @@ -97,6 +99,8 @@ void ControlBibtex::getBibFiles(vector & data) const for (; it != end; ++it) { *it = OnlyFilename(*it); } + // sort on filename only (no path) + std::sort(data.begin(), data.end()); } diff --git a/src/frontends/controllers/ControlTexinfo.C b/src/frontends/controllers/ControlTexinfo.C index 68120c25d2..3e1e03bfb1 100644 --- a/src/frontends/controllers/ControlTexinfo.C +++ b/src/frontends/controllers/ControlTexinfo.C @@ -13,14 +13,20 @@ #include "ControlTexinfo.h" #include "funcrequest.h" +#include "support/filetools.h" + using std::string; +using std::vector; namespace lyx { + +using support::OnlyFilename; + namespace frontend { void getTexFileList(ControlTexinfo::texFileSuffix type, - std::vector & list) + std::vector & list, bool withPath) { string filename; switch (type) { @@ -42,6 +48,15 @@ void getTexFileList(ControlTexinfo::texFileSuffix type, rescanTexStyles(); getTexFileList(filename, list); } + if (withPath) + return; + vector::iterator it = list.begin(); + vector::iterator end = list.end(); + for (; it != end; ++it) { + *it = OnlyFilename(*it); + } + // sort on filename only (no path) + std::sort(list.begin(), list.end()); } @@ -62,5 +77,23 @@ string const ControlTexinfo::getClassOptions(string const & filename) const return getListOfOptions(filename, "cls"); } + +string const ControlTexinfo::getFileType(ControlTexinfo::texFileSuffix type) const +{ + string ftype; + switch (type) { + case ControlTexinfo::bst: + ftype = "bst"; + break; + case ControlTexinfo::cls: + ftype = "cls"; + break; + case ControlTexinfo::sty: + ftype = "sty"; + break; + } + return ftype; +} + } // namespace frontend } // namespace lyx diff --git a/src/frontends/controllers/ControlTexinfo.h b/src/frontends/controllers/ControlTexinfo.h index 2172dcbfdc..0b000e197a 100644 --- a/src/frontends/controllers/ControlTexinfo.h +++ b/src/frontends/controllers/ControlTexinfo.h @@ -41,6 +41,8 @@ public: void viewFile(std::string const & filename) const; /// show all classoptions std::string const getClassOptions(std::string const & filename) const; + /// return file type as string + std::string const getFileType(ControlTexinfo::texFileSuffix type) const; private: /// virtual void apply() {} @@ -51,7 +53,7 @@ private: * Each entry in the file list is returned as a pair */ void getTexFileList(ControlTexinfo::texFileSuffix type, - std::vector & contents); + std::vector & contents, bool withPath); } // namespace frontend } // namespace lyx diff --git a/src/frontends/controllers/tex_helpers.C b/src/frontends/controllers/tex_helpers.C index 4cd9453da7..90e9635c84 100644 --- a/src/frontends/controllers/tex_helpers.C +++ b/src/frontends/controllers/tex_helpers.C @@ -30,6 +30,7 @@ using std::endl; namespace lyx { using support::contains; +using support::GetExtension; using support::GetFileContents; using support::getVectorFromString; using support::LibFileSearch; @@ -82,6 +83,8 @@ void getTexFileList(string const & filename, std::vector & list) *it = regex.Merge((*it), "/"); } + // remove empty items and duplicates + list.erase(std::remove(list.begin(), list.end(), ""), list.end()); eliminate_duplicates(list); } @@ -108,12 +111,22 @@ string const getListOfOptions(string const & classname, string const & type) string const getTexFileFromList(string const & file, string const & type) { - string const file_ = (type == "cls") ? file + ".cls" : file + ".sty"; - - lyxerr << "Search for classfile " << file_ << endl; - - string const lstfile = - ((type == "cls") ? "clsFiles.lst" : "styFiles.lst"); + string file_ = file; + // do we need to add the suffix? + if (!(GetExtension(file) == type)) + file_ += '.' + type; + + lyxerr << "Searching for file " << file_ << endl; + + string lstfile; + if (type == "cls") + lstfile = "clsFiles.lst"; + else if (type == "sty") + lstfile = "styFiles.lst"; + else if (type == "bst") + lstfile = "bstFiles.lst"; + else if (type == "bib") + lstfile = "bibFiles.lst"; string const allClasses = GetFileContents(LibFileSearch(string(), lstfile)); int entries = 0; diff --git a/src/frontends/gtk/ChangeLog b/src/frontends/gtk/ChangeLog index 19453e8c75..73b26950d7 100644 --- a/src/frontends/gtk/ChangeLog +++ b/src/frontends/gtk/ChangeLog @@ -1,3 +1,8 @@ +2005-07-27 Jürgen Spitzmüller + + * GTexInfo.C: Load and display full-path and no-path + lists correctly (bug 1936) + 2005-07-27 Jürgen Spitzmüller * GToc.C (update, updateContents): Do not compare against diff --git a/src/frontends/gtk/GTexinfo.C b/src/frontends/gtk/GTexinfo.C index 1062f4807b..38890916fb 100644 --- a/src/frontends/gtk/GTexinfo.C +++ b/src/frontends/gtk/GTexinfo.C @@ -106,8 +106,14 @@ void GTexinfo::onItemActivate( (*itemsstore_->get_iter(path))[listColIndex_]; ContentsType const & data = texdata_[activeStyle]; + + string file = data[choice]; + if (!fullpathcheck_->get_active()) + file = getTexFileFromList(data[choice], + controller().getFileType(activeStyle)); + if (choice >= 0 && choice <= data.size() - 1) - controller().viewFile(data[choice]); + controller().viewFile(file); } @@ -133,17 +139,15 @@ void GTexinfo::onRefresh() void GTexinfo::updateStyles() { ContentsType & data = texdata_[activeStyle]; - getTexFileList(activeStyle, data); - bool const withFullPath = fullpathcheck_->get_active(); + getTexFileList(activeStyle, data, withFullPath); itemsstore_->clear(); ContentsType::const_iterator it = data.begin(); ContentsType::const_iterator end = data.end(); for (int rowindex = 0; it != end; ++it, ++rowindex) { - string const line = withFullPath ? *it : OnlyFilename(*it); Gtk::TreeModel::iterator row = itemsstore_->append(); - (*row)[listCol_] = line; + (*row)[listCol_] = *it; (*row)[listColIndex_] = rowindex; } } diff --git a/src/frontends/qt2/ChangeLog b/src/frontends/qt2/ChangeLog index 9e009c2727..58b1a7bcc9 100644 --- a/src/frontends/qt2/ChangeLog +++ b/src/frontends/qt2/ChangeLog @@ -1,3 +1,11 @@ +2005-07-27 Jürgen Spitzmüller + + * QBibTeX.C: Do not insert empty items to bst combo. + + * QTexInfo.C: + * QTexInfoDialog.c: Load and display full-path and no-path + lists correctly (bug 1936) + 2005-07-27 Jürgen Spitzmüller * QToc.C (update_contents): fix missing qstring->string translation. diff --git a/src/frontends/qt2/QBibtex.C b/src/frontends/qt2/QBibtex.C index feb7bbc9ad..fe87c70795 100644 --- a/src/frontends/qt2/QBibtex.C +++ b/src/frontends/qt2/QBibtex.C @@ -141,12 +141,15 @@ void QBibtex::update_contents() dialog_->styleCB->insertItem(toqstr(item)); } - if (item_nr == -1) { + if (item_nr == -1 && !bibstyle.empty()) { dialog_->styleCB->insertItem(toqstr(bibstyle)); item_nr = dialog_->styleCB->count() - 1; } - dialog_->styleCB->setCurrentItem(item_nr); + if (item_nr != -1) + dialog_->styleCB->setCurrentItem(item_nr); + else + dialog_->styleCB->clearEdit(); } diff --git a/src/frontends/qt2/QTexinfo.C b/src/frontends/qt2/QTexinfo.C index 6ffd783f2f..4a993f7bb5 100644 --- a/src/frontends/qt2/QTexinfo.C +++ b/src/frontends/qt2/QTexinfo.C @@ -50,17 +50,15 @@ void QTexinfo::build_dialog() void QTexinfo::updateStyles(ControlTexinfo::texFileSuffix whichStyle) { ContentsType & data = texdata_[whichStyle]; - getTexFileList(whichStyle, data); - bool const withFullPath = dialog_->path->isChecked(); + getTexFileList(whichStyle, data, withFullPath); + dialog_->fileList->clear(); ContentsType::const_iterator it = data.begin(); ContentsType::const_iterator end = data.end(); - for (; it != end; ++it) { - string const line = withFullPath ? *it : OnlyFilename(*it); - dialog_->fileList->insertItem(toqstr(line)); - } + for (; it != end; ++it) + dialog_->fileList->insertItem(toqstr(*it)); activeStyle = whichStyle; } diff --git a/src/frontends/qt2/QTexinfoDialog.C b/src/frontends/qt2/QTexinfoDialog.C index b9f15db0e2..a02d5691a3 100644 --- a/src/frontends/qt2/QTexinfoDialog.C +++ b/src/frontends/qt2/QTexinfoDialog.C @@ -13,6 +13,7 @@ #include "QTexinfoDialog.h" #include "QTexinfo.h" +#include #include #include #include @@ -59,7 +60,11 @@ void QTexinfoDialog::viewClicked() { vector::size_type const fitem = fileList->currentItem(); vector const & data = form_->texdata_[form_->activeStyle]; - form_->controller().viewFile(data[fitem]); + string file = data[fitem]; + if (!path->isChecked()) + file = getTexFileFromList(data[fitem], + form_->controller().getFileType(form_->activeStyle)); + form_->controller().viewFile(file); } diff --git a/src/frontends/xforms/ChangeLog b/src/frontends/xforms/ChangeLog index 666a6a1ba1..6619a1bc44 100644 --- a/src/frontends/xforms/ChangeLog +++ b/src/frontends/xforms/ChangeLog @@ -1,3 +1,8 @@ +2005-07-27 Jürgen Spitzmüller + + * FormTexInfo.C: Load and display full-path and no-path + lists correctly (bug 1936) + 2005-07-27 Jürgen Spitzmüller * FormToc.C (updateType, update_contents): Do not compare against diff --git a/src/frontends/xforms/FormTexinfo.C b/src/frontends/xforms/FormTexinfo.C index 037dda5971..c0b1ad6cd1 100644 --- a/src/frontends/xforms/FormTexinfo.C +++ b/src/frontends/xforms/FormTexinfo.C @@ -89,8 +89,12 @@ ButtonPolicy::SMInput FormTexinfo::input(FL_OBJECT * ob, long ob_value) { // double click in browser: view selected file ContentsType::size_type const sel = fl_get_browser(ob); ContentsType const & data = texdata_[activeStyle]; + string file = data[sel-1]; + if (!fl_get_button(dialog_->check_fullpath)) + file = getTexFileFromList(data[sel-1], + controller().getFileType(activeStyle)); if (sel >= 1 && sel <= data.size()) - controller().viewFile(data[sel-1]); + controller().viewFile(file); // reset the browser so that the following single-click // callback doesn't do anything @@ -125,17 +129,14 @@ ButtonPolicy::SMInput FormTexinfo::input(FL_OBJECT * ob, long ob_value) { void FormTexinfo::updateStyles(ControlTexinfo::texFileSuffix whichStyle) { ContentsType & data = texdata_[whichStyle]; - getTexFileList(whichStyle, data); - bool const withFullPath = fl_get_button(dialog_->check_fullpath); + getTexFileList(whichStyle, data, withFullPath); fl_clear_browser(dialog_->browser); ContentsType::const_iterator it = data.begin(); ContentsType::const_iterator end = data.end(); - for (; it != end; ++it) { - string const line = withFullPath ? *it : OnlyFilename(*it); - fl_add_browser_line(dialog_->browser, line.c_str()); - } + for (; it != end; ++it) + fl_add_browser_line(dialog_->browser, (*it).c_str()); activeStyle = whichStyle; } -- 2.39.5