TocModels::reset() in GuiView::structureChanged() collapses the TocWidget, and
therefore requires an update right after, which was missing.
In fact, profiling TocWidget::updateView() shows that delaying the update is
good only for fast keypresses (essentially movement). It costs 5% of a
char-forward operation in a document with approx. 100 table of contents
items. The update optimisation has been rewritten to take this data into
account.
The timer logic introduced to solve bug #7138 was not entirely reliable; in
particular it resulted in spurious updates (noticeable by the treeview
collapsing just after one opens a branch, in particular).
This commit cleans up the timer logic. I followed the original design decision
of having an immediate update followed by a delayed update. Now the updates are
appropriately compressed and done after a delay of 2s (as can be noticed with
the treeview still collapsing, unfortunately, but after a more predictable
delay...).
4d1ad336fixed#9754 but caused perf issues by cancelling the gains of having a
timer (introduced after #7138). This introduces in GuiToc::enableView() a
lightweight check of whether the widget should be updated. The logic is inspired
from GuiViewSource::enableView().
* TocWidget: Deconstify cur in doDispatch because I need a non-const Cursor when dispatching to Insets.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29162 a592a061-630c-0410-9148-cb99ea01b6c8
* TocWidget: add context menu to toc.
* Menus: specify origin of cmd.
* GuiView: if cmd coming from toc, dispatch to GuiToc.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@29155 a592a061-630c-0410-9148-cb99ea01b6c8
* TocModel: redesign so that sorted list are available.
* TocWidget/TocUi: handle the new Sort check box.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@26602 a592a061-630c-0410-9148-cb99ea01b6c8
- Make use the Qt Model/View separation concept, TocWidget is now really just a view of the current toc model.
- the toc type combo now use a model defined in TocModels.
- the models are not deleted at each reset, they are now just cleared out.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@25289 a592a061-630c-0410-9148-cb99ea01b6c8
* GuiView::tocModel(): new method to access the toc models.
* TocModels: new class with code transferred from GuiToc.
* TocWidget: only needs a TocModels reference.
Thoughts:
- We should find a way to get rid of GuiToc.{c,h}
- tocModels() should perhaps be transferred to GuiWorkArea instead of GuiView in order to have Buffer dependent navigators.
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24578 a592a061-630c-0410-9148-cb99ea01b6c8
* Dialog::updateData(): try to reset the dialog even if there's no Buffer.
* GuiView::updateBufferDependent():
- renamed to updateDialogs()
- don't hide when there's no current work area, try to disable instead.
- now also take care of toolbars and other elements.
* TocWidget: delay item selection to avoid unwanted node collapsing after setting a new model.
Expect crash and/or assertions for dialogs that are not ready for this non-hiding change. I will fix them iteratively.
There are still too many dialogs updates going on...
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@24529 a592a061-630c-0410-9148-cb99ea01b6c8
* src/frontends/qt4/TocWidget.{cpp,h}:
- new member disconnectSelectionModel()
- (select): replace blockSignal() directives for tocTV selectionModel()
with disconnect (the above new function) and reconnect relevant signal
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@18338 a592a061-630c-0410-9148-cb99ea01b6c8
* src/frontends/qt4/TocWidget.[Ch]:
- rename enableButtons to enableControls and include slider enabling/disabling
- only set slider if there is some content
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17835 a592a061-630c-0410-9148-cb99ea01b6c8
* TocBackend
- addType(), types_, types(): deleted.
* ControlToc
- tocs(): new
- selectedType(): access to selected_type_
- initialiseParams(): transfer code from QToc::update() and look for selected type.
- getTypes(), getContents(): deleted
* QToc: do not maintain current type. Get the info from the View.
- setTocModel(): deleted
* TocWidget: always pass the currently selected type to the model/controller.
- setTocModel(): new slot.
- updateGui(): transfer code to setTocModel().
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17455 a592a061-630c-0410-9148-cb99ea01b6c8
- initialiseParams(): overload ControlCommand::initialiseParams() so that we can update the model at this point (QToc is the controller _and_ the model).
- update(): new
- updateBackend(): new protected method to update the TocBackend (called for the "Update" button).
* QToc:
- is now a QObject
- modelReset: new Qt signal to indicate a model reset to associated dialog(s).
- QToc(): avoid the duplicate update() call that will be done in the show command anyway.
* Dialogs.C
- use new TocWidget in a DockView.
* TocWidget.[Ch]: renamed from QTocDialog. This striped down widget is only a widget that connects to the 'QToc' model/controller.
* DockView.h: new template class that encapsulates a given Widget inside a DockWidget and presents a Dialog::View interface.
* QTocUi.ui:
- now is a simple Widget.
- rearrange the buttons a bit
- get rid of the unneeded close button.
- modify the shortcut to "Promote" to 'r' because of a clash with "Alt-p" number (we really need real, always valid, shortcuts for all outline action!)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@17416 a592a061-630c-0410-9148-cb99ea01b6c8