commit 823263904f35fe0d5beae12e5c057ffbc5de57f9
Author: Juergen Spitzmueller <[email protected]>
Date: Sun Apr 7 11:23:19 2019 +0200
GuiDocument: Sort available modules by category
Also improve display of module information
---
src/frontends/qt4/GuiDocument.cpp | 84 ++++++++++++++++++++---------
src/frontends/qt4/GuiDocument.h | 6 ++-
src/frontends/qt4/GuiSelectionManager.cpp | 4 +-
src/frontends/qt4/GuiSelectionManager.h | 4 +-
src/frontends/qt4/ui/ModulesUi.ui | 2 +-
5 files changed, 68 insertions(+), 32 deletions(-)
diff --git a/src/frontends/qt4/GuiDocument.cpp
b/src/frontends/qt4/GuiDocument.cpp
index 3d84dc6..cf8d999 100644
--- a/src/frontends/qt4/GuiDocument.cpp
+++ b/src/frontends/qt4/GuiDocument.cpp
@@ -269,7 +269,7 @@ public:
QPushButton * delPB,
QPushButton * upPB,
QPushButton * downPB,
- GuiIdListModel * availableModel,
+ QStandardItemModel * availableModel,
GuiIdListModel * selectedModel,
GuiDocument const * container)
: GuiSelectionManager(parent, availableLV, selectedLV, addPB,
delPB,
@@ -292,9 +292,9 @@ private:
///
virtual void updateDelPB();
/// returns availableModel as a GuiIdListModel
- GuiIdListModel * getAvailableModel()
+ QStandardItemModel * getAvailableModel()
{
- return dynamic_cast<GuiIdListModel *>(availableModel);
+ return dynamic_cast<QStandardItemModel *>(availableModel);
}
/// returns selectedModel as a GuiIdListModel
GuiIdListModel * getSelectedModel()
@@ -313,7 +313,7 @@ void ModuleSelectionManager::updateAddPB()
{
int const arows = availableModel->rowCount();
QModelIndexList const avail_sels =
- availableLV->selectionModel()->selectedIndexes();
+ availableLV->selectionModel()->selectedRows(0);
// disable if there aren't any modules (?), if none of them is chosen
// in the dialog, or if the chosen one is already selected for use.
@@ -323,7 +323,14 @@ void ModuleSelectionManager::updateAddPB()
}
QModelIndex const & idx = availableLV->selectionModel()->currentIndex();
- string const modname = getAvailableModel()->getIDString(idx.row());
+
+ if (getAvailableModel()->itemFromIndex(idx)->hasChildren()) {
+ // This is a category header
+ addPB->setEnabled(false);
+ return;
+ }
+
+ string const modname = fromqstr(getAvailableModel()->data(idx,
Qt::UserRole).toString());
bool const enable =
container_->params().layoutModuleCanBeAdded(modname);
@@ -1763,7 +1770,11 @@ void GuiDocument::filterModules(QString const & str)
int i = 0;
for (modInfoStruct const & m : modInfoList) {
if (m.name.contains(str, Qt::CaseInsensitive) || contains(m.id,
fromqstr(str))) {
- modules_av_model_.insertRow(i, m.name, m.id,
m.description);
+ QStandardItem * item = new QStandardItem();
+ item->setData(m.name, Qt::DisplayRole);
+ item->setData(toqstr(m.id), Qt::UserRole);
+ item->setData(m.description, Qt::ToolTipRole);
+ modules_av_model_.insertRow(i, item);
++i;
}
}
@@ -2896,6 +2907,7 @@ void GuiDocument::modulesToParams(BufferParams & bp)
int const srows = modules_sel_model_.rowCount();
for (int i = 0; i < srows; ++i)
bp.addLayoutModule(modules_sel_model_.getIDString(i));
+ updateSelectedModules();
// update the list of removed modules
bp.clearRemovedModules();
@@ -2949,18 +2961,20 @@ void GuiDocument::updateModuleInfo()
//Module description
bool const focus_on_selected = selectionManager->selectedFocused();
QAbstractItemView * lv;
- if (focus_on_selected)
+ bool category = false;
+ if (focus_on_selected) {
lv = modulesModule->selectedLV;
- else
+ category = true;
+ } else
lv = modulesModule->availableLV;
if (lv->selectionModel()->selectedIndexes().isEmpty()) {
modulesModule->infoML->document()->clear();
return;
}
QModelIndex const & idx = lv->selectionModel()->currentIndex();
- GuiIdListModel const & id_model =
- focus_on_selected ? modules_sel_model_ :
modules_av_model_;
- string const modName = id_model.getIDString(idx.row());
+ string const modName = focus_on_selected ?
+ modules_sel_model_.getIDString(idx.row())
+ : fromqstr(modules_av_model_.data(idx,
Qt::UserRole).toString());
docstring desc = getModuleDescription(modName);
LayoutModuleList const & provmods = bp_.baseClass()->providedModules();
@@ -2970,12 +2984,14 @@ void GuiDocument::updateModuleInfo()
desc += _("Module provided by document class.");
}
- docstring cat = getModuleCategory(modName);
- if (!cat.empty()) {
- if (!desc.empty())
- desc += "\n";
- desc += bformat(_("Category: %1$s."),
- translateIfPossible(cat));
+ if (category) {
+ docstring cat = getModuleCategory(modName);
+ if (!cat.empty()) {
+ if (!desc.empty())
+ desc += "\n";
+ desc += bformat(_("<p><b>Category:</b> %1$s.</p>"),
+ translateIfPossible(cat));
+ }
}
vector<string> pkglist = getPackageList(modName);
@@ -2983,7 +2999,7 @@ void GuiDocument::updateModuleInfo()
if (!pkgdesc.empty()) {
if (!desc.empty())
desc += "\n";
- desc += bformat(_("Package(s) required: %1$s."), pkgdesc);
+ desc += bformat(_("<p><b>Package(s) required:</b> %1$s.</p>"),
pkgdesc);
}
pkglist = getRequiredList(modName);
@@ -2992,7 +3008,7 @@ void GuiDocument::updateModuleInfo()
pkgdesc = formatStrVec(reqdescs, _("or"));
if (!desc.empty())
desc += "\n";
- desc += bformat(_("Modules required: %1$s."), pkgdesc);
+ desc += bformat(_("<p><b>Modules required:</b> %1$s.</p>"),
pkgdesc);
}
pkglist = getExcludedList(modName);
@@ -3001,20 +3017,20 @@ void GuiDocument::updateModuleInfo()
pkgdesc = formatStrVec(reqdescs, _( "and"));
if (!desc.empty())
desc += "\n";
- desc += bformat(_("Modules excluded: %1$s."), pkgdesc);
+ desc += bformat(_("<p><b>Modules excluded:</b> %1$s.</p>"),
pkgdesc);
}
if (!desc.empty())
desc += "\n";
- desc += bformat(_("Filename: %1$s.module."), from_utf8(modName));
+ desc += bformat(_("<p><b>Filename:</b> <tt>%1$s.module</tt>.</p>"),
from_utf8(modName));
if (!isModuleAvailable(modName)) {
if (!desc.empty())
desc += "\n";
- desc += _("WARNING: Some required packages are unavailable!");
+ desc += _("<p><font color=red><b>WARNING: Some required
packages are unavailable!</b></font></p>");
}
- modulesModule->infoML->document()->setPlainText(toqstr(desc));
+ modulesModule->infoML->document()->setHtml(toqstr(desc));
}
@@ -4216,10 +4232,28 @@ void GuiDocument::updateAvailableModules()
return 0 < b.name.localeAwareCompare(a.name);
});
int i = 0;
+ QFont catfont;
+ catfont.setBold(true);
for (modInfoStruct const & m : modInfoList) {
- modules_av_model_.insertRow(i, m.name, m.id, m.description);
- ++i;
+ QStandardItem * item = new QStandardItem();
+ QStandardItem * catItem = new QStandardItem();
+ QString const catname = m.category;
+ QList<QStandardItem *> fcats =
modules_av_model_.findItems(catname, Qt::MatchExactly);
+ if (!fcats.empty())
+ catItem = fcats.first();
+ else {
+ catItem->setText(catname);
+ catItem->setFont(catfont);
+ modules_av_model_.insertRow(i, catItem);
+ ++i;
+ }
+ catItem->setEditable(false);
+ item->setData(m.name, Qt::DisplayRole);
+ item->setData(toqstr(m.id), Qt::UserRole);
+ item->setData(m.description, Qt::ToolTipRole);
+ catItem->appendRow(item);
}
+ modules_av_model_.sort(0);
}
diff --git a/src/frontends/qt4/GuiDocument.h b/src/frontends/qt4/GuiDocument.h
index 4f41faa..20883db 100644
--- a/src/frontends/qt4/GuiDocument.h
+++ b/src/frontends/qt4/GuiDocument.h
@@ -37,6 +37,8 @@
#include "ui_PreambleUi.h"
#include "ui_TextLayoutUi.h"
+#include <QStandardItemModel>
+
namespace lyx {
class BufferParams;
@@ -189,7 +191,7 @@ private:
ModuleSelectionManager * selectionManager;
/// Available modules
- GuiIdListModel * availableModel() { return &modules_av_model_; }
+ QStandardItemModel * availableModel() { return &modules_av_model_; }
/// Selected modules
GuiIdListModel * selectedModel() { return &modules_sel_model_; }
@@ -218,7 +220,7 @@ private:
void getTableStyles();
/// available modules
- GuiIdListModel modules_av_model_;
+ QStandardItemModel modules_av_model_;
/// selected modules
GuiIdListModel modules_sel_model_;
diff --git a/src/frontends/qt4/GuiSelectionManager.cpp
b/src/frontends/qt4/GuiSelectionManager.cpp
index 08259d5..9eeb5c9 100644
--- a/src/frontends/qt4/GuiSelectionManager.cpp
+++ b/src/frontends/qt4/GuiSelectionManager.cpp
@@ -49,7 +49,7 @@ GuiSelectionManager::GuiSelectionManager(QObject * parent,
QPushButton * del,
QPushButton * up,
QPushButton * down,
- QAbstractListModel * amod,
+ QAbstractItemModel * amod,
QAbstractItemModel * smod,
int const main_sel_col)
: QObject(parent), availableLV(avail), selectedLV(sel),
@@ -116,7 +116,7 @@ void GuiSelectionManager::updateButtons()
QModelIndex GuiSelectionManager::getSelectedIndex(int const c) const
{
- QModelIndexList avail =
availableLV->selectionModel()->selectedIndexes();
+ QModelIndexList avail = availableLV->selectionModel()->selectedRows(c);
QModelIndexList sel = selectedLV->selectionModel()->selectedRows(c);
bool const have_avl = !avail.isEmpty();
bool const have_sel = !sel.isEmpty();
diff --git a/src/frontends/qt4/GuiSelectionManager.h
b/src/frontends/qt4/GuiSelectionManager.h
index c0b4ccc..9875396 100644
--- a/src/frontends/qt4/GuiSelectionManager.h
+++ b/src/frontends/qt4/GuiSelectionManager.h
@@ -48,7 +48,7 @@ public:
QPushButton * delPB,
QPushButton * upPB,
QPushButton * downPB,
- QAbstractListModel *
availableModel,
+ QAbstractItemModel *
availableModel,
QAbstractItemModel *
selectedModel,
int const main_sel_col = 0);
/// Sets the state of the various push buttons, depending upon the
@@ -105,7 +105,7 @@ protected:
///
QPushButton * downPB;
///
- QAbstractListModel * availableModel;
+ QAbstractItemModel * availableModel;
///
QAbstractItemModel * selectedModel;
diff --git a/src/frontends/qt4/ui/ModulesUi.ui
b/src/frontends/qt4/ui/ModulesUi.ui
index 0bfeb39..9d0a465 100644
--- a/src/frontends/qt4/ui/ModulesUi.ui
+++ b/src/frontends/qt4/ui/ModulesUi.ui
@@ -64,7 +64,7 @@
<item>
<widget class="QTreeView" name="availableLV">
<property name="rootIsDecorated">
- <bool>false</bool>
+ <bool>true</bool>
</property>
</widget>
</item>