Commit Graph

8453 Commits

Author SHA1 Message Date
Juergen Spitzmueller
0b4d9d8d4a Generalize uppercase test
Biblatex has \Textcite and friends.
2017-01-03 13:01:41 +01:00
Richard Heck
73f59e87bd Add ability to use refstyle's plural and capitalization features. 2017-01-02 22:32:36 -05:00
Richard Heck
c513c26e62 Label only command for reference dialog. 2017-01-02 18:08:30 -05:00
Juergen Spitzmueller
ee653e1968 Amend 8add88ee49: Show Biblatex files in the TeXInfo dialog
UI file was forgotten.
2017-01-02 12:05:14 +01:00
Juergen Spitzmueller
8cadee45e9 GuiLog: Detect Biber for the GUI. 2017-01-02 12:00:10 +01:00
Juergen Spitzmueller
8add88ee49 Show Biblatex files in the TeXInfo dialog 2017-01-01 11:34:35 +01:00
Juergen Spitzmueller
5d58bfadbc Make biblio_style private
This should never ever be accessed directly
2017-01-01 08:37:56 +01:00
Juergen Spitzmueller
ff93aea509 Rework default bibliography style UI
* Use a combo with all available styles
* Correctly reset default on engine change
* Consider that EngineTypes might have different defaults
2017-01-01 08:07:03 +01:00
Juergen Spitzmueller
59a4f263a4 Properly support the cite engines in the GUI
Instead of hardcoding 3 engines, we now support all engines which are
defined in the *.citeengines files.
2017-01-01 07:56:24 +01:00
Guillaume Munch
832b99a394 Remove a redundant deletion of a QObject 2016-12-31 15:16:15 +01:00
Guillaume Munch
cde3f6b84c TocWidget: Remove possibly dangling BufferView pointer 2016-12-31 15:16:15 +01:00
Guillaume Munch
3d6a7a1200 Fix dangling inset pointers after buffer reload
https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg198191.html

The root of the issue is in Buffer::reload() called during "Save As".  After
loadLyXFile() there, all the insets have been deleted, and therefore the Inset
pointer GuiView::documentBufferView()->cursor().inset() is dangling. Immediately
after loadLyXFile(), reload() calls updateBuffer() which causes a segfault.

While debugging I got other segfaults caused by the same dangling Inset pointer
in Cursor, notably: 1) a trace identical to the second one from
<http://www.lyx.org/trac/ticket/10520>, and 2) a similar segfault in the
critical path after emergency saving (call to inMathed()).

Having to "refresh" by hand the inset pointer cache in CursorSlice is very
unsatisfactory, but there does not appears to be a consistent strategy for
managing these Inset pointers in CursorSlice.
2016-12-31 15:16:15 +01:00
Guillaume Munch
550567d8f2 Remove outdated comment
UpdateToolbars is no longer slow
2016-12-31 15:01:12 +01:00
Jean-Marc Lasgouttes
eeb6e8333c Fixup c49cd699: QString::toStdString is not always available
This method requires STL support in Qt. Fortunately, it is not needed
here.
2016-12-28 22:44:40 +01:00
Juergen Spitzmueller
c49cd69998 From c7899a30a0b5975bf599a69ecd11ab25e1cdf1a4 Mon Sep 17 00:00:00 2001
From: "Joel A. Kulesza" <jkulesza@gmail.com>
Date: Mon, 24 Oct 2016 17:37:58 -0600
Subject: [PATCH] Add "Swap & Reverse" to math delimiter dialog

When "Keep matched" is unchecked, a button becomes enabled to "Swap &
Reverse" the left and right delimiters.  This is expected to be of use
with line-wrapped equations featuring one or more set of delimiters that
break across the lines.  When "Keep matched" is checked, the button is
visible but disabled.

The most common use case is expected to be the user entering a pair of
unmatched delimiters on the first line of an equation (e.g., "(" and
"(None)"), entering the inner text, going to the next line, and
inserting the opposite set of delimiters (e.g., "(None)" and ")").
This button will negate the need to find the correct corresponding
combination.  However, it relies on the dialog's memory of the previous
unmatched set.

This change addresses Ticket #10457

-----------

Modifications by spitz to the original patch:

* Only enable the button if an unmatched pair is selected
* Consider l7n when locating the string "(None)"
* Add an accelerator and a tooltip to the dialog
* Simplify the code a bit
2016-12-28 16:34:44 +01:00
Juergen Spitzmueller
89ce0c9069 Support for CJK quotation marks
File format change

Fixes: #2712
2016-12-26 14:03:48 +01:00
Juergen Spitzmueller
229f3863f9 Do not attempt to add dynamic quotes to the style combo 2016-12-26 11:25:34 +01:00
Juergen Spitzmueller
7533e7a0a1 Use master buffer params for quote style
+ some formatting polishment
2016-12-25 17:23:07 +01:00
Juergen Spitzmueller
36a679344a Implement dynamic quotation marks
File format change.
2016-12-25 12:19:02 +01:00
Juergen Spitzmueller
237193f8a8 Some new quote styles
* b    `british'    (``inner quotation'')
* w    >>swedishg>> ('inner quotation')   ["g" = Guillemets]
* f    <<french>>   (``inner quotation'')
* i    <<frenchin>> (<<inner quotation>>) ["in" = Imprimerie Nationale]
* r    <<russian>>  (,,inner quotation``)

Rename "french" to "swiss"

Also rename "single/double" to "secondary/primary" ("inner/outer" in
the UI) and "left/right" to "opening/closing". Note that the inset
identifier string is left as is ("s/d" and "l/r")
2016-12-24 14:27:00 +01:00
Juergen Spitzmueller
45df1e87a9 Fix glitch introduced in 2e255b1c4f
set correct combo values.
2016-12-24 13:32:49 +01:00
Juergen Spitzmueller
2e255b1c4f Restructure InsetQuotes for better extensibilty
The current char-based implementation gets increasingly unreadable,
especially if styles are added that do not follow the strict
single-double paradigm.
2016-12-24 10:13:51 +01:00
Juergen Spitzmueller
1ed70d10fd Add "Plain" quotation mark style
File format change
2016-12-21 15:17:30 +01:00
Juergen Spitzmueller
cce4639b55 Rename some quote-related params
Quote Language -> Quote Style
Quote Times-> Quote Level

No change in functionality.
2016-12-20 17:55:43 +01:00
Guillaume Munch
ea7704a354 Do not rely on toolTip() to generate LaTeX code 2016-12-20 00:15:59 +01:00
Guillaume Munch
6d375ddeac Fix compilation with Qt5.8dev 2016-12-20 00:15:58 +01:00
Jean-Marc Lasgouttes
c5119c97fc Add caching for the QTextLayout objects we use
The QTextLayout handling is terribly slow on Qt 4.8.7, but some
caching has been added in Qt5 that makes it much faster. For some
reason, it is not that slow with Qt 4.8.1.

Caches are introduced for the three following methods

* width(doctring), controlled by CACHE_METRICS_WIDTH. This cache already
  existed, but the code has been cleaned up

* getTextLayout, controlled by CACHE_METRICS_QTEXTLAYOUT (disabled by
  default on Qt5, which does its own caching). This is used for pos2x
  and x2pos and now for drawing of text too. The previous code used a
  trivial caching scheme of the last used QTextLayout, but now they
  are properly kept in a QCache. Moreover, the cacheEnabled() property
  is enabled for these QTextLayout object (not sure what this does).

* breakAt, controlled by CACHE_METRICS_BREAKAT. This is the only user
  of QTextLayout which did not have some kind of caching already.

For some weird reasons related to Argument-dependent look-up, the
qHash(docstring) function has to be defined in std namespace, since
lyx::docstring is actually std::basic_string<wchar_t>.

[NOTE: this version has profiling hooks, enabled by commenting out the line
  #define DISABLE_PMPROF
that should eventually be removed.]
2016-12-19 18:47:18 +01:00
Juergen Spitzmueller
5c1fb98885 Whitespace 2016-12-17 12:59:03 +01:00
Juergen Spitzmueller
197c193e21 Context menu for quote insets
Allows to switch quote type.
2016-12-17 12:58:33 +01:00
Jean-Marc Lasgouttes
c8a829d273 Handle negative values gracefully.
It may happen (for example with on the fly spell checking) that
GuiFontMetrics::pos2x is called with a negative pos value. Add a
special case for this situation.

Fixes bug #10506
2016-12-06 16:16:57 +01:00
Guillaume Munch
588d939722 Cosmetic changes to the needauth dialogs
* Use rich text for this complicated message

* More concise

* Fix line breaking issues

* Remove "Do not show again" checkbox
2016-12-04 18:28:03 +01:00
Guillaume Munch
f9528c63c8 GuiAlert: Convert html to plain text on console output 2016-12-04 18:28:03 +01:00
Guillaume Munch
dbcbf305b2 Improve prediction of block outside covered areas 2016-12-04 18:28:02 +01:00
Guillaume Munch
b329b471d4 Remove useless return leftover from earlier code 2016-12-04 18:28:02 +01:00
Tommaso Cucinotta
f0f555b5be Converters Prefs UI layout clarification. 2016-12-04 17:09:30 +01:00
Guillaume Munch
ee0e95aafb GuiSymbols: Better handling of empty blocks
* endInsertRow was incorrectly placed before endResetModel, sometimes leading to
  bad access by the view before it was informed that the model was empty. In
  fact begin/endInsertRows were redundant with begin/endResetModel.

* Empty blocks are not supposed to be shown. This happened when moving the
  cursor. A valid block is now selected intead. Due to the design/optimisation
  of the model update, this requires a first update with an empty
  model. Simplify the old code.
2016-12-03 23:35:15 +01:00
Guillaume Munch
a19be0314b GuiSymbols: fix char->block lookup 2016-12-03 23:35:15 +01:00
Guillaume Munch
6f07721187 GuiSymbols: Improve the tooltip 2016-12-03 23:35:15 +01:00
Guillaume Munch
851ed60e49 Check the validity of an item before querying its tooltip
In case data() does not handle invalid items.
2016-12-03 23:35:15 +01:00
Guillaume Munch
03a0e983bc GuiSymbols: handle the case of an invalid data
The docs do not guarantee that the index must be valid
2016-12-03 23:35:14 +01:00
Jean-Marc Lasgouttes
7971dc83ef Fix some warnings after 6c9207579 2016-11-23 17:44:22 +01:00
Enrico Forestieri
6c92075799 Amend fix for #10428
- Allow using logical values for icon sizes as the standard sizes may
  differ among different icon sets
- Do not allow setting sizes smaller than smallIconSize

When the logical sizes differ and the icon set is changed, the correct
sizes are established only after a restart.
2016-11-23 17:30:49 +01:00
Tommaso Cucinotta
244de5d2c1 Add 'needauth' option to converters that need explicit user authorization.
Addressing #10481.

This patch adds the new 'needauth' option for converters launching
external programs that are capable of running arbitrary code on behalf
of the user. These converters won't be run unless the user gives explicit
authorization, which is asked on-demand when the converter is about to
be run (question is not asked if the file is cached and calling the
converter is not needed).

The user prompt has a 3rd button so that he/she's not prompted again
for (any converter over) the same document (identified through
buffer->absFileName()).

Two preference options are added:

lyxrc.use_converter_needauth_forbidden disables any converter with
the 'needauth' option, which is meant to force user to an explicit
action via the preferences pane, before being able to use advanced
converters that can potentially bring security threats;

lyxrc.use_converter_needauth enables prompting the user for 'needauth'
converters, or bypasses the check if not enabled, falling back to the
previous behavior.

So, the first option is for maximum security, the second is for
maximum usability.
2016-11-22 23:54:58 +01:00
Daniel Ramöller
e91572a00b Add the icon-size to the toolbar menu
- Adds LFUNs for setting the icon size
- Adds icons sizes to the Toolbars menu
- Uses the Toolbars menu as application context menu
- The context menu can now be user defined in stdcontext.inc

Fixes ticket #10428.
2016-11-22 10:00:52 +01:00
Guillaume Munch
a9eb87a89d Correct computation of math font size
Move math style to FontInfo and compute the font sizes for scriptstyle and
scriptscriptstyle according to standard proportions: 0.73 and 0.55.

This is simpler and more accurate. It also fixes the font size of
${\scriptscriptstyle {\textstyle A}}A$ which exposed the limitations of the
previous approach.
2016-11-21 00:02:35 +01:00
Guillaume Munch
dc5d056dd5 Fix warning during runtime with qt4
Do not use "on_" as a prefix for functions unless the use of auto-connect is
intended.
2016-11-09 23:37:35 +01:00
Guillaume Munch
0220c58ef3 Add comment 2016-11-09 22:54:27 +01:00
Guillaume Munch
3233a822f3 Fix addition of new formats
Regression at cb0a4c66
2016-11-09 19:04:28 +01:00
Guillaume Munch
50ccbd2eab Always prefer breaking at word boundaries
An overlong word containing a hyphen could be broken anywhere, instead of after
the hyphen.

Example: compare the line breaking of

   aaaaa-aaaaa-aaaaa-aaaaa

with

   aaa aaaaa-aaaaa-aaaaa-aaaaa

(with a very narrow window)

This also improves Chinese text in some situations (#10299)
2016-11-06 15:51:22 +01:00
Guillaume Munch
b30f8d3c4b On-screen justification: stretch in proportion with the em, up to a limit
1) Distinguish expanding characters from separators, to fit with Qt's notion of
expanding character which comes from the Unicode std.  CountExpanders() is moved
to FontMetrics to fix a discrepancy with the duplicate implementation from
598f7e4a.

2) Make these expanders stretch on-screen proportionally to the em of the font.
If a row mixes large and small text, LyX let us see which spaces are set in the
bigger font.

3) Now that the stretch is defined in ems, add a limit such that an expander
never stretches more than 1.5em to avoid weird and hard to read justified lines.

4) Add a return boolean to setSeparatorExtraWidth for future use.
2016-11-06 12:20:00 +01:00
Jean-Marc Lasgouttes
b099d9ae15 Fix height of cursor inside insets
It turns out that Cursor::getFont() does not return a fully realized
font in some cases. This patch uses real_current_font instead, which
seems better anyway.

I suspect that all uses of getFont() should be removed, but this is
not code that I know well.

Fixes bug #10478.
2016-11-04 12:01:43 +01:00
Jean-Marc Lasgouttes
5d85a42bf0 QString only uses UTF-16, not UCS-4
This means that, when a string contains high-plane Unicode characters,
the length of a docstring and the corresponding QString will be
different: Qt will encode these characters using several 16bit
characters.

We have additionally to take into account QTBUG-25536, which implies
that sometimes qstring_to_ucs4(toqstr(s)) !=s. It is not clear whether
this bug can be a problem in other places.

Fixes bug #10443.
2016-11-03 14:19:50 +01:00
Scott Kostyshak
ad65f609b6 Do not recenter screen on spelling-continuously
If a user is scrolling and then toggles spellcheck, LyX used to
recenter the screen around the cursor. Now LyX does not recenter.
2016-11-02 21:34:01 -04:00
Juergen Spitzmueller
0894a17e33 Typo. 2016-10-27 19:58:01 +02:00
Jean-Marc Lasgouttes
e832d2e90f Work around issues with Qt5 and Arabic text
This fixes two particular problems

* with Qt5, it seems that QFontMetrics::width does not return the
  correct value for some Arabic text; this patch uses QTextLayout
  instead to compute a string width

* Likewise, the undocumented layout flags TextForceRightToLeft and
  TextForceLeftToRight do not work with Arabic text; this patch uses
  unicode override characters instead.

It might be that the two issues are related. In any case, they do not
happen with latin text where right-to-left direction is enforced. And
they do not happen with Qt4.

Additionally, remove some dead code in GuiFontMetrics::pos2x().

Fixes bug #10436.
2016-10-24 16:31:40 +02:00
Juergen Spitzmueller
e335c764b4 Revert "Fix Ticket #9741 misleading name for font-encoding setting "default"."
This reverts commit e37e4f537c.

The issue still needs discussion.
2016-10-23 17:20:58 +02:00
Jean-Marc Lasgouttes
6375a3cd65 Mark a signal invokation as such 2016-10-23 13:49:06 +02:00
Guillaume Munch
2e45bade7a Simplify and add debug message 2016-10-22 23:24:00 +02:00
Guillaume Munch
e1492a3ab1 Use the new infrastructure to select rows during error reporting 2016-10-22 23:24:00 +02:00
Günter Milde
e37e4f537c Fix Ticket #9741 misleading name for font-encoding setting "default".
It would be nice, if the tooltip showed the value of
lyxrc.fontenc, but too complicated for my simple patch.
2016-10-21 09:10:46 +02:00
Richard Heck
c19794a013 These two routines are now redundant. 2016-10-20 23:07:13 -04:00
Richard Heck
014bc7805e Use a typedef for vector<Format const *>, which is what gets used
for lists of exportable and importable formats.
2016-10-20 23:07:13 -04:00
Richard Heck
e7f39ed377 There is no need now to cache format information in the SendTo
dialog.
2016-10-20 23:07:13 -04:00
Richard Heck
7fd1a14c1b Since we're now caching this, we can sort it once, rather than
lots of times.
2016-10-20 23:07:13 -04:00
Richard Heck
0b67e103e9 Simple cache for information on exportable formats, since we seem
to access this information a lot.
2016-10-20 23:07:13 -04:00
Jean-Marc Lasgouttes
fbba865d28 Fix compiler warning from clang 3.9 2016-10-20 09:31:01 +02:00
Jean-Marc Lasgouttes
4065f596ad Remove unused methods in anononymous namespace
These have been flagged by gcc 6.
2016-10-19 17:51:32 +02:00
Jean-Marc Lasgouttes
6cb05ce8bb Do some caching of window title and related UI
This should avoid performance problems related to the window update machinery.
Moreover this fixes a crash introduced by 82808fea when closing a file.

Note that GuiWorkArea::Private already had a read_only_ member, but it
was unused.

Also rename LyXVC::vcname() to LyXVC::vcstatus() since it now contains
directly the UI string to be shown.
2016-10-19 11:59:47 +02:00
Guillaume Munch
e0e765f6a9 Get rid of dirty BufferView pointer
Now that there is a signal to inform the controller when the buffer view has
changed, it is no longer necessary to store a perishable pointer to a buffer
view in the dialog view. (Indeed, it was only really useful for checking whether
the new buffer view pointer was different from the old one.)

TODO: other dialogs should be audited for similar hazards.
2016-10-17 00:16:59 +02:00
Guillaume Munch
de19b8fc2d Take advantage of new bufferViewChanged signal 2016-10-17 00:16:59 +02:00
Guillaume Munch
c438d794ff Factor code after buffer change 2016-10-17 00:16:59 +02:00
Guillaume Munch
f4c390712e New virtual method frontend::Dialog::on_BufferViewChanged()
This is called anytime the buffer view attached to the GuiView changes.
2016-10-17 00:16:59 +02:00
Guillaume Munch
9b4926c6e6 Fit cursor and update screen after reverse-search 2016-10-17 00:16:59 +02:00
Guillaume Munch
01d6333db2 Implement reverse-search in the source panel
Double-clicking on a line in the source panel triggers the selection of the
corresponding line in the Buffer View.
2016-10-17 00:16:59 +02:00
Guillaume Munch
67805de7de New LFUN paragraph-goto id_start pos_start id_end pos_end
This selects from start to end.

id_end must be in the same buffer as id_start.
2016-10-17 00:16:59 +02:00
Guillaume Munch
1f945177b9 Docstringify getLongString in general and preamble snippets in particular
Prepare ground for TexRow InPreamble
2016-10-17 00:16:59 +02:00
Enrico Forestieri
ded8b1b3da Remove context help button hint from file dialogs
This removes the useless '?' button that appears in Windows builds
when using non-native dialogs. Complements cf26d53e.
2016-10-10 01:25:07 +02:00
Scott Kostyshak
f411040a33 Further amend 168d3557 to satisfy GCC 4.6
GCC 4.6 does not support non-static data member initializers.

As Guillaume points out, changing to static does not change the
intent.
2016-10-09 18:08:42 -04:00
Scott Kostyshak
5fd21db9d4 Amend 168d3557
I forgot to append an underscore for the private data member.
2016-10-09 17:22:22 -04:00
Scott Kostyshak
168d355721 Factor out magic zoom minimum to a const member
The limit of 10% is used in both getStatus() and dispatch() to set a
minimum zoom level. Having it centralized makes the code more
readable and makes changing the minimum less error-prone.
2016-10-09 17:18:07 -04:00
Scott Kostyshak
6a0e5571c5 Whitespace 2016-10-09 17:18:07 -04:00
Daniel Ramöller
cf26d53e03 Remove question marks from Windows dialogs 2016-10-09 19:50:34 +02:00
Guillaume Munch
79a947c904 Work around dangling pointer
A better solution would be to entirely get rid of this borrowed pointer with
unclear lifetime, but this requires to introduce a new signal for when the
buffer view attached to the GuiView has changed.
2016-09-29 12:37:19 +02:00
Guillaume Munch
3d7ede6059 Clarify that the Dialog::lyxview_ pointer is in fact a reference 2016-09-29 12:37:19 +02:00
Guillaume Munch
f0959cc292 explicit operator bool 2016-09-23 23:39:48 +02:00
Jean-Marc Lasgouttes
7cbc0c16a8 Simplify the code that sets the read-only emblem in status bar
Actually QIcon is able to handle transparently the svg icons.

Patch from Enrico.
2016-09-23 11:18:28 +02:00
Guillaume Munch
ca58674267 Better title for ViewSource
The title is changed to "LaTeX (pdflatex) Preview", etc. depending on the
format. The actual default format is computed.

The menu name "Source Pane" is replaced by "Code Preview Pane" to better reflect
its purpose.
2016-09-21 16:42:38 +02:00
Jean-Marc Lasgouttes
bbe36ce6ce Do not use em dash in window title
It seems that only KDE does that. Gnome does not, Windows does not either.
I do not think that we can/want to detect a KDE environment at run-time.
2016-09-21 13:56:28 +02:00
Guillaume Munch
8da87f9dbf amend 4d991120 2016-09-18 14:43:26 +01:00
Juergen Spitzmueller
7d4292918e Remove unnecessary directives and preset search on fly. 2016-09-18 09:10:24 +02:00
Juergen Spitzmueller
f1ae30919f Connect filter reset button and remove unnecessary directives. 2016-09-18 09:02:23 +02:00
Juergen Spitzmueller
47ea77a8d7 Fix string 2016-09-17 13:06:41 +02:00
Juergen Spitzmueller
774becf693 Clean up the crossrefs dialog. 2016-09-17 13:03:33 +02:00
Juergen Spitzmueller
3294b16bf6 Keep citation style settings bot within and between sessions.
Fixes: #10256
2016-09-16 19:39:53 +02:00
Juergen Spitzmueller
0c1a023c70 Citation dialog: add & improve tooltips. 2016-09-16 13:47:26 +02:00
Juergen Spitzmueller
5225418d8a CitationUi: Fix small layout glitch 2016-09-16 10:35:06 +02:00
Juergen Spitzmueller
824e24ca60 Citation dialog redesign 2016-09-16 09:21:04 +02:00
Jean-Marc Lasgouttes
9313f8565b Set window title before stting modified state
Fixes message "QWidget::setWindowModified: The window title does not
contain a '[*]' placeholder" when opening a non-existent file.
2016-09-14 22:37:06 +02:00
Juergen Spitzmueller
c0a425a319 Move wrap check for simple search/replace to lyxfind
This gets rid of some dirty dispatch tricks and fixes wrap-around
on replace and in the spellchecker

Fixes: #10378
2016-09-14 10:23:39 +02:00
Juergen Spitzmueller
4c27c921f0 Minor amendment to b95262f487
Just for consistency.
2016-09-10 10:32:40 +02:00