Commit graph

186 commits

Author SHA1 Message Date
GenjiFujimoto 16943ccab1 Add ankicard link and button
make selectedText const

add a new keyboard shortcut: ctrl+shift+n to make a card

if word is empty, warn and exit

rename

return after ankisearch

remove temp vars

change the anki action's text depending on selected text

reformat article maker

the anki button is shown under the heading

revert to the previous way of constructing gddictname

to reduce size of the diff
2023-04-06 09:06:57 +08:00
Xiao YiFang 2407cf2a88 use QTextToSpeech module to play tts.
fix code smells
2023-03-29 23:16:01 +08:00
Ren Tatsumoto fb6d4f9ccd
Let the user disable main window stealing focus when searching. (#387)
* add a checkbox that allows the user to disable main window being raised when search is triggered

* run clang-format on the edited lines

* partially revert clang-format
2023-03-17 09:54:45 +08:00
Ren Tatsumoto 1a0af48a7a
Improve Anki support (#384)
* allow the user to configure word,text,sentence Anki fields

* if sentence field is not set, don't add it

* mark the target word bold, if possible

* Update how to connect with anki.md

* rename default field names
2023-03-16 19:55:47 +08:00
Abs62 620346bfaa Remove 0xAD symbol (soft hyphen) for popup window search 2023-01-24 20:04:14 +08:00
Xiao YiFang 794d4b934f fix: replace hhotkeyedit with qkeysequenceedit
related to #291
2022-12-30 01:11:22 +08:00
shenleban tongying 9828ef9dc8 perfect_dark: add toggle option to enable Dark Reader mode 2022-12-26 12:29:30 -05:00
shenlebantongying 6fc3684b0a
Add Lingua Libre support (#268)
* lingua: add a dummy dict

* lingua: working but output plain json as article

* lingua: add html audio plays

* lingua: fix qmake build

* fix: qmake on mac INCLUDEPATH

* lingua: add config ui to dict sources edit dialog

* lingua: add config logics

* lingua: use the configured iso language code to do query

* lingua: style polish
2022-12-24 22:42:40 +08:00
Xiao YiFang 41d05cb27a feature: enhance clipboard data processing
when copied text from some applications such as Kindle PC, the copied text will have extra informations added by
the application . This option used to strip the added text away
2022-12-13 21:42:53 +08:00
Xiao YiFang d969b63c1e add experimental darkmode
relate #188
2022-12-11 09:29:33 +08:00
shenleban tongying 664a1e87e4 Remove ScanPopup Alt mode ("Keys may also be pressed afterwards").
The functionality of "select then press a key to get popup " has equivalent of using Ctrl+C+C on Hotkeys.
2022-11-20 04:12:58 -05:00
shenleban tongying 20b435053f X11: Add two Preferences to optional tracking clipboard or selection tracking 2022-11-19 11:35:25 -05:00
shenleban tongying b3b740854a Unify trackClipboardChanges and enableScanPopupAction
* There is no difference between those two on Windows and MacOS which only support clipboard (Ctrl+C) scanning

* Q_WS_X11 was defined on Qt4, and it causes the super weird trackClipboardChanges to occur on Windows
2022-11-19 10:30:31 -05:00
shenleban tongying aa3778bb64 Remove enableScanPopup: Complete. Remove from config file and ui file
At here, all code working exactly same as before
The only change is that ScanPopup always enabled for all users
2022-11-19 09:50:20 -05:00
Xiao YiFang f33743b448 Merge commit 'fdcd6a37' into gd-master 2022-11-06 10:05:49 +08:00
Igor Kushnir fdcd6a3773 Demote input phrase limit message from warning to debug
Limiting input phrase length is disabled by default. The default length
limit value is 1000. The user has to enable the option and lower the
length limit in order to be surprised by missing translation. By making
such configuration changes, the user should become aware of this feature
and its effect.

As the person who has implemented this feature and uses 100 as the
length limit, I am never surprised or disappointed by missing
translation. The only annoyance is this warning that floods my systemd
journal. Apparently I accidentally select overly long phrases way too
often.
2022-11-05 17:38:10 +03:00
Xiao YiFang 11b29d30a7 clean code:remove x11 scanpopup flag setting 2022-09-25 12:49:22 +08:00
Xiao YiFang db251ac44f revert embed translation 2022-09-22 20:06:43 +08:00
Xiao YiFang ba10f68c1c clean code: replace throw() with noexcept 2022-06-03 21:29:06 +08:00
Xiao YiFang 0a2661f986 add 'send to anki' function
users can configure the ankiconnect to use together with anki
2022-05-21 17:34:22 +08:00
Xiao YiFang fbfc2d7f43 feature: add anki connect configuration 2022-05-21 10:30:32 +08:00
Xiao YiFang 9c402d986e opt: add dictionary fallback font family settings 2022-05-08 16:44:09 +08:00
xiaoyifang 5a0a6c6491 feature:add ignore punctuaion option 2022-04-23 16:15:23 +08:00
xiaoyifang eaf76fbcb6 clean code:remove useless code
the maximumwindowssize was only set value in the ~MainWindows() which means
it can not be saved into the config file.
2022-04-19 22:22:03 +08:00
xiaoyifang 64d989f9c5 clean code:remove unnecessary typedef 2022-04-05 20:53:25 +08:00
xiaoyifang 4648d95b94 fix:a regression .ctrl+c on article right context menu ,translation lost . 2022-03-31 09:55:43 +08:00
xiaoyifang 6191bed3ee optimize: embed ts files
in linux appimage ,translation files can not be read in the AppImage.
2022-03-27 21:03:57 +08:00
xiaoyifang 0d38bcf60f clean: remove stdint_msvc.h
too old
2022-02-26 14:01:34 +08:00
xiaoyifang 182758a59e fix: warning,throw exception close #12 2022-02-13 15:40:21 +08:00
Igor Kushnir d7ec541383 Add "Automatically scroll to target article" option
When a user clicks on a link in a dictionary or requests translation of
a word by double-clicking or translates selection via the context menu,
at first the article from the highest-priority dictionary is at the top.
Then, after approximately one second, the article from the dictionary,
out of which the translation was requested, becomes current and the view
scrolls down to this article placing it on top, hiding articles from the
dictionaries above it.

Such application behavior is inconvenient in some workflows so that the
user manually navigates to the top dictionary translation when this
automatic scrolling happens.

For example: a user has English->Russian dictionaries and
English->English dictionaries. The English->Russian dictionaries are
higher up in the dictionary order because they provide easier/faster to
understand translations. Some rare words and phrases are missing from
the English->Russian dictionaries however. Thus the user occasionally
reads the English explanation of a word/phrase. When the user
double-clicks on a word or follows a link in the English->English
dictionary article, she would rather see translations from the
preferable English->Russian dictionaries.

The new option allows to disable automatic scrolling and ensure that
articles from higher-priority dictionaries are visible. The option
doesn't affect backward/forward navigation via arrow buttons or
Alt+Arrow shortcuts: these still scroll to the stored vertical position
among articles. This remaining automatic scrolling happens much faster,
is not a problem for the described use case and hopefully for other use
cases.
2022-02-12 12:48:48 +08:00
xiaoyifang c2b466ce19 Merge branch 'feature/cpp-refactor-code' into staged 2022-02-03 17:51:40 +08:00
xiaoyifang 12fca6e38c imp. remove mouseover32 preferences.ui configuration . 2022-02-03 16:55:11 +08:00
yifang f7b2f3151d fix: chinese opencc does not work on linux 2022-01-29 09:27:32 +08:00
xiaoyifang c7d33f4eb9 clean code: remove old cpp feature 2022-01-09 16:35:07 +08:00
xiaoyifang 5eac08c97a rename qt4x5.hh to utils.hh
the filename qt4x5 is not proper now,for the qt4 version can never meet.and the qt5 is actually mean qt>5 .
2021-12-13 22:45:35 +08:00
yifang.xiao 0365015ac6 clean code:
remove "#if QT_VERSION >= QT_VERSION_CHECK( 5, 0, 0 )" check ,the check should always be true based on current situation.
2021-12-13 22:45:33 +08:00
fenuks b9b7067b5b Linux-specific: Optionally store history in XDG_DATA_HOME in Qt5 build
Separate data directory is only used if history file isn't already
present in the configuration directory.

This commit together with two previous ones allows to switch to
layout described in XDG Base Directory specification. Data is not
migrated automatically and old ~/.goldendict home dir has precedence.
If you wish to use standards-compliant locations, move files and
directories manually:

```
CONFIG="${XDG_CONFIG_HOME:-$HOME/.config}/goldendict"
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}/goldendict"
DATA="${XDG_DATA_HOME:-$HOME/.local/share}/goldendict"
mkdir -p "${CACHE}"
mkdir -p "${DATA}"
mv ~/.goldendict/index "${CACHE}"
mv ~/.goldendict/history "${DATA}"
mv ~/.goldendict/ "${CONFIG}"
```
2021-11-10 18:52:15 +03:00
fenuks ae4eea3513 Linux-specific: Optionally store index in XDG_CACHE_HOME in Qt5 build 2021-11-10 18:52:15 +03:00
fenuks f6742d8fb4 Linux-specific: Optionally use XDG_CONFIG_HOME for config in Qt5 build 2021-11-10 18:52:15 +03:00
fenuks 5de5f18f48 Linux-specific: Use lowercase cache directory name in Qt5 build
Please note that this effectively discards network cache stored in
"${XDG_CACHE_HOME:-$HOME/.cache}/GoldenDict/network". You can safely
delete the obsolete cache directory. If you wish to preserve and
keep using the existing network cache, move it into the new location
manually:

```
CACHE="${XDG_CACHE_HOME:-$HOME/.cache}"
mkdir -p "${CACHE}/goldendict"
mv "${CACHE}/GoldenDict/network" "${CACHE}/goldendict"
rmdir "${CACHE}/GoldenDict"
```

If GoldenDict with this change has been already used, new cache dir
will already have "${CACHE}/goldendict/network", and mv will refuse to
merge directories. In such case, you will need to manually remove it
before moving directory with old cache.
2021-11-10 18:52:15 +03:00
Igor Kushnir fdf0464628 Save&restore the geometry of Dictionaries dialog
The geometries of many GoldenDict's dialogs and windows are already
stored in config. Dictionaries dialog can make use of extra horizontal
space when there are many groups, extra vertical space - when there are
many dictionaries. A user can now resize this dialog to her liking once.
2021-06-23 09:53:42 +03:00
Igor Kushnir 60bc05218f Add input phrase's punctuation suffix to alts
Preferences::sanitizeInputPhrase() transforms an input phrase by
removing its whitespace/punctuation prefix and suffix. Translating a
phrase from X11 primary selection or from clipboard, via mouse-over or
from the command line results in such sanitization. This is useful when
a punctuation mark or a space is selected accidentally alongside a word.
This sanitization can be undesirable, however, when an abbreviated word
is selected. For example: "etc.", "e.g.", "i.e.".

This commit implements searching for the input word with the punctuation
suffix preserved as an alternative form of the sanitized word to show
articles for both. For example, when the word "etc." is translated from
the clipboard, both "ETC" and "etc." articles are displayed.

The punctuation suffix is preserved when the word is passed from the
scan popup to the main window and when the translate line text is
refreshed (e.g. when the current group is changed). The suffix is not
stored in history and favorites (doing so would require file format
changes and possibly substantial code changes, this can be implemented
later if need be).

Trim the input phrase once in ArticleNetworkAccessManager::getResource()
instead of verbose trimming in multiple places in
ArticleMaker::makeDefinitionFor().

Closes #1350.
2021-06-17 12:06:36 +03:00
Igor Kushnir 27ca24f83d Fix indentation of recently added code: 4 => 2 spaces 2020-11-19 12:49:23 +02:00
Igor Kushnir 193aa4e31d Set up network disk cache for articleNetMgr
When a Wikipedia article is already cached, this change reduces the
amount of sent and received network data almost tenfold.

Setting up a network disk cache in the same way for dictNetMgr does not
noticeably impact the amount of network traffic. Either this network
access manager sends and receives very little data or the data is never
the same. So dictNetMgr does not need a disk cache.

Use QNetworkDiskCache's default maximum size of 50 MiB as the default
network cache size. This size is large enough to accommodate tens of
huge MediaWiki articles. It is also small enough that the user is
unlikely to run out of disk space because of the cache.

Clear network cache on exit by default because most users probably
don't load the same online articles after restarting GoldenDict. Plus
storing the network cache on disk indefinitely by default would be a new
and unexpected to the users privacy risk.

Nikita Moor came up with the idea and wrote an initial network disk
cache implementation in #1310.
2020-11-18 19:04:28 +02:00
Abs62 c02915d5e5 1. Set limit input phrase length option turned off by default
2. Set input phrase length limit to 1000 by default
2020-11-16 18:12:17 +03:00
Igor Kushnir 61eb4e08fe Add options to limit input phrase length
When a long text is accidentally selected or copied while the scan popup
is on, Goldendict spends a lot of CPU time to gradually create a
"No translation..." article. When translation of huge (e.g. 15 MB) text
from the clipboard is (accidentally) requested, Goldendict freezes for a
while. Turning the added input phrase limit option on eliminates this
waste of the CPU time.

I have implemented these options primarily for selection and clipboard,
but they also affect mouse-over translation on Windows and command line
translation requests. This is mostly because I did not bother to limit
the options' scope. I guess hovering over an extremely long text without
spaces (e.g. Base64-encoded) could cause the same performance issue on
Windows. The command-line translation could be requested from a script
that integrates Goldendict with some other application, from which long
text could be sent for translation by accident.

I hope that the default value of 200 characters will be sufficient for
just about any real-world user input in any language. The option is on
by default, because the default length limit is generous and any longer
text is unlikely to be sent for translation intentionally. My personal
preference for the input phrase length limit is 100 symbols.

ArticleView::pasteTriggered() didn't call QString::simplified() on the
text retrieved from the clipboard. I assumed this was an oversight, so
now it *is* called - indirectly, via Preferences::sanitizeInputPhrase().
2020-11-13 17:44:38 +02:00
Igor Kushnir 0b7c65023c articleSizeLimit option: minor code cleanup
When an integral value is converted to a signed integer type, if the
result is not representable, the resulting value is implementation
defined (until C++20). Convert the string value from configuration file
to the target type (int) to avoid the redundant type conversion.

Use the more direct and efficient QSpinBox::value() instead of
QAbstractSpinBox::text().toInt().
2020-11-06 22:04:59 +02:00
Passw abe8e9efad
Fix bug on not showing default programs under Linux/macOS 2020-10-10 14:49:36 +08:00
Abs62 d7bc012411 Add option to ignore diacritics while articles search 2018-06-13 19:00:42 +03:00
Abs62 fd00e9d156 Fix gcc 7.3 compiler warnings (#issue 978) 2018-05-21 18:32:04 +03:00