On 03/01/2010 11:22 AM, John McCabe-Dansted wrote:
On Mon, Mar 1, 2010 at 4:18 PM, Abdelrazak Younes<you...@lyx.org> wrote:
No, the submenu would just have to call
'setModel(guiApp->languageModel(buffer))'. The conversion from std::set<...>
would be automatically done in GuiApplication::languageModel().
Thats what I meant :).
Yes :-)
And something similar for 'languageModel(Buffer *)' except that here we
would have to search the QMap instead.
I am not sure what you mean by search QMap. I'd do something like
QAbstractItemModel * GuiApplication::languageModel(Buffer * b)
{
QSortFilterProxyModel language_model;
updateLanguageModel(language_model, b->getLanguages());
return language_model;
}
Problem is you are returning a pointer for a local variable... This is
wrong as the model should be persistent of course. So you need to
somewhat cache the buffer language model:
What I mean is this:
Index: src/frontends/qt4/GuiApplication.cpp
===================================================================
--- src/frontends/qt4/GuiApplication.cpp (revision 33602)
+++ src/frontends/qt4/GuiApplication.cpp (working copy)
@@ -687,8 +687,11 @@
cancel_meta_seq = KeySequence(kb, kb);
}
- ///
+ /// This is the Application global language model.
QSortFilterProxyModel * language_model_;
+
+ /// This caches the language model for each Buffer.
+ QMap<Buffer *, QSortFilterProxyModel *> buffer_language_models_;
///
GuiClipboard clipboard_;
///
@@ -1983,6 +1986,20 @@
}
+QAbstractItemModel * GuiApplication::languageModel(Buffer const * buffer)
+{
+ if (!buffer)
+ return 0;
+ QSortFilterProxyModel * model =
d->buffer_language_models_.value(buffer, 0);
+ if (!model) {
+ model = new QSortFilterProxyModel(this);
+ d->buffer_language_models_[buffer] = model;
+ }
+ updateLanguageModel(model, buffer->getLanguages());
+ return model;
+}
+
+
QAbstractItemModel * GuiApplication::languageModel()
{
if (d->language_model_)