diff --git a/2017/01/09/albert-now-has-a-website.html b/2017/01/09/albert-now-has-a-website.html new file mode 100644 index 00000000..fbcc49c2 --- /dev/null +++ b/2017/01/09/albert-now-has-a-website.html @@ -0,0 +1,135 @@ + + + + Albert - Albert finally has a website + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert finally has a website

+

Until recently the information relevant to the user was cluttered over several places. For a motivation there was a small landing page on github-pages, the github repository had a README.md, which basically served the same purpose, to get help the user had to go to the wiki and for news… well there was nothing. Finally there is now a place where everything gets merged to a single website: The project website albertlauncher.github.io.

+ +

Using Jekyll and a handcrafted theme based on the Milligram CSS framework the static website offers a nice reading experience and is still somewhat maintainable for a lazy c++ guy. The docs are dynamically generated from markdown sources and allow Github users to send pull request for modifications, e.g. typos. News post are dynamically generated too and even build a RSS news feed to allow interested users to subscribe and be up to date.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/01/11/repository-moved-to-organization.html b/2017/01/11/repository-moved-to-organization.html new file mode 100644 index 00000000..3d0b0f57 --- /dev/null +++ b/2017/01/11/repository-moved-to-organization.html @@ -0,0 +1,136 @@ + + + + Albert - Repository moved to organization page + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Repository moved to organization page

+

Finally albert moved from my user page to the albert organization page. The repository url is now https://github.com/albertlauncher/albert.git. This has some implications for developers who cloned the repository: The git remote urls are now invalid. Fix them by using the git commandline (or your git tool of choice):

+ +
git remote set-url <name> https://github.com/albertlauncher/albert
+
+ +
+
+
+
+ + + +
+ + diff --git a/2017/01/17/albert-v0.9.0-released.html b/2017/01/17/albert-v0.9.0-released.html new file mode 100644 index 00000000..2ad37996 --- /dev/null +++ b/2017/01/17/albert-v0.9.0-released.html @@ -0,0 +1,181 @@ + + + + Albert - Albert v0.9 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.9 released

+

Almost four months have passed since the last alpha release. Dozens of hours of contemplation about a sophisticated design, dozens of hours of implementation and even a broken arm later I am happy to announce the release of Albert v0.9.

+ +

This release comes with a new architecture that allows extensions to register extensions themselves. Based on this changes a new extension “External extensions” has been implemented, which can be used to let Albert run external programs and scripts as extensions. Here’s an example of an external bash extension that lets you run the scan popup of goldendict as external search engine:

+ +
#!/bin/bash
+case $ALBERT_OP in
+  "METADATA")
+    STDOUT='{
+      "iid":"org.albert.extension.external/v2.0",
+      "name":"Goldendict",
+      "version":"1.0",
+      "author":"Manuel Schneider",
+      "dependencies":["goldendict"],
+      "trigger":"gd "
+    }'
+    echo -n "${STDOUT}"
+    exit 0
+    ;;
+  "QUERY")
+    QUERYSTRING="${ALBERT_QUERY:3}"
+    echo -n '{
+      "items":[{
+        "id":"goldendict",
+        "name":"Use goldendict to lookup '"'${QUERYSTRING}'"'",
+        "description":"Opens the scan popup and searches for '"'${QUERYSTRING}'"'.",
+        "icon":"goldendict",
+        "actions":[{
+          "name":"goldendict",
+          "command":"goldendict",
+          "arguments":["'${QUERYSTRING}'"]
+        }]
+      }]
+    }'
+    exit 0
+    ;;
+esac
+
+
+

Just a few words on this to get you started. The core application runs the extension with several environment variables set. The vars used in this script are $ALBERT_OP and $ALBERT_QUERY. $ALBERT_OP tells the extension what to do. When the user enters a query the extension is started with $ALBERT_OP set to QUERY and $ALBERT_QUERY set to the string that the user entered.

+ +

The bash script in the listing above extracts the query string by cutting the trigger prefix and runs goldendict with this query string, which opens the goldendict scan popup with the query string. Now this was quick! For the details check the relevant section in the documentation.

+ +

Further, finally a Firefox bookmark extension made it into the extension inventory. Just as the chrome bookmarks extension the extension basically indexes the bookmarks and makes them accessible via Albert. In the settings you can choose the user profile you want to track and set if the bookmarks should open in the default browser or in Firefox.

+ +

The virtual box extension got some major improvements as well. You can now control the state of the virtual machine, i.e. if it is turned off you can run it (as before), if it runs you can pause, stop or save it, if it is paused… I think you got it.

+ +

Transparent to the user, things changed a lot under the hood to make albert even better and of course several bug fixes made it into v0.9.0 as well. If you want to see the complete changes check the git log.

+ +

Have fun with it!

+ +
+
+
+
+ + + +
+ + diff --git a/2017/01/23/albert-v0.9.1-released.html b/2017/01/23/albert-v0.9.1-released.html new file mode 100644 index 00000000..c4fcf615 --- /dev/null +++ b/2017/01/23/albert-v0.9.1-released.html @@ -0,0 +1,142 @@ + + + + Albert - Albert v0.9.1 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.9.1 released

+

This release was intended to contain only fixes. +However there are some minor nifty changes recognizable by the user.

+
    +
  • Although not planned to be made official you can scan your files by typing albert scan files. Note that this feature may disappear someday.
  • +
  • You can choose the terminal command in the settings dialog. The list shows all installed terminals. If you like you can provide a custom command.
  • +
  • The app icon now uses a theme icon.
  • +
  • Items of the files extension have now an “Open terminal here” action.
  • +
+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/01/30/albert-v0.9.2-released.html b/2017/01/30/albert-v0.9.2-released.html new file mode 100644 index 00000000..27c6e6c3 --- /dev/null +++ b/2017/01/30/albert-v0.9.2-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.9.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/02/05/albert-v0.9.3-released.html b/2017/02/05/albert-v0.9.3-released.html new file mode 100644 index 00000000..edc1049c --- /dev/null +++ b/2017/02/05/albert-v0.9.3-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.9.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/03/01/albert-v0.9.4-released.html b/2017/03/01/albert-v0.9.4-released.html new file mode 100644 index 00000000..3acd5780 --- /dev/null +++ b/2017/03/01/albert-v0.9.4-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.9.4 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/03/13/albert-v0.9.5-released.html b/2017/03/13/albert-v0.9.5-released.html new file mode 100644 index 00000000..76d10b37 --- /dev/null +++ b/2017/03/13/albert-v0.9.5-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.9.5 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/03/19/albert-v0.10.0-released.html b/2017/03/19/albert-v0.10.0-released.html new file mode 100644 index 00000000..2e42c896 --- /dev/null +++ b/2017/03/19/albert-v0.10.0-released.html @@ -0,0 +1,151 @@ + + + + Albert - Albert v0.10 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.10 released

+

Albert v0.10 introduces tab completion using the Tab key. This allows extensions to suggest a completion text for the input box. An example: You type 2+2 into the box. When you select the calculator item and press complete the equation in the input box resolves to the result 4. The alternative actions have moved to the Alt key, which has to be hold to show the alternative actions. The default fallback is now on Meta.

+ +

Hovering over the input box the mouse wheel can now be used to browse the history, exactly the way you are used to it with Ctrl+.

+ +

Further there is a new group of themes, the Spotlight themes, which come in three flavors: Bright, Dark and Space (Gray with Blue accent).

+ +

(image removed)

+ +

Albert v0.10 ships with two new extensions, MPRIS and a rudimentary ssh extension. Check their documentation for more details.

+ +

The terminal extension now provides the shell aliases too.

+ +

Further the files extension provides now a way to browse through paths that are not indexed. Queries that begin with either / or ~/ are interpreted as a beginning of a path and the extension lists the files in this directory. In combination with the tab completions this is a nice way to browse the file system.

+ +

The application extension allows now to ignore the OnlyShowIn and NotShowIn keys in the desktop entries.

+ +

For developers: The bash script to clone the template extension is now deprecated and replaced by a Python script.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/03/20/albert-v0.10.1-released.html b/2017/03/20/albert-v0.10.1-released.html new file mode 100644 index 00000000..b0ec859a --- /dev/null +++ b/2017/03/20/albert-v0.10.1-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.10.1 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/03/24/albert-v0.10.2-released.html b/2017/03/24/albert-v0.10.2-released.html new file mode 100644 index 00000000..b67f8c2a --- /dev/null +++ b/2017/03/24/albert-v0.10.2-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.10.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/04/02/albert-v0.10.3-released.html b/2017/04/02/albert-v0.10.3-released.html new file mode 100644 index 00000000..a0e8c6f9 --- /dev/null +++ b/2017/04/02/albert-v0.10.3-released.html @@ -0,0 +1,137 @@ + + + + Albert - Albert v0.10.3 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.10.3 released

+

This release contains the latest fixes.

+ +

Due to problems with the indexing (#419) the terminal extension changed. The extension does no more show suggestions, but a single item to run your command instead. Further the default action is now “Run in terminal”. However the “Run in shell” action is still available in the alternative actions.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/04/14/albert-v0.10.4-released.html b/2017/04/14/albert-v0.10.4-released.html new file mode 100644 index 00000000..fbde294d --- /dev/null +++ b/2017/04/14/albert-v0.10.4-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.10.4 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/04/15/albert-v0.11.0-released.html b/2017/04/15/albert-v0.11.0-released.html new file mode 100644 index 00000000..f336f11c --- /dev/null +++ b/2017/04/15/albert-v0.11.0-released.html @@ -0,0 +1,149 @@ + + + + Albert - Albert v0.11.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.11.0 released

+

Albert v0.11.0 is all about the files extension. The new release finally allows a fine-grained control of the MIME types to be indexed by the files extension. In the settings of the files extension the Advanced button in the Indexed MIME types group box opens a dialog which allows the user to set wildcard patterns that are used to match against the MIME types of the indexed files. Hopefully this is a partial solution for #1 for some of you too.

+ +

Extensions can now have multiple triggers. An example of multiple triggers is the files extension: A prefix of / or ~ triggers the files extension in browse mode.

+ +

The sorting algorithm is now stable. This means that items that are equal regarding their sorting order are now displayed in the order they were added to the results.

+ +

Based on this the browse mode now lists the results in lexicographical order with directories before the files.

+ +

Additionally the use of fallbacks have been disabled for triggered queries. The rationale behind this decision is that the user implicitly tells that he want something special, not a general fallback.

+ +

All of the changes above make the files browse mode extremely convenient and clutter free.

+ +

Further the websearch extension now contains an URL handler. Valid URLs are recognized as such if it contains a top- and second level domain, e.g. google.com. The top level domain has to be one of the ones registered by the Internet Assigned Numbers Authority.

+ +

Last but not least the qss property selection-color works as expected now.

+ +

As always check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/04/16/albert-v0.11.1-released.html b/2017/04/16/albert-v0.11.1-released.html new file mode 100644 index 00000000..156d5803 --- /dev/null +++ b/2017/04/16/albert-v0.11.1-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.11.1 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/05/13/albert-v0.11.2-released.html b/2017/05/13/albert-v0.11.2-released.html new file mode 100644 index 00000000..4c7d2520 --- /dev/null +++ b/2017/05/13/albert-v0.11.2-released.html @@ -0,0 +1,142 @@ + + + + Albert - Albert v0.11.2 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.11.2 released

+

This release contains the latest fixes. Further the following minor things changed:

+ +
    +
  • The web searches can not be enabled/disabled anymore as fallbacks. There will be a more generic mechanism that is responsible for that.
  • +
  • URLs starting with http and https skip the TLD validation. This way you can access e.g. host in the LAN.
  • +
  • The files extension does not require at least three chars anymore. Make sure you set your file filters correctly.
  • +
  • Home and End now work for the results list holding Ctrl.
  • +
+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/05/28/albert-v0.11.3-released.html b/2017/05/28/albert-v0.11.3-released.html new file mode 100644 index 00000000..cd592499 --- /dev/null +++ b/2017/05/28/albert-v0.11.3-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.11.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/06/09/albert-v0.12.0-released.html b/2017/06/09/albert-v0.12.0-released.html new file mode 100644 index 00000000..b71b3844 --- /dev/null +++ b/2017/06/09/albert-v0.12.0-released.html @@ -0,0 +1,139 @@ + + + + Albert - Albert v0.12.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.12.0 released

+

Albert v0.12.0 finally comes with the capability of git-like ignore files. There have been ignore files in the versions before, but they only supported wildcard matching the filename. The ignores in v0.12.0 now support relative patterns by prefixing the pattern with a slash. This way users can define global excludes. Further the wildcard character * now behaves like in git ignore files by matching all characters but slashes. For wildcard matching including slashes use the double asterisks **. Further files excluded by loose patterns can be included again by prefixing the pattern by prefixing the pattern with !. For more details and caveats check the docs on the files extension.

+ +

The websearch extension got some attention too: The settings UI is now much more comfortable. The list now supports drag and drop and the search engines are now edited using a dedicated dialog.

+ +

A minor change has been made to the terminal extension: The default action now launches in a shell without terminal.

+ +

As always check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/09/28/albert-v0.13.0-released.html b/2017/09/28/albert-v0.13.0-released.html new file mode 100644 index 00000000..83f577c3 --- /dev/null +++ b/2017/09/28/albert-v0.13.0-released.html @@ -0,0 +1,175 @@ + + + + Albert - Albert v0.13.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.13.0 released

+

Albert v0.13 sets the focus on new frontends and performance optimizations in the core.

+ +

Changes in the core

+ +

The frontend is now completely modular. From now on albert supports not only theming but an +abstract way to write completely separated user interfaces. You can even write one on your own since they are plugins now! No, don’t. Designing frontends is a pain, PRs for curses interface welcome though ;D. The really amazing thing is that this finally allows using QML for designig frontends.

+ +

QML is a user interface markup language. It is a JSON-like declarative language for designing user interface–centric applications. Inline JavaScript code handles imperative aspects. This allows extremely flexible, flashy and animated interfaces, without coding imperative lines for hours and hours.

+ +

v0.13 comes with a new ready to use QML frontend plugin. QML allows to write the entire user interface in QML and Javascript. There is actually no need for another QML UI plugin anymore since the C++ code below to run QML would not change. Hence the QML plugin itself is modular, designed to have several styles adhering to a determined QML-C++ interface. You can even write one on your own! No, dont, unless you’re a dev. Actually its still a pain to write polished UIs, although its pretty easy. The devil’s in the details.

+ +

A style in this context means a QML Frontend written in QML. v0.13 comes with one standard style: The Box Model style. Looks pretty similar to the Widgets Box Model, but as you guessed, its flexible, animated and whatever. The Box Model style has properties that can be set with predefined themes. You could even make your own theme with the easy to use property editor without touching a single line of code! No don’t… just kidding, do it! Its fun.

+ +

Under the hood albert got some performance improvements. In the core ranking scores are now precomputed and items are added using move semantics to avoid expensive reference counting. Further you can tick the option lazy sort which delays sorting the items displayed until you actually display them by scrolling down. This has some implications on the scrollbar and the Ctrl+End button. The scrollbars height and position is determined by the amount of sorted instead of the actual amount of items and the Ctrl+End button moves the highlight to the last sorted item, which will trigger fetching and sorting of new items. So you wont be able to go to the actual last item. If you use neither of them enable it. It will save you some milliseconds on queries.

+ +

Changes in the extensions

+ +

The files extension now has a tree structured folder index for smart indexing an less space +requirements. QStrings are memory expensive. Inherently to the tree structure of the file system, the prefix of a path repeatedly occurs in the file paths. The tree structured index avoids this kind of duplication. Further the tree stores information about the modified times to determine if an update of the directory is necessary at all. This greatly reduces index times and resource consumption.

+ +

Then there are several minor changes, the minimum language standard changed to C++14 and the minimum required CMake version is now 3.1.3. This comes along with the idea to always develop against the latest Ubuntu LTS.

+ +

Further several configuration paths changed. The uniform data location are now like {configPath, dataPath, cachePath}/albert/<extensionId> for each extension and type. If something broke while updating check if the folders are in the correct place.

+ +

The terminals tab completion for the executable is shell like, by completing the common prefix of all matches.

+ +

New actions were introduced. There’s a file action “execute file” and a app action “run as root” using gksudo now.

+ +

The interface of the external extensions changed slightly. The trigger is now removed from the query string before extension get called.

+ +

New extensions

+ +

Key Value Store lets you store key value pairs for later lookup, e.g. "IBAN": "DE1329423908429304102" or "Telefon": "+49 176 32434920". Use the trigger kv to interact with the extension. Set values with kv set <key> <value>, unset values with kv unset <key> and get them either by directly calling the extension kv <keyprefix> or by regular lookup with a prefix of the key.

+ +

Hash Generator does string hashing for you. Enter hash or the name of the hash directly, e.g. md5, and a string you want to hash. You will get the hashes as results. Exmaple: md5 hashsource.

+ +

Notes for devs

+ +

As in the external extensions the query interface changed. The query now has a string and a rawString. The raw string returns the query string including the trigger. If the query is not triggered string and rawString are equivalent.

+ +

The extensions folder is now a git submodule. Expect this to change to a even more fine grained structure in future.

+ +

As always check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/09/30/albert-v0.13.1-released.html b/2017/09/30/albert-v0.13.1-released.html new file mode 100644 index 00000000..54e733b1 --- /dev/null +++ b/2017/09/30/albert-v0.13.1-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.13.1 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/10/18/albert-v0.14.0-released.html b/2017/10/18/albert-v0.14.0-released.html new file mode 100644 index 00000000..a195e2b5 --- /dev/null +++ b/2017/10/18/albert-v0.14.0-released.html @@ -0,0 +1,196 @@ + + + + Albert - Albert v0.14.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.0 released

+

This release contains internal API changes that make developers lifes easier and and a new extension that allows to embed python scripts.

+ +

With this release the use of the old CGI style external extension is discouraged. External extensions will stay for now but just for personal use. As soon as the scripts in the public repo of the external extensions have been ported it will be deleted.

+ +

With the Python extension writing an extension can be as easy as this:

+ +
from albertv0 import *
+
+__iid__ = "PythonInterface/v0.1"
+
+def handleQuery(query):
+    return [Item(text="Hello")]
+
+
+ +

This is a valid extension. However it makes not much sense, but by adding some docs, metadata and functionality a pretty minimal example, e.g. to run Zeal, can look like this:

+ +
# -*- coding: utf-8 -*-
+
+"""Fire up an external search in Zeal.
+Just type zl <query>"""
+
+from albertv0 import *
+from subprocess import run
+from shutil import which
+
+__iid__ = "PythonInterface/v0.1"
+__prettyname__ = "Zeal"
+__version__ = "1.0"
+__trigger__ = "zl "
+__author__ = "Manuel Schneider"
+__dependencies__ = ["zeal"]
+
+
+if which("zeal") is None:
+    raise Exception("'zeal' is not in $PATH.")
+
+
+iconPath = iconLookup('zeal')
+
+
+def handleQuery(query):
+    if query.isTriggered:
+        return [
+            Item(
+                id=__prettyname__,
+                icon=iconPath,
+                text=__prettyname__,
+                subtext="Look up %s" % __prettyname__,
+                completion=query.rawString,
+                actions=[ProcAction("Start query in %s" % __prettyname__,
+                                    ["zeal", query.string])])
+        ]
+
+ +

This 26 lines build a full fledged extension. In fact it is the Zeal extension.

+ +

The documentation is not written at the moment, but the API is darn easy. Take a look at the API test extension. It should contain every possible thing you can use. If you want to know it exactly read the interface definition. For real examples of extensions check the extensions shipped with albert.

+ +

I ask the devs of the external extensions in the public repo to port their extensions to the new scripting API and send a pull request.

+ +

I hope you enjoy the new scripting API and I’d be happy to receive pull requests for extensions you wish to see shipped with albert. Have fun.

+ +

As always check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/10/19/albert-v0.14.1-released.html b/2017/10/19/albert-v0.14.1-released.html new file mode 100644 index 00000000..6be59dd0 --- /dev/null +++ b/2017/10/19/albert-v0.14.1-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.1 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/10/20/albert-v0.14.2-released.html b/2017/10/20/albert-v0.14.2-released.html new file mode 100644 index 00000000..442ae142 --- /dev/null +++ b/2017/10/20/albert-v0.14.2-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/10/21/albert-v0.14.3-released.html b/2017/10/21/albert-v0.14.3-released.html new file mode 100644 index 00000000..30564e3d --- /dev/null +++ b/2017/10/21/albert-v0.14.3-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/10/25/albert-v0.14.4-released.html b/2017/10/25/albert-v0.14.4-released.html new file mode 100644 index 00000000..16aab167 --- /dev/null +++ b/2017/10/25/albert-v0.14.4-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.4 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/10/30/albert-v0.14.5-released.html b/2017/10/30/albert-v0.14.5-released.html new file mode 100644 index 00000000..11618aae --- /dev/null +++ b/2017/10/30/albert-v0.14.5-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.5 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/10/31/albert-v0.14.6-released.html b/2017/10/31/albert-v0.14.6-released.html new file mode 100644 index 00000000..2f17edf0 --- /dev/null +++ b/2017/10/31/albert-v0.14.6-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.6 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/11/02/official-repos-on-obs.html b/2017/11/02/official-repos-on-obs.html new file mode 100644 index 00000000..3f42d45b --- /dev/null +++ b/2017/11/02/official-repos-on-obs.html @@ -0,0 +1,133 @@ + + + + Albert - Official repositories at openSUSE Build Service + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Official repositories at openSUSE Build Service

+

Finally there are official repositories other than the Arch Linux User Repositories hosted on the openSUSE Build Service platform. The openSUSE Build Service is the public instance of the Open Build Service (OBS). It builds software for several distributions and architectures in an automated fashion and hosts repositories for the built packages. This means that as soon as a new albert version is released the build service gets triggered to build albert and as soon it is finished, you will be able to get the latest version of albert. Check the albert package on openSUSE Build Service to see the supported platforms.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/11/03/albert-v0.14.7-released.html b/2017/11/03/albert-v0.14.7-released.html new file mode 100644 index 00000000..e5b79f73 --- /dev/null +++ b/2017/11/03/albert-v0.14.7-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.7 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/11/13/albert-v0.14.8-released.html b/2017/11/13/albert-v0.14.8-released.html new file mode 100644 index 00000000..5fb80463 --- /dev/null +++ b/2017/11/13/albert-v0.14.8-released.html @@ -0,0 +1,145 @@ + + + + Albert - Albert v0.14.8 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.8 released

+

This release contains new Python extensions:

+ +
    +
  • Gnote extension (Ported from external extension)
  • +
  • Tomboy extension (Ported from external extension)
  • +
  • Pacman extension
  • +
  • Pass extension
  • +
  • Kill extension
  • +
+ +

Of course it also contains the latest fixes.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/11/15/albert-v0.14.9-released.html b/2017/11/15/albert-v0.14.9-released.html new file mode 100644 index 00000000..c669e315 --- /dev/null +++ b/2017/11/15/albert-v0.14.9-released.html @@ -0,0 +1,143 @@ + + + + Albert - Albert v0.14.9 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.9 released

+

This release contains minor improvements:

+ +
    +
  • Add “Open docs” action to tray
  • +
  • Generally use HiDPI pixmaps (lifts required Qt to 5.6)
  • +
  • Debug output is now a cmdline option (-d)
  • +
+ +

Of course it also contains the latest fixes.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/11/16/albert-v0.14.10-released.html b/2017/11/16/albert-v0.14.10-released.html new file mode 100644 index 00000000..bab34d8b --- /dev/null +++ b/2017/11/16/albert-v0.14.10-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.10 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/11/18/albert-v0.14.11-released.html b/2017/11/18/albert-v0.14.11-released.html new file mode 100644 index 00000000..de3f0e9f --- /dev/null +++ b/2017/11/18/albert-v0.14.11-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.11 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/11/23/albert-v0.14.12-released.html b/2017/11/23/albert-v0.14.12-released.html new file mode 100644 index 00000000..52c99d8e --- /dev/null +++ b/2017/11/23/albert-v0.14.12-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.12 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2017/11/25/albert-v0.14.13-released.html b/2017/11/25/albert-v0.14.13-released.html new file mode 100644 index 00000000..742c78dc --- /dev/null +++ b/2017/11/25/albert-v0.14.13-released.html @@ -0,0 +1,141 @@ + + + + Albert - Albert v0.14.13 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.13 released

+

This release introduces rich text for item texts. Extensions using the offline index do not use it yet, since computing the matching substring is a bit more involved.

+ +

The TermAction now has a new option to set the behavior when the process exited. (Close, Close on success, Don not close).

+ +

This version ships with two new python extension: One interfacing the Arch User Repositories and another adapting scrot, a screenshot tool (credits go to Benedict Dudel).

+ +

As always the release also contains the latest fixes and minor improvements.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2017/12/06/albert-v0.14.14-released.html b/2017/12/06/albert-v0.14.14-released.html new file mode 100644 index 00000000..94eeb9fa --- /dev/null +++ b/2017/12/06/albert-v0.14.14-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.14 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2018/01/26/albert-v0.14.15-released.html b/2018/01/26/albert-v0.14.15-released.html new file mode 100644 index 00000000..0ec1fdad --- /dev/null +++ b/2018/01/26/albert-v0.14.15-released.html @@ -0,0 +1,145 @@ + + + + Albert - Albert v0.14.15 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.15 released

+

This release contains the latest fixes and new Python extensions:

+ +
    +
  • CoinMarketCap. Quickly view/access coins/tokens on CoinMarketCap.
  • +
  • Trash extension. Adds an item that opens the trash bin in the file manager.
  • +
  • Pomodoro extension. Tool to apply the focus and flow enhancing technique.
  • +
  • Epoch extension. Simply shows current or translates unix timestamps.
  • +
  • Packagist extension. Search for PHP packages on Packagist.
  • +
+ +

Futher the python API has been extended by three functions: configLocation(), dataLocation() and cacheLocation(). Therefore the minor API version increased. The interface identifier is now PythonInterface/v0.2. Note that the Python extension guarantees backward compatibility on minor version changes.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2018/03/09/albert-v0.14.16-released.html b/2018/03/09/albert-v0.14.16-released.html new file mode 100644 index 00000000..93f0a290 --- /dev/null +++ b/2018/03/09/albert-v0.14.16-released.html @@ -0,0 +1,149 @@ + + + + Albert - Albert v0.14.16 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.16 released

+

This release contains the latest fixes and new Python extensions:

+ +
    +
  • Gnome dictionary extension. (nikhilwanpal)
  • +
  • Mathematica extension. (Asger Hautop Drewsen)
  • +
  • TeX to unicode extension. (Asger Hautop Drewsen)
  • +
  • IP address extension. (Benedict Dudel)
  • +
  • Multi Translate extension. (David Britt)
  • +
  • Emoji lookup extension. (David Britt)
  • +
  • Kaomoji lookup extension. (David Britt)
  • +
  • Timer extension.
  • +
  • Binance extension.
  • +
+ +

Kudos to the contributors. 👏

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2018/03/23/albert-v0.14.17-released.html b/2018/03/23/albert-v0.14.17-released.html new file mode 100644 index 00000000..6e375db0 --- /dev/null +++ b/2018/03/23/albert-v0.14.17-released.html @@ -0,0 +1,141 @@ + + + + Albert - Albert v0.14.17 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.17 released

+

This release contains the latest fixes, minor improvements to the extensions and a new Python extension.

+ +

With the new Python extension Arch Wiki you can search the wiki.archlinux.org mediawiki and directly access articles.

+ +

The applications extension got two new options: Use keywords for lookup and Use generic name for lookup. Keywords and GenericName are keys in the desktop entry whose values can be used for lookup.

+ +

The kvstore extension was renamed to Snippets and got an improved config UI.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2018/03/23/albert-v0.14.18-released.html b/2018/03/23/albert-v0.14.18-released.html new file mode 100644 index 00000000..f52caece --- /dev/null +++ b/2018/03/23/albert-v0.14.18-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.18 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2018/05/15/albert-v0.14.19-released.html b/2018/05/15/albert-v0.14.19-released.html new file mode 100644 index 00000000..4c935375 --- /dev/null +++ b/2018/05/15/albert-v0.14.19-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.14.19 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.14.19 released

+

This release contains the latest fixes and two new Python extensions:

+ +
    +
  • Datetime. (Time display and conversion. Supersedes the external extension)
  • +
  • Bitfinex. (Quickly access Bitfinex markets)
  • +
+ +

The file browse mode finally mimics bash completion behavior.

+ +

Check the git log for details.

+ +

Further I want to let you know that I will stop posting news on patch releases. +I’ll try to move changes that are recognizeable by users into minor releases. +Note that there are no major releases at the moment since albert is still alpha.

+ +
+
+
+
+ + + +
+ + diff --git a/2018/06/04/albert-v0.14.20-released.html b/2018/06/04/albert-v0.14.20-released.html new file mode 100644 index 00000000..758fde1f --- /dev/null +++ b/2018/06/04/albert-v0.14.20-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.14.20 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2018/06/08/albert-v0.14.21-released.html b/2018/06/08/albert-v0.14.21-released.html new file mode 100644 index 00000000..815f13d4 --- /dev/null +++ b/2018/06/08/albert-v0.14.21-released.html @@ -0,0 +1,133 @@ + + + + Albert - Albert v0.14.21 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2018/09/21/albert-v0.14.22-released.html b/2018/09/21/albert-v0.14.22-released.html new file mode 100644 index 00000000..ca947105 --- /dev/null +++ b/2018/09/21/albert-v0.14.22-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.14.22 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2018/12/16/albert-v0.15.0-released.html b/2018/12/16/albert-v0.15.0-released.html new file mode 100644 index 00000000..35bf2011 --- /dev/null +++ b/2018/12/16/albert-v0.15.0-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.15.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.15.0 released

+

This release increases the required versions of the dependencies to Qt 5.9 this means that some distributions will not be supported anymore.

+ +

Major changes:

+
    +
  • Fancy usage graph in the settings
  • +
  • QML frontend: History search of the input now allows substring matching (Type and navigate)
  • +
  • QML frontend: Store user input of every session
  • +
  • Add extension “Fortune”
  • +
  • Add extension “Window switcher”
  • +
+ +

Further the release contains minor changes and fixes.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2018/12/28/albert-v0.16.0-released.html b/2018/12/28/albert-v0.16.0-released.html new file mode 100644 index 00000000..e6e1ea2c --- /dev/null +++ b/2018/12/28/albert-v0.16.0-released.html @@ -0,0 +1,168 @@ + + + + Albert - Albert v0.16.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.16.0 released

+

Changes

+ +

Albert

+ +
    +
  • Add jekyll website as submodule
  • +
  • New project structure
  • +
  • Derive albert version from CMake project
  • +
  • Let travis build against Ubuntu 18.04 and 16.04
  • +
  • Backward compatibility for Ubuntu 16.04
  • +
  • Build without QtCharts if Qt version below 5.6
  • +
  • Let fuzzy require an additional character. Tolerance: floor((wordlen - 1)/3))
  • +
  • Print logging category to stdout [not all plugins support it yet]
  • +
+ +

Plugins

+ +
    +
  • [Python] Use ast to read metadata without loading the modules
  • +
  • [Term] Change terminal action order: Let “Run w/o term” be the last one
  • +
  • [VBox] Set default build switch for VirtualBox to OFF
  • +
  • [Files] Add fancy icons to mime dialog
  • +
+ +

Modules

+ +
    +
  • Additional constraint: Metadata have to be string literals (for ast)
  • +
  • Additional constraint: Name modules according PEP8
  • +
  • [WinSwitch] Add close win action
  • +
  • [VBox] Add VirtualBox extension
  • +
+ +

Further the release contains minor changes and fixes.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2018/12/31/albert-v0.16.1-released.html b/2018/12/31/albert-v0.16.1-released.html new file mode 100644 index 00000000..388ba808 --- /dev/null +++ b/2018/12/31/albert-v0.16.1-released.html @@ -0,0 +1,148 @@ + + + + Albert - Albert v0.16.1 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.16.1 released

+
    +
  • [albert] Fix default plugin lookup path
  • +
  • [albert] Fix flicker when changing frontends
  • +
  • [albert] Fix “Terminal option resets after a restart”
  • +
  • [albert] Link libglobalshortcut statically
  • +
  • [albert] Add a build flag for QtCharts
  • +
  • [albert] Drop debug options if favor of QLoggingCategory env vars
  • +
  • [plugins:ssh] Fix input regex. Sort by length then lexically.
  • +
  • [plugins:ssh] Use backward compatible ssh url syntax
  • +
  • [plugins:qml] Consistent form layout
  • +
  • [modules:aur] Sort items by length first
  • +
+ +

Further the release contains minor changes and fixes.

+ +

Check the git log for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2020/11/25/albert-v0.16.2-released.html b/2020/11/25/albert-v0.16.2-released.html new file mode 100644 index 00000000..225c1357 --- /dev/null +++ b/2020/11/25/albert-v0.16.2-released.html @@ -0,0 +1,160 @@ + + + + Albert - Albert v0.16.2 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.16.2 released

+

[albert]

+
    +
  • Allow multiple instances of albert on different X sessions
  • +
  • Fix super key not registering
  • +
  • Add terms: Elementary, Tilix, QTerminal, Termite
  • +
  • Fix build on FreeBSD
  • +
  • Dont show fallbacks on triggered queries
  • +
+ +

[plugins]

+
    +
  • [Applications] Index desktop files on desktop
  • +
  • [firefox] Rework v2
  • +
  • [ssh] Respect the Include keyword
  • +
  • [ssh] Allow hyphens to be part of hostnames
  • +
  • [chromium] Add brave-browser to list of chromium based browsers.
  • +
+ +

[python]

+
    +
  • Add an offline emoji picker
  • +
  • Add bitwarden extension
  • +
  • Add xkcd plugin as submodule
  • +
  • Add new extension: node.js evaluator
  • +
  • Add new extension: php evaluator
  • +
+ +

Check the github repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2020/12/03/albert-v0.16.3-released.html b/2020/12/03/albert-v0.16.3-released.html new file mode 100644 index 00000000..e8fea1d4 --- /dev/null +++ b/2020/12/03/albert-v0.16.3-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.16.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2020/12/10/albert-v0.16.4-released.html b/2020/12/10/albert-v0.16.4-released.html new file mode 100644 index 00000000..469e9b49 --- /dev/null +++ b/2020/12/10/albert-v0.16.4-released.html @@ -0,0 +1,153 @@ + + + + Albert - Albert v0.16.4 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.16.4 released

+

Hotfix for #959

+ +

[albert]

+
    +
  • Fix tab order. Closes #866
  • +
  • Update stale.yml
  • +
+ +

[plugins]

+
    +
  • [chromium] Chromium v1.1
  • +
+ +

[python]

+
    +
  • [docker] New extension prototype
  • +
  • [timer] Use dbus instead of notify-send
  • +
  • [units] v1.2 including to time conversion
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2020/12/17/albert-v0.17.0-released.html b/2020/12/17/albert-v0.17.0-released.html new file mode 100644 index 00000000..a910a9e4 --- /dev/null +++ b/2020/12/17/albert-v0.17.0-released.html @@ -0,0 +1,192 @@ + + + + Albert - Albert v0.17.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.17.0 released

+

[albert]

+
    +
  • Again break init order of Item for the sake of less boilerplate. Presumed this frequency indexStrings > actions > completion > urgency.
  • +
  • Let shells handle splitting/quoting
  • +
  • Add core as QueryHandler. Add restart, quit, settings action. Also to tray and cli.
  • +
  • Drop shutil:: and let shells handle lexing
  • +
+ +

[plugins]

+
    +
  • FINALLY ARCHIVE EXTERNAL EXTENSIONS.
  • +
  • New extension state : MissingDependencies
  • +
  • Disable settings items of exts in this new state
  • +
  • Use pybind v2.6.1
  • +
  • [term] v1.1 Let shells handle lexing
  • +
  • [calc] Add muparserInt option for hex calculations
  • +
  • Use QLoggingCategory in all extensions
  • +
  • Implicit dependency check for executables and Python modules
  • +
  • [Pyv1.3] Adopt core changes. PyAPIv0.4. Changes to the API: +
      +
    • embedded module is called ‘albert’ now
    • +
    • Reflect core api changes: +
        +
      • Positional arguments of the standard item changes
      • +
      • New semantics of the term action constructors +
          +
        • String commandline will be executed in a shell
        • +
        • StringList commandline will be executed without shell
        • +
        +
      • +
      +
    • +
    • Add core version of iconLookup(StringList)
    • +
    • New metadata labels: +
        +
      • version: new versioning scheme iid_maj.iid_min.ext_version
      • +
      • title: former prettyname
      • +
      • authors: string or list
      • +
      • exec_deps: string or list
      • +
      • py_deps: string or list
      • +
      • triggers: string or list
      • +
      +
    • +
    • Allow multiple triggers
    • +
    • Allow multiple authors
    • +
    +
  • +
+ +

[python]

+
    +
  • Adpot APIv0.4 changes
  • +
  • [locate] ‘ for basename ‘’ for full path lookups
  • +
  • [timer] Make notification stay.
  • +
  • [baseconv] Python-style base prefixes to detect source base
  • +
  • [texdoc] Add texdoc plugin
  • +
  • [aur] add yay helper
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2020/12/21/albert-v0.17.1-released.html b/2020/12/21/albert-v0.17.1-released.html new file mode 100644 index 00000000..a2bc87ba --- /dev/null +++ b/2020/12/21/albert-v0.17.1-released.html @@ -0,0 +1,141 @@ + + + + Albert - Albert v0.17.1 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2020/12/24/albert-v0.17.2-released.html b/2020/12/24/albert-v0.17.2-released.html new file mode 100644 index 00000000..b810753c --- /dev/null +++ b/2020/12/24/albert-v0.17.2-released.html @@ -0,0 +1,144 @@ + + + + Albert - Albert v0.17.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2022/07/05/albert-v0.17.3-released.html b/2022/07/05/albert-v0.17.3-released.html new file mode 100644 index 00000000..d8e944ef --- /dev/null +++ b/2022/07/05/albert-v0.17.3-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.17.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2022/10/04/albert-v0.17.4-released.html b/2022/10/04/albert-v0.17.4-released.html new file mode 100644 index 00000000..0d7a6b37 --- /dev/null +++ b/2022/10/04/albert-v0.17.4-released.html @@ -0,0 +1,137 @@ + + + + Albert - Albert v0.17.4 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2022/12/31/albert-v0.18.0-released.html b/2022/12/31/albert-v0.18.0-released.html new file mode 100644 index 00000000..6295a492 --- /dev/null +++ b/2022/12/31/albert-v0.18.0-released.html @@ -0,0 +1,238 @@ + + + + Albert - Albert v0.18.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.18.0 released

+

Note that there have been some breaking changes. The new plugin id format changed settings keys and config/cache/data paths. If you want to keep your old plugin settings you have to adjust the section names in the config file and adjust the paths in your config/cache/data dirs. (e.g. from org.albert.files to files). I’d recommend to start from scratch though, since too much changed.

+ +

[albert]

+ +
    +
  • Shorter plugin ids. (This breaks configs)
  • +
  • Customizeable triggers (if the extension permits)
  • +
  • Central plugin management
  • +
  • More useful plugin metadata
  • +
  • User customizable scoring parameters +
      +
    • Add user option memory decay
    • +
    • Add user option memory weight
    • +
    +
  • +
  • Finally scoring for all items
  • +
  • Inputline history goes to a file now
  • +
  • Settingswidget overhaul
  • +
  • Hello Qt6, C++20 👋
  • +
  • Entirely new interface (see header files) +
      +
    • Value typed Action class based on std::function
    • +
    • Drop all former *Action classes +
        +
      • Free functions replace and extend action subclass functionality
      • +
      +
    • +
    • Updates to Item interface
    • +
    • New and extended query handling interface classes
    • +
    • Extended frontend interface
    • +
    • New abstract plugin provider interface +
        +
      • Common plugin metadata
      • +
      • Maintainership is a thing now!
      • +
      +
    • +
    • Add StandardItem factory for better type deduction and readability
    • +
    • Add bgexecutor class
    • +
    • Add timeprinter
    • +
    • Leaner logging
    • +
    • Query design change (realtime, global, indexed)
    • +
    • Add extension watcher template class
    • +
    • Move XDG into the lib.
    • +
    +
  • +
+ +

[plugins]

+ +

python 1.4 (0.18)

+
    +
  • Use system pybind
  • +
  • 0.5 interface
  • +
  • auto pip dependencies
  • +
+ +

files 1.2 (0.18)

+
    +
  • Drop bashlike completions. We have items.
  • +
  • Settings per root path
  • +
  • Add name filter dialog
  • +
  • Add option watch filesystem
  • +
  • Add option max depth
  • +
+ +

snippets 1.1 (0.18)

+
    +
  • files instead database
  • +
+ +

widgetsboxmodel 1.2 (0.18)

+
    +
  • Fading busy indicating settingsbutton
  • +
  • Drop rich text
  • +
  • Proper async query witout flicker using statemachines
  • +
  • Add input hint
  • +
  • Add option show fallbacks on empty query
  • +
  • Add option history search
  • +
+ +

Also new or ported to 0.18

+
    +
  • calculator 1.3 (0.18)
  • +
  • system 1.2 (0.18)
  • +
  • applications_xdg 1.3 (0.18)
  • +
  • applications_macos 1.0 (0.18)
  • +
  • ssh 1.3 (0.18)
  • +
  • terminal 1.2 (0.18)
  • +
  • chromium 1.2 (0.18)
  • +
  • websearch 1.2 (0.18)
  • +
  • urlhander 1.0 (0.18)
  • +
  • hash 1.4 (0.18)
  • +
  • template 0.0 (0.18)
  • +
  • debug 1.1 (0.18)
  • +
+ +

Archived

+ +
    +
  • firefox
  • +
  • qml box model
  • +
  • mpris
  • +
  • vbox
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/01/albert-v0.18.1-released.html b/2023/01/01/albert-v0.18.1-released.html new file mode 100644 index 00000000..f0a43298 --- /dev/null +++ b/2023/01/01/albert-v0.18.1-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.18.1 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/02/albert-v0.18.2-released.html b/2023/01/02/albert-v0.18.2-released.html new file mode 100644 index 00000000..47d2eabf --- /dev/null +++ b/2023/01/02/albert-v0.18.2-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.18.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/02/albert-v0.18.3-released.html b/2023/01/02/albert-v0.18.3-released.html new file mode 100644 index 00000000..87f57de6 --- /dev/null +++ b/2023/01/02/albert-v0.18.3-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.18.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/03/albert-v0.18.4-released.html b/2023/01/03/albert-v0.18.4-released.html new file mode 100644 index 00000000..e4bdbb42 --- /dev/null +++ b/2023/01/03/albert-v0.18.4-released.html @@ -0,0 +1,145 @@ + + + + Albert - Albert v0.18.4 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/04/albert-v0.18.5-released.html b/2023/01/04/albert-v0.18.5-released.html new file mode 100644 index 00000000..c82ffd10 --- /dev/null +++ b/2023/01/04/albert-v0.18.5-released.html @@ -0,0 +1,141 @@ + + + + Albert - Albert v0.18.5 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/05/albert-v0.18.6-released.html b/2023/01/05/albert-v0.18.6-released.html new file mode 100644 index 00000000..46c7ef2a --- /dev/null +++ b/2023/01/05/albert-v0.18.6-released.html @@ -0,0 +1,160 @@ + + + + Albert - Albert v0.18.6 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.18.6 released

+

[albert]

+
    +
  • sendTrayNotification(…) add time parameter
  • +
  • Support wezterm.
  • +
+ +

[plugins]

+
    +
  • Python 1.5 +
      +
    • sendTrayNotification(…) add ms parameter
    • +
    +
  • +
  • Hash 1.5 +
      +
    • Global query handler
    • +
    • Add copy 8 char action
    • +
    +
  • +
+ +

[python]

+
    +
  • Pomodoro 1.1
  • +
  • CopyQ 1.2
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/05/albert-v0.18.7-released.html b/2023/01/05/albert-v0.18.7-released.html new file mode 100644 index 00000000..22f1141a --- /dev/null +++ b/2023/01/05/albert-v0.18.7-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.18.7 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/07/albert-v0.18.8-released.html b/2023/01/07/albert-v0.18.8-released.html new file mode 100644 index 00000000..ec5bb2b8 --- /dev/null +++ b/2023/01/07/albert-v0.18.8-released.html @@ -0,0 +1,153 @@ + + + + Albert - Albert v0.18.8 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.18.8 released

+

[albert]

+
    +
  • Give sensible defaults for usage history
  • +
  • Fix memory weight not being loaded
  • +
  • Merge frontend tab into general
  • +
  • Support foot terminal
  • +
  • Check for other instances before laoding plugins
  • +
+ +

[plugins]

+
    +
  • Avoid starting indexing on file index serialization
  • +
+ +

[python]

+
    +
  • googletrans 1.0
  • +
  • pass 1.2
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/07/albert-v0.18.9-released.html b/2023/01/07/albert-v0.18.9-released.html new file mode 100644 index 00000000..df3d2c26 --- /dev/null +++ b/2023/01/07/albert-v0.18.9-released.html @@ -0,0 +1,144 @@ + + + + Albert - Albert v0.18.9 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/09/albert-v0.18.10-released.html b/2023/01/09/albert-v0.18.10-released.html new file mode 100644 index 00000000..a397c1a3 --- /dev/null +++ b/2023/01/09/albert-v0.18.10-released.html @@ -0,0 +1,135 @@ + + + + Albert - Albert v0.18.10 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/11/albert-v0.18.11-released.html b/2023/01/11/albert-v0.18.11-released.html new file mode 100644 index 00000000..29da5dd4 --- /dev/null +++ b/2023/01/11/albert-v0.18.11-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.18.11 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.18.11 released

+

[albert]

+
    +
  • Add missing long description in plugin metadata.
  • +
+ +

[plugins]

+
    +
  • Handcraft tld validation. Make handler global.
  • +
  • Add metadata LONG_DESCRIPTON to docs
  • +
  • [py] Create site-packages dir if necessary
  • +
  • Fix open snippet
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/13/albert-v0.18.12-released.html b/2023/01/13/albert-v0.18.12-released.html new file mode 100644 index 00000000..24fbd461 --- /dev/null +++ b/2023/01/13/albert-v0.18.12-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.18.12 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.18.12 released

+

[albert]

+
    +
  • Always print report in debug mode
  • +
  • Add platform, lang and locale to report
  • +
  • Support Terminology
  • +
+ +

[plugins]

+
    +
  • [mac_apps] Dons show system service apps +! Add default md_id if not available
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/13/albert-v0.18.13-released.html b/2023/01/13/albert-v0.18.13-released.html new file mode 100644 index 00000000..1fc1fb83 --- /dev/null +++ b/2023/01/13/albert-v0.18.13-released.html @@ -0,0 +1,145 @@ + + + + Albert - Albert v0.18.13 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/18/albert-v0.19.0-released.html b/2023/01/18/albert-v0.19.0-released.html new file mode 100644 index 00000000..d5144914 --- /dev/null +++ b/2023/01/18/albert-v0.19.0-released.html @@ -0,0 +1,170 @@ + + + + Albert - Albert v0.19.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.19.0 released

+

[albert]

+
    +
  • Add reload actinon for plugins
  • +
  • Support Console term
  • +
  • Fix backgroundexecutor not using move semantics
  • +
  • 0.19 interface +
      +
    • Revert to dedicated FallbackHandler
    • +
    • Clean interface using opaque pointers
    • +
    • GlobalQueryHandler::rankItems -> handlyQuery
    • +
    • IndexQueryHandlers have to set items directly
    • +
    +
  • +
  • Refactoring
  • +
  • Show plugin header files in IDEs
  • +
  • Use handcrafted icon lookup again
  • +
+ +

[plugins]

+
    +
  • [wbs] 1.3 add query handler providing themes
  • +
  • [apps_xdg] 1.5 Remove desktop indexing
  • +
  • [ssh] 1.5 +
      +
    • Fix ssh connect containing user or port
    • +
    • Allow specifying a command to send to the host
    • +
    • Add action (keep/close term)
    • +
    +
  • +
+ +

[python]

+
    +
  • [yt] v1.2 (iid:0.5)
  • +
  • [kill] v1.1 (iid:0.5)
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/18/albert-v0.19.1-released.html b/2023/01/18/albert-v0.19.1-released.html new file mode 100644 index 00000000..90d40cf4 --- /dev/null +++ b/2023/01/18/albert-v0.19.1-released.html @@ -0,0 +1,151 @@ + + + + Albert - Albert v0.19.1 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.19.1 released

+

[albert]

+
    +
  • Fix recurring new version info
  • +
  • Allow copyconstruction of rank and index items
  • +
+ +

[plugins]

+
    +
  • [calc] 1.5 +
      +
    • Inline evaluation
    • +
    • Default trigger ‘=’
    • +
    • Synopsis
    • +
    +
  • +
  • [wbm] Add item activation using Ctrl+O
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/18/albert-v0.19.2-released.html b/2023/01/18/albert-v0.19.2-released.html new file mode 100644 index 00000000..dc45417a --- /dev/null +++ b/2023/01/18/albert-v0.19.2-released.html @@ -0,0 +1,139 @@ + + + + Albert - Albert v0.19.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/22/albert-v0.19.3-released.html b/2023/01/22/albert-v0.19.3-released.html new file mode 100644 index 00000000..e462a2df --- /dev/null +++ b/2023/01/22/albert-v0.19.3-released.html @@ -0,0 +1,160 @@ + + + + Albert - Albert v0.19.3 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.19.3 released

+

[albert]

+
    +
  • [md] Use content if long description is a file path
  • +
  • Use both, extension and item id, as icon cache key
  • +
  • Add standard pixmaps support to iconprovider
  • +
  • Workaround terminator bug #702
  • +
+ +

[plugins]

+
    +
  • [wbm] Add Nord theme
  • +
  • [calc] Respect LC_*
  • +
  • [chromium] Fix filewatcher does not watch bookmarks
  • +
  • [wbm] Do not exit on missing themes
  • +
  • [wbm] Use generic placeholder color for input hint
  • +
  • [app:xdg] Add exec key option. Also exclude ‘env’ in exec keys.
  • +
  • [wbm] Fix clipped label
  • +
  • [WBM] fix open theme file action
  • +
  • [files] Provide trash item
  • +
  • [wbm] Fix list view height margins
  • +
+ +

[python]

+
    +
  • [trash] Drop. Provided by files plugin now.
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/22/albert-v0.19.4-released.html b/2023/01/22/albert-v0.19.4-released.html new file mode 100644 index 00000000..3756cc03 --- /dev/null +++ b/2023/01/22/albert-v0.19.4-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.19.4 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/24/albert-v0.20.0-released.html b/2023/01/24/albert-v0.20.0-released.html new file mode 100644 index 00000000..acdae39e --- /dev/null +++ b/2023/01/24/albert-v0.20.0-released.html @@ -0,0 +1,152 @@ + + + + Albert - Albert v0.20.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.0 released

+

[albert]

+
    +
  • Config widget per plugin (v0.20)
  • +
  • Make Triggerwidget edit trigger on double click anywhere
  • +
+ +

[plugins]

+
    +
  • [chromium:1.4] Add path reset button
  • +
+ +

[python]

+
    +
  • [locate] 1.6
  • +
  • [docker] 1.3
  • +
+ +

Lots of polishing around the new UI

+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/25/albert-v0.20.1-released.html b/2023/01/25/albert-v0.20.1-released.html new file mode 100644 index 00000000..d9d0ace3 --- /dev/null +++ b/2023/01/25/albert-v0.20.1-released.html @@ -0,0 +1,150 @@ + + + + Albert - Albert v0.20.1 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.1 released

+

[albert]

+
    +
  • Fix pedantic warnings
  • +
  • BW tray
  • +
  • Use env vars to set default locale
  • +
  • Strech config widget
  • +
  • Fix segfaults on empty icon name lookup
  • +
+ +

[plugins]

+
    +
  • Lots of UI polishing
  • +
  • [qalc] Fix precision probles
  • +
  • [websearch] Add google maps to defaults
  • +
  • [datetime] Use default locale
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/25/albert-v0.20.2-released.html b/2023/01/25/albert-v0.20.2-released.html new file mode 100644 index 00000000..0d7081c8 --- /dev/null +++ b/2023/01/25/albert-v0.20.2-released.html @@ -0,0 +1,144 @@ + + + + Albert - Albert v0.20.2 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/01/27/albert-v0.20.3-released.html b/2023/01/27/albert-v0.20.3-released.html new file mode 100644 index 00000000..0d996d01 --- /dev/null +++ b/2023/01/27/albert-v0.20.3-released.html @@ -0,0 +1,152 @@ + + + + Albert - Albert v0.20.3 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.3 released

+

[albert]

+
    +
  • Remove plugin registry from global search
  • +
  • Add -Wno-inline
  • +
  • Fix line breaks in errors displayed in settings
  • +
  • Tray icon isMask
  • +
+ +

[plugins]

+
    +
  • [platform_mac] 1.0
  • +
  • [py] Add button to open the dependency dir
  • +
+ +

[python]

+
    +
  • [pint] 1.0 (currency converter)
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/01/31/albert-v0.20.4-released.html b/2023/01/31/albert-v0.20.4-released.html new file mode 100644 index 00000000..b18b2187 --- /dev/null +++ b/2023/01/31/albert-v0.20.4-released.html @@ -0,0 +1,147 @@ + + + + Albert - Albert v0.20.4 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.4 released

+

[albert]

+
    +
  • Reintroduce telemetry
  • +
  • Fix disfunctional link in settings
  • +
+ +

[python]

+
    +
  • [tex_to_unicode] py interface 0.5
  • +
  • [vpn] 1.1 (iid: 0.5)
  • +
  • [yt] v1.3 create tmp dirs lazily
  • +
  • [jetbrains] 1.0 (iid:0.5)
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/02/01/albert-v0.20.5-released.html b/2023/02/01/albert-v0.20.5-released.html new file mode 100644 index 00000000..11a7b02e --- /dev/null +++ b/2023/02/01/albert-v0.20.5-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.20.5 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/02/08/albert-v0.20.6-released.html b/2023/02/08/albert-v0.20.6-released.html new file mode 100644 index 00000000..3e09fb7c --- /dev/null +++ b/2023/02/08/albert-v0.20.6-released.html @@ -0,0 +1,148 @@ + + + + Albert - Albert v0.20.6 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/02/10/albert-v0.20.7-released.html b/2023/02/10/albert-v0.20.7-released.html new file mode 100644 index 00000000..b70c0264 --- /dev/null +++ b/2023/02/10/albert-v0.20.7-released.html @@ -0,0 +1,143 @@ + + + + Albert - Albert v0.20.7 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/02/11/albert-v0.20.8-released.html b/2023/02/11/albert-v0.20.8-released.html new file mode 100644 index 00000000..e4f0515b --- /dev/null +++ b/2023/02/11/albert-v0.20.8-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.20.8 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.8 released

+

[albert]

+
    +
  • Tilda support
  • +
  • Print font in report
  • +
+ +

[plugins]

+
    +
  • [contacts_mac] v1.0
  • +
  • [wbm] Dont hide window when control modifier is hold
  • +
  • [xdgapps] Do not inherit QT_QPA_PLATFORM to launched apps
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/03/13/albert-v0.20.9-released.html b/2023/03/13/albert-v0.20.9-released.html new file mode 100644 index 00000000..e30e2387 --- /dev/null +++ b/2023/03/13/albert-v0.20.9-released.html @@ -0,0 +1,144 @@ + + + + Albert - Albert v0.20.9 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/03/20/albert-v0.20.10-released.html b/2023/03/20/albert-v0.20.10-released.html new file mode 100644 index 00000000..03a3b7e2 --- /dev/null +++ b/2023/03/20/albert-v0.20.10-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.20.10 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/03/27/albert-v0.20.11-released.html b/2023/03/27/albert-v0.20.11-released.html new file mode 100644 index 00000000..2b540e79 --- /dev/null +++ b/2023/03/27/albert-v0.20.11-released.html @@ -0,0 +1,152 @@ + + + + Albert - Albert v0.20.11 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.11 released

+

[albert]

+
    +
  • Respect whitespaces in rpcs
  • +
+ +

[plugins]

+
    +
  • [wbm] Add option “Center on active screen”
  • +
  • [app_xdg] Add action “reveal desktop entry”
  • +
  • [files] Workaround Qt appending slash to root paths
  • +
+ +

[python]

+
    +
  • [bitwarden] 1.1 (iid: 0.5)
  • +
  • [vpn] Add wireguard to connection types
  • +
  • [pacman] Fix out of scope lambda vars
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/03/29/albert-v0.20.12-released.html b/2023/03/29/albert-v0.20.12-released.html new file mode 100644 index 00000000..d5208280 --- /dev/null +++ b/2023/03/29/albert-v0.20.12-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.20.12 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/03/30/albert-v0.20.13-released.html b/2023/03/30/albert-v0.20.13-released.html new file mode 100644 index 00000000..1ffaa79c --- /dev/null +++ b/2023/03/30/albert-v0.20.13-released.html @@ -0,0 +1,141 @@ + + + + Albert - Albert v0.20.13 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/05/01/albert-v0.20.14-released.html b/2023/05/01/albert-v0.20.14-released.html new file mode 100644 index 00000000..12d49a5a --- /dev/null +++ b/2023/05/01/albert-v0.20.14-released.html @@ -0,0 +1,156 @@ + + + + Albert - Albert v0.20.14 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.20.14 released

+

[albert]

+
    +
  • Sort triggerwidget by name rather than id
  • +
  • Avoid segfaults when setting hotkey failed.
  • +
+ +

[plugins]

+
    +
  • [ws] fix oversized text in config
  • +
  • [sys:1.6] Dynamic default commands.
  • +
  • [app_xdg] Remove content margins of settings widget
  • +
  • [system] Add lxqt defaults
  • +
+ +

[python]

+
    +
  • [python_eval:1.3] Fix type of result in item subtext
  • +
  • [locate:1.7] Fix lambda capture
  • +
  • remove api_test
  • +
  • [aur:1.6] Fix install action
  • +
  • [jetbrains_projects] handle missing projectOpenTimestamp
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/06/19/devel-repos-on-obs.html b/2023/06/19/devel-repos-on-obs.html new file mode 100644 index 00000000..88b73372 --- /dev/null +++ b/2023/06/19/devel-repos-on-obs.html @@ -0,0 +1,140 @@ + + + + Albert - Prebuilt master branch packages available + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/06/23/albert-v0.21.0-released.html b/2023/06/23/albert-v0.21.0-released.html new file mode 100644 index 00000000..b7d1d6b2 --- /dev/null +++ b/2023/06/23/albert-v0.21.0-released.html @@ -0,0 +1,207 @@ + + + + Albert - Albert v0.21.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.21.0 released

+

[albert]

+
    +
  • v0.21.0 +
      +
    • Remove Item::hasActions
    • +
    • Add global config, cache and data location functions
    • +
    • Change RankItem::score type to float (0,1]
    • +
    • Make queries pointers in handler functions
    • +
    • Add function to get global network manager
    • +
    • Use explicit named query handling methods (no parameter overloading) handleTriggerQuery and handleGlobalQuery. This reduces confusion, avoids annoying extra boilerplate to disambiguate methods to avoid hide-virtual warnings and serves as a lowest common denominator on a language/naming level since these features may not be supported by script languages (e.g. Python).
    • +
    +
  • +
  • Settings window +
      +
    • Add a new search widget in settingswindow
    • +
    • Make handlers of all types optionable
    • +
    • Make window and search widgets tabs in the settings window
    • +
    +
  • +
  • Change usagedatabase location to datadir
  • +
  • Change IPC socket path to $CACHEDIR/albert/ipc_socket. Was $CACHEDIR/albert_socket.
  • +
  • Fix triggered global query MRU sort
  • +
+ +

[plugins]

+
    +
  • New extensions: +
      +
    • [docs] Reduced set of Zeal docsets at hands
    • +
    • [clipboard] Clipboard history
    • +
    +
  • +
  • [contacts:1.2] +
      +
    • Formatting: Remove Apple specific braces
    • +
    +
  • +
  • [snip:1.3] +
      +
    • Add “Add” and “Remove” button in config widget
    • +
    • Add “Add snippet” item on “add” query
    • +
    • Add “Remove” action to snippet items
    • +
    +
  • +
  • [python:1.8] Adopt API v0.21. New interface version iid 1.0 +
      +
    • Add Extension.cache-, config- and dataLocation
    • +
    • Expose FallbackHandler
    • +
    • Expose TriggerQueryHandler
    • +
    • Expose GlobalQueryHandler
    • +
    • Expose QueryHandler
    • +
    • Expose IndexQueryHandler
    • +
    • Expose abstract Item class entirely such that plugins can subclass it
    • +
    • Proper multi extension registration
    • +
    • Move interface spec into python stub file (yay!)
    • +
    • Use pointer for queries
    • +
    • Remove global cache/config/data dir functions
    • +
    +
  • +
  • [all] Adopt API v0.21.0
  • +
+ +

[python]

+
    +
  • Add stub file for type hinting and documentation in IDEs
  • +
  • New extensions: +
      +
    • [coingecko] Crypto currencies
    • +
    • [mathematica] iid:1.0 port
    • +
    +
  • +
  • [all] Adopt iid v1.0
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/06/27/albert-v0.21.1-released.html b/2023/06/27/albert-v0.21.1-released.html new file mode 100644 index 00000000..dd28c1b1 --- /dev/null +++ b/2023/06/27/albert-v0.21.1-released.html @@ -0,0 +1,152 @@ + + + + Albert - Albert v0.21.1 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.21.1 released

+

[albert]

+
    +
  • Add cmd/ctrl + number tab navigation in settings
  • +
  • Automatically add hpp and qml files to plugin projects
  • +
+ +

[plugins]

+
    +
  • [docs:1.2] Polish. Fix #106
  • +
  • Fix misleading comment in config widget
  • +
+ +

[python]

+
    +
  • [stub] Add missing imports to stub file
  • +
  • [tex_to_unicode] Fix crash due to wrong type annotation
  • +
  • [emoji] Fix #179. Call cacheLocation as method of self.
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/08/12/albert-v0.22.0-released.html b/2023/08/12/albert-v0.22.0-released.html new file mode 100644 index 00000000..0f5202df --- /dev/null +++ b/2023/08/12/albert-v0.22.0-released.html @@ -0,0 +1,259 @@ + + + + Albert - Albert v0.22.0 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.0 released

+

Albert

+ +
    +
  • Add commandline option for logging filter rules
  • +
  • Add contour terminal
  • +
  • Add settingswindow shortcut action for plugin settings
  • +
  • Add feature copy and paste
  • +
  • Add “Run empty query” option
  • +
  • Add handler configurations tab
  • +
  • Sort fallbacks
  • +
  • LexSort items having equal score
  • +
  • Doxygen documentation
  • +
+ +

API 0.22:

+ +
    +
  • TriggerQueryHandler +
      +
    • Add bool supportsFuzzyMatching()
    • +
    • Add bool fuzzyMatchingEnabled()
    • +
    • Add void setFuzzyMatchingEnabled(bool)
    • +
    • Add QString trigger() (the user configured one)
    • +
    +
  • +
  • GlobalQueryHandler +
      +
    • Add applyUsageScore(…).
    • +
    • Inherit TQH, i.e. every handler is a TQH
    • +
    +
  • +
  • IndexQueryHandler +
      +
    • Reimplement TQH fuzzy methods
    • +
    • Default synopsis
    • +
    +
  • +
  • Plugin system +
      +
    • Revert multithreaded plugin laoding (Qt makes problems everywhere)
    • +
    • Statically inject metadata, use it for PluginInstances
    • +
    • Move native plugin interface into plugin:: namespace
    • +
    • Cache/Conf/Data dirs per plugin only (were per Extension)
    • +
    • Add PluginInstance::extensions()
    • +
    • Add Template based ExtensionPlugin(Instance)
    • +
    • Make native plugin a template class to allow subclassing any QObject
    • +
    +
  • +
  • Frontend: +
      +
    • Add Frontend::winId, Move the window quirks to the core
    • +
    • Use appwide input history file
    • +
    • Add generic qml/widgets icon provider to interface
    • +
    • Add generic icon provider, creating icons on the fly
    • +
    +
  • +
  • Fuctions and macros: +
      +
    • Put all free functions in albert.h
    • +
    • Add openUrl QUrl overload
    • +
    • Add convenience macros for user property definition
    • +
    • Require albert logging category to pass the name
    • +
    • Add state file
    • +
    • Add global settings factory
    • +
    +
  • +
  • Rename History to InputHistory
  • +
  • Drop QueryHandler convenience class
  • +
  • Drop global albert.h include
  • +
+ +

Plugins

+ +
    +
  • [clipboard] +
      +
    • Add paste action
    • +
    +
  • +
  • [wbm] +
      +
    • Remove option “display icon”
    • +
    • Appwide input history
    • +
    +
  • +
  • [websearch] +
      +
    • Adopt to sorted fallbacks, drop dragndrop in listview
    • +
    • Add drag’n’drop image feature
    • +
    +
  • +
  • [snippets] +
      +
    • Add paste action
    • +
    • Snippets are now required to be txt files!
    • +
    +
  • +
  • [qml:2.0] Revamped QML frontend
  • +
  • [python] +
      +
    • Mimic internal api as close as possible
    • +
    • Attach logging functions to plugin modules
    • +
    • Expose albert::setClipboardTextAndPaste
    • +
    • Expose albert::Notification
    • +
    +
  • +
  • [files] +
      +
    • Show filePath instead path in subtext
    • +
    • Add option for case sentivity of fs browsers.
    • +
    • Add user property for inline config
    • +
    +
  • +
+ +

Python plugins

+ +
    +
  • Interface v2.0 stub
  • +
  • [emoji] New generic and platform agnostic emoji implementation
  • +
  • [duckduckgo] Add extension
  • +
  • [color] Add extension
  • +
+ +

And loads of other changes…

+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/08/14/albert-v0.22.1-released.html b/2023/08/14/albert-v0.22.1-released.html new file mode 100644 index 00000000..bd95892e --- /dev/null +++ b/2023/08/14/albert-v0.22.1-released.html @@ -0,0 +1,154 @@ + + + + Albert - Albert v0.22.1 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.1 released

+

[albert]

+
    +
  • Freedesktop notification implementation
  • +
  • Adopt generic Notification interface on macOS
  • +
  • Fix Linux paste action
  • +
+ +

[plugins]

+
    +
  • [apps_xdg] Default trigger “apps”
  • +
  • [yp] Update notification function
  • +
  • [py] Fix function warn > warning
  • +
  • [clipboard] Add paste action
  • +
+ +

[python]

+
    +
  • [pint,yt] Archived. Require maintenance
  • +
  • [timer] Adopt notification api changes
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/08/14/albert-v0.22.2-released.html b/2023/08/14/albert-v0.22.2-released.html new file mode 100644 index 00000000..d69e479a --- /dev/null +++ b/2023/08/14/albert-v0.22.2-released.html @@ -0,0 +1,144 @@ + + + + Albert - Albert v0.22.2 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.2 released

+

[albert]

+
    +
  • Fix logging filters
  • +
+ +

[plugins]

+
    +
  • [ws] Fix websearch breaking users search engines config
  • +
  • [ws] Fix websearch not applying icon when selected from file dialog
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/08/17/albert-v0.22.3-released.html b/2023/08/17/albert-v0.22.3-released.html new file mode 100644 index 00000000..372ad4d6 --- /dev/null +++ b/2023/08/17/albert-v0.22.3-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.22.3 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/08/30/albert-v0.22.4-released.html b/2023/08/30/albert-v0.22.4-released.html new file mode 100644 index 00000000..0edd285c --- /dev/null +++ b/2023/08/30/albert-v0.22.4-released.html @@ -0,0 +1,153 @@ + + + + Albert - Albert v0.22.4 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.4 released

+

[plugins]

+
    +
  • [docs] Add cache for docset list
  • +
  • [docs] Use find_program to find brew for ootb cmake config
  • +
  • [muparser] Use find_program to find brew for ootb cmake config
  • +
  • [py] Silently skip dirs and files that are no python modules
  • +
  • [py] iid v2.1: Add config facilities
  • +
  • [qalcualte] Use find_program to find brew for ootb cmake config
  • +
  • [qml] Add Cmd/Ctrl+Enter/Return to show actions
  • +
  • [snippets] Port old snippets
  • +
+ +

[python]

+
    +
  • [googletrans] Archive. py-googletrans is broken.
  • +
  • [translators] Add “translators” plugin
  • +
  • [emoji] Add “Use derived emojis” option
  • +
  • [dice_roll] iid 2.0
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/09/22/albert-v0.22.5-released.html b/2023/09/22/albert-v0.22.5-released.html new file mode 100644 index 00000000..0363ad82 --- /dev/null +++ b/2023/09/22/albert-v0.22.5-released.html @@ -0,0 +1,166 @@ + + + + Albert - Albert v0.22.5 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.5 released

+

[albert]

+
    +
  • CMake: On macOS include the macports lookup path
  • +
  • Fix segfaults on busywait
  • +
  • Hardcode /usr/local/bin to PATH
  • +
  • Move last report ts from settings to state
  • +
  • Add iconlookup in /usr/local/share although not standardized
  • +
+ +

[plugins]

+
    +
  • [qml] Add hack around lacking DropShadow.samples in Qt <6.4
  • +
  • [apps_macos] v1.3 +
      +
    • Find all apps in home dir
    • +
    • Keep apps up to date unsing online search
    • +
    • Localized app names
    • +
    • Add prefpanes
    • +
    +
  • +
  • [docs] Disable build on macOS. Licensing does not allow usage on macOS.
  • +
  • [files] Add emtpy trash action on macos
  • +
  • [muparser] Archive muparser. One calculator is enough.
  • +
  • [qml] Fix shadow clipping
  • +
  • [qml] Fix clear on hide breaking history search
  • +
+ +

[python]

+
    +
  • [goldendict] Fix import issue
  • +
  • [pass] Add OTP feature
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/09/26/albert-v0.22.6-released.html b/2023/09/26/albert-v0.22.6-released.html new file mode 100644 index 00000000..c54afc16 --- /dev/null +++ b/2023/09/26/albert-v0.22.6-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.22.6 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.6 released

+

[albert]

+
    +
  • Proper tab navigation in handler widget
  • +
  • NativePluginProvider: Use absolute file paths.
  • +
+ +

[plugins]

+
    +
  • [files] Fix “rel. dirpaths of depth 1 have dot prepended” issue
  • +
  • [docs] Fix recent changes to download urls
  • +
  • [qalc] Fix tab order
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/09/27/albert-v0.22.7-released.html b/2023/09/27/albert-v0.22.7-released.html new file mode 100644 index 00000000..7bf357cf --- /dev/null +++ b/2023/09/27/albert-v0.22.7-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.22.7 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/09/28/albert-v0.22.8-released.html b/2023/09/28/albert-v0.22.8-released.html new file mode 100644 index 00000000..a2a5d017 --- /dev/null +++ b/2023/09/28/albert-v0.22.8-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.22.8 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/09/28/albert-v0.22.9-released.html b/2023/09/28/albert-v0.22.9-released.html new file mode 100644 index 00000000..fdfe15c7 --- /dev/null +++ b/2023/09/28/albert-v0.22.9-released.html @@ -0,0 +1,139 @@ + + + + Albert - Albert v0.22.9 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/10/03/albert-v0.22.10-released.html b/2023/10/03/albert-v0.22.10-released.html new file mode 100644 index 00000000..33082af4 --- /dev/null +++ b/2023/10/03/albert-v0.22.10-released.html @@ -0,0 +1,147 @@ + + + + Albert - Albert v0.22.10 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.10 released

+

[albert]

+
    +
  • CI/CD: Appcast prototype
  • +
  • Store log in cache dir
  • +
  • Add loadtype NOUNLOAD +There are some plugins that dont like to be unloaded (Sparkle, Python). +Add a mechanism to let plugins prohibit users to unload it at runtime.
  • +
+ +

[plugins]

+
    +
  • [py] Fix 6.5.2 only QLogCat quirks. Fixes arch builds
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/10/03/albert-v0.22.11-released.html b/2023/10/03/albert-v0.22.11-released.html new file mode 100644 index 00000000..795a558e --- /dev/null +++ b/2023/10/03/albert-v0.22.11-released.html @@ -0,0 +1,143 @@ + + + + Albert - Albert v0.22.11 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/10/03/albert-v0.22.12-released.html b/2023/10/03/albert-v0.22.12-released.html new file mode 100644 index 00000000..552a0573 --- /dev/null +++ b/2023/10/03/albert-v0.22.12-released.html @@ -0,0 +1,148 @@ + + + + Albert - Albert v0.22.12 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/10/05/albert-v0.22.13-released.html b/2023/10/05/albert-v0.22.13-released.html new file mode 100644 index 00000000..7a34dbc3 --- /dev/null +++ b/2023/10/05/albert-v0.22.13-released.html @@ -0,0 +1,144 @@ + + + + Albert - Albert v0.22.13 released + + + + + + + + +
+
+ +
+ + + +
+ + diff --git a/2023/10/06/albert-v0.22.14-released.html b/2023/10/06/albert-v0.22.14-released.html new file mode 100644 index 00000000..ad00c407 --- /dev/null +++ b/2023/10/06/albert-v0.22.14-released.html @@ -0,0 +1,138 @@ + + + + Albert - Albert v0.22.14 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.14 released

+

[albert]

+
    +
  • Let RPCServer take care of crash reports. This is a hotfix to remove the recurring crash report on start, if the app is run more than once, e.g. because the session manager restores a session including albert, but albert is also configured to be autostarted.
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/11/08/albert-v0.22.15-released.html b/2023/11/08/albert-v0.22.15-released.html new file mode 100644 index 00000000..e2b361da --- /dev/null +++ b/2023/11/08/albert-v0.22.15-released.html @@ -0,0 +1,155 @@ + + + + Albert - Albert v0.22.15 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.15 released

+

[albert]

+
    +
  • Fix missing smooth transform in icon provider
  • +
  • Add style information to report
  • +
  • Use X-GNOME-Autostart-Delay
  • +
  • Add proper unix signal handling using self pipe trick
  • +
  • Revert printing to logfile
  • +
  • Give enough time to connect to other instance.
  • +
+ +

[plugins]

+
    +
  • [system:1.8] Dont prompt on gnome session logout
  • +
  • [wbm:1.6] Remove unnecessary cast that may introduce segfaults
  • +
  • [app_xdg:1.8] Use Ubuntu gettext domains
  • +
+ +

[python]

+
    +
  • [stub] Fix links
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/11/18/albert-v0.22.16-released.html b/2023/11/18/albert-v0.22.16-released.html new file mode 100644 index 00000000..14728fee --- /dev/null +++ b/2023/11/18/albert-v0.22.16-released.html @@ -0,0 +1,164 @@ + + + + Albert - Albert v0.22.16 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.16 released

+

[albert]

+
    +
  • Remove the visual warning on crashes. +This ICE error bug is going to stay around for a while.
  • +
  • Remove autostart option +This is a feature unnecessary complicated to maintain and perfectly fine +to delegate entirely to the desktop environment.
  • +
  • Add “report” RPC +To get the ability to fetch report from the running instance.
  • +
+ +

[plugins]

+
    +
  • [python:2.1.0] +Make plugin major.minor the interface version +Improve UX while installing dependencies
  • +
  • [calc:1.4] Threadsafe and aborting calculations +libcalculate does not mention any thread safety. lock it. +Use async calculate(…) function and poll query validity to abort +unnecessary calculations. This does not only save resources, but is +also required such that the locks above dont introduce stuttering.
  • +
  • [system:1.8] Dont prompt on gnome session logout
  • +
  • [app_xdg:1.8] Use Ubuntu gettext domains
  • +
+ +

[python]

+
    +
  • [bitwarden] 2.0 +Add copy-username action
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/2023/11/26/albert-v0.22.17-released.html b/2023/11/26/albert-v0.22.17-released.html new file mode 100644 index 00000000..1fa05d3d --- /dev/null +++ b/2023/11/26/albert-v0.22.17-released.html @@ -0,0 +1,146 @@ + + + + Albert - Albert v0.22.17 released + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Albert v0.22.17 released

+

[albert]

+
    +
  • Prepend albert to logging categories, default filter debug
  • +
  • Remove logging rules cli arguments +Dont work on some systems and there is QT_LOGGING_RULES for it
  • +
  • Differentiate terminator terminals suffering bug 660
  • +
+ +

[plugins]

+
    +
  • [mpris:2.0] Ported
  • +
+ +

Check the GitHub repositories for details.

+ +
+
+
+
+ + + +
+ + diff --git a/404.html b/404.html new file mode 100644 index 00000000..52ef6e0e --- /dev/null +++ b/404.html @@ -0,0 +1,72 @@ + + + + Albert - Oops… + + + + + + + + +
+
+
+

Oops…

+

Nothing found here. Visit home

+ +
+
+ + + +
+ + diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000..1bbf94c4 --- /dev/null +++ b/Gemfile @@ -0,0 +1,8 @@ +# frozen_string_literal: true +# git_source(:github) {|repo_name| "https://github.com/#{repo_name}" } +source "https://rubygems.org" + +gem "jekyll" +gem "webrick" +gem 'jekyll-spaceship' +gem "jekyll-sass-converter", "~> 2.0" diff --git a/appcast.xml b/appcast.xml new file mode 100644 index 00000000..5cbb4c57 --- /dev/null +++ b/appcast.xml @@ -0,0 +1,105 @@ + + + Albert launcher + en + + + Version 0.22.17 + Sun, 26 Nov 2023 01:55:50 +0000 + https://albertlauncher.github.io/ + 2.0 + 11.0.0 + https://albertlauncher.github.io/news/ + + + + + + Version 0.22.16 + Sat, 18 Nov 2023 21:07:36 +0000 + https://albertlauncher.github.io/ + 2.0 + 11.0.0 + https://albertlauncher.github.io/news/ + + + + + + Version 0.22.15 + Wed, 08 Nov 2023 08:50:22 +0000 + https://albertlauncher.github.io/ + 2.0 + 11.0.0 + https://albertlauncher.github.io/news/ + + + + + + Version 0.22.14 + Fri, 06 Oct 2023 10:56:07 +0000 + https://albertlauncher.github.io/ + 2.0 + 11.0.0 + https://albertlauncher.github.io/news/ + + + + + + Version 0.22.13 + Thu, 05 Oct 2023 09:36:47 +0000 + https://albertlauncher.github.io/ + 2.0 + 11.0.0 + https://albertlauncher.github.io/news/ + + + + + + Version 0.22.12 + Tue, 03 Oct 2023 20:45:02 +0000 + https://albertlauncher.github.io/ + 2.0 + 11.0.0 + https://raw.githubusercontent.com/albertlauncher/albert/master/CHANGELOG.md + + + + + + + + diff --git a/assets/css/style.css b/assets/css/style.css new file mode 100644 index 00000000..2440b2ef --- /dev/null +++ b/assets/css/style.css @@ -0,0 +1 @@ +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}template,[hidden]{display:none !important}a{background-color:transparent}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:bold}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:0.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}*{box-sizing:border-box}input,select,textarea,button{font-family:inherit;font-size:inherit;line-height:inherit}body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:14px;line-height:1.5;color:#24292e;background-color:#fff}a{color:#0366d6;text-decoration:none}a:hover{text-decoration:underline}b,strong{font-weight:600}hr,.rule{height:0;margin:15px 0;overflow:hidden;background:transparent;border:0;border-bottom:1px solid #dfe2e5}hr::before,.rule::before{display:table;content:""}hr::after,.rule::after{display:table;clear:both;content:""}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}button{cursor:pointer;border-radius:0}[hidden][hidden]{display:none !important}details summary{cursor:pointer}details:not([open])>*:not(summary){display:none !important}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:0}h1{font-size:32px;font-weight:600}h2{font-size:24px;font-weight:600}h3{font-size:20px;font-weight:600}h4{font-size:16px;font-weight:600}h5{font-size:14px;font-weight:600}h6{font-size:12px;font-weight:600}p{margin-top:0;margin-bottom:10px}small{font-size:90%}blockquote{margin:0}ul,ol{padding-left:0;margin-top:0;margin-bottom:0}ol ol,ul ol{list-style-type:lower-roman}ul ul ol,ul ol ol,ol ul ol,ol ol ol{list-style-type:lower-alpha}dd{margin-left:0}tt,code{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}pre{margin-top:0;margin-bottom:0;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;font-size:12px}.octicon{vertical-align:text-bottom}.anim-fade-in{animation-name:fade-in;animation-duration:1s;animation-timing-function:ease-in-out}.anim-fade-in.fast{animation-duration:300ms}@keyframes fade-in{0%{opacity:0}100%{opacity:1}}.anim-fade-out{animation-name:fade-out;animation-duration:1s;animation-timing-function:ease-out}.anim-fade-out.fast{animation-duration:0.3s}@keyframes fade-out{0%{opacity:1}100%{opacity:0}}.anim-fade-up{opacity:0;animation-name:fade-up;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease-out;animation-delay:1s}@keyframes fade-up{0%{opacity:0.8;transform:translateY(100%)}100%{opacity:1;transform:translateY(0)}}.anim-fade-down{animation-name:fade-down;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease-in}@keyframes fade-down{0%{opacity:1;transform:translateY(0)}100%{opacity:0.5;transform:translateY(100%)}}.anim-grow-x{width:0%;animation-name:grow-x;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease;animation-delay:0.5s}@keyframes grow-x{to{width:100%}}.anim-shrink-x{animation-name:shrink-x;animation-duration:0.3s;animation-fill-mode:forwards;animation-timing-function:ease-in-out;animation-delay:0.5s}@keyframes shrink-x{to{width:0%}}.anim-scale-in{animation-name:scale-in;animation-duration:0.15s;animation-timing-function:cubic-bezier(0.2, 0, 0.13, 1.5)}@keyframes scale-in{0%{opacity:0;transform:scale(0.5)}100%{opacity:1;transform:scale(1)}}.anim-pulse{animation-name:pulse;animation-duration:2s;animation-timing-function:linear;animation-iteration-count:infinite}@keyframes pulse{0%{opacity:0.3}10%{opacity:1}100%{opacity:0.3}}.anim-pulse-in{animation-name:pulse-in;animation-duration:0.5s}@keyframes pulse-in{0%{transform:scale3d(1, 1, 1)}50%{transform:scale3d(1.1, 1.1, 1.1)}100%{transform:scale3d(1, 1, 1)}}.hover-grow{transition:transform 0.3s;backface-visibility:hidden}.hover-grow:hover{transform:scale(1.025)}.border{border:1px #e1e4e8 solid !important}.border-y{border-top:1px #e1e4e8 solid !important;border-bottom:1px #e1e4e8 solid !important}.border-0{border:0 !important}.border-dashed{border-style:dashed !important}.border-blue{border-color:#0366d6 !important}.border-blue-light{border-color:#c8e1ff !important}.border-green{border-color:#34d058 !important}.border-green-light{border-color:#a2cbac !important}.border-red{border-color:#d73a49 !important}.border-red-light{border-color:#cea0a5 !important}.border-purple{border-color:#6f42c1 !important}.border-yellow{border-color:#d9d0a5 !important}.border-gray-light{border-color:#eaecef !important}.border-gray-dark{border-color:#d1d5da !important}.border-black-fade{border-color:rgba(27,31,35,0.15) !important}.border-top{border-top:1px #e1e4e8 solid !important}.border-right{border-right:1px #e1e4e8 solid !important}.border-bottom{border-bottom:1px #e1e4e8 solid !important}.border-left{border-left:1px #e1e4e8 solid !important}.border-top-0{border-top:0 !important}.border-right-0{border-right:0 !important}.border-bottom-0{border-bottom:0 !important}.border-left-0{border-left:0 !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:3px !important}.rounded-2{border-radius:6px !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}@media (min-width: 544px){.border-sm-top{border-top:1px #e1e4e8 solid !important}.border-sm-right{border-right:1px #e1e4e8 solid !important}.border-sm-bottom{border-bottom:1px #e1e4e8 solid !important}.border-sm-left{border-left:1px #e1e4e8 solid !important}.border-sm-top-0{border-top:0 !important}.border-sm-right-0{border-right:0 !important}.border-sm-bottom-0{border-bottom:0 !important}.border-sm-left-0{border-left:0 !important}.rounded-sm-0{border-radius:0 !important}.rounded-sm-1{border-radius:3px !important}.rounded-sm-2{border-radius:6px !important}.rounded-sm-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-sm-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-sm-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-sm-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-sm-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-sm-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-sm-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-sm-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-sm-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-sm-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-sm-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-sm-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}@media (min-width: 768px){.border-md-top{border-top:1px #e1e4e8 solid !important}.border-md-right{border-right:1px #e1e4e8 solid !important}.border-md-bottom{border-bottom:1px #e1e4e8 solid !important}.border-md-left{border-left:1px #e1e4e8 solid !important}.border-md-top-0{border-top:0 !important}.border-md-right-0{border-right:0 !important}.border-md-bottom-0{border-bottom:0 !important}.border-md-left-0{border-left:0 !important}.rounded-md-0{border-radius:0 !important}.rounded-md-1{border-radius:3px !important}.rounded-md-2{border-radius:6px !important}.rounded-md-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-md-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-md-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-md-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-md-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-md-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-md-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-md-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-md-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-md-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-md-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-md-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}@media (min-width: 1012px){.border-lg-top{border-top:1px #e1e4e8 solid !important}.border-lg-right{border-right:1px #e1e4e8 solid !important}.border-lg-bottom{border-bottom:1px #e1e4e8 solid !important}.border-lg-left{border-left:1px #e1e4e8 solid !important}.border-lg-top-0{border-top:0 !important}.border-lg-right-0{border-right:0 !important}.border-lg-bottom-0{border-bottom:0 !important}.border-lg-left-0{border-left:0 !important}.rounded-lg-0{border-radius:0 !important}.rounded-lg-1{border-radius:3px !important}.rounded-lg-2{border-radius:6px !important}.rounded-lg-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-lg-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-lg-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-lg-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-lg-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-lg-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-lg-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-lg-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-lg-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-lg-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-lg-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-lg-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}@media (min-width: 1280px){.border-xl-top{border-top:1px #e1e4e8 solid !important}.border-xl-right{border-right:1px #e1e4e8 solid !important}.border-xl-bottom{border-bottom:1px #e1e4e8 solid !important}.border-xl-left{border-left:1px #e1e4e8 solid !important}.border-xl-top-0{border-top:0 !important}.border-xl-right-0{border-right:0 !important}.border-xl-bottom-0{border-bottom:0 !important}.border-xl-left-0{border-left:0 !important}.rounded-xl-0{border-radius:0 !important}.rounded-xl-1{border-radius:3px !important}.rounded-xl-2{border-radius:6px !important}.rounded-xl-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-xl-top-1{border-top-left-radius:3px !important;border-top-right-radius:3px !important}.rounded-xl-top-2{border-top-left-radius:6px !important;border-top-right-radius:6px !important}.rounded-xl-right-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-xl-right-1{border-top-right-radius:3px !important;border-bottom-right-radius:3px !important}.rounded-xl-right-2{border-top-right-radius:6px !important;border-bottom-right-radius:6px !important}.rounded-xl-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-xl-bottom-1{border-bottom-right-radius:3px !important;border-bottom-left-radius:3px !important}.rounded-xl-bottom-2{border-bottom-right-radius:6px !important;border-bottom-left-radius:6px !important}.rounded-xl-left-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-xl-left-1{border-bottom-left-radius:3px !important;border-top-left-radius:3px !important}.rounded-xl-left-2{border-bottom-left-radius:6px !important;border-top-left-radius:6px !important}}.circle{border-radius:50% !important}.box-shadow{box-shadow:0 1px 1px rgba(27,31,35,0.1) !important}.box-shadow-medium{box-shadow:0 1px 5px rgba(27,31,35,0.15) !important}.box-shadow-large{box-shadow:0 1px 15px rgba(27,31,35,0.15) !important}.box-shadow-extra-large{box-shadow:0 10px 50px rgba(27,31,35,0.07) !important}.box-shadow-none{box-shadow:none !important}.bg-white{background-color:#fff !important}.bg-blue{background-color:#0366d6 !important}.bg-blue-light{background-color:#f1f8ff !important}.bg-gray-dark{background-color:#24292e !important}.bg-gray{background-color:#f6f8fa !important}.bg-gray-light{background-color:#fafbfc !important}.bg-green{background-color:#28a745 !important}.bg-green-light{background-color:#dcffe4 !important}.bg-red{background-color:#d73a49 !important}.bg-red-light{background-color:#ffdce0 !important}.bg-yellow{background-color:#ffd33d !important}.bg-yellow-light{background-color:#fff5b1 !important}.bg-purple{background-color:#6f42c1 !important}.bg-purple-light{background-color:#f5f0ff !important}.bg-shade-gradient{background-image:linear-gradient(180deg, rgba(27,31,35,0.065), rgba(27,31,35,0)) !important;background-repeat:no-repeat !important;background-size:100% 200px !important}.text-blue{color:#0366d6 !important}.text-red{color:#cb2431 !important}.text-gray-light{color:#6a737d !important}.text-gray{color:#586069 !important}.text-gray-dark{color:#24292e !important}.text-green{color:#28a745 !important}.text-orange{color:#a04100 !important}.text-orange-light{color:#e36209 !important}.text-purple{color:#6f42c1 !important}.text-white{color:#fff !important}.text-inherit{color:inherit !important}.text-pending{color:#b08800 !important}.bg-pending{color:#dbab09 !important}.link-gray{color:#586069 !important}.link-gray:hover{color:#0366d6 !important}.link-gray-dark{color:#24292e !important}.link-gray-dark:hover{color:#0366d6 !important}.link-hover-blue:hover{color:#0366d6 !important}.muted-link{color:#586069 !important}.muted-link:hover{color:#0366d6 !important;text-decoration:none}.details-overlay[open]>summary::before{position:fixed;top:0;right:0;bottom:0;left:0;z-index:80;display:block;cursor:default;content:" ";background:transparent}.details-overlay-dark[open]>summary::before{z-index:99;background:rgba(27,31,35,0.5)}.flex-row{flex-direction:row !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column{flex-direction:column !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-justify-start{justify-content:flex-start !important}.flex-justify-end{justify-content:flex-end !important}.flex-justify-center{justify-content:center !important}.flex-justify-between{justify-content:space-between !important}.flex-justify-around{justify-content:space-around !important}.flex-items-start{align-items:flex-start !important}.flex-items-end{align-items:flex-end !important}.flex-items-center{align-items:center !important}.flex-items-baseline{align-items:baseline !important}.flex-items-stretch{align-items:stretch !important}.flex-content-start{align-content:flex-start !important}.flex-content-end{align-content:flex-end !important}.flex-content-center{align-content:center !important}.flex-content-between{align-content:space-between !important}.flex-content-around{align-content:space-around !important}.flex-content-stretch{align-content:stretch !important}.flex-auto{flex:1 1 auto !important}.flex-shrink-0{flex-shrink:0 !important}.flex-self-auto{align-self:auto !important}.flex-self-start{align-self:flex-start !important}.flex-self-end{align-self:flex-end !important}.flex-self-center{align-self:center !important}.flex-self-baseline{align-self:baseline !important}.flex-self-stretch{align-self:stretch !important}.flex-item-equal{flex-grow:1;flex-basis:0}@media (min-width: 544px){.flex-sm-row{flex-direction:row !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column{flex-direction:column !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-justify-start{justify-content:flex-start !important}.flex-sm-justify-end{justify-content:flex-end !important}.flex-sm-justify-center{justify-content:center !important}.flex-sm-justify-between{justify-content:space-between !important}.flex-sm-justify-around{justify-content:space-around !important}.flex-sm-items-start{align-items:flex-start !important}.flex-sm-items-end{align-items:flex-end !important}.flex-sm-items-center{align-items:center !important}.flex-sm-items-baseline{align-items:baseline !important}.flex-sm-items-stretch{align-items:stretch !important}.flex-sm-content-start{align-content:flex-start !important}.flex-sm-content-end{align-content:flex-end !important}.flex-sm-content-center{align-content:center !important}.flex-sm-content-between{align-content:space-between !important}.flex-sm-content-around{align-content:space-around !important}.flex-sm-content-stretch{align-content:stretch !important}.flex-sm-auto{flex:1 1 auto !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-self-auto{align-self:auto !important}.flex-sm-self-start{align-self:flex-start !important}.flex-sm-self-end{align-self:flex-end !important}.flex-sm-self-center{align-self:center !important}.flex-sm-self-baseline{align-self:baseline !important}.flex-sm-self-stretch{align-self:stretch !important}.flex-sm-item-equal{flex-grow:1;flex-basis:0}}@media (min-width: 768px){.flex-md-row{flex-direction:row !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column{flex-direction:column !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-justify-start{justify-content:flex-start !important}.flex-md-justify-end{justify-content:flex-end !important}.flex-md-justify-center{justify-content:center !important}.flex-md-justify-between{justify-content:space-between !important}.flex-md-justify-around{justify-content:space-around !important}.flex-md-items-start{align-items:flex-start !important}.flex-md-items-end{align-items:flex-end !important}.flex-md-items-center{align-items:center !important}.flex-md-items-baseline{align-items:baseline !important}.flex-md-items-stretch{align-items:stretch !important}.flex-md-content-start{align-content:flex-start !important}.flex-md-content-end{align-content:flex-end !important}.flex-md-content-center{align-content:center !important}.flex-md-content-between{align-content:space-between !important}.flex-md-content-around{align-content:space-around !important}.flex-md-content-stretch{align-content:stretch !important}.flex-md-auto{flex:1 1 auto !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-self-auto{align-self:auto !important}.flex-md-self-start{align-self:flex-start !important}.flex-md-self-end{align-self:flex-end !important}.flex-md-self-center{align-self:center !important}.flex-md-self-baseline{align-self:baseline !important}.flex-md-self-stretch{align-self:stretch !important}.flex-md-item-equal{flex-grow:1;flex-basis:0}}@media (min-width: 1012px){.flex-lg-row{flex-direction:row !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column{flex-direction:column !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-justify-start{justify-content:flex-start !important}.flex-lg-justify-end{justify-content:flex-end !important}.flex-lg-justify-center{justify-content:center !important}.flex-lg-justify-between{justify-content:space-between !important}.flex-lg-justify-around{justify-content:space-around !important}.flex-lg-items-start{align-items:flex-start !important}.flex-lg-items-end{align-items:flex-end !important}.flex-lg-items-center{align-items:center !important}.flex-lg-items-baseline{align-items:baseline !important}.flex-lg-items-stretch{align-items:stretch !important}.flex-lg-content-start{align-content:flex-start !important}.flex-lg-content-end{align-content:flex-end !important}.flex-lg-content-center{align-content:center !important}.flex-lg-content-between{align-content:space-between !important}.flex-lg-content-around{align-content:space-around !important}.flex-lg-content-stretch{align-content:stretch !important}.flex-lg-auto{flex:1 1 auto !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-self-auto{align-self:auto !important}.flex-lg-self-start{align-self:flex-start !important}.flex-lg-self-end{align-self:flex-end !important}.flex-lg-self-center{align-self:center !important}.flex-lg-self-baseline{align-self:baseline !important}.flex-lg-self-stretch{align-self:stretch !important}.flex-lg-item-equal{flex-grow:1;flex-basis:0}}@media (min-width: 1280px){.flex-xl-row{flex-direction:row !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column{flex-direction:column !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-justify-start{justify-content:flex-start !important}.flex-xl-justify-end{justify-content:flex-end !important}.flex-xl-justify-center{justify-content:center !important}.flex-xl-justify-between{justify-content:space-between !important}.flex-xl-justify-around{justify-content:space-around !important}.flex-xl-items-start{align-items:flex-start !important}.flex-xl-items-end{align-items:flex-end !important}.flex-xl-items-center{align-items:center !important}.flex-xl-items-baseline{align-items:baseline !important}.flex-xl-items-stretch{align-items:stretch !important}.flex-xl-content-start{align-content:flex-start !important}.flex-xl-content-end{align-content:flex-end !important}.flex-xl-content-center{align-content:center !important}.flex-xl-content-between{align-content:space-between !important}.flex-xl-content-around{align-content:space-around !important}.flex-xl-content-stretch{align-content:stretch !important}.flex-xl-auto{flex:1 1 auto !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-self-auto{align-self:auto !important}.flex-xl-self-start{align-self:flex-start !important}.flex-xl-self-end{align-self:flex-end !important}.flex-xl-self-center{align-self:center !important}.flex-xl-self-baseline{align-self:baseline !important}.flex-xl-self-stretch{align-self:stretch !important}.flex-xl-item-equal{flex-grow:1;flex-basis:0}}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.top-0{top:0 !important}.right-0{right:0 !important}.bottom-0{bottom:0 !important}.left-0{left:0 !important}.v-align-middle{vertical-align:middle !important}.v-align-top{vertical-align:top !important}.v-align-bottom{vertical-align:bottom !important}.v-align-text-top{vertical-align:text-top !important}.v-align-text-bottom{vertical-align:text-bottom !important}.v-align-baseline{vertical-align:baseline !important}.overflow-hidden{overflow:hidden !important}.overflow-scroll{overflow:scroll !important}.overflow-auto{overflow:auto !important}.clearfix::before{display:table;content:""}.clearfix::after{display:table;clear:both;content:""}.float-left{float:left !important}.float-right{float:right !important}.float-none{float:none !important}@media (min-width: 544px){.float-sm-left{float:left !important}.float-sm-right{float:right !important}.float-sm-none{float:none !important}}@media (min-width: 768px){.float-md-left{float:left !important}.float-md-right{float:right !important}.float-md-none{float:none !important}}@media (min-width: 1012px){.float-lg-left{float:left !important}.float-lg-right{float:right !important}.float-lg-none{float:none !important}}@media (min-width: 1280px){.float-xl-left{float:left !important}.float-xl-right{float:right !important}.float-xl-none{float:none !important}}.width-fit{max-width:100% !important}.width-full{width:100% !important}.height-fit{max-height:100% !important}.height-full{height:100% !important}.min-width-0{min-width:0 !important}.direction-rtl{direction:rtl !important}.direction-ltr{direction:ltr !important}@media (min-width: 544px){.direction-sm-rtl{direction:rtl !important}.direction-sm-ltr{direction:ltr !important}}@media (min-width: 768px){.direction-md-rtl{direction:rtl !important}.direction-md-ltr{direction:ltr !important}}@media (min-width: 1012px){.direction-lg-rtl{direction:rtl !important}.direction-lg-ltr{direction:ltr !important}}@media (min-width: 1280px){.direction-xl-rtl{direction:rtl !important}.direction-xl-ltr{direction:ltr !important}}.m-0{margin:0 !important}.mt-0{margin-top:0 !important}.mr-0{margin-right:0 !important}.mb-0{margin-bottom:0 !important}.ml-0{margin-left:0 !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.m-1{margin:4px !important}.mt-1{margin-top:4px !important}.mr-1{margin-right:4px !important}.mb-1{margin-bottom:4px !important}.ml-1{margin-left:4px !important}.mt-n1{margin-top:-4px !important}.mr-n1{margin-right:-4px !important}.mb-n1{margin-bottom:-4px !important}.ml-n1{margin-left:-4px !important}.mx-1{margin-right:4px !important;margin-left:4px !important}.my-1{margin-top:4px !important;margin-bottom:4px !important}.m-2{margin:8px !important}.mt-2{margin-top:8px !important}.mr-2{margin-right:8px !important}.mb-2{margin-bottom:8px !important}.ml-2{margin-left:8px !important}.mt-n2{margin-top:-8px !important}.mr-n2{margin-right:-8px !important}.mb-n2{margin-bottom:-8px !important}.ml-n2{margin-left:-8px !important}.mx-2{margin-right:8px !important;margin-left:8px !important}.my-2{margin-top:8px !important;margin-bottom:8px !important}.m-3{margin:16px !important}.mt-3{margin-top:16px !important}.mr-3{margin-right:16px !important}.mb-3{margin-bottom:16px !important}.ml-3{margin-left:16px !important}.mt-n3{margin-top:-16px !important}.mr-n3{margin-right:-16px !important}.mb-n3{margin-bottom:-16px !important}.ml-n3{margin-left:-16px !important}.mx-3{margin-right:16px !important;margin-left:16px !important}.my-3{margin-top:16px !important;margin-bottom:16px !important}.m-4{margin:24px !important}.mt-4{margin-top:24px !important}.mr-4{margin-right:24px !important}.mb-4{margin-bottom:24px !important}.ml-4{margin-left:24px !important}.mt-n4{margin-top:-24px !important}.mr-n4{margin-right:-24px !important}.mb-n4{margin-bottom:-24px !important}.ml-n4{margin-left:-24px !important}.mx-4{margin-right:24px !important;margin-left:24px !important}.my-4{margin-top:24px !important;margin-bottom:24px !important}.m-5{margin:32px !important}.mt-5{margin-top:32px !important}.mr-5{margin-right:32px !important}.mb-5{margin-bottom:32px !important}.ml-5{margin-left:32px !important}.mt-n5{margin-top:-32px !important}.mr-n5{margin-right:-32px !important}.mb-n5{margin-bottom:-32px !important}.ml-n5{margin-left:-32px !important}.mx-5{margin-right:32px !important;margin-left:32px !important}.my-5{margin-top:32px !important;margin-bottom:32px !important}.m-6{margin:40px !important}.mt-6{margin-top:40px !important}.mr-6{margin-right:40px !important}.mb-6{margin-bottom:40px !important}.ml-6{margin-left:40px !important}.mt-n6{margin-top:-40px !important}.mr-n6{margin-right:-40px !important}.mb-n6{margin-bottom:-40px !important}.ml-n6{margin-left:-40px !important}.mx-6{margin-right:40px !important;margin-left:40px !important}.my-6{margin-top:40px !important;margin-bottom:40px !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}@media (min-width: 544px){.m-sm-0{margin:0 !important}.mt-sm-0{margin-top:0 !important}.mr-sm-0{margin-right:0 !important}.mb-sm-0{margin-bottom:0 !important}.ml-sm-0{margin-left:0 !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.m-sm-1{margin:4px !important}.mt-sm-1{margin-top:4px !important}.mr-sm-1{margin-right:4px !important}.mb-sm-1{margin-bottom:4px !important}.ml-sm-1{margin-left:4px !important}.mt-sm-n1{margin-top:-4px !important}.mr-sm-n1{margin-right:-4px !important}.mb-sm-n1{margin-bottom:-4px !important}.ml-sm-n1{margin-left:-4px !important}.mx-sm-1{margin-right:4px !important;margin-left:4px !important}.my-sm-1{margin-top:4px !important;margin-bottom:4px !important}.m-sm-2{margin:8px !important}.mt-sm-2{margin-top:8px !important}.mr-sm-2{margin-right:8px !important}.mb-sm-2{margin-bottom:8px !important}.ml-sm-2{margin-left:8px !important}.mt-sm-n2{margin-top:-8px !important}.mr-sm-n2{margin-right:-8px !important}.mb-sm-n2{margin-bottom:-8px !important}.ml-sm-n2{margin-left:-8px !important}.mx-sm-2{margin-right:8px !important;margin-left:8px !important}.my-sm-2{margin-top:8px !important;margin-bottom:8px !important}.m-sm-3{margin:16px !important}.mt-sm-3{margin-top:16px !important}.mr-sm-3{margin-right:16px !important}.mb-sm-3{margin-bottom:16px !important}.ml-sm-3{margin-left:16px !important}.mt-sm-n3{margin-top:-16px !important}.mr-sm-n3{margin-right:-16px !important}.mb-sm-n3{margin-bottom:-16px !important}.ml-sm-n3{margin-left:-16px !important}.mx-sm-3{margin-right:16px !important;margin-left:16px !important}.my-sm-3{margin-top:16px !important;margin-bottom:16px !important}.m-sm-4{margin:24px !important}.mt-sm-4{margin-top:24px !important}.mr-sm-4{margin-right:24px !important}.mb-sm-4{margin-bottom:24px !important}.ml-sm-4{margin-left:24px !important}.mt-sm-n4{margin-top:-24px !important}.mr-sm-n4{margin-right:-24px !important}.mb-sm-n4{margin-bottom:-24px !important}.ml-sm-n4{margin-left:-24px !important}.mx-sm-4{margin-right:24px !important;margin-left:24px !important}.my-sm-4{margin-top:24px !important;margin-bottom:24px !important}.m-sm-5{margin:32px !important}.mt-sm-5{margin-top:32px !important}.mr-sm-5{margin-right:32px !important}.mb-sm-5{margin-bottom:32px !important}.ml-sm-5{margin-left:32px !important}.mt-sm-n5{margin-top:-32px !important}.mr-sm-n5{margin-right:-32px !important}.mb-sm-n5{margin-bottom:-32px !important}.ml-sm-n5{margin-left:-32px !important}.mx-sm-5{margin-right:32px !important;margin-left:32px !important}.my-sm-5{margin-top:32px !important;margin-bottom:32px !important}.m-sm-6{margin:40px !important}.mt-sm-6{margin-top:40px !important}.mr-sm-6{margin-right:40px !important}.mb-sm-6{margin-bottom:40px !important}.ml-sm-6{margin-left:40px !important}.mt-sm-n6{margin-top:-40px !important}.mr-sm-n6{margin-right:-40px !important}.mb-sm-n6{margin-bottom:-40px !important}.ml-sm-n6{margin-left:-40px !important}.mx-sm-6{margin-right:40px !important;margin-left:40px !important}.my-sm-6{margin-top:40px !important;margin-bottom:40px !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 768px){.m-md-0{margin:0 !important}.mt-md-0{margin-top:0 !important}.mr-md-0{margin-right:0 !important}.mb-md-0{margin-bottom:0 !important}.ml-md-0{margin-left:0 !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.m-md-1{margin:4px !important}.mt-md-1{margin-top:4px !important}.mr-md-1{margin-right:4px !important}.mb-md-1{margin-bottom:4px !important}.ml-md-1{margin-left:4px !important}.mt-md-n1{margin-top:-4px !important}.mr-md-n1{margin-right:-4px !important}.mb-md-n1{margin-bottom:-4px !important}.ml-md-n1{margin-left:-4px !important}.mx-md-1{margin-right:4px !important;margin-left:4px !important}.my-md-1{margin-top:4px !important;margin-bottom:4px !important}.m-md-2{margin:8px !important}.mt-md-2{margin-top:8px !important}.mr-md-2{margin-right:8px !important}.mb-md-2{margin-bottom:8px !important}.ml-md-2{margin-left:8px !important}.mt-md-n2{margin-top:-8px !important}.mr-md-n2{margin-right:-8px !important}.mb-md-n2{margin-bottom:-8px !important}.ml-md-n2{margin-left:-8px !important}.mx-md-2{margin-right:8px !important;margin-left:8px !important}.my-md-2{margin-top:8px !important;margin-bottom:8px !important}.m-md-3{margin:16px !important}.mt-md-3{margin-top:16px !important}.mr-md-3{margin-right:16px !important}.mb-md-3{margin-bottom:16px !important}.ml-md-3{margin-left:16px !important}.mt-md-n3{margin-top:-16px !important}.mr-md-n3{margin-right:-16px !important}.mb-md-n3{margin-bottom:-16px !important}.ml-md-n3{margin-left:-16px !important}.mx-md-3{margin-right:16px !important;margin-left:16px !important}.my-md-3{margin-top:16px !important;margin-bottom:16px !important}.m-md-4{margin:24px !important}.mt-md-4{margin-top:24px !important}.mr-md-4{margin-right:24px !important}.mb-md-4{margin-bottom:24px !important}.ml-md-4{margin-left:24px !important}.mt-md-n4{margin-top:-24px !important}.mr-md-n4{margin-right:-24px !important}.mb-md-n4{margin-bottom:-24px !important}.ml-md-n4{margin-left:-24px !important}.mx-md-4{margin-right:24px !important;margin-left:24px !important}.my-md-4{margin-top:24px !important;margin-bottom:24px !important}.m-md-5{margin:32px !important}.mt-md-5{margin-top:32px !important}.mr-md-5{margin-right:32px !important}.mb-md-5{margin-bottom:32px !important}.ml-md-5{margin-left:32px !important}.mt-md-n5{margin-top:-32px !important}.mr-md-n5{margin-right:-32px !important}.mb-md-n5{margin-bottom:-32px !important}.ml-md-n5{margin-left:-32px !important}.mx-md-5{margin-right:32px !important;margin-left:32px !important}.my-md-5{margin-top:32px !important;margin-bottom:32px !important}.m-md-6{margin:40px !important}.mt-md-6{margin-top:40px !important}.mr-md-6{margin-right:40px !important}.mb-md-6{margin-bottom:40px !important}.ml-md-6{margin-left:40px !important}.mt-md-n6{margin-top:-40px !important}.mr-md-n6{margin-right:-40px !important}.mb-md-n6{margin-bottom:-40px !important}.ml-md-n6{margin-left:-40px !important}.mx-md-6{margin-right:40px !important;margin-left:40px !important}.my-md-6{margin-top:40px !important;margin-bottom:40px !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 1012px){.m-lg-0{margin:0 !important}.mt-lg-0{margin-top:0 !important}.mr-lg-0{margin-right:0 !important}.mb-lg-0{margin-bottom:0 !important}.ml-lg-0{margin-left:0 !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.m-lg-1{margin:4px !important}.mt-lg-1{margin-top:4px !important}.mr-lg-1{margin-right:4px !important}.mb-lg-1{margin-bottom:4px !important}.ml-lg-1{margin-left:4px !important}.mt-lg-n1{margin-top:-4px !important}.mr-lg-n1{margin-right:-4px !important}.mb-lg-n1{margin-bottom:-4px !important}.ml-lg-n1{margin-left:-4px !important}.mx-lg-1{margin-right:4px !important;margin-left:4px !important}.my-lg-1{margin-top:4px !important;margin-bottom:4px !important}.m-lg-2{margin:8px !important}.mt-lg-2{margin-top:8px !important}.mr-lg-2{margin-right:8px !important}.mb-lg-2{margin-bottom:8px !important}.ml-lg-2{margin-left:8px !important}.mt-lg-n2{margin-top:-8px !important}.mr-lg-n2{margin-right:-8px !important}.mb-lg-n2{margin-bottom:-8px !important}.ml-lg-n2{margin-left:-8px !important}.mx-lg-2{margin-right:8px !important;margin-left:8px !important}.my-lg-2{margin-top:8px !important;margin-bottom:8px !important}.m-lg-3{margin:16px !important}.mt-lg-3{margin-top:16px !important}.mr-lg-3{margin-right:16px !important}.mb-lg-3{margin-bottom:16px !important}.ml-lg-3{margin-left:16px !important}.mt-lg-n3{margin-top:-16px !important}.mr-lg-n3{margin-right:-16px !important}.mb-lg-n3{margin-bottom:-16px !important}.ml-lg-n3{margin-left:-16px !important}.mx-lg-3{margin-right:16px !important;margin-left:16px !important}.my-lg-3{margin-top:16px !important;margin-bottom:16px !important}.m-lg-4{margin:24px !important}.mt-lg-4{margin-top:24px !important}.mr-lg-4{margin-right:24px !important}.mb-lg-4{margin-bottom:24px !important}.ml-lg-4{margin-left:24px !important}.mt-lg-n4{margin-top:-24px !important}.mr-lg-n4{margin-right:-24px !important}.mb-lg-n4{margin-bottom:-24px !important}.ml-lg-n4{margin-left:-24px !important}.mx-lg-4{margin-right:24px !important;margin-left:24px !important}.my-lg-4{margin-top:24px !important;margin-bottom:24px !important}.m-lg-5{margin:32px !important}.mt-lg-5{margin-top:32px !important}.mr-lg-5{margin-right:32px !important}.mb-lg-5{margin-bottom:32px !important}.ml-lg-5{margin-left:32px !important}.mt-lg-n5{margin-top:-32px !important}.mr-lg-n5{margin-right:-32px !important}.mb-lg-n5{margin-bottom:-32px !important}.ml-lg-n5{margin-left:-32px !important}.mx-lg-5{margin-right:32px !important;margin-left:32px !important}.my-lg-5{margin-top:32px !important;margin-bottom:32px !important}.m-lg-6{margin:40px !important}.mt-lg-6{margin-top:40px !important}.mr-lg-6{margin-right:40px !important}.mb-lg-6{margin-bottom:40px !important}.ml-lg-6{margin-left:40px !important}.mt-lg-n6{margin-top:-40px !important}.mr-lg-n6{margin-right:-40px !important}.mb-lg-n6{margin-bottom:-40px !important}.ml-lg-n6{margin-left:-40px !important}.mx-lg-6{margin-right:40px !important;margin-left:40px !important}.my-lg-6{margin-top:40px !important;margin-bottom:40px !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}}@media (min-width: 1280px){.m-xl-0{margin:0 !important}.mt-xl-0{margin-top:0 !important}.mr-xl-0{margin-right:0 !important}.mb-xl-0{margin-bottom:0 !important}.ml-xl-0{margin-left:0 !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.m-xl-1{margin:4px !important}.mt-xl-1{margin-top:4px !important}.mr-xl-1{margin-right:4px !important}.mb-xl-1{margin-bottom:4px !important}.ml-xl-1{margin-left:4px !important}.mt-xl-n1{margin-top:-4px !important}.mr-xl-n1{margin-right:-4px !important}.mb-xl-n1{margin-bottom:-4px !important}.ml-xl-n1{margin-left:-4px !important}.mx-xl-1{margin-right:4px !important;margin-left:4px !important}.my-xl-1{margin-top:4px !important;margin-bottom:4px !important}.m-xl-2{margin:8px !important}.mt-xl-2{margin-top:8px !important}.mr-xl-2{margin-right:8px !important}.mb-xl-2{margin-bottom:8px !important}.ml-xl-2{margin-left:8px !important}.mt-xl-n2{margin-top:-8px !important}.mr-xl-n2{margin-right:-8px !important}.mb-xl-n2{margin-bottom:-8px !important}.ml-xl-n2{margin-left:-8px !important}.mx-xl-2{margin-right:8px !important;margin-left:8px !important}.my-xl-2{margin-top:8px !important;margin-bottom:8px !important}.m-xl-3{margin:16px !important}.mt-xl-3{margin-top:16px !important}.mr-xl-3{margin-right:16px !important}.mb-xl-3{margin-bottom:16px !important}.ml-xl-3{margin-left:16px !important}.mt-xl-n3{margin-top:-16px !important}.mr-xl-n3{margin-right:-16px !important}.mb-xl-n3{margin-bottom:-16px !important}.ml-xl-n3{margin-left:-16px !important}.mx-xl-3{margin-right:16px !important;margin-left:16px !important}.my-xl-3{margin-top:16px !important;margin-bottom:16px !important}.m-xl-4{margin:24px !important}.mt-xl-4{margin-top:24px !important}.mr-xl-4{margin-right:24px !important}.mb-xl-4{margin-bottom:24px !important}.ml-xl-4{margin-left:24px !important}.mt-xl-n4{margin-top:-24px !important}.mr-xl-n4{margin-right:-24px !important}.mb-xl-n4{margin-bottom:-24px !important}.ml-xl-n4{margin-left:-24px !important}.mx-xl-4{margin-right:24px !important;margin-left:24px !important}.my-xl-4{margin-top:24px !important;margin-bottom:24px !important}.m-xl-5{margin:32px !important}.mt-xl-5{margin-top:32px !important}.mr-xl-5{margin-right:32px !important}.mb-xl-5{margin-bottom:32px !important}.ml-xl-5{margin-left:32px !important}.mt-xl-n5{margin-top:-32px !important}.mr-xl-n5{margin-right:-32px !important}.mb-xl-n5{margin-bottom:-32px !important}.ml-xl-n5{margin-left:-32px !important}.mx-xl-5{margin-right:32px !important;margin-left:32px !important}.my-xl-5{margin-top:32px !important;margin-bottom:32px !important}.m-xl-6{margin:40px !important}.mt-xl-6{margin-top:40px !important}.mr-xl-6{margin-right:40px !important}.mb-xl-6{margin-bottom:40px !important}.ml-xl-6{margin-left:40px !important}.mt-xl-n6{margin-top:-40px !important}.mr-xl-n6{margin-right:-40px !important}.mb-xl-n6{margin-bottom:-40px !important}.ml-xl-n6{margin-left:-40px !important}.mx-xl-6{margin-right:40px !important;margin-left:40px !important}.my-xl-6{margin-top:40px !important;margin-bottom:40px !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}}.p-0{padding:0 !important}.pt-0{padding-top:0 !important}.pr-0{padding-right:0 !important}.pb-0{padding-bottom:0 !important}.pl-0{padding-left:0 !important}.px-0{padding-right:0 !important;padding-left:0 !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.p-1{padding:4px !important}.pt-1{padding-top:4px !important}.pr-1{padding-right:4px !important}.pb-1{padding-bottom:4px !important}.pl-1{padding-left:4px !important}.px-1{padding-right:4px !important;padding-left:4px !important}.py-1{padding-top:4px !important;padding-bottom:4px !important}.p-2{padding:8px !important}.pt-2{padding-top:8px !important}.pr-2{padding-right:8px !important}.pb-2{padding-bottom:8px !important}.pl-2{padding-left:8px !important}.px-2{padding-right:8px !important;padding-left:8px !important}.py-2{padding-top:8px !important;padding-bottom:8px !important}.p-3{padding:16px !important}.pt-3{padding-top:16px !important}.pr-3{padding-right:16px !important}.pb-3{padding-bottom:16px !important}.pl-3{padding-left:16px !important}.px-3{padding-right:16px !important;padding-left:16px !important}.py-3{padding-top:16px !important;padding-bottom:16px !important}.p-4{padding:24px !important}.pt-4{padding-top:24px !important}.pr-4{padding-right:24px !important}.pb-4{padding-bottom:24px !important}.pl-4{padding-left:24px !important}.px-4{padding-right:24px !important;padding-left:24px !important}.py-4{padding-top:24px !important;padding-bottom:24px !important}.p-5{padding:32px !important}.pt-5{padding-top:32px !important}.pr-5{padding-right:32px !important}.pb-5{padding-bottom:32px !important}.pl-5{padding-left:32px !important}.px-5{padding-right:32px !important;padding-left:32px !important}.py-5{padding-top:32px !important;padding-bottom:32px !important}.p-6{padding:40px !important}.pt-6{padding-top:40px !important}.pr-6{padding-right:40px !important}.pb-6{padding-bottom:40px !important}.pl-6{padding-left:40px !important}.px-6{padding-right:40px !important;padding-left:40px !important}.py-6{padding-top:40px !important;padding-bottom:40px !important}@media (min-width: 544px){.p-sm-0{padding:0 !important}.pt-sm-0{padding-top:0 !important}.pr-sm-0{padding-right:0 !important}.pb-sm-0{padding-bottom:0 !important}.pl-sm-0{padding-left:0 !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.p-sm-1{padding:4px !important}.pt-sm-1{padding-top:4px !important}.pr-sm-1{padding-right:4px !important}.pb-sm-1{padding-bottom:4px !important}.pl-sm-1{padding-left:4px !important}.px-sm-1{padding-right:4px !important;padding-left:4px !important}.py-sm-1{padding-top:4px !important;padding-bottom:4px !important}.p-sm-2{padding:8px !important}.pt-sm-2{padding-top:8px !important}.pr-sm-2{padding-right:8px !important}.pb-sm-2{padding-bottom:8px !important}.pl-sm-2{padding-left:8px !important}.px-sm-2{padding-right:8px !important;padding-left:8px !important}.py-sm-2{padding-top:8px !important;padding-bottom:8px !important}.p-sm-3{padding:16px !important}.pt-sm-3{padding-top:16px !important}.pr-sm-3{padding-right:16px !important}.pb-sm-3{padding-bottom:16px !important}.pl-sm-3{padding-left:16px !important}.px-sm-3{padding-right:16px !important;padding-left:16px !important}.py-sm-3{padding-top:16px !important;padding-bottom:16px !important}.p-sm-4{padding:24px !important}.pt-sm-4{padding-top:24px !important}.pr-sm-4{padding-right:24px !important}.pb-sm-4{padding-bottom:24px !important}.pl-sm-4{padding-left:24px !important}.px-sm-4{padding-right:24px !important;padding-left:24px !important}.py-sm-4{padding-top:24px !important;padding-bottom:24px !important}.p-sm-5{padding:32px !important}.pt-sm-5{padding-top:32px !important}.pr-sm-5{padding-right:32px !important}.pb-sm-5{padding-bottom:32px !important}.pl-sm-5{padding-left:32px !important}.px-sm-5{padding-right:32px !important;padding-left:32px !important}.py-sm-5{padding-top:32px !important;padding-bottom:32px !important}.p-sm-6{padding:40px !important}.pt-sm-6{padding-top:40px !important}.pr-sm-6{padding-right:40px !important}.pb-sm-6{padding-bottom:40px !important}.pl-sm-6{padding-left:40px !important}.px-sm-6{padding-right:40px !important;padding-left:40px !important}.py-sm-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 768px){.p-md-0{padding:0 !important}.pt-md-0{padding-top:0 !important}.pr-md-0{padding-right:0 !important}.pb-md-0{padding-bottom:0 !important}.pl-md-0{padding-left:0 !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.p-md-1{padding:4px !important}.pt-md-1{padding-top:4px !important}.pr-md-1{padding-right:4px !important}.pb-md-1{padding-bottom:4px !important}.pl-md-1{padding-left:4px !important}.px-md-1{padding-right:4px !important;padding-left:4px !important}.py-md-1{padding-top:4px !important;padding-bottom:4px !important}.p-md-2{padding:8px !important}.pt-md-2{padding-top:8px !important}.pr-md-2{padding-right:8px !important}.pb-md-2{padding-bottom:8px !important}.pl-md-2{padding-left:8px !important}.px-md-2{padding-right:8px !important;padding-left:8px !important}.py-md-2{padding-top:8px !important;padding-bottom:8px !important}.p-md-3{padding:16px !important}.pt-md-3{padding-top:16px !important}.pr-md-3{padding-right:16px !important}.pb-md-3{padding-bottom:16px !important}.pl-md-3{padding-left:16px !important}.px-md-3{padding-right:16px !important;padding-left:16px !important}.py-md-3{padding-top:16px !important;padding-bottom:16px !important}.p-md-4{padding:24px !important}.pt-md-4{padding-top:24px !important}.pr-md-4{padding-right:24px !important}.pb-md-4{padding-bottom:24px !important}.pl-md-4{padding-left:24px !important}.px-md-4{padding-right:24px !important;padding-left:24px !important}.py-md-4{padding-top:24px !important;padding-bottom:24px !important}.p-md-5{padding:32px !important}.pt-md-5{padding-top:32px !important}.pr-md-5{padding-right:32px !important}.pb-md-5{padding-bottom:32px !important}.pl-md-5{padding-left:32px !important}.px-md-5{padding-right:32px !important;padding-left:32px !important}.py-md-5{padding-top:32px !important;padding-bottom:32px !important}.p-md-6{padding:40px !important}.pt-md-6{padding-top:40px !important}.pr-md-6{padding-right:40px !important}.pb-md-6{padding-bottom:40px !important}.pl-md-6{padding-left:40px !important}.px-md-6{padding-right:40px !important;padding-left:40px !important}.py-md-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1012px){.p-lg-0{padding:0 !important}.pt-lg-0{padding-top:0 !important}.pr-lg-0{padding-right:0 !important}.pb-lg-0{padding-bottom:0 !important}.pl-lg-0{padding-left:0 !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.p-lg-1{padding:4px !important}.pt-lg-1{padding-top:4px !important}.pr-lg-1{padding-right:4px !important}.pb-lg-1{padding-bottom:4px !important}.pl-lg-1{padding-left:4px !important}.px-lg-1{padding-right:4px !important;padding-left:4px !important}.py-lg-1{padding-top:4px !important;padding-bottom:4px !important}.p-lg-2{padding:8px !important}.pt-lg-2{padding-top:8px !important}.pr-lg-2{padding-right:8px !important}.pb-lg-2{padding-bottom:8px !important}.pl-lg-2{padding-left:8px !important}.px-lg-2{padding-right:8px !important;padding-left:8px !important}.py-lg-2{padding-top:8px !important;padding-bottom:8px !important}.p-lg-3{padding:16px !important}.pt-lg-3{padding-top:16px !important}.pr-lg-3{padding-right:16px !important}.pb-lg-3{padding-bottom:16px !important}.pl-lg-3{padding-left:16px !important}.px-lg-3{padding-right:16px !important;padding-left:16px !important}.py-lg-3{padding-top:16px !important;padding-bottom:16px !important}.p-lg-4{padding:24px !important}.pt-lg-4{padding-top:24px !important}.pr-lg-4{padding-right:24px !important}.pb-lg-4{padding-bottom:24px !important}.pl-lg-4{padding-left:24px !important}.px-lg-4{padding-right:24px !important;padding-left:24px !important}.py-lg-4{padding-top:24px !important;padding-bottom:24px !important}.p-lg-5{padding:32px !important}.pt-lg-5{padding-top:32px !important}.pr-lg-5{padding-right:32px !important}.pb-lg-5{padding-bottom:32px !important}.pl-lg-5{padding-left:32px !important}.px-lg-5{padding-right:32px !important;padding-left:32px !important}.py-lg-5{padding-top:32px !important;padding-bottom:32px !important}.p-lg-6{padding:40px !important}.pt-lg-6{padding-top:40px !important}.pr-lg-6{padding-right:40px !important}.pb-lg-6{padding-bottom:40px !important}.pl-lg-6{padding-left:40px !important}.px-lg-6{padding-right:40px !important;padding-left:40px !important}.py-lg-6{padding-top:40px !important;padding-bottom:40px !important}}@media (min-width: 1280px){.p-xl-0{padding:0 !important}.pt-xl-0{padding-top:0 !important}.pr-xl-0{padding-right:0 !important}.pb-xl-0{padding-bottom:0 !important}.pl-xl-0{padding-left:0 !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.p-xl-1{padding:4px !important}.pt-xl-1{padding-top:4px !important}.pr-xl-1{padding-right:4px !important}.pb-xl-1{padding-bottom:4px !important}.pl-xl-1{padding-left:4px !important}.px-xl-1{padding-right:4px !important;padding-left:4px !important}.py-xl-1{padding-top:4px !important;padding-bottom:4px !important}.p-xl-2{padding:8px !important}.pt-xl-2{padding-top:8px !important}.pr-xl-2{padding-right:8px !important}.pb-xl-2{padding-bottom:8px !important}.pl-xl-2{padding-left:8px !important}.px-xl-2{padding-right:8px !important;padding-left:8px !important}.py-xl-2{padding-top:8px !important;padding-bottom:8px !important}.p-xl-3{padding:16px !important}.pt-xl-3{padding-top:16px !important}.pr-xl-3{padding-right:16px !important}.pb-xl-3{padding-bottom:16px !important}.pl-xl-3{padding-left:16px !important}.px-xl-3{padding-right:16px !important;padding-left:16px !important}.py-xl-3{padding-top:16px !important;padding-bottom:16px !important}.p-xl-4{padding:24px !important}.pt-xl-4{padding-top:24px !important}.pr-xl-4{padding-right:24px !important}.pb-xl-4{padding-bottom:24px !important}.pl-xl-4{padding-left:24px !important}.px-xl-4{padding-right:24px !important;padding-left:24px !important}.py-xl-4{padding-top:24px !important;padding-bottom:24px !important}.p-xl-5{padding:32px !important}.pt-xl-5{padding-top:32px !important}.pr-xl-5{padding-right:32px !important}.pb-xl-5{padding-bottom:32px !important}.pl-xl-5{padding-left:32px !important}.px-xl-5{padding-right:32px !important;padding-left:32px !important}.py-xl-5{padding-top:32px !important;padding-bottom:32px !important}.p-xl-6{padding:40px !important}.pt-xl-6{padding-top:40px !important}.pr-xl-6{padding-right:40px !important}.pb-xl-6{padding-bottom:40px !important}.pl-xl-6{padding-left:40px !important}.px-xl-6{padding-right:40px !important;padding-left:40px !important}.py-xl-6{padding-top:40px !important;padding-bottom:40px !important}}.p-responsive{padding-right:16px !important;padding-left:16px !important}@media (min-width: 544px){.p-responsive{padding-right:40px !important;padding-left:40px !important}}@media (min-width: 1012px){.p-responsive{padding-right:16px !important;padding-left:16px !important}}.h1{font-size:26px !important}@media (min-width: 768px){.h1{font-size:32px !important}}.h2{font-size:22px !important}@media (min-width: 768px){.h2{font-size:24px !important}}.h3{font-size:18px !important}@media (min-width: 768px){.h3{font-size:20px !important}}.h4{font-size:16px !important}.h5{font-size:14px !important}.h6{font-size:12px !important}.h1,.h2,.h3,.h4,.h5,.h6{font-weight:600 !important}.f1{font-size:26px !important}@media (min-width: 768px){.f1{font-size:32px !important}}.f2{font-size:22px !important}@media (min-width: 768px){.f2{font-size:24px !important}}.f3{font-size:18px !important}@media (min-width: 768px){.f3{font-size:20px !important}}.f4{font-size:16px !important}@media (min-width: 768px){.f4{font-size:16px !important}}.f5{font-size:14px !important}.f6{font-size:12px !important}.f00-light{font-size:40px !important;font-weight:300 !important}@media (min-width: 768px){.f00-light{font-size:48px !important}}.f0-light{font-size:32px !important;font-weight:300 !important}@media (min-width: 768px){.f0-light{font-size:40px !important}}.f1-light{font-size:26px !important;font-weight:300 !important}@media (min-width: 768px){.f1-light{font-size:32px !important}}.f2-light{font-size:22px !important;font-weight:300 !important}@media (min-width: 768px){.f2-light{font-size:24px !important}}.f3-light{font-size:18px !important;font-weight:300 !important}@media (min-width: 768px){.f3-light{font-size:20px !important}}.text-small{font-size:12px !important}.lead{margin-bottom:30px;font-size:20px;font-weight:300;color:#586069}.lh-condensed-ultra{line-height:1 !important}.lh-condensed{line-height:1.25 !important}.lh-default{line-height:1.5 !important}.lh-0{line-height:0 !important}.text-right{text-align:right !important}.text-left{text-align:left !important}.text-center{text-align:center !important}@media (min-width: 544px){.text-sm-right{text-align:right !important}.text-sm-left{text-align:left !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.text-md-right{text-align:right !important}.text-md-left{text-align:left !important}.text-md-center{text-align:center !important}}@media (min-width: 1012px){.text-lg-right{text-align:right !important}.text-lg-left{text-align:left !important}.text-lg-center{text-align:center !important}}@media (min-width: 1280px){.text-xl-right{text-align:right !important}.text-xl-left{text-align:left !important}.text-xl-center{text-align:center !important}}.text-normal{font-weight:400 !important}.text-bold{font-weight:600 !important}.text-italic{font-style:italic !important}.text-uppercase{text-transform:uppercase !important}.text-underline{text-decoration:underline !important}.no-underline{text-decoration:none !important}.no-wrap{white-space:nowrap !important}.ws-normal{white-space:normal !important}.wb-break-all{word-break:break-all !important}.text-emphasized{font-weight:600;color:#24292e}.list-style-none{list-style:none !important}.text-shadow-dark{text-shadow:0 1px 1px rgba(27,31,35,0.25),0 1px 25px rgba(27,31,35,0.75)}.text-shadow-light{text-shadow:0 1px 0 rgba(255,255,255,0.5)}.text-mono{font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace}.user-select-none{user-select:none !important}.d-block{display:block !important}.d-flex{display:flex !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.d-table{display:table !important}.d-table-cell{display:table-cell !important}@media (min-width: 544px){.d-sm-block{display:block !important}.d-sm-flex{display:flex !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.d-sm-table{display:table !important}.d-sm-table-cell{display:table-cell !important}}@media (min-width: 768px){.d-md-block{display:block !important}.d-md-flex{display:flex !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.d-md-table{display:table !important}.d-md-table-cell{display:table-cell !important}}@media (min-width: 1012px){.d-lg-block{display:block !important}.d-lg-flex{display:flex !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.d-lg-table{display:table !important}.d-lg-table-cell{display:table-cell !important}}@media (min-width: 1280px){.d-xl-block{display:block !important}.d-xl-flex{display:flex !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.d-xl-table{display:table !important}.d-xl-table-cell{display:table-cell !important}}.v-hidden{visibility:hidden !important}.v-visible{visibility:visible !important}@media (max-width: 544px){.hide-sm{display:none !important}}@media (min-width: 544px) and (max-width: 768px){.hide-md{display:none !important}}@media (min-width: 768px) and (max-width: 1012px){.hide-lg{display:none !important}}@media (min-width: 1012px){.hide-xl{display:none !important}}.table-fixed{table-layout:fixed !important}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);word-wrap:normal;border:0}.show-on-focus{position:absolute;width:1px;height:1px;margin:0;overflow:hidden;clip:rect(1px, 1px, 1px, 1px)}.show-on-focus:focus{z-index:20;width:auto;height:auto;clip:auto}.container{width:980px;margin-right:auto;margin-left:auto}.container::before{display:table;content:""}.container::after{display:table;clear:both;content:""}.container-md{max-width:768px;margin-right:auto;margin-left:auto}.container-lg{max-width:1012px;margin-right:auto;margin-left:auto}.container-xl{max-width:1280px;margin-right:auto;margin-left:auto}.columns{margin-right:-10px;margin-left:-10px}.columns::before{display:table;content:""}.columns::after{display:table;clear:both;content:""}.column{float:left;padding-right:10px;padding-left:10px}.one-third{width:33.333333%}.two-thirds{width:66.666667%}.one-fourth{width:25%}.one-half{width:50%}.three-fourths{width:75%}.one-fifth{width:20%}.four-fifths{width:80%}.centered{display:block;float:none;margin-right:auto;margin-left:auto}.col-1{width:8.3333333333%}.col-2{width:16.6666666667%}.col-3{width:25%}.col-4{width:33.3333333333%}.col-5{width:41.6666666667%}.col-6{width:50%}.col-7{width:58.3333333333%}.col-8{width:66.6666666667%}.col-9{width:75%}.col-10{width:83.3333333333%}.col-11{width:91.6666666667%}.col-12{width:100%}@media (min-width: 544px){.col-sm-1{width:8.3333333333%}.col-sm-2{width:16.6666666667%}.col-sm-3{width:25%}.col-sm-4{width:33.3333333333%}.col-sm-5{width:41.6666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.3333333333%}.col-sm-8{width:66.6666666667%}.col-sm-9{width:75%}.col-sm-10{width:83.3333333333%}.col-sm-11{width:91.6666666667%}.col-sm-12{width:100%}}@media (min-width: 768px){.col-md-1{width:8.3333333333%}.col-md-2{width:16.6666666667%}.col-md-3{width:25%}.col-md-4{width:33.3333333333%}.col-md-5{width:41.6666666667%}.col-md-6{width:50%}.col-md-7{width:58.3333333333%}.col-md-8{width:66.6666666667%}.col-md-9{width:75%}.col-md-10{width:83.3333333333%}.col-md-11{width:91.6666666667%}.col-md-12{width:100%}}@media (min-width: 1012px){.col-lg-1{width:8.3333333333%}.col-lg-2{width:16.6666666667%}.col-lg-3{width:25%}.col-lg-4{width:33.3333333333%}.col-lg-5{width:41.6666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.3333333333%}.col-lg-8{width:66.6666666667%}.col-lg-9{width:75%}.col-lg-10{width:83.3333333333%}.col-lg-11{width:91.6666666667%}.col-lg-12{width:100%}}@media (min-width: 1280px){.col-xl-1{width:8.3333333333%}.col-xl-2{width:16.6666666667%}.col-xl-3{width:25%}.col-xl-4{width:33.3333333333%}.col-xl-5{width:41.6666666667%}.col-xl-6{width:50%}.col-xl-7{width:58.3333333333%}.col-xl-8{width:66.6666666667%}.col-xl-9{width:75%}.col-xl-10{width:83.3333333333%}.col-xl-11{width:91.6666666667%}.col-xl-12{width:100%}}.gutter{margin-right:-16px;margin-left:-16px}.gutter>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-condensed{margin-right:-8px;margin-left:-8px}.gutter-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-spacious{margin-right:-24px;margin-left:-24px}.gutter-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}@media (min-width: 544px){.gutter-sm{margin-right:-16px;margin-left:-16px}.gutter-sm>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-sm-condensed{margin-right:-8px;margin-left:-8px}.gutter-sm-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-sm-spacious{margin-right:-24px;margin-left:-24px}.gutter-sm-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}@media (min-width: 768px){.gutter-md{margin-right:-16px;margin-left:-16px}.gutter-md>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-md-condensed{margin-right:-8px;margin-left:-8px}.gutter-md-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-md-spacious{margin-right:-24px;margin-left:-24px}.gutter-md-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}@media (min-width: 1012px){.gutter-lg{margin-right:-16px;margin-left:-16px}.gutter-lg>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-lg-condensed{margin-right:-8px;margin-left:-8px}.gutter-lg-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-lg-spacious{margin-right:-24px;margin-left:-24px}.gutter-lg-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}@media (min-width: 1280px){.gutter-xl{margin-right:-16px;margin-left:-16px}.gutter-xl>[class*="col-"]{padding-right:16px !important;padding-left:16px !important}.gutter-xl-condensed{margin-right:-8px;margin-left:-8px}.gutter-xl-condensed>[class*="col-"]{padding-right:8px !important;padding-left:8px !important}.gutter-xl-spacious{margin-right:-24px;margin-left:-24px}.gutter-xl-spacious>[class*="col-"]{padding-right:24px !important;padding-left:24px !important}}.offset-1{margin-left:8.3333333333% !important}.offset-2{margin-left:16.6666666667% !important}.offset-3{margin-left:25% !important}.offset-4{margin-left:33.3333333333% !important}.offset-5{margin-left:41.6666666667% !important}.offset-6{margin-left:50% !important}.offset-7{margin-left:58.3333333333% !important}.offset-8{margin-left:66.6666666667% !important}.offset-9{margin-left:75% !important}.offset-10{margin-left:83.3333333333% !important}.offset-11{margin-left:91.6666666667% !important}@media (min-width: 544px){.offset-sm-1{margin-left:8.3333333333% !important}.offset-sm-2{margin-left:16.6666666667% !important}.offset-sm-3{margin-left:25% !important}.offset-sm-4{margin-left:33.3333333333% !important}.offset-sm-5{margin-left:41.6666666667% !important}.offset-sm-6{margin-left:50% !important}.offset-sm-7{margin-left:58.3333333333% !important}.offset-sm-8{margin-left:66.6666666667% !important}.offset-sm-9{margin-left:75% !important}.offset-sm-10{margin-left:83.3333333333% !important}.offset-sm-11{margin-left:91.6666666667% !important}}@media (min-width: 768px){.offset-md-1{margin-left:8.3333333333% !important}.offset-md-2{margin-left:16.6666666667% !important}.offset-md-3{margin-left:25% !important}.offset-md-4{margin-left:33.3333333333% !important}.offset-md-5{margin-left:41.6666666667% !important}.offset-md-6{margin-left:50% !important}.offset-md-7{margin-left:58.3333333333% !important}.offset-md-8{margin-left:66.6666666667% !important}.offset-md-9{margin-left:75% !important}.offset-md-10{margin-left:83.3333333333% !important}.offset-md-11{margin-left:91.6666666667% !important}}@media (min-width: 1012px){.offset-lg-1{margin-left:8.3333333333% !important}.offset-lg-2{margin-left:16.6666666667% !important}.offset-lg-3{margin-left:25% !important}.offset-lg-4{margin-left:33.3333333333% !important}.offset-lg-5{margin-left:41.6666666667% !important}.offset-lg-6{margin-left:50% !important}.offset-lg-7{margin-left:58.3333333333% !important}.offset-lg-8{margin-left:66.6666666667% !important}.offset-lg-9{margin-left:75% !important}.offset-lg-10{margin-left:83.3333333333% !important}.offset-lg-11{margin-left:91.6666666667% !important}}@media (min-width: 1280px){.offset-xl-1{margin-left:8.3333333333% !important}.offset-xl-2{margin-left:16.6666666667% !important}.offset-xl-3{margin-left:25% !important}.offset-xl-4{margin-left:33.3333333333% !important}.offset-xl-5{margin-left:41.6666666667% !important}.offset-xl-6{margin-left:50% !important}.offset-xl-7{margin-left:58.3333333333% !important}.offset-xl-8{margin-left:66.6666666667% !important}.offset-xl-9{margin-left:75% !important}.offset-xl-10{margin-left:83.3333333333% !important}.offset-xl-11{margin-left:91.6666666667% !important}}.markdown-body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:16px;line-height:1.5;word-wrap:break-word}.markdown-body::before{display:table;content:""}.markdown-body::after{display:table;clear:both;content:""}.markdown-body>*:first-child{margin-top:0 !important}.markdown-body>*:last-child{margin-bottom:0 !important}.markdown-body a:not([href]){color:inherit;text-decoration:none}.markdown-body .absent{color:#cb2431}.markdown-body .anchor{float:left;padding-right:4px;margin-left:-20px;line-height:1}.markdown-body .anchor:focus{outline:none}.markdown-body p,.markdown-body blockquote,.markdown-body ul,.markdown-body ol,.markdown-body dl,.markdown-body table,.markdown-body pre{margin-top:0;margin-bottom:16px}.markdown-body hr{height:.25em;padding:0;margin:24px 0;background-color:#e1e4e8;border:0}.markdown-body blockquote{padding:0 1em;color:#6a737d;border-left:0.25em solid #dfe2e5}.markdown-body blockquote>:first-child{margin-top:0}.markdown-body blockquote>:last-child{margin-bottom:0}.markdown-body kbd{display:inline-block;padding:3px 5px;font-size:11px;line-height:10px;color:#444d56;vertical-align:middle;background-color:#fafbfc;border:solid 1px #c6cbd1;border-bottom-color:#959da5;border-radius:3px;box-shadow:inset 0 -1px 0 #959da5}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4,.markdown-body h5,.markdown-body h6{margin-top:24px;margin-bottom:16px;font-weight:600;line-height:1.25}.markdown-body h1 .octicon-link,.markdown-body h2 .octicon-link,.markdown-body h3 .octicon-link,.markdown-body h4 .octicon-link,.markdown-body h5 .octicon-link,.markdown-body h6 .octicon-link{color:#1b1f23;vertical-align:middle;visibility:hidden}.markdown-body h1:hover .anchor,.markdown-body h2:hover .anchor,.markdown-body h3:hover .anchor,.markdown-body h4:hover .anchor,.markdown-body h5:hover .anchor,.markdown-body h6:hover .anchor{text-decoration:none}.markdown-body h1:hover .anchor .octicon-link,.markdown-body h2:hover .anchor .octicon-link,.markdown-body h3:hover .anchor .octicon-link,.markdown-body h4:hover .anchor .octicon-link,.markdown-body h5:hover .anchor .octicon-link,.markdown-body h6:hover .anchor .octicon-link{visibility:visible}.markdown-body h1 tt,.markdown-body h1 code,.markdown-body h2 tt,.markdown-body h2 code,.markdown-body h3 tt,.markdown-body h3 code,.markdown-body h4 tt,.markdown-body h4 code,.markdown-body h5 tt,.markdown-body h5 code,.markdown-body h6 tt,.markdown-body h6 code{font-size:inherit}.markdown-body h1{padding-bottom:0.3em;font-size:2em;border-bottom:1px solid #eaecef}.markdown-body h2{padding-bottom:0.3em;font-size:1.5em;border-bottom:1px solid #eaecef}.markdown-body h3{font-size:1.25em}.markdown-body h4{font-size:1em}.markdown-body h5{font-size:0.875em}.markdown-body h6{font-size:0.85em;color:#6a737d}.markdown-body ul,.markdown-body ol{padding-left:2em}.markdown-body ul.no-list,.markdown-body ol.no-list{padding:0;list-style-type:none}.markdown-body ul ul,.markdown-body ul ol,.markdown-body ol ol,.markdown-body ol ul{margin-top:0;margin-bottom:0}.markdown-body li{word-wrap:break-all}.markdown-body li>p{margin-top:16px}.markdown-body li+li{margin-top:.25em}.markdown-body dl{padding:0}.markdown-body dl dt{padding:0;margin-top:16px;font-size:1em;font-style:italic;font-weight:600}.markdown-body dl dd{padding:0 16px;margin-bottom:16px}.markdown-body table{display:block;width:100%;overflow:auto}.markdown-body table th{font-weight:600}.markdown-body table th,.markdown-body table td{padding:6px 13px;border:1px solid #dfe2e5}.markdown-body table tr{background-color:#fff;border-top:1px solid #c6cbd1}.markdown-body table tr:nth-child(2n){background-color:#f6f8fa}.markdown-body table img{background-color:transparent}.markdown-body img{max-width:100%;box-sizing:content-box;background-color:#fff}.markdown-body img[align=right]{padding-left:20px}.markdown-body img[align=left]{padding-right:20px}.markdown-body .emoji{max-width:none;vertical-align:text-top;background-color:transparent}.markdown-body span.frame{display:block;overflow:hidden}.markdown-body span.frame>span{display:block;float:left;width:auto;padding:7px;margin:13px 0 0;overflow:hidden;border:1px solid #dfe2e5}.markdown-body span.frame span img{display:block;float:left}.markdown-body span.frame span span{display:block;padding:5px 0 0;clear:both;color:#24292e}.markdown-body span.align-center{display:block;overflow:hidden;clear:both}.markdown-body span.align-center>span{display:block;margin:13px auto 0;overflow:hidden;text-align:center}.markdown-body span.align-center span img{margin:0 auto;text-align:center}.markdown-body span.align-right{display:block;overflow:hidden;clear:both}.markdown-body span.align-right>span{display:block;margin:13px 0 0;overflow:hidden;text-align:right}.markdown-body span.align-right span img{margin:0;text-align:right}.markdown-body span.float-left{display:block;float:left;margin-right:13px;overflow:hidden}.markdown-body span.float-left span{margin:13px 0 0}.markdown-body span.float-right{display:block;float:right;margin-left:13px;overflow:hidden}.markdown-body span.float-right>span{display:block;margin:13px auto 0;overflow:hidden;text-align:right}.markdown-body code,.markdown-body tt{padding:0.2em 0.4em;margin:0;font-size:85%;background-color:rgba(27,31,35,0.05);border-radius:3px}.markdown-body code br,.markdown-body tt br{display:none}.markdown-body del code{text-decoration:inherit}.markdown-body pre{word-wrap:normal}.markdown-body pre>code{padding:0;margin:0;font-size:100%;word-break:normal;white-space:pre;background:transparent;border:0}.markdown-body .highlight{margin-bottom:16px}.markdown-body .highlight pre{margin-bottom:0;word-break:normal}.markdown-body .highlight pre,.markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;background-color:#f6f8fa;border-radius:3px}.markdown-body pre code,.markdown-body pre tt{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;background-color:transparent;border:0}.markdown-body .csv-data td,.markdown-body .csv-data th{padding:5px;overflow:hidden;font-size:12px;line-height:1;text-align:left;white-space:nowrap}.markdown-body .csv-data .blob-num{padding:10px 8px 9px;text-align:right;background:#fff;border:0}.markdown-body .csv-data tr{border-top:0}.markdown-body .csv-data th{font-weight:600;background:#f6f8fa;border-top:0}.highlight table td{padding:5px}.highlight table pre{margin:0}.highlight .cm{color:#999988;font-style:italic}.highlight .cp{color:#999999;font-weight:bold}.highlight .c1{color:#999988;font-style:italic}.highlight .cs{color:#999999;font-weight:bold;font-style:italic}.highlight .c,.highlight .cd{color:#999988;font-style:italic}.highlight .err{color:#a61717;background-color:#e3d2d2}.highlight .gd{color:#000000;background-color:#ffdddd}.highlight .ge{color:#000000;font-style:italic}.highlight .gr{color:#aa0000}.highlight .gh{color:#999999}.highlight .gi{color:#000000;background-color:#ddffdd}.highlight .go{color:#888888}.highlight .gp{color:#555555}.highlight .gs{font-weight:bold}.highlight .gu{color:#aaaaaa}.highlight .gt{color:#aa0000}.highlight .kc{color:#000000;font-weight:bold}.highlight .kd{color:#000000;font-weight:bold}.highlight .kn{color:#000000;font-weight:bold}.highlight .kp{color:#000000;font-weight:bold}.highlight .kr{color:#000000;font-weight:bold}.highlight .kt{color:#445588;font-weight:bold}.highlight .k,.highlight .kv{color:#000000;font-weight:bold}.highlight .mf{color:#009999}.highlight .mh{color:#009999}.highlight .il{color:#009999}.highlight .mi{color:#009999}.highlight .mo{color:#009999}.highlight .m,.highlight .mb,.highlight .mx{color:#009999}.highlight .sb{color:#d14}.highlight .sc{color:#d14}.highlight .sd{color:#d14}.highlight .s2{color:#d14}.highlight .se{color:#d14}.highlight .sh{color:#d14}.highlight .si{color:#d14}.highlight .sx{color:#d14}.highlight .sr{color:#009926}.highlight .s1{color:#d14}.highlight .ss{color:#990073}.highlight .s{color:#d14}.highlight .na{color:#008080}.highlight .bp{color:#999999}.highlight .nb{color:#0086B3}.highlight .nc{color:#445588;font-weight:bold}.highlight .no{color:#008080}.highlight .nd{color:#3c5d5d;font-weight:bold}.highlight .ni{color:#800080}.highlight .ne{color:#990000;font-weight:bold}.highlight .nf{color:#990000;font-weight:bold}.highlight .nl{color:#990000;font-weight:bold}.highlight .nn{color:#555555}.highlight .nt{color:#000080}.highlight .vc{color:#008080}.highlight .vg{color:#008080}.highlight .vi{color:#008080}.highlight .nv{color:#008080}.highlight .ow{color:#000000;font-weight:bold}.highlight .o{color:#000000;font-weight:bold}.highlight .w{color:#bbbbbb}.highlight{background-color:#f8f8f8} diff --git a/contributing/index.html b/contributing/index.html new file mode 100644 index 00000000..4702cbcd --- /dev/null +++ b/contributing/index.html @@ -0,0 +1,142 @@ + + + + Albert - Contributing + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Contributing

+
    +
  • Spread the word and leave a star Stars
  • +
  • Join the community and help other users.
  • +
  • Create and/or maintain official plugins.
  • +
  • Use the application and report issues.
  • +
  • Check the issues and try to help debugging.
  • +
  • Improve the documentation (Link on top of the pages).
  • +
  • Support me as a creator by becoming a sponsor or donating some bucks.
  • +
+ + +
+
+
+
+ + + +
+ + diff --git a/css/main.css b/css/main.css new file mode 100644 index 00000000..f1f9fc97 --- /dev/null +++ b/css/main.css @@ -0,0 +1 @@ +html{box-sizing:border-box;font-size:62.5%}body{color:#606c76;font-family:'Roboto', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;font-size:1.6em;line-height:1.6;font-weight:300;text-shadow:0 1px 3px rgba(0,0,0,0.15);overflow-y:scroll;margin:0px}*,*:after,*:before{box-sizing:inherit}blockquote{border-left:0.3rem solid #d1d1d1;margin-left:0;margin-right:0;padding:1rem 1.5rem}blockquote *:last-child{margin:0}.button,button,input[type='button'],input[type='reset'],input[type='submit']{background-color:#0cc;border:0.1rem solid #0cc;border-radius:.4rem;color:#fff;cursor:pointer;display:inline-block;font-size:1.1rem;font-weight:700;height:3.8rem;letter-spacing:.1rem;line-height:3.8rem;padding:0 3.0rem;text-align:center;text-decoration:none;text-transform:uppercase;white-space:nowrap}.button:focus,.button:hover,button:focus,button:hover,input[type='button']:focus,input[type='button']:hover,input[type='reset']:focus,input[type='reset']:hover,input[type='submit']:focus,input[type='submit']:hover{background-color:#606c76;border-color:#606c76;color:#fff;outline:0}.button.button-disabled,.button[disabled],button.button-disabled,button[disabled],input[type='button'].button-disabled,input[type='button'][disabled],input[type='reset'].button-disabled,input[type='reset'][disabled],input[type='submit'].button-disabled,input[type='submit'][disabled]{cursor:default;opacity:.5}.button.button-disabled:focus,.button.button-disabled:hover,.button[disabled]:focus,.button[disabled]:hover,button.button-disabled:focus,button.button-disabled:hover,button[disabled]:focus,button[disabled]:hover,input[type='button'].button-disabled:focus,input[type='button'].button-disabled:hover,input[type='button'][disabled]:focus,input[type='button'][disabled]:hover,input[type='reset'].button-disabled:focus,input[type='reset'].button-disabled:hover,input[type='reset'][disabled]:focus,input[type='reset'][disabled]:hover,input[type='submit'].button-disabled:focus,input[type='submit'].button-disabled:hover,input[type='submit'][disabled]:focus,input[type='submit'][disabled]:hover{background-color:#0cc;border-color:#0cc}.button.button-outline,button.button-outline,input[type='button'].button-outline,input[type='reset'].button-outline,input[type='submit'].button-outline{background-color:transparent;color:#0cc}.button.button-outline:focus,.button.button-outline:hover,button.button-outline:focus,button.button-outline:hover,input[type='button'].button-outline:focus,input[type='button'].button-outline:hover,input[type='reset'].button-outline:focus,input[type='reset'].button-outline:hover,input[type='submit'].button-outline:focus,input[type='submit'].button-outline:hover{background-color:transparent;border-color:#606c76;color:#606c76}.button.button-outline.button-disabled:focus,.button.button-outline.button-disabled:hover,.button.button-outline[disabled]:focus,.button.button-outline[disabled]:hover,button.button-outline.button-disabled:focus,button.button-outline.button-disabled:hover,button.button-outline[disabled]:focus,button.button-outline[disabled]:hover,input[type='button'].button-outline.button-disabled:focus,input[type='button'].button-outline.button-disabled:hover,input[type='button'].button-outline[disabled]:focus,input[type='button'].button-outline[disabled]:hover,input[type='reset'].button-outline.button-disabled:focus,input[type='reset'].button-outline.button-disabled:hover,input[type='reset'].button-outline[disabled]:focus,input[type='reset'].button-outline[disabled]:hover,input[type='submit'].button-outline.button-disabled:focus,input[type='submit'].button-outline.button-disabled:hover,input[type='submit'].button-outline[disabled]:focus,input[type='submit'].button-outline[disabled]:hover{border-color:inherit;color:#0cc}.button.button-clear,button.button-clear,input[type='button'].button-clear,input[type='reset'].button-clear,input[type='submit'].button-clear{background-color:transparent;border-color:transparent;color:#0cc}.button.button-clear:focus,.button.button-clear:hover,button.button-clear:focus,button.button-clear:hover,input[type='button'].button-clear:focus,input[type='button'].button-clear:hover,input[type='reset'].button-clear:focus,input[type='reset'].button-clear:hover,input[type='submit'].button-clear:focus,input[type='submit'].button-clear:hover{background-color:transparent;border-color:transparent;color:#606c76}.button.button-clear.button-disabled:focus,.button.button-clear.button-disabled:hover,.button.button-clear[disabled]:focus,.button.button-clear[disabled]:hover,button.button-clear.button-disabled:focus,button.button-clear.button-disabled:hover,button.button-clear[disabled]:focus,button.button-clear[disabled]:hover,input[type='button'].button-clear.button-disabled:focus,input[type='button'].button-clear.button-disabled:hover,input[type='button'].button-clear[disabled]:focus,input[type='button'].button-clear[disabled]:hover,input[type='reset'].button-clear.button-disabled:focus,input[type='reset'].button-clear.button-disabled:hover,input[type='reset'].button-clear[disabled]:focus,input[type='reset'].button-clear[disabled]:hover,input[type='submit'].button-clear.button-disabled:focus,input[type='submit'].button-clear.button-disabled:hover,input[type='submit'].button-clear[disabled]:focus,input[type='submit'].button-clear[disabled]:hover{color:#0cc}code{background:#f4f5f6;border-radius:.4rem;font-size:86%;margin:0 .2rem;padding:.2rem .5rem;white-space:nowrap}pre{background:#f4f5f6;border-left:0.3rem solid #0cc;font-family:'Menlo', 'Consolas', 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', 'Monaco', monospace}pre>code{background:transparent;border-radius:0;display:block;padding:1rem 1.5rem;white-space:pre;overflow:auto}hr{border:0;border-top:0.1rem solid #f4f5f6;margin-bottom:3.5rem;margin-top:3.0rem}input[type='email'],input[type='number'],input[type='password'],input[type='search'],input[type='tel'],input[type='text'],input[type='url'],textarea,select{appearance:none;background-color:transparent;border:0.1rem solid #d1d1d1;border-radius:.4rem;box-shadow:none;height:3.8rem;padding:.6rem 1.0rem;width:100%}input[type='email']:focus,input[type='number']:focus,input[type='password']:focus,input[type='search']:focus,input[type='tel']:focus,input[type='text']:focus,input[type='url']:focus,textarea:focus,select:focus{border:0.1rem solid #0cc;outline:0}select{background:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyOSAxNCIgd2lkdGg9IjI5Ij48cGF0aCBmaWxsPSIjZDFkMWQxIiBkPSJNOS40IDMuNmw1IDcgNS4yLTciLz48L3N2Zz4=) center right no-repeat;padding:.6rem 3rem .6rem 1rem}select:focus{background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyOSAxNCIgd2lkdGg9IjI5Ij48cGF0aCBmaWxsPSIjOWI0ZGNmIiBkPSJNMTkuNiAzLjZIOS40bDUgNyIvPjwvc3ZnPg==)}textarea{min-height:6.5rem;padding-bottom:.6rem;padding-top:.6rem}label,legend{display:block;font-size:1.6rem;font-weight:700;margin-bottom:.5rem}fieldset{border-width:0;padding:0}input[type='checkbox'],input[type='radio']{display:inline}.label-inline{display:inline-block;font-weight:normal;margin-left:.5rem}.container{margin:0 auto;max-width:112.0rem;padding:0 2.0rem;position:relative;width:100%}.row{display:flex;flex-direction:column;padding:0;width:100%}.row.row-no-padding{padding:0}.row.row-no-padding>.column{padding:0}.row.row-wrap{flex-wrap:wrap}.row.row-top{align-items:flex-start}.row.row-bottom{align-items:flex-end}.row.row-center{align-items:center}.row.row-stretch{align-items:stretch}.row.row-baseline{align-items:baseline}.row .column{display:block;flex:1;margin-left:0;max-width:100%;width:100%}.row .column .col-top{align-self:flex-start}.row .column .col-bottom{align-self:flex-end}.row .column .col-center{align-self:center}.row .column.column-offset-10{margin-left:10%}.row .column.column-offset-20{margin-left:20%}.row .column.column-offset-25{margin-left:25%}.row .column.column-offset-33,.row .column.column-offset-34{margin-left:33.3333%}.row .column.column-offset-50{margin-left:50%}.row .column.column-offset-66,.row .column.column-offset-67{margin-left:66.6666%}.row .column.column-offset-75{margin-left:75%}.row .column.column-offset-80{margin-left:80%}.row .column.column-offset-90{margin-left:90%}.row .column.column-10{flex:0 0 10%;max-width:10%}.row .column.column-20{flex:0 0 20%;max-width:20%}.row .column.column-25{flex:0 0 25%;max-width:25%}.row .column.column-33,.row .column.column-34{flex:0 0 33.3333%;max-width:33.3333%}.row .column.column-40{flex:0 0 40%;max-width:40%}.row .column.column-50{flex:0 0 50%;max-width:50%}.row .column.column-60{flex:0 0 60%;max-width:60%}.row .column.column-66,.row .column.column-67{flex:0 0 66.6666%;max-width:66.6666%}.row .column.column-75{flex:0 0 75%;max-width:75%}.row .column.column-80{flex:0 0 80%;max-width:80%}.row .column.column-90{flex:0 0 90%;max-width:90%}@media (min-width: 40rem){.row{flex-direction:row;margin-left:-1.0rem;width:calc(100% + 2.0rem)}.row .column{margin-bottom:inherit;padding:0 1.0rem}}a{color:#0cc;text-decoration:none}a:hover{color:#606c76}dl,ol,ul{margin-top:0;padding-left:2rem}dl dl,dl ul,dl ol,ol dl,ol ul,ol ol,ul dl,ul ul,ul ol{font-size:90%;margin:1.5rem 0 1.5rem 3.0rem}dl{list-style:none}ul{list-style:square}ol{list-style:decimal}.button,button{margin-bottom:1.0rem}input,textarea,select,fieldset{margin-bottom:1.5rem}pre,blockquote,dl,figure,table,p,ul,ol,form{margin-bottom:2.5rem}table{width:100%}th,td{border-bottom:.1rem solid #e1e1e1;padding:1.2rem 1.5rem;text-align:left}th:first-child,td:first-child{padding-left:0}th:last-child,td:last-child{padding-right:0}p{margin-top:0}h1,h2,h3,h4,h5,h6{font-weight:300;margin-bottom:2.0rem;margin-top:0}h1{font-size:2.2rem;letter-spacing:-.1rem;line-height:1.2}h2{font-size:2.0rem;letter-spacing:-.1rem;line-height:1.25}h3{font-size:1.9rem;letter-spacing:-.1rem;line-height:1.3}h4{font-size:1.8rem;letter-spacing:-.08rem;line-height:1.35}h5{font-size:1.7rem;letter-spacing:-.05rem;line-height:1.5}h6{font-size:1.6rem;letter-spacing:0;line-height:1.4}@media (min-width: 40rem){h1{font-size:3.0rem}h2{font-size:2.6rem}h3{font-size:2.4rem}h4{font-size:2.2rem}h5{font-size:2.0rem}h6{font-size:1.8rem}}img{max-width:100%}.float-right{float:right}.float-left{float:left}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{content:'';display:table}.clearfix:after{clear:both}@font-face{font-family:"Gotham Rounded A";font-style:normal;font-weight:300;src:url(data:application/x-font-woff;base64,d09GRk9UVE8AADBKAA0AAAAAVSgAAQAAAAAuJAAAAiYAAAaMAAAAAAAAAABDRkYgAAAJSAAAHCQAACTauQ+mFEdERUYAACVsAAAAHQAAACAAkAAER1BPUwAAJYwAAAb3AAAcArhEootHU1VCAAAshAAAAFoAAACA6cUtSE9TLzIAAAGMAAAATwAAAGBVxiUrY21hcAAABmQAAALOAAAEmNFOLlRnYXNwAAAs4AAAAAgAAAAIAAAAC2hlYWQAAAEwAAAANAAAADYDcke+aGhlYQAAAWQAAAAgAAAAJAe+A6pobXR4AAAs6AAAATkAAAGM1uIY+21heHAAAAGEAAAABgAAAAYAY1AAbmFtZQAAAdwAAASHAAALuyg1MwRwb3N0AAAJNAAAABMAAAAg/7gAMnjaY2BkYGBgZHDs97b+Gc9v85WBm/kFUIThgg6TPIz+/+K/BYswsxKQy8HABBIFADpACoV42mNgZGBgPvBfgIGBxe//i/8vWIQZgCIoIBkAl34GbwAAUAAAYwAAeNpjYGLSYdRhYGVgYdrD1MXAwNADoRnvMhgx/GJAAgsYGOoDGBi8YHwPNed8IKX8QIhZ4b8FwwnmAwwfgHxukBzjP6Y9DApAyAQAs6gPXgB42rVUTW/bRhAdWXL8kTiIfUxRYNsGRtJKsqgotpNTUQOOc6xjpMhxRa5E2iKXWC6tCMihtx6Kotce+id66Q/on+ivKdC3w1VMxYnqAq0IaR9nZ/a9NzsQET1o/E4Nqj5f41vhBn2Btwqv0BqFHjfpMzr3uFXLWaUt+tHjW9j5xeM1kvSrx+vI+cvjjRreXNlubHp8m3aan3h8p4a3ajl36ctmx+N7NQ3bNbzDuEmN1gbevm9+53GDjpt/erxCd1ufetykb1pfedyq5azS/Vbq8S1ab/3g8Rr90frZ43W6v/qtxxs1vNn6fPXC49v0YOMnj+/U8FYt5y6dbfzm8b2ahu0a3nH4SOczk4xjKx4ePRL9Xm+/7X4PxIlWo4kyYlcc6a6Irc2f7e1Np9OuneV6bGQez7qhThfrT3aPtHgrFlNO1bicSBMcBP3BQefwcHAw6PR7wZPefv9xpz/ATzDo9YOnr5QpEp2JoIvdY53Z59rGMhWnuswiFYmkEFJYIyOVSnMh9GhRY1tM4ySMRSpnYqiEUeOksMq4wkyEyliJ9bw0SREloQVR0V2oP4tBUOiRnUqjHJmNlciNzlE6u8YmXuuSqTJtRYgmtEWqo2SENQKvSYalVW2hjYj0NJtoGeG8GgFvJVlh5WQiEivKHM5lNsNZaY5SwwmxLqzbHRmd8u5Eh9JpZ34jqs5bLcpCLZ7vDBTl8FyFvO+8nCmTFs7IS2Uuk1AJOTZKpSpDRiytUG8gvEDv7FSpTMxgUGbRe7ZfjOAYJ6PRV+VVZZtL5j25rmgEQ85DXppcF6orjhFItdOaYS9lY22RT5RE7WVSwPhH525vqoYjzEhnoaEhIhKOFzXD2/UDxD/O4/Wam6uhI9KU04wMJTSmmCwJeojoI6x96uHZp/Y7fAB0ggpFI5rg1+B9F193Sherq7c47xnt4Zny00VkhpjG+QZ/jTmyZoiGiKRL+U9wttsX9BbfZaecQsuYSmiS2A2gM4DiAdYOHeJxaADsXAT0hF316TFHBh4FQD3ggJ7SK/ZWQJOmDNwBmKraY45Yeo7VQoMEuwC/BntGEeoivCeoFdhzqp1aF09Z2wViGt1b1kfX7ynOTuAuBnaVM6xDZArkOq+OwXLlnNHpDDlikV+9n0OV4dyIT7PeUQGWj/OfMbdzULBWCzWSmebOnHP3liPq7q9ind3Am6DX3KsrVxl3UvBNuklo855mxSP/Hnm/zssQ1c55m9kM72oozMCmudeVvg87uKpKuA+uVxM87t2pKHnGMr69jPVVE5Z7VlM7IcZacFVVO+JupLVapyjE27zvV/4N3+TVzFue8xLnqaX6xbt4iU6cIxLW6uf3csZKU86sbuQlRy55ChQrHPN5bi4VT7Tw8+yQoje+44WfO6dAcaaAs+oGJU/88tt+wewZq3Oaq4n+EHuds11jeX9ObtKjkb+h+T3k3PGc70uxrmOfkfKq/DxUdWntxtpc7ZxJz3vJrNWN//v/uz3u45CZnO/OkgkNfY70d7ysz9W93USB+A/+H2/C8z/05m+zvGomAHjalZNdSFRREMf/o6apaeZH6/qx3tV0q9Vs09x1bde0Tc00PzOz/KjwJSIqRBITJKLHHnqpngrDQpK+SKwkeskUNTMjKyK8PkSPUdE33encu+vmUhDNMOecmTPM/Z175gDwh9sSQFCXp4VHmh/g3y7mfnQjEOmQkIJMZMOKfLhQjHI0ohn7cBhtaEcHunARvbiCq7iOQQxhGCOYwWu8wTt8xlf8pCAKpwiKohjSkZ7iKYVMZKYMyiQLWamQXFREJVRFtVRH9dRATdRCrbSfDtBBOkRHqI06qJO66AexX6yh23DccMLwUYqW4iSDlCylSXap35gsRzILagnJSNVo7ShAEUpRIWj3oFWjPYpO9AjaPg/tXdwXtNN4ARlv8V6lBVOID61hAW0O5Xpoy3xo9/rQtmu030nx0n6QoqRYKUGjzZ2n5TmWeZZf8Ut+zjP8jJ/yND/hKX7Mj3iCx3mML3Ev9/AFPs/n+AzA1fAKF3GxNoewkZM4keNZL7wIDuNQDuYgdU/5pnxRPol5SplUJpRxZUQZFt49ZUi5owwqA8qA8G4o17TcsLm+uctzvYBcIDtlh2yXrXLq7K3ZfKnS3SH/JceEncQpnBX/+6YWuY1Rn4wHPuuHntW0T86UjzemjROY9EZG//rtGugWqHGBmjxqhmWBZol+cavNow44veoSNSxe04vseYsTbyXHawbRcUnI+8OMosa8pYmeVM0sqprF21IrqnHVBwXinz+a4OePgEWBQYuDQ0KXhIWrsaVABLAsMio6Zjl0sfo4xCcAiYYkCcbklBWpaaaVq1ab0zPWZGItLOvEadfnWG259rwNDmf+RgicQmxyYXOR6CedTjSR0WTRJCtbiE2Iw6mKBlBRsgW7gW1b96ieUR1K3WhlVYCzxr0ur24UpcRu7fadDXU7AJcZLU3NYqeyfpd2K5oYxZ2YTCbb7/P9Aoia7d8AAHjaY2BmAIP/WxmMGLAAACzCAeoAeNqdegl4FMXWdmfpmSLBYbNBifSwBQJBRECUJQKibBElwg37DhIWCWACCUlm7ememcpMT/esSVgMyCI7iuBlERVBhQtcURRRr4i7Iiog1bGG//tOT4KJz3//+z/PZebppLuqT506y3veUyGJSU1lkpKS2JGFy4r0X7K0lozWIUnjkzU+RWubOqV5yvN0+h9b6w6wJKtFsAPDdJ7emuxqxaTCS82fHP9E8crCgnmFzy8tXjiicHnpykULC4o6Zo3o0bFvnz4DeunXhzuOLlzw7NIFKzt26ziisHfHgqKi5YMeeGD16tW9i0qXFy5cOWd5QWnveYXPJVTQdWCSGCYliTEkMQUM08zIcAxzD8NksEznFKZ7EpOdwvQxMcMY5rFkZmRz5m8MM4lhpiQx05OZOUnMfIbZzjCYYRYzzGaGqWWYlQwjM0wJw5QxTCHDeBhmOMMghilmmEUMs5phVjEMLFzKMEuSkiSGqWKS3AwzLxnUeBSmPsPQpHHJqcnpydOTd6UMSlmdUpGyNmVjyiepmanzUlek2lLPpX7G9mJD7HXDVMN7xpbGx43HkAHNRgL6stnAZhVpd6eVpcXTs9IXpx9q/nDznc3JXUPvWnbX1rsu3nXLtMr09xadWjhafNZyQcttLU+1atZqbquKVt+2zmq9uvXhNu3brGjzxt0P3b2JQ1wm52n7YNs97Qa0++4e5z0X7p10r3xv5N5r7Ye1P9L+Uvu6jKQMlGHK6JCRnfFIxqSMRRkrM8ru63ffax1LKaLTUzX3H+Vxt+H8FI78gemoeHuWTo+P5nCdQIbFm7OkRGvO4dsCHaY1Zwuf5gjMoH9g1kT/aaJziV+bw3VMo8/SJfDD9AXp/CLnqVDL1+IYDod8MbSN5JB5uJAOYP+vx80wG4tEYjFb2GKmSXg/sRGmyaPueAvpy/qqhOo12ILtDo8FFdKBdN6/f5yGWYvNZrFE7DEzScZzqQ1ENj761XD8EKevME8fYk1kPnyuc53SxtEvOWvYEeWDWJEDKtLK6rJZv1wp4wCO2kNW7MQuSRRQvOx2NuuWvBIWkVawEt6MZ2mZXOc0rSf9A36YPq1r5uCqI5FqM45IAWcQ0SSSyu4+tP34tlM+uVLBflxli1TgCizYPeLKvMJJS2ch+iTJY2/t/cfb+AryGb944lyfzMdGPsh7jDjvxdlvjKeGOaNH4vuRx0gN3w0mLfgf8MWDZy6iG5RhVUERIxjRq9oAbtyZkl34IEg4dfTo+VOHp43TJYyZPLX7ErQ6nsZljzpz2ewz4nNH/kFS9iEyjy5m80aNnpODken9hP9M9Clyg5q5SDAYMeOgpAgyzf5pAOEweQS+lwlHsn9SZVnBQRxxBm1YxKLH40U0JyuLZkLUwPcazSQ5WT5vwBMAufSpSyAvgAM+XyXJuXaNZGIyCr5ZJJPmXPNUij4R27DTqV9klyohkp19mXKYPgLfAZSj2dmCJLnA/LagM5IQSCZpQzivNWSP4igOhb1R5CRJ345jFUn2KDgCj+ASEQKCH3U9cv0Iq/rVgP7EEbZhF5Y8Lgn1GRckSWxl1BG2Yit22CutKEiT+rzHumS3T8A2r8MBCjkUV1BC16d2ncoKbkHA8Cxkj2AFyz5FRt++x5pkso+05yoitqqqSKSKJ/lkirE+cCMQy1NIvkH3dYXNVsHTfDrFWB+HNgjNKQbTmw9yXcDi838gtRxZbqiOxaqrLbFyM11uKLdYystjlmqz6fPjXFeYhFw0hbOGID7DWFXkINIm/5HGQjwFsIyjDohPOxZckhPFJ/+fNNYjeUUsIdNhLe+FJtr1/NEYjYSjUVvEau6lzTestUbX8FYsiC54r218BetyegTsQmURWw2vGQ30ymscuaL1xfG+rGkZydnAVUTtVTwYPSSHEDlV1471K35IGFRlC1Xw8UEGfaf6emYNPPhmnIImIBE0iTe/ohXDTuI5qbCdO3eF8XO6CWRNucHFQpEYpIygOgIonkFmahlkOhsKqCq4LuaIWCDUXCANxfvTpaxFEMEZkA/YFnDEBKTpD8H7iZCTb2q5XGYaLU7NBNkkRbvKWRw2ixnbVCEEWZtBZ8Yz6HTWIYJPbdgSssUgyRWf7AM5ZCkbUwMhHIEswhExZFFhRXgo+VwQqcg0kHjJKC4ITqiMoiBJYQmq+ukMJi1h/q0BX9F7+G541Mz8JyXR44Jos4QdMcgVVQ4oR46f2P0xRr+dHjnQDIr3fHQiTRXKvQ5bpQVFKMdWWlVXEKMltIXucfLY8XWcFSALzB1UA1H0ORmjPYg/p6PZgA3iAFfhCBgGB7wBt4Lo63XtWaHaHi7FyGMoxXa7UI7osdv3sW6XF2IekftJMUfGaT3Ik/EerOn3G5vBl1aIie0Gkv3LBdJMx4Wrww8/XPv2xvcO4x/13R8s27ts2/yXczcOAXipMVRYrRXmY/QoR7YSm5Gknpr0KOyj97DJnXlaRj/nyC5iNxL+oykPweN+QyfS5ryJmLSBVg4Q/uKB82fketyIWaOWBJpK0pgnRy/qBcIHU47w5AnQgTxO2pAOZAj/Mz674ES+LKluFbYa0/cbElUxMOrEY69QBO/MpFn0EToV1qIzSBbtR6bDcoP+3Nc8A1lOesG2p+hSp9BeJJsu5+m8hm3cNnDar2SMkUwiLeh9dJAuZjBtQe+lk3jTKzdqE1KqolGQdFhr3pjT8ebkFW2gofF+Qr1AExmi5Vi5G/jKy2dej4TUCA4jUmqsskYh80VDY94vozMMk2c/8mxf2MLTlCUZZIyuYA5JJ13Jo/xVfHLZm3MUUfHIsONoYtuS6gqMPTJyW2d4ZQHtQIfTPF3dKaQdfZis4E2jic/OHcdH1+/d+/LLL76HP0NafmJlXTM+PtVITWPGPsQPxTN2zj3lDgiqDYqP1QoXEYLa/ero09OuQmRfa7prTPqQx8AZe+ivrAx2D+lOiMEl6A6IEG/7yG9kA6llAwG/glUcs8Tu+BTFn4pPx9pY9k8NTP47XtEeamK5jLo0Q+McErjRBKqw9gUJx9NYxaFKIRyC/FEAcMJaGo7/i/1Tybou9QYWDYDVLpcD0c3xbnSz1o0VQk7FhpF4xzkWbQiEYQHpRIaSCbq9J1AzyaEF8OlEh9IJUCfpBGKmOaSA9x3iwMStSWcyXJ85nLQkHeE6nLSmnelwfeZw2pJ2hF9Nx/4SKE6SZyTdSJuPSXf9xYxOl2hvnpY0RFw8iSM/kalG0vrLPJoCDuzSbxRtyzfo9jW++NLJo+jSCFZ1KbDlat331TgsKU4VDT7Lnjiz6yv8PfrPmp8niyDXurNT5uQ+PwKC5T/uAg8sHDZtIqLGm6yguGQHLtdjohzbZVdQQKZbf9naCxDLZAndyYI6rvCdWFDcih4L00iEJWk1V85i0kzHjaOrDy3eOefVkVseAh1euIMb33DkHHEaSZsL4++H3XfrP542402byA92jmRc/YSwOgL9NuoEHbCTDtq14DV8AWR9eO7kdf48frfk3ekBSYHq3pATYZcqyrmHx266H5Zo22twFx1RO517hgxZRPoteXk2Hg61YfCI8Z35bPzE1idOSX6XX7gT9Y6AEJAujf188U2I+h3k9SYbrUsjRU2S3d0kcYsMJtJVa2njyKOk2S0yw6y1apJk7Yw0p89DYNqsvj+SgbzW+q9jk0l6JwA1E2mvpQmcz1ADJVSpQuTlus5QxLFPL+K2aIXORRyiDax2G9ENdUZWhNJuAafYLDAkYo8PkHzf7Y6sUhFy1ID22hpytJoLVAQdVRj5DAAWYTmGyFTtMpkav8zKlpC9YSAYDsCApa4D6wv4dNKQSFmgtU7Rguji+HU6TbvBShEnrAclBNipQwJFpsVv0EXaL6wUtUd1zmqxwEWqlHwiMv3+4QbOErbF+AhWVRXy00lOE5GehSBRxDDUpqhO0FS34lIRxeQ8jJ9gZR0wFByzQ0W3YUEQIGtL6RFaTo6xrqArYAcyb9VJmSC7AgIiDnqc+umHrCS6oZ4i0y/k8l9gKkQ2aa1YWZHVBAxFdakuAQgNDcaTqKolsa6QoOiIZ2lAPL+IyOY4x5o++Kmt5jP82WfEZ2FtoXaTVYL+AA6hSmPEGrHw8XLDn82D9hSOL4zfBJrkFrEDeY22KOweGOnPXRqqTrkhHAqFw46Q3UwL6kRS0OS+vAGMKNL8QOawDAxZBr4GPE4KCoo94Xy4SMCJJeB3wOPkRLbpfAtHE8z3ct0Arr6mlBvsDofdHnKEzaTgtkgLmtyXG3TjmE1lHtofypwhGgbSZw9bzfFfDVa73WoN26Nm0xxSaeWu4lOHdx9BucbysL2qKhyu5slRIz5VemjRrmf3Tlw/Eo/Fk8snFYkehxNUs0ZsUehfoCvyoVc3HKo6jtHNU/ldzcXGqbGpocchF+/p83QnyMVOv/3tR97/dy7niQMXIK/Pv3OYMPyH+G3rARvKM/bum9uFNx38vgHwwwD4XxtfzT2T9xtGpAVp9SsZpGPWINrqGm0BfGrs+FmjETljrLaFKyrs9nKeqLcHcN3STDPJeSt3BZ/c8/oxGTi53qpZoxA6WIRCNHdu/pIxoFKz3j+TFro80zdXCeL/iQ8v3j8fiEUCTYBDVUGIqpI840Devn4wvRs1ALzrgEK7EJaaSHfetIQkkx1ciLCfXP4VQA6f7KV2RZvpfE5REqvq8aOv6oZV501+7jHcHfe54CBtkNbVEI1GoqRbH5JGu1C+C02jWbrofgR1JO357/DbO48eBdeqpEUTa2jjSb8EVY/Z9Z643xHDlZ2vvs+vx2vdNe5qd0xH4IgzbPOtkUv8K/FMvLBixYply8pm4Dw0ZaLRarNbLWEI2LcMpoPkfTqA+wif2XTw4P79m04ArGq9jYmuxA5dySDjnHdGvpkJ+25BTb1od123bsR0P/SYv+Jzbx08hYYbabtHRgNWP45H1+YdkHzAhOtzFIouBKh4ZsbHz3+GkUAw1/mBT4lRN3X6Nxdu/X5zKE3TyxPqnNOJN7nB3eWRO0G2xfj7xY9/uX5yJJDH3cbG5wfBTcO+ohzfGz8zfdHTiBxq1NUUT/mhrg/XPU253atRlFbQEBdNZ/zt9tfcmQP7PjVr2xtH47uM01YWLeShmazUo9mup5w15Ix6VG8QSAYyTWiqI74ONbMVmUxFVnUG3DoDCusX1ZNgQNMJJk+TZ1gIAVmHHnt9CHhEEdEz9CLWNrJNNf+lieS6x5tsinz1F8NsNl7/4NNvvz0xthNP9zUxzDYjMXx05ssf3s6lyX812X4juXvYZXoXlLqJ+YufKTw58fW+uA+eMWVxPnq/iW3+OwdcaCJhE/kAWFQvkgKG6aK7uQtNJiaaTXvRFD1n+ETOJEPOZPO+v3M07YGGzGt+5Rq5i6R91wPSGeY0758F6gIAUHMTjXz/Xwj4vikCxKfqCHBQO61VcH9as69xzukxJ+rDuVW3elo/iLTKSoTzP04ePIuo0rhZKA9/cL//1o+20+e1zezbqWPvLyErYeEOX39GUgDal5IaB7cNb1Q2qGFZUTGgsS0MdQuX2QswGj9784dm8jnp39hX0/6ks+FPfWjn+mzUgdP8Fr1i6Hl69iXetIh8WMWRudpcKMaVfgCQxIkQxI9TsiOaFx9Hn9JyWTHiCpXrxd+WKFzwQWROfDarWILOO1U9qMSQacbZ9Zw1bIvyIawEFBUBcy8kI+gKNpDgkjEc0aux6g5IAURHk2JggYuhEAMNUHDUHoG6g12iS0B0EJ1PB5NnWTFBCKGU6tVY8IsyrDyMLqZjaDEUYo+oF+JC8gB9mPsQH9v32i1E5mmOf7uXkfGn6GztyX+7l5L4ErfALh666NkJeCkulcsUlz6gn+bp69oUIejeYt/s2qWf+tyn9dTPpTxhUBkHXTCVZu4r24evoY+M+Otnd46uPbV+/x78tX57rWYfydwH0Ky3m1G7YvPQnEVLcnFXNMSYUzS1a5nTabMFnTXXN07N4YcYcdcduSRnESzyL3IXTeb08qiXTP4Pk1Evm3rJhFC470LdDM7ms7t01qS4FA/JXFCzAGehYUbcd+/is8VPlsxdiPvqt1llC2jmApfHpZ9bWcOuiI/k7NpxGl9Hl4yfbDxyvSYYjEScwbKuRUc+4S8Z8fUlp2nOLmQqIIUvcFJp1FID/gqFfWFU8ykb88Tg7iv8zt4jUOWAm6j1TkscSIqzZk1alosRAFml1Ye+0B5nD9h2rXhpWUBsgKxIomkDfRftmPfSxBiKnWblddZYGVjYYffYkWVUOWabVD1MDee7X1+I6F0kwP1ZNUN4YHwom7Nj4qf4B2TaeibGQdOg8toq4E/hhuOuWyRCtjc2eHQ7STfg02tf37lz69a91YfxJXxw0SszADwlXbFIuKHyBtCsY3n7e+Cn8KRVzz47Z05RLh6GaNqYxsOyMzRmyCllnR5JxIJ+VJlKXuBIvqEx6Z7ARCTQqSp+9Q65tGOnqLeEEv0f6iK3WSHsStBAa30EAr1ExEV/pY9j1mqzQYYCJyL5PWi+ARLW0nDbxfBnS3qD5NeXZBsQKZhlIou1vgCHs0h/MvDOKUNf8jCdBZ/+dCCdwiea9L7QpM/it6bSPNqZ9CC5+sRc0oVkk2dIHulMe9BcfWIu0INs+gwfID25d/De2r07ZH+CKUccIf3YUnS7PUsLnyubidGj4859BlI+O3n2Ev8q3lGypQgS263nBdQnINwS9EZLti6oHY9R18H9M8GnXS8NuA4RvIo8pj3AvYp3ravdhpYb7UFnOBwKhnnAL7zbvqV0XXHtc+EFeCFe7lxaIbhFPXr1SXco34bQltBWjF7fsWKyWTQWKc8HFmL02ORF42GJp48/9wbv28MtWLxhDyi3c/um1/m9+EVpowArzZi5dDLfg/bWjzkjoVBE35N+zGlzOGy2kCNiNnXTcg5wOtGthA14ZAkKbGsygrQmw3WgUhJA1XgITzvQUazggI5AAHhyqQ5E9Cd6XwdlnM5um5VmggI9n8S5qxc//dFcafxx6KUePR8d3Iv3Gnt9PORnfn1qvzHvX4aBy2fPX/nqzBMDYGDA6Mf782P/xUFyA64qQf6NV4xHxrOyKLt1IAnoBx2y1w8Bu+A19sXg2vV4C9q9bP1CPtfgdLmc5q3DuVOHjJuq7atKKiwrgegPIsVaH+7SB+c+AYt8MuLckCEjRuWAs3M+GHWJP5iaN/vIGzDwxoEjJ04cmJoPA/mzp+bxps/J6cSZ7yqSD+764t1zl/TXnz77yMNPjRqiv/7O6H/xtA1N40ioiTlDjeYkHHmQy5t1+B148cT+wydPHJz2NLyYN3faeN7UjRzSFnJWu8Nqxi6fS8f21nQEbU2Hsw2HlvrfQXDD30FIBzKKVUOJUx5o5YQQGB+eiKpLdiZM3SPNNJDs19ZxTiy4vFbkpCksRRXZYzBtCU14x8v9yD06l3ztjVMNnozZQ/phkSCJrqkT8gqGYpSZ+8/PEweQF98iqWp1ZSjijSEb4VhvVFBgmR2kBbfFuL6iqqSkoqKEX24sqapYv76qaj1v6vcd2cSRq4mOR++MzPRqos/S+zGziezWh+tmNg7fntl0eGjd41zPNNNJrZbLTrtzID+X3Eg8pqPb9tRv60fJ6LbZ+l1iUsNNN2IlJdy542+dA+3PPf1W7tjxE0eBoUcdn3iON53Wth/neqXRVW0bLiZ6gqw4wOnBeeIb8AGY7kZdN3Ifp1uEdyRie+aYZ6YPxJTFAy4vJa0RWd8EULcaPOu8G/AGXOur9b8AXWyTsbWGHSTt8y9+xd/g1+cfGym7gmKi8utnxIpbccuTPhj1Bk3Wj0twZueFtAsa3ni4cdrgLvYW4yJcUlniK0VPNo6cN+yk99/qQnh8E587eewjvwysIYBMF0gbrQdnV4VwOKgCglR9ZQwFg6GQM+gw04UGh9PpcASdIfNXBjKXVnH2oBBKTMRk1U36IAu9vRSEiArIsoJukgcxXcU2Cttu1OXwkiHRUrkQTQfmkU7GsJIi+Z36sZ5dEOxm0ydk8zru/jR1Ldc7bfwB7oG06uFwEVP7pJGvAw2/xQd+xL2k2mtkQwBjb6WA1I2CwStgr4iRtC5qULHP47Oh4IbJgjpXMLzv5PqkaX+jw7n4t3X7tW8NtNvtPK4aB0OVVchp8DpEARSwu9TqGkAIcxD7JdmKgrUw5GIlWfQLGFVYrKVrIrZ1Ztr6M87lCQRVYCIBn+h0QnNgzh7MbVTFF6tWisJG1XXMYPewnkqp0g1SHS6L2SsI6kqX8TuB26w6awy+AFgcI69R8nv8UBHkgNsv8iKW3G4nCpcKCswtO8MpWA6ywNPcKkZRORqKusAPetHwuNAWmGU8PIWDVyQR+l5zCKBMDqPYdrCIugZjIYCdqx0bFLhbmbhjMY4WyXYv1BwJ+/1eFTZF7ye/c7ioumJjcWStWoPXoo3W6jVlNusa/i16i1NxpcyCiqBAqB4pa553AYb4fD4oHtjv9ktIjbkMHpH1+CUgeQ4s6lBTtgkWxx6Px41FDJMUJBjmknZg8ag/EircXfhS6VqbTawA6ri0tugljGI9OQeYaLXRKYtBPoih7w8h0cd6RRCCkdvr85s3xFRLxEg6k7FcqLzGvg6jrbUbt28vfqHQvBKXVJQ979myOrLcq4T9kB1o9+KXx42eM2c2j5eFS18ozi9dthTPwflH5r2DoVRWbd2+c1Gt7SV8AO/e4zuBBB9rX2O1rsKr8Zroym3VG2pi1SH9XL6cq1WlaoPil0Elt8SXSkKt6lpvBO7l4AUsSW4BhdckHEZWTwP6ZPSCeT0eSXbLYkAF52IFKaLigNgWeGAoblkSPC4RzAMFKQq4GfCBaNHvDYBd/QGfisRK1it5vR4MH58HggM+CgqohoLlnEuSFTOWfX6fLwD8PeBye9wwE9GMPVzYD48rvZjH8LIeWGaxwkjayRxMhnBzu3kseYBvSLLHj/2IsuQYV1MWLY+Vr98Z2FS00WGvsJVY0Jv04p3so88XcNtU57raUqcAP/cH1WUGIVhWXAO/CMG5TqM2WUkEoOR3y3oYy+BrwN81d2txLtiGaaX/V4osZhgzmcHMRuYwc5H5Oal/UnnSnqQrSXXJ5uReyY8mj/eU1/81QA7IMfQ2mcH6Qn5oeVBUCDj4EkMZdjjdpSj9+/cu/wB4/N1Tlx/oPW7A/YDHvd99+Ds+fcL0t/VK+uGr7548fihPL8TD5owfz6fbg6IKBPfFqnXwL/QSPo5ebKw1q4x4ddRWLfkLKooXroaMELGI0ptUoCZ1KV3rDYUmUl9o4r0bCo2typzeKfMr0k5nfm1/+/r3W98/RNvrnK9D30E0hU9fE7OsXVsVW8uvNa6tiK1ZY7Gs4dOj4VDUjBWPovds/w0VUgBgUbp+pui1egWAKdd/V+dF6ARRetgZEKBCrawohX+O5/AEtNJYWl2+bl119Tr+BSPeYI2Uy+7dVbV7NgT8fr1E/FuzriuvLi0tLy/9f5s1BmaN1ZvVAma16GatjLlCFRgBvbFag86YOQII4wsCUgBCQTOKBLc/ZE4P+CSnucIQguji00W3HI0AWgb8ks0KuGdOj4ZC0agjaLU6nFZLyBk1p/8vR0qpHHjaY2BkYGDgA2IJBhBgYmAEwiQgZgHzGAAIgACVAAAAeNq9WT1sHEUU/vZsx84l2EnsOE4cOziBYEJ+IIkCRkGATYJAASFANAghhEgDiiJIARRuQuGCNC6g2QaKE1IaF7i5JhK6xs0JyRTbXLPNNdssxQrpiuGbt7O/t+fbMzE3mr3dmTdv3rx573tvdmEBqOIq3kXljZu3PsT4V5/du4OTGGY7lEKFf1buqfL53W/uYvzLL76+gylpseQK9u/DIaGq4Ij1V9g++xMsa114TOMaruMmbuE27uJ7/Ihf8Rv+wJ/42zpozVvnrcvWe9Zt61tr1fqBoxdVg5zmlI8lzPN5Tm1whnH1ESbULzikArasYlk1scJaYY/HVkfu7pHmIWedVh3y8XCOdZkjRjCiXPbXKU2V49fZ6gtvj7xHeB3nrHPK5qiAo1wsk24IY3yaZu8i+Y+Rbot0a6RbM3QelmQGR2TRnDS9T4pA5l/iv5Z0WFr0epbZusL7IfavmZY6JblIqtFQQvbqp0vC2RfqN2UNmnPYE8iqdGvE+Yy0aFqLOvDl6sksDcqp6bfZNk0uo9iPcUxwz2Ywizmc5thFnMMFXMRrXPcKbuAtvI0PUDl+T+/gsX9mfucOXsH/9qM+oXxVU21lqxrv1027zbomd+3oqhzlkc7LjG+wbrDY5tllDVSDOhDeGVoZSY0J1WORPghrmn/Sl/Sk6ZNR3f3Fc4TFPMm6+Lyl71VLbalHui3SJjXkxXp1Cri5OSmdvHSDrH3wMel1c9e8Aop25lnvls1WO9ac38V2Ki9HSJel1HNROz55uYKKMf9yK+1q7STXyEpL8PLLzdlzfNNYhM+ddM0+ZywttG3xl2a3v3Txa4tWGsK3mbUK6t1TD8QTV83ebMReGUSrF5vr5Lg2pN3RHp3yvHCWRsrzXdURS3ZoyU32O4/JkmN5iLK5PRPdBV2tdliJlrFt5G3M/DTFiKHKUeq18NpifbRHeNkx1u2JJbV7eGW4/mp+X7p+1WILDbUkOm6zuL0wLqvrXv5iPMUXzfvmqUbkWs97qPpO71c0B5+atMH7OjLw7j6vdbEqO8f/gfBrisVGZT2x7v4IV9Yr0zQpG7PFRtsp7PG41np6RkruqTVi9Rrlb/O/oS28IEY1YqxyjCU5xqpq9JGfjU+ECCCzSESIZnnEVpu8bdK62t/4r3XeKvBPW7TTkqL9byuFMG6CtSJLBuvDeCPyaYRx5NozDoS4m/Vj7nxDrYZSaT8P56BE9dQs6+S8yhWvMk44/LfVptBu5vjbQqsl3iTXLWqkoXEqlrEgMmTxz8hHK48wp48VeOXsRag2S/BrFfqLF2kuEx1r8R7V9wBd7P7xL8mido6fZlR1oPl98RQ/svJMdtVJIX+ryJd1rBPE8jNRrBbmEEluOUiUz0aclPc0eiNiD0T1+81TYKlJ3ueV3BdvEAxLe3eZTD2JDql8rppwlt6qRMiMPbMEXTlCM/YkZ69OFoJyPjE3zmEKNBZE0SmJ712ZkBcjxUPBqO1+mpYRGxpRui05k8M4xVmZRN28JQ++FpRYSyPB59Bf4nxso/w5KU9p5gpM3HfzOVeBTc5LnceUjNrmqO0kE4l/8zzDhtcXk1g02Bkm0chjsrS60ZjXjfaZfAx98zGkM6Xszsq+6IiucyJ/dziWjuM6f6aW3X6IUTqKubuNlTGaOLnzvmcwPeh3AjexcsBzVfkz+IB8Q9/3E0ROdJyKZ26IgAWY0JbszdtJr92aj6OTVw75C/GjIbsVZRfV/xAr/SS3ifIbseCNPlHM3zm7iHkF8Vksb912UR6Ty6O20yfG3vFn0PdEYrtTmTO4frNVM5geFJwqz5iRm7vAsc0cNnaNpF+0cl4fRF6po8uAb29Es7t9d6ZPPnmNUo7MOTm0DnNyaicZbh6x1cPYs5pRTTKykjmMn6BtuZPxIO9o9vCNaTtvoYzjbVZ5H6AjbW//zp53d4pGMfo0BV3b5gRbN6fbDCanMM1Pvd/xzZvLTulctBWvSCqjU5m19EXx+GQermVHjWXfdEQWWGYtOWzJ25i/Z/bglcn6e/wsjOBjzPDuPOtx1ieJSKflC8BlnGJJKCsYwjD2YRRj2C/+cQAH8YT5wnAYRzBJPDuKacxhVsYcwwlmagt4Ck9jUVqeZV1keY49wFVcw0tYwsmcVGfju2dwgfKcwUVcomThFZTvLHu07J9wfv1boBTg3DOcM5xjKn5jd9p8u4Jch0xrxdRhcknWdIAth7gScGUTXM8kdXKCd3NcxwSL1sgk67R8RbmE54XX4ZTss7H0Jyn3DIte/VFz1TqZlfWe1V+x9Ncq3o+yWJx/P9sOsHVIZBgl7SnKtMB1T+IF5rsLeJllEdfxKlf5Om5QhndYLuN97uIVauNTvEJOY+aLHcu/eyTbHgB42mNgZGBg4GIwYLBjYHJx8wlh4MtJLMljkGJgAYoz/P/PAJJHZjMWFxsYMnCAWEDMxMDGwAfEIJ4ARJ5BA4g5gJgPiBkZkoCYBUozQDEjA9v/+RBZAJRZDBsAAAABAAH//wAKeNotkC9IQ1EYxc8912KRpRcNwoo41Lm3N94bQ59MnW4KK2qYQSYMFcw2ERmLC4YxDEbTEIMaTFYNMsEsBjGJYcFpmIeH4ce537nfuX8+0wPMhGgjzzskbAYebzGNd+RNB4siK4rcx6y8tGkhlJZNb/DDFia5Iv8L6yJQT1asiU06iFsHGXZR4xsKdkTaRM3GUGAc43xQvae6Ksryzv71Wf4R5thAkt+o8BOZoVWd29XeI9K8jN60bXoYlnrcGHwwhxmeqjeAzyX4ZhcJ1VnuoII+ttAf/HIqWlftjfrk6w4/yqjPNPWeBbj0Mc8iUuYVnhnFodRlHjmeIGQHrs3BNXXlrPbPMWbusRzNoq45WGUdpBhDaI+jGZVEEM2sjZIIRNq84IAXyng6w1PmSX+4gsNrJP8ApTpWeAAAAHja7VXBctMwEL3zFTs+MDAT24kJTQDHPWSmQI8QDhwVax2rWFohyXH996wNaQMJbT+gF0nWat/u232zzi9vdQN7dF6RWUWzZBoBmpKkMrtV9G1zFS+jy+JFrjEIKYL4+2mRt0b9bFFJUJKvFrNsvoiXy/liHmfT2dvpRfYmzua8zObTbPYugrTI92gkOTBC4yr6RNhU6OCl0PYDXDl0GF+TQR9B65pVVIdg36dp13VJ6C3tnLB1n5SkR6hGlWg8PjX4w4hph9uKTIg9VaETDqNiUysPh0/gc6gRrCOLLvRAFXD6VXOX/poS+E4taNGDoQAl2X4CmotZ8S6VD05t24ATYP6SOtOQkIx5FGQ0KeODaBpQAVpLBoTpGUtbdnXjg5p8GKyVIz1aGypF4LaM8R04tasDBIKWixP+JeHb7Q2Wo33gs0Gn/UDmK7o9FxTEziFqNPyiFgHwlhP3sMXQIRromaAw8gz1zxWzZvSyPoL47T0Z3Q51Oc2qYlIDD9s6Sx4TuOILTUO+hm16JDcB26Bg373yTP7pjRxrVvKNYNaneTPHUxB4VE95+kd+RS7Rl07ZIclnzTxr5iHNHEslH5o91r1YH07wav0asun0YjKsizOh/8shT+/x8uCERC3cj+IjcUs0fKHWSJRDMwXcWc8KcgJdrbgjQ+23CA533A+ezOxsoGQdC95vWqe8VOXAxCd5eh/wMJbx8RnPMzw9/FqKX5QpQUs=)}@font-face{font-family:"Gotham Rounded B";font-style:normal;font-weight:300;src:url(data:application/x-font-woff;base64,d09GRk9UVE8AABbaAAsAAAAAH5wAAQAAAAAUtAAAAiYAAAaMAAAAAAAAAABDRkYgAAAH6AAADDUAAA5vT7aLY0dERUYAABQgAAAAHQAAACAASAAET1MvMgAAAWQAAABPAAAAYFXHJUtjbWFwAAAGPAAAAZYAAAM67rbLAmdhc3AAABRAAAAACAAAAAgAAAALaGVhZAAAAQgAAAAyAAAANgMWR7xoaGVhAAABPAAAAB0AAAAkB2EDAGhtdHgAABRIAAAAbAAAAGw9xwbVbWF4cAAAAVwAAAAGAAAABgAbUABuYW1lAAABtAAABIcAAAu7KDUzBHBvc3QAAAfUAAAAEwAAACD/uAAyeNpjYGRgYGBkcNRb8/RoPL/NVwZu5hdAEYYLOkzyCPq/BfN8ZgUgl4OBCSQKADP9CZ0AAHjaY2BkYGA+8F8ASF5hAALm+QyMDKhAGgBY0ANpAAAAAABQAAAbAAB42mNgYvJl1GFgZWBh2sPUxcDA0AOhGe8yGDH8YkACCxgY6gMYGLxgfA8153wgpfJAiFnhvwXDCeYDDB+AfG6QHOM/pj0MCkDICAC/ww9/AHjatVRNb9tGEB1ZcvyROIh9TFFg2wZG0kqyqCi2k1NRA45zrGOkyHFFrkTaIpdYLq0IyKG3Hoqi1x76J3rpD+if6K8p0LfDVUzFieoCrQhpH2dn9r03OxARPWj8Tg2qPl/jW+EGfYG3Cq/QGoUeN+kzOve4VctZpS360eNb2PnF4zWS9KvH68j5y+ONGt5c2W5senybdpqfeHynhrdqOXfpy2bH43s1Dds1vMO4SY3WBt6+b37ncYOOm396vEJ3W5963KRvWl953KrlrNL9VurxLVpv/eDxGv3R+tnjdbq/+q3HGzW82fp89cLj2/Rg4yeP79TwVi3nLp1t/ObxvZqG7RrecfhI5zOTjGMrHh49Ev1eb7/tfg/EiVajiTJiVxzproitzZ/t7U2n066d5XpsZB7PuqFOF+tPdo+0eCsWU07VuJxIExwE/cFB5/BwcDDo9HvBk95+/3GnP8BPMOj1g6evlCkSnYmgi91jndnn2sYyFae6zCIViaQQUlgjI5VKcyH0aFFjW0zjJIxFKmdiqIRR46SwyrjCTITKWIn1vDRJESWhBVHRXag/i0FQ6JGdSqMcmY2VyI3OUTq7xiZe65KpMm1FiCa0RaqjZIQ1Aq9JhqVVbaGNiPQ0m2gZ4bwaAW8lWWHlZCISK8oczmU2w1lpjlLDCbEurNsdGZ3y7kSH0mlnfiOqzlstykItnu8MFOXwXIW877ycKZMWzshLZS6TUAk5NkqlKkNGLK1QbyC8QO/sVKlMzGBQZtF7tl+M4Bgno9FX5VVlm0vmPbmuaARDzkNemlwXqiuOEUi105phL2VjbZFPlETtZVLA+Efnbm+qhiPMSGehoSEiEo4XNcPb9QPEP87j9Zqbq6Ej0pTTjAwlNKaYLAl6iOgjrH3q4dmn9jt8AHSCCkUjmuDX4H0XX3dKF6urtzjvGe3hmfLTRWSGmMb5Bn+NObJmiIaIpEv5T3C22xf0Ft9lp5xCy5hKaJLYDaAzgOIB1g4d4nFoAOxcBPSEXfXpMUcGHgVAPeCAntIr9lZAk6YM3AGYqtpjjlh6jtVCgwS7AL8Ge0YR6iK8J6gV2HOqnVoXT1nbBWIa3VvWR9fvKc5O4C4GdpUzrENkCuQ6r47BcuWc0ekMOWKRX72fQ5Xh3IhPs95RAZaP858xt3NQsFYLNZKZ5s6cc/eWI+rur2Kd3cCboNfcqytXGXdS8E26SWjznmbFI/8eeb/OyxDVznmb2QzvaijMwKa515W+Dzu4qkq4D65XEzzu3akoecYyvr2M9VUTlntWUzshxlpwVVU74m6ktVqnKMTbvO9X/g3f5NXMW57zEueppfrFu3iJTpwjEtbq5/dyxkpTzqxu5CVHLnkKFCsc83luLhVPtPDz7JCiN77jhZ87p0BxpoCz6gYlT/zy237B7Bmrc5qrif4Qe52zXWN5f05u0qORv6H5PeTc8ZzvS7GuY5+R8qr8PFR1ae3G2lztnEnPe8ms1Y3/+/+7Pe7jkJmc786SCQ19jvR3vKzP1b3dRIH4D/4fb8LzP/Tmb7O8aiYAeNqtks1LlFEUxp9n0vG7cT4cR5HBIFyIiJBJrRRE1IWFC7VoIYorQ0aTwUEkkOgfiHARIX4iIrgSQUWEIQZDRcr2+hKBa0Ut0HO84ztOgotx4XO4H4dzL7+Hcy+AB7BHCWhmOKpNxqs8zREwawR1SMczPMJjPEENnpu8Ac14gVfoQQiDCGMIw5jELn7gFOd00UMf/QywmGUsZwUrWcV6NrCRLXzJVraxg6/5hp3s4lv2McQBDjLMYY7wPdVRFBwNfgh+PPCoGgelhlyFp8ZDnNyUJL9LkjcN+Qh/Ddl9f2S1dF9/6Z7+1G3d1JhGdUUXdUandFIndFwjgNbGe6amf/JPzuREjuVQ/shvsWRfdmRLvktMvklUNmRd1mRVlmVJFmRe5mRWpmVKxuWrfBHfxbk1Zn22PpVm2q+QQu1mdKPXzP24P+UlwpUI743wJ8Jj6qATKW3SYX+ra6WlOzOQmYXsHDvPtYl46Ipv8pPn3DfueP5vvYCvwPALgUDSb/5trDcuv1EKe14U3bEleS6j25VL40WT/QAAeNpjYGYAg/9bGYwYsAAALMIB6gB42k1WC3wU1dWfPGbmlsci6uCn1tkEDCTKQ0FQMDzSlBBRJDyCoH4oKgUpJTQkDXls9jGv3T2Zmd2Z3Z3dhDfK61NaFcqnolR59KP5qgjVtvgA+SH0V6FqrdyJd/1+353QWn73l5u5e889555z/v9zbgFTXMwUFBSwNQ1rmryPcvc6xv1hgXtboXtbkTuseMmgIiCPfzuhbx+LRwyxb2MYH7oeLx7KFBUUoNqHVj7dsG5184rqhrWtjc+uWNlUUl5dUTL+rrsmjfbme0tqG5b/ZPXyxpKRJdUNY0tWNjWtnTJuXEtLy9im1rUNKxqXrV3ZOvbphp/1W6fm6R9TyLDMUOZ65gbmRmYYcxNzM3MLU8qMZCqYO5hxzGRmJlPHLGAWMouYxcxjzJMFGnNrIT02lZnBtBeMLggWvF5YVrip6OaiTLFQbLGzWWCPsee4Cm4z93/8HF5FDPoxOvYD3w8eGDzgdvJ4sRv9tiMf5U4uEfC3QGblb2HJ4/laAfpkPCM/iMXr3UECfCeTGe4gtmGugKkE+RZYHznsI1/jIvyIIFmybVuWLfa4LWwulAmIQS4QCgX8se8KhbX8+lxg06ZcbpO4g98UyK1fHwisF3278Bt9vxCW88QXnTANRsKo4wvxHasQeYmfaj+8Z8GhqKGYEeiEYJBOEVOxlHfmnfzpORlV8p2ZUDabyWTFP/N4qHn+A/gGLj94hIz+L4Rf4H+jvN5y8BlLScSTkAMnQ6e0moxY9a88sr06iV7hs6FMZ2co1CniFfm3BJg+e96oGMK7eDxszd5lUIPyHP6rAKd6j17SEXmeJ8Ken+6Hd5HvCr4SFHANZvFUXO/XeVxPivD9pIYOlkwl9WKMJ/W4iNyPa0T9NYGUjcNj8CRP8N7P8B24DJddJKPJvZ7YpLvJnaRM9JEteNZWIeAEc7mMkxP7yvlsxGkXY1wIwtGQhohvKRvSJAWCEEyHHTDB7EroCHMvs77OA9uFQCacE91aLpfJ5Lyw+/MDAa/Ci1g8BBcf6oXPEbVeMP4TMlAkA+DBR+omRrW4Chp0ZsJZSEHSTFhvfXBk/1k4A+/XwV0Iqp6ZS9BwRJKklZVkTYEI8lm4lzo++MrH2Ee9AXwj4Y+Tm22EO/BGNpE0bbBQNpzqFPPD+7Pu3cqP/wakjWxkFTmqgII8g+JzHL7+Yn2FP8aPq3xojDgBan+18PdaQkpEIODlOQCyKRva4VlnHsMFgHw6fpsaLv3751jwwjh0+KfkVnE2LG1f2ow24G58GtjvPSdfcFRHJL4etZF9bLzD7EzLtprSHNgAr718ARBmT9eWU9Mjp80gReJMmLW37rCaiJgSNRui8YWIodjSkYVnl56npvEZalm8chn/R79lwp0jN4iEg9lznp6l4lUXcQUeDv8DB5vfeCqhJWL9UHPolNKSchItODD/uSpA5EekiFSSFdQqkLI9M4/O27+st+EUIJPCg530xy+o7k8/PId5XHS6+k4KjPKqyYQVfTvwu2EBj8LsRxh5Ef+49viEXSd2Hj8En/QnlPDvk8F08FWkgJ6C+44/cqJhwpraOTAZUXRRV6fgUaJ7a3H5fUc/pQpOf3jkq68+nF9JZSfeN69cJJeKiTDtxGm6de7i7zCHuYsP3UM3K6fVEEH04Vep7/diHx6P1/YnvOTZ0/VvLdv/8K4Z1KeRo0qJQD0ig74cg0tFXAjv/u6VUzb5STnFdCnMhUXb619VErKuXA1s4Cp50W+e7H32Y6B5OyWQospTl6nmSyfPU9/RJ5Xl1PiE6XdTmPrcwa5GJglfwpkd7x8wdNMECyzFkiEKajwWr1r24+YKeguFTMe1uAmvw1X4QdyO2/AM8gB5kJRVzZk5f9WeI35wjOeSe9GLlAxGT7i73SsikWgHCtWxTQeW/vcUqqOYDC4lI0o/rL7kPw1v7t/35ob5B1e8B+jspVN4Ol5BFuA5JEZHPXmMSETC88kSnPIvwnuFqQvfOIuLPzt74Y+H51ZWTBw9xu97Bw8b5v4n55Ulr8D489X4RXfoNeuheKc77Zr1Yi4QDAb83/2Q9/hPo3731/8sBQ4tBfiYu5Ac479f993O54JOwDsikrfzC/Hb/177yMe46Jqz18r68Nyvt9A6Ecp5TBHB/cJtzl9h7bAtpykOOSeVdvy07ngc8rgrQv5cfrX7OSunpGQIkHT1lj488A+bhc50KCtmwLKsFMIS7sUqeYdNSkk1DVkP/g5Y0aRiIQL4JN0/ypoJIwlJyIYznRACWZYjiLSSg6QDH2IVW0mEr9b3IOU9RQzCEXKYGOQPrKb2Fw3fEbe3b4nQHUoHAuFwh0iO88t6HzhaRnM3hAwdSaZ4MJyCh5bjIeKX8L/HDryDxvIdtPrk0ulukVjuo8I3X00gN3liw8rGl5aM/RTfIlIG3Xb+I1wk+n6FT1Gkj6Yt7Do8wuP5CFKIfRTGoylvryMjvFI9AhcSH75T1F8VyIBxl/EQT27Qub/hwXjAxQoyxJMZdE85GUzT8MRftghXzdNQ4zrKnPsufYSZdE9X2qsN3SGnA6phfP0T5Qhfx191i4bcV4ozYeHyn49e8Nj22cTdk7f9aEvNFjhCyf7mqy+9Jx6Eg+0Hfm7EvDqThUzGm2RLMR/d+fDGhYDKa+omeyXmrouNn6w72dLbDHNpGairX14jPgwLNi96STMUykaaghCdpIRkRg8986e1J2iZS7sb3MA1Ad7Bl06bPur2uhP/EPFe/t+/H6Bt+oMJWBD/Akdee/G3qIr/3k8fzuCULOgcbSh2ohvhke5EXJafyCY6UlIWkM45kLYTOYTvd59g9YTuIcKhcPPKfSQaRqQiP5OUuzNZLSPbAUAxrhNkSQshUt6/Uc1qjpTyxIPe/VVd0VWqLP8EmwikJYd68eiZYW4p56TTjhNOB/3k74Bdt5JNWhR9Nuri06F0UMzfwAXD4aDXR/34PBA3X3m1OUkozoczYUf0XjOlri7YsiVJsiyJ7fkW1qOO6PR3WL/eVyhc84S55mHju4Cf3yiUDLA2CKUD6n4tDB/QXUUntXjEAHw+8c+v/OQPhN1WuMfkEgDxLhlZ22QuLgPtyEjb6HAW6DE9hOzNi2XrKZl7TxJGDHDrSZWQv9C3z73AkZHfzRO6wU515Sgv4xFVlgCFFau7J5m0/TYYmhlE9la6pbCaqRoyoEBnsLUtE9roJ9d/JCixhG3pyWRCVyUppqr+O+8Xtlnqc7lGVd5mKYe4cIyNdWldUao1onT647JsNSr8RVl43pJ6OD1hmDrQYGlGzDANw0xEDVWkr4loVELpVjlJZdt/LyTBtFlDNaMWIMd0Uo5iR/wKqNGYgnZQKf71JQI9oqmmZvlTQN8PaZTdQyNitQHICZBaIpuTdNXYv2IBnCYzHFfpCTCMOG0EiIzB3wjQ1B3Y1pzZYPXABrQt2N3WHgq2iW+TK4IFXSZLr0gv4Kmn/aNnnQI26Lpu0BeUETU0ZGUVLqayMUPTVYiASqsNtG+nxiEWi9FOA1QoiWTuKXwTjbhjZFINext2t24IhdQAdMDqrU27AWXvECI0RC28ZKq2aINp6imk6mxcpUoAReO64d+ctTozPB6OZwupjp7wRkA7t27bs6d5S4O/EdYH2tfFdrRk1saTaYOyGu1d9fKc2mXLnhRhTbp1S/Oi1jWrYRksOvj0b2E/vJjbueeFZ7eGdsOvYe8v9aNI1tlwWzD4C2iBNqdxV/fmnmx3CpHlpEPYamndXNIw6ZWimtiqyVstZRNvR5MRUQZNi8oo3dafMNzymEBzEqfhjcU0M2qqCYsmF5IoSR/NYVqyRcq4qKnJMUWl4ZGSikP5m6CNmSIsnqBxNRK6hdQuNq7F4zGgQ49RcNCRRAmLW7lWUDQz6QdTN3Q9oVIDSjQWpZKI3PpLIW3Qn7viIAI97AHLrwZ4fJMpUGEKt2hUBC0WjdKrxQwwEGHxIaGn3enIdmx6IbG9aVskHAit70RvkT/9i31k3UphlyVt3NoqyfT/Pttaw8l2e3MP/ZDtpyTeXZzsB6BmRE0PxibNtd/XN+xG9wvBvoEpLigYdU/N4q6sQmsOCkUiwaAtZf0ZCiXdppCgUIxRwspRI+UfmNA1yR/gUlSNOFCNmk6G0iJhaKEgBbh/oJNKOU7EDgYjUrAzJTn+gf8Pvh7eOQAAAHjaY2BkYGDgA2IJBhBgYmAEQikgZgHzGAAFaABNAAAAAAEAAf//AAoB9AAAASwAAAD8AF0CeAA9AsYAQQFPAB4CTgAsAmIANwJdADwCggBAAnYANwKCAEID1AA1Ap4AaAL4AGgBEgBvAxYAaALSAEkClAA8AoAAOgGQAF0B8QAzAmUAUwNdADoCKgA9APwAXQK2ADJ42u1VwXLTMBC98xU7PjAwE9uJCU0Axz1kpkCPEA4cFWsdq1haIclx/fesDWkDCW0/oBdJ1mrf7tt9s84vb3UDe3RekVlFs2QaAZqSpDK7VfRtcxUvo8viRa4xCCmC+PtpkbdG/WxRSVCSrxazbL6Il8v5Yh5n09nb6UX2Js7mvMzm02z2LoK0yPdoJDkwQuMq+kTYVOjgpdD2A1w5dBhfk0EfQeuaVVSHYN+nadd1Segt7ZywdZ+UpEeoRpVoPD41+MOIaYfbikyIPVWhEw6jYlMrD4dP4HOoEawjiy70QBVw+lVzl/6aEvhOLWjRg6EAJdl+ApqLWfEulQ9ObduAE2D+kjrTkJCMeRRkNCnjg2gaUAFaSwaE6RlLW3Z144OafBislSM9WhsqReC2jPEdOLWrAwSClosT/iXh2+0NlqN94LNBp/1A5iu6PRcUxM4hajT8ohYB8JYT97DF0CEa6JmgMPIM9c8Vs2b0sj6C+O09Gd0OdTnNqmJSAw/bOkseE7jiC01DvoZteiQ3AdugYN+98kz+6Y0ca1byjWDWp3kzx1MQeFRPefpHfkUu0ZdO2SHJZ808a+YhzRxLJR+aPda9WB9O8Gr9GrLp9GIyrIszof/LIU/v8fLghEQt3I/iI3FLNHyh1kiUQzMF3FnPCnICXa24I0PttwgOd9wPnszsbKBkHQveb1qnvFTlwMQneXof8DCW8fEZzzM8Pfxail+UKUFL)}.wrapper{display:block;overflow:hidden;position:relative;width:100%}.wrapper .container{max-width:90rem}.wrapper>.container{padding-bottom:3rem;padding-top:3rem}.header{background-color:#f4f5f6;padding-top:1rem}@media (min-width: 40rem){.header{padding-top:5rem}}.header+section{border-top:0}.header .container{border-top:0;padding-bottom:3rem;padding-top:3rem;position:relative;text-align:center}.header .title{font-family:"Gotham Rounded A","Gotham Rounded B","Helvetica Neue",Arial,sans-serif}.header .img{height:15rem;margin-bottom:2rem}.header .button{margin-bottom:4rem;margin-top:2rem}@media (min-width: 40rem){.header .button{margin-bottom:4rem;margin-top:2rem}}a{-moz-transition:color .5s cubic-bezier(.66, 0, .33, 1);-o-transition:color .5s cubic-bezier(.66, 0, .33, 1);-webkit-transition:color .5s cubic-bezier(.66, 0, .33, 1);transition:color .5s cubic-bezier(.66, 0, .33, 1)}p{text-align:justify;hyphens:auto}kbd{-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 2px 0px #ccc,0 2px 4px rgba(0,204,204,0.5);-moz-box-shadow:0 2px 0px #ccc,0 2px 4px rgba(0,204,204,0.5);box-shadow:0 2px 0px #ccc,0 2px 4px rgba(0,204,204,0.5);border:1px solid #ccc;display:inline-block;font-size:.9em;padding:0em .6em;color:#333;background-color:#f4f5f6;text-shadow:0 1px 0 #fff;white-space:nowrap;font:Consolas,"Liberation Mono",Menlo,Courier,monospace}.header-link{position:relative;left:.5em;opacity:0;font-size:.8em;-moz-transition:opacity .2s ease-in-out .1s;-o-transition:opacity .2s ease-in-out .1s;-webkit-transition:opacity .2s ease-in-out .1s;transition:opacity .2s ease-in-out .1s}h2:hover .header-link,h3:hover .header-link,h4:hover .header-link,h5:hover .header-link,h6:hover .header-link{opacity:1}.stuck{position:fixed;top:20px}.navigation .icon{height:3.8rem;vertical-align:middle;position:relative}.navigation .title{color:#606c76;display:inline;vertical-align:middle;font-family:"Gotham Rounded A","Gotham Rounded B","Helvetica Neue",Arial,sans-serif;font-size:2.8rem;height:5.2rem;padding:0;position:relative;text-decoration:none;margin-bottom:3rem}aside ul{padding-left:0rem}aside li{margin-bottom:0rem;list-style:none}.github{border:0;color:#f4f5f6;fill:#0cc;height:5.2rem;position:fixed;right:0;top:0;width:5.2rem;z-index:99}.github:hover .octo-arm{animation:octocat-wave 560ms infinite}@keyframes octocat-wave{0%, 50%{transform:rotate(0)}25%, 75%{transform:rotate(-25deg)}}.share,.share-list,.share-list a{position:relative;text-decoration:none}.share-item{display:inline-block;margin:1rem .1rem}.share-dialog{background-color:#0cc;border-radius:.4rem;color:#fff;display:block;height:2.2rem;text-align:center;width:5rem}.share-dialog:hover{background-color:#606c76}.share-dialog .share-icon{fill:#fff;height:1.5rem}@media (min-width: 40rem){.only-mobile{display:none}}.highlight .hll{background-color:#ffc}.c{color:#999988;font-style:italic}.err{color:#a61717;background-color:#e3d2d2}.k{color:#000000;font-weight:bold}.o{color:#000000;font-weight:bold}.cm{color:#999988;font-style:italic}.cp{color:#999999;font-weight:bold;font-style:italic}.c1{color:#999988;font-style:italic}.cs{color:#999999;font-weight:bold;font-style:italic}.gd{color:#000000;background-color:#fdd}.ge{color:#000000;font-style:italic}.gr{color:#a00}.gh{color:#999}.gi{color:#000000;background-color:#dfd}.go{color:#888}.gp{color:#555}.gs{font-weight:bold}.gu{color:#aaa}.gt{color:#a00}.kc{color:#000000;font-weight:bold}.kd{color:#000000;font-weight:bold}.kn{color:#000000;font-weight:bold}.kp{color:#000000;font-weight:bold}.kr{color:#000000;font-weight:bold}.kt{color:#445588;font-weight:bold}.m{color:#099}.s{color:#d01040}.na{color:teal}.nb{color:#0086B3}.nc{color:#445588;font-weight:bold}.no{color:teal}.nd{color:#3c5d5d;font-weight:bold}.ni{color:purple}.ne{color:#990000;font-weight:bold}.nf{color:#990000;font-weight:bold}.nl{color:#990000;font-weight:bold}.nn{color:#555}.nt{color:navy}.nv{color:teal}.ow{color:#000000;font-weight:bold}.w{color:#bbb}.mf{color:#099}.mh{color:#099}.mi{color:#099}.mo{color:#099}.sb{color:#d01040}.sc{color:#d01040}.sd{color:#d01040}.s2{color:#d01040}.se{color:#d01040}.sh{color:#d01040}.si{color:#d01040}.sx{color:#d01040}.sr{color:#009926}.s1{color:#d01040}.ss{color:#990073}.bp{color:#999}.vc{color:teal}.vg{color:teal}.vi{color:teal}.il{color:#099}@font-face{font-family:'FontAwesome';src:url("../fonts/FontAwesome.eot?9h6hxj");src:url("../fonts/FontAwesome.eot?9h6hxj#iefix") format("embedded-opentype"),url("../fonts/FontAwesome.woff?9h6hxj") format("woff"),url("../fonts/FontAwesome.ttf?9h6hxj") format("truetype"),url("../fonts/FontAwesome.svg?9h6hxj#FontAwesome") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-link:before{content:"\f0c1"}.fa-pencil:before{content:"\f040"} diff --git a/css/themecreator.css b/css/themecreator.css new file mode 100644 index 00000000..19fdc785 --- /dev/null +++ b/css/themecreator.css @@ -0,0 +1,287 @@ +:root { + /* General */ + --foreground_color: #808080; + --background_color: #FFFFFF; + + /* Frame*/ + --frame_border_size: 6; + --frame_border_color: #808080; + + /* Input*/ + --input_line_background_color: #D0D0D0; + --input_line_font_size: 36; + --input_color: #808080; + --input_selection_background_color: #808080; + --input_selection_font_color: #FFFFFF; + + /* Settings*/ + --settings_button_color: #808080; + + /*Proposal list */ + --item_icon_size: 44; + --item_font_size: 26; + --item_height: 48; + --item_selected_color: #808080; + + /* Scrollbar*/ + --scrollbar_width: 5; + --scrollbar_color: #808080; + + /*Action list*/ + --action_list_height: 28; + --action_list_font_size: 20; + --action_list_selected_color: #808080; +} + +.wrapper { + overflow: initial; +} + +.welcome { + margin-top: 10px; +} + +@keyframes spin { + 0% { + -webkit-transform: rotate(0deg); + } + 100% { + -webkit-transform: rotate(360deg); + } +} + +#options { + display: none; + max-width: 640px; + margin: 25px auto; +} + +#options > div { + display: inline-block; + width: 49%; + vertical-align: top; +} + +#options > div h5 { + margin-bottom: 10px; +} + +#options label { + display: block; + padding: 2px; + font-weight: normal; + margin-bottom: 5px; + line-height: initial; +} + +#options label span { + display: inline-block; + width: 80%; +} + +#options input[type="color"] { + -webkit-appearance: none; + outline: none; + border: 0; + padding: 0; + background: transparent; + width: 17.3%; + vertical-align: middle; + margin-bottom: 0; + margin-left: -1.6px; + height: 38px; +} + +#options input[type="number"] { + display: inline-block; + width: 16%; + padding: 5px; + border-radius: 0; + text-align: left; + margin-bottom: 0; + color: #000; +} + +.theme { + margin: 0 auto; + max-width: 640px; + position: relative; +} + +.theme pre { + margin-top: 25px; + height: 200px; + overflow-y: scroll; + overflow-x: hidden; + border: 1px solid black; + width: 100%; +} + +.theme button { + position: absolute; + bottom: 7px; + right: 26px; +} + +#albert { + border: none; + display: none; + color: var(--foreground_color); + background-color: var(--background_color); + border-radius: 12px; + max-width: 640px; + margin: 0 auto; + line-height: initial; + font-family: SansSerif; + text-shadow: none; +} + +#resultsList { + position: relative; +} + +#resultsList ul { + list-style: none; + padding: 0; + margin: 10px 0 0 0; +} + +#resultsList ul .item { + width: 100%; + display: table; + height: calc(var(--item_height) * 1px); + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; +} + +#resultsList ul .item .content { + display: table-cell; + vertical-align: middle; +} + +#resultsList ul .item.selected { + /* fade */ + background: var(--item_selected_color); +} + +#resultsList ul .item .icon { + display: table-cell; + text-align: center; + vertical-align: middle; + float: left; + margin: 0 auto; +} + +#resultsList ul .item .icon img { + width: calc(var(--item_icon_size) * 1px); + margin-right: 3px; + vertical-align: middle; +} + +#resultsList ul .item .description { + float: left; +} + +#resultsList ul .item .description p { + margin: 0; + color: var(--foreground_color); +} + +#resultsList ul .item .description .title { + font-size: calc(var(--item_font_size) * 1px); +} + +#resultsList ul .item .description .subtitle { + font-size: 12px; +} + +#frame { + -webkit-box-shadow: 0px 1px 5px 2px rgba(118, 118, 118, 0.54); + box-shadow: 0px 1px 5px 2px rgba(118, 118, 118, 0.54); + padding: 6px; + border-radius: 12px; + background-color: var(--background_color); + border: calc(var(--frame_border_size) * 1px) solid var(--frame_border_color); + min-width: 640px; + max-width: 640px; + position: relative; + display: block; + min-height: 187px; +} + +#inputLine { + background-color: var(--input_line_background_color); + color: var(--input_color); + border-radius: 2px; + padding: 3px; + font-size: calc(var(--input_line_font_size) * 1px); + outline: none; + border: none; + display: table-cell; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + -o-box-sizing: border-box; + -ms-box-sizing: border-box; + box-sizing: border-box; + margin-bottom: 0; + height: initial; +} + +#inputLine::selection { + color: var(--input_selection_font_color); + background-color: var(--input_selection_background_color); +} + +#settingsButton { + background-color: var(--background_color); + padding: 4px; + margin: 6px 6px 0px 0px; + border-top-right-radius: 6px; + border-bottom-left-radius: 10px; + position: absolute; + top: -5px; + right: -5px; +} + +#settingsButton svg { + display: block; + fill: var(--settings_button_color); + min-width: 13px; + min-height: 13px; + max-width: 13px; + max-height: 13px; + animation: spin 6s infinite linear; +} + +#actionList { + padding: 0; + margin: 0; + list-style: none; + text-align: center; + font-size: calc(var(--action_list_font_size) * 1px); + width: 100%; + display: table; +} + +#actionList li { + height: calc(var(--action_list_height) * 1px); + vertical-align: middle; + display: table-cell; +} + +#actionList li.selected { + /* fade */ + background: var(--action_list_selected_color); +} + +#scrollbar { + background: var(--scrollbar_color); + position: absolute; + top: 0; + right: 0; + width: calc(var(--scrollbar_width) * 1px); + height: 125px; + min-height: 24px; +} \ No newline at end of file diff --git a/donation/index.html b/donation/index.html new file mode 100644 index 00000000..d983e985 --- /dev/null +++ b/donation/index.html @@ -0,0 +1,173 @@ + + + + Albert - Donating + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Donating

+

If you found here, you are probably thinking about donating some bucks for the development of your favorite keyboard launcher 😉. That’s great! It makes me happy to know that people are grateful for what I do and I highly appreciate that you are thinking about a donation. Thank you ❤️

+ + + +
    +
  • +

    SEPA wire transfer:

    + +

    Please leave a mail. Regular wire transfer in the euro area is free of any fees.

    +
  • +
  • +

    GitHub sponsorship:

    + +

    Visit my GitHub Sponsors page. GitHub Sponsors does not charge any fees ℹ️.

    +
  • +
  • +

    Liberapay:

    + +

    Visit the Liberapay donation page. Liberapay does not take a cut of payments ℹ️.

    +
  • +
  • +

    Crypto currency:

    + +

    Please leave a mail. Crypto currency transaction fees vary but are usually low.

    +
  • +
+ +

Other services

+ +
    +
  • +

    PayPal:

    + +

    High fixed fees of 0.35€ make small transactions expensive (e.g. 1€ has a 0.38€ fee) ℹ️. If you want to use PayPal, click here.

    +
  • +
  • +

    Patreon:

    + +

    High relative fee: 5% platform, 5% payment, ~4% PayPal conversion fees. If you want to use Patreon, click here.

    +
  • +
+ +
+
+
+
+ + + +
+ + diff --git a/extension/index.html b/extension/index.html new file mode 100644 index 00000000..f6be718f --- /dev/null +++ b/extension/index.html @@ -0,0 +1,141 @@ + + + + Albert - Extension + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Extension

+

Albert has a flexible, nested plugin system, which gives users and developers the ability to extend its functionality.

+ +

Native plugins

+ +

The native way is to use C++/Qt to write a QPlugin. This gives you the performance of C++ and a host of other advantages. See the docs on native plugins especially the albert namespace. Also check the plugins repo for an up to date list of plugins.

+ +

Python plugins

+ +

The Python plugin adds plugins via Python modules. Check the docs of the Python plugin and the python repo for an up to date list of plugins.

+ +
+
+
+
+ + + +
+ + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..2a6cc66d Binary files /dev/null and b/favicon.ico differ diff --git a/feed.xml b/feed.xml new file mode 100644 index 00000000..b224b5a5 --- /dev/null +++ b/feed.xml @@ -0,0 +1,2748 @@ + + + + Albert launcher news feed + Your latest Albert news + https://albertlauncher.github.io + + + + Albert v0.22.17 released + <p>[albert]</p> +<ul> + <li>Prepend albert to logging categories, default filter debug</li> + <li>Remove logging rules cli arguments +Dont work on some systems and there is QT_LOGGING_RULES for it</li> + <li>Differentiate terminator terminals suffering bug 660</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[mpris:2.0] Ported</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.17">GitHub repositories</a> for details.</p> + + 2023-11-26T02:34:00+00:00 + https://albertlauncher.github.io/2023/11/26/albert-v0.22.17-released.html + https://albertlauncher.github.io/2023/11/26/albert-v0.22.17-released.html + + + + + + Albert v0.22.16 released + <p>[albert]</p> +<ul> + <li>Remove the visual warning on crashes. +This ICE error bug is going to stay around for a while.</li> + <li>Remove autostart option +This is a feature unnecessary complicated to maintain and perfectly fine +to delegate entirely to the desktop environment.</li> + <li>Add “report” RPC +To get the ability to fetch report from the running instance.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[python:2.1.0] +Make plugin major.minor the interface version +Improve UX while installing dependencies</li> + <li>[calc:1.4] Threadsafe and aborting calculations +libcalculate does not mention any thread safety. lock it. +Use async calculate(…) function and poll query validity to abort +unnecessary calculations. This does not only save resources, but is +also required such that the locks above dont introduce stuttering.</li> + <li>[system:1.8] Dont prompt on gnome session logout</li> + <li>[app_xdg:1.8] Use Ubuntu gettext domains</li> +</ul> + +<p>[python]</p> +<ul> + <li>[bitwarden] 2.0 +Add copy-username action</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.16">GitHub repositories</a> for details.</p> + + 2023-11-18T21:48:00+00:00 + https://albertlauncher.github.io/2023/11/18/albert-v0.22.16-released.html + https://albertlauncher.github.io/2023/11/18/albert-v0.22.16-released.html + + + + + + Albert v0.22.15 released + <p>[albert]</p> +<ul> + <li>Fix missing smooth transform in icon provider</li> + <li>Add style information to report</li> + <li>Use X-GNOME-Autostart-Delay</li> + <li>Add proper unix signal handling using self pipe trick</li> + <li>Revert printing to logfile</li> + <li>Give enough time to connect to other instance.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[system:1.8] Dont prompt on gnome session logout</li> + <li>[wbm:1.6] Remove unnecessary cast that may introduce segfaults</li> + <li>[app_xdg:1.8] Use Ubuntu gettext domains</li> +</ul> + +<p>[python]</p> +<ul> + <li>[stub] Fix links</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.15">GitHub repositories</a> for details.</p> + + 2023-11-08T09:31:00+00:00 + https://albertlauncher.github.io/2023/11/08/albert-v0.22.15-released.html + https://albertlauncher.github.io/2023/11/08/albert-v0.22.15-released.html + + + + + + Albert v0.22.14 released + <p>[albert]</p> +<ul> + <li>Let RPCServer take care of crash reports. This is a hotfix to remove the recurring crash report on start, if the app is run more than once, e.g. because the session manager restores a session including albert, but albert is also configured to be autostarted.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.14">GitHub repositories</a> for details.</p> + + 2023-10-06T12:36:00+00:00 + https://albertlauncher.github.io/2023/10/06/albert-v0.22.14-released.html + https://albertlauncher.github.io/2023/10/06/albert-v0.22.14-released.html + + + + + + Albert v0.22.13 released + <p>[albert]</p> +<ul> + <li>Hotfix create missing application paths</li> + <li>Fix pixmaps path</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[qml] Fix version branching logic</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.13">GitHub repositories</a> for details.</p> + + 2023-10-05T11:12:00+00:00 + https://albertlauncher.github.io/2023/10/05/albert-v0.22.13-released.html + https://albertlauncher.github.io/2023/10/05/albert-v0.22.13-released.html + + + + + + Albert v0.22.12 released + <p>[albert]</p> +<ul> + <li>CI/CD: Fix path in sed expression</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[sparkle] Add macos updater plugin prototype</li> +</ul> + +<p>[python]</p> +<ul> + <li>[jetbrains] Add RustRover editor</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.12">GitHub repositories</a> for details.</p> + + 2023-10-03T22:26:00+00:00 + https://albertlauncher.github.io/2023/10/03/albert-v0.22.12-released.html + https://albertlauncher.github.io/2023/10/03/albert-v0.22.12-released.html + + + + + + Albert v0.22.11 released + <p>[albert]</p> +<ul> + <li>Add missing “-executable=” for macdeployqt plugin parameters</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[py] Hotfix: Workaround https://bugreports.qt.io/browse/QTBUG-117153</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.11">GitHub repositories</a> for details.</p> + + 2023-10-03T12:00:00+00:00 + https://albertlauncher.github.io/2023/10/03/albert-v0.22.11-released.html + https://albertlauncher.github.io/2023/10/03/albert-v0.22.11-released.html + + + + + + Albert v0.22.10 released + <p>[albert]</p> +<ul> + <li>CI/CD: Appcast prototype</li> + <li>Store log in cache dir</li> + <li>Add loadtype NOUNLOAD +There are some plugins that dont like to be unloaded (Sparkle, Python). +Add a mechanism to let plugins prohibit users to unload it at runtime.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[py] Fix 6.5.2 only QLogCat quirks. Fixes arch builds</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.10">GitHub repositories</a> for details.</p> + + 2023-10-03T09:12:00+00:00 + https://albertlauncher.github.io/2023/10/03/albert-v0.22.10-released.html + https://albertlauncher.github.io/2023/10/03/albert-v0.22.10-released.html + + + + + + Albert v0.22.9 released + <p>[albert]</p> +<ul> + <li>CD: upload on tag</li> + <li>Revert. NO_SONAME makes troubles on other platforms.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.9">GitHub repositories</a> for details.</p> + + 2023-09-28T15:54:00+00:00 + https://albertlauncher.github.io/2023/09/28/albert-v0.22.9-released.html + https://albertlauncher.github.io/2023/09/28/albert-v0.22.9-released.html + + + + + + Albert v0.22.8 released + <p>[albert]</p> +<ul> + <li>Hotfix fixing RPM based builds</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.8">GitHub repositories</a> for details.</p> + + 2023-09-28T10:08:00+00:00 + https://albertlauncher.github.io/2023/09/28/albert-v0.22.8-released.html + https://albertlauncher.github.io/2023/09/28/albert-v0.22.8-released.html + + + + + + Albert v0.22.7 released + <p>[albert]</p> +<ul> + <li>Restore 6.2 backward compatibility</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.7">GitHub repositories</a> for details.</p> + + 2023-09-27T11:20:00+00:00 + https://albertlauncher.github.io/2023/09/27/albert-v0.22.7-released.html + https://albertlauncher.github.io/2023/09/27/albert-v0.22.7-released.html + + + + + + Albert v0.22.6 released + <p>[albert]</p> +<ul> + <li>Proper tab navigation in handler widget</li> + <li>NativePluginProvider: Use absolute file paths.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[files] Fix “rel. dirpaths of depth 1 have dot prepended” issue</li> + <li>[docs] Fix recent changes to download urls</li> + <li>[qalc] Fix tab order</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.6">GitHub repositories</a> for details.</p> + + 2023-09-26T14:18:00+00:00 + https://albertlauncher.github.io/2023/09/26/albert-v0.22.6-released.html + https://albertlauncher.github.io/2023/09/26/albert-v0.22.6-released.html + + + + + + Albert v0.22.5 released + <p>[albert]</p> +<ul> + <li>CMake: On macOS include the macports lookup path</li> + <li>Fix segfaults on busywait</li> + <li>Hardcode /usr/local/bin to PATH</li> + <li>Move last report ts from settings to state</li> + <li>Add iconlookup in /usr/local/share although not standardized</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[qml] Add hack around lacking DropShadow.samples in Qt &lt;6.4</li> + <li>[apps_macos] v1.3 + <ul> + <li>Find all apps in home dir</li> + <li>Keep apps up to date unsing online search</li> + <li>Localized app names</li> + <li>Add prefpanes</li> + </ul> + </li> + <li>[docs] Disable build on macOS. Licensing does not allow usage on macOS.</li> + <li>[files] Add emtpy trash action on macos</li> + <li>[muparser] Archive muparser. One calculator is enough.</li> + <li>[qml] Fix shadow clipping</li> + <li>[qml] Fix clear on hide breaking history search</li> +</ul> + +<p>[python]</p> +<ul> + <li>[goldendict] Fix import issue</li> + <li>[pass] Add OTP feature</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.5">GitHub repositories</a> for details.</p> + + 2023-09-22T15:24:00+00:00 + https://albertlauncher.github.io/2023/09/22/albert-v0.22.5-released.html + https://albertlauncher.github.io/2023/09/22/albert-v0.22.5-released.html + + + + + + Albert v0.22.4 released + <p>[plugins]</p> +<ul> + <li>[docs] Add cache for docset list</li> + <li>[docs] Use find_program to find brew for ootb cmake config</li> + <li>[muparser] Use find_program to find brew for ootb cmake config</li> + <li>[py] Silently skip dirs and files that are no python modules</li> + <li>[py] iid v2.1: Add config facilities</li> + <li>[qalcualte] Use find_program to find brew for ootb cmake config</li> + <li>[qml] Add Cmd/Ctrl+Enter/Return to show actions</li> + <li>[snippets] Port old snippets</li> +</ul> + +<p>[python]</p> +<ul> + <li>[googletrans] Archive. py-googletrans is broken.</li> + <li>[translators] Add “translators” plugin</li> + <li>[emoji] Add “Use derived emojis” option</li> + <li>[dice_roll] iid 2.0</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.4">GitHub repositories</a> for details.</p> + + 2023-08-30T12:00:00+00:00 + https://albertlauncher.github.io/2023/08/30/albert-v0.22.4-released.html + https://albertlauncher.github.io/2023/08/30/albert-v0.22.4-released.html + + + + + + Albert v0.22.3 released + <p>[albert]</p> +<ul> + <li>Dont show version notification before app is fully initialized</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.3">GitHub repositories</a> for details.</p> + + 2023-08-17T01:20:00+00:00 + https://albertlauncher.github.io/2023/08/17/albert-v0.22.3-released.html + https://albertlauncher.github.io/2023/08/17/albert-v0.22.3-released.html + + + + + + Albert v0.22.2 released + <p>[albert]</p> +<ul> + <li>Fix logging filters</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[ws] Fix websearch breaking users search engines config</li> + <li>[ws] Fix websearch not applying icon when selected from file dialog</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.2">GitHub repositories</a> for details.</p> + + 2023-08-14T18:35:00+00:00 + https://albertlauncher.github.io/2023/08/14/albert-v0.22.2-released.html + https://albertlauncher.github.io/2023/08/14/albert-v0.22.2-released.html + + + + + + Albert v0.22.1 released + <p>[albert]</p> +<ul> + <li>Freedesktop notification implementation</li> + <li>Adopt generic Notification interface on macOS</li> + <li>Fix Linux paste action</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[apps_xdg] Default trigger “apps”</li> + <li>[yp] Update notification function</li> + <li>[py] Fix function warn &gt; warning</li> + <li>[clipboard] Add paste action</li> +</ul> + +<p>[python]</p> +<ul> + <li>[pint,yt] Archived. Require maintenance</li> + <li>[timer] Adopt notification api changes</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.1">GitHub repositories</a> for details.</p> + + 2023-08-14T14:46:00+00:00 + https://albertlauncher.github.io/2023/08/14/albert-v0.22.1-released.html + https://albertlauncher.github.io/2023/08/14/albert-v0.22.1-released.html + + + + + + Albert v0.22.0 released + <h3 id="albert">Albert</h3> + +<ul> + <li>Add commandline option for logging filter rules</li> + <li>Add contour terminal</li> + <li>Add settingswindow shortcut action for plugin settings</li> + <li>Add feature copy and paste</li> + <li>Add “Run empty query” option</li> + <li>Add handler configurations tab</li> + <li>Sort fallbacks</li> + <li>LexSort items having equal score</li> + <li>Doxygen documentation</li> +</ul> + +<p>API 0.22:</p> + +<ul> + <li>TriggerQueryHandler + <ul> + <li>Add bool supportsFuzzyMatching()</li> + <li>Add bool fuzzyMatchingEnabled()</li> + <li>Add void setFuzzyMatchingEnabled(bool)</li> + <li>Add QString trigger() (the user configured one)</li> + </ul> + </li> + <li>GlobalQueryHandler + <ul> + <li>Add applyUsageScore(…).</li> + <li>Inherit TQH, i.e. every handler is a TQH</li> + </ul> + </li> + <li>IndexQueryHandler + <ul> + <li>Reimplement TQH fuzzy methods</li> + <li>Default synopsis <filter></filter></li> + </ul> + </li> + <li>Plugin system + <ul> + <li>Revert multithreaded plugin laoding (Qt makes problems everywhere)</li> + <li>Statically inject metadata, use it for PluginInstances</li> + <li>Move native plugin interface into plugin:: namespace</li> + <li>Cache/Conf/Data dirs per plugin only (were per Extension)</li> + <li>Add PluginInstance::extensions()</li> + <li>Add Template based ExtensionPlugin(Instance)</li> + <li>Make native plugin a template class to allow subclassing any QObject</li> + </ul> + </li> + <li>Frontend: + <ul> + <li>Add Frontend::winId, Move the window quirks to the core</li> + <li>Use appwide input history file</li> + <li>Add generic qml/widgets icon provider to interface</li> + <li>Add generic icon provider, creating icons on the fly</li> + </ul> + </li> + <li>Fuctions and macros: + <ul> + <li>Put all free functions in albert.h</li> + <li>Add openUrl QUrl overload</li> + <li>Add convenience macros for user property definition</li> + <li>Require albert logging category to pass the name</li> + <li>Add state file</li> + <li>Add global settings factory</li> + </ul> + </li> + <li>Rename History to InputHistory</li> + <li>Drop QueryHandler convenience class</li> + <li>Drop global albert.h include</li> +</ul> + +<h3 id="plugins">Plugins</h3> + +<ul> + <li>[clipboard] + <ul> + <li>Add paste action</li> + </ul> + </li> + <li>[wbm] + <ul> + <li>Remove option “display icon”</li> + <li>Appwide input history</li> + </ul> + </li> + <li>[websearch] + <ul> + <li>Adopt to sorted fallbacks, drop dragndrop in listview</li> + <li>Add drag’n’drop image feature</li> + </ul> + </li> + <li>[snippets] + <ul> + <li>Add paste action</li> + <li>Snippets are now required to be txt files!</li> + </ul> + </li> + <li>[qml:2.0] Revamped QML frontend</li> + <li>[python] + <ul> + <li>Mimic internal api as close as possible</li> + <li>Attach logging functions to plugin modules</li> + <li>Expose albert::setClipboardTextAndPaste</li> + <li>Expose albert::Notification</li> + </ul> + </li> + <li>[files] + <ul> + <li>Show filePath instead path in subtext</li> + <li>Add option for case sentivity of fs browsers.</li> + <li>Add user property for inline config</li> + </ul> + </li> +</ul> + +<h3 id="python-plugins">Python plugins</h3> + +<ul> + <li>Interface v2.0 stub</li> + <li>[emoji] New generic and platform agnostic emoji implementation</li> + <li>[duckduckgo] Add extension</li> + <li>[color] Add extension</li> +</ul> + +<p>And loads of other changes…</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.22.0">GitHub repositories</a> for details.</p> + + 2023-08-12T22:43:00+00:00 + https://albertlauncher.github.io/2023/08/12/albert-v0.22.0-released.html + https://albertlauncher.github.io/2023/08/12/albert-v0.22.0-released.html + + + + + + Albert v0.21.1 released + <p>[albert]</p> +<ul> + <li>Add cmd/ctrl + number tab navigation in settings</li> + <li>Automatically add hpp and qml files to plugin projects</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[docs:1.2] Polish. Fix #106</li> + <li>Fix misleading comment in config widget</li> +</ul> + +<p>[python]</p> +<ul> + <li>[stub] Add missing imports to stub file</li> + <li>[tex_to_unicode] Fix crash due to wrong type annotation</li> + <li>[emoji] Fix #179. Call cacheLocation as method of self.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.21.1">GitHub repositories</a> for details.</p> + + 2023-06-27T12:41:00+00:00 + https://albertlauncher.github.io/2023/06/27/albert-v0.21.1-released.html + https://albertlauncher.github.io/2023/06/27/albert-v0.21.1-released.html + + + + + + Albert v0.21.0 released + <p>[albert]</p> +<ul> + <li>v0.21.0 + <ul> + <li>Remove <code class="language-plaintext highlighter-rouge">Item::hasActions</code></li> + <li>Add global config, cache and data location functions</li> + <li>Change <code class="language-plaintext highlighter-rouge">RankItem::score</code> type to float <code class="language-plaintext highlighter-rouge">(0,1]</code></li> + <li>Make queries pointers in handler functions</li> + <li>Add function to get global network manager</li> + <li>Use explicit named query handling methods (no parameter overloading) <code class="language-plaintext highlighter-rouge">handleTriggerQuery</code> and <code class="language-plaintext highlighter-rouge">handleGlobalQuery</code>. This reduces confusion, avoids annoying extra boilerplate to disambiguate methods to avoid hide-virtual warnings and serves as a lowest common denominator on a language/naming level since these features may not be supported by script languages (e.g. Python).</li> + </ul> + </li> + <li>Settings window + <ul> + <li>Add a new search widget in settingswindow</li> + <li>Make handlers of all types optionable</li> + <li>Make window and search widgets tabs in the settings window</li> + </ul> + </li> + <li>Change usagedatabase location to datadir</li> + <li>Change IPC socket path to <code class="language-plaintext highlighter-rouge">$CACHEDIR/albert/ipc_socket</code>. Was <code class="language-plaintext highlighter-rouge">$CACHEDIR/albert_socket</code>.</li> + <li>Fix triggered global query MRU sort</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>New extensions: + <ul> + <li>[docs] Reduced set of Zeal docsets at hands</li> + <li>[clipboard] Clipboard history</li> + </ul> + </li> + <li>[contacts:1.2] + <ul> + <li>Formatting: Remove Apple specific braces</li> + </ul> + </li> + <li>[snip:1.3] + <ul> + <li>Add “Add” and “Remove” button in config widget</li> + <li>Add “Add snippet” item on “add” query</li> + <li>Add “Remove” action to snippet items</li> + </ul> + </li> + <li>[python:1.8] Adopt API v0.21. New interface version iid 1.0 + <ul> + <li>Add <code class="language-plaintext highlighter-rouge">Extension.cache</code>-, <code class="language-plaintext highlighter-rouge">config</code>- and <code class="language-plaintext highlighter-rouge">dataLocation</code></li> + <li>Expose <code class="language-plaintext highlighter-rouge">FallbackHandler</code></li> + <li>Expose <code class="language-plaintext highlighter-rouge">TriggerQueryHandler</code></li> + <li>Expose <code class="language-plaintext highlighter-rouge">GlobalQueryHandler</code></li> + <li>Expose <code class="language-plaintext highlighter-rouge">QueryHandler</code></li> + <li>Expose <code class="language-plaintext highlighter-rouge">IndexQueryHandler</code></li> + <li>Expose abstract <code class="language-plaintext highlighter-rouge">Item</code> class entirely such that plugins can subclass it</li> + <li>Proper multi extension registration</li> + <li>Move interface spec into python stub file (yay!)</li> + <li>Use pointer for queries</li> + <li>Remove global cache/config/data dir functions</li> + </ul> + </li> + <li>[all] Adopt API v0.21.0</li> +</ul> + +<p>[python]</p> +<ul> + <li>Add stub file for type hinting and documentation in IDEs</li> + <li>New extensions: + <ul> + <li>[coingecko] Crypto currencies</li> + <li>[mathematica] iid:1.0 port</li> + </ul> + </li> + <li>[all] Adopt iid v1.0</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.21.0">GitHub repositories</a> for details.</p> + + 2023-06-23T16:57:00+00:00 + https://albertlauncher.github.io/2023/06/23/albert-v0.21.0-released.html + https://albertlauncher.github.io/2023/06/23/albert-v0.21.0-released.html + + + + + + Prebuilt master branch packages available + <p>Albert master branch is now available as packages on OBS.</p> + +<ul> + <li>More details <a href="https://build.opensuse.org/package/show/home:manuelschneid3r:devel/albert">here</a>.</li> + <li>Get the packages <a href="https://software.opensuse.org//download.html?project=home%3Amanuelschneid3r%3Adevel&amp;package=albert">here</a></li> +</ul> + +<p>Hope this makes the nerds happy and the releases even more stable.</p> + + 2023-06-19T11:00:00+00:00 + https://albertlauncher.github.io/2023/06/19/devel-repos-on-obs.html + https://albertlauncher.github.io/2023/06/19/devel-repos-on-obs.html + + + + + + Albert v0.20.14 released + <p>[albert]</p> +<ul> + <li>Sort triggerwidget by name rather than id</li> + <li>Avoid segfaults when setting hotkey failed.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[ws] fix oversized text in config</li> + <li>[sys:1.6] Dynamic default commands.</li> + <li>[app_xdg] Remove content margins of settings widget</li> + <li>[system] Add lxqt defaults</li> +</ul> + +<p>[python]</p> +<ul> + <li>[python_eval:1.3] Fix type of result in item subtext</li> + <li>[locate:1.7] Fix lambda capture</li> + <li>remove api_test</li> + <li>[aur:1.6] Fix install action</li> + <li>[jetbrains_projects] handle missing projectOpenTimestamp</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.14">GitHub repositories</a> for details.</p> + + 2023-05-01T15:59:00+00:00 + https://albertlauncher.github.io/2023/05/01/albert-v0.20.14-released.html + https://albertlauncher.github.io/2023/05/01/albert-v0.20.14-released.html + + + + + + Albert v0.20.13 released + <p>[plugins]</p> +<ul> + <li>[ws] Show space markers in trigger section</li> + <li>[vbox:v1.3] Port iid:0.5</li> + <li>[dice_roll] iid:0.5 v1.0</li> + <li>[emoji] iid:0.5 v1.0</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.13">GitHub repositories</a> for details.</p> + + 2023-03-30T15:47:00+00:00 + https://albertlauncher.github.io/2023/03/30/albert-v0.20.13-released.html + https://albertlauncher.github.io/2023/03/30/albert-v0.20.13-released.html + + + + + + Albert v0.20.12 released + <p>[plugins]</p> +<ul> + <li>[system:1.4] Make items checkable and titles customizeable</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.12">GitHub repositories</a> for details.</p> + + 2023-03-29T18:18:00+00:00 + https://albertlauncher.github.io/2023/03/29/albert-v0.20.12-released.html + https://albertlauncher.github.io/2023/03/29/albert-v0.20.12-released.html + + + + + + Albert v0.20.11 released + <p>[albert]</p> +<ul> + <li>Respect whitespaces in rpcs</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbm] Add option “Center on active screen”</li> + <li>[app_xdg] Add action “reveal desktop entry”</li> + <li>[files] Workaround Qt appending slash to root paths</li> +</ul> + +<p>[python]</p> +<ul> + <li>[bitwarden] 1.1 (iid: 0.5)</li> + <li>[vpn] Add wireguard to connection types</li> + <li>[pacman] Fix out of scope lambda vars</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.11">GitHub repositories</a> for details.</p> + + 2023-03-27T12:08:00+00:00 + https://albertlauncher.github.io/2023/03/27/albert-v0.20.11-released.html + https://albertlauncher.github.io/2023/03/27/albert-v0.20.11-released.html + + + + + + Albert v0.20.10 released + <ul> + <li>[vpn] Add wireguard to connection types</li> + <li>Several bugfixes</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.10">GitHub repositories</a> for details.</p> + + 2023-03-20T13:38:00+00:00 + https://albertlauncher.github.io/2023/03/20/albert-v0.20.10-released.html + https://albertlauncher.github.io/2023/03/20/albert-v0.20.10-released.html + + + + + + Albert v0.20.9 released + <p>[albert]</p> +<ul> + <li>Update supported terminals (add st and blackbox, remove tilda)</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbm] Hide task bar entry</li> + <li>[ws] Add google scholar to defaults</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.9">GitHub repositories</a> for details.</p> + + 2023-03-13T13:41:00+00:00 + https://albertlauncher.github.io/2023/03/13/albert-v0.20.9-released.html + https://albertlauncher.github.io/2023/03/13/albert-v0.20.9-released.html + + + + + + Albert v0.20.8 released + <p>[albert]</p> +<ul> + <li>Tilda support</li> + <li>Print font in report</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[contacts_mac] v1.0</li> + <li>[wbm] Dont hide window when control modifier is hold</li> + <li>[xdgapps] Do not inherit QT_QPA_PLATFORM to launched apps</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.8">GitHub repositories</a> for details.</p> + + 2023-02-11T09:22:00+00:00 + https://albertlauncher.github.io/2023/02/11/albert-v0.20.8-released.html + https://albertlauncher.github.io/2023/02/11/albert-v0.20.8-released.html + + + + + + Albert v0.20.7 released + <p>[albert]</p> +<ul> + <li>Clear icon cache if unused for a minute.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbm] Postpone query deletion until hide event to prevent busy wait for destruction</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.7">GitHub repositories</a> for details.</p> + + 2023-02-10T07:47:00+00:00 + https://albertlauncher.github.io/2023/02/10/albert-v0.20.7-released.html + https://albertlauncher.github.io/2023/02/10/albert-v0.20.7-released.html + + + + + + Albert v0.20.6 released + <p>[albert]</p> +<ul> + <li>Close settingswindow on ctrl+w</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbm] Avoid segfaults on failing screenAt()</li> +</ul> + +<p>[python]</p> +<ul> + <li>[jetbrains:1.1] Polish. Fix Macos.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.6">GitHub repositories</a> for details.</p> + + 2023-02-08T09:33:00+00:00 + https://albertlauncher.github.io/2023/02/08/albert-v0.20.6-released.html + https://albertlauncher.github.io/2023/02/08/albert-v0.20.6-released.html + + + + + + Albert v0.20.5 released + <p>[albert]</p> +<ul> + <li>Drop usage weight. Add option to prioritize perfect matches. See #695</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.5">GitHub repositories</a> for details.</p> + + 2023-02-01T13:54:00+00:00 + https://albertlauncher.github.io/2023/02/01/albert-v0.20.5-released.html + https://albertlauncher.github.io/2023/02/01/albert-v0.20.5-released.html + + + + + + Albert v0.20.4 released + <p>[albert]</p> +<ul> + <li>Reintroduce telemetry</li> + <li>Fix disfunctional link in settings</li> +</ul> + +<p>[python]</p> +<ul> + <li>[tex_to_unicode] py interface 0.5</li> + <li>[vpn] 1.1 (iid: 0.5)</li> + <li>[yt] v1.3 create tmp dirs lazily</li> + <li>[jetbrains] 1.0 (iid:0.5)</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.4">GitHub repositories</a> for details.</p> + + 2023-01-31T11:24:00+00:00 + https://albertlauncher.github.io/2023/01/31/albert-v0.20.4-released.html + https://albertlauncher.github.io/2023/01/31/albert-v0.20.4-released.html + + + + + + Albert v0.20.3 released + <p>[albert]</p> +<ul> + <li>Remove plugin registry from global search</li> + <li>Add -Wno-inline</li> + <li>Fix line breaks in errors displayed in settings</li> + <li>Tray icon isMask</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[platform_mac] 1.0</li> + <li>[py] Add button to open the dependency dir</li> +</ul> + +<p>[python]</p> +<ul> + <li>[pint] 1.0 (currency converter)</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.3">GitHub repositories</a> for details.</p> + + 2023-01-27T16:22:00+00:00 + https://albertlauncher.github.io/2023/01/27/albert-v0.20.3-released.html + https://albertlauncher.github.io/2023/01/27/albert-v0.20.3-released.html + + + + + + Albert v0.20.2 released + <p>[plugins]</p> +<ul> + <li>[py] Quote cd path</li> +</ul> + +<p>[python]</p> +<ul> + <li>[pacman] v1.6 iid:0.5</li> + <li>[timer] v1.4 iid:0.5</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.2">GitHub repositories</a> for details.</p> + + 2023-01-25T18:50:00+00:00 + https://albertlauncher.github.io/2023/01/25/albert-v0.20.2-released.html + https://albertlauncher.github.io/2023/01/25/albert-v0.20.2-released.html + + + + + + Albert v0.20.1 released + <p>[albert]</p> +<ul> + <li>Fix pedantic warnings</li> + <li>BW tray</li> + <li>Use env vars to set default locale</li> + <li>Strech config widget</li> + <li>Fix segfaults on empty icon name lookup</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>Lots of UI polishing</li> + <li>[qalc] Fix precision probles</li> + <li>[websearch] Add google maps to defaults</li> + <li>[datetime] Use default locale</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.1">GitHub repositories</a> for details.</p> + + 2023-01-25T15:09:00+00:00 + https://albertlauncher.github.io/2023/01/25/albert-v0.20.1-released.html + https://albertlauncher.github.io/2023/01/25/albert-v0.20.1-released.html + + + + + + Albert v0.20.0 released + <p>[albert]</p> +<ul> + <li>Config widget per plugin (v0.20)</li> + <li>Make Triggerwidget edit trigger on double click anywhere</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[chromium:1.4] Add path reset button</li> +</ul> + +<p>[python]</p> +<ul> + <li>[locate] 1.6</li> + <li>[docker] 1.3</li> +</ul> + +<p>Lots of polishing around the new UI</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.20.0">GitHub repositories</a> for details.</p> + + 2023-01-24T02:48:00+00:00 + https://albertlauncher.github.io/2023/01/24/albert-v0.20.0-released.html + https://albertlauncher.github.io/2023/01/24/albert-v0.20.0-released.html + + + + + + Albert v0.19.4 released + <p>[plugins]</p> +<ul> + <li>[qalc] v1.0 Prototype</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.19.4">GitHub repositories</a> for details.</p> + + 2023-01-22T22:44:00+00:00 + https://albertlauncher.github.io/2023/01/22/albert-v0.19.4-released.html + https://albertlauncher.github.io/2023/01/22/albert-v0.19.4-released.html + + + + + + Albert v0.19.3 released + <p>[albert]</p> +<ul> + <li>[md] Use content if long description is a file path</li> + <li>Use both, extension and item id, as icon cache key</li> + <li>Add standard pixmaps support to iconprovider</li> + <li>Workaround terminator bug #702</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbm] Add Nord theme</li> + <li>[calc] Respect LC_*</li> + <li>[chromium] Fix filewatcher does not watch bookmarks</li> + <li>[wbm] Do not exit on missing themes</li> + <li>[wbm] Use generic placeholder color for input hint</li> + <li>[app:xdg] Add exec key option. Also exclude ‘env’ in exec keys.</li> + <li>[wbm] Fix clipped label</li> + <li>[WBM] fix open theme file action</li> + <li>[files] Provide trash item</li> + <li>[wbm] Fix list view height margins</li> +</ul> + +<p>[python]</p> +<ul> + <li>[trash] Drop. Provided by files plugin now.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.19.3">GitHub repositories</a> for details.</p> + + 2023-01-22T14:36:00+00:00 + https://albertlauncher.github.io/2023/01/22/albert-v0.19.3-released.html + https://albertlauncher.github.io/2023/01/22/albert-v0.19.3-released.html + + + + + + Albert v0.19.2 released + <p>[plugins]</p> +<ul> + <li>[datetime] v1.0</li> + <li>[urlhandler] Fix tld validation</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.19.2">GitHub repositories</a> for details.</p> + + 2023-01-18T22:26:00+00:00 + https://albertlauncher.github.io/2023/01/18/albert-v0.19.2-released.html + https://albertlauncher.github.io/2023/01/18/albert-v0.19.2-released.html + + + + + + Albert v0.19.1 released + <p>[albert]</p> +<ul> + <li>Fix recurring new version info</li> + <li>Allow copyconstruction of rank and index items</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[calc] 1.5 + <ul> + <li>Inline evaluation</li> + <li>Default trigger ‘=’</li> + <li>Synopsis</li> + </ul> + </li> + <li>[wbm] Add item activation using Ctrl+O</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.19.1">GitHub repositories</a> for details.</p> + + 2023-01-18T20:08:00+00:00 + https://albertlauncher.github.io/2023/01/18/albert-v0.19.1-released.html + https://albertlauncher.github.io/2023/01/18/albert-v0.19.1-released.html + + + + + + Albert v0.19.0 released + <p>[albert]</p> +<ul> + <li>Add reload actinon for plugins</li> + <li>Support Console term</li> + <li>Fix backgroundexecutor not using move semantics</li> + <li>0.19 interface + <ul> + <li>Revert to dedicated FallbackHandler</li> + <li>Clean interface using opaque pointers</li> + <li>GlobalQueryHandler::rankItems -&gt; handlyQuery</li> + <li>IndexQueryHandlers have to set items directly</li> + </ul> + </li> + <li>Refactoring</li> + <li>Show plugin header files in IDEs</li> + <li>Use handcrafted icon lookup again</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbs] 1.3 add query handler providing themes</li> + <li>[apps_xdg] 1.5 Remove desktop indexing</li> + <li>[ssh] 1.5 + <ul> + <li>Fix ssh connect containing user or port</li> + <li>Allow specifying a command to send to the host</li> + <li>Add action (keep/close term)</li> + </ul> + </li> +</ul> + +<p>[python]</p> +<ul> + <li>[yt] v1.2 (iid:0.5)</li> + <li>[kill] v1.1 (iid:0.5)</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.19.0">GitHub repositories</a> for details.</p> + + 2023-01-18T14:25:00+00:00 + https://albertlauncher.github.io/2023/01/18/albert-v0.19.0-released.html + https://albertlauncher.github.io/2023/01/18/albert-v0.19.0-released.html + + + + + + Albert v0.18.13 released + <p>Fix invalid submodule link breaking OBS builds</p> + +<p>[plugins]</p> +<ul> + <li>[chromium] Fix config loading</li> +</ul> + +<p>[python]</p> +<ul> + <li>[goldendict] 1.1 (0.18)</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.13">GitHub repositories</a> for details.</p> + + 2023-01-13T14:07:00+00:00 + https://albertlauncher.github.io/2023/01/13/albert-v0.18.13-released.html + https://albertlauncher.github.io/2023/01/13/albert-v0.18.13-released.html + + + + + + Albert v0.18.12 released + <p>[albert]</p> +<ul> + <li>Always print report in debug mode</li> + <li>Add platform, lang and locale to report</li> + <li>Support Terminology</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[mac_apps] Dons show system service apps +! Add default md_id if not available</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.12">GitHub repositories</a> for details.</p> + + 2023-01-13T02:08:00+00:00 + https://albertlauncher.github.io/2023/01/13/albert-v0.18.12-released.html + https://albertlauncher.github.io/2023/01/13/albert-v0.18.12-released.html + + + + + + Albert v0.18.11 released + <p>[albert]</p> +<ul> + <li>Add missing long description in plugin metadata.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>Handcraft tld validation. Make handler global.</li> + <li>Add metadata LONG_DESCRIPTON to docs</li> + <li>[py] Create site-packages dir if necessary</li> + <li>Fix open snippet</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.11">GitHub repositories</a> for details.</p> + + 2023-01-11T01:46:00+00:00 + https://albertlauncher.github.io/2023/01/11/albert-v0.18.11-released.html + https://albertlauncher.github.io/2023/01/11/albert-v0.18.11-released.html + + + + + + Albert v0.18.10 released + <p>Fixes, minor changes and requests</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.10">GitHub repositories</a> for details.</p> + + 2023-01-09T00:23:00+00:00 + https://albertlauncher.github.io/2023/01/09/albert-v0.18.10-released.html + https://albertlauncher.github.io/2023/01/09/albert-v0.18.10-released.html + + + + + + Albert v0.18.9 released + <p>[plugins]</p> +<ul> + <li>[py] Ask user to install missing python dependencies in terminal</li> +</ul> + +<p>[python]</p> +<ul> + <li>googletrans 1.0</li> + <li>pass 1.2</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.9">GitHub repositories</a> for details.</p> + + 2023-01-07T14:21:00+00:00 + https://albertlauncher.github.io/2023/01/07/albert-v0.18.9-released.html + https://albertlauncher.github.io/2023/01/07/albert-v0.18.9-released.html + + + + + + Albert v0.18.8 released + <p>[albert]</p> +<ul> + <li>Give sensible defaults for usage history</li> + <li>Fix memory weight not being loaded</li> + <li>Merge frontend tab into general</li> + <li>Support foot terminal</li> + <li>Check for other instances <em>before</em> laoding plugins</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>Avoid starting indexing on file index serialization</li> +</ul> + +<p>[python]</p> +<ul> + <li>googletrans 1.0</li> + <li>pass 1.2</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.8">GitHub repositories</a> for details.</p> + + 2023-01-07T09:18:00+00:00 + https://albertlauncher.github.io/2023/01/07/albert-v0.18.8-released.html + https://albertlauncher.github.io/2023/01/07/albert-v0.18.8-released.html + + + + + + Albert v0.18.7 released + <p>[albert]</p> +<ul> + <li>Drop albertctl. Back to <code class="language-plaintext highlighter-rouge">albert &lt;command&gt;</code></li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.7">GitHub repositories</a> for details.</p> + + 2023-01-05T19:03:00+00:00 + https://albertlauncher.github.io/2023/01/05/albert-v0.18.7-released.html + https://albertlauncher.github.io/2023/01/05/albert-v0.18.7-released.html + + + + + + Albert v0.18.6 released + <p>[albert]</p> +<ul> + <li>sendTrayNotification(…) add time parameter</li> + <li>Support wezterm.</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>Python 1.5 + <ul> + <li>sendTrayNotification(…) add ms parameter</li> + </ul> + </li> + <li>Hash 1.5 + <ul> + <li>Global query handler</li> + <li>Add copy 8 char action</li> + </ul> + </li> +</ul> + +<p>[python]</p> +<ul> + <li>Pomodoro 1.1</li> + <li>CopyQ 1.2</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.6">GitHub repositories</a> for details.</p> + + 2023-01-05T14:42:00+00:00 + https://albertlauncher.github.io/2023/01/05/albert-v0.18.6-released.html + https://albertlauncher.github.io/2023/01/05/albert-v0.18.6-released.html + + + + + + Albert v0.18.5 released + <p>[albert]</p> +<ul> + <li>Support Kitty terminal</li> + <li>Support Alacritty terminal +[plugins]</li> + <li>[wbm] Show synopsis in tooltip</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.5">GitHub repositories</a> for details.</p> + + 2023-01-04T13:06:00+00:00 + https://albertlauncher.github.io/2023/01/04/albert-v0.18.5-released.html + https://albertlauncher.github.io/2023/01/04/albert-v0.18.5-released.html + + + + + + Albert v0.18.4 released + <p>[albert]</p> +<ul> + <li>fix single instance mechanism</li> +</ul> + +<p>[python]</p> +<ul> + <li>Archive docker, curious segfaults</li> + <li>Port 0.5 aur</li> + <li>Port 0.5 awiki</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.4">GitHub repositories</a> for details.</p> + + 2023-01-03T21:09:00+00:00 + https://albertlauncher.github.io/2023/01/03/albert-v0.18.4-released.html + https://albertlauncher.github.io/2023/01/03/albert-v0.18.4-released.html + + + + + + Albert v0.18.3 released + <p>[plugins]</p> +<ul> + <li>[wbm] Fix theme dir paths</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.3">GitHub repositories</a> for details.</p> + + 2023-01-02T23:30:00+00:00 + https://albertlauncher.github.io/2023/01/02/albert-v0.18.3-released.html + https://albertlauncher.github.io/2023/01/02/albert-v0.18.3-released.html + + + + + + Albert v0.18.2 released + <p>[albert]</p> +<ul> + <li>Better diagnostics on frontend loading</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.2">GitHub repositories</a> for details.</p> + + 2023-01-02T23:04:00+00:00 + https://albertlauncher.github.io/2023/01/02/albert-v0.18.2-released.html + https://albertlauncher.github.io/2023/01/02/albert-v0.18.2-released.html + + + + + + Albert v0.18.1 released + <p>[albert]</p> +<ul> + <li>Fix armhf builds</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.1">GitHub repositories</a> for details.</p> + + 2023-01-01T23:25:00+00:00 + https://albertlauncher.github.io/2023/01/01/albert-v0.18.1-released.html + https://albertlauncher.github.io/2023/01/01/albert-v0.18.1-released.html + + + + + + Albert v0.18.0 released + <p>Note that there have been some breaking changes. The new plugin id format changed settings keys and config/cache/data paths. If you want to keep your old plugin settings you have to adjust the section names in the config file and adjust the paths in your config/cache/data dirs. (e.g. from <code class="language-plaintext highlighter-rouge">org.albert.files</code> to <code class="language-plaintext highlighter-rouge">files</code>). I’d recommend to start from scratch though, since too much changed.</p> + +<p>[albert]</p> + +<ul> + <li>Shorter plugin ids. (This breaks configs)</li> + <li>Customizeable triggers (if the extension permits)</li> + <li>Central plugin management</li> + <li>More useful plugin metadata</li> + <li>User customizable scoring parameters + <ul> + <li>Add user option memory decay</li> + <li>Add user option memory weight</li> + </ul> + </li> + <li>Finally scoring for <em>all</em> items</li> + <li>Inputline history goes to a file now</li> + <li>Settingswidget overhaul</li> + <li>Hello Qt6, C++20 👋</li> + <li>Entirely new interface (see header files) + <ul> + <li>Value typed Action class based on std::function</li> + <li>Drop all former *Action classes + <ul> + <li>Free functions replace and extend action subclass functionality</li> + </ul> + </li> + <li>Updates to Item interface</li> + <li>New and extended query handling interface classes</li> + <li>Extended frontend interface</li> + <li>New abstract plugin provider interface + <ul> + <li>Common plugin metadata</li> + <li>Maintainership is a thing now!</li> + </ul> + </li> + <li>Add StandardItem factory for better type deduction and readability</li> + <li>Add bgexecutor class</li> + <li>Add timeprinter</li> + <li>Leaner logging</li> + <li>Query design change (realtime, global, indexed)</li> + <li>Add extension watcher template class</li> + <li>Move XDG into the lib.</li> + </ul> + </li> +</ul> + +<p>[plugins]</p> + +<p>python 1.4 (0.18)</p> +<ul> + <li>Use system pybind</li> + <li>0.5 interface</li> + <li>auto pip dependencies</li> +</ul> + +<p>files 1.2 (0.18)</p> +<ul> + <li>Drop bashlike completions. We have items.</li> + <li>Settings per root path</li> + <li>Add name filter dialog</li> + <li>Add option watch filesystem</li> + <li>Add option max depth</li> +</ul> + +<p>snippets 1.1 (0.18)</p> +<ul> + <li>files instead database</li> +</ul> + +<p>widgetsboxmodel 1.2 (0.18)</p> +<ul> + <li>Fading busy indicating settingsbutton</li> + <li>Drop rich text</li> + <li>Proper async query witout flicker using statemachines</li> + <li>Add input hint</li> + <li>Add option show fallbacks on empty query</li> + <li>Add option history search</li> +</ul> + +<p>Also new or ported to 0.18</p> +<ul> + <li>calculator 1.3 (0.18)</li> + <li>system 1.2 (0.18)</li> + <li>applications_xdg 1.3 (0.18)</li> + <li>applications_macos 1.0 (0.18)</li> + <li>ssh 1.3 (0.18)</li> + <li>terminal 1.2 (0.18)</li> + <li>chromium 1.2 (0.18)</li> + <li>websearch 1.2 (0.18)</li> + <li>urlhander 1.0 (0.18)</li> + <li>hash 1.4 (0.18)</li> + <li>template 0.0 (0.18)</li> + <li>debug 1.1 (0.18)</li> +</ul> + +<p>Archived</p> + +<ul> + <li>firefox</li> + <li>qml box model</li> + <li>mpris</li> + <li>vbox</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.18.0">GitHub repositories</a> for details.</p> + + 2022-12-31T16:06:00+00:00 + https://albertlauncher.github.io/2022/12/31/albert-v0.18.0-released.html + https://albertlauncher.github.io/2022/12/31/albert-v0.18.0-released.html + + + + + + Albert v0.17.4 released + <ul> + <li>Fix https://github.com/albertlauncher/albert/issues/1117</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.17.4">GitHub repositories</a> for details.</p> + + 2022-10-04T22:43:00+00:00 + https://albertlauncher.github.io/2022/10/04/albert-v0.17.4-released.html + https://albertlauncher.github.io/2022/10/04/albert-v0.17.4-released.html + + + + + + Albert v0.17.3 released + <p>[albert]</p> +<ul> + <li>Sloppy hotfix #1088. 0.18 will change DB entirely anyway.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.17.3">GitHub repositories</a> for details.</p> + + 2022-07-05T22:25:00+00:00 + https://albertlauncher.github.io/2022/07/05/albert-v0.17.3-released.html + https://albertlauncher.github.io/2022/07/05/albert-v0.17.3-released.html + + + + + + Albert v0.17.2 released + <p>[albert]</p> +<ul> + <li>Drop telemetry</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[wbm] Hotfix completion</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.17.2">GitHub repositories</a> for details.</p> + + + 2020-12-24T00:56:00+00:00 + https://albertlauncher.github.io/2020/12/24/albert-v0.17.2-released.html + https://albertlauncher.github.io/2020/12/24/albert-v0.17.2-released.html + + + + + + Albert v0.17.1 released + <p>[albert]</p> +<ul> + <li>Fix OBS builds</li> + <li>Several fixes</li> + <li>Archive virtualbox python extension</li> +</ul> + +<p>Check the GitHub repositories for details. +https://github.com/albertlauncher/albert/commits/v0.17.1</p> + + 2020-12-21T01:39:00+00:00 + https://albertlauncher.github.io/2020/12/21/albert-v0.17.1-released.html + https://albertlauncher.github.io/2020/12/21/albert-v0.17.1-released.html + + + + + + Albert v0.17.0 released + <p>[albert]</p> +<ul> + <li>Again break init order of Item for the sake of less boilerplate. Presumed this frequency indexStrings &gt; actions &gt; completion &gt; urgency.</li> + <li>Let shells handle splitting/quoting</li> + <li>Add core as QueryHandler. Add restart, quit, settings action. Also to tray and cli.</li> + <li>Drop shutil:: and let shells handle lexing</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>FINALLY ARCHIVE EXTERNAL EXTENSIONS.</li> + <li>New extension state : MissingDependencies</li> + <li>Disable settings items of exts in this new state</li> + <li>Use pybind v2.6.1</li> + <li>[term] v1.1 Let shells handle lexing</li> + <li>[calc] Add muparserInt option for hex calculations</li> + <li>Use QLoggingCategory in all extensions</li> + <li>Implicit dependency check for executables and Python modules</li> + <li>[Pyv1.3] Adopt core changes. PyAPIv0.4. Changes to the API: + <ul> + <li>embedded module is called ‘albert’ now</li> + <li>Reflect core api changes: + <ul> + <li>Positional arguments of the standard item changes</li> + <li>New semantics of the term action constructors + <ul> + <li>String commandline will be executed in a shell</li> + <li>StringList commandline will be executed without shell</li> + </ul> + </li> + </ul> + </li> + <li>Add core version of iconLookup(StringList)</li> + <li>New metadata labels: + <ul> + <li><strong>version</strong>: new versioning scheme iid_maj.iid_min.ext_version</li> + <li><strong>title</strong>: former <strong>prettyname</strong></li> + <li><strong>authors</strong>: string or list</li> + <li><strong>exec_deps</strong>: string or list</li> + <li><strong>py_deps</strong>: string or list</li> + <li><strong>triggers</strong>: string or list</li> + </ul> + </li> + <li>Allow multiple triggers</li> + <li>Allow multiple authors</li> + </ul> + </li> +</ul> + +<p>[python]</p> +<ul> + <li>Adpot APIv0.4 changes</li> + <li>[locate] ‘ for basename ‘’ for full path lookups</li> + <li>[timer] Make notification stay.</li> + <li>[baseconv] Python-style base prefixes to detect source base</li> + <li>[texdoc] Add texdoc plugin</li> + <li>[aur] add yay helper</li> +</ul> + +<p>Check the GitHub repositories for details.</p> + + 2020-12-17T03:41:00+00:00 + https://albertlauncher.github.io/2020/12/17/albert-v0.17.0-released.html + https://albertlauncher.github.io/2020/12/17/albert-v0.17.0-released.html + + + + + + Albert v0.16.4 released + <p>Hotfix for #959</p> + +<p>[albert]</p> +<ul> + <li>Fix tab order. Closes #866</li> + <li>Update stale.yml</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[chromium] Chromium v1.1</li> +</ul> + +<p>[python]</p> +<ul> + <li>[docker] New extension prototype</li> + <li>[timer] Use dbus instead of notify-send</li> + <li>[units] v1.2 including to time conversion</li> +</ul> + +<p>Check the GitHub repositories for details.</p> + + 2020-12-10T03:46:00+00:00 + https://albertlauncher.github.io/2020/12/10/albert-v0.16.4-released.html + https://albertlauncher.github.io/2020/12/10/albert-v0.16.4-released.html + + + + + + Albert v0.16.3 released + <ul> + <li>Hotfix for #955</li> + <li>Archive defunct CoinMarketCap and Bitfinex extensions</li> +</ul> + +<p>Check the GitHub repositories for details.</p> + + 2020-12-03T23:28:00+00:00 + https://albertlauncher.github.io/2020/12/03/albert-v0.16.3-released.html + https://albertlauncher.github.io/2020/12/03/albert-v0.16.3-released.html + + + + + + Albert v0.16.2 released + <p>[albert]</p> +<ul> + <li>Allow multiple instances of albert on different X sessions</li> + <li>Fix super key not registering</li> + <li>Add terms: Elementary, Tilix, QTerminal, Termite</li> + <li>Fix build on FreeBSD</li> + <li>Dont show fallbacks on triggered queries</li> +</ul> + +<p>[plugins]</p> +<ul> + <li>[Applications] Index desktop files on desktop</li> + <li>[firefox] Rework v2</li> + <li>[ssh] Respect the Include keyword</li> + <li>[ssh] Allow hyphens to be part of hostnames</li> + <li>[chromium] Add brave-browser to list of chromium based browsers.</li> +</ul> + +<p>[python]</p> +<ul> + <li>Add an offline emoji picker</li> + <li>Add bitwarden extension</li> + <li>Add xkcd plugin as submodule</li> + <li>Add new extension: node.js evaluator</li> + <li>Add new extension: php evaluator</li> +</ul> + +<p>Check the github repositories for details.</p> + + 2020-11-25T23:49:00+00:00 + https://albertlauncher.github.io/2020/11/25/albert-v0.16.2-released.html + https://albertlauncher.github.io/2020/11/25/albert-v0.16.2-released.html + + + + + + Albert v0.16.1 released + <ul> + <li>[albert] Fix default plugin lookup path</li> + <li>[albert] Fix flicker when changing frontends</li> + <li>[albert] Fix “Terminal option resets after a restart”</li> + <li>[albert] Link libglobalshortcut statically</li> + <li>[albert] Add a build flag for QtCharts</li> + <li>[albert] Drop debug options if favor of QLoggingCategory env vars</li> + <li>[plugins:ssh] Fix input regex. Sort by length then lexically.</li> + <li>[plugins:ssh] Use backward compatible ssh url syntax</li> + <li>[plugins:qml] Consistent form layout</li> + <li>[modules:aur] Sort items by length first</li> +</ul> + +<p>Further the release contains minor changes and fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.16.1">git log</a> for details.</p> + + 2018-12-31T18:07:03+00:00 + https://albertlauncher.github.io/2018/12/31/albert-v0.16.1-released.html + https://albertlauncher.github.io/2018/12/31/albert-v0.16.1-released.html + + + + + + Albert v0.16.0 released + <h2 id="changes">Changes</h2> + +<h3 id="albert">Albert</h3> + +<ul> + <li>Add jekyll website as submodule</li> + <li>New project structure</li> + <li>Derive albert version from CMake project</li> + <li>Let travis build against Ubuntu 18.04 and 16.04</li> + <li>Backward compatibility for Ubuntu 16.04</li> + <li>Build without QtCharts if Qt version below 5.6</li> + <li>Let fuzzy require an additional character. Tolerance: floor((wordlen - 1)/3))</li> + <li>Print logging category to stdout [not all plugins support it yet]</li> +</ul> + +<h3 id="plugins">Plugins</h3> + +<ul> + <li>[Python] Use ast to read metadata without loading the modules</li> + <li>[Term] Change terminal action order: Let “Run w/o term” be the last one</li> + <li>[VBox] Set default build switch for VirtualBox to OFF</li> + <li>[Files] Add fancy icons to mime dialog</li> +</ul> + +<h3 id="modules">Modules</h3> + +<ul> + <li>Additional constraint: Metadata have to be string literals (for ast)</li> + <li>Additional constraint: Name modules according PEP8</li> + <li>[WinSwitch] Add close win action</li> + <li>[VBox] Add VirtualBox extension</li> +</ul> + +<p>Further the release contains minor changes and fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.16.0">git log</a> for details.</p> + + 2018-12-28T20:52:04+00:00 + https://albertlauncher.github.io/2018/12/28/albert-v0.16.0-released.html + https://albertlauncher.github.io/2018/12/28/albert-v0.16.0-released.html + + + + + + Albert v0.15.0 released + <p>This release increases the required versions of the dependencies to Qt 5.9 this means that some distributions will not be supported anymore.</p> + +<p>Major changes:</p> +<ul> + <li>Fancy usage graph in the settings</li> + <li>QML frontend: History search of the input now allows substring matching (Type and navigate)</li> + <li>QML frontend: Store user input of every session</li> + <li>Add extension “Fortune”</li> + <li>Add extension “Window switcher”</li> +</ul> + +<p>Further the release contains minor changes and fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.15.0">git log</a> for details.</p> + + 2018-12-16T17:00:00+00:00 + https://albertlauncher.github.io/2018/12/16/albert-v0.15.0-released.html + https://albertlauncher.github.io/2018/12/16/albert-v0.15.0-released.html + + + + + + Albert v0.14.22 released + <p>This is mostly a fix release. Telemetry is now opt-in. Some new themes and the Pidgin python extension were added.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.22">git log</a> for details.</p> + + 2018-09-21T17:00:00+00:00 + https://albertlauncher.github.io/2018/09/21/albert-v0.14.22-released.html + https://albertlauncher.github.io/2018/09/21/albert-v0.14.22-released.html + + + + + + Albert v0.14.21 released + <p>This is a patch release. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.21">git log</a> for details.</p> + + 2018-06-08T13:28:00+00:00 + https://albertlauncher.github.io/2018/06/08/albert-v0.14.21-released.html + https://albertlauncher.github.io/2018/06/08/albert-v0.14.21-released.html + + + + + + Albert v0.14.20 released + <p>This is a patch release. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.20">git log</a> for details.</p> + + 2018-06-04T10:00:00+00:00 + https://albertlauncher.github.io/2018/06/04/albert-v0.14.20-released.html + https://albertlauncher.github.io/2018/06/04/albert-v0.14.20-released.html + + + + + + Albert v0.14.19 released + <p>This release contains the latest fixes and two new Python extensions:</p> + +<ul> + <li>Datetime. (Time display and conversion. Supersedes the external extension)</li> + <li>Bitfinex. (Quickly access Bitfinex markets)</li> +</ul> + +<p>The file browse mode finally mimics bash completion behavior.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.19">git log</a> for details.</p> + +<p>Further I want to let you know that I will stop posting news on <a href="https://semver.org/">patch releases</a>. +I’ll try to move changes that are recognizeable by users into minor releases. +Note that there are no major releases at the moment since albert is still alpha.</p> + + 2018-05-15T09:00:00+00:00 + https://albertlauncher.github.io/2018/05/15/albert-v0.14.19-released.html + https://albertlauncher.github.io/2018/05/15/albert-v0.14.19-released.html + + + + + + Albert v0.14.18 released + <p>This release contains a hotfix for a bug that made all single file python extensions disappear.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.18">git log</a> for details.</p> + + 2018-03-23T12:00:00+00:00 + https://albertlauncher.github.io/2018/03/23/albert-v0.14.18-released.html + https://albertlauncher.github.io/2018/03/23/albert-v0.14.18-released.html + + + + + + Albert v0.14.17 released + <p>This release contains the latest fixes, minor improvements to the extensions and a new Python extension.</p> + +<p>With the new Python extension <em>Arch Wiki</em> you can search the wiki.archlinux.org mediawiki and directly access articles.</p> + +<p>The applications extension got two new options: <em>Use keywords for lookup</em> and <em>Use generic name for lookup</em>. <em>Keywords</em> and <em>GenericName</em> are keys in the desktop entry whose values can be used for lookup.</p> + +<p>The <em>kvstore</em> extension was renamed to <em>Snippets</em> and got an improved config UI.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.17">git log</a> for details.</p> + + 2018-03-23T11:00:00+00:00 + https://albertlauncher.github.io/2018/03/23/albert-v0.14.17-released.html + https://albertlauncher.github.io/2018/03/23/albert-v0.14.17-released.html + + + + + + Albert v0.14.16 released + <p>This release contains the latest fixes and new Python extensions:</p> + +<ul> + <li>Gnome dictionary extension. (nikhilwanpal)</li> + <li>Mathematica extension. (Asger Hautop Drewsen)</li> + <li>TeX to unicode extension. (Asger Hautop Drewsen)</li> + <li>IP address extension. (Benedict Dudel)</li> + <li>Multi Translate extension. (David Britt)</li> + <li>Emoji lookup extension. (David Britt)</li> + <li>Kaomoji lookup extension. (David Britt)</li> + <li>Timer extension.</li> + <li>Binance extension.</li> +</ul> + +<p>Kudos to the contributors. 👏</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.16">git log</a> for details.</p> + + 2018-03-09T17:00:00+00:00 + https://albertlauncher.github.io/2018/03/09/albert-v0.14.16-released.html + https://albertlauncher.github.io/2018/03/09/albert-v0.14.16-released.html + + + + + + Albert v0.14.15 released + <p>This release contains the latest fixes and new Python extensions:</p> + +<ul> + <li>CoinMarketCap. Quickly view/access coins/tokens on CoinMarketCap.</li> + <li>Trash extension. Adds an item that opens the trash bin in the file manager.</li> + <li>Pomodoro extension. Tool to apply the focus and flow enhancing technique.</li> + <li>Epoch extension. Simply shows current or translates unix timestamps.</li> + <li>Packagist extension. Search for PHP packages on <a href="https://packagist.org/">Packagist</a>.</li> +</ul> + +<p>Futher the python API has been extended by three functions: <code class="language-plaintext highlighter-rouge">configLocation()</code>, <code class="language-plaintext highlighter-rouge">dataLocation()</code> and <code class="language-plaintext highlighter-rouge">cacheLocation()</code>. Therefore the minor API version increased. The interface identifier is now <strong>PythonInterface/v0.2</strong>. Note that the Python extension guarantees backward compatibility on minor version changes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.15">git log</a> for details.</p> + + 2018-01-26T11:00:00+00:00 + https://albertlauncher.github.io/2018/01/26/albert-v0.14.15-released.html + https://albertlauncher.github.io/2018/01/26/albert-v0.14.15-released.html + + + + + + Albert v0.14.14 released + <p>This release contains the latest fixes and a new npm Python extension (Again credits go to Benedict Dudel :+1:)</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.14">git log</a> for details.</p> + + 2017-12-06T11:00:00+00:00 + https://albertlauncher.github.io/2017/12/06/albert-v0.14.14-released.html + https://albertlauncher.github.io/2017/12/06/albert-v0.14.14-released.html + + + + + + Albert v0.14.13 released + <p>This release introduces rich text for item texts. Extensions using the offline index do not use it yet, since computing the matching substring is a bit more involved.</p> + +<p>The TermAction now has a new option to set the behavior when the process exited. (Close, Close on success, Don not close).</p> + +<p>This version ships with two new python extension: One interfacing the Arch User Repositories and another adapting scrot, a screenshot tool (credits go to Benedict Dudel).</p> + +<p>As always the release also contains the latest fixes and minor improvements.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.13">git log</a> for details.</p> + + 2017-11-25T17:00:00+00:00 + https://albertlauncher.github.io/2017/11/25/albert-v0.14.13-released.html + https://albertlauncher.github.io/2017/11/25/albert-v0.14.13-released.html + + + + + + Albert v0.14.12 released + <p>This release contains the latest fixes the CopyQ port to python.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.12">git log</a> for details.</p> + + 2017-11-23T19:00:00+00:00 + https://albertlauncher.github.io/2017/11/23/albert-v0.14.12-released.html + https://albertlauncher.github.io/2017/11/23/albert-v0.14.12-released.html + + + + + + Albert v0.14.11 released + <p>This release contains the latest fixes and a locate python extension.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.11">git log</a> for details.</p> + + 2017-11-18T23:00:00+00:00 + https://albertlauncher.github.io/2017/11/18/albert-v0.14.11-released.html + https://albertlauncher.github.io/2017/11/18/albert-v0.14.11-released.html + + + + + + Albert v0.14.10 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.10">git log</a> for details.</p> + + 2017-11-16T22:00:00+00:00 + https://albertlauncher.github.io/2017/11/16/albert-v0.14.10-released.html + https://albertlauncher.github.io/2017/11/16/albert-v0.14.10-released.html + + + + + + Albert v0.14.9 released + <p>This release contains minor improvements:</p> + +<ul> + <li>Add “Open docs” action to tray</li> + <li>Generally use HiDPI pixmaps (lifts required Qt to 5.6)</li> + <li>Debug output is now a cmdline option (-d)</li> +</ul> + +<p>Of course it also contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.9">git log</a> for details.</p> + + 2017-11-15T23:00:00+00:00 + https://albertlauncher.github.io/2017/11/15/albert-v0.14.9-released.html + https://albertlauncher.github.io/2017/11/15/albert-v0.14.9-released.html + + + + + + Albert v0.14.8 released + <p>This release contains new Python extensions:</p> + +<ul> + <li>Gnote extension (Ported from external extension)</li> + <li>Tomboy extension (Ported from external extension)</li> + <li>Pacman extension</li> + <li>Pass extension</li> + <li>Kill extension</li> +</ul> + +<p>Of course it also contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.8">git log</a> for details.</p> + + 2017-11-13T23:00:00+00:00 + https://albertlauncher.github.io/2017/11/13/albert-v0.14.8-released.html + https://albertlauncher.github.io/2017/11/13/albert-v0.14.8-released.html + + + + + + Albert v0.14.7 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.7">git log</a> for details.</p> + + 2017-11-03T20:00:00+00:00 + https://albertlauncher.github.io/2017/11/03/albert-v0.14.7-released.html + https://albertlauncher.github.io/2017/11/03/albert-v0.14.7-released.html + + + + + + Official repositories at openSUSE Build Service + <p>Finally there are official repositories other than the Arch Linux User Repositories hosted on the openSUSE Build Service platform. The openSUSE Build Service is the public instance of the Open Build Service (OBS). It builds software for several distributions and architectures in an automated fashion and hosts repositories for the built packages. This means that as soon as a new albert version is released the build service gets triggered to build albert and as soon it is finished, you will be able to get the latest version of albert. Check the <a href="https://build.opensuse.org/package/show/home:manuelschneid3r/albert">albert package on openSUSE Build Service</a> to see the supported platforms.</p> + + 2017-11-02T11:00:00+00:00 + https://albertlauncher.github.io/2017/11/02/official-repos-on-obs.html + https://albertlauncher.github.io/2017/11/02/official-repos-on-obs.html + + + + + + Albert v0.14.6 released + <p>This release contains a wikipedia python extension and the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.6">git log</a> for details.</p> + + 2017-10-31T03:00:00+00:00 + https://albertlauncher.github.io/2017/10/31/albert-v0.14.6-released.html + https://albertlauncher.github.io/2017/10/31/albert-v0.14.6-released.html + + + + + + Albert v0.14.5 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.5">git log</a> for details.</p> + + 2017-10-30T03:00:00+00:00 + https://albertlauncher.github.io/2017/10/30/albert-v0.14.5-released.html + https://albertlauncher.github.io/2017/10/30/albert-v0.14.5-released.html + + + + + + Albert v0.14.4 released + <p>This release contains a new base converter plugin, the latest fixes and finally uses GNUInstallDirs.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.4">git log</a> for details.</p> + + 2017-10-25T10:00:00+00:00 + https://albertlauncher.github.io/2017/10/25/albert-v0.14.4-released.html + https://albertlauncher.github.io/2017/10/25/albert-v0.14.4-released.html + + + + + + Albert v0.14.3 released + <p>This release contains the latest fixes and a new Google Translate Python extension.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.3">git log</a> for details.</p> + + 2017-10-21T19:00:00+00:00 + https://albertlauncher.github.io/2017/10/21/albert-v0.14.3-released.html + https://albertlauncher.github.io/2017/10/21/albert-v0.14.3-released.html + + + + + + Albert v0.14.2 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.2">git log</a> for details.</p> + + 2017-10-20T00:00:00+00:00 + https://albertlauncher.github.io/2017/10/20/albert-v0.14.2-released.html + https://albertlauncher.github.io/2017/10/20/albert-v0.14.2-released.html + + + + + + Albert v0.14.1 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.1">git log</a> for details.</p> + + 2017-10-19T17:00:00+00:00 + https://albertlauncher.github.io/2017/10/19/albert-v0.14.1-released.html + https://albertlauncher.github.io/2017/10/19/albert-v0.14.1-released.html + + + + + + Albert v0.14.0 released + <p>This release contains internal API changes that make developers lifes easier and and a new extension that allows to embed python scripts.</p> + +<p>With this release the use of the old CGI style external extension is discouraged. External extensions will stay for now but just for personal use. As soon as the scripts in the public repo of the external extensions have been ported it will be deleted.</p> + +<p>With the Python extension writing an extension can be as easy as this:</p> + +<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="kn">from</span> <span class="nn">albertv0</span> <span class="kn">import</span> <span class="o">*</span> + +<span class="n">__iid__</span> <span class="o">=</span> <span class="s">"PythonInterface/v0.1"</span> + +<span class="k">def</span> <span class="nf">handleQuery</span><span class="p">(</span><span class="n">query</span><span class="p">):</span> + <span class="k">return</span> <span class="p">[</span><span class="n">Item</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="s">"Hello"</span><span class="p">)]</span> + +</code></pre></div></div> + +<p>This is a valid extension. However it makes not much sense, but by adding some docs, metadata and functionality a pretty minimal example, e.g. to run Zeal, can look like this:</p> + +<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># -*- coding: utf-8 -*- +</span> +<span class="s">"""Fire up an external search in Zeal. +Just type zl &lt;query&gt;"""</span> + +<span class="kn">from</span> <span class="nn">albertv0</span> <span class="kn">import</span> <span class="o">*</span> +<span class="kn">from</span> <span class="nn">subprocess</span> <span class="kn">import</span> <span class="n">run</span> +<span class="kn">from</span> <span class="nn">shutil</span> <span class="kn">import</span> <span class="n">which</span> + +<span class="n">__iid__</span> <span class="o">=</span> <span class="s">"PythonInterface/v0.1"</span> +<span class="n">__prettyname__</span> <span class="o">=</span> <span class="s">"Zeal"</span> +<span class="n">__version__</span> <span class="o">=</span> <span class="s">"1.0"</span> +<span class="n">__trigger__</span> <span class="o">=</span> <span class="s">"zl "</span> +<span class="n">__author__</span> <span class="o">=</span> <span class="s">"Manuel Schneider"</span> +<span class="n">__dependencies__</span> <span class="o">=</span> <span class="p">[</span><span class="s">"zeal"</span><span class="p">]</span> + + +<span class="k">if</span> <span class="n">which</span><span class="p">(</span><span class="s">"zeal"</span><span class="p">)</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> + <span class="k">raise</span> <span class="nb">Exception</span><span class="p">(</span><span class="s">"'zeal' is not in $PATH."</span><span class="p">)</span> + + +<span class="n">iconPath</span> <span class="o">=</span> <span class="n">iconLookup</span><span class="p">(</span><span class="s">'zeal'</span><span class="p">)</span> + + +<span class="k">def</span> <span class="nf">handleQuery</span><span class="p">(</span><span class="n">query</span><span class="p">):</span> + <span class="k">if</span> <span class="n">query</span><span class="p">.</span><span class="n">isTriggered</span><span class="p">:</span> + <span class="k">return</span> <span class="p">[</span> + <span class="n">Item</span><span class="p">(</span> + <span class="nb">id</span><span class="o">=</span><span class="n">__prettyname__</span><span class="p">,</span> + <span class="n">icon</span><span class="o">=</span><span class="n">iconPath</span><span class="p">,</span> + <span class="n">text</span><span class="o">=</span><span class="n">__prettyname__</span><span class="p">,</span> + <span class="n">subtext</span><span class="o">=</span><span class="s">"Look up %s"</span> <span class="o">%</span> <span class="n">__prettyname__</span><span class="p">,</span> + <span class="n">completion</span><span class="o">=</span><span class="n">query</span><span class="p">.</span><span class="n">rawString</span><span class="p">,</span> + <span class="n">actions</span><span class="o">=</span><span class="p">[</span><span class="n">ProcAction</span><span class="p">(</span><span class="s">"Start query in %s"</span> <span class="o">%</span> <span class="n">__prettyname__</span><span class="p">,</span> + <span class="p">[</span><span class="s">"zeal"</span><span class="p">,</span> <span class="n">query</span><span class="p">.</span><span class="n">string</span><span class="p">])])</span> + <span class="p">]</span> +</code></pre></div></div> + +<p>This 26 lines build a full fledged extension. In fact it is the Zeal extension.</p> + +<p>The documentation is not written at the moment, but the API is darn easy. Take a look at the <a href="https://github.com/albertlauncher/python/blob/master/api_test/__init__.py">API test extension</a>. It should contain every possible thing you can use. If you want to know it exactly read the interface definition. For real examples of extensions check the <a href="https://github.com/albertlauncher/python/">extensions shipped with albert</a>.</p> + +<p>I ask the devs of the external extensions in the public repo to port their extensions to the new scripting API and send a pull request.</p> + +<p>I hope you enjoy the new scripting API and I’d be happy to receive pull requests for extensions you wish to see shipped with albert. Have fun.</p> + +<p>As always check the <a href="https://github.com/albertlauncher/albert/commits/v0.14.0">git log</a> for details.</p> + + 2017-10-18T17:00:00+00:00 + https://albertlauncher.github.io/2017/10/18/albert-v0.14.0-released.html + https://albertlauncher.github.io/2017/10/18/albert-v0.14.0-released.html + + + + + + Albert v0.13.1 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.13.1">git log</a> for details.</p> + + 2017-09-30T11:00:00+00:00 + https://albertlauncher.github.io/2017/09/30/albert-v0.13.1-released.html + https://albertlauncher.github.io/2017/09/30/albert-v0.13.1-released.html + + + + + + Albert v0.13.0 released + <p>Albert v0.13 sets the focus on new frontends and performance optimizations in the core.</p> + +<h2 id="changes-in-the-core">Changes in the core</h2> + +<p>The frontend is now completely modular. From now on albert supports not only theming but an +abstract way to write completely separated user interfaces. You can even write one on your own since they are plugins now! No, don’t. Designing frontends is a pain, PRs for curses interface welcome though ;D. The really amazing thing is that this finally allows using QML for designig frontends.</p> + +<p>QML is a user interface markup language. It is a JSON-like declarative language for designing user interface–centric applications. Inline JavaScript code handles imperative aspects. This allows extremely flexible, flashy and animated interfaces, without coding imperative lines for hours and hours.</p> + +<p>v0.13 comes with a new ready to use QML frontend plugin. QML allows to write the entire user interface in QML and Javascript. There is actually no need for another QML UI plugin anymore since the C++ code below to run QML would not change. Hence the QML plugin itself is modular, designed to have several <em>styles</em> adhering to a determined QML-C++ interface. You can even write one on your own! No, dont, unless you’re a dev. Actually its still a pain to write polished UIs, although its pretty easy. The devil’s in the details.</p> + +<p>A style in this context means a QML Frontend written in QML. v0.13 comes with one standard style: The <em>Box Model</em> style. Looks pretty similar to the Widgets Box Model, but as you guessed, its flexible, animated and whatever. The Box Model style has properties that can be set with predefined themes. You could even make your own theme with the easy to use property editor without touching a single line of code! No don’t… just kidding, do it! Its fun.</p> + +<p>Under the hood albert got some performance improvements. In the core ranking scores are now precomputed and items are added using move semantics to avoid expensive reference counting. Further you can tick the option lazy sort which delays sorting the items displayed until you actually display them by scrolling down. This has some implications on the scrollbar and the <kbd>Ctrl</kbd>+<kbd>End</kbd> button. The scrollbars height and position is determined by the amount of sorted instead of the actual amount of items and the <kbd>Ctrl</kbd>+<kbd>End</kbd> button moves the highlight to the last sorted item, which will trigger fetching and sorting of new items. So you wont be able to go to the actual last item. If you use neither of them enable it. It will save you some milliseconds on queries.</p> + +<h2 id="changes-in-the-extensions">Changes in the extensions</h2> + +<p>The files extension now has a tree structured folder index for smart indexing an less space +requirements. QStrings are memory expensive. Inherently to the tree structure of the file system, the prefix of a path repeatedly occurs in the file paths. The tree structured index avoids this kind of duplication. Further the tree stores information about the modified times to determine if an update of the directory is necessary at all. This greatly reduces index times and resource consumption.</p> + +<p>Then there are several minor changes, the minimum language standard changed to C++14 and the minimum required CMake version is now 3.1.3. This comes along with the idea to always develop against the latest Ubuntu LTS.</p> + +<p>Further several configuration paths changed. The uniform data location are now like {configPath, dataPath, cachePath}/albert/&lt;extensionId&gt; for each extension and type. If something broke while updating check if the folders are in the correct place.</p> + +<p>The terminals tab completion for the executable is shell like, by completing the common prefix of all matches.</p> + +<p>New actions were introduced. There’s a file action “execute file” and a app action “run as root” using <code class="language-plaintext highlighter-rouge">gksudo</code> now.</p> + +<p>The interface of the external extensions changed slightly. The trigger is now removed from the query string before extension get called.</p> + +<h2 id="new-extensions">New extensions</h2> + +<p><strong>Key Value Store</strong> lets you store key value pairs for later lookup, e.g. <code class="language-plaintext highlighter-rouge">"IBAN": "DE1329423908429304102"</code> or <code class="language-plaintext highlighter-rouge">"Telefon": "+49 176 32434920"</code>. Use the trigger <code class="language-plaintext highlighter-rouge">kv</code> to interact with the extension. Set values with <code class="language-plaintext highlighter-rouge">kv set &lt;key&gt; &lt;value&gt;</code>, unset values with <code class="language-plaintext highlighter-rouge">kv unset &lt;key&gt;</code> and get them either by directly calling the extension <code class="language-plaintext highlighter-rouge">kv &lt;keyprefix&gt;</code> or by regular lookup with a prefix of the key.</p> + +<p><strong>Hash Generator</strong> does string hashing for you. Enter <code class="language-plaintext highlighter-rouge">hash</code> or the name of the hash directly, e.g. <code class="language-plaintext highlighter-rouge">md5</code>, and a string you want to hash. You will get the hashes as results. Exmaple: <code class="language-plaintext highlighter-rouge">md5 hashsource</code>.</p> + +<h2 id="notes-for-devs">Notes for devs</h2> + +<p>As in the external extensions the query interface changed. The query now has a string and a rawString. The raw string returns the query string including the trigger. If the query is not triggered string and rawString are equivalent.</p> + +<p>The extensions folder is now a git submodule. Expect this to change to a even more fine grained structure in future.</p> + +<p>As always check the <a href="https://github.com/albertlauncher/albert/commits/v0.13.0">git log</a> for details.</p> + + 2017-09-28T20:00:00+00:00 + https://albertlauncher.github.io/2017/09/28/albert-v0.13.0-released.html + https://albertlauncher.github.io/2017/09/28/albert-v0.13.0-released.html + + + + + + Albert v0.12.0 released + <p>Albert v0.12.0 finally comes with the capability of git-like ignore files. There have been ignore files in the versions before, but they only supported wildcard matching the filename. The ignores in v0.12.0 now support relative patterns by prefixing the pattern with a slash. This way users can define global excludes. Further the wildcard character <code class="language-plaintext highlighter-rouge">*</code> now behaves like in git ignore files by matching all characters but slashes. For wildcard matching including slashes use the double asterisks <code class="language-plaintext highlighter-rouge">**</code>. Further files excluded by loose patterns can be included again by prefixing the pattern by prefixing the pattern with <code class="language-plaintext highlighter-rouge">!</code>. For more details and caveats check the docs on the files extension.</p> + +<p>The websearch extension got some attention too: The settings UI is now much more comfortable. The list now supports drag and drop and the search engines are now edited using a dedicated dialog.</p> + +<p>A minor change has been made to the terminal extension: The default action now launches in a shell without terminal.</p> + +<p>As always check the <a href="https://github.com/albertlauncher/albert/commits/v0.12.0">git log</a> for details.</p> + + 2017-06-09T17:30:00+00:00 + https://albertlauncher.github.io/2017/06/09/albert-v0.12.0-released.html + https://albertlauncher.github.io/2017/06/09/albert-v0.12.0-released.html + + + + + + Albert v0.11.3 released + <p>This release contains the latest fixes. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.11.3">git log</a> for details.</p> + + 2017-05-28T20:00:00+00:00 + https://albertlauncher.github.io/2017/05/28/albert-v0.11.3-released.html + https://albertlauncher.github.io/2017/05/28/albert-v0.11.3-released.html + + + + + + Albert v0.11.2 released + <p>This release contains the latest fixes. Further the following minor things changed:</p> + +<ul> + <li>The web searches can not be enabled/disabled anymore as fallbacks. There will be a more generic mechanism that is responsible for that.</li> + <li>URLs starting with <code class="language-plaintext highlighter-rouge">http</code> and <code class="language-plaintext highlighter-rouge">https</code> skip the TLD validation. This way you can access e.g. host in the LAN.</li> + <li>The files extension <strong>does not</strong> require at least three chars anymore. Make sure you set your file filters correctly.</li> + <li><kbd>Home</kbd> and <kbd>End</kbd> now work for the results list holding <kbd>Ctrl</kbd>.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.11.2">git log</a> for details.</p> + + 2017-05-13T13:00:00+00:00 + https://albertlauncher.github.io/2017/05/13/albert-v0.11.2-released.html + https://albertlauncher.github.io/2017/05/13/albert-v0.11.2-released.html + + + + + + Albert v0.11.1 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.11.1">git log</a> for details.</p> + + 2017-04-16T11:00:00+00:00 + https://albertlauncher.github.io/2017/04/16/albert-v0.11.1-released.html + https://albertlauncher.github.io/2017/04/16/albert-v0.11.1-released.html + + + + + + Albert v0.11.0 released + <p>Albert v0.11.0 is all about the files extension. The new release finally allows a fine-grained control of the MIME types to be indexed by the files extension. In the settings of the files extension the <em>Advanced</em> button in the <em>Indexed MIME types</em> group box opens a dialog which allows the user to set wildcard patterns that are used to match against the MIME types of the indexed files. Hopefully this is a partial solution for <a href="https://github.com/albertlauncher/albert/issues/1">#1</a> for some of you too.</p> + +<p>Extensions can now have multiple triggers. An example of multiple triggers is the files extension: A prefix of <code class="language-plaintext highlighter-rouge">/</code> or <code class="language-plaintext highlighter-rouge">~</code> triggers the files extension in browse mode.</p> + +<p>The sorting algorithm is now stable. This means that items that are equal regarding their sorting order are now displayed in the order they were added to the results.</p> + +<p>Based on this the browse mode now lists the results in lexicographical order with directories before the files.</p> + +<p>Additionally the use of fallbacks have been disabled for triggered queries. The rationale behind this decision is that the user implicitly tells that he want something special, not a general fallback.</p> + +<p>All of the changes above make the files browse mode extremely convenient and clutter free.</p> + +<p>Further the websearch extension now contains an URL handler. Valid URLs are recognized as such if it contains a top- and second level domain, e.g. <code class="language-plaintext highlighter-rouge">google.com</code>. The top level domain has to be one of the ones registered by the <a href="http://www.iana.org/">Internet Assigned Numbers Authority</a>.</p> + +<p>Last but not least the qss property <code class="language-plaintext highlighter-rouge">selection-color</code> works as expected now.</p> + +<p>As always check the <a href="https://github.com/albertlauncher/albert/commits/v0.11.0">git log</a> for details.</p> + + 2017-04-15T23:00:00+00:00 + https://albertlauncher.github.io/2017/04/15/albert-v0.11.0-released.html + https://albertlauncher.github.io/2017/04/15/albert-v0.11.0-released.html + + + + + + Albert v0.10.4 released + <p>This release contains the latest fixes.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.10.4">git log</a> for details.</p> + + 2017-04-14T10:00:00+00:00 + https://albertlauncher.github.io/2017/04/14/albert-v0.10.4-released.html + https://albertlauncher.github.io/2017/04/14/albert-v0.10.4-released.html + + + + + + Albert v0.10.3 released + <p>This release contains the latest fixes.</p> + +<p>Due to problems with the indexing (#419) the terminal extension changed. The extension does no more show suggestions, but a single item to run your command instead. Further the default action is now “Run in terminal”. However the “Run in shell” action is still available in the alternative actions.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.10.3">git log</a> for details.</p> + + 2017-04-02T18:00:00+00:00 + https://albertlauncher.github.io/2017/04/02/albert-v0.10.3-released.html + https://albertlauncher.github.io/2017/04/02/albert-v0.10.3-released.html + + + + + + Albert v0.10.2 released + <p>This release contains the latest fixes. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.10.2">git log</a> for details.</p> + + 2017-03-24T11:00:00+00:00 + https://albertlauncher.github.io/2017/03/24/albert-v0.10.2-released.html + https://albertlauncher.github.io/2017/03/24/albert-v0.10.2-released.html + + + + + + Albert v0.10.1 released + <p>This release contains the latest hotfixes. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.10.1">git log</a> for details.</p> + + 2017-03-20T15:30:00+00:00 + https://albertlauncher.github.io/2017/03/20/albert-v0.10.1-released.html + https://albertlauncher.github.io/2017/03/20/albert-v0.10.1-released.html + + + + + + Albert v0.10 released + <p>Albert v0.10 introduces tab completion using the <kbd>Tab</kbd> key. This allows extensions to suggest a completion text for the input box. An example: You type 2+2 into the box. When you select the calculator item and press complete the equation in the input box resolves to the result 4. The alternative actions have moved to the <kbd>Alt</kbd> key, which has to be hold to show the alternative actions. The default fallback is now on <kbd>Meta</kbd>.</p> + +<p>Hovering over the input box the mouse wheel can now be used to browse the history, exactly the way you are used to it with <kbd>Ctrl</kbd>+.</p> + +<p>Further there is a new group of themes, the Spotlight themes, which come in three flavors: Bright, Dark and Space (Gray with Blue accent).</p> + +<p>(image removed)</p> + +<p>Albert v0.10 ships with two new extensions, MPRIS and a rudimentary ssh extension. Check their documentation for more details.</p> + +<p>The terminal extension now provides the shell aliases too.</p> + +<p>Further the files extension provides now a way to browse through paths that are <em>not</em> indexed. Queries that begin with either <code class="language-plaintext highlighter-rouge">/</code> or <code class="language-plaintext highlighter-rouge">~/</code> are interpreted as a beginning of a path and the extension lists the files in this directory. In combination with the tab completions this is a nice way to browse the file system.</p> + +<p>The application extension allows now to ignore the <code class="language-plaintext highlighter-rouge">OnlyShowIn</code> and <code class="language-plaintext highlighter-rouge">NotShowIn</code> keys in the desktop entries.</p> + +<p>For developers: The bash script to clone the template extension is now deprecated and replaced by a Python script.</p> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.10.0">git log</a> for details.</p> + + 2017-03-19T22:45:00+00:00 + https://albertlauncher.github.io/2017/03/19/albert-v0.10.0-released.html + https://albertlauncher.github.io/2017/03/19/albert-v0.10.0-released.html + + + + + + Albert v0.9.5 released + <p>This is a pure bugfix release. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.9.5">git log</a> for details.</p> + + 2017-03-13T13:00:00+00:00 + https://albertlauncher.github.io/2017/03/13/albert-v0.9.5-released.html + https://albertlauncher.github.io/2017/03/13/albert-v0.9.5-released.html + + + + + + Albert v0.9.4 released + <p>This is a pure bugfix release. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.9.4">git log</a> for details.</p> + + 2017-03-01T10:36:00+00:00 + https://albertlauncher.github.io/2017/03/01/albert-v0.9.4-released.html + https://albertlauncher.github.io/2017/03/01/albert-v0.9.4-released.html + + + + + + Albert v0.9.3 released + <p>This is a pure bugfix release. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.9.3">git log</a> for details.</p> + + 2017-02-05T15:39:00+00:00 + https://albertlauncher.github.io/2017/02/05/albert-v0.9.3-released.html + https://albertlauncher.github.io/2017/02/05/albert-v0.9.3-released.html + + + + + + Albert v0.9.2 released + <p>This release contains just a few but critical fixes. Check the <a href="https://github.com/albertlauncher/albert/commits/v0.9.2">git log</a> for details.</p> + + 2017-01-30T00:00:00+00:00 + https://albertlauncher.github.io/2017/01/30/albert-v0.9.2-released.html + https://albertlauncher.github.io/2017/01/30/albert-v0.9.2-released.html + + + + + + Albert v0.9.1 released + <p>This release was intended to contain only fixes. +However there are some minor nifty changes recognizable by the user.</p> +<ul> + <li>Although not planned to be made official you can scan your files by typing albert scan files. Note that this feature may disappear someday.</li> + <li>You can choose the terminal command in the settings dialog. The list shows all installed terminals. If you like you can provide a custom command.</li> + <li>The app icon now uses a theme icon.</li> + <li>Items of the files extension have now an “Open terminal here” action.</li> +</ul> + +<p>Check the <a href="https://github.com/albertlauncher/albert/commits/v0.9.1">git log</a> for details.</p> + + 2017-01-23T00:00:00+00:00 + https://albertlauncher.github.io/2017/01/23/albert-v0.9.1-released.html + https://albertlauncher.github.io/2017/01/23/albert-v0.9.1-released.html + + + + + + Albert v0.9 released + <p>Almost four months have passed since the last alpha release. Dozens of hours of contemplation about a sophisticated design, dozens of hours of implementation and even a broken arm later I am happy to announce the release of Albert v0.9.</p> + +<p>This release comes with a new architecture that allows extensions to register extensions themselves. Based on this changes a new extension <em>“External extensions”</em> has been implemented, which can be used to let Albert run external programs and scripts as extensions. Here’s an example of an external bash extension that lets you run the scan popup of goldendict as external search engine:</p> + +<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#!/bin/bash +case $ALBERT_OP in + "METADATA") + STDOUT='{ + "iid":"org.albert.extension.external/v2.0", + "name":"Goldendict", + "version":"1.0", + "author":"Manuel Schneider", + "dependencies":["goldendict"], + "trigger":"gd " + }' + echo -n "${STDOUT}" + exit 0 + ;; + "QUERY") + QUERYSTRING="${ALBERT_QUERY:3}" + echo -n '{ + "items":[{ + "id":"goldendict", + "name":"Use goldendict to lookup '"'${QUERYSTRING}'"'", + "description":"Opens the scan popup and searches for '"'${QUERYSTRING}'"'.", + "icon":"goldendict", + "actions":[{ + "name":"goldendict", + "command":"goldendict", + "arguments":["'${QUERYSTRING}'"] + }] + }] + }' + exit 0 + ;; +esac + +</code></pre></div></div> +<p>Just a few words on this to get you started. The core application runs the extension with several environment variables set. The vars used in this script are <code class="language-plaintext highlighter-rouge">$ALBERT_OP</code> and <code class="language-plaintext highlighter-rouge">$ALBERT_QUERY</code>. <code class="language-plaintext highlighter-rouge">$ALBERT_OP</code> tells the extension what to do. When the user enters a query the extension is started with <code class="language-plaintext highlighter-rouge">$ALBERT_OP</code> set to <code class="language-plaintext highlighter-rouge">QUERY</code> and <code class="language-plaintext highlighter-rouge">$ALBERT_QUERY</code> set to the string that the user entered.</p> + +<p>The bash script in the listing above extracts the query string by cutting the trigger prefix and runs goldendict with this query string, which opens the goldendict scan popup with the query string. Now this was quick! For the details check the relevant section in the documentation.</p> + +<p>Further, finally a Firefox bookmark extension made it into the extension inventory. Just as the chrome bookmarks extension the extension basically indexes the bookmarks and makes them accessible via Albert. In the settings you can choose the user profile you want to track and set if the bookmarks should open in the default browser or in Firefox.</p> + +<p>The virtual box extension got some major improvements as well. You can now control the state of the virtual machine, i.e. if it is turned off you can run it (as before), if it runs you can pause, stop or save it, if it is paused… I think you got it.</p> + +<p>Transparent to the user, things changed a lot under the hood to make albert even better and of course several bug fixes made it into v0.9.0 as well. If you want to see the complete changes check the <a href="https://github.com/albertlauncher/albert/commits/v0.9.0">git log</a>.</p> + +<p>Have fun with it!</p> + + 2017-01-17T13:49:00+00:00 + https://albertlauncher.github.io/2017/01/17/albert-v0.9.0-released.html + https://albertlauncher.github.io/2017/01/17/albert-v0.9.0-released.html + + + + + + Repository moved to organization page + <p>Finally albert moved from my <a href="https://github.com/manuelschneid3r">user page</a> to the <a href="https://github.com/albertlauncher">albert organization page</a>. The repository url is now <a href="https://github.com/albertlauncher/albert.git">https://github.com/albertlauncher/albert.git</a>. This has some implications for developers who cloned the repository: The git remote urls are now invalid. Fix them by using the git commandline (or your git tool of choice):</p> + +<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>git remote set-url &lt;name&gt; https://github.com/albertlauncher/albert +</code></pre></div></div> + + 2017-01-11T19:09:00+00:00 + https://albertlauncher.github.io/2017/01/11/repository-moved-to-organization.html + https://albertlauncher.github.io/2017/01/11/repository-moved-to-organization.html + + + + + + Albert finally has a website + <p>Until recently the information relevant to the user was cluttered over several places. For a motivation there was a small landing page on github-pages, the github repository had a README.md, which basically served the same purpose, to get help the user had to go to the wiki and for news… well there was nothing. Finally there is now a place where everything gets merged to a single website: The project website <em><a href="http://albertlauncher.github.io">albertlauncher.github.io</a>.</em></p> + +<p>Using <a href="https://jekyllrb.com/">Jekyll</a> and a handcrafted theme based on the <a href="https://milligram.io/">Milligram CSS framework</a> the static website offers a nice reading experience and is still somewhat maintainable for a lazy c++ guy. The docs are dynamically generated from markdown sources and allow Github users to send pull request for modifications, e.g. typos. News post are dynamically generated too and even build a RSS news feed to allow interested users to subscribe and be up to date.</p> + + 2017-01-09T17:17:00+00:00 + https://albertlauncher.github.io/2017/01/09/albert-now-has-a-website.html + https://albertlauncher.github.io/2017/01/09/albert-now-has-a-website.html + + + + + diff --git a/fonts/FontAwesome.eot b/fonts/FontAwesome.eot new file mode 100644 index 00000000..4f0b1de2 Binary files /dev/null and b/fonts/FontAwesome.eot differ diff --git a/fonts/FontAwesome.svg b/fonts/FontAwesome.svg new file mode 100644 index 00000000..32ad8fb7 --- /dev/null +++ b/fonts/FontAwesome.svg @@ -0,0 +1,12 @@ + + + +Generated by IcoMoon + + + + + + + + \ No newline at end of file diff --git a/fonts/FontAwesome.ttf b/fonts/FontAwesome.ttf new file mode 100644 index 00000000..47e2443e Binary files /dev/null and b/fonts/FontAwesome.ttf differ diff --git a/fonts/FontAwesome.woff b/fonts/FontAwesome.woff new file mode 100644 index 00000000..bec5c4fe Binary files /dev/null and b/fonts/FontAwesome.woff differ diff --git a/googled3d5652195199ad9.html b/googled3d5652195199ad9.html new file mode 100644 index 00000000..92866472 --- /dev/null +++ b/googled3d5652195199ad9.html @@ -0,0 +1 @@ +google-site-verification: googled3d5652195199ad9.html \ No newline at end of file diff --git a/help/index.html b/help/index.html new file mode 100644 index 00000000..0e0c0c0f --- /dev/null +++ b/help/index.html @@ -0,0 +1,150 @@ + + + + Albert - Help + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Help

+

If you have questions or problems please google first and check the existing issues. If you did not find an answer get in touch with the community. Please don’t post issues for support questions. Note that the chats are bridged using MatterBridge. It does not matter which one you join. For details check the source code.

+ +
Community
+ + + +
Issue trackers
+ + + +
+
+
+
+ + + +
+ + diff --git a/img/albert.svg b/img/albert.svg new file mode 100644 index 00000000..db658bf6 --- /dev/null +++ b/img/albert.svg @@ -0,0 +1,169 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/img/themecreator/ic_amazon.svg b/img/themecreator/ic_amazon.svg new file mode 100644 index 00000000..046e2f06 --- /dev/null +++ b/img/themecreator/ic_amazon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/themecreator/ic_google.svg b/img/themecreator/ic_google.svg new file mode 100644 index 00000000..657c2a3d --- /dev/null +++ b/img/themecreator/ic_google.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/themecreator/ic_octocat.svg b/img/themecreator/ic_octocat.svg new file mode 100644 index 00000000..5fa2ec5e --- /dev/null +++ b/img/themecreator/ic_octocat.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/themecreator/ic_youtube.svg b/img/themecreator/ic_youtube.svg new file mode 100644 index 00000000..31a15c76 --- /dev/null +++ b/img/themecreator/ic_youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 00000000..b43b3018 --- /dev/null +++ b/index.html @@ -0,0 +1,135 @@ + + + + Albert - Welcome + + + + + + + + +
+
+
+
+
+ + +
+
+ +

Welcome

+

Albert is a C++/Qt based desktop agnostic keyboard launcher that helps you to accomplish your workflows in a breeze. +The goals are usability, performance, extensibility and beauty. +Check the gallery at alternativeto.net to get a visual impression.

+ +
+
+
+
+ + + +
+ + diff --git a/js/themecreator/clipboard.min.js b/js/themecreator/clipboard.min.js new file mode 100644 index 00000000..1d7c5d5d --- /dev/null +++ b/js/themecreator/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v1.5.16 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e,t,n;return function e(t,n,i){function o(a,c){if(!n[a]){if(!t[a]){var l="function"==typeof require&&require;if(!c&&l)return l(a,!0);if(r)return r(a,!0);var s=new Error("Cannot find module '"+a+"'");throw s.code="MODULE_NOT_FOUND",s}var u=n[a]={exports:{}};t[a][0].call(u.exports,function(e){var n=t[a][1][e];return o(n?n:e)},u,u.exports,e,t,n,i)}return n[a].exports}for(var r="function"==typeof require&&require,a=0;a0&&void 0!==arguments[0]?arguments[0]:{};this.action=t.action,this.emitter=t.emitter,this.target=t.target,this.text=t.text,this.trigger=t.trigger,this.selectedText=""}},{key:"initSelection",value:function e(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:"selectFake",value:function e(){var t=this,n="rtl"==document.documentElement.getAttribute("dir");this.removeFake(),this.fakeHandlerCallback=function(){return t.removeFake()},this.fakeHandler=document.body.addEventListener("click",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement("textarea"),this.fakeElem.style.fontSize="12pt",this.fakeElem.style.border="0",this.fakeElem.style.padding="0",this.fakeElem.style.margin="0",this.fakeElem.style.position="absolute",this.fakeElem.style[n?"right":"left"]="-9999px";var i=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.addEventListener("focus",window.scrollTo(0,i)),this.fakeElem.style.top=i+"px",this.fakeElem.setAttribute("readonly",""),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,o.default)(this.fakeElem),this.copyText()}},{key:"removeFake",value:function e(){this.fakeHandler&&(document.body.removeEventListener("click",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:"selectTarget",value:function e(){this.selectedText=(0,o.default)(this.target),this.copyText()}},{key:"copyText",value:function e(){var t=void 0;try{t=document.execCommand(this.action)}catch(e){t=!1}this.handleResult(t)}},{key:"handleResult",value:function e(t){this.emitter.emit(t?"success":"error",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:"clearSelection",value:function e(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:"destroy",value:function e(){this.removeFake()}},{key:"action",set:function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"copy";if(this._action=t,"copy"!==this._action&&"cut"!==this._action)throw new Error('Invalid "action" value, use either "copy" or "cut"')},get:function e(){return this._action}},{key:"target",set:function e(t){if(void 0!==t){if(!t||"object"!==("undefined"==typeof t?"undefined":r(t))||1!==t.nodeType)throw new Error('Invalid "target" value, use a valid Element');if("copy"===this.action&&t.hasAttribute("disabled"))throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');if("cut"===this.action&&(t.hasAttribute("readonly")||t.hasAttribute("disabled")))throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');this._target=t}},get:function e(){return this._target}}]),e}();e.exports=c})},{select:5}],8:[function(t,n,i){!function(o,r){if("function"==typeof e&&e.amd)e(["module","./clipboard-action","tiny-emitter","good-listener"],r);else if("undefined"!=typeof i)r(n,t("./clipboard-action"),t("tiny-emitter"),t("good-listener"));else{var a={exports:{}};r(a,o.clipboardAction,o.tinyEmitter,o.goodListener),o.clipboard=a.exports}}(this,function(e,t,n,i){"use strict";function o(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function c(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function l(e,t){var n="data-clipboard-"+e;if(t.hasAttribute(n))return t.getAttribute(n)}var s=o(t),u=o(n),f=o(i),d=function(){function e(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};this.action="function"==typeof t.action?t.action:this.defaultAction,this.target="function"==typeof t.target?t.target:this.defaultTarget,this.text="function"==typeof t.text?t.text:this.defaultText}},{key:"listenClick",value:function e(t){var n=this;this.listener=(0,f.default)(t,"click",function(e){return n.onClick(e)})}},{key:"onClick",value:function e(t){var n=t.delegateTarget||t.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new s.default({action:this.action(n),target:this.target(n),text:this.text(n),trigger:n,emitter:this})}},{key:"defaultAction",value:function e(t){return l("action",t)}},{key:"defaultTarget",value:function e(t){var n=l("target",t);if(n)return document.querySelector(n)}},{key:"defaultText",value:function e(t){return l("text",t)}},{key:"destroy",value:function e(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}]),t}(u.default);e.exports=h})},{"./clipboard-action":7,"good-listener":4,"tiny-emitter":6}]},{},[8])(8)}); \ No newline at end of file diff --git a/js/themecreator/generator.js b/js/themecreator/generator.js new file mode 100644 index 00000000..2b5c5b72 --- /dev/null +++ b/js/themecreator/generator.js @@ -0,0 +1,108 @@ +var themes, defaultTheme = "Bright"; + +main(); + +/** + * This is the begining. + */ +function main() { + initClipboard(); + loadThemes(function () { + // And finally display albert to the public + document.getElementById('albert').style.display = 'block'; + document.getElementById('options').style.display = 'block'; + }); + + // Get all inputs with the 'style' class and add an event listener + var inputs = [].slice.call(document.querySelectorAll('.style')); + inputs.forEach(function (input) { + input.addEventListener('input', function () { + updateTheme(input.name, input.value); + }); + }); +} + +/** + * Init the clipboard plugin. + */ +function initClipboard() { + var clipboard = new Clipboard(".theme button", { + text: function () { + return document.getElementById("result").innerText; + } + }); + + clipboard.on('success', function (e) { + var trigger = e.trigger, + original = trigger.innerHTML; + + trigger.innerHTML = "Copied!"; + setTimeout(function () { + trigger.innerHTML = original; + }, 1000); + }); +} + +function loadThemes(callback) { + var XmlHttpRequest = new XMLHttpRequest(); + XmlHttpRequest.overrideMimeType("application/json"); + XmlHttpRequest.open('GET', './themes.json', true); + XmlHttpRequest.onreadystatechange = function () { + if (XmlHttpRequest.readyState == 4 && XmlHttpRequest.status == "200") { + themes = JSON.parse(XmlHttpRequest.responseText); + + // We set the first theme to be the base theme, since it's the default one in albert + for (var prop in themes[defaultTheme]) { + updateTheme(prop, themes[defaultTheme][prop]); + + var els = document.querySelectorAll("[name='" + prop + "']"); + for (var i = 0; i < els.length; i++) { + els[i].value = themes[defaultTheme][prop]; + } + } + + callback(); + } + } + XmlHttpRequest.send(null); +} + +/** + * Update the theme with the user's changes. + * + * @param el + */ +function updateTheme(propName, propValue) { + var original = propValue; + + if (propName == 'item_selected_color' || propName == 'action_list_selected_color') { + propValue = hexToRgbA(propValue, 0.2); + } + + // Update the style in realtime + document.documentElement.style.setProperty('--' + propName, propValue, ""); + + // Update the to be qss file + var els = document.querySelectorAll('.' + propName); + for (var i = 0; i < els.length; i++) { + original = original.replace(/#/g, ''); + els[i].innerHTML = original; + } +} + +/** + * + * @returns {string} + */ +function hexToRgbA(hex, transparency) { + var c; + if (/^#([A-Fa-f0-9]{3}){1,2}$/.test(hex)) { + c = hex.substring(1).split(''); + if (c.length == 3) { + c = [c[0], c[0], c[1], c[1], c[2], c[2]]; + } + c = '0x' + c.join(''); + return 'rgba(' + [(c >> 16) & 255, (c >> 8) & 255, c & 255].join(',') + ', ' + transparency + ')'; + } + throw new Error('Bad Hex'); +} diff --git a/news/index.html b/news/index.html new file mode 100644 index 00000000..7ac65a21 --- /dev/null +++ b/news/index.html @@ -0,0 +1,357 @@ + + + + Albert - News + + + + + + + + +
+
+
+
+
+ + +
+
+ +

News

+ + +Be up to date with the RSS feed + +
+
+
+
+ + + +
+ + diff --git a/reference/README_8md.html b/reference/README_8md.html new file mode 100644 index 00000000..151d4e66 --- /dev/null +++ b/reference/README_8md.html @@ -0,0 +1,108 @@ + + + + + + + +Albert: albert/plugins/README.md File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert/plugins/README.md File Reference
+
+
+
+
+ + + + diff --git a/reference/action_8h.html b/reference/action_8h.html new file mode 100644 index 00000000..837aa53e --- /dev/null +++ b/reference/action_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/action.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
action.h File Reference
+
+
+
#include "albert/export.h"
+#include <QString>
+#include <functional>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::Action
 Action used by items. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/action_8h.js b/reference/action_8h.js new file mode 100644 index 00000000..0e78acd3 --- /dev/null +++ b/reference/action_8h.js @@ -0,0 +1,4 @@ +var action_8h = +[ + [ "albert::Action", "classalbert_1_1Action.html", "classalbert_1_1Action" ] +]; \ No newline at end of file diff --git a/reference/action_8h_source.html b/reference/action_8h_source.html new file mode 100644 index 00000000..15c4033f --- /dev/null +++ b/reference/action_8h_source.html @@ -0,0 +1,136 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/action.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
action.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include <QString>
+
6#include <functional>
+
7
+
8namespace albert
+
9{
+
10
+
12class ALBERT_EXPORT Action final
+
13{
+
14public:
+
15
+
20 Action(QString id, QString text, std::function<void()> function);
+
21
+
22 QString id;
+
23 QString text;
+
24 std::function<void()> function;
+
25};
+
26
+
27}
+
Action used by items.
Definition: action.h:13
+
Action(QString id, QString text, std::function< void()> function)
Action constructor.
+
QString text
Description of the action.
Definition: action.h:23
+
std::function< void()> function
The action function.
Definition: action.h:24
+
QString id
Identifier of the action.
Definition: action.h:22
+
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/albert.svg b/reference/albert.svg new file mode 100644 index 00000000..db658bf6 --- /dev/null +++ b/reference/albert.svg @@ -0,0 +1,169 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reference/albert_8h.html b/reference/albert_8h.html new file mode 100644 index 00000000..ee9c3760 --- /dev/null +++ b/reference/albert_8h.html @@ -0,0 +1,191 @@ + + + + + + + +Albert: albert/include/albert/albert.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert.h File Reference
+
+
+
#include "albert/export.h"
+#include <QString>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::Notification
 A system tray notification. More...
 
+ + + +

+Namespaces

namespace  albert
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

ALBERT_EXPORT QNetworkAccessManager * albert::networkManager ()
 The global QNetworkAccessManager. More...
 
ALBERT_EXPORT void albert::show (const QString &text=QString())
 Show the main window. More...
 
ALBERT_EXPORT void albert::hide ()
 Hide the main window. More...
 
ALBERT_EXPORT void albert::toggle ()
 Toggle visibility of main window. More...
 
ALBERT_EXPORT void albert::showSettings (QString plugin_id={})
 Open/Show the settings window (of plugin). More...
 
ALBERT_EXPORT void albert::restart ()
 Restart the app. More...
 
ALBERT_EXPORT void albert::quit ()
 Quit the app. More...
 
ALBERT_EXPORT QString albert::configLocation ()
 The app config location. More...
 
ALBERT_EXPORT QString albert::cacheLocation ()
 The app cache location. More...
 
ALBERT_EXPORT QString albert::dataLocation ()
 The app data location. More...
 
ALBERT_EXPORT std::unique_ptr< QSettings > albert::settings ()
 Persistent app settings. @reentrant. More...
 
ALBERT_EXPORT std::unique_ptr< QSettings > albert::state ()
 The persistent app state. @reentrant. More...
 
ALBERT_EXPORT void albert::openWebsite ()
 Open the albert website in default browser. More...
 
ALBERT_EXPORT void albert::openUrl (const QUrl &url)
 Open the specified url in default browser. More...
 
ALBERT_EXPORT void albert::openUrl (const QString &url)
 Open the specified url in default browser. More...
 
ALBERT_EXPORT void albert::openIssueTracker ()
 Open the albert issue tracker in default browser. More...
 
ALBERT_EXPORT void albert::setClipboardText (const QString &text)
 Set the system clipboard. More...
 
ALBERT_EXPORT void albert::setClipboardTextAndPaste (const QString &text)
 Set the system clipboard and paste the content to the front-most window. More...
 
ALBERT_EXPORT long long albert::runDetachedProcess (const QStringList &commandline, const QString &working_dir={})
 Run a detached process. More...
 
ALBERT_EXPORT void albert::runTerminal (const QString &script={}, const QString &working_dir={}, bool close_on_exit=false)
 Run a script in the user defined terminal. More...
 
+
+
+ + + + diff --git a/reference/albert_8h.js b/reference/albert_8h.js new file mode 100644 index 00000000..8dbfaeb8 --- /dev/null +++ b/reference/albert_8h.js @@ -0,0 +1,24 @@ +var albert_8h = +[ + [ "albert::Notification", "classalbert_1_1Notification.html", "classalbert_1_1Notification" ], + [ "cacheLocation", "albert_8h.html#a9608c31d67dd4adc7810d48db31f1780", null ], + [ "configLocation", "albert_8h.html#a0ff8f625cf3c1f8af4fe923d12986c2c", null ], + [ "dataLocation", "albert_8h.html#ab968450cf9a276d4a392432dad2802b8", null ], + [ "hide", "albert_8h.html#ac1d14794465f1cb9349ea0541a553949", null ], + [ "networkManager", "albert_8h.html#a5c3bcb68953e42d33df36ecb7336c974", null ], + [ "openIssueTracker", "albert_8h.html#a7415146a8bdf3310c751a7e00866441c", null ], + [ "openUrl", "albert_8h.html#af6cb7b3a800e9f6eff1c8aff08ae07d4", null ], + [ "openUrl", "albert_8h.html#a56363c99d1fba78c716d82498710acb4", null ], + [ "openWebsite", "albert_8h.html#a124eed71fa205fa1df15b60e8c3236cb", null ], + [ "quit", "albert_8h.html#ad577c75761cd1124a31886dad4bf74c3", null ], + [ "restart", "albert_8h.html#abcf6b2abfb07a836cb3cc41d5836b169", null ], + [ "runDetachedProcess", "albert_8h.html#ac85cded09e6e136185a21835c627754c", null ], + [ "runTerminal", "albert_8h.html#a7b04fd33495b5c395eddfd1a97ee96bf", null ], + [ "setClipboardText", "albert_8h.html#af1ce5669423d646a686c0682917930ab", null ], + [ "setClipboardTextAndPaste", "albert_8h.html#a074c9a711f70e31a066e1e432fc41490", null ], + [ "settings", "albert_8h.html#aefe080148aeeb8ec606be9e4d7585801", null ], + [ "show", "albert_8h.html#a392bdfcdcee15dcaf17fb5dc6d3d3113", null ], + [ "showSettings", "albert_8h.html#ab8aa8ed98419a442ebd5e3a303f26347", null ], + [ "state", "albert_8h.html#ad6c8ce82c40bddee897a2d14bc46b67c", null ], + [ "toggle", "albert_8h.html#a99e86f2694429e695055d34e1c1ec197", null ] +]; \ No newline at end of file diff --git a/reference/albert_8h_source.html b/reference/albert_8h_source.html new file mode 100644 index 00000000..18ec6a44 --- /dev/null +++ b/reference/albert_8h_source.html @@ -0,0 +1,195 @@ + + + + + + + +Albert: albert/include/albert/albert.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include <QString>
+
6class QNetworkAccessManager;
+
7class QSettings;
+
8class QUrl;
+
9class NotificationPrivate;
+
10
+
11namespace albert
+
12{
+
13class Frontend;
+
14
+
16ALBERT_EXPORT QNetworkAccessManager *networkManager();
+
17
+
19ALBERT_EXPORT void show(const QString &text = QString());
+
20
+
22ALBERT_EXPORT void hide();
+
23
+
25ALBERT_EXPORT void toggle();
+
26
+
29ALBERT_EXPORT void showSettings(QString plugin_id = {});
+
30
+
32ALBERT_EXPORT void restart();
+
33
+
35ALBERT_EXPORT void quit();
+
36
+
38ALBERT_EXPORT QString configLocation();
+
39
+
41ALBERT_EXPORT QString cacheLocation();
+
42
+
44ALBERT_EXPORT QString dataLocation();
+
45
+
47ALBERT_EXPORT std::unique_ptr<QSettings> settings();
+
48
+
50ALBERT_EXPORT std::unique_ptr<QSettings> state();
+
51
+
53ALBERT_EXPORT void openWebsite();
+
54
+
56ALBERT_EXPORT void openUrl(const QUrl &url);
+
57
+
59ALBERT_EXPORT void openUrl(const QString &url);
+
60
+
62ALBERT_EXPORT void openIssueTracker();
+
63
+
65ALBERT_EXPORT void setClipboardText(const QString &text);
+
66
+
68ALBERT_EXPORT void setClipboardTextAndPaste(const QString &text);
+
69
+
71ALBERT_EXPORT long long runDetachedProcess(const QStringList &commandline, const QString &working_dir = {});
+
72
+
74ALBERT_EXPORT void runTerminal(const QString &script = {}, const QString &working_dir = {}, bool close_on_exit = false);
+
75
+
78class ALBERT_EXPORT Notification
+
79{
+
80public:
+
81 Notification(const QString &title={}, const QString &body={});
+ +
83
+
84private:
+
85 NotificationPrivate *d;
+
86};}
+
The interface for albert frontends.
Definition: frontend.h:17
+
A system tray notification.
Definition: albert.h:79
+ +
Notification(const QString &title={}, const QString &body={})
+
Definition: albert.h:12
+
ALBERT_EXPORT void setClipboardTextAndPaste(const QString &text)
Set the system clipboard and paste the content to the front-most window.
+
ALBERT_EXPORT QString configLocation()
The app config location.
+
ALBERT_EXPORT void openWebsite()
Open the albert website in default browser.
+
ALBERT_EXPORT void show(const QString &text=QString())
Show the main window.
+
ALBERT_EXPORT void openUrl(const QUrl &url)
Open the specified url in default browser.
+
ALBERT_EXPORT QNetworkAccessManager * networkManager()
The global QNetworkAccessManager.
+
ALBERT_EXPORT void openIssueTracker()
Open the albert issue tracker in default browser.
+
ALBERT_EXPORT void runTerminal(const QString &script={}, const QString &working_dir={}, bool close_on_exit=false)
Run a script in the user defined terminal.
+
ALBERT_EXPORT QString cacheLocation()
The app cache location.
+
ALBERT_EXPORT void toggle()
Toggle visibility of main window.
+
ALBERT_EXPORT void showSettings(QString plugin_id={})
Open/Show the settings window (of plugin).
+
ALBERT_EXPORT QString dataLocation()
The app data location.
+
ALBERT_EXPORT void restart()
Restart the app.
+
ALBERT_EXPORT void hide()
Hide the main window.
+
ALBERT_EXPORT long long runDetachedProcess(const QStringList &commandline, const QString &working_dir={})
Run a detached process.
+
ALBERT_EXPORT void quit()
Quit the app.
+
ALBERT_EXPORT std::unique_ptr< QSettings > state()
The persistent app state. @reentrant.
+
ALBERT_EXPORT std::unique_ptr< QSettings > settings()
Persistent app settings. @reentrant.
+
ALBERT_EXPORT void setClipboardText(const QString &text)
Set the system clipboard.
+
+
+ + + + diff --git a/reference/annotated.html b/reference/annotated.html new file mode 100644 index 00000000..5483c8ba --- /dev/null +++ b/reference/annotated.html @@ -0,0 +1,140 @@ + + + + + + + +Albert: Class List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Nalbert
 Nplugin
 CExtensionPluginConvenience class for native plugins
 CPluginConvenience class for native plugins
 CActionAction used by items
 CBackgroundExecutorProvides a lean interface for recurring indexing tasks
 CExtensionInterface for objects of the extension system
 CExtensionPluginInstanceConvenience template class for the most common case of a plugin providing exactly one extension
 CExtensionRegistryThe common extension registry
 CExtensionWatcherNon-QObject extension registry observer
 CFallbackHandlerFallback providing extension
 CFrontendThe interface for albert frontends
 CGlobalQueryHandlerGlobal search query handler class
 CGlobalQueryThe query interface used by GlobalQueryHandler
 CIconProviderGeneric pixmap provider
 CIndexItemThe eligible for the internal index of IndexQueryHandler
 CIndexQueryHandlerIndex query handler class
 CInputHistoryInput history class
 CItemItems displayed in the query results list
 CNotificationA system tray notification
 CPluginInstanceAbstract plugin instance class
 CPluginLoaderAbstract plugin loader class used by the plugin registry
 CPluginMetaDataCommon plugin metadata of all plugins
 CPluginProviderInterface class for a plugin providing extension
 CQueryInterface class for queries used by frontends
 CRankItemScored item Used to rank item results of mutliple handlers
 CStandardItemGeneral purpose value type Item implememtation
 CTriggerQueryHandlerTriggered query handler class
 CTriggerQueryThe query interface used by TriggerQueryHandler
+
+
+
+ + + + diff --git a/reference/annotated_dup.js b/reference/annotated_dup.js new file mode 100644 index 00000000..168db0eb --- /dev/null +++ b/reference/annotated_dup.js @@ -0,0 +1,32 @@ +var annotated_dup = +[ + [ "albert", "namespacealbert.html", [ + [ "plugin", "namespacealbert_1_1plugin.html", [ + [ "ExtensionPlugin", "classalbert_1_1plugin_1_1ExtensionPlugin.html", null ], + [ "Plugin", "classalbert_1_1plugin_1_1Plugin.html", null ] + ] ], + [ "Action", "classalbert_1_1Action.html", "classalbert_1_1Action" ], + [ "BackgroundExecutor", "classalbert_1_1BackgroundExecutor.html", "classalbert_1_1BackgroundExecutor" ], + [ "Extension", "classalbert_1_1Extension.html", "classalbert_1_1Extension" ], + [ "ExtensionPluginInstance", "classalbert_1_1ExtensionPluginInstance.html", "classalbert_1_1ExtensionPluginInstance" ], + [ "ExtensionRegistry", "classalbert_1_1ExtensionRegistry.html", "classalbert_1_1ExtensionRegistry" ], + [ "ExtensionWatcher", "classalbert_1_1ExtensionWatcher.html", "classalbert_1_1ExtensionWatcher" ], + [ "FallbackHandler", "classalbert_1_1FallbackHandler.html", "classalbert_1_1FallbackHandler" ], + [ "Frontend", "classalbert_1_1Frontend.html", "classalbert_1_1Frontend" ], + [ "GlobalQueryHandler", "classalbert_1_1GlobalQueryHandler.html", "classalbert_1_1GlobalQueryHandler" ], + [ "IconProvider", "classalbert_1_1IconProvider.html", "classalbert_1_1IconProvider" ], + [ "IndexItem", "classalbert_1_1IndexItem.html", "classalbert_1_1IndexItem" ], + [ "IndexQueryHandler", "classalbert_1_1IndexQueryHandler.html", "classalbert_1_1IndexQueryHandler" ], + [ "InputHistory", "classalbert_1_1InputHistory.html", "classalbert_1_1InputHistory" ], + [ "Item", "classalbert_1_1Item.html", "classalbert_1_1Item" ], + [ "Notification", "classalbert_1_1Notification.html", "classalbert_1_1Notification" ], + [ "PluginInstance", "classalbert_1_1PluginInstance.html", "classalbert_1_1PluginInstance" ], + [ "PluginLoader", "classalbert_1_1PluginLoader.html", "classalbert_1_1PluginLoader" ], + [ "PluginMetaData", "classalbert_1_1PluginMetaData.html", "classalbert_1_1PluginMetaData" ], + [ "PluginProvider", "classalbert_1_1PluginProvider.html", "classalbert_1_1PluginProvider" ], + [ "Query", "classalbert_1_1Query.html", "classalbert_1_1Query" ], + [ "RankItem", "classalbert_1_1RankItem.html", "classalbert_1_1RankItem" ], + [ "StandardItem", "classalbert_1_1StandardItem.html", "classalbert_1_1StandardItem" ], + [ "TriggerQueryHandler", "classalbert_1_1TriggerQueryHandler.html", "classalbert_1_1TriggerQueryHandler" ] + ] ] +]; \ No newline at end of file diff --git a/reference/backgroundexecutor_8h.html b/reference/backgroundexecutor_8h.html new file mode 100644 index 00000000..8c16674e --- /dev/null +++ b/reference/backgroundexecutor_8h.html @@ -0,0 +1,130 @@ + + + + + + + +Albert: albert/include/albert/util/backgroundexecutor.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
backgroundexecutor.h File Reference
+
+
+
#include "albert/logging.h"
+#include <QFutureWatcher>
+#include <QtConcurrent/QtConcurrent>
+#include <chrono>
+#include <functional>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::BackgroundExecutor< T >
 Provides a lean interface for recurring indexing tasks. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/backgroundexecutor_8h.js b/reference/backgroundexecutor_8h.js new file mode 100644 index 00000000..23b8c2a0 --- /dev/null +++ b/reference/backgroundexecutor_8h.js @@ -0,0 +1,4 @@ +var backgroundexecutor_8h = +[ + [ "albert::BackgroundExecutor< T >", "classalbert_1_1BackgroundExecutor.html", "classalbert_1_1BackgroundExecutor" ] +]; \ No newline at end of file diff --git a/reference/backgroundexecutor_8h_source.html b/reference/backgroundexecutor_8h_source.html new file mode 100644 index 00000000..a302a4dc --- /dev/null +++ b/reference/backgroundexecutor_8h_source.html @@ -0,0 +1,188 @@ + + + + + + + +Albert: albert/include/albert/util/backgroundexecutor.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
backgroundexecutor.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2022 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/logging.h"
+
5#include <QFutureWatcher>
+
6#include <QtConcurrent/QtConcurrent>
+
7#include <chrono>
+
8#include <functional>
+
9
+
10namespace albert
+
11{
+
12
+
17template<typename T> class BackgroundExecutor
+
18{
+
19public:
+
24 std::function<T(const bool &abort)> parallel;
+
25
+
30 std::function<void(T && results)> finish;
+
31
+
33 std::chrono::milliseconds runtime;
+
34
+
35private:
+
36 QFutureWatcher<T> future_watcher_;
+
37 bool rerun_ = false;
+
38
+
39 void onFinish() {
+
40 if (rerun_){ // discard and rerun
+
41 rerun_ = false;
+
42 run();
+
43 } else
+
44 finish(std::move(future_watcher_.future().takeResult()));
+
45 }
+
46
+
47 T run_(const bool &abort){
+
48 auto start = std::chrono::system_clock::now();
+
49 T ret = parallel(abort);
+
50 auto end = std::chrono::system_clock::now();
+
51 runtime = std::chrono::duration_cast<std::chrono::milliseconds>(end-start);
+
52 return std::move(ret);
+
53 }
+
54
+
55public:
+ +
57 QObject::connect(&future_watcher_, &QFutureWatcher<T>::finished, [this](){onFinish();});
+
58 };
+
59
+ +
61 rerun_ = false;
+
62 if (isRunning()){
+
63 WARN << "Busy wait for BackgroundExecutor task. Abortion handled correctly?";
+
64 auto start = std::chrono::system_clock::now();
+
65 future_watcher_.waitForFinished();
+
66 auto end = std::chrono::system_clock::now();
+
67 auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end-start);
+
68 WARN << QStringLiteral("Busy waited for %1 ms.").arg(duration.count());
+
69 }
+
70 };
+
71
+
75 void run() {
+
76 if (future_watcher_.isRunning())
+
77 rerun_ = true;
+
78 else
+
79 future_watcher_.setFuture(QtConcurrent::run(&BackgroundExecutor<T>::run_, this, rerun_));
+
80 }
+
81
+
84 bool isRunning() const { return future_watcher_.isRunning(); }
+
85};
+
86
+
87}
+
Provides a lean interface for recurring indexing tasks.
Definition: backgroundexecutor.h:18
+
bool isRunning() const
Returns true if the asynchronous computation is currently running; otherwise returns false.
Definition: backgroundexecutor.h:84
+
~BackgroundExecutor()
Definition: backgroundexecutor.h:60
+
std::chrono::milliseconds runtime
The runtime of the last execution of parallel.
Definition: backgroundexecutor.h:33
+
std::function< void(T &&results)> finish
The results handler.
Definition: backgroundexecutor.h:30
+
std::function< T(const bool &abort)> parallel
The task that should be executed in background.
Definition: backgroundexecutor.h:24
+
void run()
Run or schedule a rerun of the task.
Definition: backgroundexecutor.h:75
+
BackgroundExecutor()
Definition: backgroundexecutor.h:56
+ +
#define WARN
Creates a log object (level warning) you can use to pipe text into (<<).
Definition: logging.h:19
+
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/bc_s.png b/reference/bc_s.png new file mode 100644 index 00000000..224b29aa Binary files /dev/null and b/reference/bc_s.png differ diff --git a/reference/bc_sd.png b/reference/bc_sd.png new file mode 100644 index 00000000..31ca888d Binary files /dev/null and b/reference/bc_sd.png differ diff --git a/reference/bdwn.png b/reference/bdwn.png new file mode 100644 index 00000000..940a0b95 Binary files /dev/null and b/reference/bdwn.png differ diff --git a/reference/classalbert_1_1Action-members.html b/reference/classalbert_1_1Action-members.html new file mode 100644 index 00000000..ad1e06a4 --- /dev/null +++ b/reference/classalbert_1_1Action-members.html @@ -0,0 +1,114 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::Action Member List
+
+
+ +

This is the complete list of members for albert::Action, including all inherited members.

+ + + + + +
Action(QString id, QString text, std::function< void()> function)albert::Action
functionalbert::Action
idalbert::Action
textalbert::Action
+
+ + + + diff --git a/reference/classalbert_1_1Action.html b/reference/classalbert_1_1Action.html new file mode 100644 index 00000000..a307cb58 --- /dev/null +++ b/reference/classalbert_1_1Action.html @@ -0,0 +1,232 @@ + + + + + + + +Albert: albert::Action Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::Action Class Referencefinal
+
+
+ +

#include <action.h>

+

Detailed Description

+

Action used by items.

+
+ + + + +

+Public Member Functions

 Action (QString id, QString text, std::function< void()> function)
 Action constructor. More...
 
+ + + + + + + + + + +

+Public Attributes

QString id
 Identifier of the action. More...
 
QString text
 Description of the action. More...
 
std::function< void()> function
 The action function. More...
 
+

Constructor & Destructor Documentation

+ +

◆ Action()

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
albert::Action::Action (QString id,
QString text,
std::function< void()> function 
)
+
+ +

Action constructor.

+
Parameters
+ + + + +
idIdentifier of the action.
textDescription of the action.
functionThe action function.
+
+
+ +
+
+

Member Data Documentation

+ +

◆ function

+ +
+
+ + + + +
std::function<void()> albert::Action::function
+
+ +

The action function.

+ +
+
+ +

◆ id

+ +
+
+ + + + +
QString albert::Action::id
+
+ +

Identifier of the action.

+ +
+
+ +

◆ text

+ +
+
+ + + + +
QString albert::Action::text
+
+ +

Description of the action.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • albert/include/albert/extension/queryhandler/action.h
  • +
+
+
+ + + + diff --git a/reference/classalbert_1_1Action.js b/reference/classalbert_1_1Action.js new file mode 100644 index 00000000..891c0b59 --- /dev/null +++ b/reference/classalbert_1_1Action.js @@ -0,0 +1,7 @@ +var classalbert_1_1Action = +[ + [ "Action", "classalbert_1_1Action.html#a0963c26973e1b87f65050106c672fca6", null ], + [ "function", "classalbert_1_1Action.html#a3b51b223188440df06f813fc06f2b6ed", null ], + [ "id", "classalbert_1_1Action.html#a4a9974e46952a6f4852b9a34f4e546ff", null ], + [ "text", "classalbert_1_1Action.html#a1bfc14743e18269a07ef3ff9eb8798dc", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1BackgroundExecutor-members.html b/reference/classalbert_1_1BackgroundExecutor-members.html new file mode 100644 index 00000000..613416f7 --- /dev/null +++ b/reference/classalbert_1_1BackgroundExecutor-members.html @@ -0,0 +1,117 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::BackgroundExecutor< T > Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1BackgroundExecutor.html b/reference/classalbert_1_1BackgroundExecutor.html new file mode 100644 index 00000000..4a6d482f --- /dev/null +++ b/reference/classalbert_1_1BackgroundExecutor.html @@ -0,0 +1,335 @@ + + + + + + + +Albert: albert::BackgroundExecutor< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::BackgroundExecutor< T > Class Template Reference
+
+
+ +

#include <backgroundexecutor.h>

+

Detailed Description

+
template<typename T>
+class albert::BackgroundExecutor< T >

Provides a lean interface for recurring indexing tasks.

+

Takes care of the QtConcurrent boilerplate code to start, abort and scheldule restarts of threads.

Template Parameters
+ + +
Thetype of results this executor produces
+
+
+
+ + + + + + + + + + + +

+Public Member Functions

 BackgroundExecutor ()
 
 ~BackgroundExecutor ()
 
void run ()
 Run or schedule a rerun of the task. More...
 
bool isRunning () const
 Returns true if the asynchronous computation is currently running; otherwise returns false. More...
 
+ + + + + + + + + + +

+Public Attributes

std::function< T(const bool &abort)> parallel
 The task that should be executed in background. More...
 
std::function< void(T &&results)> finish
 The results handler. More...
 
std::chrono::milliseconds runtime
 The runtime of the last execution of parallel. More...
 
+

Constructor & Destructor Documentation

+ +

◆ BackgroundExecutor()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
albert::BackgroundExecutor< T >::BackgroundExecutor ()
+
+inline
+
+ +
+
+ +

◆ ~BackgroundExecutor()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
albert::BackgroundExecutor< T >::~BackgroundExecutor ()
+
+inline
+
+ +
+
+

Member Function Documentation

+ +

◆ isRunning()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
bool albert::BackgroundExecutor< T >::isRunning () const
+
+inline
+
+ +

Returns true if the asynchronous computation is currently running; otherwise returns false.

+ +
+
+ +

◆ run()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
void albert::BackgroundExecutor< T >::run ()
+
+inline
+
+ +

Run or schedule a rerun of the task.

+

If a task is running this function sets the abort flag and schedules a rerun. finish will not be called for the cancelled run.

+ +
+
+

Member Data Documentation

+ +

◆ finish

+ +
+
+
+template<typename T >
+ + + + +
std::function<void(T && results)> albert::BackgroundExecutor< T >::finish
+
+ +

The results handler.

+

When the parallel function finished, this function will be called in the main thread with the results returned by the parallel function.

Parameters
+ + +
resultsThe results parallel returned.
+
+
+ +
+
+ +

◆ parallel

+ +
+
+
+template<typename T >
+ + + + +
std::function<T(const bool &abort)> albert::BackgroundExecutor< T >::parallel
+
+ +

The task that should be executed in background.

+

This function is executed in a separate thread.

Parameters
+ + +
abortThe abort flag
+
+
+
Returns
The results of the task.
+ +
+
+ +

◆ runtime

+ +
+
+
+template<typename T >
+ + + + +
std::chrono::milliseconds albert::BackgroundExecutor< T >::runtime
+
+ +

The runtime of the last execution of parallel.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1BackgroundExecutor.js b/reference/classalbert_1_1BackgroundExecutor.js new file mode 100644 index 00000000..af46199e --- /dev/null +++ b/reference/classalbert_1_1BackgroundExecutor.js @@ -0,0 +1,10 @@ +var classalbert_1_1BackgroundExecutor = +[ + [ "BackgroundExecutor", "classalbert_1_1BackgroundExecutor.html#aabd715da822b3d7563504694bb6f7f30", null ], + [ "~BackgroundExecutor", "classalbert_1_1BackgroundExecutor.html#a373e414af23f1ff1f389194b42fc2d81", null ], + [ "isRunning", "classalbert_1_1BackgroundExecutor.html#a2d798a9bb8decb19d6ad55570b7efaae", null ], + [ "run", "classalbert_1_1BackgroundExecutor.html#a95b0814f3637d231dad8e56b351fc795", null ], + [ "finish", "classalbert_1_1BackgroundExecutor.html#a65295b14b0d2476b5118f7922b4c11b9", null ], + [ "parallel", "classalbert_1_1BackgroundExecutor.html#a6866d11ec2d2ecca149318a4b6a3f97c", null ], + [ "runtime", "classalbert_1_1BackgroundExecutor.html#a4204c4469b35e000426cebf3dc42b78b", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1Extension-members.html b/reference/classalbert_1_1Extension-members.html new file mode 100644 index 00000000..018f157e --- /dev/null +++ b/reference/classalbert_1_1Extension-members.html @@ -0,0 +1,114 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::Extension Member List
+
+
+ +

This is the complete list of members for albert::Extension, including all inherited members.

+ + + + + +
description() const =0albert::Extensionpure virtual
id() const =0albert::Extensionpure virtual
name() const =0albert::Extensionpure virtual
~Extension()=defaultalbert::Extensionvirtual
+
+ + + + diff --git a/reference/classalbert_1_1Extension.html b/reference/classalbert_1_1Extension.html new file mode 100644 index 00000000..5521337e --- /dev/null +++ b/reference/classalbert_1_1Extension.html @@ -0,0 +1,255 @@ + + + + + + + +Albert: albert::Extension Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::Extension Class Referenceabstract
+
+
+ +

#include <extension.h>

+
+Inheritance diagram for albert::Extension:
+
+
+ + +albert::FallbackHandler +albert::Frontend +albert::PluginProvider +albert::TriggerQueryHandler +albert::GlobalQueryHandler +albert::IndexQueryHandler + +
+

Detailed Description

+

Interface for objects of the extension system.

+
+ + + + + + + + + + + + +

+Public Member Functions

virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+

Constructor & Destructor Documentation

+ +

◆ ~Extension()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::Extension::~Extension ()
+
+virtualdefault
+
+ +
+
+

Member Function Documentation

+ +

◆ description()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Extension::description () const
+
+pure virtual
+
+ +

Brief description of what this extension provides.

+ +
+
+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Extension::id () const
+
+pure virtual
+
+ +

The guid of the extension.

+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Extension::name () const
+
+pure virtual
+
+ +

Pretty, human readable name.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1Extension.js b/reference/classalbert_1_1Extension.js new file mode 100644 index 00000000..42704ad7 --- /dev/null +++ b/reference/classalbert_1_1Extension.js @@ -0,0 +1,7 @@ +var classalbert_1_1Extension = +[ + [ "~Extension", "classalbert_1_1Extension.html#a1a3136f391036448f562e969e6cdef3e", null ], + [ "description", "classalbert_1_1Extension.html#a9f18ca0cf14e367e3826cdcdaa35f1c3", null ], + [ "id", "classalbert_1_1Extension.html#aba79b0b7a42a03addbb4223462362b06", null ], + [ "name", "classalbert_1_1Extension.html#a632e2c0b2818d985d5a18f966c37e56a", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1Extension.png b/reference/classalbert_1_1Extension.png new file mode 100644 index 00000000..a8a0a7f7 Binary files /dev/null and b/reference/classalbert_1_1Extension.png differ diff --git a/reference/classalbert_1_1ExtensionPluginInstance-members.html b/reference/classalbert_1_1ExtensionPluginInstance-members.html new file mode 100644 index 00000000..7544fb36 --- /dev/null +++ b/reference/classalbert_1_1ExtensionPluginInstance-members.html @@ -0,0 +1,124 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::ExtensionPluginInstance< EXTENSION > Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1ExtensionPluginInstance.html b/reference/classalbert_1_1ExtensionPluginInstance.html new file mode 100644 index 00000000..e0ac8536 --- /dev/null +++ b/reference/classalbert_1_1ExtensionPluginInstance.html @@ -0,0 +1,319 @@ + + + + + + + +Albert: albert::ExtensionPluginInstance< EXTENSION > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::ExtensionPluginInstance< EXTENSION > Class Template Reference
+
+
+ +

#include <plugininstance.h>

+
+Inheritance diagram for albert::ExtensionPluginInstance< EXTENSION >:
+
+
+ + +albert::PluginInstance +albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT > + +
+

Detailed Description

+
template<class EXTENSION>
+class albert::ExtensionPluginInstance< EXTENSION >

Convenience template class for the most common case of a plugin providing exactly one extension.

+

Inherits PluginInstance and any given Extension, overrides the virtual functions of Extension using the plugin metadata and returns itself in PluginInstance::extensions.

+
Template Parameters
+ + +
EXTENSIONThe Extension (subclass) to inherit.
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

QString id () const override
 Override returning PluginInstance::id. More...
 
QString name () const override
 Override returning PluginInstance::name. More...
 
QString description () const override
 Override returning PluginInstance::description. More...
 
std::vector< Extension * > extensions () override
 Override returning this More...
 
- Public Member Functions inherited from albert::PluginInstance
 PluginInstance ()
 
virtual ~PluginInstance ()
 
QString id () const
 The plugin identifier. More...
 
virtual QString name () const
 The human readable plugin name. More...
 
virtual QString description () const
 Brief description of the plugin. More...
 
virtual void initialize (ExtensionRegistry *)
 The initialization function. More...
 
virtual void finalize (ExtensionRegistry *)
 The finalization function. More...
 
virtual std::vector< Extension * > extensions ()
 The extensions this plugin provides. More...
 
virtual QWidget * buildConfigWidget ()
 Config widget factory. More...
 
std::unique_ptr< QDir > cacheDir () const
 The recommended cache location. More...
 
std::unique_ptr< QDir > configDir () const
 The recommended config location. More...
 
std::unique_ptr< QDir > dataDir () const
 The recommended data location. More...
 
std::unique_ptr< QSettings > settings () const
 Prepared settings object. More...
 
+ + + + +

+Additional Inherited Members

- Protected Attributes inherited from albert::PluginInstance
const std::unique_ptr< PluginInstancePrivate > d
 
+

Member Function Documentation

+ +

◆ description()

+ +
+
+
+template<class EXTENSION >
+ + + + + +
+ + + + + + + +
QString albert::ExtensionPluginInstance< EXTENSION >::description () const
+
+inlineoverridevirtual
+
+ +

Override returning PluginInstance::description.

+ +

Reimplemented from albert::PluginInstance.

+ +
+
+ +

◆ extensions()

+ +
+
+
+template<class EXTENSION >
+ + + + + +
+ + + + + + + +
std::vector< Extension * > albert::ExtensionPluginInstance< EXTENSION >::extensions ()
+
+inlineoverridevirtual
+
+ +

Override returning this

+ +

Reimplemented from albert::PluginInstance.

+ +
+
+ +

◆ id()

+ +
+
+
+template<class EXTENSION >
+ + + + + +
+ + + + + + + +
QString albert::ExtensionPluginInstance< EXTENSION >::id () const
+
+inlineoverride
+
+ +

Override returning PluginInstance::id.

+ +
+
+ +

◆ name()

+ +
+
+
+template<class EXTENSION >
+ + + + + +
+ + + + + + + +
QString albert::ExtensionPluginInstance< EXTENSION >::name () const
+
+inlineoverridevirtual
+
+ +

Override returning PluginInstance::name.

+ +

Reimplemented from albert::PluginInstance.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1ExtensionPluginInstance.js b/reference/classalbert_1_1ExtensionPluginInstance.js new file mode 100644 index 00000000..b10e934d --- /dev/null +++ b/reference/classalbert_1_1ExtensionPluginInstance.js @@ -0,0 +1,7 @@ +var classalbert_1_1ExtensionPluginInstance = +[ + [ "description", "classalbert_1_1ExtensionPluginInstance.html#aaab9606ded1e13dc2433130b8b388d08", null ], + [ "extensions", "classalbert_1_1ExtensionPluginInstance.html#a96907d598865d3d1b84f570961e96bd3", null ], + [ "id", "classalbert_1_1ExtensionPluginInstance.html#a3ed9f550076fa27f55eb071ed704c102", null ], + [ "name", "classalbert_1_1ExtensionPluginInstance.html#a38bf089a2c69872ac046dbef78209c84", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1ExtensionPluginInstance.png b/reference/classalbert_1_1ExtensionPluginInstance.png new file mode 100644 index 00000000..a447b01f Binary files /dev/null and b/reference/classalbert_1_1ExtensionPluginInstance.png differ diff --git a/reference/classalbert_1_1ExtensionRegistry-members.html b/reference/classalbert_1_1ExtensionRegistry-members.html new file mode 100644 index 00000000..9df88851 --- /dev/null +++ b/reference/classalbert_1_1ExtensionRegistry-members.html @@ -0,0 +1,117 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::ExtensionRegistry Member List
+
+
+ +

This is the complete list of members for albert::ExtensionRegistry, including all inherited members.

+ + + + + + + + +
add(Extension *e)albert::ExtensionRegistry
added(Extension *)albert::ExtensionRegistrysignal
extension(const QString &id)albert::ExtensionRegistryinline
extensions()albert::ExtensionRegistry
extensions()albert::ExtensionRegistryinline
remove(Extension *e)albert::ExtensionRegistry
removed(Extension *)albert::ExtensionRegistrysignal
+
+ + + + diff --git a/reference/classalbert_1_1ExtensionRegistry.html b/reference/classalbert_1_1ExtensionRegistry.html new file mode 100644 index 00000000..aca17337 --- /dev/null +++ b/reference/classalbert_1_1ExtensionRegistry.html @@ -0,0 +1,331 @@ + + + + + + + +Albert: albert::ExtensionRegistry Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::ExtensionRegistry Class Reference
+
+
+ +

#include <extensionregistry.h>

+
+Inheritance diagram for albert::ExtensionRegistry:
+
+
+ +
+

Detailed Description

+

The common extension registry.

+

Use in the main thread only. Neither threadsafe, nor reentrant.

+
+ + + + + + + +

+Signals

void added (Extension *)
 Emitted when an extension has been registered. More...
 
void removed (Extension *)
 Emitted when an extension has been deregistered. More...
 
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

void add (Extension *e)
 Add extension to the registry. More...
 
void remove (Extension *e)
 Remove extension from the registry. More...
 
const std::map< QString, Extension * > & extensions ()
 Get map of all registered extensions. More...
 
template<typename T >
std::map< QString, T * > extensions ()
 Get map of all extensions of type T. More...
 
template<typename T >
T * extension (const QString &id)
 Get extension by id implicitly dynamic_cast'ed to type T. More...
 
+

Member Function Documentation

+ +

◆ add()

+ +
+
+ + + + + + + + +
void albert::ExtensionRegistry::add (Extensione)
+
+ +

Add extension to the registry.

+ +
+
+ +

◆ added

+ +
+
+ + + + + +
+ + + + + + + + +
void albert::ExtensionRegistry::added (Extension)
+
+signal
+
+ +

Emitted when an extension has been registered.

+ +
+
+ +

◆ extension()

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + + +
T * albert::ExtensionRegistry::extension (const QString & id)
+
+inline
+
+ +

Get extension by id implicitly dynamic_cast'ed to type T.

+ +
+
+ +

◆ extensions() [1/2]

+ +
+
+ + + + + + + +
const std::map< QString, Extension * > & albert::ExtensionRegistry::extensions ()
+
+ +

Get map of all registered extensions.

+ +
+
+ +

◆ extensions() [2/2]

+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
std::map< QString, T * > albert::ExtensionRegistry::extensions ()
+
+inline
+
+ +

Get map of all extensions of type T.

+ +
+
+ +

◆ remove()

+ +
+
+ + + + + + + + +
void albert::ExtensionRegistry::remove (Extensione)
+
+ +

Remove extension from the registry.

+ +
+
+ +

◆ removed

+ +
+
+ + + + + +
+ + + + + + + + +
void albert::ExtensionRegistry::removed (Extension)
+
+signal
+
+ +

Emitted when an extension has been deregistered.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1ExtensionRegistry.js b/reference/classalbert_1_1ExtensionRegistry.js new file mode 100644 index 00000000..506bec1a --- /dev/null +++ b/reference/classalbert_1_1ExtensionRegistry.js @@ -0,0 +1,10 @@ +var classalbert_1_1ExtensionRegistry = +[ + [ "add", "classalbert_1_1ExtensionRegistry.html#a357b02e493167653f07051c5584f19a1", null ], + [ "added", "classalbert_1_1ExtensionRegistry.html#a845f61794954dc73bb9b2722f459c1d4", null ], + [ "extension", "classalbert_1_1ExtensionRegistry.html#a99839edb159935ec09401b74c8e00428", null ], + [ "extensions", "classalbert_1_1ExtensionRegistry.html#addd09e90a5ce026ce8c8a491affe68a7", null ], + [ "extensions", "classalbert_1_1ExtensionRegistry.html#aec42b55ef9a0fa5876f3f88dbac9b19d", null ], + [ "remove", "classalbert_1_1ExtensionRegistry.html#afccc877de2e759c2cc02882ec28a8784", null ], + [ "removed", "classalbert_1_1ExtensionRegistry.html#a5ed04eff2f2f6230a6bd54ca0ab12e32", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1ExtensionRegistry.png b/reference/classalbert_1_1ExtensionRegistry.png new file mode 100644 index 00000000..952c683b Binary files /dev/null and b/reference/classalbert_1_1ExtensionRegistry.png differ diff --git a/reference/classalbert_1_1ExtensionWatcher-members.html b/reference/classalbert_1_1ExtensionWatcher-members.html new file mode 100644 index 00000000..8d45e579 --- /dev/null +++ b/reference/classalbert_1_1ExtensionWatcher-members.html @@ -0,0 +1,115 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::ExtensionWatcher< T > Member List
+
+
+ +

This is the complete list of members for albert::ExtensionWatcher< T >, including all inherited members.

+ + + + + + +
ExtensionWatcher(ExtensionRegistry *registry=nullptr)albert::ExtensionWatcher< T >inlineexplicit
onAdd(T *)albert::ExtensionWatcher< T >inlineprotectedvirtual
onRem(T *)albert::ExtensionWatcher< T >inlineprotectedvirtual
setExtensionRegistry(ExtensionRegistry *registry)albert::ExtensionWatcher< T >inline
~ExtensionWatcher()albert::ExtensionWatcher< T >inlinevirtual
+
+ + + + diff --git a/reference/classalbert_1_1ExtensionWatcher.html b/reference/classalbert_1_1ExtensionWatcher.html new file mode 100644 index 00000000..666752f9 --- /dev/null +++ b/reference/classalbert_1_1ExtensionWatcher.html @@ -0,0 +1,303 @@ + + + + + + + +Albert: albert::ExtensionWatcher< T > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::ExtensionWatcher< T > Class Template Reference
+
+
+ +

#include <extensionwatcher.h>

+

Detailed Description

+
template<class T>
+class albert::ExtensionWatcher< T >

Non-QObject extension registry observer.

+

Convenient tool to observe the extension registry for types you are interested in. Rationale: QObject does neither support templates nor abstract classes also each object must inherit only one QObject. Therefore this class does not use QObject.

See also
ExtensionRegistry
+
+ + + + + + + + + +

+Public Member Functions

 ExtensionWatcher (ExtensionRegistry *registry=nullptr)
 ExtensionWatcher constructor. More...
 
virtual ~ExtensionWatcher ()
 
void setExtensionRegistry (ExtensionRegistry *registry)
 Sets the extension registry to track. More...
 
+ + + + + + + +

+Protected Member Functions

virtual void onAdd (T *)
 Called when an extension has been registered. More...
 
virtual void onRem (T *)
 Called when an extension has been deregistered. More...
 
+

Constructor & Destructor Documentation

+ +

◆ ExtensionWatcher()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
albert::ExtensionWatcher< T >::ExtensionWatcher (ExtensionRegistryregistry = nullptr)
+
+inlineexplicit
+
+ +

ExtensionWatcher constructor.

+
Parameters
+ + +
registryThe extension registry to track. May be set later.
+
+
+ +
+
+ +

◆ ~ExtensionWatcher()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual albert::ExtensionWatcher< T >::~ExtensionWatcher ()
+
+inlinevirtual
+
+ +
+
+

Member Function Documentation

+ +

◆ onAdd()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
virtual void albert::ExtensionWatcher< T >::onAdd (T * )
+
+inlineprotectedvirtual
+
+ +

Called when an extension has been registered.

+ +
+
+ +

◆ onRem()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
virtual void albert::ExtensionWatcher< T >::onRem (T * )
+
+inlineprotectedvirtual
+
+ +

Called when an extension has been deregistered.

+ +
+
+ +

◆ setExtensionRegistry()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void albert::ExtensionWatcher< T >::setExtensionRegistry (ExtensionRegistryregistry)
+
+inline
+
+ +

Sets the extension registry to track.

+
Parameters
+ + +
registryThe extension registry to track
+
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1ExtensionWatcher.js b/reference/classalbert_1_1ExtensionWatcher.js new file mode 100644 index 00000000..01c9da7a --- /dev/null +++ b/reference/classalbert_1_1ExtensionWatcher.js @@ -0,0 +1,8 @@ +var classalbert_1_1ExtensionWatcher = +[ + [ "ExtensionWatcher", "classalbert_1_1ExtensionWatcher.html#a57a54853c36f1ae178c2ad16761fc1db", null ], + [ "~ExtensionWatcher", "classalbert_1_1ExtensionWatcher.html#a9b9f213fe24d184534616d3a4f2e7fe2", null ], + [ "onAdd", "classalbert_1_1ExtensionWatcher.html#acbd16bc3d28cf3934819c5bc3d8d7aa7", null ], + [ "onRem", "classalbert_1_1ExtensionWatcher.html#abbff93ba70d0f828f0345ee0b65ab74c", null ], + [ "setExtensionRegistry", "classalbert_1_1ExtensionWatcher.html#a8c749a8b8f76c7e6c19b9dcdd8e8d765", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1FallbackHandler-members.html b/reference/classalbert_1_1FallbackHandler-members.html new file mode 100644 index 00000000..039843e8 --- /dev/null +++ b/reference/classalbert_1_1FallbackHandler-members.html @@ -0,0 +1,115 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::FallbackHandler Member List
+
+
+ +

This is the complete list of members for albert::FallbackHandler, including all inherited members.

+ + + + + + +
description() const =0albert::Extensionpure virtual
fallbacks(const QString &) const =0albert::FallbackHandlerpure virtual
id() const =0albert::Extensionpure virtual
name() const =0albert::Extensionpure virtual
~Extension()=defaultalbert::Extensionvirtual
+
+ + + + diff --git a/reference/classalbert_1_1FallbackHandler.html b/reference/classalbert_1_1FallbackHandler.html new file mode 100644 index 00000000..40a8b0c1 --- /dev/null +++ b/reference/classalbert_1_1FallbackHandler.html @@ -0,0 +1,176 @@ + + + + + + + +Albert: albert::FallbackHandler Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::FallbackHandler Class Referenceabstract
+
+
+ +

#include <fallbackprovider.h>

+
+Inheritance diagram for albert::FallbackHandler:
+
+
+ + +albert::Extension + +
+

Detailed Description

+

Fallback providing extension.

+

Use this if you want to add items to the fallbacks shown if a query yielded no results

+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

virtual std::vector< std::shared_ptr< Item > > fallbacks (const QString &) const =0
 Fallbacks provided by this handler. More...
 
- Public Member Functions inherited from albert::Extension
virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+

Member Function Documentation

+ +

◆ fallbacks()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector< std::shared_ptr< Item > > albert::FallbackHandler::fallbacks (const QString & ) const
+
+pure virtual
+
+ +

Fallbacks provided by this handler.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1FallbackHandler.js b/reference/classalbert_1_1FallbackHandler.js new file mode 100644 index 00000000..d97272a3 --- /dev/null +++ b/reference/classalbert_1_1FallbackHandler.js @@ -0,0 +1,4 @@ +var classalbert_1_1FallbackHandler = +[ + [ "fallbacks", "classalbert_1_1FallbackHandler.html#a131fd6896a43672eac646f29da7222ed", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1FallbackHandler.png b/reference/classalbert_1_1FallbackHandler.png new file mode 100644 index 00000000..e6caa69c Binary files /dev/null and b/reference/classalbert_1_1FallbackHandler.png differ diff --git a/reference/classalbert_1_1Frontend-members.html b/reference/classalbert_1_1Frontend-members.html new file mode 100644 index 00000000..cf59fe0b --- /dev/null +++ b/reference/classalbert_1_1Frontend-members.html @@ -0,0 +1,122 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::Frontend Member List
+
+
+ +

This is the complete list of members for albert::Frontend, including all inherited members.

+ + + + + + + + + + + + + +
::Appalbert::Frontendfriend
createFrontendConfigWidget()=0albert::Frontendpure virtual
description() const =0albert::Extensionpure virtual
id() const =0albert::Extensionpure virtual
input() const =0albert::Frontendpure virtual
isVisible() const =0albert::Frontendpure virtual
name() const =0albert::Extensionpure virtual
query(const QString &query) constalbert::Frontend
setInput(const QString &)=0albert::Frontendpure virtual
setVisible(bool visible)=0albert::Frontendpure virtual
winId() const =0albert::Frontendpure virtual
~Extension()=defaultalbert::Extensionvirtual
+
+ + + + diff --git a/reference/classalbert_1_1Frontend.html b/reference/classalbert_1_1Frontend.html new file mode 100644 index 00000000..aac62c0d --- /dev/null +++ b/reference/classalbert_1_1Frontend.html @@ -0,0 +1,379 @@ + + + + + + + +Albert: albert::Frontend Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::Frontend Class Referenceabstract
+
+
+ +

#include <frontend.h>

+
+Inheritance diagram for albert::Frontend:
+
+
+ + +albert::Extension + +
+

Detailed Description

+

The interface for albert frontends.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual bool isVisible () const =0
 Visibility of the frontend. More...
 
virtual void setVisible (bool visible)=0
 Set the visibility state of the frontend. More...
 
virtual QString input () const =0
 Input line text. More...
 
virtual void setInput (const QString &)=0
 Input line text setter. More...
 
virtual unsigned long long winId () const =0
 The native window id. Used to apply platform quirks. More...
 
virtual QWidget * createFrontendConfigWidget ()=0
 The config widget show in the window settings tab. More...
 
std::shared_ptr< Queryquery (const QString &query) const
 The query object factory. More...
 
- Public Member Functions inherited from albert::Extension
virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+ + + +

+Friends

class ::App
 
+

Member Function Documentation

+ +

◆ createFrontendConfigWidget()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QWidget * albert::Frontend::createFrontendConfigWidget ()
+
+pure virtual
+
+ +

The config widget show in the window settings tab.

+ +
+
+ +

◆ input()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Frontend::input () const
+
+pure virtual
+
+ +

Input line text.

+ +
+
+ +

◆ isVisible()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool albert::Frontend::isVisible () const
+
+pure virtual
+
+ +

Visibility of the frontend.

+ +
+
+ +

◆ query()

+ +
+
+ + + + + + + + +
std::shared_ptr< Query > albert::Frontend::query (const QString & query) const
+
+ +

The query object factory.

+
Note
The QueryEngine is not available in the constructor.
+ +
+
+ +

◆ setInput()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::Frontend::setInput (const QString & )
+
+pure virtual
+
+ +

Input line text setter.

+ +
+
+ +

◆ setVisible()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::Frontend::setVisible (bool visible)
+
+pure virtual
+
+ +

Set the visibility state of the frontend.

+ +
+
+ +

◆ winId()

+ +
+
+ + + + + +
+ + + + + + + +
virtual unsigned long long albert::Frontend::winId () const
+
+pure virtual
+
+ +

The native window id. Used to apply platform quirks.

+ +
+
+

Friends And Related Function Documentation

+ +

◆ ::App

+ +
+
+ + + + + +
+ + + + +
friend class ::App
+
+friend
+
+ +
+
+
The documentation for this class was generated from the following file:
    +
  • albert/include/albert/extension/frontend/frontend.h
  • +
+
+
+ + + + diff --git a/reference/classalbert_1_1Frontend.js b/reference/classalbert_1_1Frontend.js new file mode 100644 index 00000000..f567bfb2 --- /dev/null +++ b/reference/classalbert_1_1Frontend.js @@ -0,0 +1,11 @@ +var classalbert_1_1Frontend = +[ + [ "createFrontendConfigWidget", "classalbert_1_1Frontend.html#aef8cf9086d6ecaf22af974c499f3e0b4", null ], + [ "input", "classalbert_1_1Frontend.html#a79f9cfdf9e46cdf5cacb10a87e675d2c", null ], + [ "isVisible", "classalbert_1_1Frontend.html#af6c0a0806b24fb6d7be13853f504f79f", null ], + [ "query", "classalbert_1_1Frontend.html#ae88197ae3e1ee2e6d8e42238fbd77e05", null ], + [ "setInput", "classalbert_1_1Frontend.html#a08349cc72ea7d21aa6bd989e1cf84991", null ], + [ "setVisible", "classalbert_1_1Frontend.html#a18af1da7411cb5ca3a9e90471f8f70a0", null ], + [ "winId", "classalbert_1_1Frontend.html#a7c6eaea8a9f97ce48ee0c227760b4557", null ], + [ "::App", "classalbert_1_1Frontend.html#a0e12955bd7e1f66f3af953873b560957", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1Frontend.png b/reference/classalbert_1_1Frontend.png new file mode 100644 index 00000000..a8d25caf Binary files /dev/null and b/reference/classalbert_1_1Frontend.png differ diff --git a/reference/classalbert_1_1GlobalQueryHandler-members.html b/reference/classalbert_1_1GlobalQueryHandler-members.html new file mode 100644 index 00000000..60d8fcee --- /dev/null +++ b/reference/classalbert_1_1GlobalQueryHandler-members.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::GlobalQueryHandler Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1GlobalQueryHandler.html b/reference/classalbert_1_1GlobalQueryHandler.html new file mode 100644 index 00000000..b546286d --- /dev/null +++ b/reference/classalbert_1_1GlobalQueryHandler.html @@ -0,0 +1,325 @@ + + + + + + + +Albert: albert::GlobalQueryHandler Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::GlobalQueryHandler Class Referenceabstract
+
+
+ +

#include <globalqueryhandler.h>

+
+Inheritance diagram for albert::GlobalQueryHandler:
+
+
+ + +albert::TriggerQueryHandler +albert::Extension +albert::IndexQueryHandler + +
+

Detailed Description

+

Global search query handler class.

+

A functional query handler returning scored items. Applicable for the global search. Use this if you want your results show up in the global search. Implements TriggeredQueryHandler.

Note
Do not use this for long running tasks!
+
See also
TriggeredQueryHandler
+
+ + + + +

+Classes

class  GlobalQuery
 The query interface used by GlobalQueryHandler. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GlobalQueryHandler ()
 
 ~GlobalQueryHandler () override
 
virtual std::vector< RankItemhandleGlobalQuery (const GlobalQuery *) const =0
 The query processing function. More...
 
void applyUsageScore (std::vector< RankItem > *) const
 Takes rank items and modifies the score according to the users usage. More...
 
void handleTriggerQuery (TriggerQuery *) const override
 Implements handleTriggerQuery(…). More...
 
- Public Member Functions inherited from albert::TriggerQueryHandler
 TriggerQueryHandler ()
 
 ~TriggerQueryHandler ()
 
QString trigger () const
 The user configured trigger of this handler. More...
 
virtual QString synopsis () const
 The synopsis, displayed on empty query. More...
 
virtual QString defaultTrigger () const
 The default (not user defined) trigger. Default Extension::id(). More...
 
virtual bool allowTriggerRemap () const
 Enable user remapping of the trigger. Default false. More...
 
virtual bool supportsFuzzyMatching () const
 Fuzzy matching capability. Default false. More...
 
virtual bool fuzzyMatching () const
 Fuzzy matching. Default false. More...
 
virtual void setFuzzyMatching (bool enabled)
 Fuzzy matching behavior. Default does nothing. More...
 
virtual void handleTriggerQuery (TriggerQuery *) const =0
 The trigger query processing function. More...
 
- Public Member Functions inherited from albert::Extension
virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+

Constructor & Destructor Documentation

+ +

◆ GlobalQueryHandler()

+ +
+
+ + + + + + + +
albert::GlobalQueryHandler::GlobalQueryHandler ()
+
+ +
+
+ +

◆ ~GlobalQueryHandler()

+ +
+
+ + + + + +
+ + + + + + + +
albert::GlobalQueryHandler::~GlobalQueryHandler ()
+
+override
+
+ +
+
+

Member Function Documentation

+ +

◆ applyUsageScore()

+ +
+
+ + + + + + + + +
void albert::GlobalQueryHandler::applyUsageScore (std::vector< RankItem > * ) const
+
+ +

Takes rank items and modifies the score according to the users usage.

+

Use this if you want to reuse your global results in the trigger handler.

+ +
+
+ +

◆ handleGlobalQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual std::vector< RankItem > albert::GlobalQueryHandler::handleGlobalQuery (const GlobalQuery) const
+
+pure virtual
+
+ +

The query processing function.

+

The match score should make sense and often (if not always) be the fraction matched chars (legth of query string / length of item title).

Returns
A list of match items. Empty query should return all items with a score of 0.
+
Note
Executed in a worker thread.
+ +

Implemented in albert::IndexQueryHandler.

+ +
+
+ +

◆ handleTriggerQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
void albert::GlobalQueryHandler::handleTriggerQuery (TriggerQuery) const
+
+overridevirtual
+
+ +

Implements handleTriggerQuery(…).

+

Sort and batch add rankItems(…).

Note
Reimplement if the handler should have custom triggered behavior, but think twice if this is necessary. It may break user expectation.
+
See also
handleTriggerQuery and rankItems
+ +

Implements albert::TriggerQueryHandler.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1GlobalQueryHandler.js b/reference/classalbert_1_1GlobalQueryHandler.js new file mode 100644 index 00000000..f5d9912c --- /dev/null +++ b/reference/classalbert_1_1GlobalQueryHandler.js @@ -0,0 +1,9 @@ +var classalbert_1_1GlobalQueryHandler = +[ + [ "GlobalQuery", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery" ], + [ "GlobalQueryHandler", "classalbert_1_1GlobalQueryHandler.html#af8a4ed2ed60a8663bad38540e89f327d", null ], + [ "~GlobalQueryHandler", "classalbert_1_1GlobalQueryHandler.html#a3e4cba0351c0d47953476559db4b9b3a", null ], + [ "applyUsageScore", "classalbert_1_1GlobalQueryHandler.html#a656d92e3b99137024993f7721e02e676", null ], + [ "handleGlobalQuery", "classalbert_1_1GlobalQueryHandler.html#a5d645c60fc65a716cb38ba960727605b", null ], + [ "handleTriggerQuery", "classalbert_1_1GlobalQueryHandler.html#a165f839630152ddfd2ecc18a1d01c2ae", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1GlobalQueryHandler.png b/reference/classalbert_1_1GlobalQueryHandler.png new file mode 100644 index 00000000..4da5fa6d Binary files /dev/null and b/reference/classalbert_1_1GlobalQueryHandler.png differ diff --git a/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery-members.html b/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery-members.html new file mode 100644 index 00000000..e67dbe08 --- /dev/null +++ b/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery-members.html @@ -0,0 +1,113 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::GlobalQueryHandler::GlobalQuery Member List
+
+
+ +

This is the complete list of members for albert::GlobalQueryHandler::GlobalQuery, including all inherited members.

+ + + + +
isValid() const =0albert::GlobalQueryHandler::GlobalQuerypure virtual
string() const =0albert::GlobalQueryHandler::GlobalQuerypure virtual
~GlobalQuery()=defaultalbert::GlobalQueryHandler::GlobalQueryvirtual
+
+ + + + diff --git a/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html b/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html new file mode 100644 index 00000000..684c9719 --- /dev/null +++ b/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html @@ -0,0 +1,212 @@ + + + + + + + +Albert: albert::GlobalQueryHandler::GlobalQuery Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::GlobalQueryHandler::GlobalQuery Class Referenceabstract
+
+
+ +

#include <globalqueryhandler.h>

+

Detailed Description

+

The query interface used by GlobalQueryHandler.

+
+ + + + + + + + + +

+Public Member Functions

virtual ~GlobalQuery ()=default
 
virtual QString string () const =0
 The query string excluding the trigger. More...
 
virtual const bool & isValid () const =0
 True if query has not been cancelled. More...
 
+

Constructor & Destructor Documentation

+ +

◆ ~GlobalQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::GlobalQueryHandler::GlobalQuery::~GlobalQuery ()
+
+virtualdefault
+
+ +
+
+

Member Function Documentation

+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const bool & albert::GlobalQueryHandler::GlobalQuery::isValid () const
+
+pure virtual
+
+ +

True if query has not been cancelled.

+
Note
Stop query processing if false.
+ +
+
+ +

◆ string()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::GlobalQueryHandler::GlobalQuery::string () const
+
+pure virtual
+
+ +

The query string excluding the trigger.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.js b/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.js new file mode 100644 index 00000000..ddcca486 --- /dev/null +++ b/reference/classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.js @@ -0,0 +1,6 @@ +var classalbert_1_1GlobalQueryHandler_1_1GlobalQuery = +[ + [ "~GlobalQuery", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a6e6f8c2c75061434c7458e00bc642ec0", null ], + [ "isValid", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a099f6b2d7b99e8acd2694d791d8d79ab", null ], + [ "string", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a6077a5394564eec16474dbb4b3a43559", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1IconProvider-members.html b/reference/classalbert_1_1IconProvider-members.html new file mode 100644 index 00000000..70ad33d1 --- /dev/null +++ b/reference/classalbert_1_1IconProvider-members.html @@ -0,0 +1,115 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::IconProvider Member List
+
+
+ +

This is the complete list of members for albert::IconProvider, including all inherited members.

+ + + + + + +
clearCache()albert::IconProvider
getPixmap(const QStringList &urls, QSize *size, const QSize &requestedSize) constalbert::IconProvider
getPixmap(const QString &url, QSize *size, const QSize &requestedSize) constalbert::IconProvider
IconProvider()albert::IconProvider
~IconProvider()albert::IconProvider
+
+ + + + diff --git a/reference/classalbert_1_1IconProvider.html b/reference/classalbert_1_1IconProvider.html new file mode 100644 index 00000000..6d29f97a --- /dev/null +++ b/reference/classalbert_1_1IconProvider.html @@ -0,0 +1,302 @@ + + + + + + + +Albert: albert::IconProvider Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::IconProvider Class Reference
+
+
+ +

#include <iconprovider.h>

+

Detailed Description

+

Generic pixmap provider.

+
+ + + + + + + + + + + + + + +

+Public Member Functions

 IconProvider ()
 
 ~IconProvider ()
 
QPixmap getPixmap (const QStringList &urls, QSize *size, const QSize &requestedSize) const
 Pixmap providing function. More...
 
QPixmap getPixmap (const QString &url, QSize *size, const QSize &requestedSize) const
 Pixmap providing function. More...
 
void clearCache ()
 Clears the internal icon cache. More...
 
+

Constructor & Destructor Documentation

+ +

◆ IconProvider()

+ +
+
+ + + + + + + +
albert::IconProvider::IconProvider ()
+
+ +
+
+ +

◆ ~IconProvider()

+ +
+
+ + + + + + + +
albert::IconProvider::~IconProvider ()
+
+ +
+
+

Member Function Documentation

+ +

◆ clearCache()

+ +
+
+ + + + + + + +
void albert::IconProvider::clearCache ()
+
+ +

Clears the internal icon cache.

+ +
+
+ +

◆ getPixmap() [1/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
QPixmap albert::IconProvider::getPixmap (const QString & url,
QSize * size,
const QSize & requestedSize 
) const
+
+ +

Pixmap providing function.

+
Parameters
+ + + + +
sizeWill get assigned the actual size of the pixmap created
requestedSizeThe size the pixmap should have if possible.
urlThe URL of the pixmap to be created. Supported url schemes:
    +
  • <path> or file:<path> Use the file at path as icon.
  • +
  • :<path> or qrc:<path> Use the file at path in the resource collection as icon.
  • +
  • qfip:<path> Use QFileIconProvider to get a generic icon for the file at <path>.
  • +
  • qsp:<pixmap enumerator> Get an icon from QStyle::StandardPixmap enum.
  • +
  • xdg:<icon name> Performs freedesktop icon theme specification lookup (on supported platforms only) to get an icon.
  • +
  • gen:<> Generate an icon on the fly. Supports drawing a background circle and renders text on it. All parameters are optional. Available parameters are:

      +
    • background: The background color (default: none). See also QColor::fromString.
    • +
    • foreground: (default: window text color from system palette)
    • +
    • text: (default: none) The text to display
    • +
    • fontscalar: (default: 1) Scalar for the default font size which is the pixmap height.
    • +
    +

    Examples

    /absolute/path/to/a/local/image/file.png
    +file:/absolute/path/to/a/local/image/file.png
    +:path-to-a-qresource-file
    +qrc:path-to-a-qresource-file
    +qfip:/path/to/any/file/for/example/a.pdf
    +qsp:SP_TrashIcon
    +xdg:some-themed-icon-name
    +gen:?background=blue&foreground=red&text=Hi&fontscalar=0.5
    +
  • +
+
+
+
+
Returns
The pixmap, if available, null pixmap otherwise.
+ +
+
+ +

◆ getPixmap() [2/2]

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
QPixmap albert::IconProvider::getPixmap (const QStringList & urls,
QSize * size,
const QSize & requestedSize 
) const
+
+ +

Pixmap providing function.

+

See getPixmap(const QString &url, QSize *size, const QSize &requestedSize) const for supported urls.

Parameters
+ + + + +
urlsThe URLs of the pixmap to be created.
sizeWill get assigned the actual size of the pixmap created
requestedSizeThe size the pixmap should have if possible.
+
+
+
Returns
The first pixmap available in the urls list. Null pixmap otherwise.
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1IconProvider.js b/reference/classalbert_1_1IconProvider.js new file mode 100644 index 00000000..3d9f8f6f --- /dev/null +++ b/reference/classalbert_1_1IconProvider.js @@ -0,0 +1,8 @@ +var classalbert_1_1IconProvider = +[ + [ "IconProvider", "classalbert_1_1IconProvider.html#a136fb53ba65c54eaebaa695354e18c3d", null ], + [ "~IconProvider", "classalbert_1_1IconProvider.html#a9974dd36fa979a4a35041f4b2c386b30", null ], + [ "clearCache", "classalbert_1_1IconProvider.html#a96d8211025eff709ddc09d0321f947bd", null ], + [ "getPixmap", "classalbert_1_1IconProvider.html#a55a13ae97b28bc322a39033cd97ff236", null ], + [ "getPixmap", "classalbert_1_1IconProvider.html#a5ba04d9cddde22e03effc8c66fe1a941", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1IndexItem-members.html b/reference/classalbert_1_1IndexItem-members.html new file mode 100644 index 00000000..8f81a56e --- /dev/null +++ b/reference/classalbert_1_1IndexItem-members.html @@ -0,0 +1,113 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::IndexItem Member List
+
+
+ +

This is the complete list of members for albert::IndexItem, including all inherited members.

+ + + + +
IndexItem(std::shared_ptr< Item > item, QString string)albert::IndexItem
itemalbert::IndexItem
stringalbert::IndexItem
+
+ + + + diff --git a/reference/classalbert_1_1IndexItem.html b/reference/classalbert_1_1IndexItem.html new file mode 100644 index 00000000..31ca45de --- /dev/null +++ b/reference/classalbert_1_1IndexItem.html @@ -0,0 +1,204 @@ + + + + + + + +Albert: albert::IndexItem Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::IndexItem Class Reference
+
+
+ +

#include <indexitem.h>

+

Detailed Description

+

The eligible for the internal index of IndexQueryHandler.

+
See also
IndexQueryHandler
+
+ + + +

+Public Member Functions

 IndexItem (std::shared_ptr< Item > item, QString string)
 
+ + + + + + + +

+Public Attributes

std::shared_ptr< Itemitem
 The item to be indexed. More...
 
QString string
 The corresponding lookup string. More...
 
+

Constructor & Destructor Documentation

+ +

◆ IndexItem()

+ +
+
+ + + + + + + + + + + + + + + + + + +
albert::IndexItem::IndexItem (std::shared_ptr< Itemitem,
QString string 
)
+
+
Parameters
+ + + +
itemThe item to be indexed.
stringThe corresponding lookup string.
+
+
+ +
+
+

Member Data Documentation

+ +

◆ item

+ +
+
+ + + + +
std::shared_ptr<Item> albert::IndexItem::item
+
+ +

The item to be indexed.

+ +
+
+ +

◆ string

+ +
+
+ + + + +
QString albert::IndexItem::string
+
+ +

The corresponding lookup string.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • albert/include/albert/extension/queryhandler/indexitem.h
  • +
+
+
+ + + + diff --git a/reference/classalbert_1_1IndexItem.js b/reference/classalbert_1_1IndexItem.js new file mode 100644 index 00000000..4f2eaaab --- /dev/null +++ b/reference/classalbert_1_1IndexItem.js @@ -0,0 +1,6 @@ +var classalbert_1_1IndexItem = +[ + [ "IndexItem", "classalbert_1_1IndexItem.html#af4fcc3f09f8f612437fb81d215216954", null ], + [ "item", "classalbert_1_1IndexItem.html#a627e86379552accd1c25d4d12c67399e", null ], + [ "string", "classalbert_1_1IndexItem.html#ae09f09fb44d713487a40f1e416172cd2", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1IndexQueryHandler-members.html b/reference/classalbert_1_1IndexQueryHandler-members.html new file mode 100644 index 00000000..e1e150d8 --- /dev/null +++ b/reference/classalbert_1_1IndexQueryHandler-members.html @@ -0,0 +1,132 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::IndexQueryHandler Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1IndexQueryHandler.html b/reference/classalbert_1_1IndexQueryHandler.html new file mode 100644 index 00000000..3bf27a7b --- /dev/null +++ b/reference/classalbert_1_1IndexQueryHandler.html @@ -0,0 +1,454 @@ + + + + + + + +Albert: albert::IndexQueryHandler Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::IndexQueryHandler Class Referenceabstract
+
+
+ +

#include <indexqueryhandler.h>

+
+Inheritance diagram for albert::IndexQueryHandler:
+
+
+ + +albert::GlobalQueryHandler +albert::TriggerQueryHandler +albert::Extension + +
+

Detailed Description

+

Index query handler class.

+

A GlobalQueryHandler providing implicit indexing and matching. You just have to provide your items with lookup strings.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IndexQueryHandler ()
 
 ~IndexQueryHandler () override
 
QString synopsis () const override
 "<filter>" default synopsis More...
 
bool supportsFuzzyMatching () const override
 Returns "True". More...
 
bool fuzzyMatching () const override
 Return the fuzzy mode of the internal index. More...
 
void setFuzzyMatching (bool) override
 Set the fuzzy mode of the internal index. More...
 
std::vector< RankItemhandleGlobalQuery (const GlobalQuery *) const override
 Uses the index to override GlobalQueryHandler::handleGlobalQuery. More...
 
virtual void updateIndexItems ()=0
 Update the index. More...
 
void setIndexItems (std::vector< IndexItem > &&)
 Set the items of the index. Call this in updateIndexItems(). @threadsafe. More...
 
- Public Member Functions inherited from albert::GlobalQueryHandler
 GlobalQueryHandler ()
 
 ~GlobalQueryHandler () override
 
virtual std::vector< RankItemhandleGlobalQuery (const GlobalQuery *) const =0
 The query processing function. More...
 
void applyUsageScore (std::vector< RankItem > *) const
 Takes rank items and modifies the score according to the users usage. More...
 
void handleTriggerQuery (TriggerQuery *) const override
 Implements handleTriggerQuery(…). More...
 
- Public Member Functions inherited from albert::TriggerQueryHandler
 TriggerQueryHandler ()
 
 ~TriggerQueryHandler ()
 
QString trigger () const
 The user configured trigger of this handler. More...
 
virtual QString synopsis () const
 The synopsis, displayed on empty query. More...
 
virtual QString defaultTrigger () const
 The default (not user defined) trigger. Default Extension::id(). More...
 
virtual bool allowTriggerRemap () const
 Enable user remapping of the trigger. Default false. More...
 
virtual bool supportsFuzzyMatching () const
 Fuzzy matching capability. Default false. More...
 
virtual bool fuzzyMatching () const
 Fuzzy matching. Default false. More...
 
virtual void setFuzzyMatching (bool enabled)
 Fuzzy matching behavior. Default does nothing. More...
 
virtual void handleTriggerQuery (TriggerQuery *) const =0
 The trigger query processing function. More...
 
- Public Member Functions inherited from albert::Extension
virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+

Constructor & Destructor Documentation

+ +

◆ IndexQueryHandler()

+ +
+
+ + + + + + + +
albert::IndexQueryHandler::IndexQueryHandler ()
+
+ +
+
+ +

◆ ~IndexQueryHandler()

+ +
+
+ + + + + +
+ + + + + + + +
albert::IndexQueryHandler::~IndexQueryHandler ()
+
+override
+
+ +
+
+

Member Function Documentation

+ +

◆ fuzzyMatching()

+ +
+
+ + + + + +
+ + + + + + + +
bool albert::IndexQueryHandler::fuzzyMatching () const
+
+overridevirtual
+
+ +

Return the fuzzy mode of the internal index.

+ +

Reimplemented from albert::TriggerQueryHandler.

+ +
+
+ +

◆ handleGlobalQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
std::vector< RankItem > albert::IndexQueryHandler::handleGlobalQuery (const GlobalQuery) const
+
+overridevirtual
+
+ +

Uses the index to override GlobalQueryHandler::handleGlobalQuery.

+ +

Implements albert::GlobalQueryHandler.

+ +
+
+ +

◆ setFuzzyMatching()

+ +
+
+ + + + + +
+ + + + + + + + +
void albert::IndexQueryHandler::setFuzzyMatching (bool )
+
+overridevirtual
+
+ +

Set the fuzzy mode of the internal index.

+

Triggers a rebuild by calling updateIndexItems.

+ +

Reimplemented from albert::TriggerQueryHandler.

+ +
+
+ +

◆ setIndexItems()

+ +
+
+ + + + + + + + +
void albert::IndexQueryHandler::setIndexItems (std::vector< IndexItem > && )
+
+ +

Set the items of the index. Call this in updateIndexItems(). @threadsafe.

+ +
+
+ +

◆ supportsFuzzyMatching()

+ +
+
+ + + + + +
+ + + + + + + +
bool albert::IndexQueryHandler::supportsFuzzyMatching () const
+
+overridevirtual
+
+ +

Returns "True".

+ +

Reimplemented from albert::TriggerQueryHandler.

+ +
+
+ +

◆ synopsis()

+ +
+
+ + + + + +
+ + + + + + + +
QString albert::IndexQueryHandler::synopsis () const
+
+overridevirtual
+
+ +

"<filter>" default synopsis

+ +

Reimplemented from albert::TriggerQueryHandler.

+ +
+
+ +

◆ updateIndexItems()

+ +
+
+ + + + + +
+ + + + + + + +
virtual void albert::IndexQueryHandler::updateIndexItems ()
+
+pure virtual
+
+ +

Update the index.

+

Called when the index needs to be updated (or probably by yourself if your items changed), i.e. whenever the user made changes to the index config or initially on creation. Don't call in the constructor. It will be called on plugin initialization.

See also
void IndexQueryHandler::setIndexItems(std::vector<IndexItem>&&)
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1IndexQueryHandler.js b/reference/classalbert_1_1IndexQueryHandler.js new file mode 100644 index 00000000..54e910cf --- /dev/null +++ b/reference/classalbert_1_1IndexQueryHandler.js @@ -0,0 +1,12 @@ +var classalbert_1_1IndexQueryHandler = +[ + [ "IndexQueryHandler", "classalbert_1_1IndexQueryHandler.html#a5eb404658ee263fd33bb44b7e6ce615b", null ], + [ "~IndexQueryHandler", "classalbert_1_1IndexQueryHandler.html#abaa098cb27e17c6d185d29f53083ce7d", null ], + [ "fuzzyMatching", "classalbert_1_1IndexQueryHandler.html#a3f599d19cc675bdc64bcbeaaa9bcde0c", null ], + [ "handleGlobalQuery", "classalbert_1_1IndexQueryHandler.html#a7129f0d3850d2a47cae20bdc8f1e069d", null ], + [ "setFuzzyMatching", "classalbert_1_1IndexQueryHandler.html#a8b8017d998ad997a46be3aaedb6a0ae5", null ], + [ "setIndexItems", "classalbert_1_1IndexQueryHandler.html#ae9ac32494f3f85fe5af6a13085e6c1ec", null ], + [ "supportsFuzzyMatching", "classalbert_1_1IndexQueryHandler.html#a4918cddcd95dafedddbe6b2b4fbe9149", null ], + [ "synopsis", "classalbert_1_1IndexQueryHandler.html#ae79550a61e17fec1cf89fb009b9f2204", null ], + [ "updateIndexItems", "classalbert_1_1IndexQueryHandler.html#ad49fb19ea3f3aa4361416069d5462c5f", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1IndexQueryHandler.png b/reference/classalbert_1_1IndexQueryHandler.png new file mode 100644 index 00000000..58a28186 Binary files /dev/null and b/reference/classalbert_1_1IndexQueryHandler.png differ diff --git a/reference/classalbert_1_1InputHistory-members.html b/reference/classalbert_1_1InputHistory-members.html new file mode 100644 index 00000000..1e477ce1 --- /dev/null +++ b/reference/classalbert_1_1InputHistory-members.html @@ -0,0 +1,116 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::InputHistory Member List
+
+
+ +

This is the complete list of members for albert::InputHistory, including all inherited members.

+ + + + + + + +
add(const QString &str)albert::InputHistory
InputHistory()albert::InputHistoryexplicit
next(const QString &substring=QString{})albert::InputHistory
prev(const QString &substring=QString{})albert::InputHistory
resetIterator()albert::InputHistory
~InputHistory() overridealbert::InputHistory
+
+ + + + diff --git a/reference/classalbert_1_1InputHistory.html b/reference/classalbert_1_1InputHistory.html new file mode 100644 index 00000000..4935764a --- /dev/null +++ b/reference/classalbert_1_1InputHistory.html @@ -0,0 +1,279 @@ + + + + + + + +Albert: albert::InputHistory Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::InputHistory Class Referencefinal
+
+
+ +

#include <inputhistory.h>

+
+Inheritance diagram for albert::InputHistory:
+
+
+ +
+

Detailed Description

+

Input history class.

+

Stores input stings and provides a search iterator. Input line history for frontends.

+
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 InputHistory ()
 
 ~InputHistory () override
 
Q_INVOKABLE void add (const QString &str)
 Add text to history search. More...
 
Q_INVOKABLE QString next (const QString &substring=QString{})
 Next distinct history item. More...
 
Q_INVOKABLE QString prev (const QString &substring=QString{})
 Previous distinct history item. More...
 
Q_INVOKABLE void resetIterator ()
 Reset history search. More...
 
+

Constructor & Destructor Documentation

+ +

◆ InputHistory()

+ +
+
+ + + + + +
+ + + + + + + +
albert::InputHistory::InputHistory ()
+
+explicit
+
+ +
+
+ +

◆ ~InputHistory()

+ +
+
+ + + + + +
+ + + + + + + +
albert::InputHistory::~InputHistory ()
+
+override
+
+ +
+
+

Member Function Documentation

+ +

◆ add()

+ +
+
+ + + + + + + + +
Q_INVOKABLE void albert::InputHistory::add (const QString & str)
+
+ +

Add text to history search.

+
Note
Skips empty strings and drops duplicates.
+ +
+
+ +

◆ next()

+ +
+
+ + + + + + + + +
Q_INVOKABLE QString albert::InputHistory::next (const QString & substring = QString{})
+
+ +

Next distinct history item.

+
Note
Skips perfect matches.
+ +
+
+ +

◆ prev()

+ +
+
+ + + + + + + + +
Q_INVOKABLE QString albert::InputHistory::prev (const QString & substring = QString{})
+
+ +

Previous distinct history item.

+
Note
Skips perfect matches.
+ +
+
+ +

◆ resetIterator()

+ +
+
+ + + + + + + +
Q_INVOKABLE void albert::InputHistory::resetIterator ()
+
+ +

Reset history search.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1InputHistory.js b/reference/classalbert_1_1InputHistory.js new file mode 100644 index 00000000..a33e74e0 --- /dev/null +++ b/reference/classalbert_1_1InputHistory.js @@ -0,0 +1,9 @@ +var classalbert_1_1InputHistory = +[ + [ "InputHistory", "classalbert_1_1InputHistory.html#a8dade81ec81caa047a79b1e1dafd266f", null ], + [ "~InputHistory", "classalbert_1_1InputHistory.html#a4f0fbb944ffdeb950f7458e0df794ecc", null ], + [ "add", "classalbert_1_1InputHistory.html#a52beb209e78d2f8abb9c1337575b9a72", null ], + [ "next", "classalbert_1_1InputHistory.html#aec297185c40d527786902dcb352dbca2", null ], + [ "prev", "classalbert_1_1InputHistory.html#aa75446e23cd1c296d24e7db35c96bb68", null ], + [ "resetIterator", "classalbert_1_1InputHistory.html#a776b827eaba727833d58e42a1cf00ca8", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1InputHistory.png b/reference/classalbert_1_1InputHistory.png new file mode 100644 index 00000000..64b89829 Binary files /dev/null and b/reference/classalbert_1_1InputHistory.png differ diff --git a/reference/classalbert_1_1Item-members.html b/reference/classalbert_1_1Item-members.html new file mode 100644 index 00000000..4bd36a88 --- /dev/null +++ b/reference/classalbert_1_1Item-members.html @@ -0,0 +1,117 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::Item Member List
+
+
+ +

This is the complete list of members for albert::Item, including all inherited members.

+ + + + + + + + +
actions() constalbert::Itemvirtual
iconUrls() const =0albert::Itempure virtual
id() const =0albert::Itempure virtual
inputActionText() constalbert::Itemvirtual
subtext() const =0albert::Itempure virtual
text() const =0albert::Itempure virtual
~Item()=defaultalbert::Itemvirtual
+
+ + + + diff --git a/reference/classalbert_1_1Item.html b/reference/classalbert_1_1Item.html new file mode 100644 index 00000000..eb74b157 --- /dev/null +++ b/reference/classalbert_1_1Item.html @@ -0,0 +1,358 @@ + + + + + + + +Albert: albert::Item Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::Item Class Referenceabstract
+
+
+ +

#include <item.h>

+
+Inheritance diagram for albert::Item:
+
+
+ + +albert::StandardItem + +
+

Detailed Description

+

Items displayed in the query results list.

+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~Item ()=default
 
virtual QString id () const =0
 Getter for the item identifier. More...
 
virtual QString text () const =0
 Getter for the item text. More...
 
virtual QString subtext () const =0
 Getter for the item subtext. More...
 
virtual QStringList iconUrls () const =0
 Getter for the items iconUrls. More...
 
virtual QString inputActionText () const
 Getter for the input action text. More...
 
virtual std::vector< Actionactions () const
 Getter for item actions. More...
 
+

Constructor & Destructor Documentation

+ +

◆ ~Item()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::Item::~Item ()
+
+virtualdefault
+
+ +
+
+

Member Function Documentation

+ +

◆ actions()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector< Action > albert::Item::actions () const
+
+virtual
+
+ +

Getter for item actions.

+

These are the actions a users can run.

+ +

Reimplemented in albert::StandardItem.

+ +
+
+ +

◆ iconUrls()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QStringList albert::Item::iconUrls () const
+
+pure virtual
+
+ +

Getter for the items iconUrls.

+

Used to get the item icon using the IconProvider.

+ +

Implemented in albert::StandardItem.

+ +
+
+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Item::id () const
+
+pure virtual
+
+ +

Getter for the item identifier.

+

Has to be unique per extension.

+ +

Implemented in albert::StandardItem.

+ +
+
+ +

◆ inputActionText()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Item::inputActionText () const
+
+virtual
+
+ +

Getter for the input action text.

+

Used as input text replacement (usually by pressing Tab).

+ +

Reimplemented in albert::StandardItem.

+ +
+
+ +

◆ subtext()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Item::subtext () const
+
+pure virtual
+
+ +

Getter for the item subtext.

+

Secondary descriptive text displayed in a list item.

+ +

Implemented in albert::StandardItem.

+ +
+
+ +

◆ text()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::Item::text () const
+
+pure virtual
+
+ +

Getter for the item text.

+

Primary text displayed emphasized in a list item. Empty text will crash the app since text length is used as divisor for scoring.

+ +

Implemented in albert::StandardItem.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • albert/include/albert/extension/queryhandler/item.h
  • +
+
+
+ + + + diff --git a/reference/classalbert_1_1Item.js b/reference/classalbert_1_1Item.js new file mode 100644 index 00000000..ad6c8474 --- /dev/null +++ b/reference/classalbert_1_1Item.js @@ -0,0 +1,10 @@ +var classalbert_1_1Item = +[ + [ "~Item", "classalbert_1_1Item.html#a148f86ed842727593fe565b58ef76a4d", null ], + [ "actions", "classalbert_1_1Item.html#ad8423cbb1d705f5f3837478c120fc2c0", null ], + [ "iconUrls", "classalbert_1_1Item.html#af24bba87910db269e79df47622e1bdd5", null ], + [ "id", "classalbert_1_1Item.html#a79a57458532eb980b93834ff8546d22f", null ], + [ "inputActionText", "classalbert_1_1Item.html#a895b7ffa23356556ef72d4ba33633306", null ], + [ "subtext", "classalbert_1_1Item.html#a510423487b0ae6c2fb800521718a831d", null ], + [ "text", "classalbert_1_1Item.html#acf06be44b0d88db1941325b06c5d671d", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1Item.png b/reference/classalbert_1_1Item.png new file mode 100644 index 00000000..259a3dd3 Binary files /dev/null and b/reference/classalbert_1_1Item.png differ diff --git a/reference/classalbert_1_1Notification-members.html b/reference/classalbert_1_1Notification-members.html new file mode 100644 index 00000000..b9a29657 --- /dev/null +++ b/reference/classalbert_1_1Notification-members.html @@ -0,0 +1,112 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::Notification Member List
+
+
+ +

This is the complete list of members for albert::Notification, including all inherited members.

+ + + +
Notification(const QString &title={}, const QString &body={})albert::Notification
~Notification()albert::Notification
+
+ + + + diff --git a/reference/classalbert_1_1Notification.html b/reference/classalbert_1_1Notification.html new file mode 100644 index 00000000..67a6b63a --- /dev/null +++ b/reference/classalbert_1_1Notification.html @@ -0,0 +1,173 @@ + + + + + + + +Albert: albert::Notification Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::Notification Class Reference
+
+
+ +

#include <albert.h>

+

Detailed Description

+

A system tray notification.

+

The notification is visible for as long as this object exists.

+
+ + + + + +

+Public Member Functions

 Notification (const QString &title={}, const QString &body={})
 
 ~Notification ()
 
+

Constructor & Destructor Documentation

+ +

◆ Notification()

+ +
+
+ + + + + + + + + + + + + + + + + + +
albert::Notification::Notification (const QString & title = {},
const QString & body = {} 
)
+
+ +
+
+ +

◆ ~Notification()

+ +
+
+ + + + + + + +
albert::Notification::~Notification ()
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1Notification.js b/reference/classalbert_1_1Notification.js new file mode 100644 index 00000000..45fac1a9 --- /dev/null +++ b/reference/classalbert_1_1Notification.js @@ -0,0 +1,5 @@ +var classalbert_1_1Notification = +[ + [ "Notification", "classalbert_1_1Notification.html#abe44d10a5e094a7506585bc975bda287", null ], + [ "~Notification", "classalbert_1_1Notification.html#aa1d3a2a9695f2c76f4f90dc9abeeff0f", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1PluginInstance-members.html b/reference/classalbert_1_1PluginInstance-members.html new file mode 100644 index 00000000..0b65d3f1 --- /dev/null +++ b/reference/classalbert_1_1PluginInstance-members.html @@ -0,0 +1,124 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::PluginInstance Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1PluginInstance.html b/reference/classalbert_1_1PluginInstance.html new file mode 100644 index 00000000..d0dd1e5d --- /dev/null +++ b/reference/classalbert_1_1PluginInstance.html @@ -0,0 +1,512 @@ + + + + + + + +Albert: albert::PluginInstance Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::PluginInstance Class Reference
+
+
+ +

#include <plugininstance.h>

+
+Inheritance diagram for albert::PluginInstance:
+
+
+ + +albert::ExtensionPluginInstance< EXTENSION > +albert::plugin::Plugin< QOBJECT > +albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT > + +
+

Detailed Description

+

Abstract plugin instance class.

+

This is the interface every plugin has to implement.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PluginInstance ()
 
virtual ~PluginInstance ()
 
QString id () const
 The plugin identifier. More...
 
virtual QString name () const
 The human readable plugin name. More...
 
virtual QString description () const
 Brief description of the plugin. More...
 
virtual void initialize (ExtensionRegistry *)
 The initialization function. More...
 
virtual void finalize (ExtensionRegistry *)
 The finalization function. More...
 
virtual std::vector< Extension * > extensions ()
 The extensions this plugin provides. More...
 
virtual QWidget * buildConfigWidget ()
 Config widget factory. More...
 
std::unique_ptr< QDir > cacheDir () const
 The recommended cache location. More...
 
std::unique_ptr< QDir > configDir () const
 The recommended config location. More...
 
std::unique_ptr< QDir > dataDir () const
 The recommended data location. More...
 
std::unique_ptr< QSettings > settings () const
 Prepared settings object. More...
 
+ + + +

+Protected Attributes

const std::unique_ptr< PluginInstancePrivate > d
 
+

Constructor & Destructor Documentation

+ +

◆ PluginInstance()

+ +
+
+ + + + + + + +
albert::PluginInstance::PluginInstance ()
+
+ +
+
+ +

◆ ~PluginInstance()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::PluginInstance::~PluginInstance ()
+
+virtual
+
+ +
+
+

Member Function Documentation

+ +

◆ buildConfigWidget()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QWidget * albert::PluginInstance::buildConfigWidget ()
+
+virtual
+
+ +

Config widget factory.

+ +
+
+ +

◆ cacheDir()

+ +
+
+ + + + + + + +
std::unique_ptr< QDir > albert::PluginInstance::cacheDir () const
+
+ +

The recommended cache location.

+ +
+
+ +

◆ configDir()

+ +
+
+ + + + + + + +
std::unique_ptr< QDir > albert::PluginInstance::configDir () const
+
+ +

The recommended config location.

+ +
+
+ +

◆ dataDir()

+ +
+
+ + + + + + + +
std::unique_ptr< QDir > albert::PluginInstance::dataDir () const
+
+ +

The recommended data location.

+ +
+
+ +

◆ description()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::PluginInstance::description () const
+
+virtual
+
+ +

Brief description of the plugin.

+

Taken from the metadata. Override for internationalization.

+ +

Reimplemented in albert::ExtensionPluginInstance< EXTENSION >.

+ +
+
+ +

◆ extensions()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector< Extension * > albert::PluginInstance::extensions ()
+
+virtual
+
+ +

The extensions this plugin provides.

+ +

Reimplemented in albert::ExtensionPluginInstance< EXTENSION >.

+ +
+
+ +

◆ finalize()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::PluginInstance::finalize (ExtensionRegistry)
+
+virtual
+
+ +

The finalization function.

+ +
+
+ +

◆ id()

+ +
+
+ + + + + + + +
QString albert::PluginInstance::id () const
+
+ +

The plugin identifier.

+

Taken from the metadata.

+ +
+
+ +

◆ initialize()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::PluginInstance::initialize (ExtensionRegistry)
+
+virtual
+
+ +

The initialization function.

+ +
+
+ +

◆ name()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::PluginInstance::name () const
+
+virtual
+
+ +

The human readable plugin name.

+

Taken from the metadata. Override for internationalization.

+ +

Reimplemented in albert::ExtensionPluginInstance< EXTENSION >.

+ +
+
+ +

◆ settings()

+ +
+
+ + + + + + + +
std::unique_ptr< QSettings > albert::PluginInstance::settings () const
+
+ +

Prepared settings object.

+ +
+
+

Member Data Documentation

+ +

◆ d

+ +
+
+ + + + + +
+ + + + +
const std::unique_ptr<PluginInstancePrivate> albert::PluginInstance::d
+
+protected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1PluginInstance.js b/reference/classalbert_1_1PluginInstance.js new file mode 100644 index 00000000..de5c3aae --- /dev/null +++ b/reference/classalbert_1_1PluginInstance.js @@ -0,0 +1,17 @@ +var classalbert_1_1PluginInstance = +[ + [ "PluginInstance", "classalbert_1_1PluginInstance.html#a97268fde3a98b3ea1857a5effd01e277", null ], + [ "~PluginInstance", "classalbert_1_1PluginInstance.html#a5f45a55c5eb5712294adc15b889942fa", null ], + [ "buildConfigWidget", "classalbert_1_1PluginInstance.html#ab1376d91889acab63531e780b3ffdef8", null ], + [ "cacheDir", "classalbert_1_1PluginInstance.html#af06e7ae2c72da1e7ed4357681770e49a", null ], + [ "configDir", "classalbert_1_1PluginInstance.html#a9207c9adf706fe0fc282381070cf76b1", null ], + [ "dataDir", "classalbert_1_1PluginInstance.html#a1fee04d437d0ce8d5a4b2aecda623e01", null ], + [ "description", "classalbert_1_1PluginInstance.html#a3360117d9a00393bf3e0a4ecdd7ea9a8", null ], + [ "extensions", "classalbert_1_1PluginInstance.html#a2e5845601778c37b05a076fb41176c31", null ], + [ "finalize", "classalbert_1_1PluginInstance.html#a4f09ff651fb7e31f42cb4c03891d2b40", null ], + [ "id", "classalbert_1_1PluginInstance.html#a22c95896742f513f55702fef9f5329f1", null ], + [ "initialize", "classalbert_1_1PluginInstance.html#a0037e4168904d455eaf0a5def1b0b205", null ], + [ "name", "classalbert_1_1PluginInstance.html#abcd75710b7bc43ff2768713609306db1", null ], + [ "settings", "classalbert_1_1PluginInstance.html#a9413862a66464d1bdeb940e1d7971593", null ], + [ "d", "classalbert_1_1PluginInstance.html#a0be2d94593a017397912e0e23a94734d", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1PluginInstance.png b/reference/classalbert_1_1PluginInstance.png new file mode 100644 index 00000000..ca873e9d Binary files /dev/null and b/reference/classalbert_1_1PluginInstance.png differ diff --git a/reference/classalbert_1_1PluginLoader-members.html b/reference/classalbert_1_1PluginLoader-members.html new file mode 100644 index 00000000..3eea8d00 --- /dev/null +++ b/reference/classalbert_1_1PluginLoader-members.html @@ -0,0 +1,123 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::PluginLoader Member List
+
+
+ +

This is the complete list of members for albert::PluginLoader, including all inherited members.

+ + + + + + + + + + + + + + +
::PluginRegistryalbert::PluginLoaderfriend
dalbert::PluginLoaderprotected
instance() const =0albert::PluginLoaderpure virtual
load()=0albert::PluginLoaderprotectedpure virtual
metaData() const =0albert::PluginLoaderpure virtual
pathalbert::PluginLoader
PluginLoader(const QString &path)albert::PluginLoader
provider() const =0albert::PluginLoaderpure virtual
state() constalbert::PluginLoader
stateChanged()albert::PluginLoadersignal
stateInfo() constalbert::PluginLoader
unload()=0albert::PluginLoaderprotectedpure virtual
~PluginLoader()albert::PluginLoadervirtual
+
+ + + + diff --git a/reference/classalbert_1_1PluginLoader.html b/reference/classalbert_1_1PluginLoader.html new file mode 100644 index 00000000..06c333cb --- /dev/null +++ b/reference/classalbert_1_1PluginLoader.html @@ -0,0 +1,504 @@ + + + + + + + +Albert: albert::PluginLoader Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +

#include <pluginloader.h>

+
+Inheritance diagram for albert::PluginLoader:
+
+
+ +
+

Detailed Description

+

Abstract plugin loader class used by the plugin registry.

+

Instanciated by a PluginProvider.

+
+ + + +

+Signals

void stateChanged ()
 
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PluginLoader (const QString &path)
 PluginLoader constructor. More...
 
virtual ~PluginLoader ()
 
virtual const PluginProviderprovider () const =0
 The provider of this plugin. More...
 
virtual const PluginMetaDatametaData () const =0
 The plugin metadata. More...
 
PluginState state () const
 The state of the plugin. More...
 
const QString & stateInfo () const
 Detailed information about the latest state change. More...
 
virtual PluginInstanceinstance () const =0
 Returns the plugin instance. More...
 
+ + + + +

+Public Attributes

const QString path
 The plugin location on disk. More...
 
+ + + + + + + +

+Protected Member Functions

virtual QString load ()=0
 Loads the plugin. More...
 
virtual QString unload ()=0
 Unloads the plugin. More...
 
+ + + +

+Protected Attributes

const std::unique_ptr< PluginLoaderPrivate > d
 
+ + + +

+Friends

class ::PluginRegistry
 
+

Constructor & Destructor Documentation

+ +

◆ PluginLoader()

+ +
+
+ + + + + + + + +
albert::PluginLoader::PluginLoader (const QString & path)
+
+ +

PluginLoader constructor.

+
Parameters
+ + +
pathThe plugin location on disk.
+
+
+ +
+
+ +

◆ ~PluginLoader()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::PluginLoader::~PluginLoader ()
+
+virtual
+
+ +
+
+

Member Function Documentation

+ +

◆ instance()

+ +
+
+ + + + + +
+ + + + + + + +
virtual PluginInstance * albert::PluginLoader::instance () const
+
+pure virtual
+
+ +

Returns the plugin instance.

+
Returns
The PluginInstance or nullptr if not loaded.
+ +
+
+ +

◆ load()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::PluginLoader::load ()
+
+protectedpure virtual
+
+ +

Loads the plugin.

+

On success instance() should return a valid object.

Returns
Errorstring, if any
+ +
+
+ +

◆ metaData()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const PluginMetaData & albert::PluginLoader::metaData () const
+
+pure virtual
+
+ +

The plugin metadata.

+
Returns
The PluginMetaData of the plugin.
+ +
+
+ +

◆ provider()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const PluginProvider & albert::PluginLoader::provider () const
+
+pure virtual
+
+ +

The provider of this plugin.

+
Returns
the PluginProvider of the plugin.
+ +
+
+ +

◆ state()

+ +
+
+ + + + + + + +
PluginState albert::PluginLoader::state () const
+
+ +

The state of the plugin.

+
Returns
The PluginState of the plugin.
+ +
+
+ +

◆ stateChanged

+ +
+
+ + + + + +
+ + + + + + + +
void albert::PluginLoader::stateChanged ()
+
+signal
+
+ +
+
+ +

◆ stateInfo()

+ +
+
+ + + + + + + +
const QString & albert::PluginLoader::stateInfo () const
+
+ +

Detailed information about the latest state change.

+
Returns
A string containing detailed information about the latest state change.
+ +
+
+ +

◆ unload()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::PluginLoader::unload ()
+
+protectedpure virtual
+
+ +

Unloads the plugin.

+
Returns
Errorstring, if any
+ +
+
+

Friends And Related Function Documentation

+ +

◆ ::PluginRegistry

+ +
+
+ + + + + +
+ + + + +
friend class ::PluginRegistry
+
+friend
+
+ +
+
+

Member Data Documentation

+ +

◆ d

+ +
+
+ + + + + +
+ + + + +
const std::unique_ptr<PluginLoaderPrivate> albert::PluginLoader::d
+
+protected
+
+ +
+
+ +

◆ path

+ +
+
+ + + + +
const QString albert::PluginLoader::path
+
+ +

The plugin location on disk.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1PluginLoader.js b/reference/classalbert_1_1PluginLoader.js new file mode 100644 index 00000000..17438bce --- /dev/null +++ b/reference/classalbert_1_1PluginLoader.js @@ -0,0 +1,16 @@ +var classalbert_1_1PluginLoader = +[ + [ "PluginLoader", "classalbert_1_1PluginLoader.html#ab98e4528a99b0a46f1f4e114fea942b8", null ], + [ "~PluginLoader", "classalbert_1_1PluginLoader.html#aed12605269105560dfa0130957d8b403", null ], + [ "instance", "classalbert_1_1PluginLoader.html#a8828e8029b6520a1e4486e2d2196dc02", null ], + [ "load", "classalbert_1_1PluginLoader.html#af62ca2713a8080868cee3bf26034a6f7", null ], + [ "metaData", "classalbert_1_1PluginLoader.html#a5bbbb62f0a52690cfa7e793e100ddd34", null ], + [ "provider", "classalbert_1_1PluginLoader.html#a3a17c5bb5b103aeb84777ca6678c09cc", null ], + [ "state", "classalbert_1_1PluginLoader.html#abf8e06e6e18dd0b780b1febae2d1d2d9", null ], + [ "stateChanged", "classalbert_1_1PluginLoader.html#a543b6773b233861d16c2d790068d39a8", null ], + [ "stateInfo", "classalbert_1_1PluginLoader.html#a6a243bd57822511eae2cad673fb13839", null ], + [ "unload", "classalbert_1_1PluginLoader.html#a25f25bbb3e3f697728a9f28abc28314a", null ], + [ "::PluginRegistry", "classalbert_1_1PluginLoader.html#ab2f3bfe8536e7481b136065d1ba20a80", null ], + [ "d", "classalbert_1_1PluginLoader.html#abdaab494102f2fb5bf41e9c35f74e32a", null ], + [ "path", "classalbert_1_1PluginLoader.html#ad86c8acbba827b071c821d6374d7a383", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1PluginLoader.png b/reference/classalbert_1_1PluginLoader.png new file mode 100644 index 00000000..a51c8163 Binary files /dev/null and b/reference/classalbert_1_1PluginLoader.png differ diff --git a/reference/classalbert_1_1PluginMetaData-members.html b/reference/classalbert_1_1PluginMetaData-members.html new file mode 100644 index 00000000..5c1c4ae5 --- /dev/null +++ b/reference/classalbert_1_1PluginMetaData-members.html @@ -0,0 +1,124 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/reference/classalbert_1_1PluginMetaData.html b/reference/classalbert_1_1PluginMetaData.html new file mode 100644 index 00000000..aafc7601 --- /dev/null +++ b/reference/classalbert_1_1PluginMetaData.html @@ -0,0 +1,389 @@ + + + + + + + +Albert: albert::PluginMetaData Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::PluginMetaData Class Reference
+
+
+ +

#include <pluginmetadata.h>

+

Detailed Description

+

Common plugin metadata of all plugins.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Attributes

QString iid
 Interface identifier. More...
 
QString id
 GUID, no duplicates allowed. More...
 
QString version
 https://semver.org/ More...
 
QString name
 Human readable name. More...
 
QString description
 Brief, imperative description. More...
 
QString long_description
 Elaborate, markdown formatted description (README.md) More...
 
QString license
 Short form e.g. BSD-2. More...
 
QString url
 Browsable source, README, issues. More...
 
QStringList maintainers
 The current maintainers of the plugin []. More...
 
QStringList runtime_dependencies
 Required libraries []. More...
 
QStringList binary_dependencies
 Required executables []. More...
 
QStringList third_party_credits
 Third party credits and license notes []. More...
 
QStringList platforms
 List of supported platforms. {Linux, Darwin,Windows}*. Empty means all. More...
 
LoadType load_type = LoadType::User
 See LoadType. More...
 
+

Member Data Documentation

+ +

◆ binary_dependencies

+ +
+
+ + + + +
QStringList albert::PluginMetaData::binary_dependencies
+
+ +

Required executables [].

+ +
+
+ +

◆ description

+ +
+
+ + + + +
QString albert::PluginMetaData::description
+
+ +

Brief, imperative description.

+ +
+
+ +

◆ id

+ +
+
+ + + + +
QString albert::PluginMetaData::id
+
+ +

GUID, no duplicates allowed.

+ +
+
+ +

◆ iid

+ +
+
+ + + + +
QString albert::PluginMetaData::iid
+
+ +

Interface identifier.

+ +
+
+ +

◆ license

+ +
+
+ + + + +
QString albert::PluginMetaData::license
+
+ +

Short form e.g. BSD-2.

+ +
+
+ +

◆ load_type

+ +
+
+ + + + +
LoadType albert::PluginMetaData::load_type = LoadType::User
+
+ +

See LoadType.

+ +
+
+ +

◆ long_description

+ +
+
+ + + + +
QString albert::PluginMetaData::long_description
+
+ +

Elaborate, markdown formatted description (README.md)

+ +
+
+ +

◆ maintainers

+ +
+
+ + + + +
QStringList albert::PluginMetaData::maintainers
+
+ +

The current maintainers of the plugin [].

+ +
+
+ +

◆ name

+ +
+
+ + + + +
QString albert::PluginMetaData::name
+
+ +

Human readable name.

+ +
+
+ +

◆ platforms

+ +
+
+ + + + +
QStringList albert::PluginMetaData::platforms
+
+ +

List of supported platforms. {Linux, Darwin,Windows}*. Empty means all.

+ +
+
+ +

◆ runtime_dependencies

+ +
+
+ + + + +
QStringList albert::PluginMetaData::runtime_dependencies
+
+ +

Required libraries [].

+ +
+
+ +

◆ third_party_credits

+ +
+
+ + + + +
QStringList albert::PluginMetaData::third_party_credits
+
+ +

Third party credits and license notes [].

+ +
+
+ +

◆ url

+ +
+
+ + + + +
QString albert::PluginMetaData::url
+
+ +

Browsable source, README, issues.

+ +
+
+ +

◆ version

+ +
+
+ + + + +
QString albert::PluginMetaData::version
+
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1PluginMetaData.js b/reference/classalbert_1_1PluginMetaData.js new file mode 100644 index 00000000..a45cb399 --- /dev/null +++ b/reference/classalbert_1_1PluginMetaData.js @@ -0,0 +1,17 @@ +var classalbert_1_1PluginMetaData = +[ + [ "binary_dependencies", "classalbert_1_1PluginMetaData.html#a736d5a0c0ecae325d86d2486bb2b5635", null ], + [ "description", "classalbert_1_1PluginMetaData.html#ada4bf624b1d2aa2ba02088c34a25c8b5", null ], + [ "id", "classalbert_1_1PluginMetaData.html#a95d4a8faa21db1b53b0b960f5948997b", null ], + [ "iid", "classalbert_1_1PluginMetaData.html#a481699b0a5b2d99164631ba92610292e", null ], + [ "license", "classalbert_1_1PluginMetaData.html#a6b2c517aba6610546d858f8ebdc017f3", null ], + [ "load_type", "classalbert_1_1PluginMetaData.html#a467edd48fa6968f4e664ad4b4b39928c", null ], + [ "long_description", "classalbert_1_1PluginMetaData.html#a5917f03ca5724d216c50f06ca2c56ab8", null ], + [ "maintainers", "classalbert_1_1PluginMetaData.html#acf864d42649ca929b86ca6bc0a657928", null ], + [ "name", "classalbert_1_1PluginMetaData.html#adb66212725fe3ea81fc11ba522f9655b", null ], + [ "platforms", "classalbert_1_1PluginMetaData.html#af20d9960d822f37578c1404544665df3", null ], + [ "runtime_dependencies", "classalbert_1_1PluginMetaData.html#a8ad66978975fca1ba45838b07dfd7989", null ], + [ "third_party_credits", "classalbert_1_1PluginMetaData.html#a98a024db32e7452f078ae7685b20a9cb", null ], + [ "url", "classalbert_1_1PluginMetaData.html#aa8cdf068f6e7277ea33dab4a30b809c8", null ], + [ "version", "classalbert_1_1PluginMetaData.html#a9ea434d693b7a92928bd7a39b03e1821", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1PluginProvider-members.html b/reference/classalbert_1_1PluginProvider-members.html new file mode 100644 index 00000000..f67e74c1 --- /dev/null +++ b/reference/classalbert_1_1PluginProvider-members.html @@ -0,0 +1,115 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::PluginProvider Member List
+
+
+ +

This is the complete list of members for albert::PluginProvider, including all inherited members.

+ + + + + + +
description() const =0albert::Extensionpure virtual
id() const =0albert::Extensionpure virtual
name() const =0albert::Extensionpure virtual
plugins()=0albert::PluginProviderpure virtual
~Extension()=defaultalbert::Extensionvirtual
+
+ + + + diff --git a/reference/classalbert_1_1PluginProvider.html b/reference/classalbert_1_1PluginProvider.html new file mode 100644 index 00000000..eb659a17 --- /dev/null +++ b/reference/classalbert_1_1PluginProvider.html @@ -0,0 +1,174 @@ + + + + + + + +Albert: albert::PluginProvider Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::PluginProvider Class Referenceabstract
+
+
+ +

#include <pluginprovider.h>

+
+Inheritance diagram for albert::PluginProvider:
+
+
+ + +albert::Extension + +
+

Detailed Description

+

Interface class for a plugin providing extension.

+
+ + + + + + + + + + + + + + + + +

+Public Member Functions

virtual std::vector< PluginLoader * > plugins ()=0
 The plugins provided. More...
 
- Public Member Functions inherited from albert::Extension
virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+

Member Function Documentation

+ +

◆ plugins()

+ +
+
+ + + + + +
+ + + + + + + +
virtual std::vector< PluginLoader * > albert::PluginProvider::plugins ()
+
+pure virtual
+
+ +

The plugins provided.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1PluginProvider.js b/reference/classalbert_1_1PluginProvider.js new file mode 100644 index 00000000..1db10cde --- /dev/null +++ b/reference/classalbert_1_1PluginProvider.js @@ -0,0 +1,4 @@ +var classalbert_1_1PluginProvider = +[ + [ "plugins", "classalbert_1_1PluginProvider.html#a7976388d5144d9a0a0e34156afaabf32", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1PluginProvider.png b/reference/classalbert_1_1PluginProvider.png new file mode 100644 index 00000000..7b083b4c Binary files /dev/null and b/reference/classalbert_1_1PluginProvider.png differ diff --git a/reference/classalbert_1_1Query-members.html b/reference/classalbert_1_1Query-members.html new file mode 100644 index 00000000..6bda655a --- /dev/null +++ b/reference/classalbert_1_1Query-members.html @@ -0,0 +1,126 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::Query Member List
+
+
+ +

This is the complete list of members for albert::Query, including all inherited members.

+ + + + + + + + + + + + + + + + + +
activateFallback(uint item, uint action=0)=0albert::Querypure virtual
activateMatch(uint item, uint action=0)=0albert::Querypure virtual
cancel()=0albert::Querypure virtual
fallbackActions(uint item) const =0albert::Querypure virtual
fallbacks()=0albert::Querypure virtual
finished()albert::Querysignal
isFinished() const =0albert::Querypure virtual
isTriggered() const =0albert::Querypure virtual
isValid() const =0albert::Querypure virtual
matchActions(uint item) const =0albert::Querypure virtual
matches()=0albert::Querypure virtual
run()=0albert::Querypure virtual
string() const =0albert::Querypure virtual
synopsis() const =0albert::Querypure virtual
trigger() const =0albert::Querypure virtual
~Query()=defaultalbert::Queryvirtual
+
+ + + + diff --git a/reference/classalbert_1_1Query.html b/reference/classalbert_1_1Query.html new file mode 100644 index 00000000..5517d73b --- /dev/null +++ b/reference/classalbert_1_1Query.html @@ -0,0 +1,636 @@ + + + + + + + +Albert: albert::Query Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::Query Class Referenceabstract
+
+
+ +

#include <query.h>

+
+Inheritance diagram for albert::Query:
+
+
+ +
+

Detailed Description

+

Interface class for queries used by frontends.

+
See also
Frontend
+
+ + + + +

+Signals

void finished ()
 Emitted when the query finished processing. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~Query ()=default
 
virtual Q_INVOKABLE QString synopsis () const =0
 The trigger of this query. More...
 
virtual Q_INVOKABLE QString trigger () const =0
 The trigger of this query. More...
 
virtual Q_INVOKABLE QString string () const =0
 Query string excluding the trigger. More...
 
virtual Q_INVOKABLE void run ()=0
 Asynchronous query processing done. More...
 
virtual Q_INVOKABLE void cancel ()=0
 Call this if you dont need the query anymore. More...
 
virtual Q_INVOKABLE bool isFinished () const =0
 True if the query thread stopped. More...
 
virtual Q_INVOKABLE const bool & isValid () const =0
 True if query has not been cancelled. More...
 
virtual Q_INVOKABLE bool isTriggered () const =0
 True if this query has a triggert. More...
 
virtual Q_INVOKABLE QAbstractListModel * matches ()=0
 You borrow. More...
 
virtual Q_INVOKABLE QAbstractListModel * fallbacks ()=0
 You borrow. More...
 
virtual Q_INVOKABLE QAbstractListModel * matchActions (uint item) const =0
 You take ownership. More...
 
virtual Q_INVOKABLE QAbstractListModel * fallbackActions (uint item) const =0
 You take ownership. More...
 
virtual Q_INVOKABLE void activateMatch (uint item, uint action=0)=0
 Executes match a match action. More...
 
virtual Q_INVOKABLE void activateFallback (uint item, uint action=0)=0
 Executes match a fallback action. More...
 
+

Constructor & Destructor Documentation

+ +

◆ ~Query()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::Query::~Query ()
+
+virtualdefault
+
+ +
+
+

Member Function Documentation

+ +

◆ activateFallback()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Q_INVOKABLE void albert::Query::activateFallback (uint item,
uint action = 0 
)
+
+pure virtual
+
+ +

Executes match a fallback action.

+ +
+
+ +

◆ activateMatch()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual Q_INVOKABLE void albert::Query::activateMatch (uint item,
uint action = 0 
)
+
+pure virtual
+
+ +

Executes match a match action.

+ +
+
+ +

◆ cancel()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE void albert::Query::cancel ()
+
+pure virtual
+
+ +

Call this if you dont need the query anymore.

+ +
+
+ +

◆ fallbackActions()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Q_INVOKABLE QAbstractListModel * albert::Query::fallbackActions (uint item) const
+
+pure virtual
+
+ +

You take ownership.

+ +
+
+ +

◆ fallbacks()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE QAbstractListModel * albert::Query::fallbacks ()
+
+pure virtual
+
+ +

You borrow.

+ +
+
+ +

◆ finished

+ +
+
+ + + + + +
+ + + + + + + +
void albert::Query::finished ()
+
+signal
+
+ +

Emitted when the query finished processing.

+ +
+
+ +

◆ isFinished()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE bool albert::Query::isFinished () const
+
+pure virtual
+
+ +

True if the query thread stopped.

+ +
+
+ +

◆ isTriggered()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE bool albert::Query::isTriggered () const
+
+pure virtual
+
+ +

True if this query has a triggert.

+ +
+
+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE const bool & albert::Query::isValid () const
+
+pure virtual
+
+ +

True if query has not been cancelled.

+ +
+
+ +

◆ matchActions()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual Q_INVOKABLE QAbstractListModel * albert::Query::matchActions (uint item) const
+
+pure virtual
+
+ +

You take ownership.

+ +
+
+ +

◆ matches()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE QAbstractListModel * albert::Query::matches ()
+
+pure virtual
+
+ +

You borrow.

+ +
+
+ +

◆ run()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE void albert::Query::run ()
+
+pure virtual
+
+ +

Asynchronous query processing done.

+ +
+
+ +

◆ string()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE QString albert::Query::string () const
+
+pure virtual
+
+ +

Query string excluding the trigger.

+ +
+
+ +

◆ synopsis()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE QString albert::Query::synopsis () const
+
+pure virtual
+
+ +

The trigger of this query.

+ +
+
+ +

◆ trigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual Q_INVOKABLE QString albert::Query::trigger () const
+
+pure virtual
+
+ +

The trigger of this query.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • albert/include/albert/extension/frontend/query.h
  • +
+
+
+ + + + diff --git a/reference/classalbert_1_1Query.js b/reference/classalbert_1_1Query.js new file mode 100644 index 00000000..d2d172dd --- /dev/null +++ b/reference/classalbert_1_1Query.js @@ -0,0 +1,19 @@ +var classalbert_1_1Query = +[ + [ "~Query", "classalbert_1_1Query.html#acbd5a250fca8af47d4e257251953ef2a", null ], + [ "activateFallback", "classalbert_1_1Query.html#ac6ddb0ff1c822795a5e2412e1a659c8d", null ], + [ "activateMatch", "classalbert_1_1Query.html#a3c3e2d3e57bbd61df7717771bc2af735", null ], + [ "cancel", "classalbert_1_1Query.html#aa5855a860719615dc48a698bc94e7eaf", null ], + [ "fallbackActions", "classalbert_1_1Query.html#ae67f7eb58c68efd2eca034f5829f06d5", null ], + [ "fallbacks", "classalbert_1_1Query.html#a62762f8c9d77992e376d778d17b4b612", null ], + [ "finished", "classalbert_1_1Query.html#abf7bfc65b2ecf0f4f24d3f082ece7224", null ], + [ "isFinished", "classalbert_1_1Query.html#a74d697e5bdc98ed0abeac06be4e84897", null ], + [ "isTriggered", "classalbert_1_1Query.html#ab292530bd0031b69d0dc96e053ea2950", null ], + [ "isValid", "classalbert_1_1Query.html#acc1d5475f190ca21ca914c6408910078", null ], + [ "matchActions", "classalbert_1_1Query.html#a3400e3516c8b2c842a493d5866b189ff", null ], + [ "matches", "classalbert_1_1Query.html#a81bdb8ac1532341640af4aab33fd0008", null ], + [ "run", "classalbert_1_1Query.html#a202c52805bd26e0bb60b623cd75079ac", null ], + [ "string", "classalbert_1_1Query.html#ae967c24f8c35a866235eecdc83b36fb6", null ], + [ "synopsis", "classalbert_1_1Query.html#a055e6e2dc39d1bc8c5df67ead0adbf14", null ], + [ "trigger", "classalbert_1_1Query.html#a9a6cf0301a8fbae3cbb9cb77c7be3454", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1Query.png b/reference/classalbert_1_1Query.png new file mode 100644 index 00000000..46ae59c0 Binary files /dev/null and b/reference/classalbert_1_1Query.png differ diff --git a/reference/classalbert_1_1RankItem-members.html b/reference/classalbert_1_1RankItem-members.html new file mode 100644 index 00000000..54d0b520 --- /dev/null +++ b/reference/classalbert_1_1RankItem-members.html @@ -0,0 +1,113 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::RankItem Member List
+
+
+ +

This is the complete list of members for albert::RankItem, including all inherited members.

+ + + + +
itemalbert::RankItem
RankItem(std::shared_ptr< Item > item, float score)albert::RankItemexplicit
scorealbert::RankItem
+
+ + + + diff --git a/reference/classalbert_1_1RankItem.html b/reference/classalbert_1_1RankItem.html new file mode 100644 index 00000000..e2aee236 --- /dev/null +++ b/reference/classalbert_1_1RankItem.html @@ -0,0 +1,211 @@ + + + + + + + +Albert: albert::RankItem Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::RankItem Class Reference
+
+
+ +

#include <rankitem.h>

+

Detailed Description

+

Scored item Used to rank item results of mutliple handlers.

+
+ + + +

+Public Member Functions

 RankItem (std::shared_ptr< Item > item, float score)
 
+ + + + + + + +

+Public Attributes

std::shared_ptr< Itemitem
 The matched item. More...
 
float score
 The match score. Must be in the range (0,1]. Not checked for performance. More...
 
+

Constructor & Destructor Documentation

+ +

◆ RankItem()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
albert::RankItem::RankItem (std::shared_ptr< Itemitem,
float score 
)
+
+explicit
+
+
Parameters
+ + + +
itemThe matched item.
scoreThe match score. Must be in the range (0,1]. Not checked for performance.
+
+
+ +
+
+

Member Data Documentation

+ +

◆ item

+ +
+
+ + + + +
std::shared_ptr<Item> albert::RankItem::item
+
+ +

The matched item.

+ +
+
+ +

◆ score

+ +
+
+ + + + +
float albert::RankItem::score
+
+ +

The match score. Must be in the range (0,1]. Not checked for performance.

+ +
+
+
The documentation for this class was generated from the following file:
    +
  • albert/include/albert/extension/queryhandler/rankitem.h
  • +
+
+
+ + + + diff --git a/reference/classalbert_1_1RankItem.js b/reference/classalbert_1_1RankItem.js new file mode 100644 index 00000000..3a92c79d --- /dev/null +++ b/reference/classalbert_1_1RankItem.js @@ -0,0 +1,6 @@ +var classalbert_1_1RankItem = +[ + [ "RankItem", "classalbert_1_1RankItem.html#a3c9c331f950cae4f19fa06e7f70e8615", null ], + [ "item", "classalbert_1_1RankItem.html#a632f30a524f44fa1b8b87a6b567d8c8f", null ], + [ "score", "classalbert_1_1RankItem.html#a9028aa37f74661e29705951f8c4abf60", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1StandardItem-members.html b/reference/classalbert_1_1StandardItem-members.html new file mode 100644 index 00000000..24d221e2 --- /dev/null +++ b/reference/classalbert_1_1StandardItem-members.html @@ -0,0 +1,136 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::StandardItem Member List
+
+
+ +

This is the complete list of members for albert::StandardItem, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
actions() const overridealbert::StandardItemvirtual
actions_albert::StandardItemprotected
icon_urls_albert::StandardItemprotected
iconUrls() const overridealbert::StandardItemvirtual
id() const overridealbert::StandardItemvirtual
id_albert::StandardItemprotected
input_action_text_albert::StandardItemprotected
inputActionText() const overridealbert::StandardItemvirtual
make(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})albert::StandardItemstatic
make(QString id={}, QString text={}, QString subtext={}, QStringList icon_urls={}, std::vector< Action > actions={})albert::StandardItemstatic
operator=(StandardItem &&)=defaultalbert::StandardItem
operator=(const StandardItem &)=deletealbert::StandardItem
setActions(std::vector< Action > actions)albert::StandardItem
setIconUrls(QStringList icon_urls)albert::StandardItem
setId(QString id)albert::StandardItem
setInputActionText(QString input_action_text)albert::StandardItem
setSubtext(QString subtext)albert::StandardItem
setText(QString text)albert::StandardItem
StandardItem(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})albert::StandardItemexplicit
StandardItem(StandardItem &&)=defaultalbert::StandardItem
StandardItem(const StandardItem &)=deletealbert::StandardItem
subtext() const overridealbert::StandardItemvirtual
subtext_albert::StandardItemprotected
text() const overridealbert::StandardItemvirtual
text_albert::StandardItemprotected
~Item()=defaultalbert::Itemvirtual
+
+ + + + diff --git a/reference/classalbert_1_1StandardItem.html b/reference/classalbert_1_1StandardItem.html new file mode 100644 index 00000000..d89708fa --- /dev/null +++ b/reference/classalbert_1_1StandardItem.html @@ -0,0 +1,967 @@ + + + + + + + +Albert: albert::StandardItem Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ + +
+ +

#include <standarditem.h>

+
+Inheritance diagram for albert::StandardItem:
+
+
+ + +albert::Item + +
+

Detailed Description

+

General purpose value type Item implememtation.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StandardItem (QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})
 StandardItem constructor. More...
 
 StandardItem (StandardItem &&)=default
 StandardItem move constructor. More...
 
StandardItemoperator= (StandardItem &&)=default
 StandardItem move assignment. More...
 
 StandardItem (const StandardItem &)=delete
 
StandardItemoperator= (const StandardItem &)=delete
 
void setId (QString id)
 Setter for the item identifier. More...
 
void setText (QString text)
 Setter for the item text. More...
 
void setSubtext (QString subtext)
 Setter for the item subtext. More...
 
void setInputActionText (QString input_action_text)
 Setter for the items iconUrls. More...
 
void setIconUrls (QStringList icon_urls)
 Setter for the input action text. More...
 
void setActions (std::vector< Action > actions)
 Setter for item actions. More...
 
QString id () const override
 Getter for the item identifier. More...
 
QString text () const override
 Getter for the item text. More...
 
QString subtext () const override
 Getter for the item subtext. More...
 
QString inputActionText () const override
 Getter for the input action text. More...
 
QStringList iconUrls () const override
 Getter for the items iconUrls. More...
 
std::vector< Actionactions () const override
 Getter for item actions. More...
 
- Public Member Functions inherited from albert::Item
virtual ~Item ()=default
 
virtual QString id () const =0
 Getter for the item identifier. More...
 
virtual QString text () const =0
 Getter for the item text. More...
 
virtual QString subtext () const =0
 Getter for the item subtext. More...
 
virtual QStringList iconUrls () const =0
 Getter for the items iconUrls. More...
 
virtual QString inputActionText () const
 Getter for the input action text. More...
 
virtual std::vector< Actionactions () const
 Getter for item actions. More...
 
+ + + + + + + +

+Static Public Member Functions

static std::shared_ptr< StandardItemmake (QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})
 Convenience shared pointer factory for standard items. More...
 
static std::shared_ptr< StandardItemmake (QString id={}, QString text={}, QString subtext={}, QStringList icon_urls={}, std::vector< Action > actions={})
 Convenience shared pointer factory for standard items w/o inputAction. More...
 
+ + + + + + + + + + + + + +

+Protected Attributes

QString id_
 
QString text_
 
QString subtext_
 
QString input_action_text_
 
QStringList icon_urls_
 
std::vector< Actionactions_
 
+

Constructor & Destructor Documentation

+ +

◆ StandardItem() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
albert::StandardItem::StandardItem (QString id = {},
QString text = {},
QString subtext = {},
QString input_action_text = {},
QStringList icon_urls = {},
std::vector< Actionactions = {} 
)
+
+explicit
+
+ +

StandardItem constructor.

+
Parameters
+ + + + + + + +
idHas to be unique per extension.
textPrimary text displayed emphasized in a list item. Empty text will crash the app since text length is used as divisor for scoring.
subtextSecondary descriptive text displayed in a list item.
input_action_textUsed to get the item icon using the IconProvider.
icon_urlsUsed as input text replacement (usually by pressing Tab).
actionsThese are the actions a users can run.
+
+
+ +
+
+ +

◆ StandardItem() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + +
albert::StandardItem::StandardItem (StandardItem && )
+
+default
+
+ +

StandardItem move constructor.

+ +
+
+ +

◆ StandardItem() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + +
albert::StandardItem::StandardItem (const StandardItem)
+
+delete
+
+ +
+
+

Member Function Documentation

+ +

◆ actions()

+ +
+
+ + + + + +
+ + + + + + + +
std::vector< Action > albert::StandardItem::actions () const
+
+overridevirtual
+
+ +

Getter for item actions.

+

These are the actions a users can run.

+ +

Reimplemented from albert::Item.

+ +
+
+ +

◆ iconUrls()

+ +
+
+ + + + + +
+ + + + + + + +
QStringList albert::StandardItem::iconUrls () const
+
+overridevirtual
+
+ +

Getter for the items iconUrls.

+

Used to get the item icon using the IconProvider.

+ +

Implements albert::Item.

+ +
+
+ +

◆ id()

+ +
+
+ + + + + +
+ + + + + + + +
QString albert::StandardItem::id () const
+
+overridevirtual
+
+ +

Getter for the item identifier.

+

Has to be unique per extension.

+ +

Implements albert::Item.

+ +
+
+ +

◆ inputActionText()

+ +
+
+ + + + + +
+ + + + + + + +
QString albert::StandardItem::inputActionText () const
+
+overridevirtual
+
+ +

Getter for the input action text.

+

Used as input text replacement (usually by pressing Tab).

+ +

Reimplemented from albert::Item.

+ +
+
+ +

◆ make() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static std::shared_ptr< StandardItem > albert::StandardItem::make (QString id = {},
QString text = {},
QString subtext = {},
QString input_action_text = {},
QStringList icon_urls = {},
std::vector< Actionactions = {} 
)
+
+static
+
+ +

Convenience shared pointer factory for standard items.

+ +
+
+ +

◆ make() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static std::shared_ptr< StandardItem > albert::StandardItem::make (QString id = {},
QString text = {},
QString subtext = {},
QStringList icon_urls = {},
std::vector< Actionactions = {} 
)
+
+static
+
+ +

Convenience shared pointer factory for standard items w/o inputAction.

+ +
+
+ +

◆ operator=() [1/2]

+ +
+
+ + + + + +
+ + + + + + + + +
StandardItem & albert::StandardItem::operator= (const StandardItem)
+
+delete
+
+ +
+
+ +

◆ operator=() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
StandardItem & albert::StandardItem::operator= (StandardItem && )
+
+default
+
+ +

StandardItem move assignment.

+ +
+
+ +

◆ setActions()

+ +
+
+ + + + + + + + +
void albert::StandardItem::setActions (std::vector< Actionactions)
+
+ +

Setter for item actions.

+

These are the actions a users can run.

+ +
+
+ +

◆ setIconUrls()

+ +
+
+ + + + + + + + +
void albert::StandardItem::setIconUrls (QStringList icon_urls)
+
+ +

Setter for the input action text.

+

Used as input text replacement (usually by pressing Tab).

+ +
+
+ +

◆ setId()

+ +
+
+ + + + + + + + +
void albert::StandardItem::setId (QString id)
+
+ +

Setter for the item identifier.

+

Has to be unique per extension.

+ +
+
+ +

◆ setInputActionText()

+ +
+
+ + + + + + + + +
void albert::StandardItem::setInputActionText (QString input_action_text)
+
+ +

Setter for the items iconUrls.

+

Used to get the item icon using the IconProvider.

+ +
+
+ +

◆ setSubtext()

+ +
+
+ + + + + + + + +
void albert::StandardItem::setSubtext (QString subtext)
+
+ +

Setter for the item subtext.

+

Secondary descriptive text displayed in a list item.

+ +
+
+ +

◆ setText()

+ +
+
+ + + + + + + + +
void albert::StandardItem::setText (QString text)
+
+ +

Setter for the item text.

+

Primary text displayed emphasized in a list item. Empty text will crash the app since text length is used as divisor for scoring.

+ +
+
+ +

◆ subtext()

+ +
+
+ + + + + +
+ + + + + + + +
QString albert::StandardItem::subtext () const
+
+overridevirtual
+
+ +

Getter for the item subtext.

+

Secondary descriptive text displayed in a list item.

+ +

Implements albert::Item.

+ +
+
+ +

◆ text()

+ +
+
+ + + + + +
+ + + + + + + +
QString albert::StandardItem::text () const
+
+overridevirtual
+
+ +

Getter for the item text.

+

Primary text displayed emphasized in a list item. Empty text will crash the app since text length is used as divisor for scoring.

+ +

Implements albert::Item.

+ +
+
+

Member Data Documentation

+ +

◆ actions_

+ +
+
+ + + + + +
+ + + + +
std::vector<Action> albert::StandardItem::actions_
+
+protected
+
+ +
+
+ +

◆ icon_urls_

+ +
+
+ + + + + +
+ + + + +
QStringList albert::StandardItem::icon_urls_
+
+protected
+
+ +
+
+ +

◆ id_

+ +
+
+ + + + + +
+ + + + +
QString albert::StandardItem::id_
+
+protected
+
+ +
+
+ +

◆ input_action_text_

+ +
+
+ + + + + +
+ + + + +
QString albert::StandardItem::input_action_text_
+
+protected
+
+ +
+
+ +

◆ subtext_

+ +
+
+ + + + + +
+ + + + +
QString albert::StandardItem::subtext_
+
+protected
+
+ +
+
+ +

◆ text_

+ +
+
+ + + + + +
+ + + + +
QString albert::StandardItem::text_
+
+protected
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1StandardItem.js b/reference/classalbert_1_1StandardItem.js new file mode 100644 index 00000000..15c71f8d --- /dev/null +++ b/reference/classalbert_1_1StandardItem.js @@ -0,0 +1,26 @@ +var classalbert_1_1StandardItem = +[ + [ "StandardItem", "classalbert_1_1StandardItem.html#ac8f59f5af9d3b484b5f3c2efec9fac94", null ], + [ "StandardItem", "classalbert_1_1StandardItem.html#a8a07221cae4641ce2d11ef98d843db52", null ], + [ "StandardItem", "classalbert_1_1StandardItem.html#a4fc74616cb7bb8b4c4fc28d66781b910", null ], + [ "actions", "classalbert_1_1StandardItem.html#a397e19018275ddd82cdfa5c1f07bc459", null ], + [ "iconUrls", "classalbert_1_1StandardItem.html#a100e251755fc3b89a8eaef7dbb6a8dd9", null ], + [ "id", "classalbert_1_1StandardItem.html#aa7eaf721cdb29dac01f965b912c001be", null ], + [ "inputActionText", "classalbert_1_1StandardItem.html#a9930511eb0a37648cdd1fae7fa7e1e98", null ], + [ "operator=", "classalbert_1_1StandardItem.html#ab099fb8d9964defec643468f1a3b90dd", null ], + [ "operator=", "classalbert_1_1StandardItem.html#a5ac7e3ffe6459e9dcddbb4398d5b70f8", null ], + [ "setActions", "classalbert_1_1StandardItem.html#af285d6a81a83b640bde98abe223ed05f", null ], + [ "setIconUrls", "classalbert_1_1StandardItem.html#aa2e6deac74aec9f6afc06ecd14743d7e", null ], + [ "setId", "classalbert_1_1StandardItem.html#a482b09f80aaec878a9cb3cfded27ecdf", null ], + [ "setInputActionText", "classalbert_1_1StandardItem.html#ab3867f39fe824d9873248f406a4fa622", null ], + [ "setSubtext", "classalbert_1_1StandardItem.html#a6db7d37f05d57a9695a442325c61470f", null ], + [ "setText", "classalbert_1_1StandardItem.html#aa6a79337acbbe55d810307ee12b3299b", null ], + [ "subtext", "classalbert_1_1StandardItem.html#a1ab1c6f42fe6e919db5e7f44b4424672", null ], + [ "text", "classalbert_1_1StandardItem.html#adfd90bae2b852c8233cb4b7f464de316", null ], + [ "actions_", "classalbert_1_1StandardItem.html#ac6f077b942850287a4ebfc2f704808da", null ], + [ "icon_urls_", "classalbert_1_1StandardItem.html#a4e3501c3da1050cb320f0fdd4f19591b", null ], + [ "id_", "classalbert_1_1StandardItem.html#a580b213d38ef4e7f5e2e05669b5ee750", null ], + [ "input_action_text_", "classalbert_1_1StandardItem.html#ace0e1c5710b75656df13f53a2588be66", null ], + [ "subtext_", "classalbert_1_1StandardItem.html#a8e276ffbab6c0c02dcdd4f8647d63869", null ], + [ "text_", "classalbert_1_1StandardItem.html#a277d77f4c599d91187820f849e9a9c52", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1StandardItem.png b/reference/classalbert_1_1StandardItem.png new file mode 100644 index 00000000..399c0643 Binary files /dev/null and b/reference/classalbert_1_1StandardItem.png differ diff --git a/reference/classalbert_1_1TriggerQueryHandler-members.html b/reference/classalbert_1_1TriggerQueryHandler-members.html new file mode 100644 index 00000000..6104a1cb --- /dev/null +++ b/reference/classalbert_1_1TriggerQueryHandler-members.html @@ -0,0 +1,125 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::TriggerQueryHandler Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1TriggerQueryHandler.html b/reference/classalbert_1_1TriggerQueryHandler.html new file mode 100644 index 00000000..d70bb732 --- /dev/null +++ b/reference/classalbert_1_1TriggerQueryHandler.html @@ -0,0 +1,468 @@ + + + + + + + +Albert: albert::TriggerQueryHandler Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::TriggerQueryHandler Class Referenceabstract
+
+
+ +

#include <triggerqueryhandler.h>

+
+Inheritance diagram for albert::TriggerQueryHandler:
+
+
+ + +albert::Extension +albert::GlobalQueryHandler +albert::IndexQueryHandler + +
+

Detailed Description

+

Triggered query handler class.

+

If the trigger matches this handler is the only query handler chosen to process the user query. Inherit this class if you dont want your results to be reordered or if you want to display your items of a long running query as soon as they are available.

+
+ + + + +

+Classes

class  TriggerQuery
 The query interface used by TriggerQueryHandler. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 TriggerQueryHandler ()
 
 ~TriggerQueryHandler ()
 
QString trigger () const
 The user configured trigger of this handler. More...
 
virtual QString synopsis () const
 The synopsis, displayed on empty query. More...
 
virtual QString defaultTrigger () const
 The default (not user defined) trigger. Default Extension::id(). More...
 
virtual bool allowTriggerRemap () const
 Enable user remapping of the trigger. Default false. More...
 
virtual bool supportsFuzzyMatching () const
 Fuzzy matching capability. Default false. More...
 
virtual bool fuzzyMatching () const
 Fuzzy matching. Default false. More...
 
virtual void setFuzzyMatching (bool enabled)
 Fuzzy matching behavior. Default does nothing. More...
 
virtual void handleTriggerQuery (TriggerQuery *) const =0
 The trigger query processing function. More...
 
- Public Member Functions inherited from albert::Extension
virtual ~Extension ()=default
 
virtual QString id () const =0
 The guid of the extension. More...
 
virtual QString name () const =0
 Pretty, human readable name. More...
 
virtual QString description () const =0
 Brief description of what this extension provides. More...
 
+ + + +

+Friends

class ::QueryEngine
 
+

Constructor & Destructor Documentation

+ +

◆ TriggerQueryHandler()

+ +
+
+ + + + + + + +
albert::TriggerQueryHandler::TriggerQueryHandler ()
+
+ +
+
+ +

◆ ~TriggerQueryHandler()

+ +
+
+ + + + + + + +
albert::TriggerQueryHandler::~TriggerQueryHandler ()
+
+ +
+
+

Member Function Documentation

+ +

◆ allowTriggerRemap()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool albert::TriggerQueryHandler::allowTriggerRemap () const
+
+virtual
+
+ +

Enable user remapping of the trigger. Default false.

+ +
+
+ +

◆ defaultTrigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::TriggerQueryHandler::defaultTrigger () const
+
+virtual
+
+ +

The default (not user defined) trigger. Default Extension::id().

+ +
+
+ +

◆ fuzzyMatching()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool albert::TriggerQueryHandler::fuzzyMatching () const
+
+virtual
+
+ +

Fuzzy matching. Default false.

+ +

Reimplemented in albert::IndexQueryHandler.

+ +
+
+ +

◆ handleTriggerQuery()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::TriggerQueryHandler::handleTriggerQuery (TriggerQuery) const
+
+pure virtual
+
+ +

The trigger query processing function.

+
Note
Executed in a worker thread.
+ +

Implemented in albert::GlobalQueryHandler.

+ +
+
+ +

◆ setFuzzyMatching()

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::TriggerQueryHandler::setFuzzyMatching (bool enabled)
+
+virtual
+
+ +

Fuzzy matching behavior. Default does nothing.

+ +

Reimplemented in albert::IndexQueryHandler.

+ +
+
+ +

◆ supportsFuzzyMatching()

+ +
+
+ + + + + +
+ + + + + + + +
virtual bool albert::TriggerQueryHandler::supportsFuzzyMatching () const
+
+virtual
+
+ +

Fuzzy matching capability. Default false.

+ +

Reimplemented in albert::IndexQueryHandler.

+ +
+
+ +

◆ synopsis()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::TriggerQueryHandler::synopsis () const
+
+virtual
+
+ +

The synopsis, displayed on empty query.

+

Use this to give the user hints about accepted query strings. Default empty.

+ +

Reimplemented in albert::IndexQueryHandler.

+ +
+
+ +

◆ trigger()

+ +
+
+ + + + + + + +
QString albert::TriggerQueryHandler::trigger () const
+
+ +

The user configured trigger of this handler.

+ +
+
+

Friends And Related Function Documentation

+ +

◆ ::QueryEngine

+ +
+
+ + + + + +
+ + + + +
friend class ::QueryEngine
+
+friend
+
+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1TriggerQueryHandler.js b/reference/classalbert_1_1TriggerQueryHandler.js new file mode 100644 index 00000000..fc12d452 --- /dev/null +++ b/reference/classalbert_1_1TriggerQueryHandler.js @@ -0,0 +1,15 @@ +var classalbert_1_1TriggerQueryHandler = +[ + [ "TriggerQuery", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery" ], + [ "TriggerQueryHandler", "classalbert_1_1TriggerQueryHandler.html#adffedf3db5b8ed2e2477ad0bb1dda717", null ], + [ "~TriggerQueryHandler", "classalbert_1_1TriggerQueryHandler.html#abece36a266d7ed6a298eb22b871ca51d", null ], + [ "allowTriggerRemap", "classalbert_1_1TriggerQueryHandler.html#a565b2220701d672e00c54b71f4e9cb94", null ], + [ "defaultTrigger", "classalbert_1_1TriggerQueryHandler.html#afb3f05c5d7c91025dfe12ecb0065d6da", null ], + [ "fuzzyMatching", "classalbert_1_1TriggerQueryHandler.html#a5fc00de6ff2fb342abd5ef396549d579", null ], + [ "handleTriggerQuery", "classalbert_1_1TriggerQueryHandler.html#adf2cc8927e0f9a540b63669eab93ad23", null ], + [ "setFuzzyMatching", "classalbert_1_1TriggerQueryHandler.html#a4004638b15c55c526b0088e12d20b7f2", null ], + [ "supportsFuzzyMatching", "classalbert_1_1TriggerQueryHandler.html#a82133091f339ec43665604501dc562ea", null ], + [ "synopsis", "classalbert_1_1TriggerQueryHandler.html#a9853785b6798df4ef4b18ab715bb8608", null ], + [ "trigger", "classalbert_1_1TriggerQueryHandler.html#a0951983836810772176cd42f39170892", null ], + [ "::QueryEngine", "classalbert_1_1TriggerQueryHandler.html#ac160e3c0a76112ff60b3046eb5fe635f", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1TriggerQueryHandler.png b/reference/classalbert_1_1TriggerQueryHandler.png new file mode 100644 index 00000000..05978fe2 Binary files /dev/null and b/reference/classalbert_1_1TriggerQueryHandler.png differ diff --git a/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery-members.html b/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery-members.html new file mode 100644 index 00000000..95fffcc1 --- /dev/null +++ b/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery-members.html @@ -0,0 +1,118 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::TriggerQueryHandler::TriggerQuery Member List
+
+
+ +

This is the complete list of members for albert::TriggerQueryHandler::TriggerQuery, including all inherited members.

+ + + + + + + + + +
add(const std::shared_ptr< Item > &item)=0albert::TriggerQueryHandler::TriggerQuerypure virtual
add(std::shared_ptr< Item > &&item)=0albert::TriggerQueryHandler::TriggerQuerypure virtual
add(const std::vector< std::shared_ptr< Item > > &items)=0albert::TriggerQueryHandler::TriggerQuerypure virtual
add(std::vector< std::shared_ptr< Item > > &&items)=0albert::TriggerQueryHandler::TriggerQuerypure virtual
isValid() const =0albert::TriggerQueryHandler::TriggerQuerypure virtual
string() const =0albert::TriggerQueryHandler::TriggerQuerypure virtual
trigger() const =0albert::TriggerQueryHandler::TriggerQuerypure virtual
~TriggerQuery()=defaultalbert::TriggerQueryHandler::TriggerQueryvirtual
+
+ + + + diff --git a/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html b/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html new file mode 100644 index 00000000..827e54bb --- /dev/null +++ b/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html @@ -0,0 +1,371 @@ + + + + + + + +Albert: albert::TriggerQueryHandler::TriggerQuery Class Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::TriggerQueryHandler::TriggerQuery Class Referenceabstract
+
+
+ +

#include <triggerqueryhandler.h>

+

Detailed Description

+

The query interface used by TriggerQueryHandler.

+
See also
handleTriggerQuery
+
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~TriggerQuery ()=default
 
virtual QString trigger () const =0
 The trigger of this query if any. More...
 
virtual QString string () const =0
 The query string excluding the trigger. More...
 
virtual const bool & isValid () const =0
 True if query has not been cancelled. More...
 
virtual void add (const std::shared_ptr< Item > &item)=0
 Copy add single item. More...
 
virtual void add (std::shared_ptr< Item > &&item)=0
 Move add single item. More...
 
virtual void add (const std::vector< std::shared_ptr< Item > > &items)=0
 Copy add multiple items. More...
 
virtual void add (std::vector< std::shared_ptr< Item > > &&items)=0
 Move add multiple items. More...
 
+

Constructor & Destructor Documentation

+ +

◆ ~TriggerQuery()

+ +
+
+ + + + + +
+ + + + + + + +
virtual albert::TriggerQueryHandler::TriggerQuery::~TriggerQuery ()
+
+virtualdefault
+
+ +
+
+

Member Function Documentation

+ +

◆ add() [1/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::TriggerQueryHandler::TriggerQuery::add (const std::shared_ptr< Item > & item)
+
+pure virtual
+
+ +

Copy add single item.

+
Note
Use batch add if you can to avoid UI flicker.
+
See also
add(const std::vector<std::shared_ptr<Item>> &items)
+ +
+
+ +

◆ add() [2/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::TriggerQueryHandler::TriggerQuery::add (const std::vector< std::shared_ptr< Item > > & items)
+
+pure virtual
+
+ +

Copy add multiple items.

+ +
+
+ +

◆ add() [3/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::TriggerQueryHandler::TriggerQuery::add (std::shared_ptr< Item > && item)
+
+pure virtual
+
+ +

Move add single item.

+
Note
Use batch add if you can to avoid UI flicker.
+
See also
add(std::vector<std::shared_ptr<Item>> &&items)
+ +
+
+ +

◆ add() [4/4]

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void albert::TriggerQueryHandler::TriggerQuery::add (std::vector< std::shared_ptr< Item > > && items)
+
+pure virtual
+
+ +

Move add multiple items.

+ +
+
+ +

◆ isValid()

+ +
+
+ + + + + +
+ + + + + + + +
virtual const bool & albert::TriggerQueryHandler::TriggerQuery::isValid () const
+
+pure virtual
+
+ +

True if query has not been cancelled.

+
Note
Stop query processing if false.
+ +
+
+ +

◆ string()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::TriggerQueryHandler::TriggerQuery::string () const
+
+pure virtual
+
+ +

The query string excluding the trigger.

+ +
+
+ +

◆ trigger()

+ +
+
+ + + + + +
+ + + + + + + +
virtual QString albert::TriggerQueryHandler::TriggerQuery::trigger () const
+
+pure virtual
+
+ +

The trigger of this query if any.

+ +
+
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.js b/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.js new file mode 100644 index 00000000..bed237a7 --- /dev/null +++ b/reference/classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.js @@ -0,0 +1,11 @@ +var classalbert_1_1TriggerQueryHandler_1_1TriggerQuery = +[ + [ "~TriggerQuery", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#aaaf443d93086a391fc4f00ee5578d7c9", null ], + [ "add", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a0e6c722e1e91bee4782c4b0554390a45", null ], + [ "add", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a560416bd2151b4f8fb69abd176dc7ce7", null ], + [ "add", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a3f30cdcec326e81f0a9b288b469fa15a", null ], + [ "add", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#ac3b48e6c871c8bafd8b3f4a07a63f519", null ], + [ "isValid", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a102bcfd3d92f0c9bf94ba7a29c9fcc5a", null ], + [ "string", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a4a0e8a98d871f786f738118940c1f351", null ], + [ "trigger", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a870bf42eebe581976cab326e541b52c1", null ] +]; \ No newline at end of file diff --git a/reference/classalbert_1_1plugin_1_1ExtensionPlugin-members.html b/reference/classalbert_1_1plugin_1_1ExtensionPlugin-members.html new file mode 100644 index 00000000..fda81f20 --- /dev/null +++ b/reference/classalbert_1_1plugin_1_1ExtensionPlugin-members.html @@ -0,0 +1,124 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT > Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1plugin_1_1ExtensionPlugin.html b/reference/classalbert_1_1plugin_1_1ExtensionPlugin.html new file mode 100644 index 00000000..6c6cc349 --- /dev/null +++ b/reference/classalbert_1_1plugin_1_1ExtensionPlugin.html @@ -0,0 +1,195 @@ + + + + + + + +Albert: albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT > Class Template Reference
+
+
+ +

#include <plugin.h>

+
+Inheritance diagram for albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >:
+
+
+ + +albert::ExtensionPluginInstance< EXTENSION > +albert::PluginInstance + +
+

Detailed Description

+
template<class EXTENSION, class QOBJECT = QObject>
+class albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >

Convenience class for native plugins.

+

Similar to albert::plugin::Plugin, but inherits albert::ExtensionPluginInstance instead of albert::PluginInstance.

+
See also
albert::plugin::Plugin albert::ExtensionPluginInstance
+
Template Parameters
+ + + +
EXTENSIONThe Extension (subclass) to inherit.
QOBJECTThe QObject (subclass) to inherit. Defaults to OObject
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from albert::ExtensionPluginInstance< EXTENSION >
QString id () const override
 Override returning PluginInstance::id. More...
 
QString name () const override
 Override returning PluginInstance::name. More...
 
QString description () const override
 Override returning PluginInstance::description. More...
 
std::vector< Extension * > extensions () override
 Override returning this More...
 
- Public Member Functions inherited from albert::PluginInstance
 PluginInstance ()
 
virtual ~PluginInstance ()
 
QString id () const
 The plugin identifier. More...
 
virtual QString name () const
 The human readable plugin name. More...
 
virtual QString description () const
 Brief description of the plugin. More...
 
virtual void initialize (ExtensionRegistry *)
 The initialization function. More...
 
virtual void finalize (ExtensionRegistry *)
 The finalization function. More...
 
virtual std::vector< Extension * > extensions ()
 The extensions this plugin provides. More...
 
virtual QWidget * buildConfigWidget ()
 Config widget factory. More...
 
std::unique_ptr< QDir > cacheDir () const
 The recommended cache location. More...
 
std::unique_ptr< QDir > configDir () const
 The recommended config location. More...
 
std::unique_ptr< QDir > dataDir () const
 The recommended data location. More...
 
std::unique_ptr< QSettings > settings () const
 Prepared settings object. More...
 
- Protected Attributes inherited from albert::PluginInstance
const std::unique_ptr< PluginInstancePrivate > d
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1plugin_1_1ExtensionPlugin.png b/reference/classalbert_1_1plugin_1_1ExtensionPlugin.png new file mode 100644 index 00000000..5243f564 Binary files /dev/null and b/reference/classalbert_1_1plugin_1_1ExtensionPlugin.png differ diff --git a/reference/classalbert_1_1plugin_1_1Plugin-members.html b/reference/classalbert_1_1plugin_1_1Plugin-members.html new file mode 100644 index 00000000..15564731 --- /dev/null +++ b/reference/classalbert_1_1plugin_1_1Plugin-members.html @@ -0,0 +1,124 @@ + + + + + + + +Albert: Member List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert::plugin::Plugin< QOBJECT > Member List
+
+ +
+ + + + diff --git a/reference/classalbert_1_1plugin_1_1Plugin.html b/reference/classalbert_1_1plugin_1_1Plugin.html new file mode 100644 index 00000000..50dcdfe2 --- /dev/null +++ b/reference/classalbert_1_1plugin_1_1Plugin.html @@ -0,0 +1,181 @@ + + + + + + + +Albert: albert::plugin::Plugin< QOBJECT > Class Template Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
albert::plugin::Plugin< QOBJECT > Class Template Reference
+
+
+ +

#include <plugin.h>

+
+Inheritance diagram for albert::plugin::Plugin< QOBJECT >:
+
+
+ + +albert::PluginInstance + +
+

Detailed Description

+
template<class QOBJECT = QObject>
+class albert::plugin::Plugin< QOBJECT >

Convenience class for native plugins.

+

Native plugins have to inherit the albert::PluginInstance interface. Qt plugins in general have to inherit QObject. This template class combines these requirements while keeping the flexibility to inherit any subclass of QObject.

+

To declare this class as the plugin class that should be instanciated at runtime you have to add the ALBERT_PLUGIN macro to the class definition. Dont forget the Q_OBJECT macro.

+

Boolean user QPROPERTY's of registered plugins will be picked up by the core extension and are provided to the user as inline options. See ALBERT_PLUGIN_PROPERTY, ALBERT_PLUGIN_PROPERTY_NONTRIVIAL and ALBERT_PLUGIN_PROPERTY_CONNECT.

+
Template Parameters
+ + +
QOBJECTThe QObject (subclass) to inherit. Defaults to OObject
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Public Member Functions inherited from albert::PluginInstance
 PluginInstance ()
 
virtual ~PluginInstance ()
 
QString id () const
 The plugin identifier. More...
 
virtual QString name () const
 The human readable plugin name. More...
 
virtual QString description () const
 Brief description of the plugin. More...
 
virtual void initialize (ExtensionRegistry *)
 The initialization function. More...
 
virtual void finalize (ExtensionRegistry *)
 The finalization function. More...
 
virtual std::vector< Extension * > extensions ()
 The extensions this plugin provides. More...
 
virtual QWidget * buildConfigWidget ()
 Config widget factory. More...
 
std::unique_ptr< QDir > cacheDir () const
 The recommended cache location. More...
 
std::unique_ptr< QDir > configDir () const
 The recommended config location. More...
 
std::unique_ptr< QDir > dataDir () const
 The recommended data location. More...
 
std::unique_ptr< QSettings > settings () const
 Prepared settings object. More...
 
- Protected Attributes inherited from albert::PluginInstance
const std::unique_ptr< PluginInstancePrivate > d
 
+
The documentation for this class was generated from the following file: +
+
+ + + + diff --git a/reference/classalbert_1_1plugin_1_1Plugin.png b/reference/classalbert_1_1plugin_1_1Plugin.png new file mode 100644 index 00000000..5283e04f Binary files /dev/null and b/reference/classalbert_1_1plugin_1_1Plugin.png differ diff --git a/reference/classes.html b/reference/classes.html new file mode 100644 index 00000000..a92f92af --- /dev/null +++ b/reference/classes.html @@ -0,0 +1,146 @@ + + + + + + + +Albert: Class Index + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ + + + + + diff --git a/reference/closed.png b/reference/closed.png new file mode 100644 index 00000000..98cc2c90 Binary files /dev/null and b/reference/closed.png differ diff --git a/reference/dir_0aba32de8e87555f755a21df3f995eb7.html b/reference/dir_0aba32de8e87555f755a21df3f995eb7.html new file mode 100644 index 00000000..ca7bc2f3 --- /dev/null +++ b/reference/dir_0aba32de8e87555f755a21df3f995eb7.html @@ -0,0 +1,108 @@ + + + + + + + +Albert: albert/plugins Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
plugins Directory Reference
+
+
+
+
+ + + + diff --git a/reference/dir_234e4e715b2b47ddaff62061cfa9eb70.html b/reference/dir_234e4e715b2b47ddaff62061cfa9eb70.html new file mode 100644 index 00000000..ff2a812a --- /dev/null +++ b/reference/dir_234e4e715b2b47ddaff62061cfa9eb70.html @@ -0,0 +1,120 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
pluginprovider Directory Reference
+
+
+ + + + + + + + + + +

+Files

file  plugininstance.h [code]
 
file  pluginloader.h [code]
 
file  pluginmetadata.h [code]
 
file  pluginprovider.h [code]
 
+
+
+ + + + diff --git a/reference/dir_234e4e715b2b47ddaff62061cfa9eb70.js b/reference/dir_234e4e715b2b47ddaff62061cfa9eb70.js new file mode 100644 index 00000000..8e6a7026 --- /dev/null +++ b/reference/dir_234e4e715b2b47ddaff62061cfa9eb70.js @@ -0,0 +1,7 @@ +var dir_234e4e715b2b47ddaff62061cfa9eb70 = +[ + [ "plugininstance.h", "plugininstance_8h.html", "plugininstance_8h" ], + [ "pluginloader.h", "pluginloader_8h.html", "pluginloader_8h" ], + [ "pluginmetadata.h", "pluginmetadata_8h.html", "pluginmetadata_8h" ], + [ "pluginprovider.h", "pluginprovider_8h.html", "pluginprovider_8h" ] +]; \ No newline at end of file diff --git a/reference/dir_2dec62edf26e63e0e564a9dc88e95e56.html b/reference/dir_2dec62edf26e63e0e564a9dc88e95e56.html new file mode 100644 index 00000000..81de4c54 --- /dev/null +++ b/reference/dir_2dec62edf26e63e0e564a9dc88e95e56.html @@ -0,0 +1,130 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
queryhandler Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + +

+Files

file  action.h [code]
 
file  fallbackprovider.h [code]
 
file  globalqueryhandler.h [code]
 
file  indexitem.h [code]
 
file  indexqueryhandler.h [code]
 
file  item.h [code]
 
file  rankitem.h [code]
 
file  standarditem.h [code]
 
file  triggerqueryhandler.h [code]
 
+
+
+ + + + diff --git a/reference/dir_2dec62edf26e63e0e564a9dc88e95e56.js b/reference/dir_2dec62edf26e63e0e564a9dc88e95e56.js new file mode 100644 index 00000000..1762c5b4 --- /dev/null +++ b/reference/dir_2dec62edf26e63e0e564a9dc88e95e56.js @@ -0,0 +1,12 @@ +var dir_2dec62edf26e63e0e564a9dc88e95e56 = +[ + [ "action.h", "action_8h.html", "action_8h" ], + [ "fallbackprovider.h", "fallbackprovider_8h.html", "fallbackprovider_8h" ], + [ "globalqueryhandler.h", "globalqueryhandler_8h.html", "globalqueryhandler_8h" ], + [ "indexitem.h", "indexitem_8h.html", "indexitem_8h" ], + [ "indexqueryhandler.h", "indexqueryhandler_8h.html", "indexqueryhandler_8h" ], + [ "item.h", "item_8h.html", "item_8h" ], + [ "rankitem.h", "rankitem_8h.html", "rankitem_8h" ], + [ "standarditem.h", "standarditem_8h.html", "standarditem_8h" ], + [ "triggerqueryhandler.h", "triggerqueryhandler_8h.html", "triggerqueryhandler_8h" ] +]; \ No newline at end of file diff --git a/reference/dir_3318aa787d409fdf59c1eaff1774acec.html b/reference/dir_3318aa787d409fdf59c1eaff1774acec.html new file mode 100644 index 00000000..4130c09e --- /dev/null +++ b/reference/dir_3318aa787d409fdf59c1eaff1774acec.html @@ -0,0 +1,118 @@ + + + + + + + +Albert: albert/include/albert/extension Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
extension Directory Reference
+
+
+ + + + + + + + +

+Directories

directory  frontend
 
directory  pluginprovider
 
directory  queryhandler
 
+
+
+ + + + diff --git a/reference/dir_3318aa787d409fdf59c1eaff1774acec.js b/reference/dir_3318aa787d409fdf59c1eaff1774acec.js new file mode 100644 index 00000000..8a330d3f --- /dev/null +++ b/reference/dir_3318aa787d409fdf59c1eaff1774acec.js @@ -0,0 +1,6 @@ +var dir_3318aa787d409fdf59c1eaff1774acec = +[ + [ "frontend", "dir_a2bce6900b592008ef7575aceda43422.html", "dir_a2bce6900b592008ef7575aceda43422" ], + [ "pluginprovider", "dir_234e4e715b2b47ddaff62061cfa9eb70.html", "dir_234e4e715b2b47ddaff62061cfa9eb70" ], + [ "queryhandler", "dir_2dec62edf26e63e0e564a9dc88e95e56.html", "dir_2dec62edf26e63e0e564a9dc88e95e56" ] +]; \ No newline at end of file diff --git a/reference/dir_72601b846821e683602e451734beffe8.html b/reference/dir_72601b846821e683602e451734beffe8.html new file mode 100644 index 00000000..98ba19cb --- /dev/null +++ b/reference/dir_72601b846821e683602e451734beffe8.html @@ -0,0 +1,116 @@ + + + + + + + +Albert: albert/include/albert/util Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
util Directory Reference
+
+
+ + + + + + +

+Files

file  backgroundexecutor.h [code]
 
file  iconprovider.h [code]
 
+
+
+ + + + diff --git a/reference/dir_72601b846821e683602e451734beffe8.js b/reference/dir_72601b846821e683602e451734beffe8.js new file mode 100644 index 00000000..b3ef2d3e --- /dev/null +++ b/reference/dir_72601b846821e683602e451734beffe8.js @@ -0,0 +1,5 @@ +var dir_72601b846821e683602e451734beffe8 = +[ + [ "backgroundexecutor.h", "backgroundexecutor_8h.html", "backgroundexecutor_8h" ], + [ "iconprovider.h", "iconprovider_8h.html", "iconprovider_8h" ] +]; \ No newline at end of file diff --git a/reference/dir_73b5dde0f22dfca2ae353cdfc0a59fe5.html b/reference/dir_73b5dde0f22dfca2ae353cdfc0a59fe5.html new file mode 100644 index 00000000..6ae18a7f --- /dev/null +++ b/reference/dir_73b5dde0f22dfca2ae353cdfc0a59fe5.html @@ -0,0 +1,114 @@ + + + + + + + +Albert: albert/include Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
include Directory Reference
+
+
+ + + + +

+Directories

directory  albert
 
+
+
+ + + + diff --git a/reference/dir_73b5dde0f22dfca2ae353cdfc0a59fe5.js b/reference/dir_73b5dde0f22dfca2ae353cdfc0a59fe5.js new file mode 100644 index 00000000..2a673f1d --- /dev/null +++ b/reference/dir_73b5dde0f22dfca2ae353cdfc0a59fe5.js @@ -0,0 +1,4 @@ +var dir_73b5dde0f22dfca2ae353cdfc0a59fe5 = +[ + [ "albert", "dir_f0f46089beeebac69d4f0fa43cb2bbb7.html", "dir_f0f46089beeebac69d4f0fa43cb2bbb7" ] +]; \ No newline at end of file diff --git a/reference/dir_7effa596cb3093c53c23713aca210c2c.html b/reference/dir_7effa596cb3093c53c23713aca210c2c.html new file mode 100644 index 00000000..202dc501 --- /dev/null +++ b/reference/dir_7effa596cb3093c53c23713aca210c2c.html @@ -0,0 +1,116 @@ + + + + + + + +Albert: albert Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert Directory Reference
+
+
+ + + + + + +

+Directories

directory  include
 
directory  plugins
 
+
+
+ + + + diff --git a/reference/dir_7effa596cb3093c53c23713aca210c2c.js b/reference/dir_7effa596cb3093c53c23713aca210c2c.js new file mode 100644 index 00000000..d66cb80e --- /dev/null +++ b/reference/dir_7effa596cb3093c53c23713aca210c2c.js @@ -0,0 +1,5 @@ +var dir_7effa596cb3093c53c23713aca210c2c = +[ + [ "include", "dir_73b5dde0f22dfca2ae353cdfc0a59fe5.html", "dir_73b5dde0f22dfca2ae353cdfc0a59fe5" ], + [ "plugins", "dir_0aba32de8e87555f755a21df3f995eb7.html", null ] +]; \ No newline at end of file diff --git a/reference/dir_a2bce6900b592008ef7575aceda43422.html b/reference/dir_a2bce6900b592008ef7575aceda43422.html new file mode 100644 index 00000000..91a697be --- /dev/null +++ b/reference/dir_a2bce6900b592008ef7575aceda43422.html @@ -0,0 +1,120 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
frontend Directory Reference
+
+
+ + + + + + + + + + +

+Files

file  frontend.h [code]
 
file  inputhistory.h [code]
 
file  itemroles.h [code]
 
file  query.h [code]
 
+
+
+ + + + diff --git a/reference/dir_a2bce6900b592008ef7575aceda43422.js b/reference/dir_a2bce6900b592008ef7575aceda43422.js new file mode 100644 index 00000000..e5026f91 --- /dev/null +++ b/reference/dir_a2bce6900b592008ef7575aceda43422.js @@ -0,0 +1,7 @@ +var dir_a2bce6900b592008ef7575aceda43422 = +[ + [ "frontend.h", "frontend_8h.html", "frontend_8h" ], + [ "inputhistory.h", "inputhistory_8h.html", "inputhistory_8h" ], + [ "itemroles.h", "itemroles_8h.html", "itemroles_8h" ], + [ "query.h", "query_8h.html", "query_8h" ] +]; \ No newline at end of file diff --git a/reference/dir_f0f46089beeebac69d4f0fa43cb2bbb7.html b/reference/dir_f0f46089beeebac69d4f0fa43cb2bbb7.html new file mode 100644 index 00000000..d70ef2fa --- /dev/null +++ b/reference/dir_f0f46089beeebac69d4f0fa43cb2bbb7.html @@ -0,0 +1,131 @@ + + + + + + + +Albert: albert/include/albert Directory Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
albert Directory Reference
+
+
+ + + + + + +

+Directories

directory  extension
 
directory  util
 
+ + + + + + + + + + + + + +

+Files

file  albert.h [code]
 
file  extension.h [code]
 
file  extensionregistry.h [code]
 
file  extensionwatcher.h [code]
 
file  logging.h [code]
 
file  plugin.h [code]
 
+
+
+ + + + diff --git a/reference/dir_f0f46089beeebac69d4f0fa43cb2bbb7.js b/reference/dir_f0f46089beeebac69d4f0fa43cb2bbb7.js new file mode 100644 index 00000000..f6f039e3 --- /dev/null +++ b/reference/dir_f0f46089beeebac69d4f0fa43cb2bbb7.js @@ -0,0 +1,11 @@ +var dir_f0f46089beeebac69d4f0fa43cb2bbb7 = +[ + [ "extension", "dir_3318aa787d409fdf59c1eaff1774acec.html", "dir_3318aa787d409fdf59c1eaff1774acec" ], + [ "util", "dir_72601b846821e683602e451734beffe8.html", "dir_72601b846821e683602e451734beffe8" ], + [ "albert.h", "albert_8h.html", "albert_8h" ], + [ "extension.h", "extension_8h.html", "extension_8h" ], + [ "extensionregistry.h", "extensionregistry_8h.html", "extensionregistry_8h" ], + [ "extensionwatcher.h", "extensionwatcher_8h.html", "extensionwatcher_8h" ], + [ "logging.h", "logging_8h.html", "logging_8h" ], + [ "plugin.h", "plugin_8h.html", "plugin_8h" ] +]; \ No newline at end of file diff --git a/reference/doc.png b/reference/doc.png new file mode 100644 index 00000000..17edabff Binary files /dev/null and b/reference/doc.png differ diff --git a/reference/docd.png b/reference/docd.png new file mode 100644 index 00000000..d7c94fda Binary files /dev/null and b/reference/docd.png differ diff --git a/reference/doxygen-awesome-sidebar-only.css b/reference/doxygen-awesome-sidebar-only.css new file mode 100644 index 00000000..853f6d69 --- /dev/null +++ b/reference/doxygen-awesome-sidebar-only.css @@ -0,0 +1,116 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + */ + +html { + /* side nav width. MUST be = `TREEVIEW_WIDTH`. + * Make sure it is wide enough to contain the page title (logo + title + version) + */ + --side-nav-fixed-width: 335px; + --menu-display: none; + + --top-height: 120px; + --toc-sticky-top: -25px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px); +} + +#projectname { + white-space: nowrap; +} + + +@media screen and (min-width: 768px) { + html { + --searchbar-background: var(--page-background-color); + } + + #side-nav { + min-width: var(--side-nav-fixed-width); + max-width: var(--side-nav-fixed-width); + top: var(--top-height); + overflow: visible; + } + + #nav-tree, #side-nav { + height: calc(100vh - var(--top-height)) !important; + } + + #nav-tree { + padding: 0; + } + + #top { + display: block; + border-bottom: none; + height: var(--top-height); + margin-bottom: calc(0px - var(--top-height)); + max-width: var(--side-nav-fixed-width); + overflow: hidden; + background: var(--side-nav-background); + } + #main-nav { + float: left; + padding-right: 0; + } + + .ui-resizable-handle { + cursor: default; + width: 1px !important; + background: var(--separator-color); + box-shadow: 0 calc(-2 * var(--top-height)) 0 0 var(--separator-color); + } + + #nav-path { + position: fixed; + right: 0; + left: var(--side-nav-fixed-width); + bottom: 0; + width: auto; + } + + #doc-content { + height: calc(100vh - 31px) !important; + padding-bottom: calc(3 * var(--spacing-large)); + padding-top: calc(var(--top-height) - 80px); + box-sizing: border-box; + margin-left: var(--side-nav-fixed-width) !important; + } + + #MSearchBox { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium))); + } + + #MSearchField { + width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px); + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: auto; + } +} diff --git a/reference/doxygen-awesome.css b/reference/doxygen-awesome.css new file mode 100644 index 00000000..08238977 --- /dev/null +++ b/reference/doxygen-awesome.css @@ -0,0 +1,2530 @@ +/** + +Doxygen Awesome +https://github.com/jothepro/doxygen-awesome-css + +MIT License + +Copyright (c) 2021 - 2023 jothepro + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +*/ + +html { + /* primary theme color. This will affect the entire websites color scheme: links, arrows, labels, ... */ + --primary-color: #1779c4; + --primary-dark-color: #335c80; + --primary-light-color: #70b1e9; + + /* page base colors */ + --page-background-color: #ffffff; + --page-foreground-color: #2f4153; + --page-secondary-foreground-color: #6f7e8e; + + /* color for all separators on the website: hr, borders, ... */ + --separator-color: #dedede; + + /* border radius for all rounded components. Will affect many components, like dropdowns, memitems, codeblocks, ... */ + --border-radius-large: 8px; + --border-radius-small: 4px; + --border-radius-medium: 6px; + + /* default spacings. Most components reference these values for spacing, to provide uniform spacing on the page. */ + --spacing-small: 5px; + --spacing-medium: 10px; + --spacing-large: 16px; + + /* default box shadow used for raising an element above the normal content. Used in dropdowns, search result, ... */ + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.075); + + --odd-color: rgba(0,0,0,.028); + + /* font-families. will affect all text on the website + * font-family: the normal font for text, headlines, menus + * font-family-monospace: used for preformatted text in memtitle, code, fragments + */ + --font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif; + --font-family-monospace: ui-monospace,SFMono-Regular,SF Mono,Menlo,Consolas,Liberation Mono,monospace; + + /* font sizes */ + --page-font-size: 15.6px; + --navigation-font-size: 14.4px; + --toc-font-size: 13.4px; + --code-font-size: 14px; /* affects code, fragment */ + --title-font-size: 22px; + + /* content text properties. These only affect the page content, not the navigation or any other ui elements */ + --content-line-height: 27px; + /* The content is centered and constraint in it's width. To make the content fill the whole page, set the variable to auto.*/ + --content-maxwidth: 1050px; + --table-line-height: 24px; + --toc-sticky-top: var(--spacing-medium); + --toc-width: 200px; + --toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 85px); + + /* colors for various content boxes: @warning, @note, @deprecated @bug */ + --warning-color: #f8d1cc; + --warning-color-dark: #b61825; + --warning-color-darker: #75070f; + --note-color: #faf3d8; + --note-color-dark: #f3a600; + --note-color-darker: #5f4204; + --todo-color: #e4f3ff; + --todo-color-dark: #1879C4; + --todo-color-darker: #274a5c; + --deprecated-color: #ecf0f3; + --deprecated-color-dark: #5b6269; + --deprecated-color-darker: #43454a; + --bug-color: #e4dafd; + --bug-color-dark: #5b2bdd; + --bug-color-darker: #2a0d72; + --invariant-color: #d8f1e3; + --invariant-color-dark: #44b86f; + --invariant-color-darker: #265532; + + /* blockquote colors */ + --blockquote-background: #f8f9fa; + --blockquote-foreground: #636568; + + /* table colors */ + --tablehead-background: #f1f1f1; + --tablehead-foreground: var(--page-foreground-color); + + /* menu-display: block | none + * Visibility of the top navigation on screens >= 768px. On smaller screen the menu is always visible. + * `GENERATE_TREEVIEW` MUST be enabled! + */ + --menu-display: block; + + --menu-focus-foreground: var(--page-background-color); + --menu-focus-background: var(--primary-color); + --menu-selected-background: rgba(0,0,0,.05); + + + --header-background: var(--page-background-color); + --header-foreground: var(--page-foreground-color); + + /* searchbar colors */ + --searchbar-background: var(--side-nav-background); + --searchbar-foreground: var(--page-foreground-color); + + /* searchbar size + * (`searchbar-width` is only applied on screens >= 768px. + * on smaller screens the searchbar will always fill the entire screen width) */ + --searchbar-height: 33px; + --searchbar-width: 210px; + --searchbar-border-radius: var(--searchbar-height); + + /* code block colors */ + --code-background: #f5f5f5; + --code-foreground: var(--page-foreground-color); + + /* fragment colors */ + --fragment-background: #F8F9FA; + --fragment-foreground: #37474F; + --fragment-keyword: #bb6bb2; + --fragment-keywordtype: #8258b3; + --fragment-keywordflow: #d67c3b; + --fragment-token: #438a59; + --fragment-comment: #969696; + --fragment-link: #5383d6; + --fragment-preprocessor: #46aaa5; + --fragment-linenumber-color: #797979; + --fragment-linenumber-background: #f4f4f5; + --fragment-linenumber-border: #e3e5e7; + --fragment-lineheight: 20px; + + /* sidebar navigation (treeview) colors */ + --side-nav-background: #fbfbfb; + --side-nav-foreground: var(--page-foreground-color); + --side-nav-arrow-opacity: 0; + --side-nav-arrow-hover-opacity: 0.9; + + --toc-background: var(--side-nav-background); + --toc-foreground: var(--side-nav-foreground); + + /* height of an item in any tree / collapsible table */ + --tree-item-height: 30px; + + --memname-font-size: var(--code-font-size); + --memtitle-font-size: 18px; + + --webkit-scrollbar-size: 7px; + --webkit-scrollbar-padding: 4px; + --webkit-scrollbar-color: var(--separator-color); +} + +@media screen and (max-width: 767px) { + html { + --page-font-size: 16px; + --navigation-font-size: 16px; + --toc-font-size: 15px; + --code-font-size: 15px; /* affects code, fragment */ + --title-font-size: 22px; + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.35); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #2e1917; + --warning-color-dark: #ad2617; + --warning-color-darker: #f5b1aa; + --note-color: #3b2e04; + --note-color-dark: #f1b602; + --note-color-darker: #ceb670; + --todo-color: #163750; + --todo-color-dark: #1982D2; + --todo-color-darker: #dcf0fa; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2a2536; + --bug-color-dark: #7661b3; + --bug-color-darker: #ae9ed6; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; + } +} + +/* dark mode variables are defined twice, to support both the dark-mode without and with doxygen-awesome-darkmode-toggle.js */ +html.dark-mode { + color-scheme: dark; + + --primary-color: #1982d2; + --primary-dark-color: #86a9c4; + --primary-light-color: #4779ac; + + --box-shadow: 0 2px 8px 0 rgba(0,0,0,.30); + + --odd-color: rgba(100,100,100,.06); + + --menu-selected-background: rgba(0,0,0,.4); + + --page-background-color: #1C1D1F; + --page-foreground-color: #d2dbde; + --page-secondary-foreground-color: #859399; + --separator-color: #38393b; + --side-nav-background: #252628; + + --code-background: #2a2c2f; + + --tablehead-background: #2a2c2f; + + --blockquote-background: #222325; + --blockquote-foreground: #7e8c92; + + --warning-color: #2e1917; + --warning-color-dark: #ad2617; + --warning-color-darker: #f5b1aa; + --note-color: #3b2e04; + --note-color-dark: #f1b602; + --note-color-darker: #ceb670; + --todo-color: #163750; + --todo-color-dark: #1982D2; + --todo-color-darker: #dcf0fa; + --deprecated-color: #2e323b; + --deprecated-color-dark: #738396; + --deprecated-color-darker: #abb0bd; + --bug-color: #2a2536; + --bug-color-dark: #7661b3; + --bug-color-darker: #ae9ed6; + --invariant-color: #303a35; + --invariant-color-dark: #76ce96; + --invariant-color-darker: #cceed5; + + --fragment-background: #282c34; + --fragment-foreground: #dbe4eb; + --fragment-keyword: #cc99cd; + --fragment-keywordtype: #ab99cd; + --fragment-keywordflow: #e08000; + --fragment-token: #7ec699; + --fragment-comment: #999999; + --fragment-link: #98c0e3; + --fragment-preprocessor: #65cabe; + --fragment-linenumber-color: #cccccc; + --fragment-linenumber-background: #35393c; + --fragment-linenumber-border: #1f1f1f; +} + +body { + color: var(--page-foreground-color); + background-color: var(--page-background-color); + font-size: var(--page-font-size); +} + +body, table, div, p, dl, #nav-tree .label, .title, +.sm-dox a, .sm-dox a:hover, .sm-dox a:focus, #projectname, +.SelectItem, #MSearchField, .navpath li.navelem a, +.navpath li.navelem a:hover, p.reference, p.definition { + font-family: var(--font-family); +} + +h1, h2, h3, h4, h5 { + margin-top: .9em; + font-weight: 600; + line-height: initial; +} + +p, div, table, dl, p.reference, p.definition { + font-size: var(--page-font-size); +} + +p.reference, p.definition { + color: var(--page-secondary-foreground-color); +} + +a:link, a:visited, a:hover, a:focus, a:active { + color: var(--primary-color) !important; + font-weight: 500; +} + +a.anchor { + scroll-margin-top: var(--spacing-large); + display: block; +} + +/* + Title and top navigation + */ + +#top { + background: var(--header-background); + border-bottom: 1px solid var(--separator-color); +} + +@media screen and (min-width: 768px) { + #top { + display: flex; + flex-wrap: wrap; + justify-content: space-between; + align-items: center; + } +} + +#main-nav { + flex-grow: 5; + padding: var(--spacing-small) var(--spacing-medium); +} + +#titlearea { + width: auto; + padding: var(--spacing-medium) var(--spacing-large); + background: none; + color: var(--header-foreground); + border-bottom: none; +} + +@media screen and (max-width: 767px) { + #titlearea { + padding-bottom: var(--spacing-small); + } +} + +#titlearea table tbody tr { + height: auto !important; +} + +#projectname { + font-size: var(--title-font-size); + font-weight: 600; +} + +#projectnumber { + font-family: inherit; + font-size: 60%; +} + +#projectbrief { + font-family: inherit; + font-size: 80%; +} + +#projectlogo { + vertical-align: middle; +} + +#projectlogo img { + max-height: calc(var(--title-font-size) * 2); + margin-right: var(--spacing-small); +} + +.sm-dox, .tabs, .tabs2, .tabs3 { + background: none; + padding: 0; +} + +.tabs, .tabs2, .tabs3 { + border-bottom: 1px solid var(--separator-color); + margin-bottom: -1px; +} + +.main-menu-btn-icon, .main-menu-btn-icon:before, .main-menu-btn-icon:after { + background: var(--page-secondary-foreground-color); +} + +@media screen and (max-width: 767px) { + .sm-dox a span.sub-arrow { + background: var(--code-background); + } + + #main-menu a.has-submenu span.sub-arrow { + color: var(--page-secondary-foreground-color); + border-radius: var(--border-radius-medium); + } + + #main-menu a.has-submenu:hover span.sub-arrow { + color: var(--page-foreground-color); + } +} + +@media screen and (min-width: 768px) { + .sm-dox li, .tablist li { + display: var(--menu-display); + } + + .sm-dox a span.sub-arrow { + border-color: var(--header-foreground) transparent transparent transparent; + } + + .sm-dox a:hover span.sub-arrow { + border-color: var(--menu-focus-foreground) transparent transparent transparent; + } + + .sm-dox ul a span.sub-arrow { + border-color: transparent transparent transparent var(--page-foreground-color); + } + + .sm-dox ul a:hover span.sub-arrow { + border-color: transparent transparent transparent var(--menu-focus-foreground); + } +} + +.sm-dox ul { + background: var(--page-background-color); + box-shadow: var(--box-shadow); + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium) !important; + padding: var(--spacing-small); + animation: ease-out 150ms slideInMenu; +} + +@keyframes slideInMenu { + from { + opacity: 0; + transform: translate(0px, -2px); + } + + to { + opacity: 1; + transform: translate(0px, 0px); + } +} + +.sm-dox ul a { + color: var(--page-foreground-color) !important; + background: var(--page-background-color); + font-size: var(--navigation-font-size); +} + +.sm-dox>li>ul:after { + border-bottom-color: var(--page-background-color) !important; +} + +.sm-dox>li>ul:before { + border-bottom-color: var(--separator-color) !important; +} + +.sm-dox ul a:hover, .sm-dox ul a:active, .sm-dox ul a:focus { + font-size: var(--navigation-font-size) !important; + color: var(--menu-focus-foreground) !important; + text-shadow: none; + background-color: var(--menu-focus-background); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a, .sm-dox a:focus, .tablist li, .tablist li a, .tablist li.current a { + text-shadow: none; + background: transparent; + background-image: none !important; + color: var(--header-foreground) !important; + font-weight: normal; + font-size: var(--navigation-font-size); + border-radius: var(--border-radius-small) !important; +} + +.sm-dox a:focus { + outline: auto; +} + +.sm-dox a:hover, .sm-dox a:active, .tablist li a:hover { + text-shadow: none; + font-weight: normal; + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; + border-radius: var(--border-radius-small) !important; + font-size: var(--navigation-font-size); +} + +.tablist li.current { + border-radius: var(--border-radius-small); + background: var(--menu-selected-background); +} + +.tablist li { + margin: var(--spacing-small) 0 var(--spacing-small) var(--spacing-small); +} + +.tablist a { + padding: 0 var(--spacing-large); +} + + +/* + Search box + */ + +#MSearchBox { + height: var(--searchbar-height); + background: var(--searchbar-background); + border-radius: var(--searchbar-border-radius); + border: 1px solid var(--separator-color); + overflow: hidden; + width: var(--searchbar-width); + position: relative; + box-shadow: none; + display: block; + margin-top: 0; +} + +/* until Doxygen 1.9.4 */ +.left img#MSearchSelect { + left: 0; + user-select: none; + padding-left: 8px; +} + +/* Doxygen 1.9.5 */ +.left span#MSearchSelect { + left: 0; + user-select: none; + margin-left: 8px; + padding: 0; +} + +.left #MSearchSelect[src$=".png"] { + padding-left: 0 +} + +.SelectionMark { + user-select: none; +} + +.tabs .left #MSearchSelect { + padding-left: 0; +} + +.tabs #MSearchBox { + position: absolute; + right: var(--spacing-medium); +} + +@media screen and (max-width: 767px) { + .tabs #MSearchBox { + position: relative; + right: 0; + margin-left: var(--spacing-medium); + margin-top: 0; + } +} + +#MSearchSelectWindow, #MSearchResultsWindow { + z-index: 9999; +} + +#MSearchBox.MSearchBoxActive { + border-color: var(--primary-color); + box-shadow: inset 0 0 0 1px var(--primary-color); +} + +#main-menu > li:last-child { + margin-right: 0; +} + +@media screen and (max-width: 767px) { + #main-menu > li:last-child { + height: 50px; + } +} + +#MSearchField { + font-size: var(--navigation-font-size); + height: calc(var(--searchbar-height) - 2px); + background: transparent; + width: calc(var(--searchbar-width) - 64px); +} + +.MSearchBoxActive #MSearchField { + color: var(--searchbar-foreground); +} + +#MSearchSelect { + top: calc(calc(var(--searchbar-height) / 2) - 11px); +} + +#MSearchBox span.left, #MSearchBox span.right { + background: none; + background-image: none; +} + +#MSearchBox span.right { + padding-top: calc(calc(var(--searchbar-height) / 2) - 12px); + position: absolute; + right: var(--spacing-small); +} + +.tabs #MSearchBox span.right { + top: calc(calc(var(--searchbar-height) / 2) - 12px); +} + +@keyframes slideInSearchResults { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } +} + +#MSearchResultsWindow { + left: auto !important; + right: var(--spacing-medium); + border-radius: var(--border-radius-large); + border: 1px solid var(--separator-color); + transform: translate(0, 20px); + box-shadow: var(--box-shadow); + animation: ease-out 280ms slideInSearchResults; + background: var(--page-background-color); +} + +iframe#MSearchResults { + margin: 4px; +} + +iframe { + color-scheme: normal; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) iframe#MSearchResults { + filter: invert() hue-rotate(180deg); + } +} + +html.dark-mode iframe#MSearchResults { + filter: invert() hue-rotate(180deg); +} + +#MSearchResults .SRPage { + background-color: transparent; +} + +#MSearchResults .SRPage .SREntry { + font-size: 10pt; + padding: var(--spacing-small) var(--spacing-medium); +} + +#MSearchSelectWindow { + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + box-shadow: var(--box-shadow); + background: var(--page-background-color); + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); +} + +#MSearchSelectWindow a.SelectItem { + font-size: var(--navigation-font-size); + line-height: var(--content-line-height); + margin: 0 var(--spacing-small); + border-radius: var(--border-radius-small); + color: var(--page-foreground-color) !important; + font-weight: normal; +} + +#MSearchSelectWindow a.SelectItem:hover { + background: var(--menu-focus-background); + color: var(--menu-focus-foreground) !important; +} + +@media screen and (max-width: 767px) { + #MSearchBox { + margin-top: var(--spacing-medium); + margin-bottom: var(--spacing-medium); + width: calc(100vw - 30px); + } + + #main-menu > li:last-child { + float: none !important; + } + + #MSearchField { + width: calc(100vw - 110px); + } + + @keyframes slideInSearchResultsMobile { + from { + opacity: 0; + transform: translate(0, 15px); + } + + to { + opacity: 1; + transform: translate(0, 20px); + } + } + + #MSearchResultsWindow { + left: var(--spacing-medium) !important; + right: var(--spacing-medium); + overflow: auto; + transform: translate(0, 20px); + animation: ease-out 280ms slideInSearchResultsMobile; + width: auto !important; + } + + /* + * Overwrites for fixing the searchbox on mobile in doxygen 1.9.2 + */ + label.main-menu-btn ~ #searchBoxPos1 { + top: 3px !important; + right: 6px !important; + left: 45px; + display: flex; + } + + label.main-menu-btn ~ #searchBoxPos1 > #MSearchBox { + margin-top: 0; + margin-bottom: 0; + flex-grow: 2; + float: left; + } +} + +/* + Tree view + */ + +#side-nav { + padding: 0 !important; + background: var(--side-nav-background); + min-width: 8px; + max-width: 50vw; +} + +@media screen and (max-width: 767px) { + #side-nav { + display: none; + } + + #doc-content { + margin-left: 0 !important; + } +} + +#nav-tree { + background: transparent; + margin-right: 1px; +} + +#nav-tree .label { + font-size: var(--navigation-font-size); +} + +#nav-tree .item { + height: var(--tree-item-height); + line-height: var(--tree-item-height); +} + +#nav-sync { + bottom: 12px; + right: 12px; + top: auto !important; + user-select: none; +} + +#nav-tree .selected { + text-shadow: none; + background-image: none; + background-color: transparent; + position: relative; +} + +#nav-tree .selected::after { + content: ""; + position: absolute; + top: 1px; + bottom: 1px; + left: 0; + width: 4px; + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + background: var(--primary-color); +} + + +#nav-tree a { + color: var(--side-nav-foreground) !important; + font-weight: normal; +} + +#nav-tree a:focus { + outline-style: auto; +} + +#nav-tree .arrow { + opacity: var(--side-nav-arrow-opacity); +} + +.arrow { + color: inherit; + cursor: pointer; + font-size: 45%; + vertical-align: middle; + margin-right: 2px; + font-family: serif; + height: auto; + text-align: right; +} + +#nav-tree div.item:hover .arrow, #nav-tree a:focus .arrow { + opacity: var(--side-nav-arrow-hover-opacity); +} + +#nav-tree .selected a { + color: var(--primary-color) !important; + font-weight: bolder; + font-weight: 600; +} + +.ui-resizable-e { + width: 4px; + background: transparent; + box-shadow: inset -1px 0 0 0 var(--separator-color); +} + +/* + Contents + */ + +div.header { + border-bottom: 1px solid var(--separator-color); + background-color: var(--page-background-color); + background-image: none; +} + +@media screen and (min-width: 1000px) { + #doc-content > div > div.contents, + .PageDoc > div.contents { + display: flex; + flex-direction: row-reverse; + flex-wrap: nowrap; + align-items: flex-start; + } + + div.contents .textblock { + min-width: 200px; + flex-grow: 1; + } +} + +div.contents, div.header .title, div.header .summary { + max-width: var(--content-maxwidth); +} + +div.contents, div.header .title { + line-height: initial; + margin: calc(var(--spacing-medium) + .2em) auto var(--spacing-medium) auto; +} + +div.header .summary { + margin: var(--spacing-medium) auto 0 auto; +} + +div.headertitle { + padding: 0; +} + +div.header .title { + font-weight: 600; + font-size: 225%; + padding: var(--spacing-medium) var(--spacing-large); + word-break: break-word; +} + +div.header .summary { + width: auto; + display: block; + float: none; + padding: 0 var(--spacing-large); +} + +td.memSeparator { + border-color: var(--separator-color); +} + +span.mlabel { + background: var(--primary-color); + border: none; + padding: 4px 9px; + border-radius: 12px; + margin-right: var(--spacing-medium); +} + +span.mlabel:last-of-type { + margin-right: 2px; +} + +div.contents { + padding: 0 var(--spacing-large); +} + +div.contents p, div.contents li { + line-height: var(--content-line-height); +} + +div.contents div.dyncontent { + margin: var(--spacing-medium) 0; +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) div.contents div.dyncontent img, + html:not(.light-mode) div.contents center img, + html:not(.light-mode) div.contents > table img, + html:not(.light-mode) div.contents div.dyncontent iframe, + html:not(.light-mode) div.contents center iframe, + html:not(.light-mode) div.contents table iframe, + html:not(.light-mode) div.contents .dotgraph iframe { + filter: brightness(89%) hue-rotate(180deg) invert(); + } +} + +html.dark-mode div.contents div.dyncontent img, +html.dark-mode div.contents center img, +html.dark-mode div.contents > table img, +html.dark-mode div.contents div.dyncontent iframe, +html.dark-mode div.contents center iframe, +html.dark-mode div.contents table iframe, +html.dark-mode div.contents .dotgraph iframe + { + filter: brightness(89%) hue-rotate(180deg) invert(); +} + +h2.groupheader { + border-bottom: 0px; + color: var(--page-foreground-color); + box-shadow: + 100px 0 var(--page-background-color), + -100px 0 var(--page-background-color), + 100px 0.75px var(--separator-color), + -100px 0.75px var(--separator-color), + 500px 0 var(--page-background-color), + -500px 0 var(--page-background-color), + 500px 0.75px var(--separator-color), + -500px 0.75px var(--separator-color), + 900px 0 var(--page-background-color), + -900px 0 var(--page-background-color), + 900px 0.75px var(--separator-color), + -900px 0.75px var(--separator-color), + 1400px 0 var(--page-background-color), + -1400px 0 var(--page-background-color), + 1400px 0.75px var(--separator-color), + -1400px 0.75px var(--separator-color), + 1900px 0 var(--page-background-color), + -1900px 0 var(--page-background-color), + 1900px 0.75px var(--separator-color), + -1900px 0.75px var(--separator-color); +} + +blockquote { + margin: 0 var(--spacing-medium) 0 var(--spacing-medium); + padding: var(--spacing-small) var(--spacing-large); + background: var(--blockquote-background); + color: var(--blockquote-foreground); + border-left: 0; + overflow: visible; + border-radius: var(--border-radius-medium); + overflow: visible; + position: relative; +} + +blockquote::before, blockquote::after { + font-weight: bold; + font-family: serif; + font-size: 360%; + opacity: .15; + position: absolute; +} + +blockquote::before { + content: "“"; + left: -10px; + top: 4px; +} + +blockquote::after { + content: "”"; + right: -8px; + bottom: -25px; +} + +blockquote p { + margin: var(--spacing-small) 0 var(--spacing-medium) 0; +} +.paramname { + font-weight: 600; + color: var(--primary-dark-color); +} + +.paramname > code { + border: 0; +} + +table.params .paramname { + font-weight: 600; + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + padding-right: var(--spacing-small); + line-height: var(--table-line-height); +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px var(--primary-light-color); +} + +.alphachar a { + color: var(--page-foreground-color); +} + +.dotgraph { + max-width: 100%; + overflow-x: scroll; +} + +.dotgraph .caption { + position: sticky; + left: 0; +} + +/* Wrap Graphviz graphs with the `interactive_dotgraph` class if `INTERACTIVE_SVG = YES` */ +.interactive_dotgraph .dotgraph iframe { + max-width: 100%; +} + +/* + Table of Contents + */ + +div.contents .toc { + max-height: var(--toc-max-height); + min-width: var(--toc-width); + border: 0; + border-left: 1px solid var(--separator-color); + border-radius: 0; + background-color: transparent; + box-shadow: none; + position: sticky; + top: var(--toc-sticky-top); + padding: 0 var(--spacing-large); + margin: var(--spacing-small) 0 var(--spacing-large) var(--spacing-large); +} + +div.toc h3 { + color: var(--toc-foreground); + font-size: var(--navigation-font-size); + margin: var(--spacing-large) 0 var(--spacing-medium) 0; +} + +div.toc li { + padding: 0; + background: none; + line-height: var(--toc-font-size); + margin: var(--toc-font-size) 0 0 0; +} + +div.toc li::before { + display: none; +} + +div.toc ul { + margin-top: 0 +} + +div.toc li a { + font-size: var(--toc-font-size); + color: var(--page-foreground-color) !important; + text-decoration: none; +} + +div.toc li a:hover, div.toc li a.active { + color: var(--primary-color) !important; +} + +div.toc li a.aboveActive { + color: var(--page-secondary-foreground-color) !important; +} + + +@media screen and (max-width: 999px) { + div.contents .toc { + max-height: 45vh; + float: none; + width: auto; + margin: 0 0 var(--spacing-medium) 0; + position: relative; + top: 0; + position: relative; + border: 1px solid var(--separator-color); + border-radius: var(--border-radius-medium); + background-color: var(--toc-background); + box-shadow: var(--box-shadow); + } + + div.contents .toc.interactive { + max-height: calc(var(--navigation-font-size) + 2 * var(--spacing-large)); + overflow: hidden; + } + + div.contents .toc > h3 { + -webkit-tap-highlight-color: transparent; + cursor: pointer; + position: sticky; + top: 0; + background-color: var(--toc-background); + margin: 0; + padding: var(--spacing-large) 0; + display: block; + } + + div.contents .toc.interactive > h3::before { + content: ""; + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + display: inline-block; + margin-right: var(--spacing-small); + margin-bottom: calc(var(--navigation-font-size) / 4); + transform: rotate(-90deg); + transition: transform 0.25s ease-out; + } + + div.contents .toc.interactive.open > h3::before { + transform: rotate(0deg); + } + + div.contents .toc.interactive.open { + max-height: 45vh; + overflow: auto; + transition: max-height 0.2s ease-in-out; + } + + div.contents .toc a, div.contents .toc a.active { + color: var(--primary-color) !important; + } + + div.contents .toc a:hover { + text-decoration: underline; + } +} + +/* + Code & Fragments + */ + +code, div.fragment, pre.fragment { + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + overflow: hidden; +} + +code { + display: inline; + background: var(--code-background); + color: var(--code-foreground); + padding: 2px 6px; +} + +div.fragment, pre.fragment { + margin: var(--spacing-medium) 0; + padding: calc(var(--spacing-large) - (var(--spacing-large) / 6)) var(--spacing-large); + background: var(--fragment-background); + color: var(--fragment-foreground); + overflow-x: auto; +} + +@media screen and (max-width: 767px) { + div.fragment, pre.fragment { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + } + + .contents > div.fragment, + .textblock > div.fragment, + .textblock > pre.fragment, + .contents > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > div.fragment, + .textblock > .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + border-radius: 0; + border-left: 0; + } + + .textblock li > .fragment, + .textblock li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-large)); + } + + .memdoc li > .fragment, + .memdoc li > .doxygen-awesome-fragment-wrapper > .fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + } + + .textblock ul, .memdoc ul { + overflow: initial; + } + + .memdoc > div.fragment, + .memdoc > pre.fragment, + dl dd > div.fragment, + dl dd pre.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > div.fragment, + .memdoc > .doxygen-awesome-fragment-wrapper > pre.fragment, + dl dd > .doxygen-awesome-fragment-wrapper > div.fragment, + dl dd .doxygen-awesome-fragment-wrapper > pre.fragment { + margin: var(--spacing-medium) calc(0px - var(--spacing-medium)); + border-radius: 0; + border-left: 0; + } +} + +code, code a, pre.fragment, div.fragment, div.fragment .line, div.fragment span, div.fragment .line a, div.fragment .line span { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size) !important; +} + +div.line:after { + margin-right: var(--spacing-medium); +} + +div.fragment .line, pre.fragment { + white-space: pre; + word-wrap: initial; + line-height: var(--fragment-lineheight); +} + +div.fragment span.keyword { + color: var(--fragment-keyword); +} + +div.fragment span.keywordtype { + color: var(--fragment-keywordtype); +} + +div.fragment span.keywordflow { + color: var(--fragment-keywordflow); +} + +div.fragment span.stringliteral { + color: var(--fragment-token) +} + +div.fragment span.comment { + color: var(--fragment-comment); +} + +div.fragment a.code { + color: var(--fragment-link) !important; +} + +div.fragment span.preprocessor { + color: var(--fragment-preprocessor); +} + +div.fragment span.lineno { + display: inline-block; + width: 27px; + border-right: none; + background: var(--fragment-linenumber-background); + color: var(--fragment-linenumber-color); +} + +div.fragment span.lineno a { + background: none; + color: var(--fragment-link) !important; +} + +div.fragment .line:first-child .lineno { + box-shadow: -999999px 0px 0 999999px var(--fragment-linenumber-background), -999998px 0px 0 999999px var(--fragment-linenumber-border); +} + +div.line { + border-radius: var(--border-radius-small); +} + +div.line.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +/* + dl warning, attention, note, deprecated, bug, ... + */ + +dl.bug dt a, dl.deprecated dt a, dl.todo dt a { + font-weight: bold !important; +} + +dl.warning, dl.attention, dl.note, dl.deprecated, dl.bug, dl.invariant, dl.pre, dl.post, dl.todo, dl.remark { + padding: var(--spacing-medium); + margin: var(--spacing-medium) 0; + color: var(--page-background-color); + overflow: hidden; + margin-left: 0; + border-radius: var(--border-radius-small); +} + +dl.section dd { + margin-bottom: 2px; +} + +dl.warning, dl.attention { + background: var(--warning-color); + border-left: 8px solid var(--warning-color-dark); + color: var(--warning-color-darker); +} + +dl.warning dt, dl.attention dt { + color: var(--warning-color-dark); +} + +dl.note, dl.remark { + background: var(--note-color); + border-left: 8px solid var(--note-color-dark); + color: var(--note-color-darker); +} + +dl.note dt, dl.remark dt { + color: var(--note-color-dark); +} + +dl.todo { + background: var(--todo-color); + border-left: 8px solid var(--todo-color-dark); + color: var(--todo-color-darker); +} + +dl.todo dt { + color: var(--todo-color-dark); +} + +dl.bug dt a { + color: var(--todo-color-dark) !important; +} + +dl.bug { + background: var(--bug-color); + border-left: 8px solid var(--bug-color-dark); + color: var(--bug-color-darker); +} + +dl.bug dt a { + color: var(--bug-color-dark) !important; +} + +dl.deprecated { + background: var(--deprecated-color); + border-left: 8px solid var(--deprecated-color-dark); + color: var(--deprecated-color-darker); +} + +dl.deprecated dt a { + color: var(--deprecated-color-dark) !important; +} + +dl.section dd, dl.bug dd, dl.deprecated dd, dl.todo dd { + margin-inline-start: 0px; +} + +dl.invariant, dl.pre, dl.post { + background: var(--invariant-color); + border-left: 8px solid var(--invariant-color-dark); + color: var(--invariant-color-darker); +} + +dl.invariant dt, dl.pre dt, dl.post dt { + color: var(--invariant-color-dark); +} + +/* + memitem + */ + +div.memdoc, div.memproto, h2.memtitle { + box-shadow: none; + background-image: none; + border: none; +} + +div.memdoc { + padding: 0 var(--spacing-medium); + background: var(--page-background-color); +} + +h2.memtitle, div.memitem { + border: 1px solid var(--separator-color); + box-shadow: var(--box-shadow); +} + +h2.memtitle { + box-shadow: 0px var(--spacing-medium) 0 -1px var(--fragment-background), var(--box-shadow); +} + +div.memitem { + transition: none; +} + +div.memproto, h2.memtitle { + background: var(--fragment-background); +} + +h2.memtitle { + font-weight: 500; + font-size: var(--memtitle-font-size); + font-family: var(--font-family-monospace); + border-bottom: none; + border-top-left-radius: var(--border-radius-medium); + border-top-right-radius: var(--border-radius-medium); + word-break: break-all; + position: relative; +} + +h2.memtitle:after { + content: ""; + display: block; + background: var(--fragment-background); + height: var(--spacing-medium); + bottom: calc(0px - var(--spacing-medium)); + left: 0; + right: -14px; + position: absolute; + border-top-right-radius: var(--border-radius-medium); +} + +h2.memtitle > span.permalink { + font-size: inherit; +} + +h2.memtitle > span.permalink > a { + text-decoration: none; + padding-left: 3px; + margin-right: -4px; + user-select: none; + display: inline-block; + margin-top: -6px; +} + +h2.memtitle > span.permalink > a:hover { + color: var(--primary-dark-color) !important; +} + +a:target + h2.memtitle, a:target + h2.memtitle + div.memitem { + border-color: var(--primary-light-color); +} + +div.memitem { + border-top-right-radius: var(--border-radius-medium); + border-bottom-right-radius: var(--border-radius-medium); + border-bottom-left-radius: var(--border-radius-medium); + overflow: hidden; + display: block !important; +} + +div.memdoc { + border-radius: 0; +} + +div.memproto { + border-radius: 0 var(--border-radius-small) 0 0; + overflow: auto; + border-bottom: 1px solid var(--separator-color); + padding: var(--spacing-medium); + margin-bottom: -1px; +} + +div.memtitle { + border-top-right-radius: var(--border-radius-medium); + border-top-left-radius: var(--border-radius-medium); +} + +div.memproto table.memname { + font-family: var(--font-family-monospace); + color: var(--page-foreground-color); + font-size: var(--memname-font-size); + text-shadow: none; +} + +div.memproto div.memtemplate { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--memname-font-size); + margin-left: 2px; + text-shadow: none; +} + +table.mlabels, table.mlabels > tbody { + display: block; +} + +td.mlabels-left { + width: auto; +} + +td.mlabels-right { + margin-top: 3px; + position: sticky; + left: 0; +} + +table.mlabels > tbody > tr:first-child { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.memname, .memitem span.mlabels { + margin: 0 +} + +/* + reflist + */ + +dl.reflist { + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-medium); + border: 1px solid var(--separator-color); + overflow: hidden; + padding: 0; +} + + +dl.reflist dt, dl.reflist dd { + box-shadow: none; + text-shadow: none; + background-image: none; + border: none; + padding: 12px; +} + + +dl.reflist dt { + font-weight: 500; + border-radius: 0; + background: var(--code-background); + border-bottom: 1px solid var(--separator-color); + color: var(--page-foreground-color) +} + + +dl.reflist dd { + background: none; +} + +/* + Table + */ + +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname), +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: inline-block; + max-width: 100%; +} + +.contents > table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname):not(.classindex) { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); +} + +table.fieldtable, +table.markdownTable tbody, +table.doxtable tbody { + border: none; + margin: var(--spacing-medium) 0; + box-shadow: 0 0 0 1px var(--separator-color); + border-radius: var(--border-radius-small); +} + +table.markdownTable, table.doxtable, table.fieldtable { + padding: 1px; +} + +table.doxtable caption { + display: block; +} + +table.fieldtable { + border-collapse: collapse; + width: 100%; +} + +th.markdownTableHeadLeft, +th.markdownTableHeadRight, +th.markdownTableHeadCenter, +th.markdownTableHeadNone, +table.doxtable th { + background: var(--tablehead-background); + color: var(--tablehead-foreground); + font-weight: 600; + font-size: var(--page-font-size); +} + +th.markdownTableHeadLeft:first-child, +th.markdownTableHeadRight:first-child, +th.markdownTableHeadCenter:first-child, +th.markdownTableHeadNone:first-child, +table.doxtable tr th:first-child { + border-top-left-radius: var(--border-radius-small); +} + +th.markdownTableHeadLeft:last-child, +th.markdownTableHeadRight:last-child, +th.markdownTableHeadCenter:last-child, +th.markdownTableHeadNone:last-child, +table.doxtable tr th:last-child { + border-top-right-radius: var(--border-radius-small); +} + +table.markdownTable td, +table.markdownTable th, +table.fieldtable td, +table.fieldtable th, +table.doxtable td, +table.doxtable th { + border: 1px solid var(--separator-color); + padding: var(--spacing-small) var(--spacing-medium); +} + +table.markdownTable td:last-child, +table.markdownTable th:last-child, +table.fieldtable td:last-child, +table.fieldtable th:last-child, +table.doxtable td:last-child, +table.doxtable th:last-child { + border-right: none; +} + +table.markdownTable td:first-child, +table.markdownTable th:first-child, +table.fieldtable td:first-child, +table.fieldtable th:first-child, +table.doxtable td:first-child, +table.doxtable th:first-child { + border-left: none; +} + +table.markdownTable tr:first-child td, +table.markdownTable tr:first-child th, +table.fieldtable tr:first-child td, +table.fieldtable tr:first-child th, +table.doxtable tr:first-child td, +table.doxtable tr:first-child th { + border-top: none; +} + +table.markdownTable tr:last-child td, +table.markdownTable tr:last-child th, +table.fieldtable tr:last-child td, +table.fieldtable tr:last-child th, +table.doxtable tr:last-child td, +table.doxtable tr:last-child th { + border-bottom: none; +} + +table.markdownTable tr, table.doxtable tr { + border-bottom: 1px solid var(--separator-color); +} + +table.markdownTable tr:last-child, table.doxtable tr:last-child { + border-bottom: none; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) { + display: block; +} + +.full_width_table table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody { + display: table; + width: 100%; +} + +table.fieldtable th { + font-size: var(--page-font-size); + font-weight: 600; + background-image: none; + background-color: var(--tablehead-background); + color: var(--tablehead-foreground); +} + +table.fieldtable td.fieldtype, .fieldtable td.fieldname, .fieldtable td.fielddoc, .fieldtable th { + border-bottom: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); +} + +table.fieldtable tr:last-child td:first-child { + border-bottom-left-radius: var(--border-radius-small); +} + +table.fieldtable tr:last-child td:last-child { + border-bottom-right-radius: var(--border-radius-small); +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: var(--primary-light-color); + box-shadow: none; +} + +table.memberdecls { + display: block; + -webkit-tap-highlight-color: transparent; +} + +table.memberdecls tr[class^='memitem'] { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); +} + +table.memberdecls tr[class^='memitem'] .memTemplParams { + font-family: var(--font-family-monospace); + font-size: var(--code-font-size); + color: var(--primary-dark-color); + white-space: normal; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memItemRight, +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight, +table.memberdecls .memTemplParams { + transition: none; + padding-top: var(--spacing-small); + padding-bottom: var(--spacing-small); + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + background-color: var(--fragment-background); +} + +table.memberdecls .memTemplItemLeft, +table.memberdecls .memTemplItemRight { + padding-top: 2px; +} + +table.memberdecls .memTemplParams { + border-bottom: 0; + border-left: 1px solid var(--separator-color); + border-right: 1px solid var(--separator-color); + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + padding-bottom: var(--spacing-small); +} + +table.memberdecls .memTemplItemLeft { + border-radius: 0 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + border-top: 0; +} + +table.memberdecls .memTemplItemRight { + border-radius: 0 0 var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-left: 0; + border-top: 0; +} + +table.memberdecls .memItemLeft { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); + border-left: 1px solid var(--separator-color); + padding-left: var(--spacing-medium); + padding-right: 0; +} + +table.memberdecls .memItemRight { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; + border-right: 1px solid var(--separator-color); + padding-right: var(--spacing-medium); + padding-left: 0; + +} + +table.memberdecls .mdescLeft, table.memberdecls .mdescRight { + background: none; + color: var(--page-foreground-color); + padding: var(--spacing-small) 0; +} + +table.memberdecls .memItemLeft, +table.memberdecls .memTemplItemLeft { + padding-right: var(--spacing-medium); +} + +table.memberdecls .memSeparator { + background: var(--page-background-color); + height: var(--spacing-large); + border: 0; + transition: none; +} + +table.memberdecls .groupheader { + margin-bottom: var(--spacing-large); +} + +table.memberdecls .inherit_header td { + padding: 0 0 var(--spacing-medium) 0; + text-indent: -12px; + color: var(--page-secondary-foreground-color); +} + +table.memberdecls img[src="closed.png"], +table.memberdecls img[src="open.png"], +div.dynheader img[src="open.png"], +div.dynheader img[src="closed.png"] { + width: 0; + height: 0; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 5px solid var(--primary-color); + margin-top: 8px; + display: block; + float: left; + margin-left: -10px; + transition: transform 0.25s ease-out; +} + +table.memberdecls img { + margin-right: 10px; +} + +table.memberdecls img[src="closed.png"], +div.dynheader img[src="closed.png"] { + transform: rotate(-90deg); + +} + +.compoundTemplParams { + font-family: var(--font-family-monospace); + color: var(--primary-dark-color); + font-size: var(--code-font-size); +} + +@media screen and (max-width: 767px) { + + table.memberdecls .memItemLeft, + table.memberdecls .memItemRight, + table.memberdecls .mdescLeft, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemLeft, + table.memberdecls .memTemplItemRight, + table.memberdecls .memTemplParams { + display: block; + text-align: left; + padding-left: var(--spacing-large); + margin: 0 calc(0px - var(--spacing-large)) 0 calc(0px - var(--spacing-large)); + border-right: none; + border-left: none; + border-radius: 0; + white-space: normal; + } + + table.memberdecls .memItemLeft, + table.memberdecls .mdescLeft, + table.memberdecls .memTemplItemLeft { + border-bottom: 0; + padding-bottom: 0; + } + + table.memberdecls .memTemplItemLeft { + padding-top: 0; + } + + table.memberdecls .mdescLeft { + margin-bottom: calc(0px - var(--page-font-size)); + } + + table.memberdecls .memItemRight, + table.memberdecls .mdescRight, + table.memberdecls .memTemplItemRight { + border-top: 0; + padding-top: 0; + padding-right: var(--spacing-large); + overflow-x: auto; + } + + table.memberdecls tr[class^='memitem']:not(.inherit) { + display: block; + width: calc(100vw - 2 * var(--spacing-large)); + } + + table.memberdecls .mdescRight { + color: var(--page-foreground-color); + } + + table.memberdecls tr.inherit { + visibility: hidden; + } + + table.memberdecls tr[style="display: table-row;"] { + display: block !important; + visibility: visible; + width: calc(100vw - 2 * var(--spacing-large)); + animation: fade .5s; + } + + @keyframes fade { + 0% { + opacity: 0; + max-height: 0; + } + + 100% { + opacity: 1; + max-height: 200px; + } + } +} + + +/* + Horizontal Rule + */ + +hr { + margin-top: var(--spacing-large); + margin-bottom: var(--spacing-large); + height: 1px; + background-color: var(--separator-color); + border: 0; +} + +.contents hr { + box-shadow: 100px 0 0 var(--separator-color), + -100px 0 0 var(--separator-color), + 500px 0 0 var(--separator-color), + -500px 0 0 var(--separator-color), + 1500px 0 0 var(--separator-color), + -1500px 0 0 var(--separator-color), + 2000px 0 0 var(--separator-color), + -2000px 0 0 var(--separator-color); +} + +.contents img, .contents .center, .contents center, .contents div.image object { + max-width: 100%; + overflow: auto; +} + +@media screen and (max-width: 767px) { + .contents .dyncontent > .center, .contents > center { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + max-width: calc(100% + 2 * var(--spacing-large)); + } +} + +/* + Directories + */ +div.directory { + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + width: auto; +} + +table.directory { + font-family: var(--font-family); + font-size: var(--page-font-size); + font-weight: normal; + width: 100%; +} + +table.directory td.entry, table.directory td.desc { + padding: calc(var(--spacing-small) / 2) var(--spacing-small); + line-height: var(--table-line-height); +} + +table.directory tr.even td:last-child { + border-radius: 0 var(--border-radius-small) var(--border-radius-small) 0; +} + +table.directory tr.even td:first-child { + border-radius: var(--border-radius-small) 0 0 var(--border-radius-small); +} + +table.directory tr.even:last-child td:last-child { + border-radius: 0 var(--border-radius-small) 0 0; +} + +table.directory tr.even:last-child td:first-child { + border-radius: var(--border-radius-small) 0 0 0; +} + +table.directory td.desc { + min-width: 250px; +} + +table.directory tr.even { + background-color: var(--odd-color); +} + +table.directory tr.odd { + background-color: transparent; +} + +.icona { + width: auto; + height: auto; + margin: 0 var(--spacing-small); +} + +.icon { + background: var(--primary-color); + border-radius: var(--border-radius-small); + font-size: var(--page-font-size); + padding: calc(var(--page-font-size) / 5); + line-height: var(--page-font-size); + transform: scale(0.8); + height: auto; + width: var(--page-font-size); + user-select: none; +} + +.iconfopen, .icondoc, .iconfclosed { + background-position: center; + margin-bottom: 0; + height: var(--table-line-height); +} + +.icondoc { + filter: saturate(0.2); +} + +@media screen and (max-width: 767px) { + div.directory { + margin-left: calc(0px - var(--spacing-large)); + margin-right: calc(0px - var(--spacing-large)); + } +} + +@media (prefers-color-scheme: dark) { + html:not(.light-mode) .iconfopen, html:not(.light-mode) .iconfclosed { + filter: hue-rotate(180deg) invert(); + } +} + +html.dark-mode .iconfopen, html.dark-mode .iconfclosed { + filter: hue-rotate(180deg) invert(); +} + +/* + Class list + */ + +.classindex dl.odd { + background: var(--odd-color); + border-radius: var(--border-radius-small); +} + +.classindex dl.even { + background-color: transparent; +} + +/* + Class Index Doxygen 1.8 +*/ + +table.classindex { + margin-left: 0; + margin-right: 0; + width: 100%; +} + +table.classindex table div.ah { + background-image: none; + background-color: initial; + border-color: var(--separator-color); + color: var(--page-foreground-color); + box-shadow: var(--box-shadow); + border-radius: var(--border-radius-large); + padding: var(--spacing-small); +} + +div.qindex { + background-color: var(--odd-color); + border-radius: var(--border-radius-small); + border: 1px solid var(--separator-color); + padding: var(--spacing-small) 0; +} + +/* + Footer and nav-path + */ + +#nav-path { + width: 100%; +} + +#nav-path ul { + background-image: none; + background: var(--page-background-color); + border: none; + border-top: 1px solid var(--separator-color); + border-bottom: 1px solid var(--separator-color); + border-bottom: 0; + box-shadow: 0 0.75px 0 var(--separator-color); + font-size: var(--navigation-font-size); +} + +img.footer { + width: 60px; +} + +.navpath li.footer { + color: var(--page-secondary-foreground-color); +} + +address.footer { + color: var(--page-secondary-foreground-color); + margin-bottom: var(--spacing-large); +} + +#nav-path li.navelem { + background-image: none; + display: flex; + align-items: center; +} + +.navpath li.navelem a { + text-shadow: none; + display: inline-block; + color: var(--primary-color) !important; +} + +.navpath li.navelem b { + color: var(--primary-dark-color); + font-weight: 500; +} + +li.navelem { + padding: 0; + margin-left: -8px; +} + +li.navelem:first-child { + margin-left: var(--spacing-large); +} + +li.navelem:first-child:before { + display: none; +} + +#nav-path li.navelem:after { + content: ''; + border: 5px solid var(--page-background-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(4.2); + z-index: 10; + margin-left: 6px; +} + +#nav-path li.navelem:before { + content: ''; + border: 5px solid var(--separator-color); + border-bottom-color: transparent; + border-right-color: transparent; + border-top-color: transparent; + transform: translateY(-1px) scaleY(3.2); + margin-right: var(--spacing-small); +} + +.navpath li.navelem a:hover { + color: var(--primary-color); +} + +/* + Scrollbars for Webkit +*/ + +#nav-tree::-webkit-scrollbar, +div.fragment::-webkit-scrollbar, +pre.fragment::-webkit-scrollbar, +div.memproto::-webkit-scrollbar, +.contents center::-webkit-scrollbar, +.contents .center::-webkit-scrollbar, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar, +div.contents .toc::-webkit-scrollbar, +.contents .dotgraph::-webkit-scrollbar, +.contents .tabs-overview-container::-webkit-scrollbar { + background: transparent; + width: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + height: calc(var(--webkit-scrollbar-size) + var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); +} + +#nav-tree::-webkit-scrollbar-thumb, +div.fragment::-webkit-scrollbar-thumb, +pre.fragment::-webkit-scrollbar-thumb, +div.memproto::-webkit-scrollbar-thumb, +.contents center::-webkit-scrollbar-thumb, +.contents .center::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-thumb, +div.contents .toc::-webkit-scrollbar-thumb, +.contents .dotgraph::-webkit-scrollbar-thumb, +.contents .tabs-overview-container::-webkit-scrollbar-thumb { + background-color: transparent; + border: var(--webkit-scrollbar-padding) solid transparent; + border-radius: calc(var(--webkit-scrollbar-padding) + var(--webkit-scrollbar-padding)); + background-clip: padding-box; +} + +#nav-tree:hover::-webkit-scrollbar-thumb, +div.fragment:hover::-webkit-scrollbar-thumb, +pre.fragment:hover::-webkit-scrollbar-thumb, +div.memproto:hover::-webkit-scrollbar-thumb, +.contents center:hover::-webkit-scrollbar-thumb, +.contents .center:hover::-webkit-scrollbar-thumb, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody:hover::-webkit-scrollbar-thumb, +div.contents .toc:hover::-webkit-scrollbar-thumb, +.contents .dotgraph:hover::-webkit-scrollbar-thumb, +.contents .tabs-overview-container:hover::-webkit-scrollbar-thumb { + background-color: var(--webkit-scrollbar-color); +} + +#nav-tree::-webkit-scrollbar-track, +div.fragment::-webkit-scrollbar-track, +pre.fragment::-webkit-scrollbar-track, +div.memproto::-webkit-scrollbar-track, +.contents center::-webkit-scrollbar-track, +.contents .center::-webkit-scrollbar-track, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody::-webkit-scrollbar-track, +div.contents .toc::-webkit-scrollbar-track, +.contents .dotgraph::-webkit-scrollbar-track, +.contents .tabs-overview-container::-webkit-scrollbar-track { + background: transparent; +} + +#nav-tree::-webkit-scrollbar-corner { + background-color: var(--side-nav-background); +} + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc { + overflow-x: auto; + overflow-x: overlay; +} + +#nav-tree { + overflow-x: auto; + overflow-y: auto; + overflow-y: overlay; +} + +/* + Scrollbars for Firefox +*/ + +#nav-tree, +div.fragment, +pre.fragment, +div.memproto, +.contents center, +.contents .center, +.contents table:not(.memberdecls):not(.mlabels):not(.fieldtable):not(.memname) tbody, +div.contents .toc, +.contents .dotgraph, +.contents .tabs-overview-container { + scrollbar-width: thin; +} + +/* + Optional Dark mode toggle button +*/ + +doxygen-awesome-dark-mode-toggle { + display: inline-block; + margin: 0 0 0 var(--spacing-small); + padding: 0; + width: var(--searchbar-height); + height: var(--searchbar-height); + background: none; + border: none; + border-radius: var(--searchbar-height); + vertical-align: middle; + text-align: center; + line-height: var(--searchbar-height); + font-size: 22px; + display: flex; + align-items: center; + justify-content: center; + user-select: none; + cursor: pointer; +} + +doxygen-awesome-dark-mode-toggle > svg { + transition: transform .1s ease-in-out; +} + +doxygen-awesome-dark-mode-toggle:active > svg { + transform: scale(.5); +} + +doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.03); +} + +html.dark-mode doxygen-awesome-dark-mode-toggle:hover { + background-color: rgba(0,0,0,.18); +} + +/* + Optional fragment copy button +*/ +.doxygen-awesome-fragment-wrapper { + position: relative; +} + +doxygen-awesome-fragment-copy-button { + opacity: 0; + background: var(--fragment-background); + width: 28px; + height: 28px; + position: absolute; + right: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + top: calc(var(--spacing-large) - (var(--spacing-large) / 2.5)); + border: 1px solid var(--fragment-foreground); + cursor: pointer; + border-radius: var(--border-radius-small); + display: flex; + justify-content: center; + align-items: center; +} + +.doxygen-awesome-fragment-wrapper:hover doxygen-awesome-fragment-copy-button, doxygen-awesome-fragment-copy-button.success { + opacity: .28; +} + +doxygen-awesome-fragment-copy-button:hover, doxygen-awesome-fragment-copy-button.success { + opacity: 1 !important; +} + +doxygen-awesome-fragment-copy-button:active:not([class~=success]) svg { + transform: scale(.91); +} + +doxygen-awesome-fragment-copy-button svg { + fill: var(--fragment-foreground); + width: 18px; + height: 18px; +} + +doxygen-awesome-fragment-copy-button.success svg { + fill: rgb(14, 168, 14); +} + +doxygen-awesome-fragment-copy-button.success { + border-color: rgb(14, 168, 14); +} + +@media screen and (max-width: 767px) { + .textblock > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .textblock li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc li > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + .memdoc > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button, + dl dd > .doxygen-awesome-fragment-wrapper > doxygen-awesome-fragment-copy-button { + right: 0; + } +} + +/* + Optional paragraph link button +*/ + +a.anchorlink { + font-size: 90%; + margin-left: var(--spacing-small); + color: var(--page-foreground-color) !important; + text-decoration: none; + opacity: .15; + display: none; + transition: opacity .1s ease-in-out, color .1s ease-in-out; +} + +a.anchorlink svg { + fill: var(--page-foreground-color); +} + +h3 a.anchorlink svg, h4 a.anchorlink svg { + margin-bottom: -3px; + margin-top: -4px; +} + +a.anchorlink:hover { + opacity: .45; +} + +h2:hover a.anchorlink, h1:hover a.anchorlink, h3:hover a.anchorlink, h4:hover a.anchorlink { + display: inline-block; +} + +/* + Optional tab feature +*/ + +.tabbed { + margin: var(--spacing-medium) auto; +} + +.tabbed ul { + padding-inline-start: 0px; + margin: 0; + padding: var(--spacing-small) 0; + border-bottom: 1px solid var(--separator-color); +} + +.tabbed li { + display: none; +} + +.tabbed li.selected { + display: block; +} + +.tabs-overview-container { + overflow-x: auto; + display: block; + overflow-y: visible; +} + +.tabs-overview { + border-bottom: 1px solid var(--separator-color); + display: flex; + flex-direction: row; +} + +.tabs-overview button.tab-button { + color: var(--page-foreground-color); + margin: 0; + border: none; + background: transparent; + padding: var(--spacing-small) 0; + display: inline-block; + font-size: var(--page-font-size); + cursor: pointer; + box-shadow: 0 1px 0 0 var(--separator-color); + position: relative; +} + +.tabs-overview button.tab-button .tab-title { + float: left; + white-space: nowrap; + padding: var(--spacing-small) var(--spacing-large); + border-radius: var(--border-radius-medium); +} + +.tabs-overview button.tab-button:not(:last-child) .tab-title { + box-shadow: 8px 0 0 -7px var(--separator-color); +} + +.tabs-overview button.tab-button:hover .tab-title { + background: var(--separator-color); + box-shadow: none; +} + +.tabs-overview button.tab-button.active { + color: var(--primary-color); +} + +.tabs-overview button.tab-button.active::after { + content: ''; + display: block; + position: absolute; + left: 0px; + bottom: 0; + right: 0px; + height: 3px; + border-radius: var(--border-radius-small) var(--border-radius-small) 0 0; + background-color: var(--primary-color); +} diff --git a/reference/doxygen.css b/reference/doxygen.css new file mode 100644 index 00000000..71f3b795 --- /dev/null +++ b/reference/doxygen.css @@ -0,0 +1,1649 @@ +/* The standard CSS for doxygen 1.9.5*/ + +body { + background-color: white; + color: black; + scrollbar-color: #9CAFD4 #F9FAFC; +} + +::-webkit-scrollbar { + background-color: #F9FAFC; + height: 10px; + width: 10px; +} +::-webkit-scrollbar-thumb { + background-color: #9CAFD4; + border-radius: 8px; +} +::-webkit-scrollbar-corner { + background-color: #F9FAFC; +} + +body, table, div, p, dl { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 22px; +} + +/* @group Heading Levels */ + +.title { + font-weight: 400; + font-size: 14px; + font-family: Roboto,sans-serif; + line-height: 28px; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h1.groupheader { + font-size: 150%; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +th p.starttd, th p.intertd, th p.endtd { + font-size: 100%; + font-weight: 700; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +p.interli { +} + +p.interdd { +} + +p.intertd { +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.navtab { + padding-right: 15px; + text-align: right; + line-height: 110%; +} + +div.navtab table { + border-spacing: 0; +} + +td.navtab { + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + padding-right: 6px; + padding-left: 6px; +} + +td.navtabHL a, td.navtabHL a:visited { + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +a.navtab { + font-weight: bold; +} + +div.qindex{ + text-align: center; + width: 100%; + line-height: 140%; + font-size: 130%; + color: #A0A0A0; +} + +dt.alphachar{ + font-size: 180%; + font-weight: bold; +} + +.alphachar a{ + color: black; +} + +.alphachar a:hover, .alphachar a:visited{ + text-decoration: none; +} + +.classindex dl { + padding: 25px; + column-count:1 +} + +.classindex dd { + display:inline-block; + margin-left: 50px; + width: 90%; + line-height: 1.15em; +} + +.classindex dl.even { + background-color: white; +} + +.classindex dl.odd { + background-color: #F8F9FC; +} + +@media(min-width: 1120px) { + .classindex dl { + column-count:2 + } +} + +@media(min-width: 1320px) { + .classindex dl { + column-count:3 + } +} + + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +a.code.hl_class { /* style for links to class names in code snippets */ } +a.code.hl_struct { /* style for links to struct names in code snippets */ } +a.code.hl_union { /* style for links to union names in code snippets */ } +a.code.hl_interface { /* style for links to interface names in code snippets */ } +a.code.hl_protocol { /* style for links to protocol names in code snippets */ } +a.code.hl_category { /* style for links to category names in code snippets */ } +a.code.hl_exception { /* style for links to exception names in code snippets */ } +a.code.hl_service { /* style for links to service names in code snippets */ } +a.code.hl_singleton { /* style for links to singleton names in code snippets */ } +a.code.hl_concept { /* style for links to concept names in code snippets */ } +a.code.hl_namespace { /* style for links to namespace names in code snippets */ } +a.code.hl_package { /* style for links to package names in code snippets */ } +a.code.hl_define { /* style for links to macro names in code snippets */ } +a.code.hl_function { /* style for links to function names in code snippets */ } +a.code.hl_variable { /* style for links to variable names in code snippets */ } +a.code.hl_typedef { /* style for links to typedef names in code snippets */ } +a.code.hl_enumvalue { /* style for links to enum value names in code snippets */ } +a.code.hl_enumeration { /* style for links to enumeration names in code snippets */ } +a.code.hl_signal { /* style for links to Qt signal names in code snippets */ } +a.code.hl_slot { /* style for links to Qt slot names in code snippets */ } +a.code.hl_friend { /* style for links to friend names in code snippets */ } +a.code.hl_dcop { /* style for links to KDE3 DCOP names in code snippets */ } +a.code.hl_property { /* style for links to property names in code snippets */ } +a.code.hl_event { /* style for links to event names in code snippets */ } +a.code.hl_sequence { /* style for links to sequence names in code snippets */ } +a.code.hl_dictionary { /* style for links to dictionary names in code snippets */ } + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +ul { + overflow: visible; +} + +#side-nav ul { + overflow: visible; /* reset ul rule for scroll bar in GENERATE_TREEVIEW window */ +} + +#main-nav ul { + overflow: visible; /* reset ul rule for the navigation bar drop down lists */ +} + +.fragment { + text-align: left; + direction: ltr; + overflow-x: auto; /*Fixed: fragment lines overlap floating elements*/ + overflow-y: hidden; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + color: black; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace,fixed; + font-size: 105%; +} + +div.fragment { + padding: 0 0 1px 0; /*Fixed: last line underline overlap border*/ + margin: 4px 8px 4px 2px; + color: black; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace,fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line:after { + content:"\000A"; + white-space: pre; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + margin-right: 9px; + text-align: right; + border-right: 2px solid #00FF00; + color: black; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a, span.lineno a:visited { + color: #4665A2; + background-color: #D8D8D8; +} + +span.lineno a:hover { + color: #4665A2; + background-color: #C8C8C8; +} + +.lineno { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +div.classindex ul { + list-style: none; + padding-left: 0; +} + +div.classindex span.ai { + display: inline-block; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +p.formulaDsp { + text-align: center; +} + +img.dark-mode-visible { + display: none; +} +img.light-mode-visible { + display: none; +} + +img.formulaDsp { + +} + +img.formulaInl, img.inline { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; + width: 104px; +} + +.compoundTemplParams { + color: #4665A2; + font-size: 80%; + line-height: 120%; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000; +} + +span.keywordtype { + color: #604020; +} + +span.keywordflow { + color: #E08000; +} + +span.comment { + color: #800000; +} + +span.preprocessor { + color: #806020; +} + +span.stringliteral { + color: #002080; +} + +span.charliteral { + color: #008080; +} + +span.vhdldigit { + color: #FF00FF; +} + +span.vhdlchar { + color: #000000; +} + +span.vhdlkeyword { + color: #700070; +} + +span.vhdllogic { + color: #FF0000; +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #2D4068; +} + +th.dirtab { + background-color: #374F7F; + color: #FFFFFF; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight, .memTemplItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtitle { + padding: 8px; + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + border-top-right-radius: 4px; + border-top-left-radius: 4px; + margin-bottom: -1px; + background-image: url('nav_f.png'); + background-repeat: repeat-x; + background-color: #E2E8F2; + line-height: 1.25; + font-weight: 300; + float:left; +} + +.permalink +{ + font-size: 65%; + display: inline-block; + vertical-align: middle; +} + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: 400; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-color: #DFE5F1; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; +} + +.overload { + font-family: monospace,fixed; + font-size: 65%; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: white; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname, .tparams .paramname, .exception .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype, .tparams .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir, .tparams .paramdir { + font-family: monospace,fixed; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view inside a (index) page */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #9CAFD4; + border-bottom: 1px solid #9CAFD4; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.odd { + padding-left: 6px; + background-color: #F8F9FC; +} + +.directory tr.even { + padding-left: 6px; + background-color: white; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +.arrow { + color: #9CAFD4; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + font-size: 80%; + display: inline-block; + width: 16px; + height: 22px; +} + +.icon { + font-family: Arial,Helvetica; + line-height: normal; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #728DC1; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; +} + +.icona { + width: 24px; + height: 22px; + display: inline-block; +} + +.iconfopen { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderopen.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.iconfclosed { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('folderclosed.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +.icondoc { + width: 24px; + height: 18px; + margin-bottom: 4px; + background-image:url('doc.png'); + background-position: 0px -4px; + background-repeat: repeat-y; + vertical-align:top; + display: inline-block; +} + +/* @end */ + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable caption { + caption-side: top; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + border-radius: 4px; + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image: url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + font-weight: 400; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image: url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#283A5D; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color: #2A3D61; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +table.classindex +{ + margin: 10px; + white-space: nowrap; + margin-left: 3%; + margin-right: 3%; + width: 94%; + border: 0; + border-spacing: 0; + padding: 0; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image: url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +.PageDocRTL-title div.headertitle { + text-align: right; + direction: rtl; +} + +dl { + padding: 0 0 0 0; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug, dl.examples */ +dl.section { + margin-left: 0px; + padding-left: 0px; +} + +dl.note { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00D000; +} + +dl.deprecated { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #505050; +} + +dl.todo { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #00C0E0; +} + +dl.test { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #3030E0; +} + +dl.bug { + margin-left: -7px; + padding-left: 3px; + border-left: 4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectrow +{ + height: 56px; +} + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectalign +{ + vertical-align: middle; + padding-left: 0.5em; +} + +#projectname +{ + font-size: 200%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font-size: 90%; + font-family: Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font-size: 50%; + font-family: 50% Tahoma,Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; + background-color: white; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.plantumlgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; + text-align:right; + width:52px; +} + +dl.citelist dd { + margin:2px 0 2px 72px; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 8px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Verdana,'DejaVu Sans',Geneva,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +span.emoji { + /* font family used at the site: https://unicode.org/emoji/charts/full-emoji-list.html + * font-family: "Noto Color Emoji", "Apple Color Emoji", "Segoe UI Emoji", Times, Symbola, Aegyptus, Code2000, Code2001, Code2002, Musica, serif, LastResort; + */ +} + +span.obfuscator { + display: none; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + /*white-space: nowrap;*/ + color: black; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip a { + color: #4665A2; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font-size: 12px; + font-family: Roboto,sans-serif; + line-height: 16px; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: white; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before, #powerTip.ne:before, #powerTip.nw:before { + border-top-color: gray; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: white; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: gray; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: gray; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: gray; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +/* @group Markdown */ + +table.markdownTable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.markdownTable td, table.markdownTable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.markdownTable tr { +} + +th.markdownTableHeadLeft, th.markdownTableHeadRight, th.markdownTableHeadCenter, th.markdownTableHeadNone { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +th.markdownTableHeadLeft, td.markdownTableBodyLeft { + text-align: left +} + +th.markdownTableHeadRight, td.markdownTableBodyRight { + text-align: right +} + +th.markdownTableHeadCenter, td.markdownTableBodyCenter { + text-align: center +} + +tt, code, kbd, samp +{ + display: inline-block; +} +/* @end */ + +u { + text-decoration: underline; +} + diff --git a/reference/doxygen.svg b/reference/doxygen.svg new file mode 100644 index 00000000..d42dad52 --- /dev/null +++ b/reference/doxygen.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/reference/dynsections.js b/reference/dynsections.js new file mode 100644 index 00000000..f579fbf3 --- /dev/null +++ b/reference/dynsections.js @@ -0,0 +1,123 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); + $('table.directory tr'). + removeClass('odd').filter(':visible:odd').addClass('odd'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Albert: albert/include/albert/extension.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
extension.h File Reference
+
+
+
#include "albert/export.h"
+#include <QString>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::Extension
 Interface for objects of the extension system. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/extension_8h.js b/reference/extension_8h.js new file mode 100644 index 00000000..7b6bde27 --- /dev/null +++ b/reference/extension_8h.js @@ -0,0 +1,4 @@ +var extension_8h = +[ + [ "albert::Extension", "classalbert_1_1Extension.html", "classalbert_1_1Extension" ] +]; \ No newline at end of file diff --git a/reference/extension_8h_source.html b/reference/extension_8h_source.html new file mode 100644 index 00000000..b7abc15b --- /dev/null +++ b/reference/extension_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + +Albert: albert/include/albert/extension.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
extension.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include <QString>
+
6
+
7namespace albert
+
8{
+
9
+
11class ALBERT_EXPORT Extension
+
12{
+
13public:
+
14 virtual ~Extension() = default;
+
15 virtual QString id() const = 0;
+
16 virtual QString name() const = 0;
+
17 virtual QString description() const = 0;
+
18
+
19};
+
20
+
21}
+
22
+
Interface for objects of the extension system.
Definition: extension.h:12
+
virtual ~Extension()=default
+
virtual QString name() const =0
Pretty, human readable name.
+
virtual QString description() const =0
Brief description of what this extension provides.
+
virtual QString id() const =0
The guid of the extension.
+
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/extensionregistry_8h.html b/reference/extensionregistry_8h.html new file mode 100644 index 00000000..573b9c85 --- /dev/null +++ b/reference/extensionregistry_8h.html @@ -0,0 +1,129 @@ + + + + + + + +Albert: albert/include/albert/extensionregistry.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
extensionregistry.h File Reference
+
+
+
#include "albert/export.h"
+#include "albert/extension.h"
+#include <QObject>
+#include <map>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::ExtensionRegistry
 The common extension registry. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/extensionregistry_8h.js b/reference/extensionregistry_8h.js new file mode 100644 index 00000000..9d7cf996 --- /dev/null +++ b/reference/extensionregistry_8h.js @@ -0,0 +1,4 @@ +var extensionregistry_8h = +[ + [ "albert::ExtensionRegistry", "classalbert_1_1ExtensionRegistry.html", "classalbert_1_1ExtensionRegistry" ] +]; \ No newline at end of file diff --git a/reference/extensionregistry_8h_source.html b/reference/extensionregistry_8h_source.html new file mode 100644 index 00000000..02e08f3f --- /dev/null +++ b/reference/extensionregistry_8h_source.html @@ -0,0 +1,165 @@ + + + + + + + +Albert: albert/include/albert/extensionregistry.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
extensionregistry.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include "albert/extension.h"
+
6#include <QObject>
+
7#include <map>
+
8
+
9namespace albert
+
10{
+
13class ALBERT_EXPORT ExtensionRegistry : public QObject
+
14{
+
15 Q_OBJECT
+
16public:
+
17 void add(Extension *e);
+
18 void remove(Extension *e);
+
19
+
21 const std::map<QString,Extension*> &extensions();
+
22
+
24 template<typename T> std::map<QString, T*> extensions()
+
25 {
+
26 std::map<QString, T*> results;
+
27 for (auto &[id, extension] : extensions_)
+
28 if (T *t = dynamic_cast<T*>(extension))
+
29 results.emplace(id, t);
+
30 return results;
+
31 }
+
32
+
34 template<typename T> T* extension(const QString &id)
+
35 {
+
36 try {
+
37 return dynamic_cast<T*>(extensions_.at(id));
+
38 } catch (const std::out_of_range &) {
+
39 return nullptr;
+
40 }
+
41 }
+
42
+
43signals:
+ +
46
+ +
49
+
50private:
+
51 std::map<QString,Extension*> extensions_;
+
52};
+
53}
+
The common extension registry.
Definition: extensionregistry.h:14
+
void add(Extension *e)
Add extension to the registry.
+
void removed(Extension *)
Emitted when an extension has been deregistered.
+
void added(Extension *)
Emitted when an extension has been registered.
+
T * extension(const QString &id)
Get extension by id implicitly dynamic_cast'ed to type T.
Definition: extensionregistry.h:34
+
const std::map< QString, Extension * > & extensions()
Get map of all registered extensions.
+
std::map< QString, T * > extensions()
Get map of all extensions of type T.
Definition: extensionregistry.h:24
+
void remove(Extension *e)
Remove extension from the registry.
+
Interface for objects of the extension system.
Definition: extension.h:12
+ +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/extensionwatcher_8h.html b/reference/extensionwatcher_8h.html new file mode 100644 index 00000000..cccbe8fe --- /dev/null +++ b/reference/extensionwatcher_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: albert/include/albert/extensionwatcher.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
extensionwatcher.h File Reference
+
+
+
#include "albert/export.h"
+#include "albert/extensionregistry.h"
+#include <QObject>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::ExtensionWatcher< T >
 Non-QObject extension registry observer. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/extensionwatcher_8h.js b/reference/extensionwatcher_8h.js new file mode 100644 index 00000000..73823abe --- /dev/null +++ b/reference/extensionwatcher_8h.js @@ -0,0 +1,4 @@ +var extensionwatcher_8h = +[ + [ "albert::ExtensionWatcher< T >", "classalbert_1_1ExtensionWatcher.html", "classalbert_1_1ExtensionWatcher" ] +]; \ No newline at end of file diff --git a/reference/extensionwatcher_8h_source.html b/reference/extensionwatcher_8h_source.html new file mode 100644 index 00000000..217bef9c --- /dev/null +++ b/reference/extensionwatcher_8h_source.html @@ -0,0 +1,165 @@ + + + + + + + +Albert: albert/include/albert/extensionwatcher.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
extensionwatcher.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+ +
6#include <QObject>
+
7
+
8namespace albert
+
9{
+
10
+
17template<class T> class ALBERT_EXPORT ExtensionWatcher
+
18{
+
19public:
+
22 explicit ExtensionWatcher(ExtensionRegistry *registry = nullptr)
+
23 {
+
24 if (registry)
+
25 setExtensionRegistry(registry);
+
26 }
+
27
+ +
29 {
+
30 QObject::disconnect(conn_add);
+
31 QObject::disconnect(conn_rem);
+
32 }
+
33
+ +
37 {
+
38 QObject::disconnect(conn_add);
+
39 conn_add = QObject::connect(registry, &ExtensionRegistry::added,
+
40 [this](Extension *e){ if (T *t = dynamic_cast<T*>(e)) onAdd(t); });
+
41
+
42 QObject::disconnect(conn_rem);
+
43 conn_rem = QObject::connect(registry, &ExtensionRegistry::removed,
+
44 [this](Extension *e){ if (T *t = dynamic_cast<T*>(e)) onRem(t); });
+
45 }
+
46
+
47protected:
+
48
+
50 virtual void onAdd(T *) {}
+
51
+
53 virtual void onRem(T *) {}
+
54
+
55private:
+
56 QMetaObject::Connection conn_add;
+
57 QMetaObject::Connection conn_rem;
+
58};
+
59}
+
The common extension registry.
Definition: extensionregistry.h:14
+
Non-QObject extension registry observer.
Definition: extensionwatcher.h:18
+
ExtensionWatcher(ExtensionRegistry *registry=nullptr)
ExtensionWatcher constructor.
Definition: extensionwatcher.h:22
+
void setExtensionRegistry(ExtensionRegistry *registry)
Sets the extension registry to track.
Definition: extensionwatcher.h:36
+
virtual ~ExtensionWatcher()
Definition: extensionwatcher.h:28
+
virtual void onRem(T *)
Called when an extension has been deregistered.
Definition: extensionwatcher.h:53
+
virtual void onAdd(T *)
Called when an extension has been registered.
Definition: extensionwatcher.h:50
+
Interface for objects of the extension system.
Definition: extension.h:12
+ +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/fallbackprovider_8h.html b/reference/fallbackprovider_8h.html new file mode 100644 index 00000000..24505279 --- /dev/null +++ b/reference/fallbackprovider_8h.html @@ -0,0 +1,129 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/fallbackprovider.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
fallbackprovider.h File Reference
+
+
+
#include "albert/extension.h"
+#include <QString>
+#include <memory>
+#include <vector>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::FallbackHandler
 Fallback providing extension. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/fallbackprovider_8h.js b/reference/fallbackprovider_8h.js new file mode 100644 index 00000000..d6ed04a4 --- /dev/null +++ b/reference/fallbackprovider_8h.js @@ -0,0 +1,4 @@ +var fallbackprovider_8h = +[ + [ "albert::FallbackHandler", "classalbert_1_1FallbackHandler.html", "classalbert_1_1FallbackHandler" ] +]; \ No newline at end of file diff --git a/reference/fallbackprovider_8h_source.html b/reference/fallbackprovider_8h_source.html new file mode 100644 index 00000000..86508cae --- /dev/null +++ b/reference/fallbackprovider_8h_source.html @@ -0,0 +1,132 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/fallbackprovider.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
fallbackprovider.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/extension.h"
+
5#include <QString>
+
6#include <memory>
+
7#include <vector>
+
8
+
9namespace albert
+
10{
+
11class Item;
+
12
+
16class ALBERT_EXPORT FallbackHandler : virtual public Extension
+
17{
+
18public:
+
20 virtual std::vector<std::shared_ptr<Item>> fallbacks(const QString &) const = 0;
+
21};
+
22
+
23}
+
Interface for objects of the extension system.
Definition: extension.h:12
+
Fallback providing extension.
Definition: fallbackprovider.h:17
+
virtual std::vector< std::shared_ptr< Item > > fallbacks(const QString &) const =0
Fallbacks provided by this handler.
+ +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/files.html b/reference/files.html new file mode 100644 index 00000000..8ac8a448 --- /dev/null +++ b/reference/files.html @@ -0,0 +1,145 @@ + + + + + + + +Albert: File List + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
File List
+
+ +
+ + + + diff --git a/reference/files_dup.js b/reference/files_dup.js new file mode 100644 index 00000000..5212adb3 --- /dev/null +++ b/reference/files_dup.js @@ -0,0 +1,4 @@ +var files_dup = +[ + [ "albert", "dir_7effa596cb3093c53c23713aca210c2c.html", "dir_7effa596cb3093c53c23713aca210c2c" ] +]; \ No newline at end of file diff --git a/reference/folderclosed.png b/reference/folderclosed.png new file mode 100644 index 00000000..bb8ab35e Binary files /dev/null and b/reference/folderclosed.png differ diff --git a/reference/folderopen.png b/reference/folderopen.png new file mode 100644 index 00000000..d6c7f676 Binary files /dev/null and b/reference/folderopen.png differ diff --git a/reference/frontend_8h.html b/reference/frontend_8h.html new file mode 100644 index 00000000..e6d88fb0 --- /dev/null +++ b/reference/frontend_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/frontend.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
frontend.h File Reference
+
+
+
#include "albert/extension.h"
+#include <QString>
+#include <memory>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::Frontend
 The interface for albert frontends. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/frontend_8h.js b/reference/frontend_8h.js new file mode 100644 index 00000000..28222660 --- /dev/null +++ b/reference/frontend_8h.js @@ -0,0 +1,4 @@ +var frontend_8h = +[ + [ "albert::Frontend", "classalbert_1_1Frontend.html", "classalbert_1_1Frontend" ] +]; \ No newline at end of file diff --git a/reference/frontend_8h_source.html b/reference/frontend_8h_source.html new file mode 100644 index 00000000..37f0b5aa --- /dev/null +++ b/reference/frontend_8h_source.html @@ -0,0 +1,157 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/frontend.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
frontend.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/extension.h"
+
5#include <QString>
+
6#include <memory>
+
7class QWidget;
+
8class QueryEngine;
+
9class App;
+
10
+
11namespace albert
+
12{
+
13class Query;
+
14
+
16class ALBERT_EXPORT Frontend : virtual public albert::Extension
+
17{
+
18public:
+
20 virtual bool isVisible() const = 0;
+
21
+
23 virtual void setVisible(bool visible) = 0;
+
24
+
26 virtual QString input() const = 0;
+
27
+
29 virtual void setInput(const QString&) = 0;
+
30
+
32 virtual unsigned long long winId() const = 0;
+
33
+
35 virtual QWidget *createFrontendConfigWidget() = 0;
+
36
+
39 std::shared_ptr<Query> query(const QString &query) const;
+
40
+
41private:
+
42 void setEngine(QueryEngine*);
+
43 QueryEngine *query_engine;
+
44 friend class ::App;
+
45};
+
46
+
47}
+
Interface for objects of the extension system.
Definition: extension.h:12
+
The interface for albert frontends.
Definition: frontend.h:17
+
virtual void setInput(const QString &)=0
Input line text setter.
+
virtual void setVisible(bool visible)=0
Set the visibility state of the frontend.
+
virtual QString input() const =0
Input line text.
+
virtual unsigned long long winId() const =0
The native window id. Used to apply platform quirks.
+
std::shared_ptr< Query > query(const QString &query) const
The query object factory.
+
virtual QWidget * createFrontendConfigWidget()=0
The config widget show in the window settings tab.
+
virtual bool isVisible() const =0
Visibility of the frontend.
+ +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/functions.html b/reference/functions.html new file mode 100644 index 00000000..3ea12de5 --- /dev/null +++ b/reference/functions.html @@ -0,0 +1,332 @@ + + + + + + + +Albert: Class Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all class members with links to the classes they belong to:
+ +

- : -

+ + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+ + +

- w -

+ + +

- ~ -

+
+
+ + + + diff --git a/reference/functions_func.html b/reference/functions_func.html new file mode 100644 index 00000000..bba69bd4 --- /dev/null +++ b/reference/functions_func.html @@ -0,0 +1,296 @@ + + + + + + + +Albert: Class Members - Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+  + +

- a -

+ + +

- b -

+ + +

- c -

+ + +

- d -

+ + +

- e -

+ + +

- f -

+ + +

- g -

+ + +

- h -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- o -

+ + +

- p -

+ + +

- q -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- w -

+ + +

- ~ -

+
+
+ + + + diff --git a/reference/functions_rela.html b/reference/functions_rela.html new file mode 100644 index 00000000..19a41b9d --- /dev/null +++ b/reference/functions_rela.html @@ -0,0 +1,109 @@ + + + + + + + +Albert: Class Members - Related Functions + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ + + + diff --git a/reference/functions_vars.html b/reference/functions_vars.html new file mode 100644 index 00000000..aa3e4a5f --- /dev/null +++ b/reference/functions_vars.html @@ -0,0 +1,190 @@ + + + + + + + +Albert: Class Members - Variables + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+  + +

- a -

+ + +

- b -

+ + +

- d -

+ + +

- f -

+ + +

- i -

+ + +

- l -

+ + +

- m -

+ + +

- n -

+ + +

- p -

+ + +

- r -

+ + +

- s -

+ + +

- t -

+ + +

- u -

+ + +

- v -

+
+
+ + + + diff --git a/reference/globalqueryhandler_8h.html b/reference/globalqueryhandler_8h.html new file mode 100644 index 00000000..4570b7de --- /dev/null +++ b/reference/globalqueryhandler_8h.html @@ -0,0 +1,131 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/globalqueryhandler.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
globalqueryhandler.h File Reference
+
+
+ +

Go to the source code of this file.

+ + + + + + + + +

+Classes

class  albert::GlobalQueryHandler
 Global search query handler class. More...
 
class  albert::GlobalQueryHandler::GlobalQuery
 The query interface used by GlobalQueryHandler. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/globalqueryhandler_8h.js b/reference/globalqueryhandler_8h.js new file mode 100644 index 00000000..a043481c --- /dev/null +++ b/reference/globalqueryhandler_8h.js @@ -0,0 +1,5 @@ +var globalqueryhandler_8h = +[ + [ "albert::GlobalQueryHandler", "classalbert_1_1GlobalQueryHandler.html", "classalbert_1_1GlobalQueryHandler" ], + [ "albert::GlobalQueryHandler::GlobalQuery", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery" ] +]; \ No newline at end of file diff --git a/reference/globalqueryhandler_8h_source.html b/reference/globalqueryhandler_8h_source.html new file mode 100644 index 00000000..fb596f86 --- /dev/null +++ b/reference/globalqueryhandler_8h_source.html @@ -0,0 +1,161 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/globalqueryhandler.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
globalqueryhandler.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+ + +
6#include <vector>
+
7class GlobalQueryHandlerPrivate;
+
8
+
9namespace albert
+
10{
+
11
+ +
18{
+
19public:
+ + +
22
+ +
25 {
+
26 public:
+
27 virtual ~GlobalQuery() = default;
+
28
+
30 virtual QString string() const = 0;
+
31
+
34 virtual const bool &isValid() const = 0;
+
35 };
+
36
+
43 virtual std::vector<RankItem> handleGlobalQuery(const GlobalQuery*) const = 0;
+
44
+
47 void applyUsageScore(std::vector<RankItem>*) const;
+
48
+
53 void handleTriggerQuery(TriggerQuery*) const override;
+
54
+
55private:
+
56 std::unique_ptr<GlobalQueryHandlerPrivate> d;
+
57};
+
58
+
59}
+
The query interface used by GlobalQueryHandler.
Definition: globalqueryhandler.h:25
+
virtual const bool & isValid() const =0
True if query has not been cancelled.
+
virtual QString string() const =0
The query string excluding the trigger.
+ +
Global search query handler class.
Definition: globalqueryhandler.h:18
+
void handleTriggerQuery(TriggerQuery *) const override
Implements handleTriggerQuery(…).
+ +
virtual std::vector< RankItem > handleGlobalQuery(const GlobalQuery *) const =0
The query processing function.
+
void applyUsageScore(std::vector< RankItem > *) const
Takes rank items and modifies the score according to the users usage.
+ +
The query interface used by TriggerQueryHandler.
Definition: triggerqueryhandler.h:51
+
Triggered query handler class.
Definition: triggerqueryhandler.h:20
+
Definition: albert.h:12
+ + +
+
+ + + + diff --git a/reference/globals.html b/reference/globals.html new file mode 100644 index 00000000..f6c0a70b --- /dev/null +++ b/reference/globals.html @@ -0,0 +1,124 @@ + + + + + + + +Albert: File Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Here is a list of all file members with links to the files they belong to:
+
+
+ + + + diff --git a/reference/globals_defs.html b/reference/globals_defs.html new file mode 100644 index 00000000..99e6ccd7 --- /dev/null +++ b/reference/globals_defs.html @@ -0,0 +1,120 @@ + + + + + + + +Albert: File Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ + + + diff --git a/reference/globals_vars.html b/reference/globals_vars.html new file mode 100644 index 00000000..ce642aa8 --- /dev/null +++ b/reference/globals_vars.html @@ -0,0 +1,110 @@ + + + + + + + +Albert: File Members + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
+
+ + + + diff --git a/reference/hierarchy.html b/reference/hierarchy.html new file mode 100644 index 00000000..ceb31690 --- /dev/null +++ b/reference/hierarchy.html @@ -0,0 +1,143 @@ + + + + + + + +Albert: Class Hierarchy + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Calbert::ActionAction used by items
 Calbert::BackgroundExecutor< T >Provides a lean interface for recurring indexing tasks
 Calbert::ExtensionInterface for objects of the extension system
 Calbert::FallbackHandlerFallback providing extension
 Calbert::FrontendThe interface for albert frontends
 Calbert::PluginProviderInterface class for a plugin providing extension
 Calbert::TriggerQueryHandlerTriggered query handler class
 Calbert::GlobalQueryHandlerGlobal search query handler class
 Calbert::IndexQueryHandlerIndex query handler class
 CEXTENSION
 Calbert::ExtensionPluginInstance< EXTENSION >Convenience template class for the most common case of a plugin providing exactly one extension
 Calbert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >Convenience class for native plugins
 Calbert::ExtensionWatcher< T >Non-QObject extension registry observer
 Calbert::GlobalQueryHandler::GlobalQueryThe query interface used by GlobalQueryHandler
 Calbert::IconProviderGeneric pixmap provider
 Calbert::IndexItemThe eligible for the internal index of IndexQueryHandler
 Calbert::ItemItems displayed in the query results list
 Calbert::StandardItemGeneral purpose value type Item implememtation
 Calbert::NotificationA system tray notification
 Calbert::PluginInstanceAbstract plugin instance class
 Calbert::ExtensionPluginInstance< EXTENSION >Convenience template class for the most common case of a plugin providing exactly one extension
 Calbert::plugin::Plugin< QOBJECT >Convenience class for native plugins
 Calbert::PluginMetaDataCommon plugin metadata of all plugins
 CQObject
 Calbert::ExtensionRegistryThe common extension registry
 Calbert::InputHistoryInput history class
 Calbert::PluginLoaderAbstract plugin loader class used by the plugin registry
 Calbert::QueryInterface class for queries used by frontends
 Calbert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >Convenience class for native plugins
 Calbert::plugin::Plugin< QOBJECT >Convenience class for native plugins
 Calbert::RankItemScored item Used to rank item results of mutliple handlers
 Calbert::TriggerQueryHandler::TriggerQueryThe query interface used by TriggerQueryHandler
+
+
+
+ + + + diff --git a/reference/hierarchy.js b/reference/hierarchy.js new file mode 100644 index 00000000..b0bf400f --- /dev/null +++ b/reference/hierarchy.js @@ -0,0 +1,43 @@ +var hierarchy = +[ + [ "albert::Action", "classalbert_1_1Action.html", null ], + [ "albert::BackgroundExecutor< T >", "classalbert_1_1BackgroundExecutor.html", null ], + [ "albert::Extension", "classalbert_1_1Extension.html", [ + [ "albert::FallbackHandler", "classalbert_1_1FallbackHandler.html", null ], + [ "albert::Frontend", "classalbert_1_1Frontend.html", null ], + [ "albert::PluginProvider", "classalbert_1_1PluginProvider.html", null ], + [ "albert::TriggerQueryHandler", "classalbert_1_1TriggerQueryHandler.html", [ + [ "albert::GlobalQueryHandler", "classalbert_1_1GlobalQueryHandler.html", [ + [ "albert::IndexQueryHandler", "classalbert_1_1IndexQueryHandler.html", null ] + ] ] + ] ] + ] ], + [ "EXTENSION", null, [ + [ "albert::ExtensionPluginInstance< EXTENSION >", "classalbert_1_1ExtensionPluginInstance.html", [ + [ "albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >", "classalbert_1_1plugin_1_1ExtensionPlugin.html", null ] + ] ] + ] ], + [ "albert::ExtensionWatcher< T >", "classalbert_1_1ExtensionWatcher.html", null ], + [ "albert::GlobalQueryHandler::GlobalQuery", "classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html", null ], + [ "albert::IconProvider", "classalbert_1_1IconProvider.html", null ], + [ "albert::IndexItem", "classalbert_1_1IndexItem.html", null ], + [ "albert::Item", "classalbert_1_1Item.html", [ + [ "albert::StandardItem", "classalbert_1_1StandardItem.html", null ] + ] ], + [ "albert::Notification", "classalbert_1_1Notification.html", null ], + [ "albert::PluginInstance", "classalbert_1_1PluginInstance.html", [ + [ "albert::ExtensionPluginInstance< EXTENSION >", "classalbert_1_1ExtensionPluginInstance.html", null ], + [ "albert::plugin::Plugin< QOBJECT >", "classalbert_1_1plugin_1_1Plugin.html", null ] + ] ], + [ "albert::PluginMetaData", "classalbert_1_1PluginMetaData.html", null ], + [ "QObject", null, [ + [ "albert::ExtensionRegistry", "classalbert_1_1ExtensionRegistry.html", null ], + [ "albert::InputHistory", "classalbert_1_1InputHistory.html", null ], + [ "albert::PluginLoader", "classalbert_1_1PluginLoader.html", null ], + [ "albert::Query", "classalbert_1_1Query.html", null ], + [ "albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >", "classalbert_1_1plugin_1_1ExtensionPlugin.html", null ], + [ "albert::plugin::Plugin< QOBJECT >", "classalbert_1_1plugin_1_1Plugin.html", null ] + ] ], + [ "albert::RankItem", "classalbert_1_1RankItem.html", null ], + [ "albert::TriggerQueryHandler::TriggerQuery", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html", null ] +]; \ No newline at end of file diff --git a/reference/iconprovider_8h.html b/reference/iconprovider_8h.html new file mode 100644 index 00000000..15617cbe --- /dev/null +++ b/reference/iconprovider_8h.html @@ -0,0 +1,129 @@ + + + + + + + +Albert: albert/include/albert/util/iconprovider.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
iconprovider.h File Reference
+
+
+
#include "albert/export.h"
+#include <QPixmap>
+#include <QSize>
+#include <QStringList>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::IconProvider
 Generic pixmap provider. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/iconprovider_8h.js b/reference/iconprovider_8h.js new file mode 100644 index 00000000..6030b495 --- /dev/null +++ b/reference/iconprovider_8h.js @@ -0,0 +1,4 @@ +var iconprovider_8h = +[ + [ "albert::IconProvider", "classalbert_1_1IconProvider.html", "classalbert_1_1IconProvider" ] +]; \ No newline at end of file diff --git a/reference/iconprovider_8h_source.html b/reference/iconprovider_8h_source.html new file mode 100644 index 00000000..cbff407c --- /dev/null +++ b/reference/iconprovider_8h_source.html @@ -0,0 +1,145 @@ + + + + + + + +Albert: albert/include/albert/util/iconprovider.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
iconprovider.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2022-2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include <QPixmap>
+
6#include <QSize>
+
7#include <QStringList>
+
8
+
9namespace albert{
+
10
+
12
+
13class ALBERT_EXPORT IconProvider
+
14{
+
15public:
+ + +
18
+
25 QPixmap getPixmap(const QStringList &urls, QSize *size, const QSize &requestedSize) const;
+
26
+
62 QPixmap getPixmap(const QString &url, QSize *size, const QSize &requestedSize) const;
+
63
+
65 void clearCache();
+
66
+
67private:
+
68 class Private;
+
69 std::unique_ptr<Private> d;
+
70};
+
71
+
72}
+
73
+
Generic pixmap provider.
Definition: iconprovider.h:14
+ +
QPixmap getPixmap(const QString &url, QSize *size, const QSize &requestedSize) const
Pixmap providing function.
+
QPixmap getPixmap(const QStringList &urls, QSize *size, const QSize &requestedSize) const
Pixmap providing function.
+
void clearCache()
Clears the internal icon cache.
+ +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/index.html b/reference/index.html new file mode 100644 index 00000000..895a690c --- /dev/null +++ b/reference/index.html @@ -0,0 +1,177 @@ + + + + + + + +Albert: C++/Qt plugins + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
C++/Qt plugins
+
+
+

Native plugins are basically shared libraries. Their distribution is not that trivial due to ABI compatibilitiy (system libraries, compiler(-flags), system architecture, Qt versions, etc…). Therefore developing native plugins is rather worth it if you plan to get your code upstream and finally be shipped with the official plugins. For personal workflows or less complex use cases Python plugins are the way to go.

+

+Getting started

+

The easiest way to build plugins is to checkout the source tree and build the entire app including plugins. Open the CMake project in your favourite C++ IDE and make it build and run. There may be some caveats, so probably you want to join the chats and ask in case of questions. From there on you could simply copy an existing plugin, e.g. the template plugin, and start implementing your extension. The following gives a brief overview. Details may change every now and then anyway.

+

+CMake

+

A native plugin is a Qt Plugin, i.e. a shared library providing a particular interface. To build such a library you have to define CMake targets and create an appropiate metadata file. The CMake module provides convenience macros for this purpose. You should probably skim through this module once. The albert_plugin macro should be sufficient for most trivial plugins:

+
albert_plugin (
+
NAME name
+
DESCRIPTION description
+
LICENSE licencse
+
URL url
+
[LONG_DESCRIPTION long_description]
+
[FRONTEND]
+
[MAINTAINERS ...]
+
[QT_DEPENDENCIES ...]
+
[LIB_DEPENDENCIES ...]
+
[EXEC_DEPENDENCIES ...]
+
)
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
Parameter Type Notes
NAME value Human readable name.
DESCRIPTION value Brief, imperative description, e.g. "Open files".
LICENSE value Short form, e.g. BSD-2-Clause or GPL-3.0.
URL value Browsable online source, issues etc.
LONG_DESCRIPTION value Longer description or absolute file path to a text file (supports Markdown).
MAINTAINERS list A list of active maintainers. Preferrably using mentionable GitHub usernames.
QT_DEPENDENCIES list Qt dependencies to import and link. Qt::Core is in the public interface of libalbert.
LIB_DEPENDENCIES list Required libraries. Displayed to the user.
EXEC_DEPENDENCIES list Required executables. Displayed to the user.
FRONTEND option Indicates that this plugin implements the frontend interface.
NOUNLOAD option Prohibits unloading at runtime.
+

+C++

+

On the C++ side you have to tell the Qt MOC which interface the plugin implements and where the metadata is located. The ALBERT_PLUGIN define takes care of this. The MOC is triggered by the QOBJECT define. The fundamental base class for all plugins is albert::PluginInstance. It is subclassed by the convenience classes for native plugins in the albert::plugin namespace. Read their documentation before you proceed. Check the inheritance diagram of the albert::Extension class for available extensions, especially the albert::TriggerQueryHandler and its subclasses. By now you should understand a plugin class declaration like this:

+
#pragma once
+ +
#include "albert/plugin.h"
+
+
class Plugin : public albert::plugin::ExtensionPlugin<albert::TriggerQueryHandler>
+
{
+
Q_OBJECT ALBERT_PLUGIN
+
...
+
};
+
Convenience class for native plugins.
Definition: plugin.h:131
+ +
#define ALBERT_PLUGIN
Declare a class as Albert plugin.
Definition: plugin.h:90
+ +

Now implement the virtual functions of the abstract classes you inherit. Ultimately you want to display and activate items. See

+

Self explanatory examples serve way better as educational source than hundreds of lines of text. See the official native plugins as a reference. The debug, template and hash plugins are good plugins to start reading.

+

Finally you may want to skim through the entire albert namespace.

+

If you need help, join our community chats.

+
+
+
+ + + + diff --git a/reference/indexitem_8h.html b/reference/indexitem_8h.html new file mode 100644 index 00000000..2d7e5641 --- /dev/null +++ b/reference/indexitem_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/indexitem.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
indexitem.h File Reference
+
+
+
#include "albert/extension/queryhandler/item.h"
+#include <QString>
+#include <memory>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::IndexItem
 The eligible for the internal index of IndexQueryHandler. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/indexitem_8h.js b/reference/indexitem_8h.js new file mode 100644 index 00000000..cabeed02 --- /dev/null +++ b/reference/indexitem_8h.js @@ -0,0 +1,4 @@ +var indexitem_8h = +[ + [ "albert::IndexItem", "classalbert_1_1IndexItem.html", "classalbert_1_1IndexItem" ] +]; \ No newline at end of file diff --git a/reference/indexitem_8h_source.html b/reference/indexitem_8h_source.html new file mode 100644 index 00000000..afff1011 --- /dev/null +++ b/reference/indexitem_8h_source.html @@ -0,0 +1,135 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/indexitem.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
indexitem.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+ +
5#include <QString>
+
6#include <memory>
+
7
+
8namespace albert
+
9{
+
10
+
13class ALBERT_EXPORT IndexItem
+
14{
+
15public:
+
18 IndexItem(std::shared_ptr<Item> item, QString string);
+
19
+
21 std::shared_ptr<Item> item;
+
22
+
24 QString string;
+
25};
+
26
+
27}
+
The eligible for the internal index of IndexQueryHandler.
Definition: indexitem.h:14
+
std::shared_ptr< Item > item
The item to be indexed.
Definition: indexitem.h:21
+
QString string
The corresponding lookup string.
Definition: indexitem.h:24
+
IndexItem(std::shared_ptr< Item > item, QString string)
+ +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/indexqueryhandler_8h.html b/reference/indexqueryhandler_8h.html new file mode 100644 index 00000000..8aafb4da --- /dev/null +++ b/reference/indexqueryhandler_8h.html @@ -0,0 +1,129 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/indexqueryhandler.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
indexqueryhandler.h File Reference
+
+
+
#include "albert/extension/queryhandler/indexitem.h"
+#include "albert/extension/queryhandler/globalqueryhandler.h"
+#include <memory>
+#include <vector>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::IndexQueryHandler
 Index query handler class. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/indexqueryhandler_8h.js b/reference/indexqueryhandler_8h.js new file mode 100644 index 00000000..9945ac43 --- /dev/null +++ b/reference/indexqueryhandler_8h.js @@ -0,0 +1,4 @@ +var indexqueryhandler_8h = +[ + [ "albert::IndexQueryHandler", "classalbert_1_1IndexQueryHandler.html", "classalbert_1_1IndexQueryHandler" ] +]; \ No newline at end of file diff --git a/reference/indexqueryhandler_8h_source.html b/reference/indexqueryhandler_8h_source.html new file mode 100644 index 00000000..1e58375c --- /dev/null +++ b/reference/indexqueryhandler_8h_source.html @@ -0,0 +1,160 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/indexqueryhandler.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
indexqueryhandler.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+ + +
6#include <memory>
+
7#include <vector>
+
8class IndexQueryHandlerPrivate;
+
9
+
10namespace albert
+
11{
+
12
+
16class ALBERT_EXPORT IndexQueryHandler : public GlobalQueryHandler
+
17{
+
18public:
+ + +
21
+
23 QString synopsis() const override;
+
24
+
26 bool supportsFuzzyMatching() const override;
+
27
+
29 bool fuzzyMatching() const override;
+
30
+
33 void setFuzzyMatching(bool) override;
+
34
+
36 std::vector<RankItem> handleGlobalQuery(const GlobalQuery*) const override;
+
37
+
42 virtual void updateIndexItems() = 0;
+
43
+
45 void setIndexItems(std::vector<IndexItem>&&);
+
46
+
47private:
+
48 std::unique_ptr<IndexQueryHandlerPrivate> d;
+
49};
+
50
+
51}
+
The query interface used by GlobalQueryHandler.
Definition: globalqueryhandler.h:25
+
Global search query handler class.
Definition: globalqueryhandler.h:18
+
Index query handler class.
Definition: indexqueryhandler.h:17
+
bool fuzzyMatching() const override
Return the fuzzy mode of the internal index.
+
bool supportsFuzzyMatching() const override
Returns "True".
+ +
std::vector< RankItem > handleGlobalQuery(const GlobalQuery *) const override
Uses the index to override GlobalQueryHandler::handleGlobalQuery.
+
void setFuzzyMatching(bool) override
Set the fuzzy mode of the internal index.
+ +
virtual void updateIndexItems()=0
Update the index.
+
QString synopsis() const override
"<filter>" default synopsis
+
void setIndexItems(std::vector< IndexItem > &&)
Set the items of the index. Call this in updateIndexItems(). @threadsafe.
+ + +
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/inputhistory_8h.html b/reference/inputhistory_8h.html new file mode 100644 index 00000000..a5b4ec02 --- /dev/null +++ b/reference/inputhistory_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/inputhistory.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
inputhistory.h File Reference
+
+
+
#include "albert/export.h"
+#include <QObject>
+#include <QStringList>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::InputHistory
 Input history class. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/inputhistory_8h.js b/reference/inputhistory_8h.js new file mode 100644 index 00000000..10bd6ccf --- /dev/null +++ b/reference/inputhistory_8h.js @@ -0,0 +1,4 @@ +var inputhistory_8h = +[ + [ "albert::InputHistory", "classalbert_1_1InputHistory.html", "classalbert_1_1InputHistory" ] +]; \ No newline at end of file diff --git a/reference/inputhistory_8h_source.html b/reference/inputhistory_8h_source.html new file mode 100644 index 00000000..46ecb289 --- /dev/null +++ b/reference/inputhistory_8h_source.html @@ -0,0 +1,148 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/inputhistory.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
inputhistory.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include <QObject>
+
6#include <QStringList>
+
7
+
8namespace albert
+
9{
+
10
+
13class ALBERT_EXPORT InputHistory final : public QObject
+
14{
+
15 Q_OBJECT
+
16public:
+
17 explicit InputHistory();
+
18 ~InputHistory() override;
+
19
+
22 Q_INVOKABLE void add(const QString& str);
+
23
+
26 Q_INVOKABLE QString next(const QString &substring = QString{});
+
27
+
30 Q_INVOKABLE QString prev(const QString &substring = QString{});
+
31
+
33 Q_INVOKABLE void resetIterator();
+
34
+
35private:
+
36 QString file_path;
+
37 QStringList lines_;
+
38 int currentLine_;
+
39};
+
40
+
41}
+
Input history class.
Definition: inputhistory.h:14
+
~InputHistory() override
+
Q_INVOKABLE void add(const QString &str)
Add text to history search.
+
Q_INVOKABLE void resetIterator()
Reset history search.
+ +
Q_INVOKABLE QString prev(const QString &substring=QString{})
Previous distinct history item.
+
Q_INVOKABLE QString next(const QString &substring=QString{})
Next distinct history item.
+
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/item_8h.html b/reference/item_8h.html new file mode 100644 index 00000000..58f757cb --- /dev/null +++ b/reference/item_8h.html @@ -0,0 +1,128 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/item.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
item.h File Reference
+
+
+
#include "albert/extension/queryhandler/action.h"
+#include <QStringList>
+#include <vector>
+
+

Go to the source code of this file.

+ + + + + +

+Classes

class  albert::Item
 Items displayed in the query results list. More...
 
+ + + +

+Namespaces

namespace  albert
 
+
+
+ + + + diff --git a/reference/item_8h.js b/reference/item_8h.js new file mode 100644 index 00000000..2f400726 --- /dev/null +++ b/reference/item_8h.js @@ -0,0 +1,4 @@ +var item_8h = +[ + [ "albert::Item", "classalbert_1_1Item.html", "classalbert_1_1Item" ] +]; \ No newline at end of file diff --git a/reference/item_8h_source.html b/reference/item_8h_source.html new file mode 100644 index 00000000..b52a1cdd --- /dev/null +++ b/reference/item_8h_source.html @@ -0,0 +1,147 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/item.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
item.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+ +
5#include <QStringList>
+
6#include <vector>
+
7
+
8namespace albert
+
9{
+
10
+
12class ALBERT_EXPORT Item
+
13{
+
14public:
+
15 virtual ~Item() = default;
+
16
+
19 virtual QString id() const = 0;
+
20
+
24 virtual QString text() const = 0;
+
25
+
28 virtual QString subtext() const = 0;
+
29
+
32 virtual QStringList iconUrls() const = 0;
+
33
+
36 virtual QString inputActionText() const;
+
37
+
40 virtual std::vector<Action> actions() const;
+
41};
+
42
+
43}
+ +
Items displayed in the query results list.
Definition: item.h:13
+
virtual ~Item()=default
+
virtual QString subtext() const =0
Getter for the item subtext.
+
virtual QString id() const =0
Getter for the item identifier.
+
virtual QString inputActionText() const
Getter for the input action text.
+
virtual QString text() const =0
Getter for the item text.
+
virtual std::vector< Action > actions() const
Getter for item actions.
+
virtual QStringList iconUrls() const =0
Getter for the items iconUrls.
+
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/itemroles_8h.html b/reference/itemroles_8h.html new file mode 100644 index 00000000..4319ea4d --- /dev/null +++ b/reference/itemroles_8h.html @@ -0,0 +1,189 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/itemroles.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
itemroles.h File Reference
+
+
+
#include "albert/export.h"
+#include <Qt>
+
+

Go to the source code of this file.

+ + + + +

+Namespaces

namespace  albert
 
+ + + + + + + + + +

+Variables

 TextRole = Qt::DisplayRole
 
 SubTextRole = Qt::UserRole
 
 InputActionRole
 
 IconUrlsRole
 
+

Variable Documentation

+ +

◆ IconUrlsRole

+ +
+
+ + + + +
IconUrlsRole
+
+ +
+
+ +

◆ InputActionRole

+ +
+
+ + + + +
InputActionRole
+
+ +
+
+ +

◆ SubTextRole

+ +
+
+ + + + +
SubTextRole = Qt::UserRole
+
+ +
+
+ +

◆ TextRole

+ +
+
+ + + + +
TextRole = Qt::DisplayRole
+
+ +
+
+
+
+ + + + diff --git a/reference/itemroles_8h.js b/reference/itemroles_8h.js new file mode 100644 index 00000000..76c287d0 --- /dev/null +++ b/reference/itemroles_8h.js @@ -0,0 +1,7 @@ +var itemroles_8h = +[ + [ "IconUrlsRole", "itemroles_8h.html#ae9b729863972db16f8d4f8e70a6fe4d5", null ], + [ "InputActionRole", "itemroles_8h.html#a8e75baa6952bff913301f9eff2bf06d2", null ], + [ "SubTextRole", "itemroles_8h.html#a6072f0b8c244f5b672a0106b818ca8e3", null ], + [ "TextRole", "itemroles_8h.html#a141279366472b7803a6427ae5b05bdb0", null ] +]; \ No newline at end of file diff --git a/reference/itemroles_8h_source.html b/reference/itemroles_8h_source.html new file mode 100644 index 00000000..64e517af --- /dev/null +++ b/reference/itemroles_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/itemroles.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
itemroles.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2023 Manuel Schneider
+
2
+
3#pragma once
+
4#include "albert/export.h"
+
5#include <Qt>
+
6
+
7namespace albert
+
8{
+
9
+
11enum class ALBERT_EXPORT ItemRoles
+
12{
+
13 TextRole = Qt::DisplayRole, // QString
+
14 SubTextRole = Qt::UserRole, // QString
+
15 InputActionRole, // QString
+
16 IconUrlsRole, // Urls for icon lookup
+
17};
+
18
+
19}
+
TextRole
Definition: itemroles.h:13
+
SubTextRole
Definition: itemroles.h:14
+
InputActionRole
Definition: itemroles.h:15
+
IconUrlsRole
Definition: itemroles.h:16
+
Definition: albert.h:12
+
+
+ + + + diff --git a/reference/jquery.js b/reference/jquery.js new file mode 100644 index 00000000..1dffb65b --- /dev/null +++ b/reference/jquery.js @@ -0,0 +1,34 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=y(e||this.defaultElement||this)[0],this.element=y(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=y(),this.hoverable=y(),this.focusable=y(),this.classesElementLookup={},e!==this&&(y.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=y(e.style?e.ownerDocument:e.document||e),this.window=y(this.document[0].defaultView||this.document[0].parentWindow)),this.options=y.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:y.noop,_create:y.noop,_init:y.noop,destroy:function(){var i=this;this._destroy(),y.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:y.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return y.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=y.widget.extend({},this.options[t]),n=0;n
"),i=e.children()[0];return y("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthx(D(s),D(n))?o.important="horizontal":o.important="vertical",p.using.call(this,t,o)}),h.offset(y.extend(l,{using:t}))})},y.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,h=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),y.ui.plugin={add:function(t,e,i){var s,n=y.ui[t].prototype;for(s in i)n.plugins[s]=n.plugins[s]||[],n.plugins[s].push([e,i[s]])},call:function(t,e,i,s){var n,o=t.plugins[e];if(o&&(s||t.element[0].parentNode&&11!==t.element[0].parentNode.nodeType))for(n=0;n").css({overflow:"hidden",position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.resizable("instance")),this.elementIsWrapper=!0,t={marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom"),marginLeft:this.originalElement.css("marginLeft")},this.element.css(t),this.originalElement.css("margin",0),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css(t),this._proportionallyResize()),this._setupHandles(),e.autoHide&&y(this.element).on("mouseenter",function(){e.disabled||(i._removeClass("ui-resizable-autohide"),i._handles.show())}).on("mouseleave",function(){e.disabled||i.resizing||(i._addClass("ui-resizable-autohide"),i._handles.hide())}),this._mouseInit()},_destroy:function(){this._mouseDestroy(),this._addedHandles.remove();function t(t){y(t).removeData("resizable").removeData("ui-resizable").off(".resizable")}var e;return this.elementIsWrapper&&(t(this.element),e=this.element,this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")}).insertAfter(e),e.remove()),this.originalElement.css("resize",this.originalResizeStyle),t(this.originalElement),this},_setOption:function(t,e){switch(this._super(t,e),t){case"handles":this._removeHandles(),this._setupHandles();break;case"aspectRatio":this._aspectRatio=!!e}},_setupHandles:function(){var t,e,i,s,n,o=this.options,h=this;if(this.handles=o.handles||(y(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this._handles=y(),this._addedHandles=y(),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),i=this.handles.split(","),this.handles={},e=0;e"),this._addClass(n,"ui-resizable-handle "+s),n.css({zIndex:o.zIndex}),this.handles[t]=".ui-resizable-"+t,this.element.children(this.handles[t]).length||(this.element.append(n),this._addedHandles=this._addedHandles.add(n));this._renderAxis=function(t){var e,i,s;for(e in t=t||this.element,this.handles)this.handles[e].constructor===String?this.handles[e]=this.element.children(this.handles[e]).first().show():(this.handles[e].jquery||this.handles[e].nodeType)&&(this.handles[e]=y(this.handles[e]),this._on(this.handles[e],{mousedown:h._mouseDown})),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/^(textarea|input|select|button)$/i)&&(i=y(this.handles[e],this.element),s=/sw|ne|nw|se|n|s/.test(e)?i.outerHeight():i.outerWidth(),i=["padding",/ne|nw|n/.test(e)?"Top":/se|sw|s/.test(e)?"Bottom":/^e$/.test(e)?"Right":"Left"].join(""),t.css(i,s),this._proportionallyResize()),this._handles=this._handles.add(this.handles[e])},this._renderAxis(this.element),this._handles=this._handles.add(this.element.find(".ui-resizable-handle")),this._handles.disableSelection(),this._handles.on("mouseover",function(){h.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),h.axis=n&&n[1]?n[1]:"se")}),o.autoHide&&(this._handles.hide(),this._addClass("ui-resizable-autohide"))},_removeHandles:function(){this._addedHandles.remove()},_mouseCapture:function(t){var e,i,s=!1;for(e in this.handles)(i=y(this.handles[e])[0])!==t.target&&!y.contains(i,t.target)||(s=!0);return!this.options.disabled&&s},_mouseStart:function(t){var e,i,s=this.options,n=this.element;return this.resizing=!0,this._renderProxy(),e=this._num(this.helper.css("left")),i=this._num(this.helper.css("top")),s.containment&&(e+=y(s.containment).scrollLeft()||0,i+=y(s.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:e,top:i},this.size=this._helper?{width:this.helper.width(),height:this.helper.height()}:{width:n.width(),height:n.height()},this.originalSize=this._helper?{width:n.outerWidth(),height:n.outerHeight()}:{width:n.width(),height:n.height()},this.sizeDiff={width:n.outerWidth()-n.width(),height:n.outerHeight()-n.height()},this.originalPosition={left:e,top:i},this.originalMousePosition={left:t.pageX,top:t.pageY},this.aspectRatio="number"==typeof s.aspectRatio?s.aspectRatio:this.originalSize.width/this.originalSize.height||1,s=y(".ui-resizable-"+this.axis).css("cursor"),y("body").css("cursor","auto"===s?this.axis+"-resize":s),this._addClass("ui-resizable-resizing"),this._propagate("start",t),!0},_mouseDrag:function(t){var e=this.originalMousePosition,i=this.axis,s=t.pageX-e.left||0,e=t.pageY-e.top||0,i=this._change[i];return this._updatePrevProperties(),i&&(e=i.apply(this,[t,s,e]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(e=this._updateRatio(e,t)),e=this._respectSize(e,t),this._updateCache(e),this._propagate("resize",t),e=this._applyChanges(),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),y.isEmptyObject(e)||(this._updatePrevProperties(),this._trigger("resize",t,this.ui()),this._applyChanges())),!1},_mouseStop:function(t){this.resizing=!1;var e,i,s,n=this.options,o=this;return this._helper&&(s=(e=(i=this._proportionallyResizeElements).length&&/textarea/i.test(i[0].nodeName))&&this._hasScroll(i[0],"left")?0:o.sizeDiff.height,i=e?0:o.sizeDiff.width,e={width:o.helper.width()-i,height:o.helper.height()-s},i=parseFloat(o.element.css("left"))+(o.position.left-o.originalPosition.left)||null,s=parseFloat(o.element.css("top"))+(o.position.top-o.originalPosition.top)||null,n.animate||this.element.css(y.extend(e,{top:s,left:i})),o.helper.height(o.size.height),o.helper.width(o.size.width),this._helper&&!n.animate&&this._proportionallyResize()),y("body").css("cursor","auto"),this._removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updatePrevProperties:function(){this.prevPosition={top:this.position.top,left:this.position.left},this.prevSize={width:this.size.width,height:this.size.height}},_applyChanges:function(){var t={};return this.position.top!==this.prevPosition.top&&(t.top=this.position.top+"px"),this.position.left!==this.prevPosition.left&&(t.left=this.position.left+"px"),this.size.width!==this.prevSize.width&&(t.width=this.size.width+"px"),this.size.height!==this.prevSize.height&&(t.height=this.size.height+"px"),this.helper.css(t),t},_updateVirtualBoundaries:function(t){var e,i,s=this.options,n={minWidth:this._isNumber(s.minWidth)?s.minWidth:0,maxWidth:this._isNumber(s.maxWidth)?s.maxWidth:1/0,minHeight:this._isNumber(s.minHeight)?s.minHeight:0,maxHeight:this._isNumber(s.maxHeight)?s.maxHeight:1/0};(this._aspectRatio||t)&&(e=n.minHeight*this.aspectRatio,i=n.minWidth/this.aspectRatio,s=n.maxHeight*this.aspectRatio,t=n.maxWidth/this.aspectRatio,e>n.minWidth&&(n.minWidth=e),i>n.minHeight&&(n.minHeight=i),st.width,h=this._isNumber(t.height)&&e.minHeight&&e.minHeight>t.height,a=this.originalPosition.left+this.originalSize.width,r=this.originalPosition.top+this.originalSize.height,l=/sw|nw|w/.test(i),i=/nw|ne|n/.test(i);return o&&(t.width=e.minWidth),h&&(t.height=e.minHeight),s&&(t.width=e.maxWidth),n&&(t.height=e.maxHeight),o&&l&&(t.left=a-e.minWidth),s&&l&&(t.left=a-e.maxWidth),h&&i&&(t.top=r-e.minHeight),n&&i&&(t.top=r-e.maxHeight),t.width||t.height||t.left||!t.top?t.width||t.height||t.top||!t.left||(t.left=null):t.top=null,t},_getPaddingPlusBorderDimensions:function(t){for(var e=0,i=[],s=[t.css("borderTopWidth"),t.css("borderRightWidth"),t.css("borderBottomWidth"),t.css("borderLeftWidth")],n=[t.css("paddingTop"),t.css("paddingRight"),t.css("paddingBottom"),t.css("paddingLeft")];e<4;e++)i[e]=parseFloat(s[e])||0,i[e]+=parseFloat(n[e])||0;return{height:i[0]+i[2],width:i[1]+i[3]}},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var t,e=0,i=this.helper||this.element;e").css({overflow:"hidden"}),this._addClass(this.helper,this._helper),this.helper.css({width:this.element.outerWidth(),height:this.element.outerHeight(),position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++e.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(t,e){return{width:this.originalSize.width+e}},w:function(t,e){var i=this.originalSize;return{left:this.originalPosition.left+e,width:i.width-e}},n:function(t,e,i){var s=this.originalSize;return{top:this.originalPosition.top+i,height:s.height-i}},s:function(t,e,i){return{height:this.originalSize.height+i}},se:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},sw:function(t,e,i){return y.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,e,i]))},ne:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,e,i]))},nw:function(t,e,i){return y.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,e,i]))}},_propagate:function(t,e){y.ui.plugin.call(this,t,[e,this.ui()]),"resize"!==t&&this._trigger(t,e,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),y.ui.plugin.add("resizable","animate",{stop:function(e){var i=y(this).resizable("instance"),t=i.options,s=i._proportionallyResizeElements,n=s.length&&/textarea/i.test(s[0].nodeName),o=n&&i._hasScroll(s[0],"left")?0:i.sizeDiff.height,h=n?0:i.sizeDiff.width,n={width:i.size.width-h,height:i.size.height-o},h=parseFloat(i.element.css("left"))+(i.position.left-i.originalPosition.left)||null,o=parseFloat(i.element.css("top"))+(i.position.top-i.originalPosition.top)||null;i.element.animate(y.extend(n,o&&h?{top:o,left:h}:{}),{duration:t.animateDuration,easing:t.animateEasing,step:function(){var t={width:parseFloat(i.element.css("width")),height:parseFloat(i.element.css("height")),top:parseFloat(i.element.css("top")),left:parseFloat(i.element.css("left"))};s&&s.length&&y(s[0]).css({width:t.width,height:t.height}),i._updateCache(t),i._propagate("resize",e)}})}}),y.ui.plugin.add("resizable","containment",{start:function(){var i,s,n=y(this).resizable("instance"),t=n.options,e=n.element,o=t.containment,h=o instanceof y?o.get(0):/parent/.test(o)?e.parent().get(0):o;h&&(n.containerElement=y(h),/document/.test(o)||o===document?(n.containerOffset={left:0,top:0},n.containerPosition={left:0,top:0},n.parentData={element:y(document),left:0,top:0,width:y(document).width(),height:y(document).height()||document.body.parentNode.scrollHeight}):(i=y(h),s=[],y(["Top","Right","Left","Bottom"]).each(function(t,e){s[t]=n._num(i.css("padding"+e))}),n.containerOffset=i.offset(),n.containerPosition=i.position(),n.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},t=n.containerOffset,e=n.containerSize.height,o=n.containerSize.width,o=n._hasScroll(h,"left")?h.scrollWidth:o,e=n._hasScroll(h)?h.scrollHeight:e,n.parentData={element:h,left:t.left,top:t.top,width:o,height:e}))},resize:function(t){var e=y(this).resizable("instance"),i=e.options,s=e.containerOffset,n=e.position,o=e._aspectRatio||t.shiftKey,h={top:0,left:0},a=e.containerElement,t=!0;a[0]!==document&&/static/.test(a.css("position"))&&(h=s),n.left<(e._helper?s.left:0)&&(e.size.width=e.size.width+(e._helper?e.position.left-s.left:e.position.left-h.left),o&&(e.size.height=e.size.width/e.aspectRatio,t=!1),e.position.left=i.helper?s.left:0),n.top<(e._helper?s.top:0)&&(e.size.height=e.size.height+(e._helper?e.position.top-s.top:e.position.top),o&&(e.size.width=e.size.height*e.aspectRatio,t=!1),e.position.top=e._helper?s.top:0),i=e.containerElement.get(0)===e.element.parent().get(0),n=/relative|absolute/.test(e.containerElement.css("position")),i&&n?(e.offset.left=e.parentData.left+e.position.left,e.offset.top=e.parentData.top+e.position.top):(e.offset.left=e.element.offset().left,e.offset.top=e.element.offset().top),n=Math.abs(e.sizeDiff.width+(e._helper?e.offset.left-h.left:e.offset.left-s.left)),s=Math.abs(e.sizeDiff.height+(e._helper?e.offset.top-h.top:e.offset.top-s.top)),n+e.size.width>=e.parentData.width&&(e.size.width=e.parentData.width-n,o&&(e.size.height=e.size.width/e.aspectRatio,t=!1)),s+e.size.height>=e.parentData.height&&(e.size.height=e.parentData.height-s,o&&(e.size.width=e.size.height*e.aspectRatio,t=!1)),t||(e.position.left=e.prevPosition.left,e.position.top=e.prevPosition.top,e.size.width=e.prevSize.width,e.size.height=e.prevSize.height)},stop:function(){var t=y(this).resizable("instance"),e=t.options,i=t.containerOffset,s=t.containerPosition,n=t.containerElement,o=y(t.helper),h=o.offset(),a=o.outerWidth()-t.sizeDiff.width,o=o.outerHeight()-t.sizeDiff.height;t._helper&&!e.animate&&/relative/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o}),t._helper&&!e.animate&&/static/.test(n.css("position"))&&y(this).css({left:h.left-s.left-i.left,width:a,height:o})}}),y.ui.plugin.add("resizable","alsoResize",{start:function(){var t=y(this).resizable("instance").options;y(t.alsoResize).each(function(){var t=y(this);t.data("ui-resizable-alsoresize",{width:parseFloat(t.width()),height:parseFloat(t.height()),left:parseFloat(t.css("left")),top:parseFloat(t.css("top"))})})},resize:function(t,i){var e=y(this).resizable("instance"),s=e.options,n=e.originalSize,o=e.originalPosition,h={height:e.size.height-n.height||0,width:e.size.width-n.width||0,top:e.position.top-o.top||0,left:e.position.left-o.left||0};y(s.alsoResize).each(function(){var t=y(this),s=y(this).data("ui-resizable-alsoresize"),n={},e=t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];y.each(e,function(t,e){var i=(s[e]||0)+(h[e]||0);i&&0<=i&&(n[e]=i||null)}),t.css(n)})},stop:function(){y(this).removeData("ui-resizable-alsoresize")}}),y.ui.plugin.add("resizable","ghost",{start:function(){var t=y(this).resizable("instance"),e=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}),t._addClass(t.ghost,"ui-resizable-ghost"),!1!==y.uiBackCompat&&"string"==typeof t.options.ghost&&t.ghost.addClass(this.options.ghost),t.ghost.appendTo(t.helper)},resize:function(){var t=y(this).resizable("instance");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=y(this).resizable("instance");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),y.ui.plugin.add("resizable","grid",{resize:function(){var t,e=y(this).resizable("instance"),i=e.options,s=e.size,n=e.originalSize,o=e.originalPosition,h=e.axis,a="number"==typeof i.grid?[i.grid,i.grid]:i.grid,r=a[0]||1,l=a[1]||1,u=Math.round((s.width-n.width)/r)*r,p=Math.round((s.height-n.height)/l)*l,d=n.width+u,c=n.height+p,f=i.maxWidth&&i.maxWidthd,s=i.minHeight&&i.minHeight>c;i.grid=a,m&&(d+=r),s&&(c+=l),f&&(d-=r),g&&(c-=l),/^(se|s|e)$/.test(h)?(e.size.width=d,e.size.height=c):/^(ne)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.top=o.top-p):/^(sw)$/.test(h)?(e.size.width=d,e.size.height=c,e.position.left=o.left-u):((c-l<=0||d-r<=0)&&(t=e._getPaddingPlusBorderDimensions(this)),0=f[g]?0:Math.min(f[g],n));!a&&1-1){targetElements.on(evt+EVENT_NAMESPACE,function elementToggle(event){$.powerTip.toggle(this,event)})}else{targetElements.on(evt+EVENT_NAMESPACE,function elementOpen(event){$.powerTip.show(this,event)})}});$.each(options.closeEvents,function(idx,evt){if($.inArray(evt,options.openEvents)<0){targetElements.on(evt+EVENT_NAMESPACE,function elementClose(event){$.powerTip.hide(this,!isMouseEvent(event))})}});targetElements.on("keydown"+EVENT_NAMESPACE,function elementKeyDown(event){if(event.keyCode===27){$.powerTip.hide(this,true)}})}return targetElements};$.fn.powerTip.defaults={fadeInTime:200,fadeOutTime:100,followMouse:false,popupId:"powerTip",popupClass:null,intentSensitivity:7,intentPollInterval:100,closeDelay:100,placement:"n",smartPlacement:false,offset:10,mouseOnToPopup:false,manual:false,openEvents:["mouseenter","focus"],closeEvents:["mouseleave","blur"]};$.fn.powerTip.smartPlacementLists={n:["n","ne","nw","s"],e:["e","ne","se","w","nw","sw","n","s","e"],s:["s","se","sw","n"],w:["w","nw","sw","e","ne","se","n","s","w"],nw:["nw","w","sw","n","s","se","nw"],ne:["ne","e","se","n","s","sw","ne"],sw:["sw","w","nw","s","n","ne","sw"],se:["se","e","ne","s","n","nw","se"],"nw-alt":["nw-alt","n","ne-alt","sw-alt","s","se-alt","w","e"],"ne-alt":["ne-alt","n","nw-alt","se-alt","s","sw-alt","e","w"],"sw-alt":["sw-alt","s","se-alt","nw-alt","n","ne-alt","w","e"],"se-alt":["se-alt","s","sw-alt","ne-alt","n","nw-alt","e","w"]};$.powerTip={show:function apiShowTip(element,event){if(isMouseEvent(event)){trackMouse(event);session.previousX=event.pageX;session.previousY=event.pageY;$(element).data(DATA_DISPLAYCONTROLLER).show()}else{$(element).first().data(DATA_DISPLAYCONTROLLER).show(true,true)}return element},reposition:function apiResetPosition(element){$(element).first().data(DATA_DISPLAYCONTROLLER).resetPosition();return element},hide:function apiCloseTip(element,immediate){var displayController;immediate=element?immediate:true;if(element){displayController=$(element).first().data(DATA_DISPLAYCONTROLLER)}else if(session.activeHover){displayController=session.activeHover.data(DATA_DISPLAYCONTROLLER)}if(displayController){displayController.hide(immediate)}return element},toggle:function apiToggle(element,event){if(session.activeHover&&session.activeHover.is(element)){$.powerTip.hide(element,!isMouseEvent(event))}else{$.powerTip.show(element,event)}return element}};$.powerTip.showTip=$.powerTip.show;$.powerTip.closeTip=$.powerTip.hide;function CSSCoordinates(){var me=this;me.top="auto";me.left="auto";me.right="auto";me.bottom="auto";me.set=function(property,value){if($.isNumeric(value)){me[property]=Math.round(value)}}}function DisplayController(element,options,tipController){var hoverTimer=null,myCloseDelay=null;function openTooltip(immediate,forceOpen){cancelTimer();if(!element.data(DATA_HASACTIVEHOVER)){if(!immediate){session.tipOpenImminent=true;hoverTimer=setTimeout(function intentDelay(){hoverTimer=null;checkForIntent()},options.intentPollInterval)}else{if(forceOpen){element.data(DATA_FORCEDOPEN,true)}closeAnyDelayed();tipController.showTip(element)}}else{cancelClose()}}function closeTooltip(disableDelay){if(myCloseDelay){myCloseDelay=session.closeDelayTimeout=clearTimeout(myCloseDelay);session.delayInProgress=false}cancelTimer();session.tipOpenImminent=false;if(element.data(DATA_HASACTIVEHOVER)){element.data(DATA_FORCEDOPEN,false);if(!disableDelay){session.delayInProgress=true;session.closeDelayTimeout=setTimeout(function closeDelay(){session.closeDelayTimeout=null;tipController.hideTip(element);session.delayInProgress=false;myCloseDelay=null},options.closeDelay);myCloseDelay=session.closeDelayTimeout}else{tipController.hideTip(element)}}}function checkForIntent(){var xDifference=Math.abs(session.previousX-session.currentX),yDifference=Math.abs(session.previousY-session.currentY),totalDifference=xDifference+yDifference;if(totalDifference",{id:options.popupId});if($body.length===0){$body=$("body")}$body.append(tipElement);session.tooltips=session.tooltips?session.tooltips.add(tipElement):tipElement}if(options.followMouse){if(!tipElement.data(DATA_HASMOUSEMOVE)){$document.on("mousemove"+EVENT_NAMESPACE,positionTipOnCursor);$window.on("scroll"+EVENT_NAMESPACE,positionTipOnCursor);tipElement.data(DATA_HASMOUSEMOVE,true)}}function beginShowTip(element){element.data(DATA_HASACTIVEHOVER,true);tipElement.queue(function queueTipInit(next){showTip(element);next()})}function showTip(element){var tipContent;if(!element.data(DATA_HASACTIVEHOVER)){return}if(session.isTipOpen){if(!session.isClosing){hideTip(session.activeHover)}tipElement.delay(100).queue(function queueTipAgain(next){showTip(element);next()});return}element.trigger("powerTipPreRender");tipContent=getTooltipContent(element);if(tipContent){tipElement.empty().append(tipContent)}else{return}element.trigger("powerTipRender");session.activeHover=element;session.isTipOpen=true;tipElement.data(DATA_MOUSEONTOTIP,options.mouseOnToPopup);tipElement.addClass(options.popupClass);if(!options.followMouse||element.data(DATA_FORCEDOPEN)){positionTipOnElement(element);session.isFixedTipOpen=true}else{positionTipOnCursor()}if(!element.data(DATA_FORCEDOPEN)&&!options.followMouse){$document.on("click"+EVENT_NAMESPACE,function documentClick(event){var target=event.target;if(target!==element[0]){if(options.mouseOnToPopup){if(target!==tipElement[0]&&!$.contains(tipElement[0],target)){$.powerTip.hide()}}else{$.powerTip.hide()}}})}if(options.mouseOnToPopup&&!options.manual){tipElement.on("mouseenter"+EVENT_NAMESPACE,function tipMouseEnter(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).cancel()}});tipElement.on("mouseleave"+EVENT_NAMESPACE,function tipMouseLeave(){if(session.activeHover){session.activeHover.data(DATA_DISPLAYCONTROLLER).hide()}})}tipElement.fadeIn(options.fadeInTime,function fadeInCallback(){if(!session.desyncTimeout){session.desyncTimeout=setInterval(closeDesyncedTip,500)}element.trigger("powerTipOpen")})}function hideTip(element){session.isClosing=true;session.isTipOpen=false;session.desyncTimeout=clearInterval(session.desyncTimeout);element.data(DATA_HASACTIVEHOVER,false);element.data(DATA_FORCEDOPEN,false);$document.off("click"+EVENT_NAMESPACE);tipElement.off(EVENT_NAMESPACE);tipElement.fadeOut(options.fadeOutTime,function fadeOutCallback(){var coords=new CSSCoordinates;session.activeHover=null;session.isClosing=false;session.isFixedTipOpen=false;tipElement.removeClass();coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);tipElement.css(coords);element.trigger("powerTipClose")})}function positionTipOnCursor(){var tipWidth,tipHeight,coords,collisions,collisionCount;if(!session.isFixedTipOpen&&(session.isTipOpen||session.tipOpenImminent&&tipElement.data(DATA_HASMOUSEMOVE))){tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=new CSSCoordinates;coords.set("top",session.currentY+options.offset);coords.set("left",session.currentX+options.offset);collisions=getViewportCollisions(coords,tipWidth,tipHeight);if(collisions!==Collision.none){collisionCount=countFlags(collisions);if(collisionCount===1){if(collisions===Collision.right){coords.set("left",session.scrollLeft+session.windowWidth-tipWidth)}else if(collisions===Collision.bottom){coords.set("top",session.scrollTop+session.windowHeight-tipHeight)}}else{coords.set("left",session.currentX-tipWidth-options.offset);coords.set("top",session.currentY-tipHeight-options.offset)}}tipElement.css(coords)}}function positionTipOnElement(element){var priorityList,finalPlacement;if(options.smartPlacement||options.followMouse&&element.data(DATA_FORCEDOPEN)){priorityList=$.fn.powerTip.smartPlacementLists[options.placement];$.each(priorityList,function(idx,pos){var collisions=getViewportCollisions(placeTooltip(element,pos),tipElement.outerWidth(),tipElement.outerHeight());finalPlacement=pos;return collisions!==Collision.none})}else{placeTooltip(element,options.placement);finalPlacement=options.placement}tipElement.removeClass("w nw sw e ne se n s w se-alt sw-alt ne-alt nw-alt");tipElement.addClass(finalPlacement)}function placeTooltip(element,placement){var iterationCount=0,tipWidth,tipHeight,coords=new CSSCoordinates;coords.set("top",0);coords.set("left",0);tipElement.css(coords);do{tipWidth=tipElement.outerWidth();tipHeight=tipElement.outerHeight();coords=placementCalculator.compute(element,placement,tipWidth,tipHeight,options.offset);tipElement.css(coords)}while(++iterationCount<=5&&(tipWidth!==tipElement.outerWidth()||tipHeight!==tipElement.outerHeight()));return coords}function closeDesyncedTip(){var isDesynced=false,hasDesyncableCloseEvent=$.grep(["mouseleave","mouseout","blur","focusout"],function(eventType){return $.inArray(eventType,options.closeEvents)!==-1}).length>0;if(session.isTipOpen&&!session.isClosing&&!session.delayInProgress&&hasDesyncableCloseEvent){if(session.activeHover.data(DATA_HASACTIVEHOVER)===false||session.activeHover.is(":disabled")){isDesynced=true}else if(!isMouseOver(session.activeHover)&&!session.activeHover.is(":focus")&&!session.activeHover.data(DATA_FORCEDOPEN)){if(tipElement.data(DATA_MOUSEONTOTIP)){if(!isMouseOver(tipElement)){isDesynced=true}}else{isDesynced=true}}if(isDesynced){hideTip(session.activeHover)}}}this.showTip=beginShowTip;this.hideTip=hideTip;this.resetPosition=positionTipOnElement}function isSvgElement(element){return Boolean(window.SVGElement&&element[0]instanceof SVGElement)}function isMouseEvent(event){return Boolean(event&&$.inArray(event.type,MOUSE_EVENTS)>-1&&typeof event.pageX==="number")}function initTracking(){if(!session.mouseTrackingActive){session.mouseTrackingActive=true;getViewportDimensions();$(getViewportDimensions);$document.on("mousemove"+EVENT_NAMESPACE,trackMouse);$window.on("resize"+EVENT_NAMESPACE,trackResize);$window.on("scroll"+EVENT_NAMESPACE,trackScroll)}}function getViewportDimensions(){session.scrollLeft=$window.scrollLeft();session.scrollTop=$window.scrollTop();session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackResize(){session.windowWidth=$window.width();session.windowHeight=$window.height()}function trackScroll(){var x=$window.scrollLeft(),y=$window.scrollTop();if(x!==session.scrollLeft){session.currentX+=x-session.scrollLeft;session.scrollLeft=x}if(y!==session.scrollTop){session.currentY+=y-session.scrollTop;session.scrollTop=y}}function trackMouse(event){session.currentX=event.pageX;session.currentY=event.pageY}function isMouseOver(element){var elementPosition=element.offset(),elementBox=element[0].getBoundingClientRect(),elementWidth=elementBox.right-elementBox.left,elementHeight=elementBox.bottom-elementBox.top;return session.currentX>=elementPosition.left&&session.currentX<=elementPosition.left+elementWidth&&session.currentY>=elementPosition.top&&session.currentY<=elementPosition.top+elementHeight}function getTooltipContent(element){var tipText=element.data(DATA_POWERTIP),tipObject=element.data(DATA_POWERTIPJQ),tipTarget=element.data(DATA_POWERTIPTARGET),targetElement,content;if(tipText){if($.isFunction(tipText)){tipText=tipText.call(element[0])}content=tipText}else if(tipObject){if($.isFunction(tipObject)){tipObject=tipObject.call(element[0])}if(tipObject.length>0){content=tipObject.clone(true,true)}}else if(tipTarget){targetElement=$("#"+tipTarget);if(targetElement.length>0){content=targetElement.html()}}return content}function getViewportCollisions(coords,elementWidth,elementHeight){var viewportTop=session.scrollTop,viewportLeft=session.scrollLeft,viewportBottom=viewportTop+session.windowHeight,viewportRight=viewportLeft+session.windowWidth,collisions=Collision.none;if(coords.topviewportBottom||Math.abs(coords.bottom-session.windowHeight)>viewportBottom){collisions|=Collision.bottom}if(coords.leftviewportRight){collisions|=Collision.left}if(coords.left+elementWidth>viewportRight||coords.right1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);/*! SmartMenus jQuery Plugin - v1.1.0 - September 17, 2017 + * http://www.smartmenus.org/ + * Copyright Vasil Dinkov, Vadikom Web Ltd. http://vadikom.com; Licensed MIT */(function(t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof module&&"object"==typeof module.exports?module.exports=t(require("jquery")):t(jQuery)})(function($){function initMouseDetection(t){var e=".smartmenus_mouse";if(mouseDetectionEnabled||t)mouseDetectionEnabled&&t&&($(document).off(e),mouseDetectionEnabled=!1);else{var i=!0,s=null,o={mousemove:function(t){var e={x:t.pageX,y:t.pageY,timeStamp:(new Date).getTime()};if(s){var o=Math.abs(s.x-e.x),a=Math.abs(s.y-e.y);if((o>0||a>0)&&2>=o&&2>=a&&300>=e.timeStamp-s.timeStamp&&(mouse=!0,i)){var n=$(t.target).closest("a");n.is("a")&&$.each(menuTrees,function(){return $.contains(this.$root[0],n[0])?(this.itemEnter({currentTarget:n[0]}),!1):void 0}),i=!1}}s=e}};o[touchEvents?"touchstart":"pointerover pointermove pointerout MSPointerOver MSPointerMove MSPointerOut"]=function(t){isTouchEvent(t.originalEvent)&&(mouse=!1)},$(document).on(getEventsNS(o,e)),mouseDetectionEnabled=!0}}function isTouchEvent(t){return!/^(4|mouse)$/.test(t.pointerType)}function getEventsNS(t,e){e||(e="");var i={};for(var s in t)i[s.split(" ").join(e+" ")+e]=t[s];return i}var menuTrees=[],mouse=!1,touchEvents="ontouchstart"in window,mouseDetectionEnabled=!1,requestAnimationFrame=window.requestAnimationFrame||function(t){return setTimeout(t,1e3/60)},cancelAnimationFrame=window.cancelAnimationFrame||function(t){clearTimeout(t)},canAnimate=!!$.fn.animate;return $.SmartMenus=function(t,e){this.$root=$(t),this.opts=e,this.rootId="",this.accessIdPrefix="",this.$subArrow=null,this.activatedItems=[],this.visibleSubMenus=[],this.showTimeout=0,this.hideTimeout=0,this.scrollTimeout=0,this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.idInc=0,this.$firstLink=null,this.$firstSub=null,this.disabled=!1,this.$disableOverlay=null,this.$touchScrollingSub=null,this.cssTransforms3d="perspective"in t.style||"webkitPerspective"in t.style,this.wasCollapsible=!1,this.init()},$.extend($.SmartMenus,{hideAll:function(){$.each(menuTrees,function(){this.menuHideAll()})},destroy:function(){for(;menuTrees.length;)menuTrees[0].destroy();initMouseDetection(!0)},prototype:{init:function(t){var e=this;if(!t){menuTrees.push(this),this.rootId=((new Date).getTime()+Math.random()+"").replace(/\D/g,""),this.accessIdPrefix="sm-"+this.rootId+"-",this.$root.hasClass("sm-rtl")&&(this.opts.rightToLeftSubMenus=!0);var i=".smartmenus";this.$root.data("smartmenus",this).attr("data-smartmenus-id",this.rootId).dataSM("level",1).on(getEventsNS({"mouseover focusin":$.proxy(this.rootOver,this),"mouseout focusout":$.proxy(this.rootOut,this),keydown:$.proxy(this.rootKeyDown,this)},i)).on(getEventsNS({mouseenter:$.proxy(this.itemEnter,this),mouseleave:$.proxy(this.itemLeave,this),mousedown:$.proxy(this.itemDown,this),focus:$.proxy(this.itemFocus,this),blur:$.proxy(this.itemBlur,this),click:$.proxy(this.itemClick,this)},i),"a"),i+=this.rootId,this.opts.hideOnClick&&$(document).on(getEventsNS({touchstart:$.proxy(this.docTouchStart,this),touchmove:$.proxy(this.docTouchMove,this),touchend:$.proxy(this.docTouchEnd,this),click:$.proxy(this.docClick,this)},i)),$(window).on(getEventsNS({"resize orientationchange":$.proxy(this.winResize,this)},i)),this.opts.subIndicators&&(this.$subArrow=$("").addClass("sub-arrow"),this.opts.subIndicatorsText&&this.$subArrow.html(this.opts.subIndicatorsText)),initMouseDetection()}if(this.$firstSub=this.$root.find("ul").each(function(){e.menuInit($(this))}).eq(0),this.$firstLink=this.$root.find("a").eq(0),this.opts.markCurrentItem){var s=/(index|default)\.[^#\?\/]*/i,o=/#.*/,a=window.location.href.replace(s,""),n=a.replace(o,"");this.$root.find("a").each(function(){var t=this.href.replace(s,""),i=$(this);(t==a||t==n)&&(i.addClass("current"),e.opts.markCurrentTree&&i.parentsUntil("[data-smartmenus-id]","ul").each(function(){$(this).dataSM("parent-a").addClass("current")}))})}this.wasCollapsible=this.isCollapsible()},destroy:function(t){if(!t){var e=".smartmenus";this.$root.removeData("smartmenus").removeAttr("data-smartmenus-id").removeDataSM("level").off(e),e+=this.rootId,$(document).off(e),$(window).off(e),this.opts.subIndicators&&(this.$subArrow=null)}this.menuHideAll();var i=this;this.$root.find("ul").each(function(){var t=$(this);t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.dataSM("shown-before")&&((i.opts.subMenusMinWidth||i.opts.subMenusMaxWidth)&&t.css({width:"",minWidth:"",maxWidth:""}).removeClass("sm-nowrap"),t.dataSM("scroll-arrows")&&t.dataSM("scroll-arrows").remove(),t.css({zIndex:"",top:"",left:"",marginLeft:"",marginTop:"",display:""})),0==(t.attr("id")||"").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeDataSM("in-mega").removeDataSM("shown-before").removeDataSM("scroll-arrows").removeDataSM("parent-a").removeDataSM("level").removeDataSM("beforefirstshowfired").removeAttr("role").removeAttr("aria-hidden").removeAttr("aria-labelledby").removeAttr("aria-expanded"),this.$root.find("a.has-submenu").each(function(){var t=$(this);0==t.attr("id").indexOf(i.accessIdPrefix)&&t.removeAttr("id")}).removeClass("has-submenu").removeDataSM("sub").removeAttr("aria-haspopup").removeAttr("aria-controls").removeAttr("aria-expanded").closest("li").removeDataSM("sub"),this.opts.subIndicators&&this.$root.find("span.sub-arrow").remove(),this.opts.markCurrentItem&&this.$root.find("a.current").removeClass("current"),t||(this.$root=null,this.$firstLink=null,this.$firstSub=null,this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),menuTrees.splice($.inArray(this,menuTrees),1))},disable:function(t){if(!this.disabled){if(this.menuHideAll(),!t&&!this.opts.isPopup&&this.$root.is(":visible")){var e=this.$root.offset();this.$disableOverlay=$('
').css({position:"absolute",top:e.top,left:e.left,width:this.$root.outerWidth(),height:this.$root.outerHeight(),zIndex:this.getStartZIndex(!0),opacity:0}).appendTo(document.body)}this.disabled=!0}},docClick:function(t){return this.$touchScrollingSub?(this.$touchScrollingSub=null,void 0):((this.visibleSubMenus.length&&!$.contains(this.$root[0],t.target)||$(t.target).closest("a").length)&&this.menuHideAll(),void 0)},docTouchEnd:function(){if(this.lastTouch){if(!(!this.visibleSubMenus.length||void 0!==this.lastTouch.x2&&this.lastTouch.x1!=this.lastTouch.x2||void 0!==this.lastTouch.y2&&this.lastTouch.y1!=this.lastTouch.y2||this.lastTouch.target&&$.contains(this.$root[0],this.lastTouch.target))){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var t=this;this.hideTimeout=setTimeout(function(){t.menuHideAll()},350)}this.lastTouch=null}},docTouchMove:function(t){if(this.lastTouch){var e=t.originalEvent.touches[0];this.lastTouch.x2=e.pageX,this.lastTouch.y2=e.pageY}},docTouchStart:function(t){var e=t.originalEvent.touches[0];this.lastTouch={x1:e.pageX,y1:e.pageY,target:e.target}},enable:function(){this.disabled&&(this.$disableOverlay&&(this.$disableOverlay.remove(),this.$disableOverlay=null),this.disabled=!1)},getClosestMenu:function(t){for(var e=$(t).closest("ul");e.dataSM("in-mega");)e=e.parent().closest("ul");return e[0]||null},getHeight:function(t){return this.getOffset(t,!0)},getOffset:function(t,e){var i;"none"==t.css("display")&&(i={position:t[0].style.position,visibility:t[0].style.visibility},t.css({position:"absolute",visibility:"hidden"}).show());var s=t[0].getBoundingClientRect&&t[0].getBoundingClientRect(),o=s&&(e?s.height||s.bottom-s.top:s.width||s.right-s.left);return o||0===o||(o=e?t[0].offsetHeight:t[0].offsetWidth),i&&t.hide().css(i),o},getStartZIndex:function(t){var e=parseInt(this[t?"$root":"$firstSub"].css("z-index"));return!t&&isNaN(e)&&(e=parseInt(this.$root.css("z-index"))),isNaN(e)?1:e},getTouchPoint:function(t){return t.touches&&t.touches[0]||t.changedTouches&&t.changedTouches[0]||t},getViewport:function(t){var e=t?"Height":"Width",i=document.documentElement["client"+e],s=window["inner"+e];return s&&(i=Math.min(i,s)),i},getViewportHeight:function(){return this.getViewport(!0)},getViewportWidth:function(){return this.getViewport()},getWidth:function(t){return this.getOffset(t)},handleEvents:function(){return!this.disabled&&this.isCSSOn()},handleItemEvents:function(t){return this.handleEvents()&&!this.isLinkInMegaMenu(t)},isCollapsible:function(){return"static"==this.$firstSub.css("position")},isCSSOn:function(){return"inline"!=this.$firstLink.css("display")},isFixed:function(){var t="fixed"==this.$root.css("position");return t||this.$root.parentsUntil("body").each(function(){return"fixed"==$(this).css("position")?(t=!0,!1):void 0}),t},isLinkInMegaMenu:function(t){return $(this.getClosestMenu(t[0])).hasClass("mega-menu")},isTouchMode:function(){return!mouse||this.opts.noMouseOver||this.isCollapsible()},itemActivate:function(t,e){var i=t.closest("ul"),s=i.dataSM("level");if(s>1&&(!this.activatedItems[s-2]||this.activatedItems[s-2][0]!=i.dataSM("parent-a")[0])){var o=this;$(i.parentsUntil("[data-smartmenus-id]","ul").get().reverse()).add(i).each(function(){o.itemActivate($(this).dataSM("parent-a"))})}if((!this.isCollapsible()||e)&&this.menuHideSubMenus(this.activatedItems[s-1]&&this.activatedItems[s-1][0]==t[0]?s:s-1),this.activatedItems[s-1]=t,this.$root.triggerHandler("activate.smapi",t[0])!==!1){var a=t.dataSM("sub");a&&(this.isTouchMode()||!this.opts.showOnClick||this.clickActivated)&&this.menuShow(a)}},itemBlur:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&this.$root.triggerHandler("blur.smapi",e[0])},itemClick:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(this.$touchScrollingSub&&this.$touchScrollingSub[0]==e.closest("ul")[0])return this.$touchScrollingSub=null,t.stopPropagation(),!1;if(this.$root.triggerHandler("click.smapi",e[0])===!1)return!1;var i=$(t.target).is(".sub-arrow"),s=e.dataSM("sub"),o=s?2==s.dataSM("level"):!1,a=this.isCollapsible(),n=/toggle$/.test(this.opts.collapsibleBehavior),r=/link$/.test(this.opts.collapsibleBehavior),h=/^accordion/.test(this.opts.collapsibleBehavior);if(s&&!s.is(":visible")){if((!r||!a||i)&&(this.opts.showOnClick&&o&&(this.clickActivated=!0),this.itemActivate(e,h),s.is(":visible")))return this.focusActivated=!0,!1}else if(a&&(n||i))return this.itemActivate(e,h),this.menuHide(s),n&&(this.focusActivated=!1),!1;return this.opts.showOnClick&&o||e.hasClass("disabled")||this.$root.triggerHandler("select.smapi",e[0])===!1?!1:void 0}},itemDown:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&e.dataSM("mousedown",!0)},itemEnter:function(t){var e=$(t.currentTarget);if(this.handleItemEvents(e)){if(!this.isTouchMode()){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);var i=this;this.showTimeout=setTimeout(function(){i.itemActivate(e)},this.opts.showOnClick&&1==e.closest("ul").dataSM("level")?1:this.opts.showTimeout)}this.$root.triggerHandler("mouseenter.smapi",e[0])}},itemFocus:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(!this.focusActivated||this.isTouchMode()&&e.dataSM("mousedown")||this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0]==e[0]||this.itemActivate(e,!0),this.$root.triggerHandler("focus.smapi",e[0]))},itemLeave:function(t){var e=$(t.currentTarget);this.handleItemEvents(e)&&(this.isTouchMode()||(e[0].blur(),this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0)),e.removeDataSM("mousedown"),this.$root.triggerHandler("mouseleave.smapi",e[0]))},menuHide:function(t){if(this.$root.triggerHandler("beforehide.smapi",t[0])!==!1&&(canAnimate&&t.stop(!0,!0),"none"!=t.css("display"))){var e=function(){t.css("z-index","")};this.isCollapsible()?canAnimate&&this.opts.collapsibleHideFunction?this.opts.collapsibleHideFunction.call(this,t,e):t.hide(this.opts.collapsibleHideDuration,e):canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,t,e):t.hide(this.opts.hideDuration,e),t.dataSM("scroll")&&(this.menuScrollStop(t),t.css({"touch-action":"","-ms-touch-action":"","-webkit-transform":"",transform:""}).off(".smartmenus_scroll").removeDataSM("scroll").dataSM("scroll-arrows").hide()),t.dataSM("parent-a").removeClass("highlighted").attr("aria-expanded","false"),t.attr({"aria-expanded":"false","aria-hidden":"true"});var i=t.dataSM("level");this.activatedItems.splice(i-1,1),this.visibleSubMenus.splice($.inArray(t,this.visibleSubMenus),1),this.$root.triggerHandler("hide.smapi",t[0])}},menuHideAll:function(){this.showTimeout&&(clearTimeout(this.showTimeout),this.showTimeout=0);for(var t=this.opts.isPopup?1:0,e=this.visibleSubMenus.length-1;e>=t;e--)this.menuHide(this.visibleSubMenus[e]);this.opts.isPopup&&(canAnimate&&this.$root.stop(!0,!0),this.$root.is(":visible")&&(canAnimate&&this.opts.hideFunction?this.opts.hideFunction.call(this,this.$root):this.$root.hide(this.opts.hideDuration))),this.activatedItems=[],this.visibleSubMenus=[],this.clickActivated=!1,this.focusActivated=!1,this.zIndexInc=0,this.$root.triggerHandler("hideAll.smapi")},menuHideSubMenus:function(t){for(var e=this.activatedItems.length-1;e>=t;e--){var i=this.activatedItems[e].dataSM("sub");i&&this.menuHide(i)}},menuInit:function(t){if(!t.dataSM("in-mega")){t.hasClass("mega-menu")&&t.find("ul").dataSM("in-mega",!0);for(var e=2,i=t[0];(i=i.parentNode.parentNode)!=this.$root[0];)e++;var s=t.prevAll("a").eq(-1);s.length||(s=t.prevAll().find("a").eq(-1)),s.addClass("has-submenu").dataSM("sub",t),t.dataSM("parent-a",s).dataSM("level",e).parent().dataSM("sub",t);var o=s.attr("id")||this.accessIdPrefix+ ++this.idInc,a=t.attr("id")||this.accessIdPrefix+ ++this.idInc;s.attr({id:o,"aria-haspopup":"true","aria-controls":a,"aria-expanded":"false"}),t.attr({id:a,role:"group","aria-hidden":"true","aria-labelledby":o,"aria-expanded":"false"}),this.opts.subIndicators&&s[this.opts.subIndicatorsPos](this.$subArrow.clone())}},menuPosition:function(t){var e,i,s=t.dataSM("parent-a"),o=s.closest("li"),a=o.parent(),n=t.dataSM("level"),r=this.getWidth(t),h=this.getHeight(t),u=s.offset(),l=u.left,c=u.top,d=this.getWidth(s),m=this.getHeight(s),p=$(window),f=p.scrollLeft(),v=p.scrollTop(),b=this.getViewportWidth(),S=this.getViewportHeight(),g=a.parent().is("[data-sm-horizontal-sub]")||2==n&&!a.hasClass("sm-vertical"),M=this.opts.rightToLeftSubMenus&&!o.is("[data-sm-reverse]")||!this.opts.rightToLeftSubMenus&&o.is("[data-sm-reverse]"),w=2==n?this.opts.mainMenuSubOffsetX:this.opts.subMenusSubOffsetX,T=2==n?this.opts.mainMenuSubOffsetY:this.opts.subMenusSubOffsetY;if(g?(e=M?d-r-w:w,i=this.opts.bottomToTopSubMenus?-h-T:m+T):(e=M?w-r:d-w,i=this.opts.bottomToTopSubMenus?m-T-h:T),this.opts.keepInViewport){var y=l+e,I=c+i;if(M&&f>y?e=g?f-y+e:d-w:!M&&y+r>f+b&&(e=g?f+b-r-y+e:w-r),g||(S>h&&I+h>v+S?i+=v+S-h-I:(h>=S||v>I)&&(i+=v-I)),g&&(I+h>v+S+.49||v>I)||!g&&h>S+.49){var x=this;t.dataSM("scroll-arrows")||t.dataSM("scroll-arrows",$([$('')[0],$('')[0]]).on({mouseenter:function(){t.dataSM("scroll").up=$(this).hasClass("scroll-up"),x.menuScroll(t)},mouseleave:function(e){x.menuScrollStop(t),x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(t){t.preventDefault()}}).insertAfter(t));var A=".smartmenus_scroll";if(t.dataSM("scroll",{y:this.cssTransforms3d?0:i-m,step:1,itemH:m,subH:h,arrowDownH:this.getHeight(t.dataSM("scroll-arrows").eq(1))}).on(getEventsNS({mouseover:function(e){x.menuScrollOver(t,e)},mouseout:function(e){x.menuScrollOut(t,e)},"mousewheel DOMMouseScroll":function(e){x.menuScrollMousewheel(t,e)}},A)).dataSM("scroll-arrows").css({top:"auto",left:"0",marginLeft:e+(parseInt(t.css("border-left-width"))||0),width:r-(parseInt(t.css("border-left-width"))||0)-(parseInt(t.css("border-right-width"))||0),zIndex:t.css("z-index")}).eq(g&&this.opts.bottomToTopSubMenus?0:1).show(),this.isFixed()){var C={};C[touchEvents?"touchstart touchmove touchend":"pointerdown pointermove pointerup MSPointerDown MSPointerMove MSPointerUp"]=function(e){x.menuScrollTouch(t,e)},t.css({"touch-action":"none","-ms-touch-action":"none"}).on(getEventsNS(C,A))}}}t.css({top:"auto",left:"0",marginLeft:e,marginTop:i-m})},menuScroll:function(t,e,i){var s,o=t.dataSM("scroll"),a=t.dataSM("scroll-arrows"),n=o.up?o.upEnd:o.downEnd;if(!e&&o.momentum){if(o.momentum*=.92,s=o.momentum,.5>s)return this.menuScrollStop(t),void 0}else s=i||(e||!this.opts.scrollAccelerate?this.opts.scrollStep:Math.floor(o.step));var r=t.dataSM("level");if(this.activatedItems[r-1]&&this.activatedItems[r-1].dataSM("sub")&&this.activatedItems[r-1].dataSM("sub").is(":visible")&&this.menuHideSubMenus(r-1),o.y=o.up&&o.y>=n||!o.up&&n>=o.y?o.y:Math.abs(n-o.y)>s?o.y+(o.up?s:-s):n,t.css(this.cssTransforms3d?{"-webkit-transform":"translate3d(0, "+o.y+"px, 0)",transform:"translate3d(0, "+o.y+"px, 0)"}:{marginTop:o.y}),mouse&&(o.up&&o.y>o.downEnd||!o.up&&o.y0;t.dataSM("scroll-arrows").eq(i?0:1).is(":visible")&&(t.dataSM("scroll").up=i,this.menuScroll(t,!0))}e.preventDefault()},menuScrollOut:function(t,e){mouse&&(/^scroll-(up|down)/.test((e.relatedTarget||"").className)||(t[0]==e.relatedTarget||$.contains(t[0],e.relatedTarget))&&this.getClosestMenu(e.relatedTarget)==t[0]||t.dataSM("scroll-arrows").css("visibility","hidden"))},menuScrollOver:function(t,e){if(mouse&&!/^scroll-(up|down)/.test(e.target.className)&&this.getClosestMenu(e.target)==t[0]){this.menuScrollRefreshData(t);var i=t.dataSM("scroll"),s=$(window).scrollTop()-t.dataSM("parent-a").offset().top-i.itemH;t.dataSM("scroll-arrows").eq(0).css("margin-top",s).end().eq(1).css("margin-top",s+this.getViewportHeight()-i.arrowDownH).end().css("visibility","visible")}},menuScrollRefreshData:function(t){var e=t.dataSM("scroll"),i=$(window).scrollTop()-t.dataSM("parent-a").offset().top-e.itemH;this.cssTransforms3d&&(i=-(parseFloat(t.css("margin-top"))-i)),$.extend(e,{upEnd:i,downEnd:i+this.getViewportHeight()-e.subH})},menuScrollStop:function(t){return this.scrollTimeout?(cancelAnimationFrame(this.scrollTimeout),this.scrollTimeout=0,t.dataSM("scroll").step=1,!0):void 0},menuScrollTouch:function(t,e){if(e=e.originalEvent,isTouchEvent(e)){var i=this.getTouchPoint(e);if(this.getClosestMenu(i.target)==t[0]){var s=t.dataSM("scroll");if(/(start|down)$/i.test(e.type))this.menuScrollStop(t)?(e.preventDefault(),this.$touchScrollingSub=t):this.$touchScrollingSub=null,this.menuScrollRefreshData(t),$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp});else if(/move$/i.test(e.type)){var o=void 0!==s.touchY?s.touchY:s.touchStartY;if(void 0!==o&&o!=i.pageY){this.$touchScrollingSub=t;var a=i.pageY>o;void 0!==s.up&&s.up!=a&&$.extend(s,{touchStartY:i.pageY,touchStartTime:e.timeStamp}),$.extend(s,{up:a,touchY:i.pageY}),this.menuScroll(t,!0,Math.abs(i.pageY-o))}e.preventDefault()}else void 0!==s.touchY&&((s.momentum=15*Math.pow(Math.abs(i.pageY-s.touchStartY)/(e.timeStamp-s.touchStartTime),2))&&(this.menuScrollStop(t),this.menuScroll(t),e.preventDefault()),delete s.touchY)}}},menuShow:function(t){if((t.dataSM("beforefirstshowfired")||(t.dataSM("beforefirstshowfired",!0),this.$root.triggerHandler("beforefirstshow.smapi",t[0])!==!1))&&this.$root.triggerHandler("beforeshow.smapi",t[0])!==!1&&(t.dataSM("shown-before",!0),canAnimate&&t.stop(!0,!0),!t.is(":visible"))){var e=t.dataSM("parent-a"),i=this.isCollapsible();if((this.opts.keepHighlighted||i)&&e.addClass("highlighted"),i)t.removeClass("sm-nowrap").css({zIndex:"",width:"auto",minWidth:"",maxWidth:"",top:"",left:"",marginLeft:"",marginTop:""});else{if(t.css("z-index",this.zIndexInc=(this.zIndexInc||this.getStartZIndex())+1),(this.opts.subMenusMinWidth||this.opts.subMenusMaxWidth)&&(t.css({width:"auto",minWidth:"",maxWidth:""}).addClass("sm-nowrap"),this.opts.subMenusMinWidth&&t.css("min-width",this.opts.subMenusMinWidth),this.opts.subMenusMaxWidth)){var s=this.getWidth(t);t.css("max-width",this.opts.subMenusMaxWidth),s>this.getWidth(t)&&t.removeClass("sm-nowrap").css("width",this.opts.subMenusMaxWidth)}this.menuPosition(t)}var o=function(){t.css("overflow","")};i?canAnimate&&this.opts.collapsibleShowFunction?this.opts.collapsibleShowFunction.call(this,t,o):t.show(this.opts.collapsibleShowDuration,o):canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,t,o):t.show(this.opts.showDuration,o),e.attr("aria-expanded","true"),t.attr({"aria-expanded":"true","aria-hidden":"false"}),this.visibleSubMenus.push(t),this.$root.triggerHandler("show.smapi",t[0])}},popupHide:function(t){this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0);var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},t?1:this.opts.hideTimeout)},popupShow:function(t,e){if(!this.opts.isPopup)return alert('SmartMenus jQuery Error:\n\nIf you want to show this menu via the "popupShow" method, set the isPopup:true option.'),void 0;if(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),this.$root.dataSM("shown-before",!0),canAnimate&&this.$root.stop(!0,!0),!this.$root.is(":visible")){this.$root.css({left:t,top:e});var i=this,s=function(){i.$root.css("overflow","")};canAnimate&&this.opts.showFunction?this.opts.showFunction.call(this,this.$root,s):this.$root.show(this.opts.showDuration,s),this.visibleSubMenus[0]=this.$root}},refresh:function(){this.destroy(!0),this.init(!0)},rootKeyDown:function(t){if(this.handleEvents())switch(t.keyCode){case 27:var e=this.activatedItems[0];if(e){this.menuHideAll(),e[0].focus();var i=e.dataSM("sub");i&&this.menuHide(i)}break;case 32:var s=$(t.target);if(s.is("a")&&this.handleItemEvents(s)){var i=s.dataSM("sub");i&&!i.is(":visible")&&(this.itemClick({currentTarget:t.target}),t.preventDefault())}}},rootOut:function(t){if(this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&(this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0),!this.opts.showOnClick||!this.opts.hideOnClick)){var e=this;this.hideTimeout=setTimeout(function(){e.menuHideAll()},this.opts.hideTimeout)}},rootOver:function(t){this.handleEvents()&&!this.isTouchMode()&&t.target!=this.$root[0]&&this.hideTimeout&&(clearTimeout(this.hideTimeout),this.hideTimeout=0)},winResize:function(t){if(this.handleEvents()){if(!("onorientationchange"in window)||"orientationchange"==t.type){var e=this.isCollapsible();this.wasCollapsible&&e||(this.activatedItems.length&&this.activatedItems[this.activatedItems.length-1][0].blur(),this.menuHideAll()),this.wasCollapsible=e}}else if(this.$disableOverlay){var i=this.$root.offset();this.$disableOverlay.css({top:i.top,left:i.left,width:this.$root.outerWidth(),height:this.$root.outerHeight()})}}}}),$.fn.dataSM=function(t,e){return e?this.data(t+"_smartmenus",e):this.data(t+"_smartmenus")},$.fn.removeDataSM=function(t){return this.removeData(t+"_smartmenus")},$.fn.smartmenus=function(options){if("string"==typeof options){var args=arguments,method=options;return Array.prototype.shift.call(args),this.each(function(){var t=$(this).data("smartmenus");t&&t[method]&&t[method].apply(t,args)})}return this.each(function(){var dataOpts=$(this).data("sm-options")||null;if(dataOpts)try{dataOpts=eval("("+dataOpts+")")}catch(e){dataOpts=null,alert('ERROR\n\nSmartMenus jQuery init:\nInvalid "data-sm-options" attribute value syntax.')}new $.SmartMenus(this,$.extend({},$.fn.smartmenus.defaults,options,dataOpts))})},$.fn.smartmenus.defaults={isPopup:!1,mainMenuSubOffsetX:0,mainMenuSubOffsetY:0,subMenusSubOffsetX:0,subMenusSubOffsetY:0,subMenusMinWidth:"10em",subMenusMaxWidth:"20em",subIndicators:!0,subIndicatorsPos:"append",subIndicatorsText:"",scrollStep:30,scrollAccelerate:!0,showTimeout:250,hideTimeout:500,showDuration:0,showFunction:null,hideDuration:0,hideFunction:function(t,e){t.fadeOut(200,e)},collapsibleShowDuration:0,collapsibleShowFunction:function(t,e){t.slideDown(200,e)},collapsibleHideDuration:0,collapsibleHideFunction:function(t,e){t.slideUp(200,e)},showOnClick:!1,hideOnClick:!0,noMouseOver:!1,keepInViewport:!0,keepHighlighted:!0,markCurrentItem:!1,markCurrentTree:!0,rightToLeftSubMenus:!1,bottomToTopSubMenus:!1,collapsibleBehavior:"default"},$}); \ No newline at end of file diff --git a/reference/logging_8h.html b/reference/logging_8h.html new file mode 100644 index 00000000..03674346 --- /dev/null +++ b/reference/logging_8h.html @@ -0,0 +1,325 @@ + + + + + + + +Albert: albert/include/albert/logging.h File Reference + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+ +
logging.h File Reference
+
+
+
#include <QLoggingCategory>
+
+

Go to the source code of this file.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define ALBERT_LOGGING_CATEGORY(name)   Q_LOGGING_CATEGORY(AlbertLoggingCategory, "albert." name)
 Defines the logging category used in DEBG, INFO, WARN, CRIT, GWARN, GCRIT. More...
 
#define DEBG   qCDebug(AlbertLoggingCategory,).noquote()
 Creates a log object (level debug) you can use to pipe text into (<<). More...
 
#define INFO   qCInfo(AlbertLoggingCategory,).noquote()
 Creates a log object (level info) you can use to pipe text into (<<). More...
 
#define WARN   qCWarning(AlbertLoggingCategory,).noquote()
 Creates a log object (level warning) you can use to pipe text into (<<). More...
 
#define CRIT   qCCritical(AlbertLoggingCategory,).noquote()
 Creates a log object (level critial) you can use to pipe text into (<<). More...
 
#define GINFO(message)
 Logs and shows a messagebox (level warning). More...
 
#define GWARN(message)
 Logs and shows a messagebox (level warning). More...
 
#define GCRIT(message)
 Logs and shows a messagebox (level critical). More...
 
+

Macro Definition Documentation

+ +

◆ ALBERT_LOGGING_CATEGORY

+ +
+
+ + + + + + + + +
#define ALBERT_LOGGING_CATEGORY( name)   Q_LOGGING_CATEGORY(AlbertLoggingCategory, "albert." name)
+
+ +

Defines the logging category used in DEBG, INFO, WARN, CRIT, GWARN, GCRIT.

+
Parameters
+ + +
nameThe name of the logging category
+
+
+ +
+
+ +

◆ CRIT

+ +
+
+ + + + +
#define CRIT   qCCritical(AlbertLoggingCategory,).noquote()
+
+ +

Creates a log object (level critial) you can use to pipe text into (<<).

+ +
+
+ +

◆ DEBG

+ +
+
+ + + + +
#define DEBG   qCDebug(AlbertLoggingCategory,).noquote()
+
+ +

Creates a log object (level debug) you can use to pipe text into (<<).

+ +
+
+ +

◆ GCRIT

+ +
+
+ + + + + + + + +
#define GCRIT( message)
+
+Value:
do{ \
+
CRIT << message; \
+
QMessageBox::critical(nullptr, qApp->applicationDisplayName(), message); \
+
} while(0)
+
#define CRIT
Creates a log object (level critial) you can use to pipe text into (<<).
Definition: logging.h:22
+
+

Logs and shows a messagebox (level critical).

+
Parameters
+ + +
messageThe message
+
+
+ +
+
+ +

◆ GINFO

+ +
+
+ + + + + + + + +
#define GINFO( message)
+
+Value:
do{ \
+
INFO << message; \
+
QMessageBox::information(nullptr, qApp->applicationDisplayName(), message); \
+
} while(0)
+
#define INFO
Creates a log object (level info) you can use to pipe text into (<<).
Definition: logging.h:16
+
+

Logs and shows a messagebox (level warning).

+
Parameters
+ + +
messageThe message
+
+
+ +
+
+ +

◆ GWARN

+ +
+
+ + + + + + + + +
#define GWARN( message)
+
+Value:
do{ \
+
WARN << message; \
+
QMessageBox::warning(nullptr, qApp->applicationDisplayName(), message); \
+
} while(0)
+
#define WARN
Creates a log object (level warning) you can use to pipe text into (<<).
Definition: logging.h:19
+
+

Logs and shows a messagebox (level warning).

+
Parameters
+ + +
messageThe message
+
+
+ +
+
+ +

◆ INFO

+ +
+
+ + + + +
#define INFO   qCInfo(AlbertLoggingCategory,).noquote()
+
+ +

Creates a log object (level info) you can use to pipe text into (<<).

+ +
+
+ +

◆ WARN

+ +
+
+ + + + +
#define WARN   qCWarning(AlbertLoggingCategory,).noquote()
+
+ +

Creates a log object (level warning) you can use to pipe text into (<<).

+ +
+
+
+
+ + + + diff --git a/reference/logging_8h.js b/reference/logging_8h.js new file mode 100644 index 00000000..2911b5f8 --- /dev/null +++ b/reference/logging_8h.js @@ -0,0 +1,11 @@ +var logging_8h = +[ + [ "ALBERT_LOGGING_CATEGORY", "logging_8h.html#addad4c9bbb31f10c906b4c150304ac71", null ], + [ "CRIT", "logging_8h.html#a44ad7a1cce3ba64ff004aa697be1a079", null ], + [ "DEBG", "logging_8h.html#aebe3da5ae2400e467893e8c51de8736d", null ], + [ "GCRIT", "logging_8h.html#ac4beb0cd6b787de476fbf5db45291b67", null ], + [ "GINFO", "logging_8h.html#af1a6e484a3ddad4bd0e51e44bff0abff", null ], + [ "GWARN", "logging_8h.html#a9416f0366c1512a9b7049965498ac582", null ], + [ "INFO", "logging_8h.html#ae1103fea1e1b3c41ca3322d5389f7162", null ], + [ "WARN", "logging_8h.html#a271d8f7f52be750e5c744a394ec71344", null ] +]; \ No newline at end of file diff --git a/reference/logging_8h_source.html b/reference/logging_8h_source.html new file mode 100644 index 00000000..00f75e94 --- /dev/null +++ b/reference/logging_8h_source.html @@ -0,0 +1,140 @@ + + + + + + + +Albert: albert/include/albert/logging.h Source File + + + + + + + + + + + + + + + +
+
+ + + + + + + +
+
Albert +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+
+
+
+
+
Loading...
+
Searching...
+
No Matches
+
+
+
+
+ +
+
logging.h
+
+
+Go to the documentation of this file.
1// Copyright (c) 2022 Manuel Schneider
+
2
+
3#pragma once
+
4#include <QLoggingCategory>
+
5
+
6Q_DECLARE_LOGGING_CATEGORY(AlbertLoggingCategory)
+
7
+
8
+
10#define ALBERT_LOGGING_CATEGORY(name) Q_LOGGING_CATEGORY(AlbertLoggingCategory, "albert." name)
+
11
+
13#define DEBG qCDebug(AlbertLoggingCategory,).noquote()
+
14
+
16#define INFO qCInfo(AlbertLoggingCategory,).noquote()
+
17
+
19#define WARN qCWarning(AlbertLoggingCategory,).noquote()
+
20
+
22#define CRIT qCCritical(AlbertLoggingCategory,).noquote()
+
23
+
26#define GINFO(message) do{ \
+
27 INFO << message; \
+
28 QMessageBox::information(nullptr, qApp->applicationDisplayName(), message); \
+
29} while(0)
+
30
+
33#define GWARN(message) do{ \
+
34 WARN << message; \
+
35 QMessageBox::warning(nullptr, qApp->applicationDisplayName(), message); \
+
36} while(0)
+
37
+
40#define GCRIT(message) do{ \
+
41 CRIT << message; \
+
42 QMessageBox::critical(nullptr, qApp->applicationDisplayName(), message); \
+
43} while(0)
+
+
+ + + + diff --git a/reference/menu.js b/reference/menu.js new file mode 100644 index 00000000..b0b26936 --- /dev/null +++ b/reference/menu.js @@ -0,0 +1,136 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function initMenu(relPath,searchEnabled,serverSide,searchPage,search) { + function makeTree(data,relPath) { + var result=''; + if ('children' in data) { + result+='
    '; + for (var i in data.children) { + var url; + var link; + link = data.children[i].url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + } else { + url = relPath+link; + } + result+='
  • '+ + data.children[i].text+''+ + makeTree(data.children[i],relPath)+'
  • '; + } + result+='
'; + } + return result; + } + var searchBoxHtml; + if (searchEnabled) { + if (serverSide) { + searchBoxHtml='
'+ + '
'+ + '
 '+ + ''+ + '
'+ + '
'+ + '
'+ + '
'; + } else { + searchBoxHtml='
'+ + ''+ + ' '+ + ''+ + ''+ + ''+ + ''+ + ''+ + '
'; + } + } + + $('#main-nav').before('
'+ + ''+ + ''+ + '
'); + $('#main-nav').append(makeTree(menudata,relPath)); + $('#main-nav').children(':first').addClass('sm sm-dox').attr('id','main-menu'); + if (searchBoxHtml) { + $('#main-menu').append('
  • '); + } + var $mainMenuState = $('#main-menu-state'); + var prevWidth = 0; + if ($mainMenuState.length) { + function initResizableIfExists() { + if (typeof initResizable==='function') initResizable(); + } + // animate mobile menu + $mainMenuState.change(function(e) { + var $menu = $('#main-menu'); + var options = { duration: 250, step: initResizableIfExists }; + if (this.checked) { + options['complete'] = function() { $menu.css('display', 'block') }; + $menu.hide().slideDown(options); + } else { + options['complete'] = function() { $menu.css('display', 'none') }; + $menu.show().slideUp(options); + } + }); + // set default menu visibility + function resetState() { + var $menu = $('#main-menu'); + var $mainMenuState = $('#main-menu-state'); + var newWidth = $(window).outerWidth(); + if (newWidth!=prevWidth) { + if ($(window).outerWidth()<768) { + $mainMenuState.prop('checked',false); $menu.hide(); + $('#searchBoxPos1').html(searchBoxHtml); + $('#searchBoxPos2').hide(); + } else { + $menu.show(); + $('#searchBoxPos1').empty(); + $('#searchBoxPos2').html(searchBoxHtml); + $('#searchBoxPos2').show(); + } + if (typeof searchBox!=='undefined') { + searchBox.CloseResultsWindow(); + } + prevWidth = newWidth; + } + } + $(window).ready(function() { resetState(); initResizableIfExists(); }); + $(window).resize(resetState); + } + $('#main-menu').smartmenus(); +} +/* @license-end */ diff --git a/reference/menudata.js b/reference/menudata.js new file mode 100644 index 00000000..49e723eb --- /dev/null +++ b/reference/menudata.js @@ -0,0 +1,105 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file +*/ +var menudata={children:[ +{text:"Main Page",url:"index.html"}, +{text:"Namespaces",url:"namespaces.html",children:[ +{text:"Namespace List",url:"namespaces.html"}, +{text:"Namespace Members",url:"namespacemembers.html",children:[ +{text:"All",url:"namespacemembers.html"}, +{text:"Functions",url:"namespacemembers_func.html"}, +{text:"Enumerations",url:"namespacemembers_enum.html"}]}]}, +{text:"Classes",url:"annotated.html",children:[ +{text:"Class List",url:"annotated.html"}, +{text:"Class Index",url:"classes.html"}, +{text:"Class Hierarchy",url:"hierarchy.html"}, +{text:"Class Members",url:"functions.html",children:[ +{text:"All",url:"functions.html",children:[ +{text:":",url:"functions.html#index_:"}, +{text:"a",url:"functions.html#index_a"}, +{text:"b",url:"functions.html#index_b"}, +{text:"c",url:"functions.html#index_c"}, +{text:"d",url:"functions.html#index_d"}, +{text:"e",url:"functions.html#index_e"}, +{text:"f",url:"functions.html#index_f"}, +{text:"g",url:"functions.html#index_g"}, +{text:"h",url:"functions.html#index_h"}, +{text:"i",url:"functions.html#index_i"}, +{text:"l",url:"functions.html#index_l"}, +{text:"m",url:"functions.html#index_m"}, +{text:"n",url:"functions.html#index_n"}, +{text:"o",url:"functions.html#index_o"}, +{text:"p",url:"functions.html#index_p"}, +{text:"q",url:"functions.html#index_q"}, +{text:"r",url:"functions.html#index_r"}, +{text:"s",url:"functions.html#index_s"}, +{text:"t",url:"functions.html#index_t"}, +{text:"u",url:"functions.html#index_u"}, +{text:"v",url:"functions.html#index_v"}, +{text:"w",url:"functions.html#index_w"}, +{text:"~",url:"functions.html#index__7E"}]}, +{text:"Functions",url:"functions_func.html",children:[ +{text:"a",url:"functions_func.html#index_a"}, +{text:"b",url:"functions_func.html#index_b"}, +{text:"c",url:"functions_func.html#index_c"}, +{text:"d",url:"functions_func.html#index_d"}, +{text:"e",url:"functions_func.html#index_e"}, +{text:"f",url:"functions_func.html#index_f"}, +{text:"g",url:"functions_func.html#index_g"}, +{text:"h",url:"functions_func.html#index_h"}, +{text:"i",url:"functions_func.html#index_i"}, +{text:"l",url:"functions_func.html#index_l"}, +{text:"m",url:"functions_func.html#index_m"}, +{text:"n",url:"functions_func.html#index_n"}, +{text:"o",url:"functions_func.html#index_o"}, +{text:"p",url:"functions_func.html#index_p"}, +{text:"q",url:"functions_func.html#index_q"}, +{text:"r",url:"functions_func.html#index_r"}, +{text:"s",url:"functions_func.html#index_s"}, +{text:"t",url:"functions_func.html#index_t"}, +{text:"u",url:"functions_func.html#index_u"}, +{text:"w",url:"functions_func.html#index_w"}, +{text:"~",url:"functions_func.html#index__7E"}]}, +{text:"Variables",url:"functions_vars.html",children:[ +{text:"a",url:"functions_vars.html#index_a"}, +{text:"b",url:"functions_vars.html#index_b"}, +{text:"d",url:"functions_vars.html#index_d"}, +{text:"f",url:"functions_vars.html#index_f"}, +{text:"i",url:"functions_vars.html#index_i"}, +{text:"l",url:"functions_vars.html#index_l"}, +{text:"m",url:"functions_vars.html#index_m"}, +{text:"n",url:"functions_vars.html#index_n"}, +{text:"p",url:"functions_vars.html#index_p"}, +{text:"r",url:"functions_vars.html#index_r"}, +{text:"s",url:"functions_vars.html#index_s"}, +{text:"t",url:"functions_vars.html#index_t"}, +{text:"u",url:"functions_vars.html#index_u"}, +{text:"v",url:"functions_vars.html#index_v"}]}, +{text:"Related Functions",url:"functions_rela.html"}]}]}, +{text:"Files",url:"files.html",children:[ +{text:"File List",url:"files.html"}, +{text:"File Members",url:"globals.html",children:[ +{text:"All",url:"globals.html"}, +{text:"Variables",url:"globals_vars.html"}, +{text:"Macros",url:"globals_defs.html"}]}]}]} diff --git a/reference/namespacealbert.html b/reference/namespacealbert.html new file mode 100644 index 00000000..4bd32b90 --- /dev/null +++ b/reference/namespacealbert.html @@ -0,0 +1,756 @@ + + + + + + + +Albert: albert Namespace Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    albert Namespace Reference
    +
    +
    + + + + +

    +Namespaces

    namespace  plugin
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Classes

    class  Action
     Action used by items. More...
     
    class  BackgroundExecutor
     Provides a lean interface for recurring indexing tasks. More...
     
    class  Extension
     Interface for objects of the extension system. More...
     
    class  ExtensionPluginInstance
     Convenience template class for the most common case of a plugin providing exactly one extension. More...
     
    class  ExtensionRegistry
     The common extension registry. More...
     
    class  ExtensionWatcher
     Non-QObject extension registry observer. More...
     
    class  FallbackHandler
     Fallback providing extension. More...
     
    class  Frontend
     The interface for albert frontends. More...
     
    class  GlobalQueryHandler
     Global search query handler class. More...
     
    class  IconProvider
     Generic pixmap provider. More...
     
    class  IndexItem
     The eligible for the internal index of IndexQueryHandler. More...
     
    class  IndexQueryHandler
     Index query handler class. More...
     
    class  InputHistory
     Input history class. More...
     
    class  Item
     Items displayed in the query results list. More...
     
    class  Notification
     A system tray notification. More...
     
    class  PluginInstance
     Abstract plugin instance class. More...
     
    class  PluginLoader
     Abstract plugin loader class used by the plugin registry. More...
     
    class  PluginMetaData
     Common plugin metadata of all plugins. More...
     
    class  PluginProvider
     Interface class for a plugin providing extension. More...
     
    class  Query
     Interface class for queries used by frontends. More...
     
    class  RankItem
     Scored item Used to rank item results of mutliple handlers. More...
     
    class  StandardItem
     General purpose value type Item implememtation. More...
     
    class  TriggerQueryHandler
     Triggered query handler class. More...
     
    + + + + + + + +

    +Enumerations

    enum class  PluginState { Unloaded +, Busy +, Loaded + }
     The state of the plugin. More...
     
    enum class  LoadType { Frontend +, NoUnload +, User + }
     The load type of the plugin. More...
     
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    +Functions

    ALBERT_EXPORT QNetworkAccessManager * networkManager ()
     The global QNetworkAccessManager. More...
     
    ALBERT_EXPORT void show (const QString &text=QString())
     Show the main window. More...
     
    ALBERT_EXPORT void hide ()
     Hide the main window. More...
     
    ALBERT_EXPORT void toggle ()
     Toggle visibility of main window. More...
     
    ALBERT_EXPORT void showSettings (QString plugin_id={})
     Open/Show the settings window (of plugin). More...
     
    ALBERT_EXPORT void restart ()
     Restart the app. More...
     
    ALBERT_EXPORT void quit ()
     Quit the app. More...
     
    ALBERT_EXPORT QString configLocation ()
     The app config location. More...
     
    ALBERT_EXPORT QString cacheLocation ()
     The app cache location. More...
     
    ALBERT_EXPORT QString dataLocation ()
     The app data location. More...
     
    ALBERT_EXPORT std::unique_ptr< QSettings > settings ()
     Persistent app settings. @reentrant. More...
     
    ALBERT_EXPORT std::unique_ptr< QSettings > state ()
     The persistent app state. @reentrant. More...
     
    ALBERT_EXPORT void openWebsite ()
     Open the albert website in default browser. More...
     
    ALBERT_EXPORT void openUrl (const QUrl &url)
     Open the specified url in default browser. More...
     
    ALBERT_EXPORT void openUrl (const QString &url)
     Open the specified url in default browser. More...
     
    ALBERT_EXPORT void openIssueTracker ()
     Open the albert issue tracker in default browser. More...
     
    ALBERT_EXPORT void setClipboardText (const QString &text)
     Set the system clipboard. More...
     
    ALBERT_EXPORT void setClipboardTextAndPaste (const QString &text)
     Set the system clipboard and paste the content to the front-most window. More...
     
    ALBERT_EXPORT long long runDetachedProcess (const QStringList &commandline, const QString &working_dir={})
     Run a detached process. More...
     
    ALBERT_EXPORT void runTerminal (const QString &script={}, const QString &working_dir={}, bool close_on_exit=false)
     Run a script in the user defined terminal. More...
     
    +

    Enumeration Type Documentation

    + +

    ◆ LoadType

    + +
    +
    + + + + + +
    + + + + +
    enum class albert::LoadType
    +
    +strong
    +
    + +

    The load type of the plugin.

    +

    Some plugins have to be treated differently when loading. E.g. a frontends are an integral part of the app, there has to be exactly one frontend which will be loaded before any other plugins. Some other pluins cannot be safely unloaded at runtime (e.g. Python).

    + + + + +
    Enumerator
    Frontend 

    Specifies wheter this plugin implements the Frontend interface.

    +
    NoUnload 

    Specifies wheter this plugin should prohibit unloading.

    +
    User 

    Specifies wheter this plugin should be user (un-)loadable.

    +
    + +
    +
    + +

    ◆ PluginState

    + +
    +
    + + + + + +
    + + + + +
    enum class albert::PluginState
    +
    +strong
    +
    + +

    The state of the plugin.

    + + + + +
    Enumerator
    Unloaded 

    The plugin is valid and ready to be loaded.

    +
    Busy 

    The plugin is busy loading or unloading.

    +
    Loaded 

    The plugin is loaded and ready.

    +
    + +
    +
    +

    Function Documentation

    + +

    ◆ cacheLocation()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT QString albert::cacheLocation ()
    +
    + +

    The app cache location.

    + +
    +
    + +

    ◆ configLocation()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT QString albert::configLocation ()
    +
    + +

    The app config location.

    + +
    +
    + +

    ◆ dataLocation()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT QString albert::dataLocation ()
    +
    + +

    The app data location.

    + +
    +
    + +

    ◆ hide()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT void albert::hide ()
    +
    + +

    Hide the main window.

    + +
    +
    + +

    ◆ networkManager()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT QNetworkAccessManager * albert::networkManager ()
    +
    + +

    The global QNetworkAccessManager.

    + +
    +
    + +

    ◆ openIssueTracker()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT void albert::openIssueTracker ()
    +
    + +

    Open the albert issue tracker in default browser.

    + +
    +
    + +

    ◆ openUrl() [1/2]

    + +
    +
    + + + + + + + + +
    ALBERT_EXPORT void albert::openUrl (const QString & url)
    +
    + +

    Open the specified url in default browser.

    + +
    +
    + +

    ◆ openUrl() [2/2]

    + +
    +
    + + + + + + + + +
    ALBERT_EXPORT void albert::openUrl (const QUrl & url)
    +
    + +

    Open the specified url in default browser.

    + +
    +
    + +

    ◆ openWebsite()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT void albert::openWebsite ()
    +
    + +

    Open the albert website in default browser.

    + +
    +
    + +

    ◆ quit()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT void albert::quit ()
    +
    + +

    Quit the app.

    + +
    +
    + +

    ◆ restart()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT void albert::restart ()
    +
    + +

    Restart the app.

    + +
    +
    + +

    ◆ runDetachedProcess()

    + +
    +
    + + + + + + + + + + + + + + + + + + +
    ALBERT_EXPORT long long albert::runDetachedProcess (const QStringList & commandline,
    const QString & working_dir = {} 
    )
    +
    + +

    Run a detached process.

    + +
    +
    + +

    ◆ runTerminal()

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    ALBERT_EXPORT void albert::runTerminal (const QString & script = {},
    const QString & working_dir = {},
    bool close_on_exit = false 
    )
    +
    + +

    Run a script in the user defined terminal.

    + +
    +
    + +

    ◆ setClipboardText()

    + +
    +
    + + + + + + + + +
    ALBERT_EXPORT void albert::setClipboardText (const QString & text)
    +
    + +

    Set the system clipboard.

    + +
    +
    + +

    ◆ setClipboardTextAndPaste()

    + +
    +
    + + + + + + + + +
    ALBERT_EXPORT void albert::setClipboardTextAndPaste (const QString & text)
    +
    + +

    Set the system clipboard and paste the content to the front-most window.

    + +
    +
    + +

    ◆ settings()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT std::unique_ptr< QSettings > albert::settings ()
    +
    + +

    Persistent app settings. @reentrant.

    + +
    +
    + +

    ◆ show()

    + +
    +
    + + + + + + + + +
    ALBERT_EXPORT void albert::show (const QString & text = QString())
    +
    + +

    Show the main window.

    + +
    +
    + +

    ◆ showSettings()

    + +
    +
    + + + + + + + + +
    ALBERT_EXPORT void albert::showSettings (QString plugin_id = {})
    +
    + +

    Open/Show the settings window (of plugin).

    +
    Parameters
    + + +
    plugin_idId of the plugin whose settings should be displayed.
    +
    +
    + +
    +
    + +

    ◆ state()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT std::unique_ptr< QSettings > albert::state ()
    +
    + +

    The persistent app state. @reentrant.

    + +
    +
    + +

    ◆ toggle()

    + +
    +
    + + + + + + + +
    ALBERT_EXPORT void albert::toggle ()
    +
    + +

    Toggle visibility of main window.

    + +
    +
    +
    +
    + + + + diff --git a/reference/namespacealbert.js b/reference/namespacealbert.js new file mode 100644 index 00000000..5267f6aa --- /dev/null +++ b/reference/namespacealbert.js @@ -0,0 +1,57 @@ +var namespacealbert = +[ + [ "plugin", "namespacealbert_1_1plugin.html", "namespacealbert_1_1plugin" ], + [ "Action", "classalbert_1_1Action.html", "classalbert_1_1Action" ], + [ "BackgroundExecutor", "classalbert_1_1BackgroundExecutor.html", "classalbert_1_1BackgroundExecutor" ], + [ "Extension", "classalbert_1_1Extension.html", "classalbert_1_1Extension" ], + [ "ExtensionPluginInstance", "classalbert_1_1ExtensionPluginInstance.html", "classalbert_1_1ExtensionPluginInstance" ], + [ "ExtensionRegistry", "classalbert_1_1ExtensionRegistry.html", "classalbert_1_1ExtensionRegistry" ], + [ "ExtensionWatcher", "classalbert_1_1ExtensionWatcher.html", "classalbert_1_1ExtensionWatcher" ], + [ "FallbackHandler", "classalbert_1_1FallbackHandler.html", "classalbert_1_1FallbackHandler" ], + [ "Frontend", "classalbert_1_1Frontend.html", "classalbert_1_1Frontend" ], + [ "GlobalQueryHandler", "classalbert_1_1GlobalQueryHandler.html", "classalbert_1_1GlobalQueryHandler" ], + [ "IconProvider", "classalbert_1_1IconProvider.html", "classalbert_1_1IconProvider" ], + [ "IndexItem", "classalbert_1_1IndexItem.html", "classalbert_1_1IndexItem" ], + [ "IndexQueryHandler", "classalbert_1_1IndexQueryHandler.html", "classalbert_1_1IndexQueryHandler" ], + [ "InputHistory", "classalbert_1_1InputHistory.html", "classalbert_1_1InputHistory" ], + [ "Item", "classalbert_1_1Item.html", "classalbert_1_1Item" ], + [ "Notification", "classalbert_1_1Notification.html", "classalbert_1_1Notification" ], + [ "PluginInstance", "classalbert_1_1PluginInstance.html", "classalbert_1_1PluginInstance" ], + [ "PluginLoader", "classalbert_1_1PluginLoader.html", "classalbert_1_1PluginLoader" ], + [ "PluginMetaData", "classalbert_1_1PluginMetaData.html", "classalbert_1_1PluginMetaData" ], + [ "PluginProvider", "classalbert_1_1PluginProvider.html", "classalbert_1_1PluginProvider" ], + [ "Query", "classalbert_1_1Query.html", "classalbert_1_1Query" ], + [ "RankItem", "classalbert_1_1RankItem.html", "classalbert_1_1RankItem" ], + [ "StandardItem", "classalbert_1_1StandardItem.html", "classalbert_1_1StandardItem" ], + [ "TriggerQueryHandler", "classalbert_1_1TriggerQueryHandler.html", "classalbert_1_1TriggerQueryHandler" ], + [ "LoadType", "namespacealbert.html#aacb8c34f13a7229d9c43762a879f29de", [ + [ "Frontend", "namespacealbert.html#aacb8c34f13a7229d9c43762a879f29dead97ba66b283564339628b71975a6e68d", null ], + [ "NoUnload", "namespacealbert.html#aacb8c34f13a7229d9c43762a879f29deaa771867185d6ec073d4dfdacde9d49be", null ], + [ "User", "namespacealbert.html#aacb8c34f13a7229d9c43762a879f29dea8f9bfe9d1345237cb3b2b205864da075", null ] + ] ], + [ "PluginState", "namespacealbert.html#aa886962775bed68a6a630016e16d47fd", [ + [ "Unloaded", "namespacealbert.html#aa886962775bed68a6a630016e16d47fdaa5ae20aa7fda5bd38bf0dce98e65bd2d", null ], + [ "Busy", "namespacealbert.html#aa886962775bed68a6a630016e16d47fdad8a942ef2b04672adfafef0ad817a407", null ], + [ "Loaded", "namespacealbert.html#aa886962775bed68a6a630016e16d47fda7381d487d18845b379422325c0a768d6", null ] + ] ], + [ "cacheLocation", "namespacealbert.html#a9608c31d67dd4adc7810d48db31f1780", null ], + [ "configLocation", "namespacealbert.html#a0ff8f625cf3c1f8af4fe923d12986c2c", null ], + [ "dataLocation", "namespacealbert.html#ab968450cf9a276d4a392432dad2802b8", null ], + [ "hide", "namespacealbert.html#ac1d14794465f1cb9349ea0541a553949", null ], + [ "networkManager", "namespacealbert.html#a5c3bcb68953e42d33df36ecb7336c974", null ], + [ "openIssueTracker", "namespacealbert.html#a7415146a8bdf3310c751a7e00866441c", null ], + [ "openUrl", "namespacealbert.html#af6cb7b3a800e9f6eff1c8aff08ae07d4", null ], + [ "openUrl", "namespacealbert.html#a56363c99d1fba78c716d82498710acb4", null ], + [ "openWebsite", "namespacealbert.html#a124eed71fa205fa1df15b60e8c3236cb", null ], + [ "quit", "namespacealbert.html#ad577c75761cd1124a31886dad4bf74c3", null ], + [ "restart", "namespacealbert.html#abcf6b2abfb07a836cb3cc41d5836b169", null ], + [ "runDetachedProcess", "namespacealbert.html#ac85cded09e6e136185a21835c627754c", null ], + [ "runTerminal", "namespacealbert.html#a7b04fd33495b5c395eddfd1a97ee96bf", null ], + [ "setClipboardText", "namespacealbert.html#af1ce5669423d646a686c0682917930ab", null ], + [ "setClipboardTextAndPaste", "namespacealbert.html#a074c9a711f70e31a066e1e432fc41490", null ], + [ "settings", "namespacealbert.html#aefe080148aeeb8ec606be9e4d7585801", null ], + [ "show", "namespacealbert.html#a392bdfcdcee15dcaf17fb5dc6d3d3113", null ], + [ "showSettings", "namespacealbert.html#ab8aa8ed98419a442ebd5e3a303f26347", null ], + [ "state", "namespacealbert.html#ad6c8ce82c40bddee897a2d14bc46b67c", null ], + [ "toggle", "namespacealbert.html#a99e86f2694429e695055d34e1c1ec197", null ] +]; \ No newline at end of file diff --git a/reference/namespacealbert_1_1plugin.html b/reference/namespacealbert_1_1plugin.html new file mode 100644 index 00000000..ca0fe1c7 --- /dev/null +++ b/reference/namespacealbert_1_1plugin.html @@ -0,0 +1,120 @@ + + + + + + + +Albert: albert::plugin Namespace Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    albert::plugin Namespace Reference
    +
    +
    + + + + + + + + +

    +Classes

    class  ExtensionPlugin
     Convenience class for native plugins. More...
     
    class  Plugin
     Convenience class for native plugins. More...
     
    +
    +
    + + + + diff --git a/reference/namespacealbert_1_1plugin.js b/reference/namespacealbert_1_1plugin.js new file mode 100644 index 00000000..cd018166 --- /dev/null +++ b/reference/namespacealbert_1_1plugin.js @@ -0,0 +1,5 @@ +var namespacealbert_1_1plugin = +[ + [ "ExtensionPlugin", "classalbert_1_1plugin_1_1ExtensionPlugin.html", null ], + [ "Plugin", "classalbert_1_1plugin_1_1Plugin.html", null ] +]; \ No newline at end of file diff --git a/reference/namespacemembers.html b/reference/namespacemembers.html new file mode 100644 index 00000000..9913d295 --- /dev/null +++ b/reference/namespacemembers.html @@ -0,0 +1,127 @@ + + + + + + + +Albert: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Here is a list of all namespace members with links to the namespace documentation for each member:
    +
    +
    + + + + diff --git a/reference/namespacemembers_enum.html b/reference/namespacemembers_enum.html new file mode 100644 index 00000000..fed37372 --- /dev/null +++ b/reference/namespacemembers_enum.html @@ -0,0 +1,108 @@ + + + + + + + +Albert: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + + + + diff --git a/reference/namespacemembers_func.html b/reference/namespacemembers_func.html new file mode 100644 index 00000000..7565383d --- /dev/null +++ b/reference/namespacemembers_func.html @@ -0,0 +1,125 @@ + + + + + + + +Albert: Namespace Members + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    +
    + + + + diff --git a/reference/namespaces.html b/reference/namespaces.html new file mode 100644 index 00000000..2a1696df --- /dev/null +++ b/reference/namespaces.html @@ -0,0 +1,140 @@ + + + + + + + +Albert: Namespace List + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    Namespace List
    +
    +
    +
    Here is a list of all namespaces with brief descriptions:
    +
    [detail level 123]
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
     Nalbert
     Nplugin
     CExtensionPluginConvenience class for native plugins
     CPluginConvenience class for native plugins
     CActionAction used by items
     CBackgroundExecutorProvides a lean interface for recurring indexing tasks
     CExtensionInterface for objects of the extension system
     CExtensionPluginInstanceConvenience template class for the most common case of a plugin providing exactly one extension
     CExtensionRegistryThe common extension registry
     CExtensionWatcherNon-QObject extension registry observer
     CFallbackHandlerFallback providing extension
     CFrontendThe interface for albert frontends
     CGlobalQueryHandlerGlobal search query handler class
     CGlobalQueryThe query interface used by GlobalQueryHandler
     CIconProviderGeneric pixmap provider
     CIndexItemThe eligible for the internal index of IndexQueryHandler
     CIndexQueryHandlerIndex query handler class
     CInputHistoryInput history class
     CItemItems displayed in the query results list
     CNotificationA system tray notification
     CPluginInstanceAbstract plugin instance class
     CPluginLoaderAbstract plugin loader class used by the plugin registry
     CPluginMetaDataCommon plugin metadata of all plugins
     CPluginProviderInterface class for a plugin providing extension
     CQueryInterface class for queries used by frontends
     CRankItemScored item Used to rank item results of mutliple handlers
     CStandardItemGeneral purpose value type Item implememtation
     CTriggerQueryHandlerTriggered query handler class
     CTriggerQueryThe query interface used by TriggerQueryHandler
    +
    +
    +
    + + + + diff --git a/reference/namespaces_dup.js b/reference/namespaces_dup.js new file mode 100644 index 00000000..3c3047c5 --- /dev/null +++ b/reference/namespaces_dup.js @@ -0,0 +1,4 @@ +var namespaces_dup = +[ + [ "albert", "namespacealbert.html", "namespacealbert" ] +]; \ No newline at end of file diff --git a/reference/nav_f.png b/reference/nav_f.png new file mode 100644 index 00000000..72a58a52 Binary files /dev/null and b/reference/nav_f.png differ diff --git a/reference/nav_fd.png b/reference/nav_fd.png new file mode 100644 index 00000000..032fbdd4 Binary files /dev/null and b/reference/nav_fd.png differ diff --git a/reference/nav_g.png b/reference/nav_g.png new file mode 100644 index 00000000..2093a237 Binary files /dev/null and b/reference/nav_g.png differ diff --git a/reference/nav_h.png b/reference/nav_h.png new file mode 100644 index 00000000..33389b10 Binary files /dev/null and b/reference/nav_h.png differ diff --git a/reference/nav_hd.png b/reference/nav_hd.png new file mode 100644 index 00000000..de80f18a Binary files /dev/null and b/reference/nav_hd.png differ diff --git a/reference/navtree.css b/reference/navtree.css new file mode 100644 index 00000000..d70f378b --- /dev/null +++ b/reference/navtree.css @@ -0,0 +1,150 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: white; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree .selected .arrow { + color: #9CAFD4; + text-shadow: none; +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:white; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: $width; + overflow : hidden; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url('splitbar.png'); + background-size:100%; + background-repeat:repeat-y; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-repeat:repeat-x; + background-color: #F9FAFC; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/reference/navtree.js b/reference/navtree.js new file mode 100644 index 00000000..27983687 --- /dev/null +++ b/reference/navtree.js @@ -0,0 +1,549 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('memtitle') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',100,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).slideDown("fast"); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + var topOffset=5; + if (typeof page_layout!=='undefined' && page_layout==1) { + topOffset+=$('#top').outerHeight(); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + topOffset+=25; + } + $('#nav-sync').css('top',topOffset+'px'); + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +var loadTriggered = false; +var readyTriggered = false; +var loadObject,loadToRoot,loadUrl,loadRelPath; + +$(window).on('load',function(){ + if (readyTriggered) { // ready first + navTo(loadObject,loadToRoot,loadUrl,loadRelPath); + showRoot(); + } + loadTriggered=true; +}); + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + if (loadTriggered) { // load before ready + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + } else { // ready before load + loadObject = o; + loadToRoot = toroot; + loadUrl = hashUrl(); + loadRelPath = relpath; + readyTriggered=true; + } + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/ + + + + + + +Albert: albert/include/albert/plugin.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    plugin.h File Reference
    +
    +
    +
    #include "albert/config.h"
    +#include "albert/extension.h"
    +#include "albert/extension/pluginprovider/plugininstance.h"
    +#include <QObject>
    +#include <QStringLiteral>
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    class  albert::plugin::Plugin< QOBJECT >
     Convenience class for native plugins. More...
     
    class  albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >
     Convenience class for native plugins. More...
     
    + + + + + +

    +Namespaces

    namespace  albert
     
    namespace  albert::plugin
     
    + + + + + + + + + + + + + + + + + +

    +Macros

    #define EXPAND_STRINGIZE(s)   STRINGIZE(s)
     
    #define STRINGIZE(s)   #s
     
    #define ALBERT_PLUGIN_PROPERTY_NONTRIVIAL(type, name, defaultValue)
     Convenience macro for (incomplete) user property definition. More...
     
    #define ALBERT_PLUGIN_PROPERTY(type, name, defaultValue)
     Convenience macro for trivial user property definition. More...
     
    #define ALBERT_PLUGIN_PROPERTY_CONNECT(object, name, widget, widget_setter, widget_signal)
     Convenience macro to connect UI elemetens to albert user properties. More...
     
    #define ALBERT_PLUGIN   Q_PLUGIN_METADATA(IID ALBERT_PLUGIN_IID FILE "metadata.json")
     Declare a class as Albert plugin. More...
     
    +

    Macro Definition Documentation

    + +

    ◆ ALBERT_PLUGIN

    + +
    +
    + + + + +
    #define ALBERT_PLUGIN   Q_PLUGIN_METADATA(IID ALBERT_PLUGIN_IID FILE "metadata.json")
    +
    + +

    Declare a class as Albert plugin.

    +

    This is a convenience macro that calls the required Qt macro to make a class a QtPlugin with defaults appropiate for an Albert plugin. It uses the global ALBERT_IID define to set the interface id and assumes there is a file named 'metadata.json' located in the root of the plugin source dir containing the metadata of the Albert plugin. This file may be handcrafted but it is recommended to use the albert_plugin CMake macro which automatically generates the metadata file.

    +
    Note
    This macro has to be put into the plugin class declaration body. The class this macro appears on must be default-constructible, inherit QObject and contain the Q_OBJECT macro. There should be exactly one occurrence of this macro in the source code for a plugin.
    + +
    +
    + +

    ◆ ALBERT_PLUGIN_PROPERTY

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ALBERT_PLUGIN_PROPERTY( type,
     name,
     defaultValue 
    )
    +
    +Value:
    public: static const type name##_default{defaultValue}; \
    +
    protected: void store_##name() { settings()->setValue(EXPAND_STRINGIZE(name), name()); } \
    +
    protected: void restore_##name() { name##_ = settings()->value(EXPAND_STRINGIZE(name), name##_default).value<type>(); } \
    +
    public: void reset_##name() { name##_ = name##_default; settings()->remove(EXPAND_STRINGIZE(name)); } \
    +
    Q_SIGNAL void name##Changed(); \
    +
    Q_PROPERTY(type name READ name WRITE set_##name RESET reset_##name NOTIFY name##Changed USER true) \
    +
    private: type name##_{defaultValue}; \
    +
    public: type name() const { return name##_; } \
    +
    public: void set_##name(type val) { if (val != name()){ name##_=val; store_##name(); emit name##Changed(); } } \
    +
    ALBERT_EXPORT std::unique_ptr< QSettings > settings()
    Persistent app settings. @reentrant.
    +
    #define EXPAND_STRINGIZE(s)
    Definition: plugin.h:10
    +
    +

    Convenience macro for trivial user property definition.

    +

    Writes the boilerplate code for user properties of extensions.

    +
    Parameters
    + + + + +
    typeThe type of the property
    nameThe name of the property
    defaultValueThe default value of the property
    +
    +
    + +
    +
    + +

    ◆ ALBERT_PLUGIN_PROPERTY_CONNECT

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ALBERT_PLUGIN_PROPERTY_CONNECT( object,
     name,
     widget,
     widget_setter,
     widget_signal 
    )
    +
    +Value:
    widget->widget_setter(object->name()); \
    +
    connect(widget, &std::remove_pointer<decltype(widget)>::type::widget_signal, \
    +
    object, &std::remove_pointer<decltype(object)>::type::set_##name); \
    +
    connect(object, &std::remove_pointer<decltype(object)>::type::name##Changed, \
    +
    widget, [o=object,w=widget](){ w->widget_setter(o->name()); });
    +
    +

    Convenience macro to connect UI elemetens to albert user properties.

    +
    Parameters
    + + + + + + +
    objectThe object containing the property
    nameThe property name
    widgetThe widget to connect to
    widget_setterThe setter function of the widget
    widget_signalThe changed signal of the widget
    +
    +
    + +
    +
    + +

    ◆ ALBERT_PLUGIN_PROPERTY_NONTRIVIAL

    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    #define ALBERT_PLUGIN_PROPERTY_NONTRIVIAL( type,
     name,
     defaultValue 
    )
    +
    +Value:
    public: static const type name##_default{defaultValue}; \
    +
    protected: void store_##name() { settings()->setValue(EXPAND_STRINGIZE(name), name()); } \
    +
    protected: void restore_##name() { set_##name##_(settings()->value(EXPAND_STRINGIZE(name), name##_default).value<type>()); } \
    +
    public: void reset_##name() { set_##name##_(name##_default); settings()->remove(EXPAND_STRINGIZE(name)); } \
    +
    Q_SIGNAL void name##Changed(); \
    +
    Q_PROPERTY(type name READ name WRITE set_##name RESET reset_##name NOTIFY name##Changed USER true) \
    +
    public: void set_##name(type val) { if (val != name()){ set_##name##_(val); store_##name(); emit name##Changed(); } } \
    +
    private: void set_##name##_(type); \
    +
    public: type name() const; \
    +
    +

    Convenience macro for (incomplete) user property definition.

    +

    Writes the boilerplate code for user properties of extensions. The property this macro produces is incomplete. It still requires you to define

    +
      +
    • the public getter 'type name() const'
    • +
    • the private setter 'void set_name_(type)'
    • +
    +
    Parameters
    + + + + +
    typeThe type of the property
    nameThe name of the property
    defaultValueThe default value of the property
    +
    +
    + +
    +
    + +

    ◆ EXPAND_STRINGIZE

    + +
    +
    + + + + + + + + +
    #define EXPAND_STRINGIZE( s)   STRINGIZE(s)
    +
    + +
    +
    + +

    ◆ STRINGIZE

    + +
    +
    + + + + + + + + +
    #define STRINGIZE( s)   #s
    +
    + +
    +
    +
    +
    + + + + diff --git a/reference/plugin_8h.js b/reference/plugin_8h.js new file mode 100644 index 00000000..ef702f0b --- /dev/null +++ b/reference/plugin_8h.js @@ -0,0 +1,11 @@ +var plugin_8h = +[ + [ "albert::plugin::Plugin< QOBJECT >", "classalbert_1_1plugin_1_1Plugin.html", null ], + [ "albert::plugin::ExtensionPlugin< EXTENSION, QOBJECT >", "classalbert_1_1plugin_1_1ExtensionPlugin.html", null ], + [ "ALBERT_PLUGIN", "plugin_8h.html#a8787b7c8c0b456d908480300c22d3f5f", null ], + [ "ALBERT_PLUGIN_PROPERTY", "plugin_8h.html#abf1cdce7b9bdaf0075417c18ac35918d", null ], + [ "ALBERT_PLUGIN_PROPERTY_CONNECT", "plugin_8h.html#aff21fe2718b969e4904239dea7b81e6c", null ], + [ "ALBERT_PLUGIN_PROPERTY_NONTRIVIAL", "plugin_8h.html#ad585903551b6931ccdc4862bd0599100", null ], + [ "EXPAND_STRINGIZE", "plugin_8h.html#afa5f33475901a9746f14f6975b7deaab", null ], + [ "STRINGIZE", "plugin_8h.html#a30d26964995580586ac787c24b82b2c3", null ] +]; \ No newline at end of file diff --git a/reference/plugin_8h_source.html b/reference/plugin_8h_source.html new file mode 100644 index 00000000..09996502 --- /dev/null +++ b/reference/plugin_8h_source.html @@ -0,0 +1,174 @@ + + + + + + + +Albert: albert/include/albert/plugin.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    plugin.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/config.h"
    +
    5#include "albert/extension.h"
    + +
    7#include <QObject>
    +
    8#include <QStringLiteral>
    +
    9
    +
    10#define EXPAND_STRINGIZE(s) STRINGIZE(s)
    +
    11#define STRINGIZE(s) #s
    +
    12
    +
    26#define ALBERT_PLUGIN_PROPERTY_NONTRIVIAL(type, name, defaultValue) \
    +
    27public: static const type name##_default{defaultValue}; \
    +
    28protected: void store_##name() { settings()->setValue(EXPAND_STRINGIZE(name), name()); } \
    +
    29protected: void restore_##name() { set_##name##_(settings()->value(EXPAND_STRINGIZE(name), name##_default).value<type>()); } \
    +
    30public: void reset_##name() { set_##name##_(name##_default); settings()->remove(EXPAND_STRINGIZE(name)); } \
    +
    31Q_SIGNAL void name##Changed(); \
    +
    32Q_PROPERTY(type name READ name WRITE set_##name RESET reset_##name NOTIFY name##Changed USER true) \
    +
    33public: void set_##name(type val) { if (val != name()){ set_##name##_(val); store_##name(); emit name##Changed(); } } \
    +
    34private: void set_##name##_(type); \
    +
    35public: type name() const; \
    +
    36
    +
    37
    +
    46#define ALBERT_PLUGIN_PROPERTY(type, name, defaultValue) \
    +
    47public: static const type name##_default{defaultValue}; \
    +
    48protected: void store_##name() { settings()->setValue(EXPAND_STRINGIZE(name), name()); } \
    +
    49protected: void restore_##name() { name##_ = settings()->value(EXPAND_STRINGIZE(name), name##_default).value<type>(); } \
    +
    50public: void reset_##name() { name##_ = name##_default; settings()->remove(EXPAND_STRINGIZE(name)); } \
    +
    51Q_SIGNAL void name##Changed(); \
    +
    52Q_PROPERTY(type name READ name WRITE set_##name RESET reset_##name NOTIFY name##Changed USER true) \
    +
    53private: type name##_{defaultValue}; \
    +
    54public: type name() const { return name##_; } \
    +
    55public: void set_##name(type val) { if (val != name()){ name##_=val; store_##name(); emit name##Changed(); } } \
    +
    56
    +
    57
    +
    66#define ALBERT_PLUGIN_PROPERTY_CONNECT(object, name, widget, widget_setter, widget_signal) \
    +
    67widget->widget_setter(object->name()); \
    +
    68connect(widget, &std::remove_pointer<decltype(widget)>::type::widget_signal, \
    +
    69 object, &std::remove_pointer<decltype(object)>::type::set_##name); \
    +
    70connect(object, &std::remove_pointer<decltype(object)>::type::name##Changed, \
    +
    71 widget, [o=object,w=widget](){ w->widget_setter(o->name()); });
    +
    72
    +
    73
    +
    90#define ALBERT_PLUGIN Q_PLUGIN_METADATA(IID ALBERT_PLUGIN_IID FILE "metadata.json")
    +
    91
    +
    92
    + +
    94{
    +
    95
    +
    115template <class QOBJECT = QObject>
    +
    116class ALBERT_EXPORT Plugin : public QOBJECT, public albert::PluginInstance {};
    +
    117
    +
    118
    +
    130template <class EXTENSION, class QOBJECT = QObject>
    +
    131class ALBERT_EXPORT ExtensionPlugin : public QOBJECT, virtual public ExtensionPluginInstance<EXTENSION> {};
    +
    132
    +
    133
    +
    134}
    +
    Convenience template class for the most common case of a plugin providing exactly one extension.
    Definition: plugininstance.h:68
    +
    Abstract plugin instance class.
    Definition: plugininstance.h:24
    +
    Convenience class for native plugins.
    Definition: plugin.h:131
    +
    Convenience class for native plugins.
    Definition: plugin.h:116
    + +
    Definition: plugin.h:94
    + +
    +
    + + + + diff --git a/reference/plugininstance_8h.html b/reference/plugininstance_8h.html new file mode 100644 index 00000000..41fa43ca --- /dev/null +++ b/reference/plugininstance_8h.html @@ -0,0 +1,132 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/plugininstance.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    plugininstance.h File Reference
    +
    +
    +
    #include "albert/export.h"
    +#include <QString>
    +#include <memory>
    +#include <vector>
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    class  albert::PluginInstance
     Abstract plugin instance class. More...
     
    class  albert::ExtensionPluginInstance< EXTENSION >
     Convenience template class for the most common case of a plugin providing exactly one extension. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    +
    +
    + + + + diff --git a/reference/plugininstance_8h.js b/reference/plugininstance_8h.js new file mode 100644 index 00000000..d0dbe509 --- /dev/null +++ b/reference/plugininstance_8h.js @@ -0,0 +1,5 @@ +var plugininstance_8h = +[ + [ "albert::PluginInstance", "classalbert_1_1PluginInstance.html", "classalbert_1_1PluginInstance" ], + [ "albert::ExtensionPluginInstance< EXTENSION >", "classalbert_1_1ExtensionPluginInstance.html", "classalbert_1_1ExtensionPluginInstance" ] +]; \ No newline at end of file diff --git a/reference/plugininstance_8h_source.html b/reference/plugininstance_8h_source.html new file mode 100644 index 00000000..1c5b23df --- /dev/null +++ b/reference/plugininstance_8h_source.html @@ -0,0 +1,190 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/plugininstance.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    plugininstance.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/export.h"
    +
    5#include <QString>
    +
    6#include <memory>
    +
    7#include <vector>
    +
    8class QSettings;
    +
    9class QDir;
    +
    10class QWidget;
    +
    11class PluginInstancePrivate;
    +
    12
    +
    13namespace albert
    +
    14{
    +
    15class Extension;
    +
    16class ExtensionRegistry;
    +
    17
    +
    23class ALBERT_EXPORT PluginInstance
    +
    24{
    +
    25public:
    + +
    27 virtual ~PluginInstance();
    +
    28
    +
    31 QString id() const;
    +
    32
    +
    35 virtual QString name() const;
    +
    36
    +
    39 virtual QString description() const;
    +
    40
    + +
    42 virtual void finalize(ExtensionRegistry*);
    +
    43 virtual std::vector<Extension*> extensions();
    +
    44 virtual QWidget *buildConfigWidget();
    +
    45
    +
    46 std::unique_ptr<QDir> cacheDir() const;
    +
    47 std::unique_ptr<QDir> configDir() const;
    +
    48 std::unique_ptr<QDir> dataDir() const;
    +
    49 std::unique_ptr<QSettings> settings() const;
    +
    50
    +
    51protected:
    +
    52 const std::unique_ptr<PluginInstancePrivate> d;
    +
    53};
    +
    54
    +
    55
    +
    66template <class EXTENSION>
    +
    67class ALBERT_EXPORT ExtensionPluginInstance : public PluginInstance, public EXTENSION
    +
    68{
    +
    69public:
    +
    70
    +
    72 QString id() const override { return PluginInstance::id(); }
    +
    73
    +
    75 QString name() const override { return PluginInstance::name(); }
    +
    76
    +
    78 QString description() const override { return PluginInstance::description(); }
    +
    79
    +
    81 std::vector<Extension*> extensions() override { return {this}; }
    +
    82};
    +
    83
    +
    84
    +
    85}
    +
    Convenience template class for the most common case of a plugin providing exactly one extension.
    Definition: plugininstance.h:68
    +
    QString name() const override
    Override returning PluginInstance::name.
    Definition: plugininstance.h:75
    +
    QString id() const override
    Override returning PluginInstance::id.
    Definition: plugininstance.h:72
    +
    std::vector< Extension * > extensions() override
    Override returning this
    Definition: plugininstance.h:81
    +
    QString description() const override
    Override returning PluginInstance::description.
    Definition: plugininstance.h:78
    +
    The common extension registry.
    Definition: extensionregistry.h:14
    +
    Abstract plugin instance class.
    Definition: plugininstance.h:24
    +
    virtual void initialize(ExtensionRegistry *)
    The initialization function.
    +
    const std::unique_ptr< PluginInstancePrivate > d
    Definition: plugininstance.h:52
    +
    std::unique_ptr< QDir > dataDir() const
    The recommended data location.
    +
    QString id() const
    The plugin identifier.
    +
    virtual std::vector< Extension * > extensions()
    The extensions this plugin provides.
    +
    virtual QString description() const
    Brief description of the plugin.
    +
    virtual void finalize(ExtensionRegistry *)
    The finalization function.
    + +
    std::unique_ptr< QDir > configDir() const
    The recommended config location.
    +
    std::unique_ptr< QSettings > settings() const
    Prepared settings object.
    + +
    virtual QWidget * buildConfigWidget()
    Config widget factory.
    +
    virtual QString name() const
    The human readable plugin name.
    +
    std::unique_ptr< QDir > cacheDir() const
    The recommended cache location.
    +
    Definition: albert.h:12
    +
    +
    + + + + diff --git a/reference/pluginloader_8h.html b/reference/pluginloader_8h.html new file mode 100644 index 00000000..4db4dd40 --- /dev/null +++ b/reference/pluginloader_8h.html @@ -0,0 +1,139 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/pluginloader.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    pluginloader.h File Reference
    +
    +
    +
    #include "albert/export.h"
    +#include <QObject>
    +#include <QString>
    +#include <memory>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  albert::PluginLoader
     Abstract plugin loader class used by the plugin registry. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    + + + + +

    +Enumerations

    enum class  albert::PluginState { albert::Unloaded +, albert::Busy +, albert::Loaded + }
     The state of the plugin. More...
     
    +
    +
    + + + + diff --git a/reference/pluginloader_8h.js b/reference/pluginloader_8h.js new file mode 100644 index 00000000..673a9cb8 --- /dev/null +++ b/reference/pluginloader_8h.js @@ -0,0 +1,9 @@ +var pluginloader_8h = +[ + [ "albert::PluginLoader", "classalbert_1_1PluginLoader.html", "classalbert_1_1PluginLoader" ], + [ "PluginState", "pluginloader_8h.html#aa886962775bed68a6a630016e16d47fd", [ + [ "Unloaded", "pluginloader_8h.html#aa886962775bed68a6a630016e16d47fdaa5ae20aa7fda5bd38bf0dce98e65bd2d", null ], + [ "Busy", "pluginloader_8h.html#aa886962775bed68a6a630016e16d47fdad8a942ef2b04672adfafef0ad817a407", null ], + [ "Loaded", "pluginloader_8h.html#aa886962775bed68a6a630016e16d47fda7381d487d18845b379422325c0a768d6", null ] + ] ] +]; \ No newline at end of file diff --git a/reference/pluginloader_8h_source.html b/reference/pluginloader_8h_source.html new file mode 100644 index 00000000..58927556 --- /dev/null +++ b/reference/pluginloader_8h_source.html @@ -0,0 +1,185 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/pluginloader.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    pluginloader.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2022-2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/export.h"
    +
    5#include <QObject>
    +
    6#include <QString>
    +
    7#include <memory>
    +
    8class PluginRegistry;
    +
    9
    +
    10namespace albert
    +
    11{
    +
    12class ExtensionRegistry;
    +
    13class PluginProvider;
    +
    14class PluginInstance;
    +
    15class PluginMetaData;
    +
    16
    +
    17
    +
    19enum class PluginState {
    +
    20 Unloaded,
    +
    21 Busy,
    +
    22 Loaded,
    +
    23};
    +
    24
    +
    28class ALBERT_EXPORT PluginLoader : public QObject
    +
    29{
    +
    30 Q_OBJECT
    +
    31public:
    +
    34 PluginLoader(const QString &path);
    +
    35 virtual ~PluginLoader();
    +
    36
    +
    38 const QString path;
    +
    39
    +
    42 virtual const PluginProvider &provider() const = 0;
    +
    43
    +
    46 virtual const PluginMetaData &metaData() const = 0;
    +
    47
    + +
    51
    +
    55 const QString &stateInfo() const;
    +
    56
    +
    59 virtual PluginInstance *instance() const = 0;
    +
    60
    +
    61protected:
    +
    65 virtual QString load() = 0;
    +
    66
    +
    69 virtual QString unload() = 0;
    +
    70
    +
    71 class PluginLoaderPrivate;
    +
    72 const std::unique_ptr<PluginLoaderPrivate> d;
    +
    73 friend class ::PluginRegistry;
    +
    74
    +
    75signals:
    + +
    77};
    +
    78
    +
    79}
    +
    Abstract plugin instance class.
    Definition: plugininstance.h:24
    +
    Abstract plugin loader class used by the plugin registry.
    Definition: pluginloader.h:29
    +
    virtual QString unload()=0
    Unloads the plugin.
    +
    virtual const PluginProvider & provider() const =0
    The provider of this plugin.
    + +
    virtual const PluginMetaData & metaData() const =0
    The plugin metadata.
    +
    const QString & stateInfo() const
    Detailed information about the latest state change.
    +
    virtual PluginInstance * instance() const =0
    Returns the plugin instance.
    +
    PluginLoader(const QString &path)
    PluginLoader constructor.
    +
    const std::unique_ptr< PluginLoaderPrivate > d
    Definition: pluginloader.h:72
    +
    PluginState state() const
    The state of the plugin.
    +
    const QString path
    The plugin location on disk.
    Definition: pluginloader.h:38
    + +
    virtual QString load()=0
    Loads the plugin.
    +
    Common plugin metadata of all plugins.
    Definition: pluginmetadata.h:22
    +
    Interface class for a plugin providing extension.
    Definition: pluginprovider.h:13
    +
    Definition: albert.h:12
    +
    PluginState
    The state of the plugin.
    Definition: pluginloader.h:19
    +
    @ Loaded
    The plugin is loaded and ready.
    +
    @ Unloaded
    The plugin is valid and ready to be loaded.
    +
    @ Busy
    The plugin is busy loading or unloading.
    +
    +
    + + + + diff --git a/reference/pluginmetadata_8h.html b/reference/pluginmetadata_8h.html new file mode 100644 index 00000000..dcd158b3 --- /dev/null +++ b/reference/pluginmetadata_8h.html @@ -0,0 +1,137 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/pluginmetadata.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    pluginmetadata.h File Reference
    +
    +
    +
    #include "albert/export.h"
    +#include <QStringList>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  albert::PluginMetaData
     Common plugin metadata of all plugins. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    + + + + +

    +Enumerations

    enum class  albert::LoadType { albert::Frontend +, albert::NoUnload +, albert::User + }
     The load type of the plugin. More...
     
    +
    +
    + + + + diff --git a/reference/pluginmetadata_8h.js b/reference/pluginmetadata_8h.js new file mode 100644 index 00000000..a3d7b627 --- /dev/null +++ b/reference/pluginmetadata_8h.js @@ -0,0 +1,9 @@ +var pluginmetadata_8h = +[ + [ "albert::PluginMetaData", "classalbert_1_1PluginMetaData.html", "classalbert_1_1PluginMetaData" ], + [ "LoadType", "pluginmetadata_8h.html#aacb8c34f13a7229d9c43762a879f29de", [ + [ "Frontend", "pluginmetadata_8h.html#aacb8c34f13a7229d9c43762a879f29dead97ba66b283564339628b71975a6e68d", null ], + [ "NoUnload", "pluginmetadata_8h.html#aacb8c34f13a7229d9c43762a879f29deaa771867185d6ec073d4dfdacde9d49be", null ], + [ "User", "pluginmetadata_8h.html#aacb8c34f13a7229d9c43762a879f29dea8f9bfe9d1345237cb3b2b205864da075", null ] + ] ] +]; \ No newline at end of file diff --git a/reference/pluginmetadata_8h_source.html b/reference/pluginmetadata_8h_source.html new file mode 100644 index 00000000..797bd1f5 --- /dev/null +++ b/reference/pluginmetadata_8h_source.html @@ -0,0 +1,162 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/pluginmetadata.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    pluginmetadata.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/export.h"
    +
    5#include <QStringList>
    +
    6
    +
    7namespace albert
    +
    8{
    +
    9
    +
    14enum class LoadType {
    +
    15 Frontend,
    +
    16 NoUnload,
    +
    17 User,
    +
    18};
    +
    19
    +
    21class ALBERT_EXPORT PluginMetaData
    +
    22{
    +
    23public:
    +
    24 QString iid;
    +
    25 QString id;
    +
    26 QString version;
    +
    27 QString name;
    +
    28 QString description;
    + +
    30 QString license;
    +
    31 QString url;
    +
    32 QStringList maintainers;
    + +
    34 QStringList binary_dependencies;
    +
    35 QStringList third_party_credits;
    +
    36 QStringList platforms;
    +
    37 LoadType load_type = LoadType::User;
    +
    38};
    +
    39
    +
    40}
    +
    The interface for albert frontends.
    Definition: frontend.h:17
    +
    Common plugin metadata of all plugins.
    Definition: pluginmetadata.h:22
    +
    QString iid
    Interface identifier.
    Definition: pluginmetadata.h:24
    +
    QString long_description
    Elaborate, markdown formatted description (README.md)
    Definition: pluginmetadata.h:29
    +
    QString license
    Short form e.g. BSD-2.
    Definition: pluginmetadata.h:30
    +
    QStringList binary_dependencies
    Required executables [].
    Definition: pluginmetadata.h:34
    +
    QStringList runtime_dependencies
    Required libraries [].
    Definition: pluginmetadata.h:33
    +
    QString id
    GUID, no duplicates allowed.
    Definition: pluginmetadata.h:25
    +
    QStringList third_party_credits
    Third party credits and license notes [].
    Definition: pluginmetadata.h:35
    +
    QString version
    https://semver.org/
    Definition: pluginmetadata.h:26
    +
    QString url
    Browsable source, README, issues.
    Definition: pluginmetadata.h:31
    +
    QStringList maintainers
    The current maintainers of the plugin [].
    Definition: pluginmetadata.h:32
    +
    QString description
    Brief, imperative description.
    Definition: pluginmetadata.h:28
    +
    QString name
    Human readable name.
    Definition: pluginmetadata.h:27
    +
    QStringList platforms
    List of supported platforms. {Linux, Darwin,Windows}*. Empty means all.
    Definition: pluginmetadata.h:36
    +
    Definition: albert.h:12
    +
    LoadType
    The load type of the plugin.
    Definition: pluginmetadata.h:14
    +
    @ User
    Specifies wheter this plugin should be user (un-)loadable.
    +
    @ NoUnload
    Specifies wheter this plugin should prohibit unloading.
    +
    +
    + + + + diff --git a/reference/pluginprovider_8h.html b/reference/pluginprovider_8h.html new file mode 100644 index 00000000..7ae0034d --- /dev/null +++ b/reference/pluginprovider_8h.html @@ -0,0 +1,127 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/pluginprovider.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    pluginprovider.h File Reference
    +
    +
    +
    #include "albert/extension.h"
    +#include <vector>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  albert::PluginProvider
     Interface class for a plugin providing extension. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    +
    +
    + + + + diff --git a/reference/pluginprovider_8h.js b/reference/pluginprovider_8h.js new file mode 100644 index 00000000..d8cf3fe9 --- /dev/null +++ b/reference/pluginprovider_8h.js @@ -0,0 +1,4 @@ +var pluginprovider_8h = +[ + [ "albert::PluginProvider", "classalbert_1_1PluginProvider.html", "classalbert_1_1PluginProvider" ] +]; \ No newline at end of file diff --git a/reference/pluginprovider_8h_source.html b/reference/pluginprovider_8h_source.html new file mode 100644 index 00000000..0beaa9b3 --- /dev/null +++ b/reference/pluginprovider_8h_source.html @@ -0,0 +1,130 @@ + + + + + + + +Albert: albert/include/albert/extension/pluginprovider/pluginprovider.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    pluginprovider.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/extension.h"
    +
    5#include <vector>
    +
    6
    +
    7namespace albert
    +
    8{
    +
    9class PluginLoader;
    +
    10
    +
    12class ALBERT_EXPORT PluginProvider : virtual public Extension
    +
    13{
    +
    14public:
    +
    15 virtual std::vector<PluginLoader*> plugins() = 0;
    +
    16};
    +
    17
    +
    18}
    +
    Interface for objects of the extension system.
    Definition: extension.h:12
    +
    Interface class for a plugin providing extension.
    Definition: pluginprovider.h:13
    +
    virtual std::vector< PluginLoader * > plugins()=0
    The plugins provided.
    + +
    Definition: albert.h:12
    +
    +
    + + + + diff --git a/reference/query_8h.html b/reference/query_8h.html new file mode 100644 index 00000000..47b92808 --- /dev/null +++ b/reference/query_8h.html @@ -0,0 +1,130 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/query.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    query.h File Reference
    +
    +
    +
    #include "albert/export.h"
    +#include <QObject>
    +#include <QString>
    +#include <QAbstractListModel>
    +#include <memory>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  albert::Query
     Interface class for queries used by frontends. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    +
    +
    + + + + diff --git a/reference/query_8h.js b/reference/query_8h.js new file mode 100644 index 00000000..ba1d0fd2 --- /dev/null +++ b/reference/query_8h.js @@ -0,0 +1,4 @@ +var query_8h = +[ + [ "albert::Query", "classalbert_1_1Query.html", "classalbert_1_1Query" ] +]; \ No newline at end of file diff --git a/reference/query_8h_source.html b/reference/query_8h_source.html new file mode 100644 index 00000000..05d4f320 --- /dev/null +++ b/reference/query_8h_source.html @@ -0,0 +1,168 @@ + + + + + + + +Albert: albert/include/albert/extension/frontend/query.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    query.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/export.h"
    +
    5#include <QObject>
    +
    6#include <QString>
    +
    7#include <QAbstractListModel>
    +
    8#include <memory>
    +
    9class QAbstractListModel;
    +
    10
    +
    11namespace albert
    +
    12{
    +
    13class Item;
    +
    14
    +
    17class ALBERT_EXPORT Query : public QObject
    +
    18{
    +
    19 Q_OBJECT
    +
    20public:
    +
    21 virtual ~Query() = default;
    +
    22
    +
    23 Q_INVOKABLE virtual QString synopsis() const = 0;
    +
    24 Q_INVOKABLE virtual QString trigger() const = 0;
    +
    25 Q_INVOKABLE virtual QString string() const = 0;
    +
    26
    +
    27 Q_INVOKABLE virtual void run() = 0;
    +
    28 Q_INVOKABLE virtual void cancel() = 0;
    +
    29 Q_INVOKABLE virtual bool isFinished() const = 0;
    +
    30 Q_INVOKABLE virtual const bool &isValid() const = 0;
    +
    31 Q_INVOKABLE virtual bool isTriggered() const = 0;
    +
    32
    +
    33 Q_INVOKABLE virtual QAbstractListModel *matches() = 0;
    +
    34 Q_INVOKABLE virtual QAbstractListModel *fallbacks() = 0;
    +
    35 Q_INVOKABLE virtual QAbstractListModel *matchActions(uint item) const = 0;
    +
    36 Q_INVOKABLE virtual QAbstractListModel *fallbackActions(uint item) const = 0;
    +
    37 Q_INVOKABLE virtual void activateMatch(uint item, uint action = 0) = 0;
    +
    38 Q_INVOKABLE virtual void activateFallback(uint item, uint action = 0) = 0;
    +
    39
    +
    40signals:
    +
    41 void finished();
    +
    42};
    +
    43
    +
    44}
    +
    Interface class for queries used by frontends.
    Definition: query.h:18
    +
    virtual Q_INVOKABLE QString synopsis() const =0
    The trigger of this query.
    +
    virtual Q_INVOKABLE void run()=0
    Asynchronous query processing done.
    +
    virtual Q_INVOKABLE QAbstractListModel * matchActions(uint item) const =0
    You take ownership.
    +
    virtual Q_INVOKABLE void activateMatch(uint item, uint action=0)=0
    Executes match a match action.
    +
    virtual Q_INVOKABLE QAbstractListModel * fallbacks()=0
    You borrow.
    +
    virtual Q_INVOKABLE bool isFinished() const =0
    True if the query thread stopped.
    +
    virtual Q_INVOKABLE QAbstractListModel * matches()=0
    You borrow.
    +
    virtual Q_INVOKABLE QString trigger() const =0
    The trigger of this query.
    +
    virtual Q_INVOKABLE void cancel()=0
    Call this if you dont need the query anymore.
    +
    virtual Q_INVOKABLE bool isTriggered() const =0
    True if this query has a triggert.
    +
    void finished()
    Emitted when the query finished processing.
    +
    virtual Q_INVOKABLE void activateFallback(uint item, uint action=0)=0
    Executes match a fallback action.
    +
    virtual ~Query()=default
    +
    virtual Q_INVOKABLE const bool & isValid() const =0
    True if query has not been cancelled.
    +
    virtual Q_INVOKABLE QAbstractListModel * fallbackActions(uint item) const =0
    You take ownership.
    +
    virtual Q_INVOKABLE QString string() const =0
    Query string excluding the trigger.
    +
    Definition: albert.h:12
    +
    +
    + + + + diff --git a/reference/rankitem_8h.html b/reference/rankitem_8h.html new file mode 100644 index 00000000..09c00aff --- /dev/null +++ b/reference/rankitem_8h.html @@ -0,0 +1,127 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/rankitem.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    rankitem.h File Reference
    +
    +
    +
    #include "albert/extension/queryhandler/item.h"
    +#include <memory>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  albert::RankItem
     Scored item Used to rank item results of mutliple handlers. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    +
    +
    + + + + diff --git a/reference/rankitem_8h.js b/reference/rankitem_8h.js new file mode 100644 index 00000000..d51eb4de --- /dev/null +++ b/reference/rankitem_8h.js @@ -0,0 +1,4 @@ +var rankitem_8h = +[ + [ "albert::RankItem", "classalbert_1_1RankItem.html", "classalbert_1_1RankItem" ] +]; \ No newline at end of file diff --git a/reference/rankitem_8h_source.html b/reference/rankitem_8h_source.html new file mode 100644 index 00000000..053f8b39 --- /dev/null +++ b/reference/rankitem_8h_source.html @@ -0,0 +1,134 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/rankitem.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    rankitem.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    + +
    5#include <memory>
    +
    6
    +
    7namespace albert
    +
    8{
    +
    9
    +
    12class ALBERT_EXPORT RankItem
    +
    13{
    +
    14public:
    +
    17 explicit RankItem(std::shared_ptr<Item> item, float score);
    +
    18
    +
    20 std::shared_ptr<Item> item;
    +
    21
    +
    23 float score;
    +
    24};
    +
    25
    +
    26}
    +
    Scored item Used to rank item results of mutliple handlers.
    Definition: rankitem.h:13
    +
    RankItem(std::shared_ptr< Item > item, float score)
    +
    std::shared_ptr< Item > item
    The matched item.
    Definition: rankitem.h:20
    +
    float score
    The match score. Must be in the range (0,1]. Not checked for performance.
    Definition: rankitem.h:23
    + +
    Definition: albert.h:12
    +
    +
    + + + + diff --git a/reference/resize.js b/reference/resize.js new file mode 100644 index 00000000..aaeb6fc0 --- /dev/null +++ b/reference/resize.js @@ -0,0 +1,155 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +var once=1; +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,barWidth=6,desktop_vp=768,titleHeight; + + function readSetting(cookie) + { + if (window.chrome) { + var val = localStorage.getItem(cookie_namespace+'_width'); + if (val) return val; + } else { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + } + return 250; + } + + function writeSetting(cookie, val) + { + if (window.chrome) { + localStorage.setItem(cookie_namespace+"_width",val); + } else { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; SameSite=Lax; expires=" + expiration+"; path=/"; + } + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(sidenavWidth)+"px"}); + } + writeSetting('width',sidenavWidth-barWidth); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + if (typeof page_layout!=='undefined' && page_layout==1) { + footer.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + } + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height(); + var contentHeight,navtreeHeight,sideNavHeight; + if (typeof page_layout==='undefined' || page_layout==0) { /* DISABLE_INDEX=NO */ + contentHeight = windowHeight - headerHeight - footerHeight; + navtreeHeight = contentHeight; + sideNavHeight = contentHeight; + } else if (page_layout==1) { /* DISABLE_INDEX=YES */ + contentHeight = windowHeight - footerHeight; + navtreeHeight = windowHeight - headerHeight; + sideNavHeight = windowHeight; + } + content.css({height:contentHeight + "px"}); + navtree.css({height:navtreeHeight + "px"}); + sidenav.css({height:sideNavHeight + "px"}); + if (location.hash.slice(1)) { + (document.getElementById(location.hash.slice(1))||document.body).scrollIntoView(); + } + } + + function collapseExpand() + { + var newWidth; + if (sidenav.width()>0) { + newWidth=0; + } + else { + var width = readSetting('width'); + newWidth = (width>250 && width<$(window).width()) ? width : 250; + } + restoreWidth(newWidth); + var sidenavWidth = $(sidenav).outerWidth(); + writeSetting('width',sidenavWidth-barWidth); + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readSetting('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + resizeHeight(); + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + if (once) { + $(".ui-resizable-handle").dblclick(collapseExpand); + once=0 + } + $(window).on('load',resizeHeight); +} +/* @license-end */ diff --git a/reference/search/all_0.js b/reference/search/all_0.js new file mode 100644 index 00000000..aab7ded7 --- /dev/null +++ b/reference/search/all_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['app_0',['App',['../classalbert_1_1Frontend.html#a0e12955bd7e1f66f3af953873b560957',1,'albert::Frontend']]], + ['pluginregistry_1',['PluginRegistry',['../classalbert_1_1PluginLoader.html#ab2f3bfe8536e7481b136065d1ba20a80',1,'albert::PluginLoader']]], + ['queryengine_2',['QueryEngine',['../classalbert_1_1TriggerQueryHandler.html#ac160e3c0a76112ff60b3046eb5fe635f',1,'albert::TriggerQueryHandler']]] +]; diff --git a/reference/search/all_1.js b/reference/search/all_1.js new file mode 100644 index 00000000..b5fab4b0 --- /dev/null +++ b/reference/search/all_1.js @@ -0,0 +1,21 @@ +var searchData= +[ + ['action_0',['Action',['../classalbert_1_1Action.html#a0963c26973e1b87f65050106c672fca6',1,'albert::Action::Action()'],['../classalbert_1_1Action.html',1,'albert::Action']]], + ['action_2eh_1',['action.h',['../action_8h.html',1,'']]], + ['actions_2',['actions',['../classalbert_1_1Item.html#ad8423cbb1d705f5f3837478c120fc2c0',1,'albert::Item::actions()'],['../classalbert_1_1StandardItem.html#a397e19018275ddd82cdfa5c1f07bc459',1,'albert::StandardItem::actions() const override']]], + ['actions_5f_3',['actions_',['../classalbert_1_1StandardItem.html#ac6f077b942850287a4ebfc2f704808da',1,'albert::StandardItem']]], + ['activatefallback_4',['activateFallback',['../classalbert_1_1Query.html#ac6ddb0ff1c822795a5e2412e1a659c8d',1,'albert::Query']]], + ['activatematch_5',['activateMatch',['../classalbert_1_1Query.html#a3c3e2d3e57bbd61df7717771bc2af735',1,'albert::Query']]], + ['add_6',['add',['../classalbert_1_1ExtensionRegistry.html#a357b02e493167653f07051c5584f19a1',1,'albert::ExtensionRegistry::add()'],['../classalbert_1_1InputHistory.html#a52beb209e78d2f8abb9c1337575b9a72',1,'albert::InputHistory::add()'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a0e6c722e1e91bee4782c4b0554390a45',1,'albert::TriggerQueryHandler::TriggerQuery::add(const std::shared_ptr< Item > &item)=0'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a3f30cdcec326e81f0a9b288b469fa15a',1,'albert::TriggerQueryHandler::TriggerQuery::add(std::shared_ptr< Item > &&item)=0'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a560416bd2151b4f8fb69abd176dc7ce7',1,'albert::TriggerQueryHandler::TriggerQuery::add(const std::vector< std::shared_ptr< Item > > &items)=0'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#ac3b48e6c871c8bafd8b3f4a07a63f519',1,'albert::TriggerQueryHandler::TriggerQuery::add(std::vector< std::shared_ptr< Item > > &&items)=0']]], + ['added_7',['added',['../classalbert_1_1ExtensionRegistry.html#a845f61794954dc73bb9b2722f459c1d4',1,'albert::ExtensionRegistry']]], + ['albert_8',['albert',['../namespacealbert.html',1,'']]], + ['albert_2eh_9',['albert.h',['../albert_8h.html',1,'']]], + ['albert_5flogging_5fcategory_10',['ALBERT_LOGGING_CATEGORY',['../logging_8h.html#addad4c9bbb31f10c906b4c150304ac71',1,'logging.h']]], + ['albert_5fplugin_11',['ALBERT_PLUGIN',['../plugin_8h.html#a8787b7c8c0b456d908480300c22d3f5f',1,'plugin.h']]], + ['albert_5fplugin_5fproperty_12',['ALBERT_PLUGIN_PROPERTY',['../plugin_8h.html#abf1cdce7b9bdaf0075417c18ac35918d',1,'plugin.h']]], + ['albert_5fplugin_5fproperty_5fconnect_13',['ALBERT_PLUGIN_PROPERTY_CONNECT',['../plugin_8h.html#aff21fe2718b969e4904239dea7b81e6c',1,'plugin.h']]], + ['albert_5fplugin_5fproperty_5fnontrivial_14',['ALBERT_PLUGIN_PROPERTY_NONTRIVIAL',['../plugin_8h.html#ad585903551b6931ccdc4862bd0599100',1,'plugin.h']]], + ['allowtriggerremap_15',['allowTriggerRemap',['../classalbert_1_1TriggerQueryHandler.html#a565b2220701d672e00c54b71f4e9cb94',1,'albert::TriggerQueryHandler']]], + ['applyusagescore_16',['applyUsageScore',['../classalbert_1_1GlobalQueryHandler.html#a656d92e3b99137024993f7721e02e676',1,'albert::GlobalQueryHandler']]], + ['plugin_17',['plugin',['../namespacealbert_1_1plugin.html',1,'albert']]] +]; diff --git a/reference/search/all_10.js b/reference/search/all_10.js new file mode 100644 index 00000000..f219ea3b --- /dev/null +++ b/reference/search/all_10.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['rankitem_0',['RankItem',['../classalbert_1_1RankItem.html',1,'albert::RankItem'],['../classalbert_1_1RankItem.html#a3c9c331f950cae4f19fa06e7f70e8615',1,'albert::RankItem::RankItem()']]], + ['rankitem_2eh_1',['rankitem.h',['../rankitem_8h.html',1,'']]], + ['readme_2emd_2',['README.md',['../README_8md.html',1,'']]], + ['remove_3',['remove',['../classalbert_1_1ExtensionRegistry.html#afccc877de2e759c2cc02882ec28a8784',1,'albert::ExtensionRegistry']]], + ['removed_4',['removed',['../classalbert_1_1ExtensionRegistry.html#a5ed04eff2f2f6230a6bd54ca0ab12e32',1,'albert::ExtensionRegistry']]], + ['resetiterator_5',['resetIterator',['../classalbert_1_1InputHistory.html#a776b827eaba727833d58e42a1cf00ca8',1,'albert::InputHistory']]], + ['restart_6',['restart',['../namespacealbert.html#abcf6b2abfb07a836cb3cc41d5836b169',1,'albert']]], + ['run_7',['run',['../classalbert_1_1Query.html#a202c52805bd26e0bb60b623cd75079ac',1,'albert::Query::run()'],['../classalbert_1_1BackgroundExecutor.html#a95b0814f3637d231dad8e56b351fc795',1,'albert::BackgroundExecutor::run()']]], + ['rundetachedprocess_8',['runDetachedProcess',['../namespacealbert.html#ac85cded09e6e136185a21835c627754c',1,'albert']]], + ['runterminal_9',['runTerminal',['../namespacealbert.html#a7b04fd33495b5c395eddfd1a97ee96bf',1,'albert']]], + ['runtime_10',['runtime',['../classalbert_1_1BackgroundExecutor.html#a4204c4469b35e000426cebf3dc42b78b',1,'albert::BackgroundExecutor']]], + ['runtime_5fdependencies_11',['runtime_dependencies',['../classalbert_1_1PluginMetaData.html#a8ad66978975fca1ba45838b07dfd7989',1,'albert::PluginMetaData']]] +]; diff --git a/reference/search/all_11.js b/reference/search/all_11.js new file mode 100644 index 00000000..6507bf5f --- /dev/null +++ b/reference/search/all_11.js @@ -0,0 +1,32 @@ +var searchData= +[ + ['score_0',['score',['../classalbert_1_1RankItem.html#a9028aa37f74661e29705951f8c4abf60',1,'albert::RankItem']]], + ['setactions_1',['setActions',['../classalbert_1_1StandardItem.html#af285d6a81a83b640bde98abe223ed05f',1,'albert::StandardItem']]], + ['setclipboardtext_2',['setClipboardText',['../namespacealbert.html#af1ce5669423d646a686c0682917930ab',1,'albert']]], + ['setclipboardtextandpaste_3',['setClipboardTextAndPaste',['../namespacealbert.html#a074c9a711f70e31a066e1e432fc41490',1,'albert']]], + ['setextensionregistry_4',['setExtensionRegistry',['../classalbert_1_1ExtensionWatcher.html#a8c749a8b8f76c7e6c19b9dcdd8e8d765',1,'albert::ExtensionWatcher']]], + ['setfuzzymatching_5',['setFuzzyMatching',['../classalbert_1_1IndexQueryHandler.html#a8b8017d998ad997a46be3aaedb6a0ae5',1,'albert::IndexQueryHandler::setFuzzyMatching()'],['../classalbert_1_1TriggerQueryHandler.html#a4004638b15c55c526b0088e12d20b7f2',1,'albert::TriggerQueryHandler::setFuzzyMatching()']]], + ['seticonurls_6',['setIconUrls',['../classalbert_1_1StandardItem.html#aa2e6deac74aec9f6afc06ecd14743d7e',1,'albert::StandardItem']]], + ['setid_7',['setId',['../classalbert_1_1StandardItem.html#a482b09f80aaec878a9cb3cfded27ecdf',1,'albert::StandardItem']]], + ['setindexitems_8',['setIndexItems',['../classalbert_1_1IndexQueryHandler.html#ae9ac32494f3f85fe5af6a13085e6c1ec',1,'albert::IndexQueryHandler']]], + ['setinput_9',['setInput',['../classalbert_1_1Frontend.html#a08349cc72ea7d21aa6bd989e1cf84991',1,'albert::Frontend']]], + ['setinputactiontext_10',['setInputActionText',['../classalbert_1_1StandardItem.html#ab3867f39fe824d9873248f406a4fa622',1,'albert::StandardItem']]], + ['setsubtext_11',['setSubtext',['../classalbert_1_1StandardItem.html#a6db7d37f05d57a9695a442325c61470f',1,'albert::StandardItem']]], + ['settext_12',['setText',['../classalbert_1_1StandardItem.html#aa6a79337acbbe55d810307ee12b3299b',1,'albert::StandardItem']]], + ['settings_13',['settings',['../classalbert_1_1PluginInstance.html#a9413862a66464d1bdeb940e1d7971593',1,'albert::PluginInstance::settings()'],['../namespacealbert.html#aefe080148aeeb8ec606be9e4d7585801',1,'albert::settings()']]], + ['setvisible_14',['setVisible',['../classalbert_1_1Frontend.html#a18af1da7411cb5ca3a9e90471f8f70a0',1,'albert::Frontend']]], + ['show_15',['show',['../namespacealbert.html#a392bdfcdcee15dcaf17fb5dc6d3d3113',1,'albert']]], + ['showsettings_16',['showSettings',['../namespacealbert.html#ab8aa8ed98419a442ebd5e3a303f26347',1,'albert']]], + ['standarditem_17',['StandardItem',['../classalbert_1_1StandardItem.html',1,'albert::StandardItem'],['../classalbert_1_1StandardItem.html#ac8f59f5af9d3b484b5f3c2efec9fac94',1,'albert::StandardItem::StandardItem(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})'],['../classalbert_1_1StandardItem.html#a8a07221cae4641ce2d11ef98d843db52',1,'albert::StandardItem::StandardItem(StandardItem &&)=default'],['../classalbert_1_1StandardItem.html#a4fc74616cb7bb8b4c4fc28d66781b910',1,'albert::StandardItem::StandardItem(const StandardItem &)=delete']]], + ['standarditem_2eh_18',['standarditem.h',['../standarditem_8h.html',1,'']]], + ['state_19',['state',['../classalbert_1_1PluginLoader.html#abf8e06e6e18dd0b780b1febae2d1d2d9',1,'albert::PluginLoader::state()'],['../namespacealbert.html#ad6c8ce82c40bddee897a2d14bc46b67c',1,'albert::state()']]], + ['statechanged_20',['stateChanged',['../classalbert_1_1PluginLoader.html#a543b6773b233861d16c2d790068d39a8',1,'albert::PluginLoader']]], + ['stateinfo_21',['stateInfo',['../classalbert_1_1PluginLoader.html#a6a243bd57822511eae2cad673fb13839',1,'albert::PluginLoader']]], + ['string_22',['string',['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a4a0e8a98d871f786f738118940c1f351',1,'albert::TriggerQueryHandler::TriggerQuery::string()'],['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a6077a5394564eec16474dbb4b3a43559',1,'albert::GlobalQueryHandler::GlobalQuery::string()'],['../classalbert_1_1Query.html#ae967c24f8c35a866235eecdc83b36fb6',1,'albert::Query::string()'],['../classalbert_1_1IndexItem.html#ae09f09fb44d713487a40f1e416172cd2',1,'albert::IndexItem::string()']]], + ['stringize_23',['STRINGIZE',['../plugin_8h.html#a30d26964995580586ac787c24b82b2c3',1,'plugin.h']]], + ['subtext_24',['subtext',['../classalbert_1_1StandardItem.html#a1ab1c6f42fe6e919db5e7f44b4424672',1,'albert::StandardItem::subtext()'],['../classalbert_1_1Item.html#a510423487b0ae6c2fb800521718a831d',1,'albert::Item::subtext()']]], + ['subtext_5f_25',['subtext_',['../classalbert_1_1StandardItem.html#a8e276ffbab6c0c02dcdd4f8647d63869',1,'albert::StandardItem']]], + ['subtextrole_26',['SubTextRole',['../itemroles_8h.html#a6072f0b8c244f5b672a0106b818ca8e3',1,'itemroles.h']]], + ['supportsfuzzymatching_27',['supportsFuzzyMatching',['../classalbert_1_1IndexQueryHandler.html#a4918cddcd95dafedddbe6b2b4fbe9149',1,'albert::IndexQueryHandler::supportsFuzzyMatching()'],['../classalbert_1_1TriggerQueryHandler.html#a82133091f339ec43665604501dc562ea',1,'albert::TriggerQueryHandler::supportsFuzzyMatching()']]], + ['synopsis_28',['synopsis',['../classalbert_1_1Query.html#a055e6e2dc39d1bc8c5df67ead0adbf14',1,'albert::Query::synopsis()'],['../classalbert_1_1IndexQueryHandler.html#ae79550a61e17fec1cf89fb009b9f2204',1,'albert::IndexQueryHandler::synopsis()'],['../classalbert_1_1TriggerQueryHandler.html#a9853785b6798df4ef4b18ab715bb8608',1,'albert::TriggerQueryHandler::synopsis()']]] +]; diff --git a/reference/search/all_12.js b/reference/search/all_12.js new file mode 100644 index 00000000..feb55916 --- /dev/null +++ b/reference/search/all_12.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['text_0',['text',['../classalbert_1_1Action.html#a1bfc14743e18269a07ef3ff9eb8798dc',1,'albert::Action::text()'],['../classalbert_1_1Item.html#acf06be44b0d88db1941325b06c5d671d',1,'albert::Item::text()'],['../classalbert_1_1StandardItem.html#adfd90bae2b852c8233cb4b7f464de316',1,'albert::StandardItem::text() const override']]], + ['text_5f_1',['text_',['../classalbert_1_1StandardItem.html#a277d77f4c599d91187820f849e9a9c52',1,'albert::StandardItem']]], + ['textrole_2',['TextRole',['../itemroles_8h.html#a141279366472b7803a6427ae5b05bdb0',1,'itemroles.h']]], + ['third_5fparty_5fcredits_3',['third_party_credits',['../classalbert_1_1PluginMetaData.html#a98a024db32e7452f078ae7685b20a9cb',1,'albert::PluginMetaData']]], + ['toggle_4',['toggle',['../namespacealbert.html#a99e86f2694429e695055d34e1c1ec197',1,'albert']]], + ['trigger_5',['trigger',['../classalbert_1_1Query.html#a9a6cf0301a8fbae3cbb9cb77c7be3454',1,'albert::Query::trigger()'],['../classalbert_1_1TriggerQueryHandler.html#a0951983836810772176cd42f39170892',1,'albert::TriggerQueryHandler::trigger()'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a870bf42eebe581976cab326e541b52c1',1,'albert::TriggerQueryHandler::TriggerQuery::trigger()']]], + ['triggerquery_6',['TriggerQuery',['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html',1,'albert::TriggerQueryHandler']]], + ['triggerqueryhandler_7',['TriggerQueryHandler',['../classalbert_1_1TriggerQueryHandler.html',1,'albert::TriggerQueryHandler'],['../classalbert_1_1TriggerQueryHandler.html#adffedf3db5b8ed2e2477ad0bb1dda717',1,'albert::TriggerQueryHandler::TriggerQueryHandler()']]], + ['triggerqueryhandler_2eh_8',['triggerqueryhandler.h',['../triggerqueryhandler_8h.html',1,'']]] +]; diff --git a/reference/search/all_13.js b/reference/search/all_13.js new file mode 100644 index 00000000..c7b1ae57 --- /dev/null +++ b/reference/search/all_13.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['unload_0',['unload',['../classalbert_1_1PluginLoader.html#a25f25bbb3e3f697728a9f28abc28314a',1,'albert::PluginLoader']]], + ['unloaded_1',['Unloaded',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fdaa5ae20aa7fda5bd38bf0dce98e65bd2d',1,'albert']]], + ['updateindexitems_2',['updateIndexItems',['../classalbert_1_1IndexQueryHandler.html#ad49fb19ea3f3aa4361416069d5462c5f',1,'albert::IndexQueryHandler']]], + ['url_3',['url',['../classalbert_1_1PluginMetaData.html#aa8cdf068f6e7277ea33dab4a30b809c8',1,'albert::PluginMetaData']]], + ['user_4',['User',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29dea8f9bfe9d1345237cb3b2b205864da075',1,'albert']]] +]; diff --git a/reference/search/all_14.js b/reference/search/all_14.js new file mode 100644 index 00000000..23c70364 --- /dev/null +++ b/reference/search/all_14.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['version_0',['version',['../classalbert_1_1PluginMetaData.html#a9ea434d693b7a92928bd7a39b03e1821',1,'albert::PluginMetaData']]] +]; diff --git a/reference/search/all_15.js b/reference/search/all_15.js new file mode 100644 index 00000000..7968be16 --- /dev/null +++ b/reference/search/all_15.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['warn_0',['WARN',['../logging_8h.html#a271d8f7f52be750e5c744a394ec71344',1,'logging.h']]], + ['winid_1',['winId',['../classalbert_1_1Frontend.html#a7c6eaea8a9f97ce48ee0c227760b4557',1,'albert::Frontend']]] +]; diff --git a/reference/search/all_16.js b/reference/search/all_16.js new file mode 100644 index 00000000..7c606525 --- /dev/null +++ b/reference/search/all_16.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['_7ebackgroundexecutor_0',['~BackgroundExecutor',['../classalbert_1_1BackgroundExecutor.html#a373e414af23f1ff1f389194b42fc2d81',1,'albert::BackgroundExecutor']]], + ['_7eextension_1',['~Extension',['../classalbert_1_1Extension.html#a1a3136f391036448f562e969e6cdef3e',1,'albert::Extension']]], + ['_7eextensionwatcher_2',['~ExtensionWatcher',['../classalbert_1_1ExtensionWatcher.html#a9b9f213fe24d184534616d3a4f2e7fe2',1,'albert::ExtensionWatcher']]], + ['_7eglobalquery_3',['~GlobalQuery',['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a6e6f8c2c75061434c7458e00bc642ec0',1,'albert::GlobalQueryHandler::GlobalQuery']]], + ['_7eglobalqueryhandler_4',['~GlobalQueryHandler',['../classalbert_1_1GlobalQueryHandler.html#a3e4cba0351c0d47953476559db4b9b3a',1,'albert::GlobalQueryHandler']]], + ['_7eiconprovider_5',['~IconProvider',['../classalbert_1_1IconProvider.html#a9974dd36fa979a4a35041f4b2c386b30',1,'albert::IconProvider']]], + ['_7eindexqueryhandler_6',['~IndexQueryHandler',['../classalbert_1_1IndexQueryHandler.html#abaa098cb27e17c6d185d29f53083ce7d',1,'albert::IndexQueryHandler']]], + ['_7einputhistory_7',['~InputHistory',['../classalbert_1_1InputHistory.html#a4f0fbb944ffdeb950f7458e0df794ecc',1,'albert::InputHistory']]], + ['_7eitem_8',['~Item',['../classalbert_1_1Item.html#a148f86ed842727593fe565b58ef76a4d',1,'albert::Item']]], + ['_7enotification_9',['~Notification',['../classalbert_1_1Notification.html#aa1d3a2a9695f2c76f4f90dc9abeeff0f',1,'albert::Notification']]], + ['_7eplugininstance_10',['~PluginInstance',['../classalbert_1_1PluginInstance.html#a5f45a55c5eb5712294adc15b889942fa',1,'albert::PluginInstance']]], + ['_7epluginloader_11',['~PluginLoader',['../classalbert_1_1PluginLoader.html#aed12605269105560dfa0130957d8b403',1,'albert::PluginLoader']]], + ['_7equery_12',['~Query',['../classalbert_1_1Query.html#acbd5a250fca8af47d4e257251953ef2a',1,'albert::Query']]], + ['_7etriggerquery_13',['~TriggerQuery',['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#aaaf443d93086a391fc4f00ee5578d7c9',1,'albert::TriggerQueryHandler::TriggerQuery']]], + ['_7etriggerqueryhandler_14',['~TriggerQueryHandler',['../classalbert_1_1TriggerQueryHandler.html#abece36a266d7ed6a298eb22b871ca51d',1,'albert::TriggerQueryHandler']]] +]; diff --git a/reference/search/all_2.js b/reference/search/all_2.js new file mode 100644 index 00000000..09c1fca8 --- /dev/null +++ b/reference/search/all_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['backgroundexecutor_0',['BackgroundExecutor',['../classalbert_1_1BackgroundExecutor.html',1,'albert::BackgroundExecutor< T >'],['../classalbert_1_1BackgroundExecutor.html#aabd715da822b3d7563504694bb6f7f30',1,'albert::BackgroundExecutor::BackgroundExecutor()']]], + ['backgroundexecutor_2eh_1',['backgroundexecutor.h',['../backgroundexecutor_8h.html',1,'']]], + ['binary_5fdependencies_2',['binary_dependencies',['../classalbert_1_1PluginMetaData.html#a736d5a0c0ecae325d86d2486bb2b5635',1,'albert::PluginMetaData']]], + ['buildconfigwidget_3',['buildConfigWidget',['../classalbert_1_1PluginInstance.html#ab1376d91889acab63531e780b3ffdef8',1,'albert::PluginInstance']]], + ['busy_4',['Busy',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fdad8a942ef2b04672adfafef0ad817a407',1,'albert']]] +]; diff --git a/reference/search/all_3.js b/reference/search/all_3.js new file mode 100644 index 00000000..b3ffea0a --- /dev/null +++ b/reference/search/all_3.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['c_2b_2b_2fqt_20plugins_0',['C++/Qt plugins',['../index.html',1,'']]], + ['cachedir_1',['cacheDir',['../classalbert_1_1PluginInstance.html#af06e7ae2c72da1e7ed4357681770e49a',1,'albert::PluginInstance']]], + ['cachelocation_2',['cacheLocation',['../namespacealbert.html#a9608c31d67dd4adc7810d48db31f1780',1,'albert']]], + ['cancel_3',['cancel',['../classalbert_1_1Query.html#aa5855a860719615dc48a698bc94e7eaf',1,'albert::Query']]], + ['clearcache_4',['clearCache',['../classalbert_1_1IconProvider.html#a96d8211025eff709ddc09d0321f947bd',1,'albert::IconProvider']]], + ['configdir_5',['configDir',['../classalbert_1_1PluginInstance.html#a9207c9adf706fe0fc282381070cf76b1',1,'albert::PluginInstance']]], + ['configlocation_6',['configLocation',['../namespacealbert.html#a0ff8f625cf3c1f8af4fe923d12986c2c',1,'albert']]], + ['createfrontendconfigwidget_7',['createFrontendConfigWidget',['../classalbert_1_1Frontend.html#aef8cf9086d6ecaf22af974c499f3e0b4',1,'albert::Frontend']]], + ['crit_8',['CRIT',['../logging_8h.html#a44ad7a1cce3ba64ff004aa697be1a079',1,'logging.h']]] +]; diff --git a/reference/search/all_4.js b/reference/search/all_4.js new file mode 100644 index 00000000..a8cf21be --- /dev/null +++ b/reference/search/all_4.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['d_0',['d',['../classalbert_1_1PluginInstance.html#a0be2d94593a017397912e0e23a94734d',1,'albert::PluginInstance::d()'],['../classalbert_1_1PluginLoader.html#abdaab494102f2fb5bf41e9c35f74e32a',1,'albert::PluginLoader::d()']]], + ['datadir_1',['dataDir',['../classalbert_1_1PluginInstance.html#a1fee04d437d0ce8d5a4b2aecda623e01',1,'albert::PluginInstance']]], + ['datalocation_2',['dataLocation',['../namespacealbert.html#ab968450cf9a276d4a392432dad2802b8',1,'albert']]], + ['debg_3',['DEBG',['../logging_8h.html#aebe3da5ae2400e467893e8c51de8736d',1,'logging.h']]], + ['defaulttrigger_4',['defaultTrigger',['../classalbert_1_1TriggerQueryHandler.html#afb3f05c5d7c91025dfe12ecb0065d6da',1,'albert::TriggerQueryHandler']]], + ['description_5',['description',['../classalbert_1_1PluginMetaData.html#ada4bf624b1d2aa2ba02088c34a25c8b5',1,'albert::PluginMetaData::description()'],['../classalbert_1_1Extension.html#a9f18ca0cf14e367e3826cdcdaa35f1c3',1,'albert::Extension::description()'],['../classalbert_1_1PluginInstance.html#a3360117d9a00393bf3e0a4ecdd7ea9a8',1,'albert::PluginInstance::description()'],['../classalbert_1_1ExtensionPluginInstance.html#aaab9606ded1e13dc2433130b8b388d08',1,'albert::ExtensionPluginInstance::description()']]] +]; diff --git a/reference/search/all_5.js b/reference/search/all_5.js new file mode 100644 index 00000000..03245db4 --- /dev/null +++ b/reference/search/all_5.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['expand_5fstringize_0',['EXPAND_STRINGIZE',['../plugin_8h.html#afa5f33475901a9746f14f6975b7deaab',1,'plugin.h']]], + ['extension_1',['Extension',['../classalbert_1_1Extension.html',1,'albert']]], + ['extension_2',['extension',['../classalbert_1_1ExtensionRegistry.html#a99839edb159935ec09401b74c8e00428',1,'albert::ExtensionRegistry']]], + ['extension_2eh_3',['extension.h',['../extension_8h.html',1,'']]], + ['extensionplugin_4',['ExtensionPlugin',['../classalbert_1_1plugin_1_1ExtensionPlugin.html',1,'albert::plugin']]], + ['extensionplugininstance_5',['ExtensionPluginInstance',['../classalbert_1_1ExtensionPluginInstance.html',1,'albert']]], + ['extensionregistry_6',['ExtensionRegistry',['../classalbert_1_1ExtensionRegistry.html',1,'albert']]], + ['extensionregistry_2eh_7',['extensionregistry.h',['../extensionregistry_8h.html',1,'']]], + ['extensions_8',['extensions',['../classalbert_1_1PluginInstance.html#a2e5845601778c37b05a076fb41176c31',1,'albert::PluginInstance::extensions()'],['../classalbert_1_1ExtensionPluginInstance.html#a96907d598865d3d1b84f570961e96bd3',1,'albert::ExtensionPluginInstance::extensions()'],['../classalbert_1_1ExtensionRegistry.html#addd09e90a5ce026ce8c8a491affe68a7',1,'albert::ExtensionRegistry::extensions()'],['../classalbert_1_1ExtensionRegistry.html#aec42b55ef9a0fa5876f3f88dbac9b19d',1,'albert::ExtensionRegistry::extensions()']]], + ['extensionwatcher_9',['ExtensionWatcher',['../classalbert_1_1ExtensionWatcher.html',1,'albert::ExtensionWatcher< T >'],['../classalbert_1_1ExtensionWatcher.html#a57a54853c36f1ae178c2ad16761fc1db',1,'albert::ExtensionWatcher::ExtensionWatcher()']]], + ['extensionwatcher_2eh_10',['extensionwatcher.h',['../extensionwatcher_8h.html',1,'']]] +]; diff --git a/reference/search/all_6.js b/reference/search/all_6.js new file mode 100644 index 00000000..968d9492 --- /dev/null +++ b/reference/search/all_6.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['fallbackactions_0',['fallbackActions',['../classalbert_1_1Query.html#ae67f7eb58c68efd2eca034f5829f06d5',1,'albert::Query']]], + ['fallbackhandler_1',['FallbackHandler',['../classalbert_1_1FallbackHandler.html',1,'albert']]], + ['fallbackprovider_2eh_2',['fallbackprovider.h',['../fallbackprovider_8h.html',1,'']]], + ['fallbacks_3',['fallbacks',['../classalbert_1_1Query.html#a62762f8c9d77992e376d778d17b4b612',1,'albert::Query::fallbacks()'],['../classalbert_1_1FallbackHandler.html#a131fd6896a43672eac646f29da7222ed',1,'albert::FallbackHandler::fallbacks()']]], + ['finalize_4',['finalize',['../classalbert_1_1PluginInstance.html#a4f09ff651fb7e31f42cb4c03891d2b40',1,'albert::PluginInstance']]], + ['finish_5',['finish',['../classalbert_1_1BackgroundExecutor.html#a65295b14b0d2476b5118f7922b4c11b9',1,'albert::BackgroundExecutor']]], + ['finished_6',['finished',['../classalbert_1_1Query.html#abf7bfc65b2ecf0f4f24d3f082ece7224',1,'albert::Query']]], + ['frontend_7',['Frontend',['../classalbert_1_1Frontend.html',1,'albert::Frontend'],['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29dead97ba66b283564339628b71975a6e68d',1,'albert::Frontend()']]], + ['frontend_2eh_8',['frontend.h',['../frontend_8h.html',1,'']]], + ['function_9',['function',['../classalbert_1_1Action.html#a3b51b223188440df06f813fc06f2b6ed',1,'albert::Action']]], + ['fuzzymatching_10',['fuzzyMatching',['../classalbert_1_1IndexQueryHandler.html#a3f599d19cc675bdc64bcbeaaa9bcde0c',1,'albert::IndexQueryHandler::fuzzyMatching()'],['../classalbert_1_1TriggerQueryHandler.html#a5fc00de6ff2fb342abd5ef396549d579',1,'albert::TriggerQueryHandler::fuzzyMatching()']]] +]; diff --git a/reference/search/all_7.js b/reference/search/all_7.js new file mode 100644 index 00000000..f28f6072 --- /dev/null +++ b/reference/search/all_7.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['gcrit_0',['GCRIT',['../logging_8h.html#ac4beb0cd6b787de476fbf5db45291b67',1,'logging.h']]], + ['getpixmap_1',['getPixmap',['../classalbert_1_1IconProvider.html#a5ba04d9cddde22e03effc8c66fe1a941',1,'albert::IconProvider::getPixmap(const QStringList &urls, QSize *size, const QSize &requestedSize) const'],['../classalbert_1_1IconProvider.html#a55a13ae97b28bc322a39033cd97ff236',1,'albert::IconProvider::getPixmap(const QString &url, QSize *size, const QSize &requestedSize) const']]], + ['ginfo_2',['GINFO',['../logging_8h.html#af1a6e484a3ddad4bd0e51e44bff0abff',1,'logging.h']]], + ['globalquery_3',['GlobalQuery',['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html',1,'albert::GlobalQueryHandler']]], + ['globalqueryhandler_4',['GlobalQueryHandler',['../classalbert_1_1GlobalQueryHandler.html',1,'albert::GlobalQueryHandler'],['../classalbert_1_1GlobalQueryHandler.html#af8a4ed2ed60a8663bad38540e89f327d',1,'albert::GlobalQueryHandler::GlobalQueryHandler()']]], + ['globalqueryhandler_2eh_5',['globalqueryhandler.h',['../globalqueryhandler_8h.html',1,'']]], + ['gwarn_6',['GWARN',['../logging_8h.html#a9416f0366c1512a9b7049965498ac582',1,'logging.h']]] +]; diff --git a/reference/search/all_8.js b/reference/search/all_8.js new file mode 100644 index 00000000..8b0a3cda --- /dev/null +++ b/reference/search/all_8.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['handleglobalquery_0',['handleGlobalQuery',['../classalbert_1_1GlobalQueryHandler.html#a5d645c60fc65a716cb38ba960727605b',1,'albert::GlobalQueryHandler::handleGlobalQuery()'],['../classalbert_1_1IndexQueryHandler.html#a7129f0d3850d2a47cae20bdc8f1e069d',1,'albert::IndexQueryHandler::handleGlobalQuery()']]], + ['handletriggerquery_1',['handleTriggerQuery',['../classalbert_1_1GlobalQueryHandler.html#a165f839630152ddfd2ecc18a1d01c2ae',1,'albert::GlobalQueryHandler::handleTriggerQuery()'],['../classalbert_1_1TriggerQueryHandler.html#adf2cc8927e0f9a540b63669eab93ad23',1,'albert::TriggerQueryHandler::handleTriggerQuery()']]], + ['hide_2',['hide',['../namespacealbert.html#ac1d14794465f1cb9349ea0541a553949',1,'albert']]] +]; diff --git a/reference/search/all_9.js b/reference/search/all_9.js new file mode 100644 index 00000000..b431341e --- /dev/null +++ b/reference/search/all_9.js @@ -0,0 +1,33 @@ +var searchData= +[ + ['icon_5furls_5f_0',['icon_urls_',['../classalbert_1_1StandardItem.html#a4e3501c3da1050cb320f0fdd4f19591b',1,'albert::StandardItem']]], + ['iconprovider_1',['IconProvider',['../classalbert_1_1IconProvider.html',1,'albert::IconProvider'],['../classalbert_1_1IconProvider.html#a136fb53ba65c54eaebaa695354e18c3d',1,'albert::IconProvider::IconProvider()']]], + ['iconprovider_2eh_2',['iconprovider.h',['../iconprovider_8h.html',1,'']]], + ['iconurls_3',['iconUrls',['../classalbert_1_1StandardItem.html#a100e251755fc3b89a8eaef7dbb6a8dd9',1,'albert::StandardItem::iconUrls()'],['../classalbert_1_1Item.html#af24bba87910db269e79df47622e1bdd5',1,'albert::Item::iconUrls()']]], + ['iconurlsrole_4',['IconUrlsRole',['../itemroles_8h.html#ae9b729863972db16f8d4f8e70a6fe4d5',1,'itemroles.h']]], + ['id_5',['id',['../classalbert_1_1Action.html#a4a9974e46952a6f4852b9a34f4e546ff',1,'albert::Action::id()'],['../classalbert_1_1PluginMetaData.html#a95d4a8faa21db1b53b0b960f5948997b',1,'albert::PluginMetaData::id()'],['../classalbert_1_1Extension.html#aba79b0b7a42a03addbb4223462362b06',1,'albert::Extension::id()'],['../classalbert_1_1PluginInstance.html#a22c95896742f513f55702fef9f5329f1',1,'albert::PluginInstance::id()'],['../classalbert_1_1ExtensionPluginInstance.html#a3ed9f550076fa27f55eb071ed704c102',1,'albert::ExtensionPluginInstance::id()'],['../classalbert_1_1Item.html#a79a57458532eb980b93834ff8546d22f',1,'albert::Item::id()'],['../classalbert_1_1StandardItem.html#aa7eaf721cdb29dac01f965b912c001be',1,'albert::StandardItem::id() const override']]], + ['id_5f_6',['id_',['../classalbert_1_1StandardItem.html#a580b213d38ef4e7f5e2e05669b5ee750',1,'albert::StandardItem']]], + ['iid_7',['iid',['../classalbert_1_1PluginMetaData.html#a481699b0a5b2d99164631ba92610292e',1,'albert::PluginMetaData']]], + ['indexitem_8',['IndexItem',['../classalbert_1_1IndexItem.html',1,'albert::IndexItem'],['../classalbert_1_1IndexItem.html#af4fcc3f09f8f612437fb81d215216954',1,'albert::IndexItem::IndexItem()']]], + ['indexitem_2eh_9',['indexitem.h',['../indexitem_8h.html',1,'']]], + ['indexqueryhandler_10',['IndexQueryHandler',['../classalbert_1_1IndexQueryHandler.html',1,'albert::IndexQueryHandler'],['../classalbert_1_1IndexQueryHandler.html#a5eb404658ee263fd33bb44b7e6ce615b',1,'albert::IndexQueryHandler::IndexQueryHandler()']]], + ['indexqueryhandler_2eh_11',['indexqueryhandler.h',['../indexqueryhandler_8h.html',1,'']]], + ['info_12',['INFO',['../logging_8h.html#ae1103fea1e1b3c41ca3322d5389f7162',1,'logging.h']]], + ['initialize_13',['initialize',['../classalbert_1_1PluginInstance.html#a0037e4168904d455eaf0a5def1b0b205',1,'albert::PluginInstance']]], + ['input_14',['input',['../classalbert_1_1Frontend.html#a79f9cfdf9e46cdf5cacb10a87e675d2c',1,'albert::Frontend']]], + ['input_5faction_5ftext_5f_15',['input_action_text_',['../classalbert_1_1StandardItem.html#ace0e1c5710b75656df13f53a2588be66',1,'albert::StandardItem']]], + ['inputactionrole_16',['InputActionRole',['../itemroles_8h.html#a8e75baa6952bff913301f9eff2bf06d2',1,'itemroles.h']]], + ['inputactiontext_17',['inputActionText',['../classalbert_1_1Item.html#a895b7ffa23356556ef72d4ba33633306',1,'albert::Item::inputActionText()'],['../classalbert_1_1StandardItem.html#a9930511eb0a37648cdd1fae7fa7e1e98',1,'albert::StandardItem::inputActionText()']]], + ['inputhistory_18',['InputHistory',['../classalbert_1_1InputHistory.html',1,'albert::InputHistory'],['../classalbert_1_1InputHistory.html#a8dade81ec81caa047a79b1e1dafd266f',1,'albert::InputHistory::InputHistory()']]], + ['inputhistory_2eh_19',['inputhistory.h',['../inputhistory_8h.html',1,'']]], + ['instance_20',['instance',['../classalbert_1_1PluginLoader.html#a8828e8029b6520a1e4486e2d2196dc02',1,'albert::PluginLoader']]], + ['isfinished_21',['isFinished',['../classalbert_1_1Query.html#a74d697e5bdc98ed0abeac06be4e84897',1,'albert::Query']]], + ['isrunning_22',['isRunning',['../classalbert_1_1BackgroundExecutor.html#a2d798a9bb8decb19d6ad55570b7efaae',1,'albert::BackgroundExecutor']]], + ['istriggered_23',['isTriggered',['../classalbert_1_1Query.html#ab292530bd0031b69d0dc96e053ea2950',1,'albert::Query']]], + ['isvalid_24',['isValid',['../classalbert_1_1Query.html#acc1d5475f190ca21ca914c6408910078',1,'albert::Query::isValid()'],['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a099f6b2d7b99e8acd2694d791d8d79ab',1,'albert::GlobalQueryHandler::GlobalQuery::isValid()'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a102bcfd3d92f0c9bf94ba7a29c9fcc5a',1,'albert::TriggerQueryHandler::TriggerQuery::isValid()']]], + ['isvisible_25',['isVisible',['../classalbert_1_1Frontend.html#af6c0a0806b24fb6d7be13853f504f79f',1,'albert::Frontend']]], + ['item_26',['Item',['../classalbert_1_1Item.html',1,'albert']]], + ['item_27',['item',['../classalbert_1_1RankItem.html#a632f30a524f44fa1b8b87a6b567d8c8f',1,'albert::RankItem::item()'],['../classalbert_1_1IndexItem.html#a627e86379552accd1c25d4d12c67399e',1,'albert::IndexItem::item()']]], + ['item_2eh_28',['item.h',['../item_8h.html',1,'']]], + ['itemroles_2eh_29',['itemroles.h',['../itemroles_8h.html',1,'']]] +]; diff --git a/reference/search/all_a.js b/reference/search/all_a.js new file mode 100644 index 00000000..870ebc88 --- /dev/null +++ b/reference/search/all_a.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['license_0',['license',['../classalbert_1_1PluginMetaData.html#a6b2c517aba6610546d858f8ebdc017f3',1,'albert::PluginMetaData']]], + ['load_1',['load',['../classalbert_1_1PluginLoader.html#af62ca2713a8080868cee3bf26034a6f7',1,'albert::PluginLoader']]], + ['load_5ftype_2',['load_type',['../classalbert_1_1PluginMetaData.html#a467edd48fa6968f4e664ad4b4b39928c',1,'albert::PluginMetaData']]], + ['loaded_3',['Loaded',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fda7381d487d18845b379422325c0a768d6',1,'albert']]], + ['loadtype_4',['LoadType',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29de',1,'albert']]], + ['logging_2eh_5',['logging.h',['../logging_8h.html',1,'']]], + ['long_5fdescription_6',['long_description',['../classalbert_1_1PluginMetaData.html#a5917f03ca5724d216c50f06ca2c56ab8',1,'albert::PluginMetaData']]] +]; diff --git a/reference/search/all_b.js b/reference/search/all_b.js new file mode 100644 index 00000000..4cfd4689 --- /dev/null +++ b/reference/search/all_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['maintainers_0',['maintainers',['../classalbert_1_1PluginMetaData.html#acf864d42649ca929b86ca6bc0a657928',1,'albert::PluginMetaData']]], + ['make_1',['make',['../classalbert_1_1StandardItem.html#a7051dd70babb92fd038c09f744f9065e',1,'albert::StandardItem::make(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})'],['../classalbert_1_1StandardItem.html#a0331ad26d56afe1643185f51dbebf2be',1,'albert::StandardItem::make(QString id={}, QString text={}, QString subtext={}, QStringList icon_urls={}, std::vector< Action > actions={})']]], + ['matchactions_2',['matchActions',['../classalbert_1_1Query.html#a3400e3516c8b2c842a493d5866b189ff',1,'albert::Query']]], + ['matches_3',['matches',['../classalbert_1_1Query.html#a81bdb8ac1532341640af4aab33fd0008',1,'albert::Query']]], + ['metadata_4',['metaData',['../classalbert_1_1PluginLoader.html#a5bbbb62f0a52690cfa7e793e100ddd34',1,'albert::PluginLoader']]] +]; diff --git a/reference/search/all_c.js b/reference/search/all_c.js new file mode 100644 index 00000000..033fdc7d --- /dev/null +++ b/reference/search/all_c.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['name_0',['name',['../classalbert_1_1PluginMetaData.html#adb66212725fe3ea81fc11ba522f9655b',1,'albert::PluginMetaData::name()'],['../classalbert_1_1Extension.html#a632e2c0b2818d985d5a18f966c37e56a',1,'albert::Extension::name()'],['../classalbert_1_1PluginInstance.html#abcd75710b7bc43ff2768713609306db1',1,'albert::PluginInstance::name()'],['../classalbert_1_1ExtensionPluginInstance.html#a38bf089a2c69872ac046dbef78209c84',1,'albert::ExtensionPluginInstance::name()']]], + ['networkmanager_1',['networkManager',['../namespacealbert.html#a5c3bcb68953e42d33df36ecb7336c974',1,'albert']]], + ['next_2',['next',['../classalbert_1_1InputHistory.html#aec297185c40d527786902dcb352dbca2',1,'albert::InputHistory']]], + ['notification_3',['Notification',['../classalbert_1_1Notification.html',1,'albert::Notification'],['../classalbert_1_1Notification.html#abe44d10a5e094a7506585bc975bda287',1,'albert::Notification::Notification()']]], + ['nounload_4',['NoUnload',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29deaa771867185d6ec073d4dfdacde9d49be',1,'albert']]] +]; diff --git a/reference/search/all_d.js b/reference/search/all_d.js new file mode 100644 index 00000000..ea1b374f --- /dev/null +++ b/reference/search/all_d.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['onadd_0',['onAdd',['../classalbert_1_1ExtensionWatcher.html#acbd16bc3d28cf3934819c5bc3d8d7aa7',1,'albert::ExtensionWatcher']]], + ['onrem_1',['onRem',['../classalbert_1_1ExtensionWatcher.html#abbff93ba70d0f828f0345ee0b65ab74c',1,'albert::ExtensionWatcher']]], + ['openissuetracker_2',['openIssueTracker',['../namespacealbert.html#a7415146a8bdf3310c751a7e00866441c',1,'albert']]], + ['openurl_3',['openUrl',['../namespacealbert.html#a56363c99d1fba78c716d82498710acb4',1,'albert::openUrl(const QUrl &url)'],['../namespacealbert.html#af6cb7b3a800e9f6eff1c8aff08ae07d4',1,'albert::openUrl(const QString &url)']]], + ['openwebsite_4',['openWebsite',['../namespacealbert.html#a124eed71fa205fa1df15b60e8c3236cb',1,'albert']]], + ['operator_3d_5',['operator=',['../classalbert_1_1StandardItem.html#a5ac7e3ffe6459e9dcddbb4398d5b70f8',1,'albert::StandardItem::operator=(StandardItem &&)=default'],['../classalbert_1_1StandardItem.html#ab099fb8d9964defec643468f1a3b90dd',1,'albert::StandardItem::operator=(const StandardItem &)=delete']]] +]; diff --git a/reference/search/all_e.js b/reference/search/all_e.js new file mode 100644 index 00000000..a1e011ad --- /dev/null +++ b/reference/search/all_e.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['parallel_0',['parallel',['../classalbert_1_1BackgroundExecutor.html#a6866d11ec2d2ecca149318a4b6a3f97c',1,'albert::BackgroundExecutor']]], + ['path_1',['path',['../classalbert_1_1PluginLoader.html#ad86c8acbba827b071c821d6374d7a383',1,'albert::PluginLoader']]], + ['platforms_2',['platforms',['../classalbert_1_1PluginMetaData.html#af20d9960d822f37578c1404544665df3',1,'albert::PluginMetaData']]], + ['plugin_3',['Plugin',['../classalbert_1_1plugin_1_1Plugin.html',1,'albert::plugin']]], + ['plugin_2eh_4',['plugin.h',['../plugin_8h.html',1,'']]], + ['plugininstance_5',['PluginInstance',['../classalbert_1_1PluginInstance.html',1,'albert::PluginInstance'],['../classalbert_1_1PluginInstance.html#a97268fde3a98b3ea1857a5effd01e277',1,'albert::PluginInstance::PluginInstance()']]], + ['plugininstance_2eh_6',['plugininstance.h',['../plugininstance_8h.html',1,'']]], + ['pluginloader_7',['PluginLoader',['../classalbert_1_1PluginLoader.html',1,'albert::PluginLoader'],['../classalbert_1_1PluginLoader.html#ab98e4528a99b0a46f1f4e114fea942b8',1,'albert::PluginLoader::PluginLoader()']]], + ['pluginloader_2eh_8',['pluginloader.h',['../pluginloader_8h.html',1,'']]], + ['pluginmetadata_9',['PluginMetaData',['../classalbert_1_1PluginMetaData.html',1,'albert']]], + ['pluginmetadata_2eh_10',['pluginmetadata.h',['../pluginmetadata_8h.html',1,'']]], + ['pluginprovider_11',['PluginProvider',['../classalbert_1_1PluginProvider.html',1,'albert']]], + ['pluginprovider_2eh_12',['pluginprovider.h',['../pluginprovider_8h.html',1,'']]], + ['plugins_13',['plugins',['../classalbert_1_1PluginProvider.html#a7976388d5144d9a0a0e34156afaabf32',1,'albert::PluginProvider']]], + ['pluginstate_14',['PluginState',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fd',1,'albert']]], + ['prev_15',['prev',['../classalbert_1_1InputHistory.html#aa75446e23cd1c296d24e7db35c96bb68',1,'albert::InputHistory']]], + ['provider_16',['provider',['../classalbert_1_1PluginLoader.html#a3a17c5bb5b103aeb84777ca6678c09cc',1,'albert::PluginLoader']]] +]; diff --git a/reference/search/all_f.js b/reference/search/all_f.js new file mode 100644 index 00000000..18a075c8 --- /dev/null +++ b/reference/search/all_f.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['query_0',['Query',['../classalbert_1_1Query.html',1,'albert']]], + ['query_1',['query',['../classalbert_1_1Frontend.html#ae88197ae3e1ee2e6d8e42238fbd77e05',1,'albert::Frontend']]], + ['query_2eh_2',['query.h',['../query_8h.html',1,'']]], + ['quit_3',['quit',['../namespacealbert.html#ad577c75761cd1124a31886dad4bf74c3',1,'albert']]] +]; diff --git a/reference/search/classes_0.js b/reference/search/classes_0.js new file mode 100644 index 00000000..e1845ffe --- /dev/null +++ b/reference/search/classes_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['action_0',['Action',['../classalbert_1_1Action.html',1,'albert']]] +]; diff --git a/reference/search/classes_1.js b/reference/search/classes_1.js new file mode 100644 index 00000000..77e387c9 --- /dev/null +++ b/reference/search/classes_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['backgroundexecutor_0',['BackgroundExecutor',['../classalbert_1_1BackgroundExecutor.html',1,'albert']]] +]; diff --git a/reference/search/classes_2.js b/reference/search/classes_2.js new file mode 100644 index 00000000..bd7584ec --- /dev/null +++ b/reference/search/classes_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['extension_0',['Extension',['../classalbert_1_1Extension.html',1,'albert']]], + ['extensionplugin_1',['ExtensionPlugin',['../classalbert_1_1plugin_1_1ExtensionPlugin.html',1,'albert::plugin']]], + ['extensionplugininstance_2',['ExtensionPluginInstance',['../classalbert_1_1ExtensionPluginInstance.html',1,'albert']]], + ['extensionregistry_3',['ExtensionRegistry',['../classalbert_1_1ExtensionRegistry.html',1,'albert']]], + ['extensionwatcher_4',['ExtensionWatcher',['../classalbert_1_1ExtensionWatcher.html',1,'albert']]] +]; diff --git a/reference/search/classes_3.js b/reference/search/classes_3.js new file mode 100644 index 00000000..b9e223f3 --- /dev/null +++ b/reference/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fallbackhandler_0',['FallbackHandler',['../classalbert_1_1FallbackHandler.html',1,'albert']]], + ['frontend_1',['Frontend',['../classalbert_1_1Frontend.html',1,'albert']]] +]; diff --git a/reference/search/classes_4.js b/reference/search/classes_4.js new file mode 100644 index 00000000..18711cc1 --- /dev/null +++ b/reference/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['globalquery_0',['GlobalQuery',['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html',1,'albert::GlobalQueryHandler']]], + ['globalqueryhandler_1',['GlobalQueryHandler',['../classalbert_1_1GlobalQueryHandler.html',1,'albert']]] +]; diff --git a/reference/search/classes_5.js b/reference/search/classes_5.js new file mode 100644 index 00000000..c8ecf339 --- /dev/null +++ b/reference/search/classes_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['iconprovider_0',['IconProvider',['../classalbert_1_1IconProvider.html',1,'albert']]], + ['indexitem_1',['IndexItem',['../classalbert_1_1IndexItem.html',1,'albert']]], + ['indexqueryhandler_2',['IndexQueryHandler',['../classalbert_1_1IndexQueryHandler.html',1,'albert']]], + ['inputhistory_3',['InputHistory',['../classalbert_1_1InputHistory.html',1,'albert']]], + ['item_4',['Item',['../classalbert_1_1Item.html',1,'albert']]] +]; diff --git a/reference/search/classes_6.js b/reference/search/classes_6.js new file mode 100644 index 00000000..40dc41e9 --- /dev/null +++ b/reference/search/classes_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['notification_0',['Notification',['../classalbert_1_1Notification.html',1,'albert']]] +]; diff --git a/reference/search/classes_7.js b/reference/search/classes_7.js new file mode 100644 index 00000000..583ab9c9 --- /dev/null +++ b/reference/search/classes_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['plugin_0',['Plugin',['../classalbert_1_1plugin_1_1Plugin.html',1,'albert::plugin']]], + ['plugininstance_1',['PluginInstance',['../classalbert_1_1PluginInstance.html',1,'albert']]], + ['pluginloader_2',['PluginLoader',['../classalbert_1_1PluginLoader.html',1,'albert']]], + ['pluginmetadata_3',['PluginMetaData',['../classalbert_1_1PluginMetaData.html',1,'albert']]], + ['pluginprovider_4',['PluginProvider',['../classalbert_1_1PluginProvider.html',1,'albert']]] +]; diff --git a/reference/search/classes_8.js b/reference/search/classes_8.js new file mode 100644 index 00000000..f0361ba1 --- /dev/null +++ b/reference/search/classes_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['query_0',['Query',['../classalbert_1_1Query.html',1,'albert']]] +]; diff --git a/reference/search/classes_9.js b/reference/search/classes_9.js new file mode 100644 index 00000000..858f7d57 --- /dev/null +++ b/reference/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rankitem_0',['RankItem',['../classalbert_1_1RankItem.html',1,'albert']]] +]; diff --git a/reference/search/classes_a.js b/reference/search/classes_a.js new file mode 100644 index 00000000..04f9e501 --- /dev/null +++ b/reference/search/classes_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['standarditem_0',['StandardItem',['../classalbert_1_1StandardItem.html',1,'albert']]] +]; diff --git a/reference/search/classes_b.js b/reference/search/classes_b.js new file mode 100644 index 00000000..2c13f13b --- /dev/null +++ b/reference/search/classes_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['triggerquery_0',['TriggerQuery',['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html',1,'albert::TriggerQueryHandler']]], + ['triggerqueryhandler_1',['TriggerQueryHandler',['../classalbert_1_1TriggerQueryHandler.html',1,'albert']]] +]; diff --git a/reference/search/close.svg b/reference/search/close.svg new file mode 100644 index 00000000..a933eea1 --- /dev/null +++ b/reference/search/close.svg @@ -0,0 +1,31 @@ + + + + + + image/svg+xml + + + + + + + + diff --git a/reference/search/defines_0.js b/reference/search/defines_0.js new file mode 100644 index 00000000..e68a1499 --- /dev/null +++ b/reference/search/defines_0.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['albert_5flogging_5fcategory_0',['ALBERT_LOGGING_CATEGORY',['../logging_8h.html#addad4c9bbb31f10c906b4c150304ac71',1,'logging.h']]], + ['albert_5fplugin_1',['ALBERT_PLUGIN',['../plugin_8h.html#a8787b7c8c0b456d908480300c22d3f5f',1,'plugin.h']]], + ['albert_5fplugin_5fproperty_2',['ALBERT_PLUGIN_PROPERTY',['../plugin_8h.html#abf1cdce7b9bdaf0075417c18ac35918d',1,'plugin.h']]], + ['albert_5fplugin_5fproperty_5fconnect_3',['ALBERT_PLUGIN_PROPERTY_CONNECT',['../plugin_8h.html#aff21fe2718b969e4904239dea7b81e6c',1,'plugin.h']]], + ['albert_5fplugin_5fproperty_5fnontrivial_4',['ALBERT_PLUGIN_PROPERTY_NONTRIVIAL',['../plugin_8h.html#ad585903551b6931ccdc4862bd0599100',1,'plugin.h']]] +]; diff --git a/reference/search/defines_1.js b/reference/search/defines_1.js new file mode 100644 index 00000000..2bbb697a --- /dev/null +++ b/reference/search/defines_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['crit_0',['CRIT',['../logging_8h.html#a44ad7a1cce3ba64ff004aa697be1a079',1,'logging.h']]] +]; diff --git a/reference/search/defines_2.js b/reference/search/defines_2.js new file mode 100644 index 00000000..8cb2471f --- /dev/null +++ b/reference/search/defines_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['debg_0',['DEBG',['../logging_8h.html#aebe3da5ae2400e467893e8c51de8736d',1,'logging.h']]] +]; diff --git a/reference/search/defines_3.js b/reference/search/defines_3.js new file mode 100644 index 00000000..b291014e --- /dev/null +++ b/reference/search/defines_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['expand_5fstringize_0',['EXPAND_STRINGIZE',['../plugin_8h.html#afa5f33475901a9746f14f6975b7deaab',1,'plugin.h']]] +]; diff --git a/reference/search/defines_4.js b/reference/search/defines_4.js new file mode 100644 index 00000000..b26fcf3b --- /dev/null +++ b/reference/search/defines_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['gcrit_0',['GCRIT',['../logging_8h.html#ac4beb0cd6b787de476fbf5db45291b67',1,'logging.h']]], + ['ginfo_1',['GINFO',['../logging_8h.html#af1a6e484a3ddad4bd0e51e44bff0abff',1,'logging.h']]], + ['gwarn_2',['GWARN',['../logging_8h.html#a9416f0366c1512a9b7049965498ac582',1,'logging.h']]] +]; diff --git a/reference/search/defines_5.js b/reference/search/defines_5.js new file mode 100644 index 00000000..84248002 --- /dev/null +++ b/reference/search/defines_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['info_0',['INFO',['../logging_8h.html#ae1103fea1e1b3c41ca3322d5389f7162',1,'logging.h']]] +]; diff --git a/reference/search/defines_6.js b/reference/search/defines_6.js new file mode 100644 index 00000000..8fe955f7 --- /dev/null +++ b/reference/search/defines_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['stringize_0',['STRINGIZE',['../plugin_8h.html#a30d26964995580586ac787c24b82b2c3',1,'plugin.h']]] +]; diff --git a/reference/search/defines_7.js b/reference/search/defines_7.js new file mode 100644 index 00000000..f90408e3 --- /dev/null +++ b/reference/search/defines_7.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['warn_0',['WARN',['../logging_8h.html#a271d8f7f52be750e5c744a394ec71344',1,'logging.h']]] +]; diff --git a/reference/search/enums_0.js b/reference/search/enums_0.js new file mode 100644 index 00000000..47ffb71c --- /dev/null +++ b/reference/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loadtype_0',['LoadType',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29de',1,'albert']]] +]; diff --git a/reference/search/enums_1.js b/reference/search/enums_1.js new file mode 100644 index 00000000..dd74f4e2 --- /dev/null +++ b/reference/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['pluginstate_0',['PluginState',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fd',1,'albert']]] +]; diff --git a/reference/search/enumvalues_0.js b/reference/search/enumvalues_0.js new file mode 100644 index 00000000..5ab94569 --- /dev/null +++ b/reference/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['busy_0',['Busy',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fdad8a942ef2b04672adfafef0ad817a407',1,'albert']]] +]; diff --git a/reference/search/enumvalues_1.js b/reference/search/enumvalues_1.js new file mode 100644 index 00000000..b0adef9c --- /dev/null +++ b/reference/search/enumvalues_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['frontend_0',['Frontend',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29dead97ba66b283564339628b71975a6e68d',1,'albert']]] +]; diff --git a/reference/search/enumvalues_2.js b/reference/search/enumvalues_2.js new file mode 100644 index 00000000..93690ef1 --- /dev/null +++ b/reference/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['loaded_0',['Loaded',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fda7381d487d18845b379422325c0a768d6',1,'albert']]] +]; diff --git a/reference/search/enumvalues_3.js b/reference/search/enumvalues_3.js new file mode 100644 index 00000000..e98bf670 --- /dev/null +++ b/reference/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['nounload_0',['NoUnload',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29deaa771867185d6ec073d4dfdacde9d49be',1,'albert']]] +]; diff --git a/reference/search/enumvalues_4.js b/reference/search/enumvalues_4.js new file mode 100644 index 00000000..23ab9f3c --- /dev/null +++ b/reference/search/enumvalues_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unloaded_0',['Unloaded',['../namespacealbert.html#aa886962775bed68a6a630016e16d47fdaa5ae20aa7fda5bd38bf0dce98e65bd2d',1,'albert']]], + ['user_1',['User',['../namespacealbert.html#aacb8c34f13a7229d9c43762a879f29dea8f9bfe9d1345237cb3b2b205864da075',1,'albert']]] +]; diff --git a/reference/search/files_0.js b/reference/search/files_0.js new file mode 100644 index 00000000..68b9eabc --- /dev/null +++ b/reference/search/files_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['action_2eh_0',['action.h',['../action_8h.html',1,'']]], + ['albert_2eh_1',['albert.h',['../albert_8h.html',1,'']]] +]; diff --git a/reference/search/files_1.js b/reference/search/files_1.js new file mode 100644 index 00000000..37ab2e5b --- /dev/null +++ b/reference/search/files_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['backgroundexecutor_2eh_0',['backgroundexecutor.h',['../backgroundexecutor_8h.html',1,'']]] +]; diff --git a/reference/search/files_2.js b/reference/search/files_2.js new file mode 100644 index 00000000..e2942262 --- /dev/null +++ b/reference/search/files_2.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['extension_2eh_0',['extension.h',['../extension_8h.html',1,'']]], + ['extensionregistry_2eh_1',['extensionregistry.h',['../extensionregistry_8h.html',1,'']]], + ['extensionwatcher_2eh_2',['extensionwatcher.h',['../extensionwatcher_8h.html',1,'']]] +]; diff --git a/reference/search/files_3.js b/reference/search/files_3.js new file mode 100644 index 00000000..402a14ae --- /dev/null +++ b/reference/search/files_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['fallbackprovider_2eh_0',['fallbackprovider.h',['../fallbackprovider_8h.html',1,'']]], + ['frontend_2eh_1',['frontend.h',['../frontend_8h.html',1,'']]] +]; diff --git a/reference/search/files_4.js b/reference/search/files_4.js new file mode 100644 index 00000000..5bbc1e5b --- /dev/null +++ b/reference/search/files_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['globalqueryhandler_2eh_0',['globalqueryhandler.h',['../globalqueryhandler_8h.html',1,'']]] +]; diff --git a/reference/search/files_5.js b/reference/search/files_5.js new file mode 100644 index 00000000..191d385e --- /dev/null +++ b/reference/search/files_5.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['iconprovider_2eh_0',['iconprovider.h',['../iconprovider_8h.html',1,'']]], + ['indexitem_2eh_1',['indexitem.h',['../indexitem_8h.html',1,'']]], + ['indexqueryhandler_2eh_2',['indexqueryhandler.h',['../indexqueryhandler_8h.html',1,'']]], + ['inputhistory_2eh_3',['inputhistory.h',['../inputhistory_8h.html',1,'']]], + ['item_2eh_4',['item.h',['../item_8h.html',1,'']]], + ['itemroles_2eh_5',['itemroles.h',['../itemroles_8h.html',1,'']]] +]; diff --git a/reference/search/files_6.js b/reference/search/files_6.js new file mode 100644 index 00000000..3df06f23 --- /dev/null +++ b/reference/search/files_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['logging_2eh_0',['logging.h',['../logging_8h.html',1,'']]] +]; diff --git a/reference/search/files_7.js b/reference/search/files_7.js new file mode 100644 index 00000000..77bb6917 --- /dev/null +++ b/reference/search/files_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['plugin_2eh_0',['plugin.h',['../plugin_8h.html',1,'']]], + ['plugininstance_2eh_1',['plugininstance.h',['../plugininstance_8h.html',1,'']]], + ['pluginloader_2eh_2',['pluginloader.h',['../pluginloader_8h.html',1,'']]], + ['pluginmetadata_2eh_3',['pluginmetadata.h',['../pluginmetadata_8h.html',1,'']]], + ['pluginprovider_2eh_4',['pluginprovider.h',['../pluginprovider_8h.html',1,'']]] +]; diff --git a/reference/search/files_8.js b/reference/search/files_8.js new file mode 100644 index 00000000..a0a2d582 --- /dev/null +++ b/reference/search/files_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['query_2eh_0',['query.h',['../query_8h.html',1,'']]] +]; diff --git a/reference/search/files_9.js b/reference/search/files_9.js new file mode 100644 index 00000000..ba579e51 --- /dev/null +++ b/reference/search/files_9.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['rankitem_2eh_0',['rankitem.h',['../rankitem_8h.html',1,'']]], + ['readme_2emd_1',['README.md',['../README_8md.html',1,'']]] +]; diff --git a/reference/search/files_a.js b/reference/search/files_a.js new file mode 100644 index 00000000..5edcff0c --- /dev/null +++ b/reference/search/files_a.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['standarditem_2eh_0',['standarditem.h',['../standarditem_8h.html',1,'']]] +]; diff --git a/reference/search/files_b.js b/reference/search/files_b.js new file mode 100644 index 00000000..85465844 --- /dev/null +++ b/reference/search/files_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['triggerqueryhandler_2eh_0',['triggerqueryhandler.h',['../triggerqueryhandler_8h.html',1,'']]] +]; diff --git a/reference/search/functions_0.js b/reference/search/functions_0.js new file mode 100644 index 00000000..6ceb3751 --- /dev/null +++ b/reference/search/functions_0.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['action_0',['Action',['../classalbert_1_1Action.html#a0963c26973e1b87f65050106c672fca6',1,'albert::Action']]], + ['actions_1',['actions',['../classalbert_1_1Item.html#ad8423cbb1d705f5f3837478c120fc2c0',1,'albert::Item::actions()'],['../classalbert_1_1StandardItem.html#a397e19018275ddd82cdfa5c1f07bc459',1,'albert::StandardItem::actions()']]], + ['activatefallback_2',['activateFallback',['../classalbert_1_1Query.html#ac6ddb0ff1c822795a5e2412e1a659c8d',1,'albert::Query']]], + ['activatematch_3',['activateMatch',['../classalbert_1_1Query.html#a3c3e2d3e57bbd61df7717771bc2af735',1,'albert::Query']]], + ['add_4',['add',['../classalbert_1_1InputHistory.html#a52beb209e78d2f8abb9c1337575b9a72',1,'albert::InputHistory::add()'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a0e6c722e1e91bee4782c4b0554390a45',1,'albert::TriggerQueryHandler::TriggerQuery::add(const std::shared_ptr< Item > &item)=0'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a3f30cdcec326e81f0a9b288b469fa15a',1,'albert::TriggerQueryHandler::TriggerQuery::add(std::shared_ptr< Item > &&item)=0'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a560416bd2151b4f8fb69abd176dc7ce7',1,'albert::TriggerQueryHandler::TriggerQuery::add(const std::vector< std::shared_ptr< Item > > &items)=0'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#ac3b48e6c871c8bafd8b3f4a07a63f519',1,'albert::TriggerQueryHandler::TriggerQuery::add(std::vector< std::shared_ptr< Item > > &&items)=0'],['../classalbert_1_1ExtensionRegistry.html#a357b02e493167653f07051c5584f19a1',1,'albert::ExtensionRegistry::add(Extension *e)']]], + ['added_5',['added',['../classalbert_1_1ExtensionRegistry.html#a845f61794954dc73bb9b2722f459c1d4',1,'albert::ExtensionRegistry']]], + ['allowtriggerremap_6',['allowTriggerRemap',['../classalbert_1_1TriggerQueryHandler.html#a565b2220701d672e00c54b71f4e9cb94',1,'albert::TriggerQueryHandler']]], + ['applyusagescore_7',['applyUsageScore',['../classalbert_1_1GlobalQueryHandler.html#a656d92e3b99137024993f7721e02e676',1,'albert::GlobalQueryHandler']]] +]; diff --git a/reference/search/functions_1.js b/reference/search/functions_1.js new file mode 100644 index 00000000..fcee89bd --- /dev/null +++ b/reference/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['backgroundexecutor_0',['BackgroundExecutor',['../classalbert_1_1BackgroundExecutor.html#aabd715da822b3d7563504694bb6f7f30',1,'albert::BackgroundExecutor']]], + ['buildconfigwidget_1',['buildConfigWidget',['../classalbert_1_1PluginInstance.html#ab1376d91889acab63531e780b3ffdef8',1,'albert::PluginInstance']]] +]; diff --git a/reference/search/functions_10.js b/reference/search/functions_10.js new file mode 100644 index 00000000..394511c8 --- /dev/null +++ b/reference/search/functions_10.js @@ -0,0 +1,27 @@ +var searchData= +[ + ['setactions_0',['setActions',['../classalbert_1_1StandardItem.html#af285d6a81a83b640bde98abe223ed05f',1,'albert::StandardItem']]], + ['setclipboardtext_1',['setClipboardText',['../namespacealbert.html#af1ce5669423d646a686c0682917930ab',1,'albert']]], + ['setclipboardtextandpaste_2',['setClipboardTextAndPaste',['../namespacealbert.html#a074c9a711f70e31a066e1e432fc41490',1,'albert']]], + ['setextensionregistry_3',['setExtensionRegistry',['../classalbert_1_1ExtensionWatcher.html#a8c749a8b8f76c7e6c19b9dcdd8e8d765',1,'albert::ExtensionWatcher']]], + ['setfuzzymatching_4',['setFuzzyMatching',['../classalbert_1_1IndexQueryHandler.html#a8b8017d998ad997a46be3aaedb6a0ae5',1,'albert::IndexQueryHandler::setFuzzyMatching()'],['../classalbert_1_1TriggerQueryHandler.html#a4004638b15c55c526b0088e12d20b7f2',1,'albert::TriggerQueryHandler::setFuzzyMatching()']]], + ['seticonurls_5',['setIconUrls',['../classalbert_1_1StandardItem.html#aa2e6deac74aec9f6afc06ecd14743d7e',1,'albert::StandardItem']]], + ['setid_6',['setId',['../classalbert_1_1StandardItem.html#a482b09f80aaec878a9cb3cfded27ecdf',1,'albert::StandardItem']]], + ['setindexitems_7',['setIndexItems',['../classalbert_1_1IndexQueryHandler.html#ae9ac32494f3f85fe5af6a13085e6c1ec',1,'albert::IndexQueryHandler']]], + ['setinput_8',['setInput',['../classalbert_1_1Frontend.html#a08349cc72ea7d21aa6bd989e1cf84991',1,'albert::Frontend']]], + ['setinputactiontext_9',['setInputActionText',['../classalbert_1_1StandardItem.html#ab3867f39fe824d9873248f406a4fa622',1,'albert::StandardItem']]], + ['setsubtext_10',['setSubtext',['../classalbert_1_1StandardItem.html#a6db7d37f05d57a9695a442325c61470f',1,'albert::StandardItem']]], + ['settext_11',['setText',['../classalbert_1_1StandardItem.html#aa6a79337acbbe55d810307ee12b3299b',1,'albert::StandardItem']]], + ['settings_12',['settings',['../classalbert_1_1PluginInstance.html#a9413862a66464d1bdeb940e1d7971593',1,'albert::PluginInstance::settings()'],['../namespacealbert.html#aefe080148aeeb8ec606be9e4d7585801',1,'albert::settings()']]], + ['setvisible_13',['setVisible',['../classalbert_1_1Frontend.html#a18af1da7411cb5ca3a9e90471f8f70a0',1,'albert::Frontend']]], + ['show_14',['show',['../namespacealbert.html#a392bdfcdcee15dcaf17fb5dc6d3d3113',1,'albert']]], + ['showsettings_15',['showSettings',['../namespacealbert.html#ab8aa8ed98419a442ebd5e3a303f26347',1,'albert']]], + ['standarditem_16',['StandardItem',['../classalbert_1_1StandardItem.html#ac8f59f5af9d3b484b5f3c2efec9fac94',1,'albert::StandardItem::StandardItem(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})'],['../classalbert_1_1StandardItem.html#a4fc74616cb7bb8b4c4fc28d66781b910',1,'albert::StandardItem::StandardItem(const StandardItem &)=delete'],['../classalbert_1_1StandardItem.html#a8a07221cae4641ce2d11ef98d843db52',1,'albert::StandardItem::StandardItem(StandardItem &&)=default']]], + ['state_17',['state',['../namespacealbert.html#ad6c8ce82c40bddee897a2d14bc46b67c',1,'albert::state()'],['../classalbert_1_1PluginLoader.html#abf8e06e6e18dd0b780b1febae2d1d2d9',1,'albert::PluginLoader::state() const']]], + ['statechanged_18',['stateChanged',['../classalbert_1_1PluginLoader.html#a543b6773b233861d16c2d790068d39a8',1,'albert::PluginLoader']]], + ['stateinfo_19',['stateInfo',['../classalbert_1_1PluginLoader.html#a6a243bd57822511eae2cad673fb13839',1,'albert::PluginLoader']]], + ['string_20',['string',['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a4a0e8a98d871f786f738118940c1f351',1,'albert::TriggerQueryHandler::TriggerQuery::string()'],['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a6077a5394564eec16474dbb4b3a43559',1,'albert::GlobalQueryHandler::GlobalQuery::string()'],['../classalbert_1_1Query.html#ae967c24f8c35a866235eecdc83b36fb6',1,'albert::Query::string()']]], + ['subtext_21',['subtext',['../classalbert_1_1Item.html#a510423487b0ae6c2fb800521718a831d',1,'albert::Item::subtext()'],['../classalbert_1_1StandardItem.html#a1ab1c6f42fe6e919db5e7f44b4424672',1,'albert::StandardItem::subtext()']]], + ['supportsfuzzymatching_22',['supportsFuzzyMatching',['../classalbert_1_1IndexQueryHandler.html#a4918cddcd95dafedddbe6b2b4fbe9149',1,'albert::IndexQueryHandler::supportsFuzzyMatching()'],['../classalbert_1_1TriggerQueryHandler.html#a82133091f339ec43665604501dc562ea',1,'albert::TriggerQueryHandler::supportsFuzzyMatching()']]], + ['synopsis_23',['synopsis',['../classalbert_1_1Query.html#a055e6e2dc39d1bc8c5df67ead0adbf14',1,'albert::Query::synopsis()'],['../classalbert_1_1IndexQueryHandler.html#ae79550a61e17fec1cf89fb009b9f2204',1,'albert::IndexQueryHandler::synopsis()'],['../classalbert_1_1TriggerQueryHandler.html#a9853785b6798df4ef4b18ab715bb8608',1,'albert::TriggerQueryHandler::synopsis()']]] +]; diff --git a/reference/search/functions_11.js b/reference/search/functions_11.js new file mode 100644 index 00000000..99126a1f --- /dev/null +++ b/reference/search/functions_11.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['text_0',['text',['../classalbert_1_1Item.html#acf06be44b0d88db1941325b06c5d671d',1,'albert::Item::text()'],['../classalbert_1_1StandardItem.html#adfd90bae2b852c8233cb4b7f464de316',1,'albert::StandardItem::text()']]], + ['toggle_1',['toggle',['../namespacealbert.html#a99e86f2694429e695055d34e1c1ec197',1,'albert']]], + ['trigger_2',['trigger',['../classalbert_1_1Query.html#a9a6cf0301a8fbae3cbb9cb77c7be3454',1,'albert::Query::trigger()'],['../classalbert_1_1TriggerQueryHandler.html#a0951983836810772176cd42f39170892',1,'albert::TriggerQueryHandler::trigger()'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a870bf42eebe581976cab326e541b52c1',1,'albert::TriggerQueryHandler::TriggerQuery::trigger()']]], + ['triggerqueryhandler_3',['TriggerQueryHandler',['../classalbert_1_1TriggerQueryHandler.html#adffedf3db5b8ed2e2477ad0bb1dda717',1,'albert::TriggerQueryHandler']]] +]; diff --git a/reference/search/functions_12.js b/reference/search/functions_12.js new file mode 100644 index 00000000..ca6cb33e --- /dev/null +++ b/reference/search/functions_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unload_0',['unload',['../classalbert_1_1PluginLoader.html#a25f25bbb3e3f697728a9f28abc28314a',1,'albert::PluginLoader']]], + ['updateindexitems_1',['updateIndexItems',['../classalbert_1_1IndexQueryHandler.html#ad49fb19ea3f3aa4361416069d5462c5f',1,'albert::IndexQueryHandler']]] +]; diff --git a/reference/search/functions_13.js b/reference/search/functions_13.js new file mode 100644 index 00000000..cad7dcb4 --- /dev/null +++ b/reference/search/functions_13.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['winid_0',['winId',['../classalbert_1_1Frontend.html#a7c6eaea8a9f97ce48ee0c227760b4557',1,'albert::Frontend']]] +]; diff --git a/reference/search/functions_14.js b/reference/search/functions_14.js new file mode 100644 index 00000000..7c606525 --- /dev/null +++ b/reference/search/functions_14.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['_7ebackgroundexecutor_0',['~BackgroundExecutor',['../classalbert_1_1BackgroundExecutor.html#a373e414af23f1ff1f389194b42fc2d81',1,'albert::BackgroundExecutor']]], + ['_7eextension_1',['~Extension',['../classalbert_1_1Extension.html#a1a3136f391036448f562e969e6cdef3e',1,'albert::Extension']]], + ['_7eextensionwatcher_2',['~ExtensionWatcher',['../classalbert_1_1ExtensionWatcher.html#a9b9f213fe24d184534616d3a4f2e7fe2',1,'albert::ExtensionWatcher']]], + ['_7eglobalquery_3',['~GlobalQuery',['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a6e6f8c2c75061434c7458e00bc642ec0',1,'albert::GlobalQueryHandler::GlobalQuery']]], + ['_7eglobalqueryhandler_4',['~GlobalQueryHandler',['../classalbert_1_1GlobalQueryHandler.html#a3e4cba0351c0d47953476559db4b9b3a',1,'albert::GlobalQueryHandler']]], + ['_7eiconprovider_5',['~IconProvider',['../classalbert_1_1IconProvider.html#a9974dd36fa979a4a35041f4b2c386b30',1,'albert::IconProvider']]], + ['_7eindexqueryhandler_6',['~IndexQueryHandler',['../classalbert_1_1IndexQueryHandler.html#abaa098cb27e17c6d185d29f53083ce7d',1,'albert::IndexQueryHandler']]], + ['_7einputhistory_7',['~InputHistory',['../classalbert_1_1InputHistory.html#a4f0fbb944ffdeb950f7458e0df794ecc',1,'albert::InputHistory']]], + ['_7eitem_8',['~Item',['../classalbert_1_1Item.html#a148f86ed842727593fe565b58ef76a4d',1,'albert::Item']]], + ['_7enotification_9',['~Notification',['../classalbert_1_1Notification.html#aa1d3a2a9695f2c76f4f90dc9abeeff0f',1,'albert::Notification']]], + ['_7eplugininstance_10',['~PluginInstance',['../classalbert_1_1PluginInstance.html#a5f45a55c5eb5712294adc15b889942fa',1,'albert::PluginInstance']]], + ['_7epluginloader_11',['~PluginLoader',['../classalbert_1_1PluginLoader.html#aed12605269105560dfa0130957d8b403',1,'albert::PluginLoader']]], + ['_7equery_12',['~Query',['../classalbert_1_1Query.html#acbd5a250fca8af47d4e257251953ef2a',1,'albert::Query']]], + ['_7etriggerquery_13',['~TriggerQuery',['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#aaaf443d93086a391fc4f00ee5578d7c9',1,'albert::TriggerQueryHandler::TriggerQuery']]], + ['_7etriggerqueryhandler_14',['~TriggerQueryHandler',['../classalbert_1_1TriggerQueryHandler.html#abece36a266d7ed6a298eb22b871ca51d',1,'albert::TriggerQueryHandler']]] +]; diff --git a/reference/search/functions_2.js b/reference/search/functions_2.js new file mode 100644 index 00000000..0f4383d1 --- /dev/null +++ b/reference/search/functions_2.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['cachedir_0',['cacheDir',['../classalbert_1_1PluginInstance.html#af06e7ae2c72da1e7ed4357681770e49a',1,'albert::PluginInstance']]], + ['cachelocation_1',['cacheLocation',['../namespacealbert.html#a9608c31d67dd4adc7810d48db31f1780',1,'albert']]], + ['cancel_2',['cancel',['../classalbert_1_1Query.html#aa5855a860719615dc48a698bc94e7eaf',1,'albert::Query']]], + ['clearcache_3',['clearCache',['../classalbert_1_1IconProvider.html#a96d8211025eff709ddc09d0321f947bd',1,'albert::IconProvider']]], + ['configdir_4',['configDir',['../classalbert_1_1PluginInstance.html#a9207c9adf706fe0fc282381070cf76b1',1,'albert::PluginInstance']]], + ['configlocation_5',['configLocation',['../namespacealbert.html#a0ff8f625cf3c1f8af4fe923d12986c2c',1,'albert']]], + ['createfrontendconfigwidget_6',['createFrontendConfigWidget',['../classalbert_1_1Frontend.html#aef8cf9086d6ecaf22af974c499f3e0b4',1,'albert::Frontend']]] +]; diff --git a/reference/search/functions_3.js b/reference/search/functions_3.js new file mode 100644 index 00000000..285e99a4 --- /dev/null +++ b/reference/search/functions_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['datadir_0',['dataDir',['../classalbert_1_1PluginInstance.html#a1fee04d437d0ce8d5a4b2aecda623e01',1,'albert::PluginInstance']]], + ['datalocation_1',['dataLocation',['../namespacealbert.html#ab968450cf9a276d4a392432dad2802b8',1,'albert']]], + ['defaulttrigger_2',['defaultTrigger',['../classalbert_1_1TriggerQueryHandler.html#afb3f05c5d7c91025dfe12ecb0065d6da',1,'albert::TriggerQueryHandler']]], + ['description_3',['description',['../classalbert_1_1Extension.html#a9f18ca0cf14e367e3826cdcdaa35f1c3',1,'albert::Extension::description()'],['../classalbert_1_1PluginInstance.html#a3360117d9a00393bf3e0a4ecdd7ea9a8',1,'albert::PluginInstance::description()'],['../classalbert_1_1ExtensionPluginInstance.html#aaab9606ded1e13dc2433130b8b388d08',1,'albert::ExtensionPluginInstance::description()']]] +]; diff --git a/reference/search/functions_4.js b/reference/search/functions_4.js new file mode 100644 index 00000000..e6590a3a --- /dev/null +++ b/reference/search/functions_4.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['extension_0',['extension',['../classalbert_1_1ExtensionRegistry.html#a99839edb159935ec09401b74c8e00428',1,'albert::ExtensionRegistry']]], + ['extensions_1',['extensions',['../classalbert_1_1PluginInstance.html#a2e5845601778c37b05a076fb41176c31',1,'albert::PluginInstance::extensions()'],['../classalbert_1_1ExtensionPluginInstance.html#a96907d598865d3d1b84f570961e96bd3',1,'albert::ExtensionPluginInstance::extensions()'],['../classalbert_1_1ExtensionRegistry.html#addd09e90a5ce026ce8c8a491affe68a7',1,'albert::ExtensionRegistry::extensions()'],['../classalbert_1_1ExtensionRegistry.html#aec42b55ef9a0fa5876f3f88dbac9b19d',1,'albert::ExtensionRegistry::extensions()']]], + ['extensionwatcher_2',['ExtensionWatcher',['../classalbert_1_1ExtensionWatcher.html#a57a54853c36f1ae178c2ad16761fc1db',1,'albert::ExtensionWatcher']]] +]; diff --git a/reference/search/functions_5.js b/reference/search/functions_5.js new file mode 100644 index 00000000..45780867 --- /dev/null +++ b/reference/search/functions_5.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['fallbackactions_0',['fallbackActions',['../classalbert_1_1Query.html#ae67f7eb58c68efd2eca034f5829f06d5',1,'albert::Query']]], + ['fallbacks_1',['fallbacks',['../classalbert_1_1Query.html#a62762f8c9d77992e376d778d17b4b612',1,'albert::Query::fallbacks()'],['../classalbert_1_1FallbackHandler.html#a131fd6896a43672eac646f29da7222ed',1,'albert::FallbackHandler::fallbacks()']]], + ['finalize_2',['finalize',['../classalbert_1_1PluginInstance.html#a4f09ff651fb7e31f42cb4c03891d2b40',1,'albert::PluginInstance']]], + ['finished_3',['finished',['../classalbert_1_1Query.html#abf7bfc65b2ecf0f4f24d3f082ece7224',1,'albert::Query']]], + ['fuzzymatching_4',['fuzzyMatching',['../classalbert_1_1IndexQueryHandler.html#a3f599d19cc675bdc64bcbeaaa9bcde0c',1,'albert::IndexQueryHandler::fuzzyMatching()'],['../classalbert_1_1TriggerQueryHandler.html#a5fc00de6ff2fb342abd5ef396549d579',1,'albert::TriggerQueryHandler::fuzzyMatching()']]] +]; diff --git a/reference/search/functions_6.js b/reference/search/functions_6.js new file mode 100644 index 00000000..a88ea069 --- /dev/null +++ b/reference/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['getpixmap_0',['getPixmap',['../classalbert_1_1IconProvider.html#a5ba04d9cddde22e03effc8c66fe1a941',1,'albert::IconProvider::getPixmap(const QStringList &urls, QSize *size, const QSize &requestedSize) const'],['../classalbert_1_1IconProvider.html#a55a13ae97b28bc322a39033cd97ff236',1,'albert::IconProvider::getPixmap(const QString &url, QSize *size, const QSize &requestedSize) const']]], + ['globalqueryhandler_1',['GlobalQueryHandler',['../classalbert_1_1GlobalQueryHandler.html#af8a4ed2ed60a8663bad38540e89f327d',1,'albert::GlobalQueryHandler']]] +]; diff --git a/reference/search/functions_7.js b/reference/search/functions_7.js new file mode 100644 index 00000000..8b0a3cda --- /dev/null +++ b/reference/search/functions_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['handleglobalquery_0',['handleGlobalQuery',['../classalbert_1_1GlobalQueryHandler.html#a5d645c60fc65a716cb38ba960727605b',1,'albert::GlobalQueryHandler::handleGlobalQuery()'],['../classalbert_1_1IndexQueryHandler.html#a7129f0d3850d2a47cae20bdc8f1e069d',1,'albert::IndexQueryHandler::handleGlobalQuery()']]], + ['handletriggerquery_1',['handleTriggerQuery',['../classalbert_1_1GlobalQueryHandler.html#a165f839630152ddfd2ecc18a1d01c2ae',1,'albert::GlobalQueryHandler::handleTriggerQuery()'],['../classalbert_1_1TriggerQueryHandler.html#adf2cc8927e0f9a540b63669eab93ad23',1,'albert::TriggerQueryHandler::handleTriggerQuery()']]], + ['hide_2',['hide',['../namespacealbert.html#ac1d14794465f1cb9349ea0541a553949',1,'albert']]] +]; diff --git a/reference/search/functions_8.js b/reference/search/functions_8.js new file mode 100644 index 00000000..2bb05fb0 --- /dev/null +++ b/reference/search/functions_8.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['iconprovider_0',['IconProvider',['../classalbert_1_1IconProvider.html#a136fb53ba65c54eaebaa695354e18c3d',1,'albert::IconProvider']]], + ['iconurls_1',['iconUrls',['../classalbert_1_1Item.html#af24bba87910db269e79df47622e1bdd5',1,'albert::Item::iconUrls()'],['../classalbert_1_1StandardItem.html#a100e251755fc3b89a8eaef7dbb6a8dd9',1,'albert::StandardItem::iconUrls()']]], + ['id_2',['id',['../classalbert_1_1Extension.html#aba79b0b7a42a03addbb4223462362b06',1,'albert::Extension::id()'],['../classalbert_1_1PluginInstance.html#a22c95896742f513f55702fef9f5329f1',1,'albert::PluginInstance::id()'],['../classalbert_1_1ExtensionPluginInstance.html#a3ed9f550076fa27f55eb071ed704c102',1,'albert::ExtensionPluginInstance::id()'],['../classalbert_1_1Item.html#a79a57458532eb980b93834ff8546d22f',1,'albert::Item::id()'],['../classalbert_1_1StandardItem.html#aa7eaf721cdb29dac01f965b912c001be',1,'albert::StandardItem::id()']]], + ['indexitem_3',['IndexItem',['../classalbert_1_1IndexItem.html#af4fcc3f09f8f612437fb81d215216954',1,'albert::IndexItem']]], + ['indexqueryhandler_4',['IndexQueryHandler',['../classalbert_1_1IndexQueryHandler.html#a5eb404658ee263fd33bb44b7e6ce615b',1,'albert::IndexQueryHandler']]], + ['initialize_5',['initialize',['../classalbert_1_1PluginInstance.html#a0037e4168904d455eaf0a5def1b0b205',1,'albert::PluginInstance']]], + ['input_6',['input',['../classalbert_1_1Frontend.html#a79f9cfdf9e46cdf5cacb10a87e675d2c',1,'albert::Frontend']]], + ['inputactiontext_7',['inputActionText',['../classalbert_1_1Item.html#a895b7ffa23356556ef72d4ba33633306',1,'albert::Item::inputActionText()'],['../classalbert_1_1StandardItem.html#a9930511eb0a37648cdd1fae7fa7e1e98',1,'albert::StandardItem::inputActionText()']]], + ['inputhistory_8',['InputHistory',['../classalbert_1_1InputHistory.html#a8dade81ec81caa047a79b1e1dafd266f',1,'albert::InputHistory']]], + ['instance_9',['instance',['../classalbert_1_1PluginLoader.html#a8828e8029b6520a1e4486e2d2196dc02',1,'albert::PluginLoader']]], + ['isfinished_10',['isFinished',['../classalbert_1_1Query.html#a74d697e5bdc98ed0abeac06be4e84897',1,'albert::Query']]], + ['isrunning_11',['isRunning',['../classalbert_1_1BackgroundExecutor.html#a2d798a9bb8decb19d6ad55570b7efaae',1,'albert::BackgroundExecutor']]], + ['istriggered_12',['isTriggered',['../classalbert_1_1Query.html#ab292530bd0031b69d0dc96e053ea2950',1,'albert::Query']]], + ['isvalid_13',['isValid',['../classalbert_1_1Query.html#acc1d5475f190ca21ca914c6408910078',1,'albert::Query::isValid()'],['../classalbert_1_1GlobalQueryHandler_1_1GlobalQuery.html#a099f6b2d7b99e8acd2694d791d8d79ab',1,'albert::GlobalQueryHandler::GlobalQuery::isValid()'],['../classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html#a102bcfd3d92f0c9bf94ba7a29c9fcc5a',1,'albert::TriggerQueryHandler::TriggerQuery::isValid()']]], + ['isvisible_14',['isVisible',['../classalbert_1_1Frontend.html#af6c0a0806b24fb6d7be13853f504f79f',1,'albert::Frontend']]] +]; diff --git a/reference/search/functions_9.js b/reference/search/functions_9.js new file mode 100644 index 00000000..89eadb2f --- /dev/null +++ b/reference/search/functions_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['load_0',['load',['../classalbert_1_1PluginLoader.html#af62ca2713a8080868cee3bf26034a6f7',1,'albert::PluginLoader']]] +]; diff --git a/reference/search/functions_a.js b/reference/search/functions_a.js new file mode 100644 index 00000000..ef1b7ca9 --- /dev/null +++ b/reference/search/functions_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['make_0',['make',['../classalbert_1_1StandardItem.html#a7051dd70babb92fd038c09f744f9065e',1,'albert::StandardItem::make(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})'],['../classalbert_1_1StandardItem.html#a0331ad26d56afe1643185f51dbebf2be',1,'albert::StandardItem::make(QString id={}, QString text={}, QString subtext={}, QStringList icon_urls={}, std::vector< Action > actions={})']]], + ['matchactions_1',['matchActions',['../classalbert_1_1Query.html#a3400e3516c8b2c842a493d5866b189ff',1,'albert::Query']]], + ['matches_2',['matches',['../classalbert_1_1Query.html#a81bdb8ac1532341640af4aab33fd0008',1,'albert::Query']]], + ['metadata_3',['metaData',['../classalbert_1_1PluginLoader.html#a5bbbb62f0a52690cfa7e793e100ddd34',1,'albert::PluginLoader']]] +]; diff --git a/reference/search/functions_b.js b/reference/search/functions_b.js new file mode 100644 index 00000000..d22b7989 --- /dev/null +++ b/reference/search/functions_b.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['name_0',['name',['../classalbert_1_1Extension.html#a632e2c0b2818d985d5a18f966c37e56a',1,'albert::Extension::name()'],['../classalbert_1_1PluginInstance.html#abcd75710b7bc43ff2768713609306db1',1,'albert::PluginInstance::name()'],['../classalbert_1_1ExtensionPluginInstance.html#a38bf089a2c69872ac046dbef78209c84',1,'albert::ExtensionPluginInstance::name()']]], + ['networkmanager_1',['networkManager',['../namespacealbert.html#a5c3bcb68953e42d33df36ecb7336c974',1,'albert']]], + ['next_2',['next',['../classalbert_1_1InputHistory.html#aec297185c40d527786902dcb352dbca2',1,'albert::InputHistory']]], + ['notification_3',['Notification',['../classalbert_1_1Notification.html#abe44d10a5e094a7506585bc975bda287',1,'albert::Notification']]] +]; diff --git a/reference/search/functions_c.js b/reference/search/functions_c.js new file mode 100644 index 00000000..ea1b374f --- /dev/null +++ b/reference/search/functions_c.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['onadd_0',['onAdd',['../classalbert_1_1ExtensionWatcher.html#acbd16bc3d28cf3934819c5bc3d8d7aa7',1,'albert::ExtensionWatcher']]], + ['onrem_1',['onRem',['../classalbert_1_1ExtensionWatcher.html#abbff93ba70d0f828f0345ee0b65ab74c',1,'albert::ExtensionWatcher']]], + ['openissuetracker_2',['openIssueTracker',['../namespacealbert.html#a7415146a8bdf3310c751a7e00866441c',1,'albert']]], + ['openurl_3',['openUrl',['../namespacealbert.html#a56363c99d1fba78c716d82498710acb4',1,'albert::openUrl(const QUrl &url)'],['../namespacealbert.html#af6cb7b3a800e9f6eff1c8aff08ae07d4',1,'albert::openUrl(const QString &url)']]], + ['openwebsite_4',['openWebsite',['../namespacealbert.html#a124eed71fa205fa1df15b60e8c3236cb',1,'albert']]], + ['operator_3d_5',['operator=',['../classalbert_1_1StandardItem.html#a5ac7e3ffe6459e9dcddbb4398d5b70f8',1,'albert::StandardItem::operator=(StandardItem &&)=default'],['../classalbert_1_1StandardItem.html#ab099fb8d9964defec643468f1a3b90dd',1,'albert::StandardItem::operator=(const StandardItem &)=delete']]] +]; diff --git a/reference/search/functions_d.js b/reference/search/functions_d.js new file mode 100644 index 00000000..f5f70689 --- /dev/null +++ b/reference/search/functions_d.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['plugininstance_0',['PluginInstance',['../classalbert_1_1PluginInstance.html#a97268fde3a98b3ea1857a5effd01e277',1,'albert::PluginInstance']]], + ['pluginloader_1',['PluginLoader',['../classalbert_1_1PluginLoader.html#ab98e4528a99b0a46f1f4e114fea942b8',1,'albert::PluginLoader']]], + ['plugins_2',['plugins',['../classalbert_1_1PluginProvider.html#a7976388d5144d9a0a0e34156afaabf32',1,'albert::PluginProvider']]], + ['prev_3',['prev',['../classalbert_1_1InputHistory.html#aa75446e23cd1c296d24e7db35c96bb68',1,'albert::InputHistory']]], + ['provider_4',['provider',['../classalbert_1_1PluginLoader.html#a3a17c5bb5b103aeb84777ca6678c09cc',1,'albert::PluginLoader']]] +]; diff --git a/reference/search/functions_e.js b/reference/search/functions_e.js new file mode 100644 index 00000000..d21d1526 --- /dev/null +++ b/reference/search/functions_e.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['query_0',['query',['../classalbert_1_1Frontend.html#ae88197ae3e1ee2e6d8e42238fbd77e05',1,'albert::Frontend']]], + ['quit_1',['quit',['../namespacealbert.html#ad577c75761cd1124a31886dad4bf74c3',1,'albert']]] +]; diff --git a/reference/search/functions_f.js b/reference/search/functions_f.js new file mode 100644 index 00000000..07cab782 --- /dev/null +++ b/reference/search/functions_f.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['rankitem_0',['RankItem',['../classalbert_1_1RankItem.html#a3c9c331f950cae4f19fa06e7f70e8615',1,'albert::RankItem']]], + ['remove_1',['remove',['../classalbert_1_1ExtensionRegistry.html#afccc877de2e759c2cc02882ec28a8784',1,'albert::ExtensionRegistry']]], + ['removed_2',['removed',['../classalbert_1_1ExtensionRegistry.html#a5ed04eff2f2f6230a6bd54ca0ab12e32',1,'albert::ExtensionRegistry']]], + ['resetiterator_3',['resetIterator',['../classalbert_1_1InputHistory.html#a776b827eaba727833d58e42a1cf00ca8',1,'albert::InputHistory']]], + ['restart_4',['restart',['../namespacealbert.html#abcf6b2abfb07a836cb3cc41d5836b169',1,'albert']]], + ['run_5',['run',['../classalbert_1_1Query.html#a202c52805bd26e0bb60b623cd75079ac',1,'albert::Query::run()'],['../classalbert_1_1BackgroundExecutor.html#a95b0814f3637d231dad8e56b351fc795',1,'albert::BackgroundExecutor::run()']]], + ['rundetachedprocess_6',['runDetachedProcess',['../namespacealbert.html#ac85cded09e6e136185a21835c627754c',1,'albert']]], + ['runterminal_7',['runTerminal',['../namespacealbert.html#a7b04fd33495b5c395eddfd1a97ee96bf',1,'albert']]] +]; diff --git a/reference/search/mag.svg b/reference/search/mag.svg new file mode 100644 index 00000000..9f46b301 --- /dev/null +++ b/reference/search/mag.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/reference/search/mag_d.svg b/reference/search/mag_d.svg new file mode 100644 index 00000000..b9a814c7 --- /dev/null +++ b/reference/search/mag_d.svg @@ -0,0 +1,37 @@ + + + + + + image/svg+xml + + + + + + + + + diff --git a/reference/search/mag_sel.svg b/reference/search/mag_sel.svg new file mode 100644 index 00000000..03626f64 --- /dev/null +++ b/reference/search/mag_sel.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/reference/search/mag_seld.svg b/reference/search/mag_seld.svg new file mode 100644 index 00000000..6e720dcc --- /dev/null +++ b/reference/search/mag_seld.svg @@ -0,0 +1,74 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/reference/search/namespaces_0.js b/reference/search/namespaces_0.js new file mode 100644 index 00000000..c13c04e3 --- /dev/null +++ b/reference/search/namespaces_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['albert_0',['albert',['../namespacealbert.html',1,'']]], + ['plugin_1',['plugin',['../namespacealbert_1_1plugin.html',1,'albert']]] +]; diff --git a/reference/search/pages_0.js b/reference/search/pages_0.js new file mode 100644 index 00000000..4998c8c1 --- /dev/null +++ b/reference/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['c_2b_2b_2fqt_20plugins_0',['C++/Qt plugins',['../index.html',1,'']]] +]; diff --git a/reference/search/related_0.js b/reference/search/related_0.js new file mode 100644 index 00000000..aab7ded7 --- /dev/null +++ b/reference/search/related_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['app_0',['App',['../classalbert_1_1Frontend.html#a0e12955bd7e1f66f3af953873b560957',1,'albert::Frontend']]], + ['pluginregistry_1',['PluginRegistry',['../classalbert_1_1PluginLoader.html#ab2f3bfe8536e7481b136065d1ba20a80',1,'albert::PluginLoader']]], + ['queryengine_2',['QueryEngine',['../classalbert_1_1TriggerQueryHandler.html#ac160e3c0a76112ff60b3046eb5fe635f',1,'albert::TriggerQueryHandler']]] +]; diff --git a/reference/search/search.css b/reference/search/search.css new file mode 100644 index 00000000..9d762913 --- /dev/null +++ b/reference/search/search.css @@ -0,0 +1,291 @@ +/*---------------- Search Box positioning */ + +#main-menu > li:last-child { + /* This
  • object is the parent of the search bar */ + display: flex; + justify-content: center; + align-items: center; + height: 36px; + margin-right: 1em; +} + +/*---------------- Search box styling */ + +.SRPage * { + font-weight: normal; + line-height: normal; +} + +dark-mode-toggle { + margin-left: 5px; + display: flex; + float: right; +} + +#MSearchBox { + display: inline-block; + white-space : nowrap; + background: white; + border-radius: 0.65em; + box-shadow: inset 0.5px 0.5px 3px 0px #555; + z-index: 102; +} + +#MSearchBox .left { + display: inline-block; + vertical-align: middle; + height: 1.4em; +} + +#MSearchSelect { + display: inline-block; + vertical-align: middle; + width: 20px; + height: 19px; + background-image: url('mag_sel.svg'); + margin: 0 0 0 0.3em; + padding: 0; +} + +#MSearchSelectExt { + display: inline-block; + vertical-align: middle; + width: 10px; + height: 19px; + background-image: url('mag.svg'); + margin: 0 0 0 0.5em; + padding: 0; +} + + +#MSearchField { + display: inline-block; + vertical-align: middle; + width: 7.5em; + height: 19px; + margin: 0 0.15em; + padding: 0; + line-height: 1em; + border:none; + color: #909090; + outline: none; + font-family: Arial,Verdana,sans-serif; + -webkit-border-radius: 0px; + border-radius: 0px; + background: none; +} + +@media(hover: none) { + /* to avoid zooming on iOS */ + #MSearchField { + font-size: 16px; + } +} + +#MSearchBox .right { + display: inline-block; + vertical-align: middle; + width: 1.4em; + height: 1.4em; +} + +#MSearchClose { + display: none; + font-size: inherit; + background : none; + border: none; + margin: 0; + padding: 0; + outline: none; + +} + +#MSearchCloseImg { + padding: 0.3em; + margin: 0; +} + +.MSearchBoxActive #MSearchField { + color: black; +} + + + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial,Verdana,sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace,fixed; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: black; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: black; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: white; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + /*width: 60ex;*/ + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid black; + background-color: #EEF1F7; + z-index:10000; + width: 300px; + height: 400px; + overflow: auto; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +div.SRPage { + margin: 5px 2px; + background-color: #EEF1F7; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial,Verdana,sans-serif; + font-size: 8pt; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; + font-family: Arial,Verdana,sans-serif; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; + font-family: Arial,Verdana,sans-serif; +} + +.SRResult { + display: none; +} + +div.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/reference/search/search.js b/reference/search/search.js new file mode 100644 index 00000000..e103a262 --- /dev/null +++ b/reference/search/search.js @@ -0,0 +1,816 @@ +/* + @licstart The following is the entire license notice for the JavaScript code in this file. + + The MIT License (MIT) + + Copyright (C) 1997-2020 by Dimitri van Heesch + + Permission is hereby granted, free of charge, to any person obtaining a copy of this software + and associated documentation files (the "Software"), to deal in the Software without restriction, + including without limitation the rights to use, copy, modify, merge, publish, distribute, + sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all copies or + substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING + BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + @licend The above is the entire license notice for the JavaScript code in this file + */ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var jsFile; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + jsFile = this.resultsPath + indexSectionNames[this.searchIndex] + '_' + hexCode + '.js'; + } + + var loadJS = function(url, impl, loc){ + var scriptTag = document.createElement('script'); + scriptTag.src = url; + scriptTag.onload = impl; + scriptTag.onreadystatechange = impl; + loc.appendChild(scriptTag); + } + + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + var domSearchBox = this.DOMSearchBox(); + var domPopupSearchResults = this.DOMPopupSearchResults(); + var domSearchClose = this.DOMSearchClose(); + var resultsPath = this.resultsPath; + + var handleResults = function() { + document.getElementById("Loading").style.display="none"; + if (typeof searchData !== 'undefined') { + createResults(resultsPath); + document.getElementById("NoMatches").style.display="none"; + } + + searchResults.Search(searchValue); + + if (domPopupSearchResultsWindow.style.display!='block') + { + domSearchClose.style.display = 'inline-block'; + var left = getXPos(domSearchBox) + 150; + var top = getYPos(domSearchBox) + 20; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + var maxWidth = document.body.clientWidth; + var maxHeight = document.body.clientHeight; + var width = 300; + if (left<10) left=10; + if (width+left+8>maxWidth) width=maxWidth-left-8; + var height = 400; + if (height+top+8>maxHeight) height=maxHeight-top-8; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResultsWindow.style.height = height + 'px'; + } + } + + if (jsFile) { + loadJS(jsFile, handleResults, this.DOMPopupSearchResultsWindow()); + } else { + handleResults(); + } + + this.lastSearchValue = searchValue; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + this.searchActive = true; + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + this.DOMSearchField().value = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName.toLowerCase() == 'div' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName.toLowerCase() == 'div' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + searchBox.CloseResultsWindow(); + document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults(resultsPath) +{ + var results = document.getElementById("SRResults"); + results.innerHTML = ''; + for (var e=0; e + + + + + + +Albert: albert/include/albert/extension/queryhandler/standarditem.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    standarditem.h File Reference
    +
    +
    +
    #include "albert/extension/queryhandler/item.h"
    +#include <vector>
    +
    +

    Go to the source code of this file.

    + + + + + +

    +Classes

    class  albert::StandardItem
     General purpose value type Item implememtation. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    +
    +
    + + + + diff --git a/reference/standarditem_8h.js b/reference/standarditem_8h.js new file mode 100644 index 00000000..528a0a4f --- /dev/null +++ b/reference/standarditem_8h.js @@ -0,0 +1,4 @@ +var standarditem_8h = +[ + [ "albert::StandardItem", "classalbert_1_1StandardItem.html", "classalbert_1_1StandardItem" ] +]; \ No newline at end of file diff --git a/reference/standarditem_8h_source.html b/reference/standarditem_8h_source.html new file mode 100644 index 00000000..ac31d6a7 --- /dev/null +++ b/reference/standarditem_8h_source.html @@ -0,0 +1,208 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/standarditem.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    standarditem.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2022 Manuel Schneider
    +
    2
    +
    3#pragma once
    + +
    5#include <vector>
    +
    6
    +
    7namespace albert
    +
    8{
    +
    9
    +
    11class ALBERT_EXPORT StandardItem : public Item
    +
    12{
    +
    13public:
    +
    21 explicit StandardItem(
    +
    22 QString id = {},
    +
    23 QString text = {},
    +
    24 QString subtext = {},
    +
    25 QString input_action_text = {},
    +
    26 QStringList icon_urls = {},
    +
    27 std::vector<Action> actions = {});
    +
    28
    +
    29
    + + +
    34 StandardItem(const StandardItem&) = delete;
    + +
    36
    +
    38 void setId(QString id);
    +
    39
    +
    41 void setText(QString text);
    +
    42
    +
    44 void setSubtext(QString subtext);
    +
    45
    +
    47 void setInputActionText(QString input_action_text);
    +
    48
    +
    50 void setIconUrls(QStringList icon_urls);
    +
    51
    +
    53 void setActions(std::vector<Action> actions);
    +
    54
    +
    55 // albert::Item interface
    +
    56 QString id() const override;
    +
    57 QString text() const override;
    +
    58 QString subtext() const override;
    +
    59 QString inputActionText() const override;
    +
    60 QStringList iconUrls() const override;
    +
    61 std::vector<Action> actions() const override;
    +
    62
    +
    64 static std::shared_ptr<StandardItem> make(
    +
    65 QString id = {},
    +
    66 QString text = {},
    +
    67 QString subtext = {},
    +
    68 QString input_action_text = {},
    +
    69 QStringList icon_urls = {},
    +
    70 std::vector<Action> actions = {});
    +
    71
    +
    73 static std::shared_ptr<StandardItem> make(
    +
    74 QString id = {},
    +
    75 QString text = {},
    +
    76 QString subtext = {},
    +
    77 QStringList icon_urls = {},
    +
    78 std::vector<Action> actions = {});
    +
    79
    +
    80protected:
    +
    81 QString id_;
    +
    82 QString text_;
    +
    83 QString subtext_;
    + +
    85 QStringList icon_urls_;
    +
    86 std::vector<Action> actions_;
    +
    87};
    +
    88
    +
    89}
    +
    Items displayed in the query results list.
    Definition: item.h:13
    +
    General purpose value type Item implememtation.
    Definition: standarditem.h:12
    +
    static std::shared_ptr< StandardItem > make(QString id={}, QString text={}, QString subtext={}, QStringList icon_urls={}, std::vector< Action > actions={})
    Convenience shared pointer factory for standard items w/o inputAction.
    +
    QStringList iconUrls() const override
    Getter for the items iconUrls.
    +
    QString subtext() const override
    Getter for the item subtext.
    +
    QString text_
    Definition: standarditem.h:82
    +
    std::vector< Action > actions() const override
    Getter for item actions.
    +
    void setId(QString id)
    Setter for the item identifier.
    +
    QStringList icon_urls_
    Definition: standarditem.h:85
    +
    StandardItem(const StandardItem &)=delete
    +
    QString id_
    Definition: standarditem.h:81
    +
    StandardItem & operator=(StandardItem &&)=default
    StandardItem move assignment.
    +
    void setSubtext(QString subtext)
    Setter for the item subtext.
    +
    static std::shared_ptr< StandardItem > make(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})
    Convenience shared pointer factory for standard items.
    +
    StandardItem(StandardItem &&)=default
    StandardItem move constructor.
    +
    QString subtext_
    Definition: standarditem.h:83
    +
    QString inputActionText() const override
    Getter for the input action text.
    +
    void setIconUrls(QStringList icon_urls)
    Setter for the input action text.
    +
    void setText(QString text)
    Setter for the item text.
    +
    QString id() const override
    Getter for the item identifier.
    +
    StandardItem & operator=(const StandardItem &)=delete
    +
    void setInputActionText(QString input_action_text)
    Setter for the items iconUrls.
    +
    std::vector< Action > actions_
    Definition: standarditem.h:86
    +
    StandardItem(QString id={}, QString text={}, QString subtext={}, QString input_action_text={}, QStringList icon_urls={}, std::vector< Action > actions={})
    StandardItem constructor.
    +
    QString input_action_text_
    Definition: standarditem.h:84
    +
    QString text() const override
    Getter for the item text.
    +
    void setActions(std::vector< Action > actions)
    Setter for item actions.
    + +
    Definition: albert.h:12
    +
    +
    + + + + diff --git a/reference/sync_off.png b/reference/sync_off.png new file mode 100644 index 00000000..3b443fc6 Binary files /dev/null and b/reference/sync_off.png differ diff --git a/reference/sync_on.png b/reference/sync_on.png new file mode 100644 index 00000000..e08320fb Binary files /dev/null and b/reference/sync_on.png differ diff --git a/reference/tab_a.png b/reference/tab_a.png new file mode 100644 index 00000000..3b725c41 Binary files /dev/null and b/reference/tab_a.png differ diff --git a/reference/tab_ad.png b/reference/tab_ad.png new file mode 100644 index 00000000..e34850ac Binary files /dev/null and b/reference/tab_ad.png differ diff --git a/reference/tab_b.png b/reference/tab_b.png new file mode 100644 index 00000000..e2b4a863 Binary files /dev/null and b/reference/tab_b.png differ diff --git a/reference/tab_bd.png b/reference/tab_bd.png new file mode 100644 index 00000000..91c25249 Binary files /dev/null and b/reference/tab_bd.png differ diff --git a/reference/tab_h.png b/reference/tab_h.png new file mode 100644 index 00000000..fd5cb705 Binary files /dev/null and b/reference/tab_h.png differ diff --git a/reference/tab_hd.png b/reference/tab_hd.png new file mode 100644 index 00000000..2489273d Binary files /dev/null and b/reference/tab_hd.png differ diff --git a/reference/tab_s.png b/reference/tab_s.png new file mode 100644 index 00000000..ab478c95 Binary files /dev/null and b/reference/tab_s.png differ diff --git a/reference/tab_sd.png b/reference/tab_sd.png new file mode 100644 index 00000000..757a565c Binary files /dev/null and b/reference/tab_sd.png differ diff --git a/reference/tabs.css b/reference/tabs.css new file mode 100644 index 00000000..89201170 --- /dev/null +++ b/reference/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.main-menu-btn{position:relative;display:inline-block;width:36px;height:36px;text-indent:36px;margin-left:8px;white-space:nowrap;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0)}.main-menu-btn-icon,.main-menu-btn-icon:before,.main-menu-btn-icon:after{position:absolute;top:50%;left:2px;height:2px;width:24px;background:#364D7C;-webkit-transition:all .25s;transition:all .25s}.main-menu-btn-icon:before{content:'';top:-7px;left:0}.main-menu-btn-icon:after{content:'';top:7px;left:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon{height:0}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:before{top:0;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}#main-menu-state:checked ~ .main-menu-btn .main-menu-btn-icon:after{top:0;-webkit-transform:rotate(45deg);transform:rotate(45deg)}#main-menu-state{position:absolute;width:1px;height:1px;margin:-1px;border:0;padding:0;overflow:hidden;clip:rect(1px,1px,1px,1px)}#main-menu-state:not(:checked) ~ #main-menu{display:none}#main-menu-state:checked ~ #main-menu{display:block}@media(min-width:768px){.main-menu-btn{position:absolute;top:-99999px}#main-menu-state:not(:checked) ~ #main-menu{display:block}}.sm-dox{background-image:url('tab_b.png')}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:'Lucida Grande',Geneva,Helvetica,Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0px 1px 1px rgba(255, 255, 255, 0.9);color:#283A5D;outline:0}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace !important;text-align:center;text-shadow:none;background:rgba(255, 255, 255, 0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a span.sub-arrow:before{display:block;content:'+'}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:white}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url('tab_b.png');line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283A5D transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url('tab_s.png');background-repeat:no-repeat;background-position:right;-moz-border-radius:0 !important;-webkit-border-radius:0;border-radius:0 !important}.sm-dox a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent white transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:white;-moz-border-radius:5px !important;-webkit-border-radius:5px;border-radius:5px !important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555555;background-image:none;border:0 !important;color:#555555;background-image:none}.sm-dox ul a:hover{background-image:url('tab_a.png');background-repeat:repeat-x;color:white;text-shadow:0px 1px 1px rgba(0, 0, 0, 1.0)}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:white;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px !important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url('tab_b.png')}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:white}} \ No newline at end of file diff --git a/reference/triggerqueryhandler_8h.html b/reference/triggerqueryhandler_8h.html new file mode 100644 index 00000000..cf6643d1 --- /dev/null +++ b/reference/triggerqueryhandler_8h.html @@ -0,0 +1,131 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/triggerqueryhandler.h File Reference + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    + +
    triggerqueryhandler.h File Reference
    +
    +
    +
    #include "albert/extension.h"
    +#include <QString>
    +#include <memory>
    +
    +

    Go to the source code of this file.

    + + + + + + + + +

    +Classes

    class  albert::TriggerQueryHandler
     Triggered query handler class. More...
     
    class  albert::TriggerQueryHandler::TriggerQuery
     The query interface used by TriggerQueryHandler. More...
     
    + + + +

    +Namespaces

    namespace  albert
     
    +
    +
    + + + + diff --git a/reference/triggerqueryhandler_8h.js b/reference/triggerqueryhandler_8h.js new file mode 100644 index 00000000..2716f832 --- /dev/null +++ b/reference/triggerqueryhandler_8h.js @@ -0,0 +1,5 @@ +var triggerqueryhandler_8h = +[ + [ "albert::TriggerQueryHandler", "classalbert_1_1TriggerQueryHandler.html", "classalbert_1_1TriggerQueryHandler" ], + [ "albert::TriggerQueryHandler::TriggerQuery", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery.html", "classalbert_1_1TriggerQueryHandler_1_1TriggerQuery" ] +]; \ No newline at end of file diff --git a/reference/triggerqueryhandler_8h_source.html b/reference/triggerqueryhandler_8h_source.html new file mode 100644 index 00000000..37c9b477 --- /dev/null +++ b/reference/triggerqueryhandler_8h_source.html @@ -0,0 +1,192 @@ + + + + + + + +Albert: albert/include/albert/extension/queryhandler/triggerqueryhandler.h Source File + + + + + + + + + + + + + + + +
    +
    + + + + + + + +
    +
    Albert +
    +
    +
    + + + + + + + +
    +
    + +
    +
    +
    + +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    Loading...
    +
    Searching...
    +
    No Matches
    +
    +
    +
    +
    + +
    +
    triggerqueryhandler.h
    +
    +
    +Go to the documentation of this file.
    1// Copyright (c) 2023 Manuel Schneider
    +
    2
    +
    3#pragma once
    +
    4#include "albert/extension.h"
    +
    5#include <QString>
    +
    6#include <memory>
    +
    7class TriggerQueryHandlerPrivate;
    +
    8class QueryEngine;
    +
    9
    +
    10namespace albert
    +
    11{
    +
    12class Item;
    +
    13
    +
    19class ALBERT_EXPORT TriggerQueryHandler : virtual public Extension
    +
    20{
    +
    21public:
    + + +
    24
    +
    26 QString trigger() const;
    +
    27
    +
    31 virtual QString synopsis() const;
    +
    32
    +
    34 virtual QString defaultTrigger() const;
    +
    35
    +
    37 virtual bool allowTriggerRemap() const;
    +
    38
    +
    40 virtual bool supportsFuzzyMatching() const;
    +
    41
    +
    43 virtual bool fuzzyMatching() const;
    +
    44
    +
    46 virtual void setFuzzyMatching(bool enabled);
    +
    47
    +
    50 class ALBERT_EXPORT TriggerQuery
    +
    51 {
    +
    52 public:
    +
    53 virtual ~TriggerQuery() = default;
    +
    54
    +
    56 virtual QString trigger() const = 0;
    +
    57
    +
    59 virtual QString string() const = 0;
    +
    60
    +
    63 virtual const bool &isValid() const = 0;
    +
    64
    +
    68 virtual void add(const std::shared_ptr<Item> &item) = 0;
    +
    69
    +
    73 virtual void add(std::shared_ptr<Item> &&item) = 0;
    +
    74
    +
    76 virtual void add(const std::vector<std::shared_ptr<Item>> &items) = 0;
    +
    77
    +
    79 virtual void add(std::vector<std::shared_ptr<Item>> &&items) = 0;
    +
    80 };
    +
    81
    +
    84 virtual void handleTriggerQuery(TriggerQuery*) const = 0;
    +
    85
    +
    86private:
    +
    87 std::unique_ptr<TriggerQueryHandlerPrivate> d;
    +
    88 friend class ::QueryEngine;
    +
    89};
    +
    90
    +
    91}
    +
    Interface for objects of the extension system.
    Definition: extension.h:12
    +
    The query interface used by TriggerQueryHandler.
    Definition: triggerqueryhandler.h:51
    +
    virtual void add(const std::shared_ptr< Item > &item)=0
    Copy add single item.
    +
    virtual const bool & isValid() const =0
    True if query has not been cancelled.
    +
    virtual void add(std::shared_ptr< Item > &&item)=0
    Move add single item.
    +
    virtual QString string() const =0
    The query string excluding the trigger.
    +
    virtual void add(const std::vector< std::shared_ptr< Item > > &items)=0
    Copy add multiple items.
    +
    virtual QString trigger() const =0
    The trigger of this query if any.
    + +
    virtual void add(std::vector< std::shared_ptr< Item > > &&items)=0
    Move add multiple items.
    +
    Triggered query handler class.
    Definition: triggerqueryhandler.h:20
    +
    QString trigger() const
    The user configured trigger of this handler.
    +
    virtual void setFuzzyMatching(bool enabled)
    Fuzzy matching behavior. Default does nothing.
    +
    virtual bool allowTriggerRemap() const
    Enable user remapping of the trigger. Default false.
    +
    virtual bool fuzzyMatching() const
    Fuzzy matching. Default false.
    +
    virtual bool supportsFuzzyMatching() const
    Fuzzy matching capability. Default false.
    +
    virtual QString synopsis() const
    The synopsis, displayed on empty query.
    + +
    virtual void handleTriggerQuery(TriggerQuery *) const =0
    The trigger query processing function.
    + +
    virtual QString defaultTrigger() const
    The default (not user defined) trigger. Default Extension::id().
    + +
    Definition: albert.h:12
    +
    +
    + + + + diff --git a/setup/index.html b/setup/index.html new file mode 100644 index 00000000..019290bd --- /dev/null +++ b/setup/index.html @@ -0,0 +1,157 @@ + + + + Albert - Setup + + + + + + + + +
    +
    +
    +
    +
    + + +
    +
    + +

    Setup

    +

    A word of warning: +
    +Unofficial packages and repository sources may contain malicious code! +
    +Please make sure to use the sources mentioned here to install albert.

    + +

    Using official Albert repositories

    + +

    Prebuilt binaries are hosted at Open Build Service. +Visit the OBS software repo, choose your distribution and follow the instructions to add the official repository. +If the list is lacking one of the latest distributions join the chats and let us know. +There is a also bleeding edge master branch package available.

    + +

    Building from source

    + +

    Building from sources is the least convenient, but most flexible way. +This way is usually for developers only. +The build process is trivial, but you have to manage the dependencies on your own. +See the OBS package specs for up to date build and runtime dependencies.

    + +
    git clone --recursive https://github.com/albertlauncher/albert.git
    +cmake -B build -S albert -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug
    +cmake --build build
    +cmake --install build
    +
    + +
    +
    +
    +
    + + + +
    + + diff --git a/themecreator/index.html b/themecreator/index.html new file mode 100644 index 00000000..62f8e47e --- /dev/null +++ b/themecreator/index.html @@ -0,0 +1,414 @@ + + + + Albert - Theme Creator + + + + + + + + +
    +
    +
    +
    +
    + + +
    +
    + +

    Theme Creator

    + + +
    +

    Welcome to the Albert theme creator! Here you can create your own theme customizing the options below.

    +
    + +
    +
    + +
    + + + + + +
    + +
    +
      +
    • +
      +
      + google +
      +
      +

      Google

      +

      Start Google search in your browser

      +
      +
      +
    • + +
    • +
      +
      + youtube +
      +
      +

      Youtube

      +

      Start Youtube search in your browser

      +
      +
      +
    • + +
    • +
      +
      + amazon +
      +
      +

      Amazon

      +

      Start Amazon search in your browser

      +
      +
      +
    • +
    • +
      +
      + github +
      +
      +

      Github

      +

      Start Github search in your browser

      +
      +
      +
    • +
    +
    +
    +
      +
    • Start Google search in your browser
    • +
    +
    +
    + +
    +
    +
    General
    + + +
    + +
    +
    Frame
    + + +
    + +
    +
    Input
    + + + + + +
    + +
    +
    Settings
    + +
    + +
    +
    Proposal list
    + + + + +
    + +
    +
    Scrollbar
    + + +
    + +
    +
    Action list
    + + + +
    +
    + +
    +
    +/*
    + * This theme was made using Albert theme creator (https://albertlauncher.github.io//theming/themecreator/).
    + *
    + * Check http://doc.qt.io/qt-5/stylesheet-syntax.html especially the subtopics:
    + * The Style Sheet Syntax (http://doc.qt.io/qt-5/stylesheet-syntax.html)
    + * Qt Style Sheets Reference (http://doc.qt.io/qt-5/stylesheet-reference.html)
    + */
    +* {
    +  border: none;
    +  color : #;
    +  background-color: #;
    +}
    +
    +#frame {
    +  padding: 6px;
    +  border-radius: 12px;
    +  background-color: #;
    +  border: px solid #;
    +  min-width: 640px;
    +  max-width: 640px;
    +}
    +
    +#inputLine {
    +  padding: 2px;
    +  border-radius: 2px;
    +  font-size: px;
    +  selection-color: #;
    +  selection-background-color: #;
    +  background-color: #;
    +  color: #
    +}
    +
    +#settingsButton {
    +  color: #;
    +  background-color: #;
    +  padding: 4px;
    +  margin: 6px 6px 0px 0px;
    +  border-top-right-radius: 6px;
    +  border-bottom-left-radius: 10px;
    +  min-width:13px;
    +  min-height:13px;
    +  max-width:13px;
    +  max-height:13px;
    +}
    +
    +/********** ListViews **********/
    +QListView QScrollBar:vertical  {
    +  width: px;
    +  background: transparent;
    +}
    +
    +QListView QScrollBar::handle:vertical  {
    +  background: #;
    +  min-height: 24px;
    +}
    +
    +QListView QScrollBar::add-line:vertical, QScrollBar::sub-line:vertical,
    +QListView QScrollBar::up-arrow:vertical, QScrollBar::down-arrow:vertical,
    +QListView QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {
    +  border: 0px;
    +  width: 0px;
    +  height: 0px;
    +  background: transparent;
    +}
    +
    +/********** actionList **********/
    +QListView#actionList {
    +  font-size: px;
    +}
    +
    +QListView#actionList::item{
    +  height: px;
    +}
    +
    +QListView#actionList::item::selected{
    +  background: qlineargradient(x1:0, x2:1, stop:0.0 #40, stop:0.5 #20, stop:1.0 #40 );
    +}
    +
    +/********** resultsList **********/
    +QListView#resultsList {
    +  icon-size: px;
    +  font-size: px;
    +  color: #;
    +}
    +
    +QListView#resultsList::item{
    +  height: px;
    +}
    +
    +QListView#resultsList::item::selected{
    +  background: qlineargradient(x1:0, x2:1, stop:0.0 #40, stop:0.5 #20, stop:1.0 #40 );
    +}
    +      
    + +
    + +Made by @Fuhrmann + + + + +
    +
    +
    +
    + + + +
    + + diff --git a/themecreator/themes.json b/themecreator/themes.json new file mode 100644 index 00000000..e4f208f4 --- /dev/null +++ b/themecreator/themes.json @@ -0,0 +1,24 @@ +{ + "Bright": { + "foreground_color": "#808080", + "background_color": "#FFFFFF", + "frame_border_size": "6", + "frame_border_color": "#808080", + "input_line_background_color": "#D0D0D0", + "input_line_font_size": "36", + "input_color": "#808080", + "input_selection_background_color": "#808080", + "input_selection_font_color": "#FFFFFF", + "settings_button_color": "#808080", + "item_icon_size": "44", + "item_font_size": "26", + "item_color": "#808080", + "item_height": "48", + "item_selected_color": "#808080", + "scrollbar_width": "5", + "scrollbar_color": "#808080", + "action_list_height": "28", + "action_list_font_size": "20", + "action_list_selected_color": "#808080" + } +} \ No newline at end of file diff --git a/usage/index.html b/usage/index.html new file mode 100644 index 00000000..57d1f1c5 --- /dev/null +++ b/usage/index.html @@ -0,0 +1,264 @@ + + + + Albert - Usage + + + + + + + + +
    +
    +
    +
    +
    + + +
    +
    + +

    Usage

    +

    Core concepts

    + +

    As you would expect from a launcher, the main use case is to type a query into an input box and finally to interact with some sort of results. But to use the launcher to the full extent it is good to know some details.

    + +

    Plugins

    + +

    A plugin is a module that can be loaded/unloaded while the launcher is running. +They could be native plugins (shared libraries) or provided by plugin providers, such as Python modules from the Python plugin provider. +Nested plugins are only accessible if their provider is loaded.

    + +

    Users can enable/disable or load/unload plugins via the Plugins tab in settings or using the built-in plugin query handler. +Enabled plugins load automatically at launch. +Plugins with graphical interfaces for configuration can be accessed via the Plugins tab. +Some plugins offer more detailed usage information there.

    + +

    Extensions

    + +

    Each plugin can provide various extensions, like frontends, plugin providers, fallback providers or query handlers. +While frontends and plugin providers are advanced topics, fallback providers, global- and triggered query handlers are central to the app’s functionality.

    + +

    Queries

    + +

    The core of the app is the query engine which parses user input and decides the mode of a query. +If the query is prefixed by a trigger defined by any of the trigger query handlers the coresponding handler will handle the query exclusively. +This allows the handler to display matches as soon as they are available. +Queries without triggers are delegated to all global query handlers (multithreaded). +As soon as the handlers finished the matches are sorted by match score and usage history and displayed. +Additionally, fallback handlers offer a separate set of results: the fallback items.

    + +

    The user interface

    + +

    There are currently two official interfaces: +The ‘Widgets Box Modeland the ‘QML Box Model’. +The former uses the Qt Widgets Toolkit, prioritizing resource efficiency and low-latency UIs but has limitations considering customization. +The latter, built on QML, provides rich customization features, but suffers glitches on some systems. +Since both interfaces have the same design concept this guide applies to both of them (Please report a bug if not).

    + +

    The input line

    + +

    Besides its primary function, the input line provides an input hint and contains the settings button. +The input hint, displayed after the entered text, varies based on the context. +For empty triggered queries, it shows the query handler’s synopsis, if available, otherwhise it shows the input action text of the selected item, if available, or is empty. +The settings button, located in the top right corner, appears on hover or when the current query is processing.

    + +

    The results list

    + +

    The results list displays results of a query. +Each item has an icon, a title and a description. +Almost all items have at least one action associated, which can be activated. +Most items provide several actions that can be activated using the action list. +Items may also provide an input action text that can be used to replace the input text. +Its semantic is loosely defined. +It may be a completion but also an evaluation or something else.

    + +

    The results list has three states: Hidden, show matches and show fallbacks. +If a query yields matches it shows the matches. +If a global query yields no matches it shows the fallbacks. +If a triggered query yields no matches it stays hidden. +The fallbacks state can also be activated explicitly.

    + + + +

    Any horizontal navigation is handled by the input line. +Any vertical navigation is handled by the results list or the actions list if activated (unless the input history browse mode is active).

    + +

    Input history

    + +

    The content entered into the input line is stored in the input history when the window is hidden. +This input history can be used to search former queries. +When the input has been manually altered, it functions as a pattern for substring matching within the history entries. +Note that the empty pattern matches any entry (browsing instead of search). +When the results list is hidden or the first item is selected searches the input history. +When holding Shift this condition is not required and can be used too for bidirectional iteration.

    + +

    Key map

    + +

    As a reference the following table lists the keys you can use to control Albert:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    KeyAction
    EscHide Albert.
    Hold Alt/⌥
    Ctrl/⌘+
    Activate action mode.
    Hold Meta/⌃Activate Fallback mode.
    Hold ShiftActivate history search mode.
    TabActivate input action of the selected item (evaluation, completion, etc).

    Enter
    +O
    Activate item.
    Ctrl/⌘+,
    Alt/⌥+,
    Open settings window.
    ,,
    PgUp,PgDn
    Navigation in item lists.
    +Q
    Alt+F4
    Quit Albert (Depends on settings).
    Ctrl/⌘+H
    Ctrl/⌘+J
    Ctrl/⌘+K
    Ctrl/⌘+L
    Vim bindings. Synthesize to arrows.
    Ctrl/⌘+N
    Ctrl/⌘+P
    Emacs bindings. Synthesize to arrows.
    + +
    +
    +
    +
    + + + +
    + +