[ui] feature: themes
40
CHANGELOG.md
@@ -5,11 +5,51 @@ All notable changes to this project will be documented in this file.
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||
|
||||
## [0.9.9]
|
||||
### Features
|
||||
- Themes (stylesheets)
|
||||
- new settings property "theme": it points to a file defining a set of customizations over the current style (QT). In other words, a stylesheet file. At the moment 3 will come bundled with bauh:
|
||||
- [Light](https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.9/light.png): default light theme
|
||||
- [Darcula](https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.9/darcula.png): dark based on JetBrain's Darcula theme
|
||||
- [Sublime](https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.9/sublime.png): dark based on Sublime Text's editor theme
|
||||
- the theme can be changed through the new lower bar button:
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.9/bt_themes.png">
|
||||
</p>
|
||||
|
||||
- you can provide custom themes by putting the required files at **~/.local/share/bauh/themes**. There are 2 required and 1 optional file for each theme (all files related to a theme must share the same name):
|
||||
- **my_theme.qss**: file with the qss rules. Example: [light.qss](https://raw.githubusercontent.com/vinifmor/bauh/qss/bauh/view/resources/style/light/light.qss)
|
||||
- **my_theme.meta**: file defining the data about the theme (display name, description, version, ...). Example: [light.meta](https://raw.githubusercontent.com/vinifmor/bauh/qss/bauh/view/resources/style/light/light.meta)
|
||||
- **my_theme.vars**: optional file defining `key=value` variables that will be available for the .qss file through the symbol '@' (e.g: @my_var). Example: [light.vars](https://raw.githubusercontent.com/vinifmor/bauh/qss/bauh/view/resources/style/light/light.vars)
|
||||
- common theme variables available:
|
||||
- **style_dir**: path to the .qss file directory. Example: @style_dir/my_icon.svg
|
||||
- **images**: path to bauh's icons (gem icons are not available through this variable). Example: @images/logo.svg
|
||||
|
||||
### Improvements
|
||||
- UI
|
||||
- root dialog design and behavior
|
||||
- tooltip for the label displaying the number of applications on the table/available [#138](https://github.com/vinifmor/bauh/issues/138)
|
||||
- screenshots dialog resizing behavior
|
||||
- "name filter" now requires ENTER or click to be triggered
|
||||
- some app actions icons are now displayed with a different picture when disabled to prevent confusion (e.g: launch, screenshots) [#138](https://github.com/vinifmor/bauh/issues/138)
|
||||
- suggestions button moved to the lower bar (label removed)
|
||||
<p align="center">
|
||||
<img src="https://raw.githubusercontent.com/vinifmor/bauh-files/master/pictures/releases/0.9.9/suggestions.png">
|
||||
</p>
|
||||
|
||||
- Settings
|
||||
- new property **system_theme** (UI -> System theme): merges the system's theme/stylesheet with bauh's (default: false)
|
||||
- property **style** renamed to **qt_style** and its default value now is **fusion**. If this property is set to **null**, **fusion** will be considered as well. Fusion is the default style that all default themes (stylesheets) are based on, so if you change this property the final style may not look like as expected.
|
||||
- **Applications displayed** property (Interface) tooltip now informs that 0 (zero) can be used for no limit [#138](https://github.com/vinifmor/bauh/issues/138)
|
||||
- Parameters
|
||||
- new parameter **--offline**: it assumes the internet connection is off. Useful if the connection is bad/unstable and you just want to check your installed packages.
|
||||
|
||||
### Fixes
|
||||
- Arch:
|
||||
- search: not able to find installed packages that were renamed on the repositories (e.g: xapps -> xapp)
|
||||
- not able to replace an installed package for a new one that replaces it during conflict resolutions (e.g: xapp replaces xapps)
|
||||
- AUR: not able to find some repository dependencies when their names are not an exact match (e.g: sc-controller [0.4.7-1] relies on "pylibacl". This dependency now is called "python-pylibacl")
|
||||
- UI
|
||||
- wrong tooltips
|
||||
|
||||
### i18n
|
||||
- French translations by [KINFOO](https://github.com/KINFOO): [#143](https://github.com/vinifmor/bauh/pull/143)
|
||||
|
||||
@@ -275,6 +275,7 @@ You can change some application settings via environment variables or arguments
|
||||
- `--settings`: it displays only the settings window.
|
||||
- `--reset`: it cleans all configurations and cached data stored in the HOME directory.
|
||||
- `--logs`: it enables logs (for debugging purposes).
|
||||
- `--offline`: it assumes the internet connection is off.
|
||||
|
||||
#### General configuration file (**~/.config/bauh/config.yml**)
|
||||
```
|
||||
@@ -295,15 +296,17 @@ system:
|
||||
notifications: true # if system popup should be displayed for some events. e.g: when there are updates, bauh will display a system popup
|
||||
single_dependency_checking: false # if bauh should check only once if for the available technologies on the system.
|
||||
ui:
|
||||
style: null # the current QT style set. A null value will map to 'Fusion', 'Breeze' or 'Oxygen' (depending on what is installed)
|
||||
qt_style: fusion # defines the Qt style. A null value will map to 'fusion' as well.
|
||||
table:
|
||||
max_displayed: 50 # defines the maximum number of displayed applications on the table.
|
||||
max_displayed: 50 # defines the maximum number of displayed applications on the table. Use 0 for no limit.
|
||||
tray: # system tray settings
|
||||
default_icon: null # defines a path to a custom icon
|
||||
updates_icon: null # defines a path to a custom icon indicating updates
|
||||
hdpi: true # enables HDPI rendering improvements. Use 'false' to disable them if you think the interface looks strange
|
||||
auto_scale: false # activates Qt auto screen scale factor (QT_AUTO_SCREEN_SCALE_FACTOR). It fixes scaling issues for some desktop environments (like Gnome)
|
||||
scale_factor: 1.0 # defines the interface display scaling factor (Qt). Raise the value to raise the interface size. The settings window display this value as a percentage (e.g: 1.0 -> 100%).
|
||||
theme: defines the path to the theme/stylesheet file with a .qss extension (e.g: /path/to/my/theme.qss). For themes provided by bauh, only a string key is needed (e.g: light). Default: light
|
||||
system_theme: merges the system's theme/stylesheet with bauh's. Default: false.
|
||||
updates:
|
||||
check_interval: 30 # the updates checking interval in SECONDS
|
||||
ask_for_reboot: true # if a dialog asking for a system reboot should be displayed after a successful upgrade
|
||||
|
||||
@@ -3,4 +3,4 @@ __app_name__ = 'bauh'
|
||||
|
||||
import os
|
||||
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
|
||||
LOGS_PATH = '/tmp/{}/logs'.format(__app_name__)
|
||||
LOGS_PATH = '/tmp/{}/logs'.format(__app_name__)
|
||||
|
||||
@@ -5,6 +5,7 @@ from bauh.api.abstract.cache import MemoryCacheFactory
|
||||
from bauh.api.abstract.disk import DiskCacheLoaderFactory
|
||||
from bauh.api.abstract.download import FileDownloader
|
||||
from bauh.api.http import HttpClient
|
||||
from bauh.commons.internet import InternetChecker
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
|
||||
@@ -12,7 +13,8 @@ class ApplicationContext:
|
||||
|
||||
def __init__(self, download_icons: bool, http_client: HttpClient, app_root_dir: str, i18n: I18n,
|
||||
cache_factory: MemoryCacheFactory, disk_loader_factory: DiskCacheLoaderFactory,
|
||||
logger: logging.Logger, file_downloader: FileDownloader, distro: str, app_name: str):
|
||||
logger: logging.Logger, file_downloader: FileDownloader, distro: str, app_name: str,
|
||||
internet_checker: InternetChecker):
|
||||
"""
|
||||
:param download_icons: if packages icons should be downloaded
|
||||
:param http_client: a shared instance of http client
|
||||
@@ -24,7 +26,7 @@ class ApplicationContext:
|
||||
:param file_downloader
|
||||
:param distro
|
||||
:param app_name
|
||||
:param root_password
|
||||
:param internet_checker
|
||||
"""
|
||||
self.download_icons = download_icons
|
||||
self.http_client = http_client
|
||||
@@ -40,9 +42,13 @@ class ApplicationContext:
|
||||
'Graphics', 'Network', 'Office', 'Science', 'Settings', 'System', 'Utility')
|
||||
self.app_name = app_name
|
||||
self.root_password = None
|
||||
self.internet_checker = internet_checker
|
||||
|
||||
def is_system_x86_64(self):
|
||||
return self.arch_x86_64
|
||||
|
||||
def get_view_path(self):
|
||||
return self.app_root_dir + '/view'
|
||||
|
||||
def is_internet_available(self) -> bool:
|
||||
return self.internet_checker.is_available()
|
||||
|
||||
@@ -52,7 +52,7 @@ class UpgradeRequirement:
|
||||
|
||||
class UpgradeRequirements:
|
||||
|
||||
def __init__(self, to_install: List[UpgradeRequirement], to_remove: List[UpgradeRequirement],
|
||||
def __init__(self, to_install: Optional[List[UpgradeRequirement]], to_remove: Optional[List[UpgradeRequirement]],
|
||||
to_upgrade: List[UpgradeRequirement], cannot_upgrade: List[UpgradeRequirement]):
|
||||
"""
|
||||
:param to_install: additional packages that must be installed with the upgrade
|
||||
@@ -264,7 +264,7 @@ class SoftwareManager(ABC):
|
||||
f.write(icon_bytes)
|
||||
|
||||
@abstractmethod
|
||||
def requires_root(self, action: str, pkg: SoftwarePackage):
|
||||
def requires_root(self, action: str, pkg: Optional[SoftwarePackage]):
|
||||
"""
|
||||
if a given action requires root privileges to be executed. Current actions are: 'install', 'uninstall', 'downgrade', 'search', 'refresh', 'prepare'
|
||||
:param action:
|
||||
@@ -274,11 +274,12 @@ class SoftwareManager(ABC):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def prepare(self, task_manager: TaskManager, root_password: str, internet_available: bool):
|
||||
def prepare(self, task_manager: Optional[TaskManager], root_password: Optional[str], internet_available: Optional[bool]):
|
||||
"""
|
||||
It prepares the manager to start working. It will be called by GUI. Do not call it within.
|
||||
:param task_manager: a task manager instance used to register ongoing tasks during prepare
|
||||
:param root_password
|
||||
:param internet_available: if there is internet connection available
|
||||
:return:
|
||||
"""
|
||||
pass
|
||||
|
||||
@@ -77,10 +77,10 @@ class ProcessWatcher:
|
||||
:return: if the use requested to stop the process.
|
||||
"""
|
||||
|
||||
def request_root_password(self) -> Tuple[str, bool]:
|
||||
def request_root_password(self) -> Tuple[bool, str]:
|
||||
"""
|
||||
asks the root password for the user
|
||||
:return: a tuple with the typed password and if it is valid
|
||||
:return: a tuple informing if the password is valid and its text
|
||||
"""
|
||||
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ from enum import Enum
|
||||
from typing import List, Set, Optional
|
||||
|
||||
|
||||
class MessageType:
|
||||
class MessageType(Enum):
|
||||
INFO = 0
|
||||
WARNING = 1
|
||||
ERROR = 2
|
||||
@@ -19,7 +19,7 @@ class ViewComponent(ABC):
|
||||
"""
|
||||
Represents a GUI component
|
||||
"""
|
||||
def __init__(self, id_: str, observers: List[ViewObserver] = None):
|
||||
def __init__(self, id_: Optional[str], observers: Optional[List[ViewObserver]] = None):
|
||||
self.id = id_
|
||||
self.observers = observers if observers else []
|
||||
|
||||
@@ -56,12 +56,15 @@ class InputOption:
|
||||
Represents a select component option.
|
||||
"""
|
||||
|
||||
def __init__(self, label: str, value: object, tooltip: str = None, icon_path: str = None, read_only: bool = False, id_: str = None):
|
||||
def __init__(self, label: str, value: object, tooltip: Optional[str] = None,
|
||||
icon_path: Optional[str] = None, read_only: bool = False, id_: Optional[str] = None,
|
||||
invalid: bool = False):
|
||||
"""
|
||||
:param label: the string that will be shown to the user
|
||||
:param value: the option value (not shown)
|
||||
:param tooltip: an optional tooltip
|
||||
:param icon_path: an optional icon path
|
||||
:param invalid: if this option is considered invalid
|
||||
"""
|
||||
if not label:
|
||||
raise Exception("'label' must be a not blank string")
|
||||
@@ -72,6 +75,7 @@ class InputOption:
|
||||
self.tooltip = tooltip
|
||||
self.icon_path = icon_path
|
||||
self.read_only = read_only
|
||||
self.invalid = invalid
|
||||
|
||||
def __hash__(self):
|
||||
return hash(self.label) + hash(self.value)
|
||||
@@ -155,9 +159,10 @@ class TextInputType(Enum):
|
||||
|
||||
class TextInputComponent(ViewComponent):
|
||||
|
||||
def __init__(self, label: str, value: str = '', placeholder: str = None, tooltip: str = None, read_only: bool =False,
|
||||
id_: str = None, only_int: bool = False, max_width: int = -1, type_: TextInputType = TextInputType.SINGLE_LINE,
|
||||
capitalize_label: bool = True, min_width: int = -1, min_height: int = -1):
|
||||
def __init__(self, label: str, value: str = '', placeholder: Optional[str] = None, tooltip: Optional[str] = None,
|
||||
read_only: bool = False, id_: Optional[str] = None, only_int: bool = False, max_width: int = -1,
|
||||
type_: TextInputType = TextInputType.SINGLE_LINE, capitalize_label: bool = True, min_width: int = -1,
|
||||
min_height: int = -1):
|
||||
super(TextInputComponent, self).__init__(id_=id_)
|
||||
self.label = label
|
||||
self.value = value
|
||||
@@ -216,9 +221,9 @@ class FormComponent(ViewComponent):
|
||||
|
||||
class FileChooserComponent(ViewComponent):
|
||||
|
||||
def __init__(self, allowed_extensions: Set[str] = None, label: str = None, tooltip: str = None,
|
||||
file_path: str = None, max_width: int = -1, id_: str = None, search_path: str = None, capitalize_label: bool = True,
|
||||
directory: bool = False):
|
||||
def __init__(self, allowed_extensions: Optional[Set[str]] = None, label: Optional[str] = None, tooltip: Optional[str] = None,
|
||||
file_path: Optional[str] = None, max_width: int = -1, id_: Optional[str] = None,
|
||||
search_path: Optional[str] = None, capitalize_label: bool = True, directory: bool = False):
|
||||
super(FileChooserComponent, self).__init__(id_=id_)
|
||||
self.label = label
|
||||
self.allowed_extensions = allowed_extensions
|
||||
@@ -229,7 +234,7 @@ class FileChooserComponent(ViewComponent):
|
||||
self.capitalize_label = capitalize_label
|
||||
self.directory = directory
|
||||
|
||||
def set_file_path(self, fpath: str):
|
||||
def set_file_path(self, fpath: Optional[str]):
|
||||
self.file_path = fpath
|
||||
|
||||
if self.observers:
|
||||
|
||||
@@ -3,5 +3,6 @@ from pathlib import Path
|
||||
|
||||
CACHE_PATH = '{}/.cache/bauh'.format(str(Path.home()))
|
||||
CONFIG_PATH = '{}/.config/bauh'.format(str(Path.home()))
|
||||
USER_THEMES_PATH = '{}/.local/share/bauh/themes'.format(str(Path.home()))
|
||||
DESKTOP_ENTRIES_DIR = '{}/.local/share/applications'.format(str(Path.home()))
|
||||
TEMP_DIR = '/tmp/bauh{}'.format('_root' if os.getuid() == 0 else '')
|
||||
|
||||
@@ -22,6 +22,9 @@ def main(tray: bool = False):
|
||||
|
||||
logger = logs.new_logger(__app_name__, bool(args.logs))
|
||||
|
||||
if args.offline:
|
||||
logger.warning("offline mode activated")
|
||||
|
||||
app_config = config.read_config(update_file=True)
|
||||
|
||||
if bool(app_config['ui']['auto_scale']):
|
||||
|
||||
@@ -8,6 +8,7 @@ def read() -> Namespace:
|
||||
parser = argparse.ArgumentParser(prog=__app_name__, description="GUI for Linux software management")
|
||||
parser.add_argument('-v', '--version', action='version', version='%(prog)s {}'.format(__version__))
|
||||
parser.add_argument('--logs', action="store_true", help='It activates {} logs.'.format(__app_name__))
|
||||
parser.add_argument('--offline', action="store_true", help='It assumes the internet connection is off')
|
||||
|
||||
exclusive_args = parser.add_mutually_exclusive_group()
|
||||
exclusive_args.add_argument('--tray', action="store_true", help='If {} should be attached to the system tray.'.format(__app_name__))
|
||||
|
||||
@@ -7,6 +7,7 @@ from bauh.api.abstract.context import ApplicationContext
|
||||
from bauh.api.http import HttpClient
|
||||
from bauh.cli import __app_name__, cli_args
|
||||
from bauh.cli.controller import CLIManager
|
||||
from bauh.commons.internet import InternetChecker
|
||||
from bauh.context import generate_i18n, DEFAULT_I18N_KEY
|
||||
from bauh.view.core import config, gems
|
||||
from bauh.view.core.controller import GenericSoftwareManager
|
||||
@@ -42,7 +43,8 @@ def main():
|
||||
distro=util.get_distro(),
|
||||
file_downloader=AdaptableFileDownloader(logger, bool(app_config['download']['multithreaded']),
|
||||
i18n, http_client, app_config['download']['multithreaded_client']),
|
||||
app_name=__app_name__)
|
||||
app_name=__app_name__,
|
||||
internet_checker=InternetChecker(offline=False))
|
||||
|
||||
managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, default_locale=DEFAULT_I18N_KEY)
|
||||
|
||||
|
||||
@@ -1,12 +1,20 @@
|
||||
import http.client as http_client
|
||||
|
||||
|
||||
def is_available() -> bool:
|
||||
conn = http_client.HTTPConnection("www.google.com", timeout=5)
|
||||
try:
|
||||
conn.request("HEAD", "/")
|
||||
conn.close()
|
||||
return True
|
||||
except:
|
||||
conn.close()
|
||||
return False
|
||||
class InternetChecker:
|
||||
|
||||
def __init__(self, offline: bool):
|
||||
self.offline = offline
|
||||
|
||||
def is_available(self) -> bool:
|
||||
if self.offline:
|
||||
return False
|
||||
|
||||
conn = http_client.HTTPConnection("www.google.com", timeout=5)
|
||||
try:
|
||||
conn.request("HEAD", "/")
|
||||
conn.close()
|
||||
return True
|
||||
except:
|
||||
conn.close()
|
||||
return False
|
||||
|
||||
@@ -1,27 +1,39 @@
|
||||
import os
|
||||
import sys
|
||||
from logging import Logger
|
||||
from typing import Tuple
|
||||
|
||||
from PyQt5.QtCore import QCoreApplication
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
|
||||
from bauh import __app_name__, __version__
|
||||
from bauh.stylesheet import process_theme, read_default_themes, read_user_themes, read_theme_metada
|
||||
from bauh.view.util import util, translation
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
DEFAULT_I18N_KEY = 'en'
|
||||
PROPERTY_HARDCODED_STYLESHEET = 'hcqss'
|
||||
|
||||
|
||||
def new_qt_application(app_config: dict, quit_on_last_closed: bool = False, name: str = None) -> QApplication:
|
||||
def new_qt_application(app_config: dict, logger: Logger, quit_on_last_closed: bool = False, name: str = None) -> QApplication:
|
||||
app = QApplication(sys.argv)
|
||||
app.setQuitOnLastWindowClosed(quit_on_last_closed) # otherwise windows opened through the tray icon kill the application when closed
|
||||
app.setApplicationName(name if name else __app_name__)
|
||||
app.setApplicationVersion(__version__)
|
||||
app.setWindowIcon(util.get_default_icon()[1])
|
||||
|
||||
if app_config['ui']['style']:
|
||||
app.setStyle(str(app_config['ui']['style']))
|
||||
if app_config['ui']['qt_style']:
|
||||
app.setStyle(str(app_config['ui']['qt_style']))
|
||||
else:
|
||||
if app.style().objectName().lower() not in {'fusion', 'breeze', 'oxygen'}:
|
||||
app.setStyle('Fusion')
|
||||
app.setStyle('fusion')
|
||||
|
||||
app.setProperty('qt_style', app.style().objectName().lower())
|
||||
|
||||
theme_key = app_config['ui']['theme'].strip() if app_config['ui']['theme'] else None
|
||||
set_theme(theme_key=theme_key, app=app, logger=logger)
|
||||
|
||||
if not app_config['ui']['system_theme']:
|
||||
app.setPalette(app.style().standardPalette())
|
||||
|
||||
return app
|
||||
|
||||
@@ -44,3 +56,49 @@ def update_i18n(app_config, locale_dir: str, i18n: I18n) -> I18n:
|
||||
|
||||
i18n.default.update(def_dict)
|
||||
return i18n
|
||||
|
||||
|
||||
def set_theme(theme_key: str, app: QCoreApplication, logger: Logger):
|
||||
if not theme_key:
|
||||
logger.warning("config: no theme defined")
|
||||
else:
|
||||
available_themes = {}
|
||||
default_themes = read_default_themes()
|
||||
available_themes.update(default_themes)
|
||||
|
||||
theme_file = None
|
||||
|
||||
if '/' in theme_key:
|
||||
if os.path.isfile(theme_key):
|
||||
user_sheets = read_user_themes()
|
||||
|
||||
if user_sheets:
|
||||
available_themes.update(user_sheets)
|
||||
|
||||
if theme_key in user_sheets:
|
||||
theme_file = theme_key
|
||||
else:
|
||||
theme_file = default_themes.get(theme_key)
|
||||
|
||||
if theme_file:
|
||||
with open(theme_file) as f:
|
||||
theme_str = f.read()
|
||||
|
||||
if not theme_str:
|
||||
logger.warning("theme file '{}' has no content".format(theme_file))
|
||||
else:
|
||||
base_metadata = read_theme_metada(key=theme_key, file_path=theme_file)
|
||||
|
||||
if base_metadata.abstract:
|
||||
logger.warning("theme file '{}' is abstract (abstract = true) and cannot be loaded".format(theme_file))
|
||||
else:
|
||||
processed = process_theme(file_path=theme_file,
|
||||
metadata=base_metadata,
|
||||
theme_str=theme_str,
|
||||
available_themes=available_themes)
|
||||
|
||||
if processed:
|
||||
app.setStyleSheet(processed[0])
|
||||
logger.info("theme file '{}' loaded".format(theme_file))
|
||||
else:
|
||||
logger.warning("theme file '{}' could not be interpreted and processed".format(theme_file))
|
||||
|
||||
@@ -590,7 +590,8 @@ class AppImageManager(SoftwareManager):
|
||||
updater = DatabaseUpdater(task_man=task_manager,
|
||||
i18n=self.context.i18n,
|
||||
http_client=self.context.http_client, logger=self.context.logger,
|
||||
db_locks=self.db_locks, interval=interval)
|
||||
db_locks=self.db_locks, interval=interval,
|
||||
internet_checker=self.context.internet_checker)
|
||||
if local_config['db_updater']['enabled']:
|
||||
updater.start()
|
||||
elif internet_available:
|
||||
|
||||
31
bauh/gems/appimage/resources/img/upgrade.svg
Normal file → Executable file
@@ -8,13 +8,13 @@
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
viewBox="0 0 47.810421 48"
|
||||
viewBox="0 0 512 512"
|
||||
enable-background="new 0 0 26 26"
|
||||
id="svg8"
|
||||
sodipodi:docname="upgrade.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
width="47.810421"
|
||||
height="48">
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512">
|
||||
<metadata
|
||||
id="metadata14">
|
||||
<rdf:RDF>
|
||||
@@ -42,10 +42,10 @@
|
||||
inkscape:window-height="739"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
inkscape:zoom="3.2091769"
|
||||
inkscape:cx="-13.285588"
|
||||
inkscape:cy="-0.030460959"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.80229424"
|
||||
inkscape:cx="65.887412"
|
||||
inkscape:cy="257.44157"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -53,24 +53,21 @@
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g6"
|
||||
transform="matrix(1.7476186,0,0,1.8929335,1.1861681,-0.60813528)"
|
||||
style="fill:none;fill-opacity:1;stroke:#91a069;stroke-width:1.35746789;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
transform="matrix(19.334486,0,0,20.945696,4.651682,-16.294048)"
|
||||
style="fill:#59a869;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<path
|
||||
d="m 25,17 h -2 c -0.6,0 -1,0.4 -1,1 v 2.5 C 22,20.8 21.8,21 21.5,21 H 4.5 C 4.2,21 4,20.8 4,20.5 V 18 C 4,17.4 3.6,17 3,17 H 1 c -0.6,0 -1,0.4 -1,1 v 6 c 0,0.6 0.4,1 1,1 h 24 c 0.6,0 1,-0.4 1,-1 v -6 c 0,-0.6 -0.4,-1 -1,-1 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;fill-opacity:1;stroke:#91a069;stroke-width:1.35746789;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:#59a869;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 12.3,16.7 c 0.2,0.2 0.5,0.3 0.7,0.3 0.2,0 0.5,-0.1 0.7,-0.3 l 6,-6 C 19.9,10.5 20,10.3 20,10 20,9.7 19.9,9.5 19.7,9.3 L 18.3,7.9 C 18.1,7.7 17.9,7.6 17.6,7.6 c -0.3,0 -0.5,0.1 -0.7,0.3 l -1,1 C 15.6,9.2 15,9 15,8.5 V 2 C 15,1.4 14.6,1 14,1 H 12 C 11.4,1 11,1.4 11,2 V 8.6 C 11,9 10.5,9.3 10.1,9 L 9.1,8 C 8.9,7.8 8.7,7.7 8.4,7.7 8.1,7.7 7.9,7.8 7.7,8 L 6.3,9.4 C 6.1,9.6 6,9.8 6,10.1 c 0,0.3 0.1,0.5 0.3,0.7 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;fill-opacity:1;stroke:#91a069;stroke-width:1.35746789;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:#59a869;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(3.7795276,0,0,3.7795276,669.63626,-482.15866)"
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1" />
|
||||
</svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 2.8 KiB |
@@ -12,7 +12,7 @@ import requests
|
||||
|
||||
from bauh.api.abstract.handler import TaskManager, ProcessWatcher
|
||||
from bauh.api.http import HttpClient
|
||||
from bauh.commons import internet
|
||||
from bauh.commons.internet import InternetChecker
|
||||
from bauh.gems.appimage import LOCAL_PATH, get_icon_path, INSTALLATION_PATH, SYMLINKS_DIR, util
|
||||
from bauh.gems.appimage.model import AppImage
|
||||
from bauh.view.util.translation import I18n
|
||||
@@ -22,7 +22,9 @@ class DatabaseUpdater(Thread):
|
||||
URL_DB = 'https://raw.githubusercontent.com/vinifmor/bauh-files/master/appimage/dbs.tar.gz'
|
||||
COMPRESS_FILE_PATH = LOCAL_PATH + '/db.tar.gz'
|
||||
|
||||
def __init__(self, task_man: TaskManager, i18n: I18n, http_client: HttpClient, logger: logging.Logger, db_locks: dict, interval: int):
|
||||
def __init__(self, task_man: TaskManager, i18n: I18n, http_client: HttpClient,
|
||||
logger: logging.Logger, db_locks: dict, interval: int,
|
||||
internet_checker: InternetChecker):
|
||||
super(DatabaseUpdater, self).__init__(daemon=True)
|
||||
self.http_client = http_client
|
||||
self.logger = logger
|
||||
@@ -31,6 +33,7 @@ class DatabaseUpdater(Thread):
|
||||
self.i18n = i18n
|
||||
self.task_man = task_man
|
||||
self.task_id = 'appim_db'
|
||||
self.internet_checker = internet_checker
|
||||
|
||||
def _finish_task(self):
|
||||
if self.task_man:
|
||||
@@ -44,7 +47,7 @@ class DatabaseUpdater(Thread):
|
||||
self.task_man.update_progress(self.task_id, 10, None)
|
||||
|
||||
try:
|
||||
if not internet.is_available():
|
||||
if not self.internet_checker.is_available():
|
||||
self._finish_task()
|
||||
return
|
||||
except requests.exceptions.ConnectionError:
|
||||
|
||||
@@ -25,7 +25,7 @@ from bauh.api.abstract.view import MessageType, FormComponent, InputOption, Sing
|
||||
ViewComponent, PanelComponent, MultipleSelectComponent, TextInputComponent, TextInputType, \
|
||||
FileChooserComponent, TextComponent
|
||||
from bauh.api.constants import TEMP_DIR
|
||||
from bauh.commons import user, internet, system
|
||||
from bauh.commons import user, system
|
||||
from bauh.commons.category import CategoriesDownloader
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.commons.html import bold
|
||||
@@ -1175,7 +1175,7 @@ class ArchManager(SoftwareManager):
|
||||
def _uninstall(self, context: TransactionContext, names: Set[str], remove_unneeded: bool = False, disk_loader: Optional[DiskCacheLoader] = None, skip_requirements: bool = False):
|
||||
self._update_progress(context, 10)
|
||||
|
||||
net_available = internet.is_available() if disk_loader else True
|
||||
net_available = self.context.internet_checker.is_available() if disk_loader else True
|
||||
|
||||
hard_requirements = set()
|
||||
|
||||
@@ -2830,7 +2830,8 @@ class ArchManager(SoftwareManager):
|
||||
|
||||
def upgrade_system(self, root_password: str, watcher: ProcessWatcher) -> bool:
|
||||
# repo_map = pacman.map_repositories()
|
||||
installed = self.read_installed(limit=-1, only_apps=False, pkg_types=None, internet_available=internet.is_available(), disk_loader=None).installed
|
||||
net_available = self.context.internet_checker.is_available()
|
||||
installed = self.read_installed(limit=-1, only_apps=False, pkg_types=None, internet_available=net_available, disk_loader=None).installed
|
||||
|
||||
if not installed:
|
||||
watcher.show_message(title=self.i18n['arch.custom_action.upgrade_system'],
|
||||
@@ -3077,7 +3078,7 @@ class ArchManager(SoftwareManager):
|
||||
confirmation_label=self.i18n['proceed'].capitalize(),
|
||||
deny_label=self.i18n['cancel'].capitalize()):
|
||||
|
||||
pwd, valid_pwd = watcher.request_root_password()
|
||||
valid_pwd, pwd = watcher.request_root_password()
|
||||
|
||||
if valid_pwd:
|
||||
handler = ProcessHandler(watcher)
|
||||
|
||||
@@ -7,12 +7,12 @@
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"
|
||||
height="23.999998"
|
||||
width="24.000002"
|
||||
sodipodi:docname="edit_pkgbuild.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
height="512"
|
||||
width="512"
|
||||
sodipodi:docname="mark_pkgbuild.svg"
|
||||
xml:space="preserve"
|
||||
viewBox="0 0 24.000003 23.999999"
|
||||
viewBox="0 0 512.00002 512.00002"
|
||||
y="0px"
|
||||
x="0px"
|
||||
id="Capa_1"
|
||||
@@ -25,9 +25,9 @@
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-x="0"
|
||||
inkscape:cy="-9.5853392"
|
||||
inkscape:cx="75.093443"
|
||||
inkscape:zoom="3.2847783"
|
||||
inkscape:cy="176.38591"
|
||||
inkscape:cx="96.230087"
|
||||
inkscape:zoom="0.58067225"
|
||||
fit-margin-bottom="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-left="0"
|
||||
@@ -43,17 +43,18 @@
|
||||
objecttolerance="10"
|
||||
borderopacity="1"
|
||||
bordercolor="#666666"
|
||||
pagecolor="#ffffff" />
|
||||
pagecolor="#ffffff"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
style="fill:#91a069;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.06909101,0,0,0.06879136,-0.05230155,-1.8775432e-7)"
|
||||
style="fill:#59a869;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(1.4532091,0,0,1.4469064,2.5008013,3.6009241)"
|
||||
id="g1157">
|
||||
<path
|
||||
style="fill:#91a069;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#59a869;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path1153"
|
||||
d="m 333.988,11.758 -0.42,-0.383 C 325.538,4.04 315.129,0 304.258,0 292.071,0 280.37,5.159 272.154,14.153 L 116.803,184.231 c -1.416,1.55 -2.49,3.379 -3.154,5.37 l -18.267,54.762 c -2.112,6.331 -1.052,13.333 2.835,18.729 3.918,5.438 10.23,8.685 16.886,8.685 0,0 0.001,0 0.001,0 2.879,0 5.693,-0.592 8.362,-1.76 l 52.89,-23.138 c 1.923,-0.841 3.648,-2.076 5.063,-3.626 L 336.771,73.176 C 352.937,55.479 351.69,27.929 333.988,11.758 Z m -203.607,222.489 10.719,-32.134 0.904,-0.99 20.316,18.556 -0.904,0.99 z M 314.621,52.943 182.553,197.53 162.237,178.974 294.305,34.386 c 2.583,-2.828 6.118,-4.386 9.954,-4.386 3.365,0 6.588,1.252 9.082,3.53 l 0.419,0.383 c 5.484,5.009 5.87,13.546 0.861,19.03 z" />
|
||||
<path
|
||||
style="fill:#91a069;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#59a869;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
id="path1155"
|
||||
d="m 303.85,138.388 c -8.284,0 -15,6.716 -15,15 v 127.347 c 0,21.034 -17.113,38.147 -38.147,38.147 H 68.904 c -21.035,0 -38.147,-17.113 -38.147,-38.147 V 100.413 c 0,-21.034 17.113,-38.147 38.147,-38.147 h 131.587 c 8.284,0 15,-6.716 15,-15 0,-8.284 -6.716,-15 -15,-15 H 68.904 c -37.577,0 -68.147,30.571 -68.147,68.147 v 180.321 c 0,37.576 30.571,68.147 68.147,68.147 h 181.798 c 37.576,0 68.147,-30.571 68.147,-68.147 V 153.388 c 0.001,-8.284 -6.715,-15 -14.999,-15 z" />
|
||||
</g>
|
||||
|
||||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
@@ -11,16 +11,19 @@
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 24.000003 23.999999"
|
||||
viewBox="0 0 512.00002 512.00002"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="unmark_pkgbuild.svg"
|
||||
width="24.000002"
|
||||
height="23.999998"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"><metadata
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata1194"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1192" /><sodipodi:namedview
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1192">
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
@@ -38,26 +41,14 @@
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="3.2847783"
|
||||
inkscape:cx="75.093443"
|
||||
inkscape:cy="-9.5853392"
|
||||
inkscape:zoom="0.58067225"
|
||||
inkscape:cx="203.118"
|
||||
inkscape:cy="164.43767"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
<g
|
||||
id="g1157"
|
||||
transform="matrix(0.06909101,0,0,0.06879136,-0.05230155,-1.8775432e-7)"
|
||||
style="fill:#91a069;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<path
|
||||
d="m 333.988,11.758 -0.42,-0.383 C 325.538,4.04 315.129,0 304.258,0 292.071,0 280.37,5.159 272.154,14.153 L 116.803,184.231 c -1.416,1.55 -2.49,3.379 -3.154,5.37 l -18.267,54.762 c -2.112,6.331 -1.052,13.333 2.835,18.729 3.918,5.438 10.23,8.685 16.886,8.685 0,0 0.001,0 0.001,0 2.879,0 5.693,-0.592 8.362,-1.76 l 52.89,-23.138 c 1.923,-0.841 3.648,-2.076 5.063,-3.626 L 336.771,73.176 C 352.937,55.479 351.69,27.929 333.988,11.758 Z m -203.607,222.489 10.719,-32.134 0.904,-0.99 20.316,18.556 -0.904,0.99 z M 314.621,52.943 182.553,197.53 162.237,178.974 294.305,34.386 c 2.583,-2.828 6.118,-4.386 9.954,-4.386 3.365,0 6.588,1.252 9.082,3.53 l 0.419,0.383 c 5.484,5.009 5.87,13.546 0.861,19.03 z"
|
||||
id="path1153"
|
||||
style="fill:#91a069;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 303.85,138.388 c -8.284,0 -15,6.716 -15,15 v 127.347 c 0,21.034 -17.113,38.147 -38.147,38.147 H 68.904 c -21.035,0 -38.147,-17.113 -38.147,-38.147 V 100.413 c 0,-21.034 17.113,-38.147 38.147,-38.147 h 131.587 c 8.284,0 15,-6.716 15,-15 0,-8.284 -6.716,-15 -15,-15 H 68.904 c -37.577,0 -68.147,30.571 -68.147,68.147 v 180.321 c 0,37.576 30.571,68.147 68.147,68.147 h 181.798 c 37.576,0 68.147,-30.571 68.147,-68.147 V 153.388 c 0.001,-8.284 -6.715,-15 -14.999,-15 z"
|
||||
id="path1155"
|
||||
style="fill:#91a069;fill-opacity:1;stroke-width:1.00086;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
|
||||
<g
|
||||
id="g1159"
|
||||
transform="translate(-0.757)">
|
||||
@@ -119,11 +110,13 @@
|
||||
transform="translate(-0.757)">
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(-0.05511385,0,0,0.05511385,23.757631,0.24239608)"
|
||||
style="fill:#ff0000"
|
||||
id="g940"><g
|
||||
style="fill:#ff0000"
|
||||
id="g938"><path
|
||||
style="fill:#ff0000"
|
||||
id="path936"
|
||||
d="M 213.333,0 C 95.467,0 0,95.467 0,213.333 0,331.199 95.467,426.666 213.333,426.666 331.199,426.666 426.667,331.2 426.667,213.333 426.667,95.466 331.2,0 213.333,0 Z M 42.667,213.333 c 0,-94.293 76.373,-170.667 170.667,-170.667 39.467,0 75.627,13.547 104.533,35.947 L 78.613,317.867 C 56.213,288.96 42.667,252.8 42.667,213.333 Z M 213.333,384 C 173.866,384 137.706,370.453 108.8,348.053 L 348.053,108.8 C 370.453,137.707 384,173.867 384,213.333 384,307.627 307.627,384 213.333,384 Z" /></g></g></svg>
|
||||
id="g13014"><path
|
||||
d="M 488.31349,20.148378 487.7019,19.593117 C 476.0096,8.9590807 460.85324,3.1020243 445.02418,3.1020243 c -17.74526,0 -34.78287,7.4793447 -46.74605,20.5185437 L 172.07443,270.19395 c -2.06182,2.24712 -3.62564,4.89876 -4.59248,7.78522 L 140.8837,357.3713 c -3.07524,9.17847 -1.5318,19.32972 4.12799,27.15267 5.70494,7.88383 14.89571,12.59122 24.5874,12.59122 0,0 0.001,0 0.001,0 4.19206,0 8.28947,-0.85817 12.17575,-2.5516 L 258.788,361.01891 c 2.80004,-1.21918 5.31179,-3.00972 7.37212,-5.25684 L 492.36576,109.19013 C 515.90477,83.533616 514.08904,43.59255 488.31349,20.148378 Z M 191.8451,342.70547 l 15.60774,-46.58681 1.31629,-1.43519 29.58175,26.90185 -1.31633,1.4352 z M 460.11355,79.857008 267.8118,289.47438 238.23004,262.57253 430.5318,52.953692 c 3.76106,-4.099938 8.90831,-6.358676 14.49383,-6.358676 4.89971,0 9.59268,1.815112 13.22415,5.117676 l 0.61012,0.555259 c 7.98514,7.26188 8.54719,19.638537 1.25373,27.589055 z"
|
||||
id="path1153"
|
||||
style="fill:#59a869;fill-opacity:1;stroke-width:1.45417;stroke-miterlimit:4;stroke-dasharray:none" /><path
|
||||
d="m 444.4301,203.7323 c -12.06218,0 -21.84121,9.73663 -21.84121,21.7465 v 184.62339 c 0,30.4944 -24.91794,55.30424 -55.54515,55.30424 H 102.32958 c -30.628676,0 -55.545143,-24.80984 -55.545143,-55.30424 V 148.67742 c 0,-30.49439 24.917923,-55.30424 55.545143,-55.30424 h 191.60139 c 12.06218,0 21.84122,-9.73663 21.84122,-21.746496 0,-12.009866 -9.77904,-21.746497 -21.84122,-21.746497 H 102.32958 c -54.715176,0 -99.227587,44.32081 -99.227587,98.797233 v 261.42332 c 0,54.47644 44.513867,98.79724 99.227587,98.79724 h 264.71271 c 54.71372,0 99.22758,-44.3208 99.22758,-98.79724 V 225.4788 c 10e-4,-12.00987 -9.77759,-21.7465 -21.83977,-21.7465 z"
|
||||
id="path1155"
|
||||
style="fill:#59a869;fill-opacity:1;stroke-width:1.45417;stroke-miterlimit:4;stroke-dasharray:none" /><path
|
||||
style="fill:#db5860;stroke-width:1.16152;fill-opacity:1"
|
||||
id="path936"
|
||||
d="m 256.00057,8.2104852 c 136.90315,0 247.78952,110.8863748 247.78952,247.7895248 0,136.90315 -110.88637,247.78952 -247.78952,247.78952 C 119.09742,503.78953 8.2098842,392.90432 8.2098842,256.00001 8.2098842,119.0957 119.09626,8.2104852 256.00057,8.2104852 Z M 454.23172,256.00001 c 0,-109.52276 -88.7084,-198.232317 -198.23231,-198.232317 -45.84152,0 -87.84191,15.735046 -121.41667,41.752987 L 412.4799,377.41784 c 26.01794,-33.57592 41.75182,-75.57631 41.75182,-121.41783 z M 256.00057,454.23232 c 45.84152,0 87.84191,-15.73504 121.41667,-41.75298 l -277.896,-277.896 c -26.01794,33.57592 -41.752987,75.57631 -41.752987,121.41667 0,109.52391 88.708397,198.23231 198.232317,198.23231 z" /></g></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 4.7 KiB After Width: | Height: | Size: 5.0 KiB |
@@ -258,4 +258,4 @@ gem.arch.info=Software packages available for distributions based on Arch Linux
|
||||
gem.arch.label=Arch
|
||||
gem.arch.type.arch_repo.label=Arch - Repository
|
||||
gem.arch.type.aur.label=Arch - AUR
|
||||
gem.aur.install.warning=AUR packages are maintained by an independent user community. There is no warranty that they will work or not harm your system.
|
||||
gem.aur.install.warning=AUR packages are maintained by an independent user community. There is no warranty they will work or not harm your system.
|
||||
@@ -15,7 +15,7 @@ from bauh.api.abstract.model import PackageHistory, PackageUpdate, SoftwarePacka
|
||||
SuggestionPriority, PackageStatus
|
||||
from bauh.api.abstract.view import MessageType, FormComponent, SingleSelectComponent, InputOption, SelectViewType, \
|
||||
ViewComponent, PanelComponent
|
||||
from bauh.commons import user, internet
|
||||
from bauh.commons import user
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.commons.html import strip_html, bold
|
||||
from bauh.commons.system import ProcessHandler
|
||||
@@ -364,7 +364,7 @@ class FlatpakManager(SoftwareManager):
|
||||
if user.is_root():
|
||||
handler.handle_simple(flatpak.set_default_remotes('system'))
|
||||
else:
|
||||
user_password, valid = watcher.request_root_password()
|
||||
valid, user_password = watcher.request_root_password()
|
||||
if not valid:
|
||||
watcher.print('Operation aborted')
|
||||
return TransactionResult(success=False, installed=[], removed=[])
|
||||
@@ -424,7 +424,7 @@ class FlatpakManager(SoftwareManager):
|
||||
|
||||
if current_installed_by_level and (not installed_by_level or len(current_installed_by_level) > len(installed_by_level) + 1):
|
||||
pkg_key = '{}:{}:{}'.format(pkg.id, pkg.name, pkg.branch)
|
||||
net_available = internet.is_available()
|
||||
net_available = self.context.is_internet_available()
|
||||
for p in current_installed_by_level:
|
||||
current_key = '{}:{}:{}'.format(p['id'], p['name'], p['branch'])
|
||||
if current_key != pkg_key and (not installed_by_level or current_key not in installed_by_level):
|
||||
|
||||
@@ -13,14 +13,14 @@ from bauh.api.abstract.model import SoftwarePackage, PackageHistory, PackageUpda
|
||||
from bauh.api.abstract.view import SingleSelectComponent, SelectViewType, InputOption, ViewComponent, PanelComponent, \
|
||||
FormComponent
|
||||
from bauh.api.exception import NoInternetException
|
||||
from bauh.commons import resource, internet
|
||||
from bauh.commons import resource
|
||||
from bauh.commons.category import CategoriesDownloader
|
||||
from bauh.commons.config import save_config
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import SystemProcess, ProcessHandler, new_root_subprocess, get_human_size_str
|
||||
from bauh.commons.view_utils import new_select
|
||||
from bauh.gems.snap import snap, URL_CATEGORIES_FILE, SNAP_CACHE_PATH, CATEGORIES_FILE_PATH, SUGGESTIONS_FILE, \
|
||||
get_icon_path, snapd, CONFIG_FILE
|
||||
get_icon_path, snapd, CONFIG_FILE, ROOT_DIR
|
||||
from bauh.gems.snap.config import read_config
|
||||
from bauh.gems.snap.model import SnapApplication
|
||||
from bauh.gems.snap.snapd import SnapdClient
|
||||
@@ -45,14 +45,14 @@ class SnapManager(SoftwareManager):
|
||||
self.custom_actions = [
|
||||
CustomSoftwareAction(i18n_status_key='snap.action.refresh.status',
|
||||
i18n_label_key='snap.action.refresh.label',
|
||||
icon_path=resource.get_path('img/refresh.svg', context.get_view_path()),
|
||||
icon_path=resource.get_path('img/refresh.svg', ROOT_DIR),
|
||||
manager_method='refresh',
|
||||
requires_root=True,
|
||||
i18n_confirm_key='snap.action.refresh.confirm'),
|
||||
CustomSoftwareAction(i18n_status_key='snap.action.channel.status',
|
||||
i18n_label_key='snap.action.channel.label',
|
||||
i18n_confirm_key='snap.action.channel.confirm',
|
||||
icon_path=resource.get_path('img/refresh.svg', context.get_view_path()),
|
||||
icon_path=resource.get_path('img/refresh.svg', ROOT_DIR),
|
||||
manager_method='change_channel',
|
||||
requires_root=True)
|
||||
]
|
||||
@@ -230,7 +230,8 @@ class SnapManager(SoftwareManager):
|
||||
if success:
|
||||
new_installed = []
|
||||
try:
|
||||
current_installed = self.read_installed(disk_loader=disk_loader, internet_available=internet.is_available()).installed
|
||||
net_available = self.context.internet_checker.is_available()
|
||||
current_installed = self.read_installed(disk_loader=disk_loader, internet_available=net_available).installed
|
||||
except:
|
||||
new_installed = [pkg]
|
||||
traceback.print_exc()
|
||||
@@ -261,7 +262,7 @@ class SnapManager(SoftwareManager):
|
||||
return ProcessHandler(watcher).handle_simple(snap.refresh_and_stream(pkg.name, root_password))[0]
|
||||
|
||||
def change_channel(self, pkg: SnapApplication, root_password: str, watcher: ProcessWatcher) -> bool:
|
||||
if not internet.is_available():
|
||||
if not self.context.internet_checker.is_available():
|
||||
raise NoInternetException()
|
||||
|
||||
try:
|
||||
|
||||
128
bauh/gems/snap/resources/img/refresh.svg
Executable file
@@ -0,0 +1,128 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 511.99998 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="refresh.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata45"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs43" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview41"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.48437083"
|
||||
inkscape:cx="133.71431"
|
||||
inkscape:cy="289.92474"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g8"
|
||||
transform="matrix(1.0938971,0,0,1.0217723,-10.489433,7.0809411)"
|
||||
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g6"
|
||||
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<path
|
||||
d="m 55.323,203.641 c 15.664,0 29.813,-9.405 35.872,-23.854 25.017,-59.604 83.842,-101.61 152.42,-101.61 37.797,0 72.449,12.955 100.23,34.442 l -21.775,3.371 c -7.438,1.153 -13.224,7.054 -14.232,14.512 -1.01,7.454 3.008,14.686 9.867,17.768 l 119.746,53.872 c 5.249,2.357 11.33,1.904 16.168,-1.205 4.83,-3.114 7.764,-8.458 7.796,-14.208 l 0.621,-131.943 c 0.042,-7.506 -4.851,-14.144 -12.024,-16.332 -7.185,-2.188 -14.947,0.589 -19.104,6.837 L 414.403,70.096 C 370.398,26.778 310.1,0 243.615,0 142.806,0 56.133,61.562 19.167,149.06 c -5.134,12.128 -3.84,26.015 3.429,36.987 7.269,10.976 19.556,17.594 32.727,17.594 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 464.635,301.184 c -7.27,-10.977 -19.558,-17.594 -32.728,-17.594 -15.664,0 -29.813,9.405 -35.872,23.854 -25.018,59.604 -83.843,101.61 -152.42,101.61 -37.798,0 -72.45,-12.955 -100.232,-34.442 l 21.776,-3.369 c 7.437,-1.153 13.223,-7.055 14.233,-14.514 1.009,-7.453 -3.008,-14.686 -9.867,-17.768 L 49.779,285.089 c -5.25,-2.356 -11.33,-1.905 -16.169,1.205 -4.829,3.114 -7.764,8.458 -7.795,14.207 l -0.622,131.943 c -0.042,7.506 4.85,14.144 12.024,16.332 7.185,2.188 14.948,-0.59 19.104,-6.839 l 16.505,-24.805 c 44.004,43.32 104.303,70.098 170.788,70.098 100.811,0 187.481,-61.561 224.446,-149.059 5.137,-12.128 3.843,-26.014 -3.425,-36.987 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#3991e9;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g10"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g12"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g14"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g16"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g18"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g20"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g22"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g24"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g26"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g28"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g30"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g32"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g34"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g36"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
<g
|
||||
id="g38"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -7,6 +7,7 @@ from PyQt5.QtWidgets import QApplication, QWidget
|
||||
from bauh import ROOT_DIR, __app_name__
|
||||
from bauh.api.abstract.context import ApplicationContext
|
||||
from bauh.api.http import HttpClient
|
||||
from bauh.commons.internet import InternetChecker
|
||||
from bauh.context import generate_i18n, DEFAULT_I18N_KEY, new_qt_application
|
||||
from bauh.view.core import gems
|
||||
from bauh.view.core.controller import GenericSoftwareManager
|
||||
@@ -39,7 +40,8 @@ def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logg
|
||||
distro=util.get_distro(),
|
||||
file_downloader=AdaptableFileDownloader(logger, bool(app_config['download']['multithreaded']),
|
||||
i18n, http_client, app_config['download']['multithreaded_client']),
|
||||
app_name=__app_name__)
|
||||
app_name=__app_name__,
|
||||
internet_checker=InternetChecker(offline=app_args.offline))
|
||||
|
||||
managers = gems.load_managers(context=context, locale=i18n.current_key, config=app_config, default_locale=DEFAULT_I18N_KEY)
|
||||
|
||||
@@ -49,7 +51,7 @@ def new_manage_panel(app_args: Namespace, app_config: dict, logger: logging.Logg
|
||||
|
||||
manager = GenericSoftwareManager(managers, context=context, config=app_config)
|
||||
|
||||
app = new_qt_application(app_config, quit_on_last_closed=True)
|
||||
app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True)
|
||||
|
||||
if app_args.settings: # only settings window
|
||||
manager.cache_available_managers()
|
||||
|
||||
259
bauh/stylesheet.py
Normal file
@@ -0,0 +1,259 @@
|
||||
import glob
|
||||
import os
|
||||
import re
|
||||
import traceback
|
||||
from typing import Optional, Dict, Tuple, Set
|
||||
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
|
||||
from bauh.api.constants import USER_THEMES_PATH
|
||||
from bauh.view.util import resource
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
RE_WIDTH_PERCENT = re.compile(r'[\d\\.]+%w')
|
||||
RE_HEIGHT_PERCENT = re.compile(r'[\d\\.]+%h')
|
||||
RE_META_I18N_FIELDS = re.compile(r'((name|description)(\[\w+])?)')
|
||||
RE_VAR_PATTERN = re.compile(r'^@[\w.\-_]+')
|
||||
RE_QSS_EXT = re.compile(r'\.qss$')
|
||||
|
||||
|
||||
class ThemeMetadata:
|
||||
|
||||
def __init__(self, file_path: str, default: bool, default_name: Optional[str] = None,
|
||||
default_description: Optional[str] = None, version: Optional[str] = None,
|
||||
root_sheet: Optional[str] = None, abstract: bool = False):
|
||||
self.names = {}
|
||||
self.default_name = default_name
|
||||
self.descriptions = {}
|
||||
self.default_description = default_description
|
||||
self.root_sheet = root_sheet
|
||||
self.version = version
|
||||
self.file_path = file_path
|
||||
self.file_dir = '/'.join(file_path.split('/')[0:-1])
|
||||
self.default = default
|
||||
self.key = self.file_path.split('/')[-1].split('.')[0] if self.default else self.file_path
|
||||
self.abstract = abstract
|
||||
|
||||
def __eq__(self, other) -> bool:
|
||||
if isinstance(other, ThemeMetadata):
|
||||
return self.file_path == other.file_path
|
||||
|
||||
return False
|
||||
|
||||
def __hash__(self):
|
||||
return self.file_path.__hash__()
|
||||
|
||||
def __repr__(self):
|
||||
return self.file_path if self.file_path else ''
|
||||
|
||||
def get_i18n_name(self, i18n: I18n) -> str:
|
||||
if self.names:
|
||||
name = self.names.get(i18n.current_key, self.names.get(i18n.default_key))
|
||||
|
||||
if name:
|
||||
return name
|
||||
|
||||
if self.default_name:
|
||||
return self.default_name
|
||||
else:
|
||||
return self.file_path.split('/')[-1]
|
||||
|
||||
def get_i18n_description(self, i18n: I18n) -> Optional[str]:
|
||||
if self.descriptions:
|
||||
des = self.descriptions.get(i18n.current_key, self.descriptions.get(i18n.default_key))
|
||||
|
||||
if des:
|
||||
return des
|
||||
|
||||
return self.default_description
|
||||
|
||||
|
||||
def read_theme_metada(key: str, file_path: str) -> ThemeMetadata:
|
||||
meta_file = RE_QSS_EXT.sub('.meta', file_path)
|
||||
meta_obj = ThemeMetadata(file_path=file_path, default_name=key, default=not key.startswith('/'))
|
||||
|
||||
if os.path.exists(meta_file):
|
||||
meta_dict = {}
|
||||
with open(meta_file) as f:
|
||||
for line in f.readlines():
|
||||
if line:
|
||||
field_split = line.split('=')
|
||||
|
||||
if len(field_split) > 1:
|
||||
meta_dict[field_split[0].strip()] = field_split[1].strip()
|
||||
|
||||
if meta_dict:
|
||||
for field, val in meta_dict.items():
|
||||
if field == 'version':
|
||||
meta_obj.version = val
|
||||
elif field == 'root_sheet':
|
||||
meta_obj.root_sheet = val
|
||||
elif field == 'name':
|
||||
meta_obj.default_name = val
|
||||
elif field == 'description':
|
||||
meta_obj.default_description = val
|
||||
elif field == 'abstract':
|
||||
boolean = val.lower()
|
||||
|
||||
if boolean == 'true':
|
||||
meta_obj.abstract = True
|
||||
elif boolean == 'false':
|
||||
meta_obj.abstract = False
|
||||
|
||||
else:
|
||||
i18n_field = RE_META_I18N_FIELDS.findall(field)
|
||||
|
||||
if i18n_field:
|
||||
if i18n_field[0][1] == 'name':
|
||||
meta_obj.names[i18n_field[0][2][1:-1]] = val
|
||||
else:
|
||||
meta_obj.descriptions[i18n_field[0][2][1:-1]] = val
|
||||
|
||||
return meta_obj
|
||||
|
||||
|
||||
def read_default_themes() -> Dict[str, str]:
|
||||
return {f.split('/')[-1].split('.')[0].lower(): f for f in glob.glob(resource.get_path('style/**/*.qss'))}
|
||||
|
||||
|
||||
def read_user_themes() -> Dict[str, str]:
|
||||
return {f: f for f in glob.glob('{}/**/*.qss'.format(USER_THEMES_PATH))}
|
||||
|
||||
|
||||
def read_all_themes_metadata() -> Set[ThemeMetadata]:
|
||||
themes = set()
|
||||
|
||||
for key, file_path in read_default_themes().items():
|
||||
themes.add(read_theme_metada(key=key, file_path=file_path))
|
||||
|
||||
for key, file_path in read_user_themes().items():
|
||||
themes.add(read_theme_metada(key=key, file_path=file_path))
|
||||
|
||||
return themes
|
||||
|
||||
|
||||
def process_theme(file_path: str, theme_str: str, metadata: ThemeMetadata,
|
||||
available_themes: Optional[Dict[str, str]]) -> Optional[Tuple[str, ThemeMetadata]]:
|
||||
if theme_str and metadata:
|
||||
root_theme = None
|
||||
if metadata.root_sheet and metadata.root_sheet in available_themes:
|
||||
root_file = available_themes[metadata.root_sheet]
|
||||
|
||||
if os.path.isfile(root_file):
|
||||
with open(root_file) as f:
|
||||
root_theme_str = f.read()
|
||||
|
||||
if root_theme_str:
|
||||
root_metadata = read_theme_metada(key=metadata.root_sheet, file_path=root_file)
|
||||
root_theme = process_theme(file_path=root_file,
|
||||
theme_str=root_theme_str,
|
||||
metadata=root_metadata,
|
||||
available_themes=available_themes)
|
||||
|
||||
var_map = _read_var_file(file_path)
|
||||
var_map['images'] = resource.get_path('img')
|
||||
var_map['style_dir'] = metadata.file_dir
|
||||
|
||||
if var_map:
|
||||
var_list = [*var_map.keys()]
|
||||
var_list.sort(key=_by_str_len, reverse=True)
|
||||
|
||||
for var in var_list:
|
||||
theme_str = theme_str.replace('@' + var, var_map[var])
|
||||
|
||||
screen_size = QApplication.primaryScreen().size()
|
||||
theme_str = process_width_percent_measures(theme_str, screen_size.width())
|
||||
theme_str = process_height_percent_measures(theme_str, screen_size.height())
|
||||
|
||||
return theme_str if not root_theme else '{}\n{}'.format(root_theme[0], theme_str), metadata
|
||||
|
||||
|
||||
def _by_str_len(string: str) -> int:
|
||||
return len(string)
|
||||
|
||||
|
||||
def process_width_percent_measures(theme: str, screen_width: int) -> str:
|
||||
width_measures = RE_WIDTH_PERCENT.findall(theme)
|
||||
|
||||
final_theme = theme
|
||||
if width_measures:
|
||||
for m in width_measures:
|
||||
try:
|
||||
percent = float(m.split('%')[0])
|
||||
final_theme = final_theme.replace(m, '{}px'.format(round(screen_width * percent)))
|
||||
except ValueError:
|
||||
traceback.print_exc()
|
||||
|
||||
return final_theme
|
||||
|
||||
|
||||
def process_height_percent_measures(theme: str, screen_height: int) -> str:
|
||||
width_measures = RE_HEIGHT_PERCENT.findall(theme)
|
||||
|
||||
final_sheet = theme
|
||||
if width_measures:
|
||||
for m in width_measures:
|
||||
try:
|
||||
percent = float(m.split('%')[0])
|
||||
final_sheet = final_sheet.replace(m, '{}px'.format(round(screen_height * percent)))
|
||||
except ValueError:
|
||||
traceback.print_exc()
|
||||
|
||||
return final_sheet
|
||||
|
||||
|
||||
def _read_var_file(theme_file: str) -> dict:
|
||||
vars_file = theme_file.replace('.qss', '.vars')
|
||||
var_map = {}
|
||||
|
||||
if os.path.isfile(vars_file):
|
||||
with open(vars_file) as f:
|
||||
for line in f.readlines():
|
||||
if line:
|
||||
line_strip = line.strip()
|
||||
if line_strip:
|
||||
var_value = line_strip.split('=')
|
||||
|
||||
if var_value and len(var_value) == 2:
|
||||
var, value = var_value[0].strip(), var_value[1].strip()
|
||||
|
||||
if var and value:
|
||||
var_map[var] = value
|
||||
|
||||
if var_map:
|
||||
process_var_of_vars(var_map) # mapping keys that point to others
|
||||
|
||||
return var_map
|
||||
|
||||
|
||||
def process_var_of_vars(var_map: dict):
|
||||
while True:
|
||||
pending_vars, invalid = {}, set()
|
||||
|
||||
for k, v in var_map.items():
|
||||
var_match = RE_VAR_PATTERN.match(v)
|
||||
|
||||
if var_match:
|
||||
var_name = var_match.group()[1:]
|
||||
if var_name not in var_map or var_name == k:
|
||||
invalid.add(k)
|
||||
else:
|
||||
pending_vars[k] = var_name
|
||||
|
||||
for key in invalid:
|
||||
del var_map[key]
|
||||
|
||||
if not pending_vars:
|
||||
break
|
||||
|
||||
resolved = 0
|
||||
|
||||
for key, val in pending_vars.items():
|
||||
real_val = var_map[val]
|
||||
|
||||
if not RE_VAR_PATTERN.match(real_val):
|
||||
var_map[key] = real_val
|
||||
resolved += 1
|
||||
|
||||
if resolved == len(pending_vars):
|
||||
break
|
||||
@@ -1,14 +1,15 @@
|
||||
import logging
|
||||
from logging import Logger
|
||||
from typing import Tuple
|
||||
|
||||
from PyQt5.QtWidgets import QApplication, QWidget
|
||||
from PyQt5.QtCore import QObject
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
|
||||
from bauh.context import new_qt_application
|
||||
from bauh.view.qt.systray import TrayIcon
|
||||
|
||||
|
||||
def new_tray_icon(app_config: dict, logger: logging.Logger) -> Tuple[QApplication, QWidget]:
|
||||
app = new_qt_application(app_config, quit_on_last_closed=True)
|
||||
def new_tray_icon(app_config: dict, logger: Logger) -> Tuple[QApplication, QObject]:
|
||||
app = new_qt_application(app_config=app_config, logger=logger, quit_on_last_closed=True)
|
||||
tray_icon = TrayIcon(screen_size=app.primaryScreen().size(), config=app_config, logger=logger)
|
||||
tray_icon.show()
|
||||
|
||||
|
||||
@@ -37,10 +37,12 @@ def read_config(update_file: bool = False) -> dict:
|
||||
'default_icon': None,
|
||||
'updates_icon': None
|
||||
},
|
||||
'style': None,
|
||||
'qt_style': 'fusion',
|
||||
'hdpi': True,
|
||||
"auto_scale": False,
|
||||
"scale_factor": 1.0
|
||||
"scale_factor": 1.0,
|
||||
'theme': 'light',
|
||||
'system_theme': False
|
||||
|
||||
},
|
||||
'download': {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import operator
|
||||
import re
|
||||
import re
|
||||
import time
|
||||
import traceback
|
||||
@@ -14,7 +14,6 @@ from bauh.api.abstract.model import SoftwarePackage, PackageUpdate, PackageHisto
|
||||
CustomSoftwareAction
|
||||
from bauh.api.abstract.view import ViewComponent, TabGroupComponent, MessageType
|
||||
from bauh.api.exception import NoInternetException
|
||||
from bauh.commons import internet
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import run_cmd
|
||||
from bauh.view.core.config import read_config
|
||||
@@ -158,7 +157,7 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
|
||||
res = SearchResult([], [], 0)
|
||||
|
||||
if internet.is_available():
|
||||
if self.context.is_internet_available():
|
||||
norm_word = word.strip().lower()
|
||||
|
||||
url_words = RE_IS_URL.match(norm_word)
|
||||
@@ -211,7 +210,7 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
|
||||
disk_loader = None
|
||||
|
||||
net_available = internet.is_available()
|
||||
net_available = self.context.is_internet_available()
|
||||
if not pkg_types: # any type
|
||||
for man in self.managers:
|
||||
if self._can_work(man):
|
||||
@@ -402,7 +401,7 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
|
||||
def prepare(self, task_manager: TaskManager, root_password: str, internet_available: bool):
|
||||
if self.managers:
|
||||
internet_on = internet.is_available()
|
||||
internet_on = self.context.is_internet_available()
|
||||
taskman = task_manager if task_manager else TaskManager() # empty task manager to prevent null pointers
|
||||
for man in self.managers:
|
||||
if man not in self._already_prepared and self._can_work(man):
|
||||
@@ -420,7 +419,7 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
updates = []
|
||||
|
||||
if self.managers:
|
||||
net_available = internet.is_available()
|
||||
net_available = self.context.is_internet_available()
|
||||
|
||||
for man in self.managers:
|
||||
if self._can_work(man):
|
||||
@@ -433,7 +432,7 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
def list_warnings(self, internet_available: bool = None) -> List[str]:
|
||||
warnings = []
|
||||
|
||||
int_available = internet.is_available()
|
||||
int_available = self.context.is_internet_available()
|
||||
|
||||
if int_available:
|
||||
updates_msg = check_for_update(self.logger, self.http_client, self.i18n)
|
||||
@@ -469,7 +468,7 @@ class GenericSoftwareManager(SoftwareManager):
|
||||
|
||||
def list_suggestions(self, limit: int, filter_installed: bool) -> List[PackageSuggestion]:
|
||||
if bool(self.config['suggestions']['enabled']):
|
||||
if self.managers and internet.is_available():
|
||||
if self.managers and self.context.is_internet_available():
|
||||
suggestions, threads = [], []
|
||||
for man in self.managers:
|
||||
t = Thread(target=self._fill_suggestions, args=(suggestions, man, int(self.config['suggestions']['by_type']), filter_installed))
|
||||
|
||||
@@ -2,11 +2,11 @@ import logging
|
||||
import os
|
||||
import traceback
|
||||
from math import floor
|
||||
from typing import List, Tuple
|
||||
from typing import List, Tuple, Optional
|
||||
|
||||
from PyQt5.QtWidgets import QApplication, QStyleFactory
|
||||
|
||||
from bauh import ROOT_DIR
|
||||
from bauh import ROOT_DIR, __app_name__
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.download import FileDownloader
|
||||
from bauh.api.abstract.view import ViewComponent, TabComponent, InputOption, TextComponent, MultipleSelectComponent, \
|
||||
@@ -102,13 +102,13 @@ class GenericSettingsManager:
|
||||
id_="icon_exp")
|
||||
|
||||
select_trim_up = new_select(label=self.i18n['core.config.trim.after_upgrade'],
|
||||
tip=self.i18n['core.config.trim.after_upgrade.tip'],
|
||||
value=core_config['disk']['trim']['after_upgrade'],
|
||||
max_width=default_width,
|
||||
opts=[(self.i18n['yes'].capitalize(), True, None),
|
||||
(self.i18n['no'].capitalize(), False, None),
|
||||
(self.i18n['ask'].capitalize(), None, None)],
|
||||
id_='trim_after_upgrade')
|
||||
tip=self.i18n['core.config.trim.after_upgrade.tip'],
|
||||
value=core_config['disk']['trim']['after_upgrade'],
|
||||
max_width=default_width,
|
||||
opts=[(self.i18n['yes'].capitalize(), True, None),
|
||||
(self.i18n['no'].capitalize(), False, None),
|
||||
(self.i18n['ask'].capitalize(), None, None)],
|
||||
id_='trim_after_upgrade')
|
||||
|
||||
select_dep_check = self._gen_bool_component(label=self.i18n['core.config.system.dep_checking'],
|
||||
tooltip=self.i18n['core.config.system.dep_checking.tip'],
|
||||
@@ -178,7 +178,7 @@ class GenericSettingsManager:
|
||||
return TabComponent(self.i18n['core.config.tab.tray'].capitalize(), PanelComponent(sub_comps), None, 'core.tray')
|
||||
|
||||
def _gen_ui_settings(self, core_config: dict, screen_width: int, screen_height: int) -> TabComponent:
|
||||
default_width = floor(0.11 * screen_width)
|
||||
default_width = floor(0.15 * screen_width)
|
||||
|
||||
select_hdpi = self._gen_bool_component(label=self.i18n['core.config.ui.hdpi'],
|
||||
tooltip=self.i18n['core.config.ui.hdpi.tip'],
|
||||
@@ -205,9 +205,9 @@ class GenericSettingsManager:
|
||||
min_value=100, max_value=400, step_value=5, value=scale * 100,
|
||||
max_width=default_width)
|
||||
|
||||
cur_style = QApplication.instance().style().objectName().lower() if not core_config['ui']['style'] else core_config['ui']['style']
|
||||
style_opts = [InputOption(label=self.i18n['core.config.ui.style.default'].capitalize(), value=None)]
|
||||
style_opts.extend([InputOption(label=s.capitalize(), value=s.lower()) for s in QStyleFactory.keys()])
|
||||
cur_style = QApplication.instance().property('qt_style') if not core_config['ui']['qt_style'] else core_config['ui']['qt_style']
|
||||
|
||||
style_opts = [InputOption(label=s.capitalize(), value=s.lower()) for s in QStyleFactory.keys()]
|
||||
|
||||
default_style = [o for o in style_opts if o.value == cur_style]
|
||||
|
||||
@@ -221,14 +221,21 @@ class GenericSettingsManager:
|
||||
default_style = default_style[0]
|
||||
|
||||
select_style = SingleSelectComponent(label=self.i18n['style'].capitalize(),
|
||||
tooltip=self.i18n['core.config.ui.qt_style.tooltip'],
|
||||
options=style_opts,
|
||||
default_option=default_style,
|
||||
type_=SelectViewType.COMBO,
|
||||
max_width=default_width,
|
||||
id_="style")
|
||||
|
||||
input_maxd = TextInputComponent(label=self.i18n['core.config.ui.max_displayed'].capitalize(),
|
||||
tooltip=self.i18n['core.config.ui.max_displayed.tip'].capitalize(),
|
||||
select_system_theme = self._gen_bool_component(label=self.i18n['core.config.ui.system_theme'],
|
||||
tooltip=self.i18n['core.config.ui.system_theme.tip'].format(app=__app_name__),
|
||||
value=bool(core_config['ui']['system_theme']),
|
||||
max_width=default_width,
|
||||
id_='system_theme')
|
||||
|
||||
input_maxd = TextInputComponent(label=self.i18n['core.config.ui.max_displayed'],
|
||||
tooltip=self.i18n['core.config.ui.max_displayed.tip'],
|
||||
only_int=True,
|
||||
id_="table_max",
|
||||
max_width=default_width,
|
||||
@@ -240,11 +247,14 @@ class GenericSettingsManager:
|
||||
max_width=default_width,
|
||||
value=core_config['download']['icons'])
|
||||
|
||||
sub_comps = [FormComponent([select_hdpi, select_ascale, select_scale, select_dicons, select_style, input_maxd], spaces=False)]
|
||||
sub_comps = [FormComponent([select_hdpi, select_ascale, select_scale,
|
||||
select_dicons, select_system_theme,
|
||||
select_style, input_maxd], spaces=False)]
|
||||
|
||||
return TabComponent(self.i18n['core.config.tab.ui'].capitalize(), PanelComponent(sub_comps), None, 'core.ui')
|
||||
|
||||
def _gen_general_settings(self, core_config: dict, screen_width: int, screen_height: int) -> TabComponent:
|
||||
default_width = floor(0.11 * screen_width)
|
||||
default_width = floor(0.15 * screen_width)
|
||||
|
||||
locale_opts = [InputOption(label=self.i18n['locale.{}'.format(k)].capitalize(), value=k) for k in translation.get_available_keys()]
|
||||
|
||||
@@ -295,11 +305,12 @@ class GenericSettingsManager:
|
||||
id_="sugs_by_type")
|
||||
|
||||
inp_reboot = new_select(label=self.i18n['core.config.updates.reboot'],
|
||||
tip=self.i18n['core.config.updates.reboot.tip'],
|
||||
id_='ask_for_reboot',
|
||||
max_width=default_width,
|
||||
value=bool(core_config['updates']['ask_for_reboot']),
|
||||
opts=[(self.i18n['ask'].capitalize(), True, None), (self.i18n['no'].capitalize(), False, None)])
|
||||
tip=self.i18n['core.config.updates.reboot.tip'],
|
||||
id_='ask_for_reboot',
|
||||
max_width=default_width,
|
||||
value=bool(core_config['updates']['ask_for_reboot']),
|
||||
opts=[(self.i18n['ask'].capitalize(), True, None),
|
||||
(self.i18n['no'].capitalize(), False, None)])
|
||||
|
||||
sub_comps = [FormComponent([select_locale, select_store_pwd, select_sysnotify, select_sugs, inp_sugs, inp_reboot], spaces=False)]
|
||||
return TabComponent(self.i18n['core.config.tab.general'].capitalize(), PanelComponent(sub_comps), None, 'core.gen')
|
||||
@@ -322,7 +333,7 @@ class GenericSettingsManager:
|
||||
backup: PanelComponent,
|
||||
ui: PanelComponent,
|
||||
tray: PanelComponent,
|
||||
gems_panel: PanelComponent) -> Tuple[bool, List[str]]:
|
||||
gems_panel: PanelComponent) -> Tuple[bool, Optional[List[str]]]:
|
||||
core_config = config.read_config()
|
||||
|
||||
# general
|
||||
@@ -407,9 +418,12 @@ class GenericSettingsManager:
|
||||
|
||||
style = ui_form.get_component('style').get_selected()
|
||||
|
||||
cur_style = core_config['ui']['style'] if core_config['ui']['style'] else QApplication.instance().style().objectName().lower()
|
||||
cur_style = core_config['ui']['qt_style'] if core_config['ui']['qt_style'] else QApplication.instance().property('qt_style')
|
||||
if style != cur_style:
|
||||
core_config['ui']['style'] = style
|
||||
core_config['ui']['qt_style'] = style
|
||||
QApplication.instance().setProperty('qt_style', style)
|
||||
|
||||
core_config['ui']['system_theme'] = ui_form.get_component('system_theme').get_selected()
|
||||
|
||||
# gems
|
||||
checked_gems = gems_panel.components[1].get_component('gems').get_selected_values()
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
from glob import glob
|
||||
|
||||
from PyQt5.QtCore import Qt, QSize
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QVBoxLayout, QDialog, QLabel, QWidget, QHBoxLayout
|
||||
from PyQt5.QtWidgets import QVBoxLayout, QDialog, QLabel, QWidget, QHBoxLayout, QSizePolicy, QApplication
|
||||
|
||||
from bauh import __version__, __app_name__, ROOT_DIR
|
||||
from bauh.context import generate_i18n
|
||||
@@ -21,28 +20,29 @@ class AboutDialog(QDialog):
|
||||
layout = QVBoxLayout()
|
||||
self.setLayout(layout)
|
||||
|
||||
logo_container = QWidget()
|
||||
logo_container.setObjectName('logo_container')
|
||||
logo_container.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
logo_container.setLayout(QHBoxLayout())
|
||||
|
||||
label_logo = QLabel()
|
||||
icon = QIcon(resource.get_path('img/logo.svg')).pixmap(64, 64)
|
||||
label_logo.setPixmap(icon)
|
||||
label_logo.setAlignment(Qt.AlignCenter)
|
||||
layout.addWidget(label_logo)
|
||||
label_logo.setObjectName('logo')
|
||||
|
||||
logo_container.layout().addWidget(label_logo)
|
||||
layout.addWidget(logo_container)
|
||||
|
||||
label_name = QLabel(__app_name__)
|
||||
label_name.setStyleSheet('font-weight: bold; font-size: 14px')
|
||||
label_name.setAlignment(Qt.AlignCenter)
|
||||
label_name.setObjectName('app_name')
|
||||
layout.addWidget(label_name)
|
||||
|
||||
label_version = QLabel(i18n['about.version'].lower() + ' ' + __version__)
|
||||
label_version.setStyleSheet('QLabel { font-size: 11px; font-weight: bold }')
|
||||
label_version.setAlignment(Qt.AlignCenter)
|
||||
label_version.setObjectName('app_version')
|
||||
layout.addWidget(label_version)
|
||||
|
||||
layout.addWidget(QLabel(''))
|
||||
|
||||
line_desc = QLabel(i18n['about.info.desc'])
|
||||
line_desc.setStyleSheet('font-size: 12px; font-weight: bold;')
|
||||
line_desc.setAlignment(Qt.AlignCenter)
|
||||
line_desc.setMinimumWidth(400)
|
||||
line_desc.setObjectName('app_description')
|
||||
layout.addWidget(line_desc)
|
||||
|
||||
layout.addWidget(QLabel(''))
|
||||
@@ -54,54 +54,52 @@ class AboutDialog(QDialog):
|
||||
gems_widget.setLayout(QHBoxLayout())
|
||||
|
||||
gems_widget.layout().addWidget(QLabel())
|
||||
gem_logo_size = int(0.032552083 * QApplication.primaryScreen().size().height())
|
||||
|
||||
for gem_path in available_gems:
|
||||
icon = QLabel()
|
||||
icon.setObjectName('gem_logo')
|
||||
icon_path = gem_path + '/resources/img/{}.svg'.format(gem_path.split('/')[-1])
|
||||
icon.setPixmap(QIcon(icon_path).pixmap(QSize(25, 25)))
|
||||
icon.setPixmap(QIcon(icon_path).pixmap(gem_logo_size, gem_logo_size))
|
||||
gems_widget.layout().addWidget(icon)
|
||||
|
||||
gems_widget.layout().addWidget(QLabel())
|
||||
|
||||
layout.addWidget(gems_widget)
|
||||
layout.addWidget(QLabel(''))
|
||||
|
||||
label_more_info = QLabel()
|
||||
label_more_info.setStyleSheet('font-size: 11px;')
|
||||
label_more_info.setObjectName('app_more_information')
|
||||
label_more_info.setText(i18n['about.info.link'] + " <a href='{url}'>{url}</a>".format(url=PROJECT_URL))
|
||||
label_more_info.setOpenExternalLinks(True)
|
||||
label_more_info.setAlignment(Qt.AlignCenter)
|
||||
layout.addWidget(label_more_info)
|
||||
|
||||
label_license = QLabel()
|
||||
label_license.setStyleSheet('font-size: 11px;')
|
||||
label_license.setObjectName('app_license')
|
||||
label_license.setText("<a href='{}'>{}</a>".format(LICENSE_URL, i18n['about.info.license']))
|
||||
label_license.setOpenExternalLinks(True)
|
||||
label_license.setAlignment(Qt.AlignCenter)
|
||||
layout.addWidget(label_license)
|
||||
|
||||
layout.addWidget(QLabel(''))
|
||||
|
||||
label_trouble_question = QLabel(i18n['about.info.trouble.question'])
|
||||
label_trouble_question.setStyleSheet('font-size: 10px; font-weight: bold')
|
||||
label_trouble_question.setAlignment(Qt.AlignCenter)
|
||||
label_trouble_question.setObjectName('app_trouble_question')
|
||||
|
||||
layout.addWidget(label_trouble_question)
|
||||
|
||||
label_trouble_answer = QLabel(i18n['about.info.trouble.answer'])
|
||||
label_trouble_answer.setStyleSheet('font-size: 10px;')
|
||||
label_trouble_answer.setAlignment(Qt.AlignCenter)
|
||||
label_trouble_answer.setObjectName('app_trouble_answer')
|
||||
|
||||
layout.addWidget(label_trouble_answer)
|
||||
|
||||
layout.addWidget(QLabel(''))
|
||||
|
||||
label_rate_question = QLabel(i18n['about.info.rate.question'])
|
||||
label_rate_question.setStyleSheet('font-size: 10px; font-weight: bold;')
|
||||
label_rate_question.setAlignment(Qt.AlignCenter)
|
||||
label_rate_question.setObjectName('app_rate_question')
|
||||
layout.addWidget(label_rate_question)
|
||||
|
||||
label_rate_answer = QLabel(i18n['about.info.rate.answer'])
|
||||
label_rate_answer.setStyleSheet('font-size: 10px;')
|
||||
label_rate_answer.setAlignment(Qt.AlignCenter)
|
||||
label_rate_answer.setObjectName('app_rate_answer')
|
||||
layout.addWidget(label_rate_answer)
|
||||
|
||||
layout.addWidget(QLabel(''))
|
||||
|
||||
@@ -2,22 +2,21 @@ import operator
|
||||
import os
|
||||
from functools import reduce
|
||||
from threading import Lock
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from PyQt5.QtCore import Qt, QUrl, QSize
|
||||
from PyQt5.QtGui import QPixmap, QIcon, QCursor
|
||||
from PyQt5.QtNetwork import QNetworkAccessManager, QNetworkRequest, QNetworkReply
|
||||
from PyQt5.QtWidgets import QTableWidget, QTableView, QMenu, QAction, QTableWidgetItem, QToolButton, QWidget, \
|
||||
from PyQt5.QtWidgets import QTableWidget, QTableView, QMenu, QToolButton, QWidget, \
|
||||
QHeaderView, QLabel, QHBoxLayout, QToolBar, QSizePolicy
|
||||
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.model import PackageStatus, CustomSoftwareAction
|
||||
from bauh.commons.html import strip_html, bold
|
||||
from bauh.view.qt import dialog
|
||||
from bauh.view.qt.colors import GREEN, BROWN
|
||||
from bauh.view.qt.components import IconButton
|
||||
from bauh.view.qt.components import IconButton, QCustomMenuAction, QCustomToolbar
|
||||
from bauh.view.qt.dialog import ConfirmationDialog
|
||||
from bauh.view.qt.qt_utils import measure_based_on_height
|
||||
from bauh.view.qt.view_model import PackageView
|
||||
from bauh.view.util import resource
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
NAME_MAX_SIZE = 30
|
||||
@@ -25,45 +24,32 @@ DESC_MAX_SIZE = 40
|
||||
PUBLISHER_MAX_SIZE = 25
|
||||
|
||||
|
||||
class UpdateToggleButton(QWidget):
|
||||
class UpgradeToggleButton(QToolButton):
|
||||
|
||||
STYLE_DEFAULT = 'QToolButton { background: ' + GREEN + ' } QToolButton:checked { background: gray } '
|
||||
STYLE_UNCHECKED = 'QToolButton:disabled { background: #d69003 }'
|
||||
|
||||
def __init__(self, pkg: PackageView, root: QWidget, i18n: I18n, checked: bool = True, clickable: bool = True):
|
||||
super(UpdateToggleButton, self).__init__()
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
def __init__(self, pkg: Optional[PackageView], root: QWidget, i18n: I18n, checked: bool = True,
|
||||
clickable: bool = True):
|
||||
super(UpgradeToggleButton, self).__init__()
|
||||
self.app_view = pkg
|
||||
self.root = root
|
||||
|
||||
layout = QHBoxLayout()
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.setAlignment(Qt.AlignCenter)
|
||||
self.setLayout(layout)
|
||||
|
||||
self.bt = QToolButton()
|
||||
self.bt.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt.setCheckable(True)
|
||||
self.bt.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
self.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.setCheckable(True)
|
||||
|
||||
if clickable:
|
||||
self.bt.clicked.connect(self.change_state)
|
||||
self.clicked.connect(self.change_state)
|
||||
|
||||
self.bt.setStyleSheet(self.STYLE_DEFAULT + (self.STYLE_UNCHECKED if not clickable and not checked else ''))
|
||||
|
||||
layout.addWidget(self.bt)
|
||||
if not clickable and not checked:
|
||||
self.setProperty('enabled', 'false')
|
||||
|
||||
if not checked:
|
||||
self.bt.click()
|
||||
self.click()
|
||||
|
||||
if clickable:
|
||||
self.bt.setIcon(QIcon(resource.get_path('img/app_update.svg')))
|
||||
self.setToolTip('{} {}'.format(i18n['manage_window.apps_table.upgrade_toggle.tooltip'],
|
||||
i18n['manage_window.apps_table.upgrade_toggle.enabled.tooltip']))
|
||||
else:
|
||||
if not checked:
|
||||
self.bt.setIcon(QIcon(resource.get_path('img/exclamation.svg')))
|
||||
self.bt.setEnabled(False)
|
||||
self.setEnabled(False)
|
||||
|
||||
tooltip = i18n['{}.update.disabled.tooltip'.format(pkg.model.gem_name)]
|
||||
|
||||
@@ -73,22 +59,22 @@ class UpdateToggleButton(QWidget):
|
||||
self.setToolTip('{} {}'.format(i18n['manage_window.apps_table.upgrade_toggle.tooltip'],
|
||||
i18n['manage_window.apps_table.upgrade_toggle.disabled.tooltip']))
|
||||
else:
|
||||
self.bt.setIcon(QIcon(resource.get_path('img/app_update.svg')))
|
||||
self.bt.setCheckable(False)
|
||||
self.setCheckable(False)
|
||||
|
||||
def change_state(self, not_checked: bool):
|
||||
self.app_view.update_checked = not not_checked
|
||||
self.setProperty('toggled', str(self.app_view.update_checked).lower())
|
||||
self.root.update_bt_upgrade()
|
||||
self.style().unpolish(self)
|
||||
self.style().polish(self)
|
||||
|
||||
|
||||
class AppsTable(QTableWidget):
|
||||
|
||||
COL_NUMBER = 8
|
||||
STYLE_BT_INSTALL = 'background: {b}; color: white; font-size: 10px; font-weight: bold'.format(b=GREEN)
|
||||
STYLE_BT_UNINSTALL = 'color: {c}; font-size: 10px; font-weight: bold;'.format(c=BROWN)
|
||||
class PackagesTable(QTableWidget):
|
||||
COL_NUMBER = 9
|
||||
|
||||
def __init__(self, parent: QWidget, icon_cache: MemoryCache, download_icons: bool):
|
||||
super(AppsTable, self).__init__()
|
||||
super(PackagesTable, self).__init__()
|
||||
self.setObjectName('table_packages')
|
||||
self.setParent(parent)
|
||||
self.window = parent
|
||||
self.download_icons = download_icons
|
||||
@@ -102,8 +88,8 @@ class AppsTable(QTableWidget):
|
||||
self.setHorizontalHeaderLabels(['' for _ in range(self.columnCount())])
|
||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
self.icon_logo = QIcon(resource.get_path('img/logo.svg'))
|
||||
self.pixmap_verified = QIcon(resource.get_path('img/verified.svg')).pixmap(QSize(10, 10))
|
||||
self.horizontalScrollBar().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.verticalScrollBar().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
|
||||
self.network_man = QNetworkAccessManager()
|
||||
self.network_man.finished.connect(self._load_icon_and_cache)
|
||||
@@ -114,6 +100,10 @@ class AppsTable(QTableWidget):
|
||||
self.cache_type_icon = {}
|
||||
self.i18n = self.window.i18n
|
||||
|
||||
def icon_size(self) -> QSize:
|
||||
pixels = measure_based_on_height(0.02083)
|
||||
return QSize(pixels, pixels)
|
||||
|
||||
def has_any_settings(self, pkg: PackageView):
|
||||
return pkg.model.has_history() or \
|
||||
pkg.model.can_be_downgraded() or \
|
||||
@@ -122,77 +112,77 @@ class AppsTable(QTableWidget):
|
||||
|
||||
def show_pkg_actions(self, pkg: PackageView):
|
||||
menu_row = QMenu()
|
||||
menu_row.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
menu_row.setObjectName('app_actions')
|
||||
menu_row.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
|
||||
if pkg.model.installed:
|
||||
|
||||
if pkg.model.has_history():
|
||||
action_history = QAction(self.i18n["manage_window.apps_table.row.actions.history"])
|
||||
action_history.setIcon(QIcon(resource.get_path('img/history.svg')))
|
||||
|
||||
def show_history():
|
||||
self.window.begin_show_history(pkg)
|
||||
|
||||
action_history.triggered.connect(show_history)
|
||||
menu_row.addAction(action_history)
|
||||
menu_row.addAction(QCustomMenuAction(parent=menu_row,
|
||||
label=self.i18n["manage_window.apps_table.row.actions.history"],
|
||||
action=show_history,
|
||||
button_name='app_history'))
|
||||
|
||||
if pkg.model.can_be_downgraded():
|
||||
action_downgrade = QAction(self.i18n["manage_window.apps_table.row.actions.downgrade"])
|
||||
|
||||
def downgrade():
|
||||
if dialog.ask_confirmation(
|
||||
title=self.i18n['manage_window.apps_table.row.actions.downgrade'],
|
||||
body=self._parag(self.i18n['manage_window.apps_table.row.actions.downgrade.popup.body'].format(self._bold(str(pkg)))),
|
||||
i18n=self.i18n):
|
||||
if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.downgrade'],
|
||||
body=self._parag(self.i18n[
|
||||
'manage_window.apps_table.row.actions.downgrade.popup.body'].format(
|
||||
self._bold(str(pkg)))),
|
||||
i18n=self.i18n).ask():
|
||||
self.window.begin_downgrade(pkg)
|
||||
|
||||
action_downgrade.triggered.connect(downgrade)
|
||||
action_downgrade.setIcon(QIcon(resource.get_path('img/downgrade.svg')))
|
||||
menu_row.addAction(action_downgrade)
|
||||
menu_row.addAction(QCustomMenuAction(parent=menu_row,
|
||||
label=self.i18n["manage_window.apps_table.row.actions.downgrade"],
|
||||
action=downgrade,
|
||||
button_name='app_downgrade'))
|
||||
|
||||
if pkg.model.supports_ignored_updates():
|
||||
if pkg.model.is_update_ignored():
|
||||
action_ignore_updates = QAction(
|
||||
self.i18n["manage_window.apps_table.row.actions.ignore_updates_reverse"])
|
||||
action_ignore_updates.setIcon(QIcon(resource.get_path('img/revert_update_ignored.svg')))
|
||||
action_label = self.i18n["manage_window.apps_table.row.actions.ignore_updates_reverse"]
|
||||
button_name = 'revert_ignore_updates'
|
||||
else:
|
||||
action_ignore_updates = QAction(self.i18n["manage_window.apps_table.row.actions.ignore_updates"])
|
||||
action_ignore_updates.setIcon(QIcon(resource.get_path('img/ignore_update.svg')))
|
||||
action_label = self.i18n["manage_window.apps_table.row.actions.ignore_updates"]
|
||||
button_name = 'ignore_updates'
|
||||
|
||||
def ignore_updates():
|
||||
self.window.begin_ignore_updates(pkg)
|
||||
|
||||
action_ignore_updates.triggered.connect(ignore_updates)
|
||||
menu_row.addAction(action_ignore_updates)
|
||||
menu_row.addAction(QCustomMenuAction(parent=menu_row,
|
||||
label=action_label,
|
||||
button_name=button_name,
|
||||
action=ignore_updates))
|
||||
|
||||
if bool(pkg.model.get_custom_supported_actions()):
|
||||
actions = [self._map_custom_action(pkg, a) for a in pkg.model.get_custom_supported_actions()]
|
||||
actions = [self._map_custom_action(pkg, a, menu_row) for a in pkg.model.get_custom_supported_actions()]
|
||||
menu_row.addActions(actions)
|
||||
|
||||
menu_row.adjustSize()
|
||||
menu_row.popup(QCursor.pos())
|
||||
menu_row.exec_()
|
||||
|
||||
def _map_custom_action(self, pkg: PackageView, action: CustomSoftwareAction) -> QAction:
|
||||
item = QAction(self.i18n[action.i18n_label_key])
|
||||
|
||||
if action.icon_path:
|
||||
item.setIcon(QIcon(action.icon_path))
|
||||
|
||||
def _map_custom_action(self, pkg: PackageView, action: CustomSoftwareAction, parent: QWidget) -> QCustomMenuAction:
|
||||
def custom_action():
|
||||
if action.i18n_confirm_key:
|
||||
body = self.i18n[action.i18n_confirm_key].format(bold(pkg.model.name))
|
||||
else:
|
||||
body = '{} ?'.format(self.i18n[action.i18n_label_key])
|
||||
|
||||
if dialog.ask_confirmation(
|
||||
title=self.i18n[action.i18n_label_key],
|
||||
body=self._parag(body),
|
||||
i18n=self.i18n):
|
||||
if ConfirmationDialog(icon=QIcon(pkg.model.get_type_icon_path()),
|
||||
title=self.i18n[action.i18n_label_key],
|
||||
body=self._parag(body),
|
||||
i18n=self.i18n).ask():
|
||||
self.window.begin_execute_custom_action(pkg, action)
|
||||
|
||||
item.triggered.connect(custom_action)
|
||||
return item
|
||||
return QCustomMenuAction(parent=parent,
|
||||
label=self.i18n[action.i18n_label_key],
|
||||
icon=QIcon(action.icon_path) if action.icon_path else None,
|
||||
action=custom_action)
|
||||
|
||||
def refresh(self, pkg: PackageView):
|
||||
self._update_row(pkg, update_check_enabled=False, change_update_col=False)
|
||||
@@ -206,9 +196,11 @@ class AppsTable(QTableWidget):
|
||||
self._update_row(pkg, change_update_col=change_update_col)
|
||||
|
||||
def _uninstall(self, pkg: PackageView):
|
||||
if dialog.ask_confirmation(title=self.i18n['manage_window.apps_table.row.actions.uninstall.popup.title'],
|
||||
body=self._parag(self.i18n['manage_window.apps_table.row.actions.uninstall.popup.body'].format(self._bold(str(pkg)))),
|
||||
i18n=self.i18n):
|
||||
if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.uninstall.popup.title'],
|
||||
body=self._parag(
|
||||
self.i18n['manage_window.apps_table.row.actions.uninstall.popup.body'].format(
|
||||
self._bold(str(pkg)))),
|
||||
i18n=self.i18n).ask():
|
||||
self.window.begin_uninstall(pkg)
|
||||
|
||||
def _bold(self, text: str) -> str:
|
||||
@@ -224,13 +216,12 @@ class AppsTable(QTableWidget):
|
||||
warning = self.i18n.get('gem.{}.install.warning'.format(pkgv.model.get_type().lower()))
|
||||
|
||||
if warning:
|
||||
body += '<br/><br/> {}'.format('<br/>'.join(('{}.'.format(phrase) for phrase in warning.split('.') if phrase)))
|
||||
|
||||
if dialog.ask_confirmation(
|
||||
title=self.i18n['manage_window.apps_table.row.actions.install.popup.title'],
|
||||
body=self._parag(body),
|
||||
i18n=self.i18n):
|
||||
body += '<br/><br/> {}'.format(
|
||||
'<br/>'.join(('{}.'.format(phrase) for phrase in warning.split('.') if phrase)))
|
||||
|
||||
if ConfirmationDialog(title=self.i18n['manage_window.apps_table.row.actions.install.popup.title'],
|
||||
body=self._parag(body),
|
||||
i18n=self.i18n).ask():
|
||||
self.window.install(pkgv)
|
||||
|
||||
def _load_icon_and_cache(self, http_response: QNetworkReply):
|
||||
@@ -257,18 +248,19 @@ class AppsTable(QTableWidget):
|
||||
if icon_data:
|
||||
for idx, app in enumerate(self.window.pkgs):
|
||||
if app.model.icon_url == icon_url:
|
||||
col_name = self.item(idx, 0)
|
||||
col_name.setIcon(icon_data['icon'])
|
||||
self._update_icon(self.cellWidget(idx, 0), icon_data['icon'])
|
||||
|
||||
if app.model.supports_disk_cache() and app.model.get_disk_icon_path() and icon_data['bytes']:
|
||||
if not icon_was_cached or not os.path.exists(app.model.get_disk_icon_path()):
|
||||
self.window.manager.cache_to_disk(pkg=app.model, icon_bytes=icon_data['bytes'], only_icon=True)
|
||||
self.window.manager.cache_to_disk(pkg=app.model, icon_bytes=icon_data['bytes'],
|
||||
only_icon=True)
|
||||
|
||||
def update_packages(self, pkgs: List[PackageView], update_check_enabled: bool = True):
|
||||
self.setRowCount(0) # removes the overwrite effect when updates the table
|
||||
self.setEnabled(True)
|
||||
|
||||
if pkgs:
|
||||
self.setColumnCount(self.COL_NUMBER if update_check_enabled else self.COL_NUMBER - 1)
|
||||
self.setRowCount(len(pkgs))
|
||||
|
||||
for idx, pkg in enumerate(pkgs):
|
||||
@@ -284,59 +276,49 @@ class AppsTable(QTableWidget):
|
||||
self.scrollToTop()
|
||||
|
||||
def _update_row(self, pkg: PackageView, update_check_enabled: bool = True, change_update_col: bool = True):
|
||||
self._set_col_name(0, pkg)
|
||||
self._set_col_version(1, pkg)
|
||||
self._set_col_description(2, pkg)
|
||||
self._set_col_publisher(3, pkg)
|
||||
self._set_col_type(4, pkg)
|
||||
self._set_col_installed(5, pkg)
|
||||
self._set_col_actions(6, pkg)
|
||||
self._set_col_icon(0, pkg)
|
||||
self._set_col_name(1, pkg)
|
||||
self._set_col_version(2, pkg)
|
||||
self._set_col_description(3, pkg)
|
||||
self._set_col_publisher(4, pkg)
|
||||
self._set_col_type(5, pkg)
|
||||
self._set_col_installed(6, pkg)
|
||||
self._set_col_actions(7, pkg)
|
||||
|
||||
if change_update_col:
|
||||
col_update = None
|
||||
if change_update_col and update_check_enabled:
|
||||
if pkg.model.installed and not pkg.model.is_update_ignored() and pkg.model.update:
|
||||
col_update = QCustomToolbar()
|
||||
col_update.add_space()
|
||||
col_update.add_widget(UpgradeToggleButton(pkg=pkg,
|
||||
root=self.window,
|
||||
i18n=self.i18n,
|
||||
checked=pkg.update_checked if pkg.model.can_be_updated() else False,
|
||||
clickable=pkg.model.can_be_updated()))
|
||||
col_update.add_space()
|
||||
else:
|
||||
col_update = QLabel()
|
||||
|
||||
if update_check_enabled and pkg.model.installed and not pkg.model.is_update_ignored() and pkg.model.update:
|
||||
col_update = QToolBar()
|
||||
col_update.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
col_update.addWidget(UpdateToggleButton(pkg=pkg,
|
||||
root=self.window,
|
||||
i18n=self.i18n,
|
||||
checked=pkg.update_checked if pkg.model.can_be_updated() else False,
|
||||
clickable=pkg.model.can_be_updated()))
|
||||
|
||||
self.setCellWidget(pkg.table_index, 7, col_update)
|
||||
|
||||
def _gen_row_button(self, text: str, style: str, callback) -> QWidget:
|
||||
col = QWidget()
|
||||
col.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
|
||||
self.setCellWidget(pkg.table_index, 8, col_update)
|
||||
|
||||
def _gen_row_button(self, text: str, name: str, callback) -> QToolButton:
|
||||
col_bt = QToolButton()
|
||||
col_bt.setProperty('text_only', 'true')
|
||||
col_bt.setObjectName(name)
|
||||
col_bt.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
col_bt.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
|
||||
col_bt.setText(text)
|
||||
col_bt.setStyleSheet('QToolButton { ' + style + '}')
|
||||
col_bt.setMinimumWidth(80)
|
||||
col_bt.clicked.connect(callback)
|
||||
|
||||
layout = QHBoxLayout()
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.setAlignment(Qt.AlignCenter)
|
||||
|
||||
layout.addWidget(col_bt)
|
||||
|
||||
col.setLayout(layout)
|
||||
return col
|
||||
return col_bt
|
||||
|
||||
def _set_col_installed(self, col: int, pkg: PackageView):
|
||||
toolbar = QToolBar()
|
||||
toolbar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
toolbar = QCustomToolbar()
|
||||
toolbar.add_space()
|
||||
|
||||
if pkg.model.installed:
|
||||
if pkg.model.can_be_uninstalled():
|
||||
def uninstall():
|
||||
self._uninstall(pkg)
|
||||
|
||||
item = self._gen_row_button(self.i18n['uninstall'].capitalize(), self.STYLE_BT_UNINSTALL, uninstall)
|
||||
item = self._gen_row_button(self.i18n['uninstall'].capitalize(), 'bt_uninstall', uninstall)
|
||||
else:
|
||||
item = None
|
||||
|
||||
@@ -344,34 +326,39 @@ class AppsTable(QTableWidget):
|
||||
def install():
|
||||
self._install_app(pkg)
|
||||
|
||||
item = self._gen_row_button(self.i18n['install'].capitalize(), self.STYLE_BT_INSTALL, install)
|
||||
item = self._gen_row_button(self.i18n['install'].capitalize(), 'bt_install', install)
|
||||
else:
|
||||
item = None
|
||||
|
||||
toolbar.addWidget(item)
|
||||
toolbar.add_widget(item)
|
||||
toolbar.add_space()
|
||||
self.setCellWidget(pkg.table_index, col, toolbar)
|
||||
|
||||
def _set_col_type(self, col: int, pkg: PackageView):
|
||||
icon_data = self.cache_type_icon.get(pkg.model.get_type())
|
||||
|
||||
if icon_data is None:
|
||||
pixmap = QIcon(pkg.model.get_type_icon_path()).pixmap(QSize(16, 16))
|
||||
pixmap = QIcon(pkg.model.get_type_icon_path()).pixmap(self.icon_size())
|
||||
icon_data = {'px': pixmap, 'tip': '{}: {}'.format(self.i18n['type'], pkg.get_type_label())}
|
||||
self.cache_type_icon[pkg.model.get_type()] = icon_data
|
||||
|
||||
item = QLabel()
|
||||
item.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
item.setPixmap(icon_data['px'])
|
||||
item.setAlignment(Qt.AlignCenter)
|
||||
|
||||
item.setToolTip(icon_data['tip'])
|
||||
self.setCellWidget(pkg.table_index, col, item)
|
||||
col_type_icon = QLabel()
|
||||
col_type_icon.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
col_type_icon.setObjectName('app_type')
|
||||
col_type_icon.setProperty('icon', 'true')
|
||||
col_type_icon.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
col_type_icon.setPixmap(icon_data['px'])
|
||||
col_type_icon.setToolTip(icon_data['tip'])
|
||||
self.setCellWidget(pkg.table_index, col, col_type_icon)
|
||||
|
||||
def _set_col_version(self, col: int, pkg: PackageView):
|
||||
label_version = QLabel(str(pkg.model.version if pkg.model.version else '?'))
|
||||
label_version.setObjectName('app_version')
|
||||
label_version.setAlignment(Qt.AlignCenter)
|
||||
|
||||
item = QWidget()
|
||||
item.setProperty('container', 'true')
|
||||
item.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
item.setLayout(QHBoxLayout())
|
||||
item.layout().addWidget(label_version)
|
||||
|
||||
@@ -381,11 +368,11 @@ class AppsTable(QTableWidget):
|
||||
tooltip = self.i18n['version.unknown']
|
||||
|
||||
if pkg.model.update and not pkg.model.is_update_ignored():
|
||||
label_version.setStyleSheet("color: {}; font-weight: bold".format(GREEN))
|
||||
label_version.setProperty('update', 'true')
|
||||
tooltip = self.i18n['version.installed_outdated']
|
||||
|
||||
if pkg.model.is_update_ignored():
|
||||
label_version.setStyleSheet("color: {}; font-weight: bold".format(BROWN))
|
||||
label_version.setProperty('ignored', 'true')
|
||||
tooltip = self.i18n['version.updates_ignored']
|
||||
|
||||
if pkg.model.installed and pkg.model.update and not pkg.model.is_update_ignored() and pkg.model.version and pkg.model.latest_version and pkg.model.version != pkg.model.latest_version:
|
||||
@@ -395,25 +382,7 @@ class AppsTable(QTableWidget):
|
||||
item.setToolTip(tooltip)
|
||||
self.setCellWidget(pkg.table_index, col, item)
|
||||
|
||||
def _set_col_name(self, col: int, pkg: PackageView):
|
||||
item = QTableWidgetItem()
|
||||
item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled)
|
||||
|
||||
name = pkg.model.get_display_name()
|
||||
if name:
|
||||
item.setToolTip('{}: {}'.format(self.i18n['app.name'].lower(), pkg.model.get_name_tooltip()))
|
||||
else:
|
||||
name = '...'
|
||||
item.setToolTip(self.i18n['app.name'].lower())
|
||||
|
||||
if len(name) > NAME_MAX_SIZE:
|
||||
name = name[0:NAME_MAX_SIZE - 3] + '...'
|
||||
|
||||
if len(name) < NAME_MAX_SIZE:
|
||||
name = name + ' ' * (NAME_MAX_SIZE-len(name))
|
||||
|
||||
item.setText(name)
|
||||
|
||||
def _set_col_icon(self, col: int, pkg: PackageView):
|
||||
icon_path = pkg.model.get_disk_icon_path()
|
||||
if pkg.model.installed and pkg.model.supports_disk_cache() and icon_path:
|
||||
if icon_path.startswith('/'):
|
||||
@@ -444,11 +413,42 @@ class AppsTable(QTableWidget):
|
||||
icon_data = self.icon_cache.get(pkg.model.icon_url)
|
||||
icon = icon_data['icon'] if icon_data else QIcon(pkg.model.get_default_icon_path())
|
||||
|
||||
item.setIcon(icon)
|
||||
self.setItem(pkg.table_index, col, item)
|
||||
col_icon = QLabel()
|
||||
col_icon.setObjectName('app_icon')
|
||||
col_icon.setProperty('icon', 'true')
|
||||
col_icon.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
self._update_icon(col_icon, icon)
|
||||
self.setCellWidget(pkg.table_index, col, col_icon)
|
||||
|
||||
def _set_col_name(self, col: int, pkg: PackageView):
|
||||
col_name = QLabel()
|
||||
col_name.setObjectName('app_name')
|
||||
col_name.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
col_name.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
|
||||
name = pkg.model.get_display_name()
|
||||
if name:
|
||||
col_name.setToolTip('{}: {}'.format(self.i18n['app.name'].lower(), pkg.model.get_name_tooltip()))
|
||||
else:
|
||||
name = '...'
|
||||
col_name.setToolTip(self.i18n['app.name'].lower())
|
||||
|
||||
if len(name) > NAME_MAX_SIZE:
|
||||
name = name[0:NAME_MAX_SIZE - 3] + '...'
|
||||
|
||||
if len(name) < NAME_MAX_SIZE:
|
||||
name = name + ' ' * (NAME_MAX_SIZE - len(name))
|
||||
|
||||
col_name.setText(name)
|
||||
self.setCellWidget(pkg.table_index, col, col_name)
|
||||
|
||||
def _update_icon(self, label: QLabel, icon: QIcon):
|
||||
label.setPixmap(icon.pixmap(QSize(self.icon_size())))
|
||||
|
||||
def _set_col_description(self, col: int, pkg: PackageView):
|
||||
item = QLabel()
|
||||
item.setObjectName('app_description')
|
||||
item.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
|
||||
if pkg.model.description is not None or not pkg.model.is_application() or pkg.model.status == PackageStatus.READY:
|
||||
desc = pkg.model.description.split('\n')[0] if pkg.model.description else pkg.model.description
|
||||
@@ -478,21 +478,27 @@ class AppsTable(QTableWidget):
|
||||
if len(publisher) > PUBLISHER_MAX_SIZE:
|
||||
publisher = full_publisher[0: PUBLISHER_MAX_SIZE - 3] + '...'
|
||||
|
||||
lb_name = QLabel()
|
||||
lb_name.setObjectName('app_publisher')
|
||||
lb_name.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
|
||||
if not publisher:
|
||||
if not pkg.model.installed:
|
||||
item.setStyleSheet('QLabel { color: red; }')
|
||||
lb_name.setProperty('publisher_known', 'false')
|
||||
|
||||
publisher = self.i18n['unknown']
|
||||
|
||||
lb_name = QLabel(' {}'.format(publisher))
|
||||
lb_name.setText(' {}'.format(publisher))
|
||||
item.addWidget(lb_name)
|
||||
|
||||
if publisher and full_publisher:
|
||||
lb_name.setToolTip(self.i18n['publisher'].capitalize() + ((': ' + full_publisher) if full_publisher else ''))
|
||||
lb_name.setToolTip(
|
||||
self.i18n['publisher'].capitalize() + ((': ' + full_publisher) if full_publisher else ''))
|
||||
|
||||
if pkg.model.is_trustable():
|
||||
lb_verified = QLabel()
|
||||
lb_verified.setPixmap(self.pixmap_verified)
|
||||
lb_verified.setObjectName('icon_publisher_verified')
|
||||
lb_verified.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
lb_verified.setToolTip(self.i18n['publisher.verified'].capitalize())
|
||||
item.addWidget(lb_verified)
|
||||
else:
|
||||
@@ -501,49 +507,63 @@ class AppsTable(QTableWidget):
|
||||
self.setCellWidget(pkg.table_index, col, item)
|
||||
|
||||
def _set_col_actions(self, col: int, pkg: PackageView):
|
||||
item = QToolBar()
|
||||
item.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
toolbar = QCustomToolbar()
|
||||
toolbar.setObjectName('app_actions')
|
||||
toolbar.add_space()
|
||||
|
||||
if pkg.model.installed:
|
||||
def run():
|
||||
self.window.begin_launch_package(pkg)
|
||||
|
||||
bt = IconButton(QIcon(resource.get_path('img/app_play.svg')), i18n=self.i18n, action=run, tooltip=self.i18n['action.run.tooltip'])
|
||||
bt.setEnabled(pkg.model.can_be_run())
|
||||
item.addWidget(bt)
|
||||
bt = IconButton(i18n=self.i18n, action=run, tooltip=self.i18n['action.run.tooltip'])
|
||||
bt.setObjectName('app_run')
|
||||
|
||||
def handle_click():
|
||||
self.show_pkg_actions(pkg)
|
||||
if not pkg.model.can_be_run():
|
||||
bt.setEnabled(False)
|
||||
bt.setProperty('_enabled', 'false')
|
||||
|
||||
toolbar.layout().addWidget(bt)
|
||||
|
||||
settings = self.has_any_settings(pkg)
|
||||
|
||||
if pkg.model.installed:
|
||||
bt = IconButton(QIcon(resource.get_path('img/app_actions.svg')), i18n=self.i18n, action=handle_click, tooltip=self.i18n['action.settings.tooltip'])
|
||||
def handle_custom_actions():
|
||||
self.show_pkg_actions(pkg)
|
||||
|
||||
bt = IconButton(i18n=self.i18n, action=handle_custom_actions, tooltip=self.i18n['action.settings.tooltip'])
|
||||
bt.setObjectName('app_actions')
|
||||
bt.setEnabled(bool(settings))
|
||||
item.addWidget(bt)
|
||||
toolbar.layout().addWidget(bt)
|
||||
|
||||
if not pkg.model.installed:
|
||||
def show_screenshots():
|
||||
self.window.begin_show_screenshots(pkg)
|
||||
|
||||
bt = IconButton(QIcon(resource.get_path('img/camera.svg')), i18n=self.i18n, action=show_screenshots,
|
||||
bt = IconButton(i18n=self.i18n, action=show_screenshots,
|
||||
tooltip=self.i18n['action.screenshots.tooltip'])
|
||||
bt.setEnabled(bool(pkg.model.has_screenshots()))
|
||||
item.addWidget(bt)
|
||||
bt.setObjectName('app_screenshots')
|
||||
|
||||
if not pkg.model.has_screenshots():
|
||||
bt.setEnabled(False)
|
||||
bt.setProperty('_enabled', 'false')
|
||||
|
||||
toolbar.layout().addWidget(bt)
|
||||
|
||||
def show_info():
|
||||
self.window.begin_show_info(pkg)
|
||||
|
||||
bt = IconButton(QIcon(resource.get_path('img/app_info.svg')), i18n=self.i18n, action=show_info, tooltip=self.i18n['action.info.tooltip'])
|
||||
bt = IconButton(i18n=self.i18n, action=show_info, tooltip=self.i18n['action.info.tooltip'])
|
||||
bt.setObjectName('app_info')
|
||||
bt.setEnabled(bool(pkg.model.has_info()))
|
||||
item.addWidget(bt)
|
||||
toolbar.layout().addWidget(bt)
|
||||
|
||||
self.setCellWidget(pkg.table_index, col, item)
|
||||
self.setCellWidget(pkg.table_index, col, toolbar)
|
||||
|
||||
def change_headers_policy(self, policy: QHeaderView = QHeaderView.ResizeToContents, maximized: bool = False):
|
||||
header_horizontal = self.horizontalHeader()
|
||||
for i in range(self.columnCount()):
|
||||
if maximized:
|
||||
if i not in (3, 4, 7):
|
||||
if i not in (4, 5, 8):
|
||||
header_horizontal.setSectionResizeMode(i, QHeaderView.ResizeToContents)
|
||||
else:
|
||||
header_horizontal.setSectionResizeMode(i, QHeaderView.Stretch)
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
GREEN = '#91a069'
|
||||
ORANGE = '#ECB03E'
|
||||
BROWN = '#B47C3E'
|
||||
RED = '#FF614E'
|
||||
|
||||
@@ -47,6 +47,16 @@ def apply_filters(pkg: PackageView, filters: dict, info: dict, limit: bool = Tru
|
||||
info['pkgs_displayed'].append(pkg)
|
||||
|
||||
|
||||
def sum_updates_displayed(info: dict) -> int:
|
||||
updates = 0
|
||||
if info['pkgs_displayed']:
|
||||
for p in info['pkgs_displayed']:
|
||||
if p.model.update and not p.model.is_update_ignored():
|
||||
updates += 1
|
||||
|
||||
return updates
|
||||
|
||||
|
||||
def is_package_hidden(pkg: PackageView, filters: dict) -> bool:
|
||||
hidden = filters['only_apps'] and pkg.model.installed and not pkg.model.is_application()
|
||||
|
||||
|
||||
@@ -3,18 +3,15 @@ import traceback
|
||||
from pathlib import Path
|
||||
from typing import Tuple, Dict, Optional, Set
|
||||
|
||||
from PyQt5.QtCore import Qt, QSize, QTimer
|
||||
from PyQt5.QtGui import QIcon, QPixmap, QIntValidator, QCursor
|
||||
from PyQt5.QtCore import Qt, QTimer
|
||||
from PyQt5.QtGui import QIcon, QIntValidator, QCursor, QFocusEvent
|
||||
from PyQt5.QtWidgets import QRadioButton, QGroupBox, QCheckBox, QComboBox, QGridLayout, QWidget, \
|
||||
QLabel, QSizePolicy, QLineEdit, QToolButton, QHBoxLayout, QFormLayout, QFileDialog, QTabWidget, QVBoxLayout, \
|
||||
QSlider, QScrollArea, QFrame, QAction, QSpinBox, QPlainTextEdit
|
||||
QSlider, QScrollArea, QFrame, QAction, QSpinBox, QPlainTextEdit, QWidgetAction, QPushButton, QMenu
|
||||
|
||||
from bauh.api.abstract.view import SingleSelectComponent, InputOption, MultipleSelectComponent, SelectViewType, \
|
||||
TextInputComponent, FormComponent, FileChooserComponent, ViewComponent, TabGroupComponent, PanelComponent, \
|
||||
TwoStateButtonComponent, TextComponent, SpacerComponent, RangeInputComponent, ViewObserver, TextInputType
|
||||
from bauh.view.qt import css
|
||||
from bauh.view.qt.colors import RED
|
||||
from bauh.view.util import resource
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
|
||||
@@ -26,7 +23,7 @@ class QtComponentsManager:
|
||||
self.group_of_groups = {}
|
||||
self._saved_states = {}
|
||||
|
||||
def register_component(self, component_id: int, instance: QWidget, action: QAction = None):
|
||||
def register_component(self, component_id: int, instance: QWidget, action: Optional[QAction] = None):
|
||||
comp = (instance, action, {'v': True, 'e': True, 'r': False})
|
||||
self.components[component_id] = comp
|
||||
self._save_state(comp)
|
||||
@@ -339,6 +336,8 @@ class FormComboBoxQt(QComboBox):
|
||||
def __init__(self, model: SingleSelectComponent):
|
||||
super(FormComboBoxQt, self).__init__()
|
||||
self.model = model
|
||||
self.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.view().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
|
||||
if model.max_width > 0:
|
||||
self.setMaximumWidth(model.max_width)
|
||||
@@ -401,8 +400,10 @@ class RadioSelectQt(QGroupBox):
|
||||
|
||||
def __init__(self, model: SingleSelectComponent):
|
||||
super(RadioSelectQt, self).__init__(model.label + ' :' if model.label else None)
|
||||
if not model.label:
|
||||
self.setObjectName('radio_select_notitle')
|
||||
|
||||
self.model = model
|
||||
self.setStyleSheet("QGroupBox { font-weight: bold }")
|
||||
|
||||
grid = QGridLayout()
|
||||
self.setLayout(grid)
|
||||
@@ -431,10 +432,10 @@ class ComboSelectQt(QGroupBox):
|
||||
def __init__(self, model: SingleSelectComponent):
|
||||
super(ComboSelectQt, self).__init__()
|
||||
self.model = model
|
||||
self.setLayout(QGridLayout())
|
||||
self.setStyleSheet('QGridLayout {margin-left: 0} QLabel { font-weight: bold}')
|
||||
self.layout().addWidget(QLabel(model.label + ' :' if model.label else ''), 0, 0)
|
||||
self.layout().addWidget(FormComboBoxQt(model), 0, 1)
|
||||
self._layout = QGridLayout()
|
||||
self.setLayout(self._layout)
|
||||
self._layout.addWidget(QLabel(model.label + ' :' if model.label else ''), 0, 0)
|
||||
self._layout.addWidget(FormComboBoxQt(model), 0, 1)
|
||||
|
||||
|
||||
class QLineEditObserver(QLineEdit, ViewObserver):
|
||||
@@ -469,9 +470,6 @@ class TextInputQt(QGroupBox):
|
||||
super(TextInputQt, self).__init__()
|
||||
self.model = model
|
||||
self.setLayout(QGridLayout())
|
||||
self.setStyleSheet('QGridLayout {margin-left: 0} QLabel { font-weight: bold}')
|
||||
|
||||
self.layout().addWidget(QLabel(model.get_label()), 0, 0)
|
||||
|
||||
if self.model.max_width > 0:
|
||||
self.setMaximumWidth(self.model.max_width)
|
||||
@@ -511,7 +509,6 @@ class MultipleSelectQt(QGroupBox):
|
||||
|
||||
def __init__(self, model: MultipleSelectComponent, callback):
|
||||
super(MultipleSelectQt, self).__init__(model.label if model.label else None)
|
||||
self.setStyleSheet(css.GROUP_BOX)
|
||||
self.model = model
|
||||
self._layout = QGridLayout()
|
||||
self.setLayout(self._layout)
|
||||
@@ -531,17 +528,6 @@ class MultipleSelectQt(QGroupBox):
|
||||
|
||||
col = 0
|
||||
|
||||
pixmap_help = QPixmap()
|
||||
|
||||
for op in model.options: # loads the help icon if at least one option has a tooltip
|
||||
if op.tooltip:
|
||||
try:
|
||||
pixmap_help = QIcon(resource.get_path('img/about.svg')).pixmap(QSize(16, 16))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
break
|
||||
|
||||
for op in model.options:
|
||||
comp = CheckboxQt(op, model, callback)
|
||||
|
||||
@@ -555,7 +541,8 @@ class MultipleSelectQt(QGroupBox):
|
||||
|
||||
if op.tooltip:
|
||||
help_icon = QLabel()
|
||||
help_icon.setPixmap(pixmap_help)
|
||||
help_icon.setProperty('help_icon', 'true')
|
||||
help_icon.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
help_icon.setToolTip(op.tooltip)
|
||||
widget.layout().addWidget(help_icon)
|
||||
|
||||
@@ -590,23 +577,12 @@ class FormMultipleSelectQt(QWidget):
|
||||
|
||||
if model.label:
|
||||
line = 1
|
||||
self.layout().addWidget(QLabel(), 0, 1)
|
||||
self._layout.addWidget(QLabel(), 0, 1)
|
||||
else:
|
||||
line = 0
|
||||
|
||||
col = 0
|
||||
|
||||
pixmap_help = QPixmap()
|
||||
|
||||
for op in model.options: # loads the help icon if at least one option has a tooltip
|
||||
if op.tooltip:
|
||||
try:
|
||||
pixmap_help = QIcon(resource.get_path('img/about.svg')).pixmap(QSize(16, 16))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
break
|
||||
|
||||
for op in model.options:
|
||||
comp = CheckboxQt(op, model, None)
|
||||
|
||||
@@ -620,9 +596,9 @@ class FormMultipleSelectQt(QWidget):
|
||||
|
||||
if op.tooltip:
|
||||
help_icon = QLabel()
|
||||
help_icon.setPixmap(pixmap_help)
|
||||
help_icon.setProperty('help_icon', 'true')
|
||||
help_icon.setToolTip(op.tooltip)
|
||||
help_icon.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
help_icon.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
widget.layout().addWidget(help_icon)
|
||||
|
||||
self._layout.addWidget(widget, line, col)
|
||||
@@ -669,40 +645,26 @@ class InputFilter(QLineEdit):
|
||||
self.last_text = p_str
|
||||
|
||||
|
||||
class IconButton(QWidget):
|
||||
class IconButton(QToolButton):
|
||||
|
||||
def __init__(self, icon: QIcon, action, i18n: I18n, background: str = None, align: int = Qt.AlignCenter, tooltip: str = None, expanding: bool = False):
|
||||
def __init__(self, action, i18n: I18n, align: int = Qt.AlignCenter, tooltip: str = None, expanding: bool = False):
|
||||
super(IconButton, self).__init__()
|
||||
self.bt = QToolButton()
|
||||
self.bt.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt.setIcon(icon)
|
||||
self.bt.clicked.connect(action)
|
||||
self.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.clicked.connect(action)
|
||||
self.i18n = i18n
|
||||
self.default_tootip = tooltip
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
self.bt.setSizePolicy(QSizePolicy.Expanding if expanding else QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
|
||||
if background:
|
||||
style = 'QToolButton { color: white; background: ' + background + '} '
|
||||
style += 'QToolButton:disabled { color: white; background: blue }'
|
||||
self.bt.setStyleSheet(style)
|
||||
self.setSizePolicy(QSizePolicy.Expanding if expanding else QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
|
||||
if tooltip:
|
||||
self.bt.setToolTip(tooltip)
|
||||
|
||||
layout = QHBoxLayout()
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.setAlignment(align)
|
||||
layout.addWidget(self.bt)
|
||||
self.setLayout(layout)
|
||||
self.setToolTip(tooltip)
|
||||
|
||||
def setEnabled(self, enabled):
|
||||
super(IconButton, self).setEnabled(enabled)
|
||||
|
||||
if not enabled:
|
||||
self.bt.setToolTip(self.i18n['icon_button.tooltip.disabled'])
|
||||
self.setToolTip(self.i18n['icon_button.tooltip.disabled'])
|
||||
else:
|
||||
self.bt.setToolTip(self.default_tootip)
|
||||
self.setToolTip(self.default_tootip)
|
||||
|
||||
|
||||
class PanelQt(QWidget):
|
||||
@@ -726,7 +688,6 @@ class FormQt(QGroupBox):
|
||||
self.model = model
|
||||
self.i18n = i18n
|
||||
self.setLayout(QFormLayout())
|
||||
self.setStyleSheet(css.GROUP_BOX)
|
||||
|
||||
if model.spaces:
|
||||
self.layout().addRow(QLabel(), QLabel())
|
||||
@@ -787,7 +748,7 @@ class FormQt(QGroupBox):
|
||||
if hasattr(comp, 'get_label'):
|
||||
text = comp.get_label()
|
||||
else:
|
||||
attr = 'label' if hasattr(comp,'label') else 'value'
|
||||
attr = 'label' if hasattr(comp, 'label') else 'value'
|
||||
text = getattr(comp, attr)
|
||||
|
||||
if text:
|
||||
@@ -803,13 +764,8 @@ class FormQt(QGroupBox):
|
||||
|
||||
def gen_tip_icon(self, tip: str) -> QLabel:
|
||||
tip_icon = QLabel()
|
||||
tip_icon.setProperty('tip_icon', 'true')
|
||||
tip_icon.setToolTip(tip.strip())
|
||||
|
||||
try:
|
||||
tip_icon.setPixmap(QIcon(resource.get_path('img/about.svg')).pixmap(QSize(12, 12)))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
return tip_icon
|
||||
|
||||
def _new_text_input(self, c: TextInputComponent) -> Tuple[QLabel, QLineEdit]:
|
||||
@@ -860,6 +816,7 @@ class FormQt(QGroupBox):
|
||||
|
||||
def _new_range_input(self, model: RangeInputComponent) -> QSpinBox:
|
||||
spinner = QSpinBox()
|
||||
spinner.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
spinner.setMinimum(model.min)
|
||||
spinner.setMaximum(model.max)
|
||||
spinner.setSingleStep(model.step)
|
||||
@@ -929,13 +886,8 @@ class FormQt(QGroupBox):
|
||||
label = self._new_label(c)
|
||||
wrapped = self._wrap(chooser, c)
|
||||
|
||||
try:
|
||||
icon = QIcon(resource.get_path('img/clean.svg'))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
icon = QIcon()
|
||||
|
||||
bt = IconButton(icon, i18n=self.i18n['clean'].capitalize(), action=clean_path, background=RED, tooltip=self.i18n['action.run.tooltip'])
|
||||
bt = IconButton(i18n=self.i18n['clean'].capitalize(), action=clean_path, tooltip=self.i18n['clean'].capitalize())
|
||||
bt.setObjectName('clean_field')
|
||||
|
||||
wrapped.layout().addWidget(bt)
|
||||
return label, wrapped
|
||||
@@ -962,6 +914,8 @@ class TabGroupQt(QTabWidget):
|
||||
scroll.setWidget(to_widget(c.content, i18n))
|
||||
self.addTab(scroll, icon, c.label)
|
||||
|
||||
self.tabBar().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
|
||||
|
||||
def new_single_select(model: SingleSelectComponent) -> QWidget:
|
||||
if model.type == SelectViewType.RADIO:
|
||||
@@ -974,6 +928,7 @@ def new_single_select(model: SingleSelectComponent) -> QWidget:
|
||||
|
||||
def new_spacer(min_width: int = None) -> QWidget:
|
||||
spacer = QWidget()
|
||||
spacer.setProperty('spacer', 'true')
|
||||
|
||||
if min_width:
|
||||
spacer.setMinimumWidth(min_width)
|
||||
@@ -1019,13 +974,13 @@ class RangeInputQt(QGroupBox):
|
||||
super(RangeInputQt, self).__init__()
|
||||
self.model = model
|
||||
self.setLayout(QGridLayout())
|
||||
self.setStyleSheet('QGridLayout {margin-left: 0} QLabel { font-weight: bold}')
|
||||
self.layout().addWidget(QLabel(model.label.capitalize() + ' :' if model.label else ''), 0, 0)
|
||||
|
||||
if self.model.max_width > 0:
|
||||
self.setMaximumWidth(self.model.max_width)
|
||||
|
||||
self.spinner = QSpinBox()
|
||||
self.spinner.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.spinner.setMinimum(model.min)
|
||||
self.spinner.setMaximum(model.max)
|
||||
self.spinner.setSingleStep(model.step)
|
||||
@@ -1040,3 +995,155 @@ class RangeInputQt(QGroupBox):
|
||||
|
||||
def _update_value(self):
|
||||
self.model.value = self.spinner.value()
|
||||
|
||||
|
||||
class QCustomLineEdit(QLineEdit):
|
||||
|
||||
def __init__(self, focus_in_callback, focus_out_callback, **kwargs):
|
||||
super(QCustomLineEdit, self).__init__(**kwargs)
|
||||
self.focus_in_callback = focus_in_callback
|
||||
self.focus_out_callback = focus_out_callback
|
||||
|
||||
def focusInEvent(self, ev: QFocusEvent):
|
||||
super(QCustomLineEdit, self).focusInEvent(ev)
|
||||
if self.focus_in_callback:
|
||||
self.focus_in_callback()
|
||||
|
||||
def focusOutEvent(self, ev: QFocusEvent):
|
||||
super(QCustomLineEdit, self).focusOutEvent(ev)
|
||||
if self.focus_out_callback:
|
||||
self.focus_out_callback()
|
||||
|
||||
self.clearFocus()
|
||||
|
||||
|
||||
class QSearchBar(QWidget):
|
||||
|
||||
def __init__(self, search_callback, parent: Optional[QWidget] = None):
|
||||
super(QSearchBar, self).__init__(parent=parent)
|
||||
self.setLayout(QHBoxLayout())
|
||||
self.setContentsMargins(0, 0, 0, 0)
|
||||
self.layout().setSpacing(0)
|
||||
self.callback = search_callback
|
||||
|
||||
self.inp_search = QCustomLineEdit(focus_in_callback=self._set_focus_in,
|
||||
focus_out_callback=self._set_focus_out)
|
||||
self.inp_search.setObjectName('inp_search')
|
||||
self.inp_search.setFrame(False)
|
||||
self.inp_search.returnPressed.connect(search_callback)
|
||||
search_background_color = self.inp_search.palette().color(self.inp_search.backgroundRole()).name()
|
||||
|
||||
self.search_left_corner = QLabel()
|
||||
self.search_left_corner.setObjectName('lb_left_corner')
|
||||
|
||||
self.layout().addWidget(self.search_left_corner)
|
||||
|
||||
self.layout().addWidget(self.inp_search)
|
||||
|
||||
self.search_button = QPushButton()
|
||||
self.search_button.setObjectName('search_button')
|
||||
self.search_button.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.search_button.clicked.connect(search_callback)
|
||||
|
||||
self.layout().addWidget(self.search_button)
|
||||
|
||||
def clear(self):
|
||||
self.inp_search.clear()
|
||||
|
||||
def text(self) -> str:
|
||||
return self.inp_search.text()
|
||||
|
||||
def set_text(self, text: str):
|
||||
self.inp_search.setText(text)
|
||||
|
||||
def setFocus(self):
|
||||
self.inp_search.setFocus()
|
||||
|
||||
def set_tooltip(self, tip: str):
|
||||
self.inp_search.setToolTip(tip)
|
||||
|
||||
def set_button_tooltip(self, tip: str):
|
||||
self.search_button.setToolTip(tip)
|
||||
|
||||
def set_placeholder(self, placeholder: str):
|
||||
self.inp_search.setPlaceholderText(placeholder)
|
||||
|
||||
def _set_focus_in(self):
|
||||
self.search_button.setProperty('focused', 'true')
|
||||
self.search_left_corner.setProperty('focused', 'true')
|
||||
|
||||
for c in (self.search_button, self.search_left_corner):
|
||||
c.style().unpolish(c)
|
||||
c.style().polish(c)
|
||||
|
||||
def _set_focus_out(self):
|
||||
self.search_button.setProperty('focused', 'false')
|
||||
self.search_left_corner.setProperty('focused', 'false')
|
||||
|
||||
for c in (self.search_button, self.search_left_corner):
|
||||
c.style().unpolish(c)
|
||||
c.style().polish(c)
|
||||
|
||||
|
||||
class QCustomMenuAction(QWidgetAction):
|
||||
|
||||
def __init__(self, parent: QWidget, label: Optional[str] = None, action=None, button_name: Optional[str] = None,
|
||||
icon: Optional[QIcon] = None, tooltip: Optional[str] = None):
|
||||
super(QCustomMenuAction, self).__init__(parent)
|
||||
self.button = QPushButton()
|
||||
self.set_label(label)
|
||||
self._action = None
|
||||
self.set_action(action)
|
||||
self.set_button_name(button_name)
|
||||
self.set_icon(icon)
|
||||
self.setDefaultWidget(self.button)
|
||||
|
||||
if tooltip:
|
||||
self.button.setToolTip(tooltip)
|
||||
|
||||
def set_label(self, label: str):
|
||||
self.button.setText(label)
|
||||
|
||||
def set_action(self, action):
|
||||
self._action = action
|
||||
self.button.clicked.connect(self._handle_action)
|
||||
|
||||
def _handle_action(self):
|
||||
if self._action:
|
||||
self._action()
|
||||
|
||||
if self.parent() and isinstance(self.parent(), QMenu):
|
||||
self.parent().close()
|
||||
|
||||
def set_button_name(self, name: str):
|
||||
if name:
|
||||
self.button.setObjectName(name)
|
||||
|
||||
def set_icon(self, icon: QIcon):
|
||||
if icon:
|
||||
self.button.setIcon(icon)
|
||||
|
||||
def get_label(self) -> str:
|
||||
return self.button.text()
|
||||
|
||||
|
||||
class QCustomToolbar(QWidget):
|
||||
|
||||
def __init__(self, spacing: int = 2, parent: Optional[QWidget] = None, alignment: int = Qt.AlignRight):
|
||||
super(QCustomToolbar, self).__init__(parent=parent)
|
||||
self.setProperty('container', 'true')
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
self.setLayout(QHBoxLayout())
|
||||
self.layout().setContentsMargins(0, 0, 0, 0)
|
||||
self.layout().setSpacing(spacing)
|
||||
self.layout().setAlignment(alignment)
|
||||
|
||||
def add_widget(self, widget: QWidget):
|
||||
if widget:
|
||||
self.layout().addWidget(widget)
|
||||
|
||||
def add_stretch(self, value: int = 0):
|
||||
self.layout().addStretch(value)
|
||||
|
||||
def add_space(self, min_width: int = 0):
|
||||
self.layout().addWidget(new_spacer(min_width))
|
||||
|
||||
@@ -1,83 +0,0 @@
|
||||
from typing import List
|
||||
|
||||
from PyQt5.QtCore import QSize, Qt
|
||||
from PyQt5.QtGui import QCursor
|
||||
from PyQt5.QtWidgets import QMessageBox, QVBoxLayout, QLabel, QWidget, QScrollArea, QFrame
|
||||
|
||||
from bauh.api.abstract.view import ViewComponent
|
||||
from bauh.view.qt import css
|
||||
from bauh.view.qt.components import to_widget
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
|
||||
class ConfirmationDialog(QMessageBox):
|
||||
|
||||
def __init__(self, title: str, body: str, i18n: I18n, screen_size: QSize, components: List[ViewComponent] = None,
|
||||
confirmation_label: str = None, deny_label: str = None, deny_button: bool = True, window_cancel: bool = True,
|
||||
confirmation_button: bool = True):
|
||||
super(ConfirmationDialog, self).__init__()
|
||||
|
||||
if not window_cancel:
|
||||
self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
|
||||
self.setWindowTitle(title)
|
||||
self.setStyleSheet('QLabel { margin-right: 25px; }')
|
||||
|
||||
self.bt_yes = None
|
||||
if confirmation_button:
|
||||
self.bt_yes = self.addButton(i18n['popup.button.yes'] if not confirmation_label else confirmation_label.capitalize(), QMessageBox.YesRole)
|
||||
self.bt_yes.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_yes.setStyleSheet(css.OK_BUTTON)
|
||||
self.setDefaultButton(self.bt_yes)
|
||||
|
||||
if deny_button:
|
||||
self.bt_no = self.addButton(i18n['popup.button.no'] if not deny_label else deny_label.capitalize(), QMessageBox.NoRole)
|
||||
self.bt_no.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
|
||||
if not confirmation_button:
|
||||
self.bt_no.setStyleSheet(css.OK_BUTTON)
|
||||
self.setDefaultButton(self.bt_no)
|
||||
|
||||
label = None
|
||||
if body:
|
||||
if not components:
|
||||
self.setIcon(QMessageBox.Question)
|
||||
label = QLabel(body)
|
||||
self.layout().addWidget(label, 0, 1)
|
||||
|
||||
width = 0
|
||||
if components:
|
||||
scroll = QScrollArea(self)
|
||||
scroll.setFrameShape(QFrame.NoFrame)
|
||||
scroll.setWidgetResizable(True)
|
||||
|
||||
comps_container = QWidget()
|
||||
comps_container.setLayout(QVBoxLayout())
|
||||
scroll.setWidget(comps_container)
|
||||
|
||||
height = 0
|
||||
|
||||
for idx, comp in enumerate(components):
|
||||
inst = to_widget(comp, i18n)
|
||||
height += inst.sizeHint().height()
|
||||
|
||||
if inst.sizeHint().width() > width:
|
||||
width = inst.sizeHint().width()
|
||||
|
||||
comps_container.layout().addWidget(inst)
|
||||
|
||||
height = height if height < int(screen_size.height() / 2.5) else int(screen_size.height() / 2.5)
|
||||
|
||||
scroll.setFixedHeight(height)
|
||||
|
||||
self.layout().addWidget(scroll, 1 if body else 0, 1)
|
||||
|
||||
if label and comps_container.sizeHint().width() > label.sizeHint().width():
|
||||
label.setText(label.text() + (' ' * int(comps_container.sizeHint().width() - label.sizeHint().width())))
|
||||
if not body and width > 0:
|
||||
self.layout().addWidget(QLabel(' ' * int(width / 2)), 1, 1)
|
||||
|
||||
self.exec_()
|
||||
|
||||
def is_confirmed(self) -> bool:
|
||||
return bool(self.bt_yes and self.clickedButton() == self.bt_yes)
|
||||
@@ -1,19 +0,0 @@
|
||||
from bauh.view.qt.colors import GREEN
|
||||
|
||||
OK_BUTTON = """QPushButton { background: %s; color: white; font-weight: bold}
|
||||
QPushButton:disabled { background-color: gray; }""" % GREEN
|
||||
|
||||
GROUP_BOX = """
|
||||
QGroupBox {
|
||||
font-weight: bold;
|
||||
font-size: 12px;
|
||||
border: 1px solid silver;
|
||||
border-radius: 6px;
|
||||
margin-top: 6px;
|
||||
}
|
||||
QGroupBox::title {
|
||||
subcontrol-origin: margin;
|
||||
left: 7px;
|
||||
padding: 0px 5px 0px 5px;
|
||||
}
|
||||
"""
|
||||
@@ -1,11 +1,12 @@
|
||||
from typing import List
|
||||
from typing import List, Optional
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtCore import Qt, QSize, QMargins
|
||||
from PyQt5.QtGui import QIcon, QCursor
|
||||
from PyQt5.QtWidgets import QMessageBox, QLabel, QWidget, QHBoxLayout
|
||||
from PyQt5.QtWidgets import QMessageBox, QLabel, QWidget, QHBoxLayout, QDialog, QVBoxLayout, QSizePolicy, QApplication, \
|
||||
QStyle, QPushButton, QScrollArea, QFrame
|
||||
|
||||
from bauh.api.abstract.view import MessageType
|
||||
from bauh.view.qt import css
|
||||
from bauh.view.qt.components import new_spacer
|
||||
from bauh.view.util import resource
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
@@ -28,34 +29,96 @@ def show_message(title: str, body: str, type_: MessageType, icon: QIcon = QIcon(
|
||||
popup.exec_()
|
||||
|
||||
|
||||
def ask_confirmation(title: str, body: str, i18n: I18n, icon: QIcon = QIcon(resource.get_path('img/logo.svg')), widgets: List[QWidget] = None):
|
||||
diag = QMessageBox()
|
||||
diag.setIcon(QMessageBox.Question)
|
||||
diag.setWindowTitle(title)
|
||||
diag.setStyleSheet('QLabel { margin-right: 25px; }')
|
||||
diag.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
class ConfirmationDialog(QDialog):
|
||||
|
||||
wbody = QWidget()
|
||||
wbody.setLayout(QHBoxLayout())
|
||||
wbody.layout().addWidget(QLabel(body))
|
||||
def __init__(self, title: str, body: Optional[str], i18n: I18n, icon: QIcon = QIcon(resource.get_path('img/logo.svg')),
|
||||
widgets: Optional[List[QWidget]] = None, confirmation_button: bool = True, deny_button: bool = True,
|
||||
window_cancel: bool = False, confirmation_label: Optional[str] = None, deny_label: Optional[str] = None):
|
||||
super(ConfirmationDialog, self).__init__()
|
||||
|
||||
if widgets:
|
||||
for w in widgets:
|
||||
wbody.layout().addWidget(w)
|
||||
if not window_cancel:
|
||||
self.setWindowFlags(Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
|
||||
diag.layout().addWidget(wbody, 0, 1)
|
||||
self.setLayout(QVBoxLayout())
|
||||
self.setWindowTitle(title)
|
||||
self.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
self.setMinimumWidth(250)
|
||||
self.confirmed = False
|
||||
|
||||
bt_yes = diag.addButton(i18n['popup.button.yes'], QMessageBox.YesRole)
|
||||
bt_yes.setStyleSheet(css.OK_BUTTON)
|
||||
bt_yes.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
diag.setDefaultButton(bt_yes)
|
||||
if icon:
|
||||
self.setWindowIcon(icon)
|
||||
|
||||
bt_no = diag.addButton(i18n['popup.button.no'], QMessageBox.NoRole)
|
||||
bt_no.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
container_body = QWidget()
|
||||
container_body.setObjectName('confirm_container_body')
|
||||
container_body.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
|
||||
if icon:
|
||||
diag.setWindowIcon(icon)
|
||||
if widgets:
|
||||
container_body.setLayout(QVBoxLayout())
|
||||
scroll = QScrollArea(self)
|
||||
scroll.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
scroll.setFrameShape(QFrame.NoFrame)
|
||||
scroll.setWidgetResizable(True)
|
||||
scroll.setWidget(container_body)
|
||||
self.layout().addWidget(scroll)
|
||||
else:
|
||||
container_body.setLayout(QHBoxLayout())
|
||||
self.layout().addWidget(container_body)
|
||||
|
||||
diag.exec_()
|
||||
lb_icon = QLabel()
|
||||
lb_icon.setObjectName('confirm_icon')
|
||||
lb_icon.setPixmap(QApplication.style().standardIcon(QStyle.SP_MessageBoxQuestion).pixmap(QSize(48, 48)))
|
||||
container_body.layout().addWidget(lb_icon)
|
||||
|
||||
return diag.clickedButton() == bt_yes
|
||||
if body:
|
||||
lb_msg = QLabel(body)
|
||||
lb_msg.setObjectName('confirm_msg')
|
||||
container_body.layout().addWidget(lb_msg)
|
||||
|
||||
if widgets:
|
||||
for w in widgets:
|
||||
container_body.layout().addWidget(w)
|
||||
else:
|
||||
container_body.layout().addWidget(new_spacer())
|
||||
|
||||
container_bottom = QWidget()
|
||||
container_bottom.setObjectName('confirm_container_bottom')
|
||||
container_bottom.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
container_bottom.setLayout(QHBoxLayout())
|
||||
self.layout().addWidget(container_bottom)
|
||||
|
||||
container_bottom.layout().addWidget(new_spacer())
|
||||
|
||||
if confirmation_button:
|
||||
bt_confirm = QPushButton(confirmation_label.capitalize() if confirmation_label else i18n['popup.button.yes'])
|
||||
bt_confirm.setObjectName('ok')
|
||||
bt_confirm.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_confirm.setDefault(True)
|
||||
bt_confirm.setAutoDefault(True)
|
||||
bt_confirm.clicked.connect(self.confirm)
|
||||
container_bottom.layout().addWidget(bt_confirm)
|
||||
|
||||
if deny_button:
|
||||
bt_cancel = QPushButton(deny_label.capitalize() if deny_label else i18n['popup.button.no'])
|
||||
bt_cancel.setObjectName('bt_cancel')
|
||||
bt_cancel.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_cancel.clicked.connect(self.close)
|
||||
container_bottom.layout().addWidget(bt_cancel)
|
||||
|
||||
if not confirmation_button:
|
||||
bt_cancel.setDefault(True)
|
||||
bt_cancel.setAutoDefault(True)
|
||||
|
||||
def confirm(self):
|
||||
self.confirmed = True
|
||||
self.close()
|
||||
|
||||
def ask(self) -> bool:
|
||||
self.exec_()
|
||||
return self.confirmed
|
||||
|
||||
|
||||
def ask_confirmation(title: str, body: str, i18n: I18n, icon: QIcon = QIcon(resource.get_path('img/logo.svg')),
|
||||
widgets: List[QWidget] = None) -> bool:
|
||||
popup = ConfirmationDialog(title=title, body=body, i18n=i18n, icon=icon, widgets=widgets)
|
||||
popup.exec_()
|
||||
return popup.confirmed
|
||||
|
||||
@@ -1,103 +0,0 @@
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QWidget, QLabel, QGridLayout, QPushButton
|
||||
|
||||
from bauh import ROOT_DIR
|
||||
from bauh.api.abstract.view import MultipleSelectComponent, InputOption
|
||||
from bauh.view.core.config import save
|
||||
from bauh.view.core.controller import GenericSoftwareManager
|
||||
from bauh.view.util import resource
|
||||
from bauh.view.qt import qt_utils, css
|
||||
from bauh.view.qt.components import MultipleSelectQt, CheckboxQt, new_spacer
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
|
||||
class GemSelectorPanel(QWidget):
|
||||
|
||||
def __init__(self, window: QWidget, manager: GenericSoftwareManager, i18n: I18n, config: dict, show_panel_after_restart: bool = False):
|
||||
super(GemSelectorPanel, self).__init__()
|
||||
self.window = window
|
||||
self.manager = manager
|
||||
self.config = config
|
||||
self.setLayout(QGridLayout())
|
||||
self.setWindowIcon(QIcon(resource.get_path('img/logo.svg')))
|
||||
self.setWindowTitle(i18n['gem_selector.title'])
|
||||
self.resize(400, 400)
|
||||
self.show_panel_after_restart = show_panel_after_restart
|
||||
|
||||
self.label_question = QLabel(i18n['gem_selector.question'])
|
||||
self.label_question.setStyleSheet('QLabel { font-weight: bold}')
|
||||
self.layout().addWidget(self.label_question, 0, 1, Qt.AlignHCenter)
|
||||
|
||||
self.bt_proceed = QPushButton(i18n['change'].capitalize())
|
||||
self.bt_proceed.setStyleSheet(css.OK_BUTTON)
|
||||
self.bt_proceed.clicked.connect(self.save)
|
||||
|
||||
self.bt_exit = QPushButton(i18n['close'].capitalize())
|
||||
self.bt_exit.clicked.connect(self.exit)
|
||||
|
||||
self.gem_map = {}
|
||||
gem_options = []
|
||||
default = set()
|
||||
|
||||
managers = [*manager.managers]
|
||||
managers.sort(key=lambda c: c.__class__.__name__)
|
||||
|
||||
for m in managers:
|
||||
if m.can_work():
|
||||
modname = m.__module__.split('.')[-2]
|
||||
op = InputOption(label=i18n.get('gem.{}.label'.format(modname), modname.capitalize()),
|
||||
tooltip=i18n.get('gem.{}.info'.format(modname)),
|
||||
value=modname,
|
||||
icon_path='{r}/gems/{n}/resources/img/{n}.svg'.format(r=ROOT_DIR, n=modname))
|
||||
|
||||
gem_options.append(op)
|
||||
self.gem_map[modname] = m
|
||||
|
||||
if m.is_enabled() and m in manager.working_managers:
|
||||
default.add(op)
|
||||
|
||||
if self.config['gems']:
|
||||
default_ops = {o for o in gem_options if o.value in self.config['gems']}
|
||||
else:
|
||||
default_ops = default
|
||||
|
||||
self.bt_proceed.setEnabled(bool(default_ops))
|
||||
|
||||
self.gem_select_model = MultipleSelectComponent(label='', options=gem_options, default_options=default_ops, max_per_line=1)
|
||||
|
||||
self.gem_select = MultipleSelectQt(self.gem_select_model, self.check_state)
|
||||
self.layout().addWidget(self.gem_select, 1, 1)
|
||||
|
||||
self.layout().addWidget(new_spacer(), 2, 1)
|
||||
|
||||
self.layout().addWidget(self.bt_proceed, 3, 1, Qt.AlignRight)
|
||||
self.layout().addWidget(self.bt_exit, 3, 1, Qt.AlignLeft)
|
||||
|
||||
self.adjustSize()
|
||||
self.setFixedSize(self.size())
|
||||
qt_utils.centralize(self)
|
||||
|
||||
def check_state(self, model: CheckboxQt, checked: bool):
|
||||
if self.isVisible():
|
||||
self.bt_proceed.setEnabled(bool(self.gem_select_model.values))
|
||||
|
||||
def save(self):
|
||||
enabled_gems = [op.value for op in self.gem_select_model.values]
|
||||
|
||||
for module, man in self.gem_map.items():
|
||||
enabled = module in enabled_gems
|
||||
man.set_enabled(enabled)
|
||||
|
||||
self.config['gems'] = enabled_gems
|
||||
save(self.config)
|
||||
|
||||
self.manager.reset_cache()
|
||||
self.manager.prepare()
|
||||
self.window.verify_warnings()
|
||||
self.window.types_changed = True
|
||||
self.window.begin_refresh_packages()
|
||||
self.close()
|
||||
|
||||
def exit(self):
|
||||
self.close()
|
||||
@@ -2,8 +2,8 @@ import operator
|
||||
from functools import reduce
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QColor, QIcon
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QTableWidget, QTableWidgetItem, QHeaderView
|
||||
from PyQt5.QtGui import QColor, QIcon, QCursor
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QTableWidget, QTableWidgetItem, QHeaderView, QLabel
|
||||
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.abstract.model import PackageHistory
|
||||
@@ -40,16 +40,19 @@ class HistoryDialog(QDialog):
|
||||
current_status = history.pkg_status_idx == row
|
||||
|
||||
for col, key in enumerate(sorted(data.keys())):
|
||||
item = QTableWidgetItem()
|
||||
item = QLabel()
|
||||
item.setProperty('even', row % 2 == 0)
|
||||
item.setText(str(data[key]))
|
||||
|
||||
if current_status:
|
||||
item.setBackground(QColor(ORANGE if row != 0 else GREEN))
|
||||
item.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
item.setProperty('outdated', str(row != 0).lower())
|
||||
|
||||
tip = '{}. {}.'.format(i18n['popup.history.selected.tooltip'], i18n['version.{}'.format('updated'if row == 0 else 'outdated')].capitalize())
|
||||
|
||||
item.setToolTip(tip)
|
||||
|
||||
table_history.setItem(row, col, item)
|
||||
table_history.setCellWidget(row, col, item)
|
||||
|
||||
layout.addWidget(table_history)
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
from PyQt5.QtCore import QSize, Qt
|
||||
from PyQt5.QtGui import QIcon, QCursor
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QGroupBox, \
|
||||
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QToolBar, QScrollArea, QFrame, QWidget
|
||||
QLineEdit, QLabel, QGridLayout, QPushButton, QPlainTextEdit, QScrollArea, QFrame, QWidget, QSizePolicy, \
|
||||
QHBoxLayout
|
||||
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.view.qt.components import new_spacer
|
||||
@@ -13,7 +14,7 @@ IGNORED_ATTRS = {'name', '__app__'}
|
||||
class InfoDialog(QDialog):
|
||||
|
||||
def __init__(self, pkg_info: dict, icon_cache: MemoryCache, i18n: I18n, screen_size: QSize):
|
||||
super(InfoDialog, self).__init__(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
super(InfoDialog, self).__init__()
|
||||
self.setWindowTitle(str(pkg_info['__app__']))
|
||||
self.screen_size = screen_size
|
||||
self.i18n = i18n
|
||||
@@ -24,16 +25,19 @@ class InfoDialog(QDialog):
|
||||
scroll.setFrameShape(QFrame.NoFrame)
|
||||
scroll.setWidgetResizable(True)
|
||||
comps_container = QWidget()
|
||||
comps_container.setObjectName('root_container')
|
||||
comps_container.setLayout(QVBoxLayout())
|
||||
scroll.setWidget(comps_container)
|
||||
|
||||
# shows complete field string
|
||||
self.text_field = QPlainTextEdit()
|
||||
self.text_field.setObjectName('full_field')
|
||||
self.text_field.setReadOnly(True)
|
||||
comps_container.layout().addWidget(self.text_field)
|
||||
self.text_field.hide()
|
||||
|
||||
self.gbox_info = QGroupBox()
|
||||
self.gbox_info.setObjectName('fields')
|
||||
self.gbox_info.setLayout(QGridLayout())
|
||||
|
||||
comps_container.layout().addWidget(self.gbox_info)
|
||||
@@ -64,14 +68,14 @@ class InfoDialog(QDialog):
|
||||
show_val = val
|
||||
|
||||
text = QLineEdit()
|
||||
text.setObjectName('field_value')
|
||||
text.setToolTip(show_val)
|
||||
text.setText(val)
|
||||
text.setCursorPosition(0)
|
||||
text.setStyleSheet("width: 400px")
|
||||
text.setReadOnly(True)
|
||||
|
||||
label = QLabel(i18n.get(i18n_key, i18n.get(attr.lower(), attr)).capitalize())
|
||||
label.setStyleSheet("font-weight: bold")
|
||||
label.setObjectName('field_name')
|
||||
|
||||
self.gbox_info.layout().addWidget(label, idx, 0)
|
||||
self.gbox_info.layout().addWidget(text, idx, 1)
|
||||
@@ -79,21 +83,27 @@ class InfoDialog(QDialog):
|
||||
|
||||
layout.addWidget(scroll)
|
||||
|
||||
lower_bar = QToolBar()
|
||||
bt_back = QPushButton(self.i18n['back'].capitalize())
|
||||
bt_back.setVisible(False)
|
||||
bt_back.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_back.clicked.connect(self.back_to_info)
|
||||
lower_container = QWidget()
|
||||
lower_container.setObjectName('lower_container')
|
||||
lower_container.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
lower_container.setLayout(QHBoxLayout())
|
||||
|
||||
self.ref_bt_back = lower_bar.addWidget(bt_back)
|
||||
lower_bar.addWidget(new_spacer())
|
||||
self.bt_back = QPushButton('< {}'.format(self.i18n['back'].capitalize()))
|
||||
self.bt_back.setObjectName('back')
|
||||
self.bt_back.setVisible(False)
|
||||
self.bt_back.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_back.clicked.connect(self.back_to_info)
|
||||
|
||||
bt_close = QPushButton(self.i18n['close'].capitalize())
|
||||
bt_close.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_close.clicked.connect(self.close)
|
||||
lower_container.layout().addWidget(self.bt_back)
|
||||
lower_container.layout().addWidget(new_spacer())
|
||||
|
||||
lower_bar.addWidget(bt_close)
|
||||
layout.addWidget(lower_bar)
|
||||
self.bt_close = QPushButton(self.i18n['close'].capitalize())
|
||||
self.bt_close.setObjectName('close')
|
||||
self.bt_close.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_close.clicked.connect(self.close)
|
||||
|
||||
lower_container.layout().addWidget(self.bt_close)
|
||||
layout.addWidget(lower_container)
|
||||
self.setMinimumWidth(self.gbox_info.sizeHint().width() * 1.2)
|
||||
self.setMaximumHeight(screen_size.height() * 0.8)
|
||||
self.adjustSize()
|
||||
@@ -102,11 +112,12 @@ class InfoDialog(QDialog):
|
||||
|
||||
def show_full_field():
|
||||
self.gbox_info.hide()
|
||||
self.ref_bt_back.setVisible(True)
|
||||
self.bt_back.setVisible(True)
|
||||
self.text_field.show()
|
||||
self.text_field.setPlainText(val)
|
||||
|
||||
bt_full_field = QPushButton(self.i18n['show'].capitalize())
|
||||
bt_full_field.setObjectName('show')
|
||||
bt_full_field.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_full_field.clicked.connect(show_full_field)
|
||||
self.gbox_info.layout().addWidget(bt_full_field, idx, 2)
|
||||
@@ -115,4 +126,4 @@ class InfoDialog(QDialog):
|
||||
self.text_field.setPlainText("")
|
||||
self.text_field.hide()
|
||||
self.gbox_info.show()
|
||||
self.ref_bt_back.setVisible(False)
|
||||
self.bt_back.setVisible(False)
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import datetime
|
||||
import operator
|
||||
from functools import reduce
|
||||
from typing import Tuple
|
||||
from typing import Tuple, Optional
|
||||
|
||||
from PyQt5.QtCore import QSize, Qt, QThread, pyqtSignal, QCoreApplication
|
||||
from PyQt5.QtGui import QIcon, QCursor
|
||||
from PyQt5.QtGui import QIcon, QCursor, QCloseEvent
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QSizePolicy, QTableWidget, QHeaderView, QPushButton, QToolBar, \
|
||||
QProgressBar, QApplication, QPlainTextEdit, QToolButton, QHBoxLayout
|
||||
|
||||
@@ -12,10 +12,9 @@ from bauh import __app_name__
|
||||
from bauh.api.abstract.context import ApplicationContext
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.handler import TaskManager
|
||||
from bauh.view.qt import root, styles
|
||||
from bauh.view.qt.colors import GREEN
|
||||
from bauh.view.qt.components import new_spacer
|
||||
from bauh.view.qt.components import new_spacer, QCustomToolbar
|
||||
from bauh.view.qt.qt_utils import centralize
|
||||
from bauh.view.qt.root import RootDialog
|
||||
from bauh.view.qt.thread import AnimateProgress
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
@@ -37,7 +36,7 @@ class Prepare(QThread, TaskManager):
|
||||
self.password_response = None
|
||||
self._registered = 0
|
||||
|
||||
def ask_password(self) -> Tuple[str, bool]:
|
||||
def ask_password(self) -> Tuple[bool, Optional[str]]:
|
||||
self.waiting_password = True
|
||||
self.signal_ask_password.emit()
|
||||
|
||||
@@ -46,14 +45,14 @@ class Prepare(QThread, TaskManager):
|
||||
|
||||
return self.password_response
|
||||
|
||||
def set_password_reply(self, password: str, valid: bool):
|
||||
self.password_response = password, valid
|
||||
def set_password_reply(self, valid: bool, password: str):
|
||||
self.password_response = valid, password
|
||||
self.waiting_password = False
|
||||
|
||||
def run(self):
|
||||
root_pwd = None
|
||||
if self.manager.requires_root('prepare', None):
|
||||
root_pwd, ok = self.ask_password()
|
||||
ok, root_pwd = self.ask_password()
|
||||
|
||||
if not ok:
|
||||
QCoreApplication.exit(1)
|
||||
@@ -115,7 +114,7 @@ class EnableSkip(QThread):
|
||||
class PreparePanel(QWidget, TaskManager):
|
||||
|
||||
signal_status = pyqtSignal(int)
|
||||
signal_password_response = pyqtSignal(str, bool)
|
||||
signal_password_response = pyqtSignal(bool, str)
|
||||
|
||||
def __init__(self, context: ApplicationContext, manager: SoftwareManager, screen_size: QSize, i18n: I18n, manage_window: QWidget):
|
||||
super(PreparePanel, self).__init__(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
@@ -157,14 +156,14 @@ class PreparePanel(QWidget, TaskManager):
|
||||
self.label_top = QLabel()
|
||||
self.label_top.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.label_top.setText("{}...".format(self.i18n['prepare_panel.title.start'].capitalize()))
|
||||
self.label_top.setObjectName('prepare_status')
|
||||
self.label_top.setAlignment(Qt.AlignHCenter)
|
||||
self.label_top.setStyleSheet("QLabel { font-size: 14px; font-weight: bold; }")
|
||||
self.layout().addWidget(self.label_top)
|
||||
self.layout().addWidget(QLabel())
|
||||
|
||||
self.table = QTableWidget()
|
||||
self.table.setObjectName('tasks')
|
||||
self.table.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.table.setStyleSheet("QTableWidget { background-color: transparent; }")
|
||||
self.table.setFocusPolicy(Qt.NoFocus)
|
||||
self.table.setShowGrid(False)
|
||||
self.table.verticalHeader().setVisible(False)
|
||||
@@ -172,58 +171,63 @@ class PreparePanel(QWidget, TaskManager):
|
||||
self.table.horizontalHeader().setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
self.table.setColumnCount(4)
|
||||
self.table.setHorizontalHeaderLabels(['' for _ in range(4)])
|
||||
self.table.horizontalScrollBar().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.table.verticalScrollBar().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.layout().addWidget(self.table)
|
||||
|
||||
self.textarea_output = QPlainTextEdit(self)
|
||||
self.textarea_output.resize(self.table.size())
|
||||
self.textarea_output.setStyleSheet("background: black; color: white;")
|
||||
self.layout().addWidget(self.textarea_output)
|
||||
self.textarea_output.setVisible(False)
|
||||
self.textarea_output.setReadOnly(True)
|
||||
self.textarea_output.setMaximumHeight(100)
|
||||
self.textarea_details = QPlainTextEdit(self)
|
||||
self.textarea_details.setObjectName('task_details')
|
||||
self.textarea_details.setProperty('console', 'true')
|
||||
self.textarea_details.resize(self.table.size())
|
||||
self.layout().addWidget(self.textarea_details)
|
||||
self.textarea_details.setVisible(False)
|
||||
self.textarea_details.setReadOnly(True)
|
||||
self.textarea_details.setMaximumHeight(100)
|
||||
self.current_output_task = None
|
||||
|
||||
self.bottom_widget = QWidget()
|
||||
self.bottom_widget.setLayout(QHBoxLayout())
|
||||
self.bottom_widget.layout().addStretch()
|
||||
bt_hide_output = QPushButton(self.i18n['prepare.bt_hide_details'])
|
||||
bt_hide_output.setStyleSheet('QPushButton { text-decoration: underline; border: 0px; background: none } ')
|
||||
bt_hide_output.clicked.connect(self.hide_output)
|
||||
bt_hide_output.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bottom_widget.layout().addWidget(bt_hide_output)
|
||||
|
||||
bt_hide_details = QPushButton(self.i18n['prepare.bt_hide_details'])
|
||||
bt_hide_details.setObjectName('bt_hide_details')
|
||||
bt_hide_details.clicked.connect(self.hide_output)
|
||||
bt_hide_details.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bottom_widget.layout().addWidget(bt_hide_details)
|
||||
self.bottom_widget.layout().addStretch()
|
||||
self.layout().addWidget(self.bottom_widget)
|
||||
self.bottom_widget.setVisible(False)
|
||||
|
||||
self.bt_bar = QToolBar()
|
||||
self.bt_bar = QCustomToolbar()
|
||||
self.bt_close = QPushButton(self.i18n['close'].capitalize())
|
||||
self.bt_close.setObjectName('bt_cancel')
|
||||
self.bt_close.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_close.clicked.connect(self.close)
|
||||
self.bt_close.setVisible(False)
|
||||
self.ref_bt_close = self.bt_bar.addWidget(self.bt_close)
|
||||
self.bt_bar.add_widget(self.bt_close)
|
||||
self.bt_bar.add_widget(new_spacer())
|
||||
|
||||
self.bt_bar.addWidget(new_spacer())
|
||||
self.progress_bar = QProgressBar()
|
||||
self.progress_bar.setStyleSheet(styles.PROGRESS_BAR)
|
||||
self.progress_bar.setObjectName('prepare_progress')
|
||||
self.progress_bar.setMaximumHeight(10 if QApplication.instance().style().objectName().lower() == 'windows' else 4)
|
||||
self.progress_bar.setTextVisible(False)
|
||||
self.progress_bar.setVisible(False)
|
||||
self.progress_bar.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.ref_progress_bar = self.bt_bar.addWidget(self.progress_bar)
|
||||
self.bt_bar.addWidget(new_spacer())
|
||||
self.bt_bar.add_widget(self.progress_bar)
|
||||
self.bt_bar.add_widget(new_spacer())
|
||||
|
||||
self.bt_skip = QPushButton(self.i18n['prepare_panel.bt_skip.label'].capitalize())
|
||||
self.bt_skip.clicked.connect(self.finish)
|
||||
self.bt_skip.setEnabled(False)
|
||||
self.bt_skip.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.bt_bar.addWidget(self.bt_skip)
|
||||
self.bt_bar.add_widget(self.bt_skip)
|
||||
|
||||
self.layout().addWidget(self.bt_bar)
|
||||
|
||||
def hide_output(self):
|
||||
self.current_output_task = None
|
||||
self.textarea_output.setVisible(False)
|
||||
self.textarea_output.clear()
|
||||
self.textarea_details.setVisible(False)
|
||||
self.textarea_details.clear()
|
||||
self.bottom_widget.setVisible(False)
|
||||
self._resize_columns()
|
||||
self.setFocus(Qt.NoFocusReason)
|
||||
@@ -232,8 +236,8 @@ class PreparePanel(QWidget, TaskManager):
|
||||
self.bt_bar.setVisible(True)
|
||||
|
||||
def ask_root_password(self):
|
||||
root_pwd, ok = root.ask_root_password(self.context, self.i18n)
|
||||
self.signal_password_response.emit(root_pwd, ok)
|
||||
valid, root_pwd = RootDialog.ask_password(self.context, self.i18n)
|
||||
self.signal_password_response.emit(valid, root_pwd)
|
||||
|
||||
def _enable_skip_button(self):
|
||||
self.bt_skip.setEnabled(True)
|
||||
@@ -250,7 +254,7 @@ class PreparePanel(QWidget, TaskManager):
|
||||
for i in range(self.table.columnCount()):
|
||||
header_horizontal.setSectionResizeMode(i, QHeaderView.ResizeToContents)
|
||||
|
||||
self.resize(self.get_table_width() * 1.05, self.sizeHint().height())
|
||||
self.resize(int(self.get_table_width() * 1.05), self.sizeHint().height())
|
||||
|
||||
def show(self):
|
||||
super(PreparePanel, self).show()
|
||||
@@ -264,10 +268,10 @@ class PreparePanel(QWidget, TaskManager):
|
||||
|
||||
self.progress_thread.start()
|
||||
|
||||
self.ref_bt_close.setVisible(True)
|
||||
self.ref_progress_bar.setVisible(True)
|
||||
self.bt_close.setVisible(True)
|
||||
self.progress_bar.setVisible(True)
|
||||
|
||||
def closeEvent(self, QCloseEvent):
|
||||
def closeEvent(self, ev: QCloseEvent):
|
||||
if not self.self_close:
|
||||
QCoreApplication.exit()
|
||||
|
||||
@@ -277,14 +281,15 @@ class PreparePanel(QWidget, TaskManager):
|
||||
task_row = self.added_tasks - 1
|
||||
|
||||
icon_widget = QWidget()
|
||||
icon_widget.setProperty('container', 'true')
|
||||
icon_widget.setLayout(QHBoxLayout())
|
||||
icon_widget.layout().setContentsMargins(10, 0, 10, 0)
|
||||
|
||||
bt_icon = QToolButton()
|
||||
bt_icon.setObjectName('bt_task')
|
||||
bt_icon.setCursor(QCursor(Qt.WaitCursor))
|
||||
bt_icon.setEnabled(False)
|
||||
bt_icon.setToolTip(self.i18n['prepare.bt_icon.no_output'])
|
||||
bt_icon.setFixedSize(QSize(24, 24))
|
||||
bt_icon.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
|
||||
if icon_path:
|
||||
bt_icon.setIcon(QIcon(icon_path))
|
||||
@@ -294,11 +299,11 @@ class PreparePanel(QWidget, TaskManager):
|
||||
|
||||
if lines:
|
||||
self.current_output_task = id_
|
||||
self.textarea_output.clear()
|
||||
self.textarea_output.setVisible(True)
|
||||
self.textarea_details.clear()
|
||||
self.textarea_details.setVisible(True)
|
||||
|
||||
for l in lines:
|
||||
self.textarea_output.appendPlainText(l)
|
||||
self.textarea_details.appendPlainText(l)
|
||||
|
||||
self.bottom_widget.setVisible(True)
|
||||
|
||||
@@ -313,22 +318,27 @@ class PreparePanel(QWidget, TaskManager):
|
||||
self.table.setCellWidget(task_row, 0, icon_widget)
|
||||
|
||||
lb_status = QLabel(label)
|
||||
lb_status.setObjectName('task_status')
|
||||
lb_status.setProperty('status', 'running')
|
||||
lb_status.setCursor(Qt.WaitCursor)
|
||||
lb_status.setMinimumWidth(50)
|
||||
lb_status.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
lb_status.setStyleSheet("QLabel { font-weight: bold; }")
|
||||
self.table.setCellWidget(task_row, 1, lb_status)
|
||||
lb_status_col = 1
|
||||
self.table.setCellWidget(task_row, lb_status_col, lb_status)
|
||||
|
||||
lb_progress = QLabel('{0:.2f}'.format(0) + '%')
|
||||
lb_progress.setObjectName('task_progress')
|
||||
lb_progress.setProperty('status', 'running')
|
||||
lb_progress.setCursor(Qt.WaitCursor)
|
||||
lb_progress.setContentsMargins(10, 0, 10, 0)
|
||||
lb_progress.setStyleSheet("QLabel { font-weight: bold; }")
|
||||
lb_progress.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
lb_progress_col = 2
|
||||
|
||||
self.table.setCellWidget(task_row, 2, lb_progress)
|
||||
self.table.setCellWidget(task_row, lb_progress_col, lb_progress)
|
||||
|
||||
lb_sub = QLabel()
|
||||
lb_status.setCursor(Qt.WaitCursor)
|
||||
lb_sub.setObjectName('task_substatus')
|
||||
lb_sub.setCursor(Qt.WaitCursor)
|
||||
lb_sub.setContentsMargins(10, 0, 10, 0)
|
||||
lb_sub.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
lb_sub.setMinimumWidth(50)
|
||||
@@ -336,10 +346,13 @@ class PreparePanel(QWidget, TaskManager):
|
||||
|
||||
self.tasks[id_] = {'bt_icon': bt_icon,
|
||||
'lb_status': lb_status,
|
||||
'lb_status_col': lb_status_col,
|
||||
'lb_prog': lb_progress,
|
||||
'lb_prog_col': lb_progress_col,
|
||||
'progress': 0,
|
||||
'lb_sub': lb_sub,
|
||||
'finished': False}
|
||||
'finished': False,
|
||||
'row': task_row}
|
||||
|
||||
def update_progress(self, task_id: str, progress: float, substatus: str):
|
||||
task = self.tasks[task_id]
|
||||
@@ -369,14 +382,18 @@ class PreparePanel(QWidget, TaskManager):
|
||||
full_output.append(output)
|
||||
|
||||
if self.current_output_task == task_id:
|
||||
self.textarea_output.appendPlainText(output)
|
||||
self.textarea_details.appendPlainText(output)
|
||||
|
||||
def finish_task(self, task_id: str):
|
||||
task = self.tasks[task_id]
|
||||
task['lb_sub'].setText('')
|
||||
|
||||
for key in ('lb_prog', 'lb_status'):
|
||||
task[key].setStyleSheet('QLabel { color: %s; text-decoration: line-through; }' % GREEN)
|
||||
label = task[key]
|
||||
label.setProperty('status', 'done')
|
||||
label.style().unpolish(label)
|
||||
label.style().polish(label)
|
||||
label.update()
|
||||
|
||||
task['finished'] = True
|
||||
self._resize_columns()
|
||||
@@ -389,7 +406,7 @@ class PreparePanel(QWidget, TaskManager):
|
||||
|
||||
def finish(self):
|
||||
if self.isVisible():
|
||||
self.manage_window.begin_refresh_packages()
|
||||
self.manage_window.show()
|
||||
self.manage_window.begin_refresh_packages()
|
||||
self.self_close = True
|
||||
self.close()
|
||||
|
||||
@@ -19,3 +19,11 @@ def load_icon(path: str, width: int, height: int = None) -> QIcon:
|
||||
|
||||
def load_resource_icon(path: str, width: int, height: int = None) -> QIcon:
|
||||
return load_icon(resource.get_path(path), width, height)
|
||||
|
||||
|
||||
def measure_based_on_width(percent: float) -> int:
|
||||
return round(percent * QApplication.primaryScreen().size().width())
|
||||
|
||||
|
||||
def measure_based_on_height(percent: float) -> int:
|
||||
return round(percent * QApplication.primaryScreen().size().height())
|
||||
|
||||
@@ -1,100 +1,164 @@
|
||||
import os
|
||||
from typing import Tuple
|
||||
import traceback
|
||||
from typing import Tuple, Optional
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QCursor, QIcon
|
||||
from PyQt5.QtWidgets import QInputDialog, QLineEdit, QDialogButtonBox, QApplication
|
||||
from PyQt5.QtCore import Qt, QThread, pyqtSignal
|
||||
from PyQt5.QtGui import QCursor
|
||||
from PyQt5.QtWidgets import QLineEdit, QApplication, QDialog, QPushButton, QVBoxLayout, \
|
||||
QSizePolicy, QToolBar, QLabel
|
||||
|
||||
from bauh.api.abstract.context import ApplicationContext
|
||||
from bauh.api.abstract.view import MessageType
|
||||
from bauh.commons.system import new_subprocess
|
||||
from bauh.view.core.config import read_config
|
||||
from bauh.view.qt import css
|
||||
from bauh.view.qt.components import QtComponentsManager
|
||||
from bauh.view.qt.dialog import show_message
|
||||
from bauh.view.qt.components import QtComponentsManager, new_spacer
|
||||
from bauh.view.util import util
|
||||
from bauh.view.util.translation import I18n
|
||||
|
||||
ACTION_ASK_ROOT = 99
|
||||
|
||||
|
||||
class ValidatePassword(QThread):
|
||||
|
||||
signal_valid = pyqtSignal(bool)
|
||||
|
||||
def __init__(self, password: Optional[str] = None):
|
||||
super(ValidatePassword, self).__init__()
|
||||
self.password = password
|
||||
|
||||
def run(self):
|
||||
if self.password is not None:
|
||||
try:
|
||||
valid = validate_password(self.password)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
valid = False
|
||||
|
||||
self.signal_valid.emit(valid)
|
||||
|
||||
|
||||
class RootDialog(QDialog):
|
||||
|
||||
def __init__(self, i18n: I18n, max_tries: int = 3):
|
||||
super(RootDialog, self).__init__(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
self.i18n = i18n
|
||||
self.max_tries = max_tries
|
||||
self.tries = 0
|
||||
self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Preferred)
|
||||
self.setWindowIcon(util.get_default_icon()[1])
|
||||
self.setWindowTitle(i18n['popup.root.title'])
|
||||
self.setLayout(QVBoxLayout())
|
||||
self.setMinimumWidth(300)
|
||||
|
||||
self.label_msg = QLabel(i18n['popup.root.msg'])
|
||||
self.label_msg.setObjectName('message')
|
||||
self.layout().addWidget(self.label_msg)
|
||||
|
||||
self.input_password = QLineEdit()
|
||||
self.input_password.setObjectName('password')
|
||||
self.layout().addWidget(self.input_password)
|
||||
|
||||
self.label_error = QLabel()
|
||||
self.label_error.setProperty('error', 'true')
|
||||
self.layout().addWidget(self.label_error)
|
||||
self.label_error.hide()
|
||||
|
||||
self.lower_bar = QToolBar()
|
||||
self.layout().addWidget(self.lower_bar)
|
||||
|
||||
self.lower_bar.addWidget(new_spacer())
|
||||
self.bt_ok = QPushButton(i18n['popup.root.continue'])
|
||||
self.bt_ok.setDefault(True)
|
||||
self.bt_ok.setAutoDefault(True)
|
||||
self.bt_ok.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_ok.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
self.bt_ok.setObjectName('ok')
|
||||
self.bt_ok.clicked.connect(self._validate_password)
|
||||
self.lower_bar.addWidget(self.bt_ok)
|
||||
|
||||
self.bt_cancel = QPushButton()
|
||||
self.bt_cancel.setText(i18n['popup.button.cancel'])
|
||||
|
||||
self.bt_cancel.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_cancel.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
|
||||
self.bt_cancel.setObjectName('bt_cancel')
|
||||
self.bt_cancel.clicked.connect(self.close)
|
||||
self.lower_bar.addWidget(self.bt_cancel)
|
||||
self.lower_bar.addWidget(new_spacer())
|
||||
|
||||
self.valid = False
|
||||
self.password = None
|
||||
self.validate_password = ValidatePassword()
|
||||
self.validate_password.signal_valid.connect(self._handle_password_validated)
|
||||
|
||||
def _validate_password(self):
|
||||
password = self.input_password.text().strip()
|
||||
|
||||
if password:
|
||||
self.password = password
|
||||
self.tries += 1
|
||||
self.bt_ok.setEnabled(False)
|
||||
self.bt_cancel.setEnabled(False)
|
||||
self.input_password.setEnabled(False)
|
||||
self.label_error.setText('')
|
||||
|
||||
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
|
||||
self.validate_password.password = password
|
||||
self.validate_password.start()
|
||||
|
||||
def _handle_password_validated(self, valid: bool):
|
||||
self.valid = valid
|
||||
|
||||
QApplication.restoreOverrideCursor()
|
||||
tries_ended = self.tries == self.max_tries
|
||||
|
||||
if not self.valid:
|
||||
self.label_error.show()
|
||||
self.bt_cancel.setEnabled(True)
|
||||
|
||||
if tries_ended:
|
||||
self.bt_cancel.setText(self.i18n['close'].capitalize())
|
||||
self.label_error.setText(self.i18n['popup.root.bad_password.last_try'])
|
||||
self.bt_cancel.setFocus()
|
||||
else:
|
||||
self.label_error.setText(self.i18n['popup.root.bad_password.body'])
|
||||
self.bt_ok.setEnabled(True)
|
||||
self.input_password.setEnabled(True)
|
||||
self.input_password.setFocus()
|
||||
else:
|
||||
self.close()
|
||||
|
||||
@staticmethod
|
||||
def ask_password(context: ApplicationContext, i18n: I18n, app_config: Optional[dict] = None,
|
||||
comp_manager: Optional[QtComponentsManager] = None, tries: int = 3) -> Tuple[bool, Optional[str]]:
|
||||
|
||||
current_config = read_config() if not app_config else app_config
|
||||
|
||||
store_password = bool(current_config['store_root_password'])
|
||||
|
||||
if store_password and context.root_password and validate_password(context.root_password):
|
||||
return True, context.root_password
|
||||
|
||||
if comp_manager:
|
||||
comp_manager.save_states(state_id=ACTION_ASK_ROOT, only_visible=True)
|
||||
comp_manager.disable_visible()
|
||||
|
||||
diag = RootDialog(i18n=i18n, max_tries=tries)
|
||||
diag.exec()
|
||||
password = diag.password
|
||||
|
||||
if comp_manager:
|
||||
comp_manager.restore_state(ACTION_ASK_ROOT)
|
||||
|
||||
if password is not None and store_password:
|
||||
context.root_password = password
|
||||
|
||||
return (True, password) if diag.valid else (False, None)
|
||||
|
||||
|
||||
def is_root():
|
||||
return os.getuid() == 0
|
||||
|
||||
|
||||
def ask_root_password(context: ApplicationContext, i18n: I18n,
|
||||
app_config: dict = None,
|
||||
comp_manager: QtComponentsManager = None) -> Tuple[str, bool]:
|
||||
|
||||
cur_config = read_config() if not app_config else app_config
|
||||
store_password = bool(cur_config['store_root_password'])
|
||||
|
||||
if store_password and context.root_password and validate_password(context.root_password):
|
||||
return context.root_password, True
|
||||
|
||||
diag = QInputDialog(flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
diag.setStyleSheet("""QLineEdit { border-radius: 5px; font-size: 16px; border: 1px solid lightblue }""")
|
||||
diag.setInputMode(QInputDialog.TextInput)
|
||||
diag.setTextEchoMode(QLineEdit.Password)
|
||||
diag.setWindowIcon(util.get_default_icon()[1])
|
||||
diag.setWindowTitle(i18n['popup.root.title'])
|
||||
diag.setLabelText('')
|
||||
diag.setOkButtonText(i18n['popup.root.continue'].capitalize())
|
||||
diag.setCancelButtonText(i18n['popup.button.cancel'].capitalize())
|
||||
|
||||
bt_box = [c for c in diag.children() if isinstance(c, QDialogButtonBox)][0]
|
||||
|
||||
for bt in bt_box.buttons():
|
||||
if bt_box.buttonRole(bt) == QDialogButtonBox.AcceptRole:
|
||||
bt.setStyleSheet(css.OK_BUTTON)
|
||||
|
||||
bt.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt.setIcon(QIcon())
|
||||
|
||||
diag.resize(400, 200)
|
||||
|
||||
if comp_manager:
|
||||
comp_manager.save_states(state_id=ACTION_ASK_ROOT, only_visible=True)
|
||||
comp_manager.disable_visible()
|
||||
|
||||
for attempt in range(3):
|
||||
|
||||
ok = diag.exec_()
|
||||
|
||||
if ok:
|
||||
QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
|
||||
valid = validate_password(diag.textValue())
|
||||
QApplication.restoreOverrideCursor()
|
||||
|
||||
if not valid:
|
||||
body = i18n['popup.root.bad_password.body']
|
||||
|
||||
if attempt == 2:
|
||||
body += '. ' + i18n['popup.root.bad_password.last_try']
|
||||
|
||||
show_message(title=i18n['popup.root.bad_password.title'],
|
||||
body=body,
|
||||
type_=MessageType.ERROR)
|
||||
ok = False
|
||||
diag.setTextValue('')
|
||||
|
||||
if ok:
|
||||
if store_password:
|
||||
context.root_password = diag.textValue()
|
||||
|
||||
if comp_manager:
|
||||
comp_manager.restore_state(ACTION_ASK_ROOT)
|
||||
|
||||
return diag.textValue(), ok
|
||||
else:
|
||||
break
|
||||
|
||||
if comp_manager:
|
||||
comp_manager.restore_state(ACTION_ASK_ROOT)
|
||||
|
||||
return '', False
|
||||
|
||||
|
||||
def validate_password(password: str) -> bool:
|
||||
clean = new_subprocess(['sudo', '-k']).stdout
|
||||
echo = new_subprocess(['echo', password], stdin=clean).stdout
|
||||
|
||||
@@ -4,11 +4,12 @@ from typing import List
|
||||
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5.QtGui import QIcon, QPixmap, QCursor
|
||||
from PyQt5.QtWidgets import QDialog, QLabel, QPushButton, QToolBar, QVBoxLayout, QProgressBar, QApplication
|
||||
from PyQt5.QtWidgets import QDialog, QLabel, QPushButton, QVBoxLayout, QProgressBar, QApplication, QWidget, \
|
||||
QSizePolicy, QHBoxLayout
|
||||
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
from bauh.api.http import HttpClient
|
||||
from bauh.view.qt import qt_utils, styles
|
||||
from bauh.view.qt import qt_utils
|
||||
from bauh.view.qt.components import new_spacer
|
||||
from bauh.view.qt.thread import AnimateProgress
|
||||
from bauh.view.qt.view_model import PackageView
|
||||
@@ -17,9 +18,6 @@ from bauh.view.util.translation import I18n
|
||||
|
||||
class ScreenshotsDialog(QDialog):
|
||||
|
||||
MAX_HEIGHT = 600
|
||||
MAX_WIDTH = 800
|
||||
|
||||
def __init__(self, pkg: PackageView, http_client: HttpClient, icon_cache: MemoryCache, i18n: I18n, screenshots: List[QPixmap], logger: logging.Logger):
|
||||
super(ScreenshotsDialog, self).__init__()
|
||||
self.setWindowTitle(str(pkg))
|
||||
@@ -27,12 +25,11 @@ class ScreenshotsDialog(QDialog):
|
||||
self.logger = logger
|
||||
self.loaded_imgs = []
|
||||
self.download_threads = []
|
||||
self.resize(1280, 720)
|
||||
self.i18n = i18n
|
||||
self.http_client = http_client
|
||||
self.progress_bar = QProgressBar()
|
||||
self.progress_bar.setObjectName('progress_screenshots')
|
||||
self.progress_bar.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.progress_bar.setStyleSheet(styles.PROGRESS_BAR)
|
||||
self.progress_bar.setMaximumHeight(10 if QApplication.instance().style().objectName().lower() == 'windows' else 6)
|
||||
self.progress_bar.setTextVisible(False)
|
||||
self.thread_progress = AnimateProgress()
|
||||
@@ -50,39 +47,48 @@ class ScreenshotsDialog(QDialog):
|
||||
self.setWindowIcon(QIcon(pkg.model.get_type_icon_path()))
|
||||
self.setLayout(QVBoxLayout())
|
||||
|
||||
self.layout().addWidget(new_spacer())
|
||||
self.img = QLabel()
|
||||
self.img.setObjectName('image')
|
||||
self.layout().addWidget(self.img)
|
||||
self.layout().addWidget(new_spacer())
|
||||
|
||||
self.bottom_bar = QToolBar()
|
||||
self.container_buttons = QWidget()
|
||||
self.container_buttons.setObjectName('buttons_container')
|
||||
self.container_buttons.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
self.container_buttons.setContentsMargins(0, 0, 0, 0)
|
||||
self.container_buttons.setLayout(QHBoxLayout())
|
||||
|
||||
self.bt_back = QPushButton(' < ' + self.i18n['screenshots.bt_back.label'].capitalize())
|
||||
self.bt_back.setObjectName('back')
|
||||
self.bt_back.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_back.clicked.connect(self.back)
|
||||
self.ref_bt_back = self.bottom_bar.addWidget(self.bt_back)
|
||||
self.bottom_bar.addWidget(new_spacer(50))
|
||||
self.container_buttons.layout().addWidget(self.bt_back)
|
||||
self.container_buttons.layout().addWidget(new_spacer())
|
||||
|
||||
self.img_label = QLabel()
|
||||
self.img_label.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.img_label.setStyleSheet('QLabel { font-weight: bold; text-align: center }')
|
||||
self.ref_img_label = self.bottom_bar.addWidget(self.img_label)
|
||||
self.ref_img_label.setVisible(False)
|
||||
self.ref_progress_bar = self.bottom_bar.addWidget(self.progress_bar)
|
||||
self.bottom_bar.addWidget(new_spacer(50))
|
||||
self.container_buttons.layout().addWidget(self.progress_bar)
|
||||
self.container_buttons.layout().addWidget(new_spacer())
|
||||
|
||||
self.bt_next = QPushButton(self.i18n['screenshots.bt_next.label'].capitalize() + ' > ')
|
||||
self.bt_next.setObjectName('next')
|
||||
self.bt_next.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_next.clicked.connect(self.next)
|
||||
self.ref_bt_next = self.bottom_bar.addWidget(self.bt_next)
|
||||
self.container_buttons.layout().addWidget(self.bt_next)
|
||||
|
||||
self.layout().addWidget(self.bottom_bar)
|
||||
self.layout().addWidget(self.container_buttons)
|
||||
|
||||
self.img_idx = 0
|
||||
screen_size = QApplication.primaryScreen().size()
|
||||
self.max_img_width = int(screen_size.width() * 0.585651537)
|
||||
self.max_img_height = int(screen_size.height() * 0.78125)
|
||||
|
||||
for idx, s in enumerate(self.screenshots):
|
||||
t = Thread(target=self._download_img, args=(idx, s), daemon=True)
|
||||
t.start()
|
||||
|
||||
self.resize(self.max_img_width, self.max_img_height)
|
||||
self._load_img()
|
||||
qt_utils.centralize(self)
|
||||
|
||||
def _update_progress(self, val: int):
|
||||
self.progress_bar.setValue(val)
|
||||
@@ -92,32 +98,28 @@ class ScreenshotsDialog(QDialog):
|
||||
img = self.loaded_imgs[self.img_idx]
|
||||
|
||||
if isinstance(img, QPixmap):
|
||||
self.img_label.setText('')
|
||||
self.img.setText('')
|
||||
self.img.setPixmap(img)
|
||||
else:
|
||||
self.img_label.setText(img)
|
||||
self.img.setText(img)
|
||||
self.img.setPixmap(QPixmap())
|
||||
|
||||
self.img.unsetCursor()
|
||||
self.thread_progress.stop = True
|
||||
self.ref_progress_bar.setVisible(False)
|
||||
self.ref_img_label.setVisible(True)
|
||||
self.progress_bar.setVisible(False)
|
||||
else:
|
||||
self.img.setPixmap(QPixmap())
|
||||
self.img.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.ref_img_label.setVisible(False)
|
||||
self.ref_progress_bar.setVisible(True)
|
||||
self.img.setText('{}...'.format(self.i18n['screenshots.image.loading']))
|
||||
self.progress_bar.setVisible(True)
|
||||
self.thread_progress.start()
|
||||
|
||||
if len(self.screenshots) == 1:
|
||||
self.ref_bt_back.setVisible(False)
|
||||
self.ref_bt_next.setVisible(False)
|
||||
self.bt_back.setVisible(False)
|
||||
self.bt_next.setVisible(False)
|
||||
else:
|
||||
self.ref_bt_back.setEnabled(self.img_idx != 0)
|
||||
self.ref_bt_next.setEnabled(self.img_idx != len(self.screenshots) - 1)
|
||||
|
||||
self.adjustSize()
|
||||
qt_utils.centralize(self)
|
||||
self.bt_back.setEnabled(self.img_idx != 0)
|
||||
self.bt_next.setEnabled(self.img_idx != len(self.screenshots) - 1)
|
||||
|
||||
def _download_img(self, idx: int, url: str):
|
||||
self.logger.info('Downloading image [{}] from {}'.format(idx, url))
|
||||
@@ -133,8 +135,8 @@ class ScreenshotsDialog(QDialog):
|
||||
pixmap = QPixmap()
|
||||
pixmap.loadFromData(res.content)
|
||||
|
||||
if pixmap.size().height() > self.MAX_HEIGHT or pixmap.size().width() > self.MAX_WIDTH:
|
||||
pixmap = pixmap.scaled(self.MAX_WIDTH, self.MAX_HEIGHT, Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
||||
if pixmap.size().height() > self.max_img_height or pixmap.size().width() > self.max_img_width:
|
||||
pixmap = pixmap.scaled(self.max_img_width, self.max_img_height, Qt.KeepAspectRatio, Qt.SmoothTransformation)
|
||||
|
||||
self.loaded_imgs.append(pixmap)
|
||||
|
||||
|
||||
@@ -1,16 +1,18 @@
|
||||
import gc
|
||||
from io import StringIO
|
||||
from typing import Optional
|
||||
|
||||
from PyQt5.QtCore import QSize, Qt, QCoreApplication
|
||||
from PyQt5.QtGui import QCursor
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QToolBar, QSizePolicy, QPushButton
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QSizePolicy, QPushButton, QHBoxLayout
|
||||
|
||||
from bauh import __app_name__
|
||||
from bauh.api.abstract.controller import SoftwareManager
|
||||
from bauh.api.abstract.view import MessageType
|
||||
from bauh.view.core.controller import GenericSoftwareManager
|
||||
from bauh.view.qt import dialog, css
|
||||
from bauh.view.qt import dialog
|
||||
from bauh.view.qt.components import to_widget, new_spacer
|
||||
from bauh.view.qt.dialog import ConfirmationDialog
|
||||
from bauh.view.qt.qt_utils import centralize
|
||||
from bauh.view.util import util
|
||||
from bauh.view.util.translation import I18n
|
||||
@@ -18,7 +20,7 @@ from bauh.view.util.translation import I18n
|
||||
|
||||
class SettingsWindow(QWidget):
|
||||
|
||||
def __init__(self, manager: SoftwareManager, i18n: I18n, screen_size: QSize, window: QWidget, parent: QWidget = None):
|
||||
def __init__(self, manager: SoftwareManager, i18n: I18n, screen_size: QSize, window: QWidget, parent: Optional[QWidget] = None):
|
||||
super(SettingsWindow, self).__init__(parent=parent, flags=Qt.CustomizeWindowHint | Qt.WindowTitleHint)
|
||||
self.setWindowTitle('{} ({})'.format(i18n['settings'].capitalize(), __app_name__))
|
||||
self.setLayout(QVBoxLayout())
|
||||
@@ -30,28 +32,34 @@ class SettingsWindow(QWidget):
|
||||
self.settings_model = self.manager.get_settings(screen_size.width(), screen_size.height())
|
||||
|
||||
tab_group = to_widget(self.settings_model, i18n)
|
||||
tab_group.setMinimumWidth(int(screen_size.width() / 3))
|
||||
tab_group.setObjectName('settings')
|
||||
self.layout().addWidget(tab_group)
|
||||
|
||||
action_bar = QToolBar()
|
||||
action_bar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
lower_container = QWidget()
|
||||
lower_container.setObjectName('lower_container')
|
||||
lower_container.setProperty('container', 'true')
|
||||
lower_container.setLayout(QHBoxLayout())
|
||||
lower_container.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
|
||||
bt_close = QPushButton()
|
||||
bt_close.setObjectName('cancel')
|
||||
bt_close.setAutoDefault(True)
|
||||
bt_close.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_close.setText(self.i18n['close'].capitalize())
|
||||
bt_close.clicked.connect(lambda: self.close())
|
||||
action_bar.addWidget(bt_close)
|
||||
lower_container.layout().addWidget(bt_close)
|
||||
|
||||
action_bar.addWidget(new_spacer())
|
||||
lower_container.layout().addWidget(new_spacer())
|
||||
|
||||
bt_change = QPushButton()
|
||||
bt_change.setAutoDefault(True)
|
||||
bt_change.setObjectName('ok')
|
||||
bt_change.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_change.setStyleSheet(css.OK_BUTTON)
|
||||
bt_change.setText(self.i18n['change'].capitalize())
|
||||
bt_change.clicked.connect(self._save_settings)
|
||||
action_bar.addWidget(bt_change)
|
||||
lower_container.layout().addWidget(bt_change)
|
||||
|
||||
self.layout().addWidget(action_bar)
|
||||
self.layout().addWidget(lower_container)
|
||||
|
||||
def show(self):
|
||||
super(SettingsWindow, self).show()
|
||||
@@ -83,10 +91,10 @@ class SettingsWindow(QWidget):
|
||||
body=self.i18n['settings.changed.success.warning'],
|
||||
type_=MessageType.INFO)
|
||||
QCoreApplication.exit()
|
||||
elif dialog.ask_confirmation(title=self.i18n['warning'].capitalize(),
|
||||
body="<p>{}</p><p>{}</p>".format(self.i18n['settings.changed.success.warning'],
|
||||
self.i18n['settings.changed.success.reboot']),
|
||||
i18n=self.i18n):
|
||||
elif ConfirmationDialog(title=self.i18n['warning'].capitalize(),
|
||||
body="<p>{}</p><p>{}</p>".format(self.i18n['settings.changed.success.warning'],
|
||||
self.i18n['settings.changed.success.reboot']),
|
||||
i18n=self.i18n).ask():
|
||||
self.close()
|
||||
util.restart_app()
|
||||
else:
|
||||
@@ -109,4 +117,4 @@ class SettingsWindow(QWidget):
|
||||
msg.write('<p style="font-weight: bold">* ' + w + '</p><br/>')
|
||||
|
||||
msg.seek(0)
|
||||
dialog.show_message(title="Warning", body=msg.read(), type_=MessageType.WARNING)
|
||||
dialog.show_message(title=self.i18n['warning'].capitalize(), body=msg.read(), type_=MessageType.WARNING)
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
from bauh.view.qt.colors import GREEN
|
||||
|
||||
PROGRESS_BAR = """QProgressBar::chunk { background-color: %s; }""" % GREEN
|
||||
@@ -5,11 +5,12 @@ import traceback
|
||||
from datetime import datetime, timedelta
|
||||
from io import StringIO
|
||||
from pathlib import Path
|
||||
from typing import List, Type, Set, Tuple
|
||||
from typing import List, Type, Set, Tuple, Optional
|
||||
|
||||
import requests
|
||||
from PyQt5.QtCore import QThread, pyqtSignal
|
||||
from PyQt5.QtGui import QIcon
|
||||
from PyQt5.QtWidgets import QWidget
|
||||
|
||||
from bauh import LOGS_PATH
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
@@ -22,7 +23,7 @@ from bauh.api.exception import NoInternetException
|
||||
from bauh.commons import user
|
||||
from bauh.commons.html import bold
|
||||
from bauh.commons.system import get_human_size_str, ProcessHandler, SimpleProcess
|
||||
from bauh.view.core import timeshift
|
||||
from bauh.view.core import timeshift, config
|
||||
from bauh.view.core.config import read_config
|
||||
from bauh.view.qt import commons
|
||||
from bauh.view.qt.view_model import PackageView, PackageViewStatus
|
||||
@@ -43,7 +44,7 @@ class AsyncAction(QThread, ProcessWatcher):
|
||||
signal_root_password = pyqtSignal()
|
||||
signal_progress_control = pyqtSignal(bool)
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, root_password: Optional[Tuple[bool, str]] = None):
|
||||
super(AsyncAction, self).__init__()
|
||||
self.wait_confirmation = False
|
||||
self.confirmation_res = None
|
||||
@@ -62,7 +63,7 @@ class AsyncAction(QThread, ProcessWatcher):
|
||||
self.wait_user()
|
||||
return self.confirmation_res
|
||||
|
||||
def request_root_password(self) -> Tuple[str, bool]:
|
||||
def request_root_password(self) -> Tuple[bool, Optional[str]]:
|
||||
self.wait_confirmation = True
|
||||
self.signal_root_password.emit()
|
||||
self.wait_user()
|
||||
@@ -74,8 +75,8 @@ class AsyncAction(QThread, ProcessWatcher):
|
||||
self.confirmation_res = res
|
||||
self.wait_confirmation = False
|
||||
|
||||
def set_root_password(self, password: str, valid: bool):
|
||||
self.root_password = (password, valid)
|
||||
def set_root_password(self, valid: bool, password: str):
|
||||
self.root_password = (valid, password)
|
||||
self.wait_confirmation = False
|
||||
|
||||
def wait_user(self):
|
||||
@@ -286,9 +287,9 @@ class UpgradeSelected(AsyncAction):
|
||||
|
||||
return FormComponent(label=lb, components=comps), (required_size, extra_size)
|
||||
|
||||
def _request_password(self) -> Tuple[bool, str]:
|
||||
def _request_password(self) -> Tuple[bool, Optional[str]]:
|
||||
if not user.is_root():
|
||||
pwd, success = self.request_root_password()
|
||||
success, pwd = self.request_root_password()
|
||||
|
||||
if not success:
|
||||
return False, None
|
||||
@@ -1006,3 +1007,20 @@ class IgnorePackageUpdates(AsyncAction):
|
||||
|
||||
finally:
|
||||
self.pkg = None
|
||||
|
||||
|
||||
class SaveTheme(QThread):
|
||||
|
||||
def __init__(self, theme_key: Optional[str], parent: Optional[QWidget] = None):
|
||||
super(SaveTheme, self).__init__(parent=parent)
|
||||
self.theme_key = theme_key
|
||||
|
||||
def run(self):
|
||||
if self.theme_key:
|
||||
core_config = read_config()
|
||||
core_config['ui']['theme'] = self.theme_key
|
||||
|
||||
try:
|
||||
config.save(core_config)
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
import logging
|
||||
import logging
|
||||
import operator
|
||||
import time
|
||||
import traceback
|
||||
from pathlib import Path
|
||||
from typing import List, Type, Set, Tuple
|
||||
from typing import List, Type, Set, Tuple, Optional
|
||||
|
||||
from PyQt5.QtCore import QEvent, Qt, QSize, pyqtSignal
|
||||
from PyQt5.QtCore import QEvent, Qt, pyqtSignal
|
||||
from PyQt5.QtGui import QIcon, QWindowStateChangeEvent, QCursor
|
||||
from PyQt5.QtWidgets import QWidget, QVBoxLayout, QCheckBox, QHeaderView, QToolBar, \
|
||||
QLabel, QPlainTextEdit, QLineEdit, QProgressBar, QPushButton, QComboBox, QApplication, QListView, QSizePolicy, \
|
||||
QMenu, QAction
|
||||
QLabel, QPlainTextEdit, QProgressBar, QPushButton, QComboBox, QApplication, QListView, QSizePolicy, \
|
||||
QMenu, QHBoxLayout
|
||||
|
||||
from bauh import LOGS_PATH
|
||||
from bauh.api.abstract.cache import MemoryCache
|
||||
@@ -21,16 +20,20 @@ from bauh.api.abstract.view import MessageType
|
||||
from bauh.api.http import HttpClient
|
||||
from bauh.commons import user
|
||||
from bauh.commons.html import bold
|
||||
from bauh.context import set_theme
|
||||
from bauh.stylesheet import read_all_themes_metadata, ThemeMetadata
|
||||
from bauh.view.core.config import read_config
|
||||
from bauh.view.core.tray_client import notify_tray
|
||||
from bauh.view.qt import dialog, commons, qt_utils, root, styles
|
||||
from bauh.view.qt import dialog, commons, qt_utils
|
||||
from bauh.view.qt.about import AboutDialog
|
||||
from bauh.view.qt.apps_table import AppsTable, UpdateToggleButton
|
||||
from bauh.view.qt.colors import GREEN
|
||||
from bauh.view.qt.components import new_spacer, InputFilter, IconButton, QtComponentsManager
|
||||
from bauh.view.qt.confirmation import ConfirmationDialog
|
||||
from bauh.view.qt.apps_table import PackagesTable, UpgradeToggleButton
|
||||
from bauh.view.qt.commons import sum_updates_displayed
|
||||
from bauh.view.qt.components import new_spacer, IconButton, QtComponentsManager, to_widget, QSearchBar, \
|
||||
QCustomMenuAction
|
||||
from bauh.view.qt.dialog import ConfirmationDialog
|
||||
from bauh.view.qt.history import HistoryDialog
|
||||
from bauh.view.qt.info import InfoDialog
|
||||
from bauh.view.qt.root import ask_root_password
|
||||
from bauh.view.qt.root import RootDialog
|
||||
from bauh.view.qt.screenshots import ScreenshotsDialog
|
||||
from bauh.view.qt.settings import SettingsWindow
|
||||
from bauh.view.qt.thread import UpgradeSelected, RefreshApps, UninstallPackage, DowngradePackage, ShowPackageInfo, \
|
||||
@@ -38,7 +41,7 @@ from bauh.view.qt.thread import UpgradeSelected, RefreshApps, UninstallPackage,
|
||||
ListWarnings, \
|
||||
AsyncAction, LaunchPackage, ApplyFilters, CustomSoftwareAction, ShowScreenshots, CustomAction, \
|
||||
NotifyInstalledLoaded, \
|
||||
IgnorePackageUpdates
|
||||
IgnorePackageUpdates, SaveTheme
|
||||
from bauh.view.qt.view_model import PackageView, PackageViewStatus
|
||||
from bauh.view.util import util, resource
|
||||
from bauh.view.util.translation import I18n
|
||||
@@ -46,19 +49,6 @@ from bauh.view.util.translation import I18n
|
||||
DARK_ORANGE = '#FF4500'
|
||||
|
||||
|
||||
def toolbar_button_style(bg: str = None, color: str = None):
|
||||
style = 'QPushButton { font-weight: 500;'
|
||||
|
||||
if bg:
|
||||
style += 'background: {};'.format(bg)
|
||||
|
||||
if color:
|
||||
style += 'color: {};'.format(color)
|
||||
|
||||
style += ' }'
|
||||
return style
|
||||
|
||||
|
||||
# action ids
|
||||
ACTION_APPLY_FILTERS = 1
|
||||
ACTION_SEARCH = 2
|
||||
@@ -84,10 +74,11 @@ CHECK_APPS = 7
|
||||
COMBO_TYPES = 8
|
||||
COMBO_CATEGORIES = 9
|
||||
INP_NAME = 10
|
||||
CHECK_CONSOLE = 11
|
||||
CHECK_DETAILS = 11
|
||||
BT_SETTINGS = 12
|
||||
BT_CUSTOM_ACTIONS = 13
|
||||
BT_ABOUT = 14
|
||||
BT_THEMES = 15
|
||||
|
||||
# component groups ids
|
||||
GROUP_FILTERS = 1
|
||||
@@ -99,13 +90,14 @@ GROUP_LOWER_BTS = 5
|
||||
|
||||
class ManageWindow(QWidget):
|
||||
signal_user_res = pyqtSignal(bool)
|
||||
signal_root_password = pyqtSignal(str, bool)
|
||||
signal_root_password = pyqtSignal(bool, str)
|
||||
signal_table_update = pyqtSignal()
|
||||
signal_stop_notifying = pyqtSignal()
|
||||
|
||||
def __init__(self, i18n: I18n, icon_cache: MemoryCache, manager: SoftwareManager, screen_size, config: dict,
|
||||
context: ApplicationContext, http_client: HttpClient, logger: logging.Logger, icon: QIcon):
|
||||
super(ManageWindow, self).__init__()
|
||||
self.setObjectName('manage_window')
|
||||
self.comp_manager = QtComponentsManager()
|
||||
self.i18n = i18n
|
||||
self.logger = logger
|
||||
@@ -127,95 +119,56 @@ class ManageWindow(QWidget):
|
||||
self.layout = QVBoxLayout()
|
||||
self.setLayout(self.layout)
|
||||
|
||||
self.toolbar_top = QToolBar()
|
||||
self.toolbar_top.addWidget(new_spacer())
|
||||
self.toolbar_status = QToolBar()
|
||||
self.toolbar_status.setObjectName('toolbar_status')
|
||||
self.toolbar_status.addWidget(new_spacer())
|
||||
|
||||
self.label_status = QLabel()
|
||||
self.label_status.setObjectName('label_status')
|
||||
self.label_status.setText('')
|
||||
self.label_status.setStyleSheet("font-weight: bold")
|
||||
self.toolbar_top.addWidget(self.label_status)
|
||||
self.toolbar_status.addWidget(self.label_status)
|
||||
|
||||
self.search_bar = QToolBar()
|
||||
self.search_bar.setStyleSheet("spacing: 0px;")
|
||||
self.search_bar.setContentsMargins(0, 0, 0, 0)
|
||||
self.search_bar = QSearchBar(search_callback=self.search)
|
||||
self.search_bar.set_placeholder(i18n['window_manage.search_bar.placeholder'] + "...")
|
||||
self.search_bar.set_tooltip(i18n['window_manage.search_bar.tooltip'])
|
||||
self.search_bar.set_button_tooltip(i18n['window_manage.search_bar.button_tooltip'])
|
||||
self.comp_manager.register_component(SEARCH_BAR, self.search_bar, self.toolbar_status.addWidget(self.search_bar))
|
||||
|
||||
self.inp_search = QLineEdit()
|
||||
self.inp_search.setFrame(False)
|
||||
self.inp_search.setPlaceholderText(self.i18n['window_manage.input_search.placeholder'] + "...")
|
||||
self.inp_search.setToolTip(self.i18n['window_manage.input_search.tooltip'])
|
||||
self.inp_search.setStyleSheet("""QLineEdit {
|
||||
color: grey;
|
||||
spacing: 0;
|
||||
height: 30px;
|
||||
font-size: 12px;
|
||||
width: 300px;
|
||||
border-bottom: 1px solid lightgrey;
|
||||
border-top: 1px solid lightgrey;
|
||||
}
|
||||
""")
|
||||
self.inp_search.returnPressed.connect(self.search)
|
||||
search_background_color = self.inp_search.palette().color(self.inp_search.backgroundRole()).name()
|
||||
self.toolbar_status.addWidget(new_spacer())
|
||||
self.layout.addWidget(self.toolbar_status)
|
||||
|
||||
label_pre_search = QLabel()
|
||||
label_pre_search.setStyleSheet("""
|
||||
border-top-left-radius: 5px;
|
||||
border-bottom-left-radius: 5px;
|
||||
border-left: 1px solid lightgrey;
|
||||
border-top: 1px solid lightgrey;
|
||||
border-bottom: 1px solid lightgrey;
|
||||
background: %s;
|
||||
""" % search_background_color)
|
||||
|
||||
self.search_bar.addWidget(label_pre_search)
|
||||
|
||||
self.search_bar.addWidget(self.inp_search)
|
||||
|
||||
label_pos_search = QLabel()
|
||||
label_pos_search.setPixmap(QIcon(resource.get_path('img/search.svg')).pixmap(QSize(10, 10)))
|
||||
label_pos_search.setStyleSheet("""
|
||||
padding-right: 10px;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom-right-radius: 5px;
|
||||
border-right: 1px solid lightgrey;
|
||||
border-top: 1px solid lightgrey;
|
||||
border-bottom: 1px solid lightgrey;
|
||||
background: %s;
|
||||
""" % search_background_color)
|
||||
|
||||
self.search_bar.addWidget(label_pos_search)
|
||||
|
||||
self.comp_manager.register_component(SEARCH_BAR, self.search_bar, self.toolbar_top.addWidget(self.search_bar))
|
||||
|
||||
self.toolbar_top.addWidget(new_spacer())
|
||||
self.layout.addWidget(self.toolbar_top)
|
||||
|
||||
self.toolbar = QToolBar()
|
||||
self.toolbar.setStyleSheet('QToolBar {spacing: 4px; margin-top: 15px;}')
|
||||
self.toolbar.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
self.toolbar.setContentsMargins(0, 0, 0, 0)
|
||||
self.toolbar_filters = QWidget()
|
||||
self.toolbar_filters.setObjectName('table_filters')
|
||||
self.toolbar_filters.setLayout(QHBoxLayout())
|
||||
self.toolbar_filters.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
self.toolbar_filters.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.check_updates = QCheckBox()
|
||||
self.check_updates.setObjectName('check_updates')
|
||||
self.check_updates.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.check_updates.setText(self.i18n['updates'].capitalize())
|
||||
self.check_updates.stateChanged.connect(self._handle_updates_filter)
|
||||
self.check_updates.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
self.comp_manager.register_component(CHECK_UPDATES, self.check_updates, self.toolbar.addWidget(self.check_updates))
|
||||
self.toolbar_filters.layout().addWidget(self.check_updates)
|
||||
self.comp_manager.register_component(CHECK_UPDATES, self.check_updates)
|
||||
|
||||
self.check_apps = QCheckBox()
|
||||
self.check_apps.setObjectName('check_apps')
|
||||
self.check_apps.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.check_apps.setText(self.i18n['manage_window.checkbox.only_apps'])
|
||||
self.check_apps.setChecked(True)
|
||||
self.check_apps.stateChanged.connect(self._handle_filter_only_apps)
|
||||
self.check_apps.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
self.comp_manager.register_component(CHECK_APPS, self.check_apps, self.toolbar.addWidget(self.check_apps))
|
||||
self.toolbar_filters.layout().addWidget(self.check_apps)
|
||||
self.comp_manager.register_component(CHECK_APPS, self.check_apps)
|
||||
|
||||
self.any_type_filter = 'any'
|
||||
self.cache_type_filter_icons = {}
|
||||
self.combo_filter_type = QComboBox()
|
||||
self.combo_filter_type.setObjectName('combo_types')
|
||||
self.combo_filter_type.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.combo_filter_type.setView(QListView())
|
||||
self.combo_filter_type.setStyleSheet('QLineEdit { height: 2px; }')
|
||||
self.combo_filter_type.setIconSize(QSize(14, 14))
|
||||
self.combo_filter_type.view().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.combo_filter_type.setSizeAdjustPolicy(QComboBox.AdjustToContents)
|
||||
self.combo_filter_type.setEditable(True)
|
||||
self.combo_filter_type.lineEdit().setReadOnly(True)
|
||||
@@ -223,78 +176,73 @@ class ManageWindow(QWidget):
|
||||
self.combo_filter_type.activated.connect(self._handle_type_filter)
|
||||
self.combo_filter_type.addItem('--- {} ---'.format(self.i18n['type'].capitalize()), self.any_type_filter)
|
||||
self.combo_filter_type.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
self.comp_manager.register_component(COMBO_TYPES, self.combo_filter_type, self.toolbar.addWidget(self.combo_filter_type))
|
||||
self.toolbar_filters.layout().addWidget(self.combo_filter_type)
|
||||
self.comp_manager.register_component(COMBO_TYPES, self.combo_filter_type)
|
||||
|
||||
self.any_category_filter = 'any'
|
||||
self.combo_categories = QComboBox()
|
||||
self.combo_categories.setObjectName('combo_categories')
|
||||
self.combo_categories.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.combo_categories.setStyleSheet('QLineEdit { height: 2px; }')
|
||||
self.combo_categories.setSizeAdjustPolicy(QComboBox.AdjustToContents)
|
||||
self.combo_categories.view().setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.combo_categories.setEditable(True)
|
||||
self.combo_categories.lineEdit().setReadOnly(True)
|
||||
self.combo_categories.lineEdit().setAlignment(Qt.AlignCenter)
|
||||
self.combo_categories.activated.connect(self._handle_category_filter)
|
||||
self.combo_categories.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
self.combo_categories.addItem('--- {} ---'.format(self.i18n['category'].capitalize()), self.any_category_filter)
|
||||
self.comp_manager.register_component(COMBO_CATEGORIES, self.combo_categories, self.toolbar.addWidget(self.combo_categories))
|
||||
self.toolbar_filters.layout().addWidget(self.combo_categories)
|
||||
self.comp_manager.register_component(COMBO_CATEGORIES, self.combo_categories)
|
||||
|
||||
self.input_name = InputFilter(self.begin_apply_filters)
|
||||
self.input_name.setPlaceholderText(self.i18n['manage_window.name_filter.placeholder'] + '...')
|
||||
self.input_name.setToolTip(self.i18n['manage_window.name_filter.tooltip'])
|
||||
self.input_name.setStyleSheet("QLineEdit { color: grey; }")
|
||||
self.input_name.setFixedWidth(130)
|
||||
self.input_name = QSearchBar(search_callback=self.begin_apply_filters)
|
||||
self.input_name.palette().swap(self.combo_categories.palette())
|
||||
self.input_name.setObjectName('name_filter')
|
||||
self.input_name.set_placeholder(self.i18n['manage_window.name_filter.placeholder'] + '...')
|
||||
self.input_name.set_tooltip(self.i18n['manage_window.name_filter.tooltip'])
|
||||
self.input_name.set_button_tooltip(self.i18n['manage_window.name_filter.button_tooltip'])
|
||||
self.input_name.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
self.comp_manager.register_component(INP_NAME, self.input_name, self.toolbar.addWidget(self.input_name))
|
||||
self.toolbar_filters.layout().addWidget(self.input_name)
|
||||
self.comp_manager.register_component(INP_NAME, self.input_name)
|
||||
|
||||
self.toolbar.addWidget(new_spacer())
|
||||
self.toolbar_filters.layout().addWidget(new_spacer())
|
||||
|
||||
toolbar_bts = []
|
||||
|
||||
if config['suggestions']['enabled']:
|
||||
bt_sugs = QPushButton()
|
||||
bt_sugs.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_sugs.setToolTip(self.i18n['manage_window.bt.suggestions.tooltip'])
|
||||
bt_sugs.setText(self.i18n['manage_window.bt.suggestions.text'].capitalize())
|
||||
bt_sugs.setIcon(QIcon(resource.get_path('img/suggestions.svg')))
|
||||
bt_sugs.setStyleSheet(toolbar_button_style())
|
||||
bt_sugs.clicked.connect(lambda: self._begin_load_suggestions(filter_installed=True))
|
||||
bt_sugs.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
ref_bt_sugs = self.toolbar.addWidget(bt_sugs)
|
||||
toolbar_bts.append(bt_sugs)
|
||||
self.comp_manager.register_component(BT_SUGGESTIONS, bt_sugs, ref_bt_sugs)
|
||||
|
||||
bt_inst = QPushButton()
|
||||
bt_inst.setObjectName('bt_installed')
|
||||
bt_inst.setProperty('root', 'true')
|
||||
bt_inst.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_inst.setToolTip(self.i18n['manage_window.bt.installed.tooltip'])
|
||||
bt_inst.setIcon(QIcon(resource.get_path('img/disk.svg')))
|
||||
bt_inst.setText(self.i18n['manage_window.bt.installed.text'].capitalize())
|
||||
bt_inst.clicked.connect(self._begin_loading_installed)
|
||||
bt_inst.setStyleSheet(toolbar_button_style())
|
||||
bt_inst.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
toolbar_bts.append(bt_inst)
|
||||
self.comp_manager.register_component(BT_INSTALLED, bt_inst, self.toolbar.addWidget(bt_inst))
|
||||
self.toolbar_filters.layout().addWidget(bt_inst)
|
||||
self.comp_manager.register_component(BT_INSTALLED, bt_inst)
|
||||
|
||||
bt_ref = QPushButton()
|
||||
bt_ref.setObjectName('bt_refresh')
|
||||
bt_ref.setProperty('root', 'true')
|
||||
bt_ref.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
bt_ref.setToolTip(i18n['manage_window.bt.refresh.tooltip'])
|
||||
bt_ref.setIcon(QIcon(resource.get_path('img/refresh.svg')))
|
||||
bt_ref.setText(self.i18n['manage_window.bt.refresh.text'])
|
||||
bt_ref.setStyleSheet(toolbar_button_style())
|
||||
bt_ref.clicked.connect(self.begin_refresh_packages)
|
||||
bt_ref.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
toolbar_bts.append(bt_ref)
|
||||
self.comp_manager.register_component(BT_REFRESH, bt_ref, self.toolbar.addWidget(bt_ref))
|
||||
self.toolbar_filters.layout().addWidget(bt_ref)
|
||||
self.comp_manager.register_component(BT_REFRESH, bt_ref)
|
||||
|
||||
self.bt_upgrade = QPushButton()
|
||||
self.bt_upgrade.setProperty('root', 'true')
|
||||
self.bt_upgrade.setObjectName('bt_upgrade')
|
||||
self.bt_upgrade.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.bt_upgrade.setToolTip(i18n['manage_window.bt.upgrade.tooltip'])
|
||||
self.bt_upgrade.setIcon(QIcon(resource.get_path('img/app_update.svg')))
|
||||
self.bt_upgrade.setText(i18n['manage_window.bt.upgrade.text'])
|
||||
self.bt_upgrade.setStyleSheet(toolbar_button_style(GREEN, 'white'))
|
||||
self.bt_upgrade.clicked.connect(self.upgrade_selected)
|
||||
self.bt_upgrade.sizePolicy().setRetainSizeWhenHidden(True)
|
||||
toolbar_bts.append(self.bt_upgrade)
|
||||
self.comp_manager.register_component(BT_UPGRADE, self.bt_upgrade, self.toolbar.addWidget(self.bt_upgrade))
|
||||
self.toolbar_filters.layout().addWidget(self.bt_upgrade)
|
||||
self.comp_manager.register_component(BT_UPGRADE, self.bt_upgrade)
|
||||
|
||||
# setting all buttons to the same size:
|
||||
bt_biggest_size = 0
|
||||
@@ -308,44 +256,59 @@ class ManageWindow(QWidget):
|
||||
if bt_biggest_size > bt_width:
|
||||
bt.setFixedWidth(bt_biggest_size)
|
||||
|
||||
self.layout.addWidget(self.toolbar)
|
||||
self.layout.addWidget(self.toolbar_filters)
|
||||
|
||||
self.table_container = QWidget()
|
||||
self.table_container.setObjectName('table_container')
|
||||
self.table_container.setContentsMargins(0, 0, 0, 0)
|
||||
self.table_container.setLayout(QVBoxLayout())
|
||||
self.table_container.layout().setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.table_apps = AppsTable(self, self.icon_cache, download_icons=bool(self.config['download']['icons']))
|
||||
self.table_apps = PackagesTable(self, self.icon_cache, download_icons=bool(self.config['download']['icons']))
|
||||
self.table_apps.change_headers_policy()
|
||||
self.table_container.layout().addWidget(self.table_apps)
|
||||
|
||||
self.layout.addWidget(self.table_container)
|
||||
|
||||
toolbar_console = QToolBar()
|
||||
self.toolbar_console = QWidget()
|
||||
self.toolbar_console.setObjectName('console_toolbar')
|
||||
self.toolbar_console.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
self.toolbar_console.setLayout(QHBoxLayout())
|
||||
self.toolbar_console.setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.check_console = QCheckBox()
|
||||
self.check_console.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.check_console.setText(self.i18n['manage_window.checkbox.show_details'])
|
||||
self.check_console.stateChanged.connect(self._handle_console)
|
||||
self.comp_manager.register_component(CHECK_CONSOLE, self.check_console, toolbar_console.addWidget(self.check_console))
|
||||
self.check_details = QCheckBox()
|
||||
self.check_details.setObjectName('check_details')
|
||||
self.check_details.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
self.check_details.setText(self.i18n['manage_window.checkbox.show_details'])
|
||||
self.check_details.stateChanged.connect(self._handle_console)
|
||||
self.toolbar_console.layout().addWidget(self.check_details)
|
||||
self.comp_manager.register_component(CHECK_DETAILS, self.check_details)
|
||||
|
||||
toolbar_console.addWidget(new_spacer())
|
||||
self.toolbar_console.layout().addWidget(new_spacer())
|
||||
|
||||
self.label_displayed = QLabel()
|
||||
toolbar_console.addWidget(self.label_displayed)
|
||||
self.label_displayed.setObjectName('apps_displayed')
|
||||
self.label_displayed.setCursor(QCursor(Qt.WhatsThisCursor))
|
||||
self.label_displayed.setToolTip(self.i18n['manage_window.label.apps_displayed.tip'])
|
||||
self.toolbar_console.layout().addWidget(self.label_displayed)
|
||||
self.label_displayed.hide()
|
||||
|
||||
self.layout.addWidget(toolbar_console)
|
||||
self.layout.addWidget(self.toolbar_console)
|
||||
|
||||
self.textarea_output = QPlainTextEdit(self)
|
||||
self.textarea_output.resize(self.table_apps.size())
|
||||
self.textarea_output.setStyleSheet("background: black; color: white;")
|
||||
self.layout.addWidget(self.textarea_output)
|
||||
self.textarea_output.setVisible(False)
|
||||
self.textarea_output.setReadOnly(True)
|
||||
self.textarea_details = QPlainTextEdit(self)
|
||||
self.textarea_details.setObjectName('textarea_details')
|
||||
self.textarea_details.setProperty('console', 'true')
|
||||
self.textarea_details.resize(self.table_apps.size())
|
||||
self.layout.addWidget(self.textarea_details)
|
||||
self.textarea_details.setVisible(False)
|
||||
self.textarea_details.setReadOnly(True)
|
||||
|
||||
self.toolbar_substatus = QToolBar()
|
||||
self.toolbar_substatus.setObjectName('toolbar_substatus')
|
||||
self.toolbar_substatus.addWidget(new_spacer())
|
||||
|
||||
self.label_substatus = QLabel()
|
||||
self.label_substatus.setObjectName('label_substatus')
|
||||
self.label_substatus.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.toolbar_substatus.addWidget(self.label_substatus)
|
||||
self.toolbar_substatus.addWidget(new_spacer())
|
||||
@@ -383,43 +346,65 @@ class ManageWindow(QWidget):
|
||||
self.thread_ignore_updates = IgnorePackageUpdates(manager=self.manager)
|
||||
self._bind_async_action(self.thread_ignore_updates, finished_call=self.finish_ignore_updates)
|
||||
|
||||
self.toolbar_bottom = QToolBar()
|
||||
self.toolbar_bottom.setIconSize(QSize(16, 16))
|
||||
self.toolbar_bottom.setStyleSheet('QToolBar { spacing: 3px }')
|
||||
self.container_bottom = QWidget()
|
||||
self.container_bottom.setObjectName('container_bottom')
|
||||
self.container_bottom.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
|
||||
self.container_bottom.setLayout(QHBoxLayout())
|
||||
self.setContentsMargins(0, 0, 0, 0)
|
||||
self.container_bottom.layout().setContentsMargins(0, 0, 0, 0)
|
||||
|
||||
self.toolbar_bottom.addWidget(new_spacer())
|
||||
self.container_bottom.layout().addWidget(new_spacer())
|
||||
|
||||
self.progress_bar = QProgressBar()
|
||||
self.progress_bar.setObjectName('progress_manage')
|
||||
self.progress_bar.setCursor(QCursor(Qt.WaitCursor))
|
||||
self.progress_bar.setStyleSheet(styles.PROGRESS_BAR)
|
||||
self.progress_bar.setMaximumHeight(10 if QApplication.instance().style().objectName().lower() == 'windows' else 4)
|
||||
|
||||
self.progress_bar.setTextVisible(False)
|
||||
self.ref_progress_bar = self.toolbar_bottom.addWidget(self.progress_bar)
|
||||
self.container_bottom.layout().addWidget(self.progress_bar)
|
||||
|
||||
self.toolbar_bottom.addWidget(new_spacer())
|
||||
self.container_bottom.layout().addWidget(new_spacer())
|
||||
|
||||
if config['suggestions']['enabled']:
|
||||
bt_sugs = IconButton(action=lambda: self._begin_load_suggestions(filter_installed=True),
|
||||
i18n=i18n,
|
||||
tooltip=self.i18n['manage_window.bt.suggestions.tooltip'])
|
||||
bt_sugs.setObjectName('suggestions')
|
||||
self.container_bottom.layout().addWidget(bt_sugs)
|
||||
self.comp_manager.register_component(BT_SUGGESTIONS, bt_sugs)
|
||||
|
||||
bt_themes = IconButton(self.show_themes,
|
||||
i18n=self.i18n,
|
||||
tooltip=self.i18n['manage_window.bt_themes.tip'])
|
||||
bt_themes.setObjectName('themes')
|
||||
self.container_bottom.layout().addWidget(bt_themes)
|
||||
self.comp_manager.register_component(BT_THEMES, bt_themes)
|
||||
|
||||
self.custom_actions = manager.get_custom_actions()
|
||||
bt_custom_actions = IconButton(QIcon(resource.get_path('img/custom_actions.svg')),
|
||||
action=self.show_custom_actions,
|
||||
bt_custom_actions = IconButton(action=self.show_custom_actions,
|
||||
i18n=self.i18n,
|
||||
tooltip=self.i18n['manage_window.bt_custom_actions.tip'])
|
||||
bt_custom_actions.setVisible(bool(self.custom_actions))
|
||||
self.comp_manager.register_component(BT_CUSTOM_ACTIONS, bt_custom_actions, self.toolbar_bottom.addWidget(bt_custom_actions))
|
||||
bt_custom_actions.setObjectName('custom_actions')
|
||||
|
||||
bt_settings = IconButton(QIcon(resource.get_path('img/settings.svg')),
|
||||
action=self.show_settings,
|
||||
bt_custom_actions.setVisible(bool(self.custom_actions))
|
||||
self.container_bottom.layout().addWidget(bt_custom_actions)
|
||||
self.comp_manager.register_component(BT_CUSTOM_ACTIONS, bt_custom_actions)
|
||||
|
||||
bt_settings = IconButton(action=self.show_settings,
|
||||
i18n=self.i18n,
|
||||
tooltip=self.i18n['manage_window.bt_settings.tooltip'])
|
||||
self.comp_manager.register_component(BT_SETTINGS, bt_settings, self.toolbar_bottom.addWidget(bt_settings))
|
||||
bt_settings.setObjectName('settings')
|
||||
self.container_bottom.layout().addWidget(bt_settings)
|
||||
self.comp_manager.register_component(BT_SETTINGS, bt_settings)
|
||||
|
||||
bt_about = IconButton(QIcon(resource.get_path('img/info.svg')),
|
||||
action=self._show_about,
|
||||
bt_about = IconButton(action=self._show_about,
|
||||
i18n=self.i18n,
|
||||
tooltip=self.i18n['manage_window.settings.about'])
|
||||
self.comp_manager.register_component(BT_ABOUT, bt_about, self.toolbar_bottom.addWidget(bt_about))
|
||||
bt_about.setObjectName('about')
|
||||
self.container_bottom.layout().addWidget(bt_about)
|
||||
self.comp_manager.register_component(BT_ABOUT, bt_about)
|
||||
|
||||
self.layout.addWidget(self.toolbar_bottom)
|
||||
self.layout.addWidget(self.container_bottom)
|
||||
|
||||
qt_utils.centralize(self)
|
||||
|
||||
@@ -442,6 +427,8 @@ class ManageWindow(QWidget):
|
||||
self.settings_window = None
|
||||
self.search_performed = False
|
||||
|
||||
self.thread_save_theme = SaveTheme(theme_key='')
|
||||
|
||||
self.thread_load_installed = NotifyInstalledLoaded()
|
||||
self.thread_load_installed.signal_loaded.connect(self._finish_loading_installed)
|
||||
self.setMinimumHeight(int(screen_size.height() * 0.5))
|
||||
@@ -457,14 +444,14 @@ class ManageWindow(QWidget):
|
||||
BT_INSTALLED, BT_SUGGESTIONS) # buttons
|
||||
|
||||
self.comp_manager.register_group(GROUP_VIEW_INSTALLED, False,
|
||||
BT_SUGGESTIONS, BT_REFRESH, BT_UPGRADE, # buttons
|
||||
BT_REFRESH, BT_UPGRADE, # buttons
|
||||
*filters)
|
||||
|
||||
self.comp_manager.register_group(GROUP_UPPER_BAR, False,
|
||||
CHECK_APPS, CHECK_UPDATES, COMBO_CATEGORIES, COMBO_TYPES, INP_NAME,
|
||||
BT_INSTALLED, BT_SUGGESTIONS, BT_REFRESH, BT_UPGRADE)
|
||||
|
||||
self.comp_manager.register_group(GROUP_LOWER_BTS, False, BT_ABOUT, BT_SETTINGS, BT_CUSTOM_ACTIONS)
|
||||
self.comp_manager.register_group(GROUP_LOWER_BTS, False, BT_SUGGESTIONS, BT_THEMES, BT_CUSTOM_ACTIONS, BT_SETTINGS, BT_ABOUT)
|
||||
|
||||
def update_custom_actions(self):
|
||||
self.custom_actions = self.manager.get_custom_actions()
|
||||
@@ -540,26 +527,27 @@ class ManageWindow(QWidget):
|
||||
|
||||
def _ask_confirmation(self, msg: dict):
|
||||
self.thread_animate_progress.pause()
|
||||
extra_widgets = [to_widget(comp=c, i18n=self.i18n) for c in msg['components']] if msg.get('components') else None
|
||||
diag = ConfirmationDialog(title=msg['title'],
|
||||
body=msg['body'],
|
||||
i18n=self.i18n,
|
||||
components=msg['components'],
|
||||
widgets=extra_widgets,
|
||||
confirmation_label=msg['confirmation_label'],
|
||||
deny_label=msg['deny_label'],
|
||||
deny_button=msg['deny_button'],
|
||||
window_cancel=msg['window_cancel'],
|
||||
confirmation_button=msg.get('confirmation_button', True),
|
||||
screen_size=self.screen_size)
|
||||
res = diag.is_confirmed()
|
||||
confirmation_button=msg.get('confirmation_button', True))
|
||||
diag.ask()
|
||||
res = diag.confirmed
|
||||
self.thread_animate_progress.animate()
|
||||
self.signal_user_res.emit(res)
|
||||
|
||||
def _pause_and_ask_root_password(self):
|
||||
self.thread_animate_progress.pause()
|
||||
password, valid = root.ask_root_password(self.context, i18n=self.i18n, comp_manager=self.comp_manager)
|
||||
valid, password = RootDialog.ask_password(self.context, i18n=self.i18n, comp_manager=self.comp_manager)
|
||||
|
||||
self.thread_animate_progress.animate()
|
||||
self.signal_root_password.emit(password, valid)
|
||||
self.signal_root_password.emit(valid, password)
|
||||
|
||||
def _show_message(self, msg: dict):
|
||||
self.thread_animate_progress.pause()
|
||||
@@ -582,8 +570,8 @@ class ManageWindow(QWidget):
|
||||
self.thread_warnings.start()
|
||||
|
||||
def _begin_loading_installed(self):
|
||||
self.inp_search.setText('')
|
||||
self.input_name.setText('')
|
||||
self.search_bar.clear()
|
||||
self.input_name.set_text('')
|
||||
self._begin_action(self.i18n['manage_window.status.installed'])
|
||||
self._handle_console_option(False)
|
||||
self.comp_manager.set_components_visible(False)
|
||||
@@ -666,20 +654,20 @@ class ManageWindow(QWidget):
|
||||
|
||||
def _handle_console(self, checked: bool):
|
||||
if checked:
|
||||
self.textarea_output.show()
|
||||
self.textarea_details.show()
|
||||
else:
|
||||
self.textarea_output.hide()
|
||||
self.textarea_details.hide()
|
||||
|
||||
def _handle_console_option(self, enable: bool):
|
||||
if enable:
|
||||
self.textarea_output.clear()
|
||||
self.textarea_details.clear()
|
||||
|
||||
self.comp_manager.set_component_visible(CHECK_CONSOLE, enable)
|
||||
self.check_console.setChecked(False)
|
||||
self.textarea_output.hide()
|
||||
self.comp_manager.set_component_visible(CHECK_DETAILS, enable)
|
||||
self.check_details.setChecked(False)
|
||||
self.textarea_details.hide()
|
||||
|
||||
def begin_refresh_packages(self, pkg_types: Set[Type[SoftwarePackage]] = None):
|
||||
self.inp_search.clear()
|
||||
self.search_bar.clear()
|
||||
|
||||
self._begin_action(self.i18n['manage_window.status.refreshing'])
|
||||
self.comp_manager.set_components_visible(False)
|
||||
@@ -710,7 +698,7 @@ class ManageWindow(QWidget):
|
||||
self.types_changed = False
|
||||
|
||||
def _begin_load_suggestions(self, filter_installed: bool):
|
||||
self.inp_search.clear()
|
||||
self.search_bar.clear()
|
||||
self._begin_action(self.i18n['manage_window.status.suggestions'])
|
||||
self._handle_console_option(False)
|
||||
self.comp_manager.set_components_visible(False)
|
||||
@@ -825,15 +813,21 @@ class ManageWindow(QWidget):
|
||||
def _update_table(self, pkgs_info: dict, signal: bool = False):
|
||||
self.pkgs = pkgs_info['pkgs_displayed']
|
||||
|
||||
self.table_apps.update_packages(self.pkgs, update_check_enabled=pkgs_info['not_installed'] == 0)
|
||||
if pkgs_info['not_installed'] == 0:
|
||||
update_check = sum_updates_displayed(pkgs_info) > 0
|
||||
else:
|
||||
update_check = False
|
||||
|
||||
self.table_apps.update_packages(self.pkgs, update_check_enabled=update_check)
|
||||
|
||||
if not self._maximized:
|
||||
self.label_displayed.show()
|
||||
self.table_apps.change_headers_policy(QHeaderView.Stretch)
|
||||
self.table_apps.change_headers_policy()
|
||||
self._resize(accept_lower_width=len(self.pkgs) > 0)
|
||||
self.label_displayed.setText('{} / {}'.format(len(self.pkgs), len(self.pkgs_available)))
|
||||
else:
|
||||
self.label_displayed.setText('')
|
||||
self.label_displayed.hide()
|
||||
|
||||
if signal:
|
||||
self.signal_table_update.emit()
|
||||
@@ -887,12 +881,12 @@ class ManageWindow(QWidget):
|
||||
'type': self.type_filter,
|
||||
'category': self.category_filter,
|
||||
'updates': False if ignore_updates else self.filter_updates,
|
||||
'name': self.input_name.get_text().lower() if self.input_name.get_text() else None,
|
||||
'name': self.input_name.text().lower() if self.input_name.text() else None,
|
||||
'display_limit': None if self.filter_updates else self.display_limit
|
||||
}
|
||||
|
||||
def update_pkgs(self, new_pkgs: List[SoftwarePackage], as_installed: bool, types: Set[type] = None, ignore_updates: bool = False, keep_filters: bool = False) -> bool:
|
||||
self.input_name.setText('')
|
||||
self.input_name.set_text('')
|
||||
pkgs_info = commons.new_pkgs_info()
|
||||
filters = self._gen_filters(ignore_updates=ignore_updates)
|
||||
|
||||
@@ -1053,8 +1047,8 @@ class ManageWindow(QWidget):
|
||||
|
||||
def _resize(self, accept_lower_width: bool = True):
|
||||
table_width = self.table_apps.get_width()
|
||||
toolbar_width = self.toolbar.sizeHint().width()
|
||||
topbar_width = self.toolbar_top.sizeHint().width()
|
||||
toolbar_width = self.toolbar_filters.sizeHint().width()
|
||||
topbar_width = self.toolbar_status.sizeHint().width()
|
||||
|
||||
new_width = max(table_width, toolbar_width, topbar_width)
|
||||
new_width *= 1.05 # this extra size is not because of the toolbar button, but the table upgrade buttons
|
||||
@@ -1066,13 +1060,14 @@ class ManageWindow(QWidget):
|
||||
self.progress_controll_enabled = enabled
|
||||
|
||||
def upgrade_selected(self):
|
||||
if dialog.ask_confirmation(title=self.i18n['manage_window.upgrade_all.popup.title'],
|
||||
body=self.i18n['manage_window.upgrade_all.popup.body'],
|
||||
i18n=self.i18n,
|
||||
widgets=[UpdateToggleButton(pkg=None,
|
||||
root=self,
|
||||
i18n=self.i18n,
|
||||
clickable=False)]):
|
||||
body = QWidget()
|
||||
body.setLayout(QHBoxLayout())
|
||||
body.setSizePolicy(QSizePolicy.MinimumExpanding, QSizePolicy.Preferred)
|
||||
body.layout().addWidget(QLabel(self.i18n['manage_window.upgrade_all.popup.body']))
|
||||
body.layout().addWidget(UpgradeToggleButton(pkg=None, root=self, i18n=self.i18n, clickable=False))
|
||||
if ConfirmationDialog(title=self.i18n['manage_window.upgrade_all.popup.title'],
|
||||
i18n=self.i18n, body=None,
|
||||
widgets=[body]).ask():
|
||||
|
||||
self._begin_action(action_label=self.i18n['manage_window.status.upgrading'],
|
||||
action_id=ACTION_UPGRADE)
|
||||
@@ -1085,7 +1080,7 @@ class ManageWindow(QWidget):
|
||||
self._finish_action()
|
||||
|
||||
if res.get('id'):
|
||||
output = self.textarea_output.toPlainText()
|
||||
output = self.textarea_details.toPlainText()
|
||||
|
||||
if output:
|
||||
try:
|
||||
@@ -1094,8 +1089,8 @@ class ManageWindow(QWidget):
|
||||
with open(logs_path, 'w+') as f:
|
||||
f.write(output)
|
||||
|
||||
self.textarea_output.appendPlainText('\n*Upgrade summary generated at: {}'.format(UpgradeSelected.SUMMARY_FILE.format(res['id'])))
|
||||
self.textarea_output.appendPlainText('*Upgrade logs generated at: {}'.format(logs_path))
|
||||
self.textarea_details.appendPlainText('\n*Upgrade summary generated at: {}'.format(UpgradeSelected.SUMMARY_FILE.format(res['id'])))
|
||||
self.textarea_details.appendPlainText('*Upgrade logs generated at: {}'.format(logs_path))
|
||||
except:
|
||||
traceback.print_exc()
|
||||
|
||||
@@ -1118,19 +1113,19 @@ class ManageWindow(QWidget):
|
||||
self.update_custom_actions()
|
||||
|
||||
def _show_console_errors(self):
|
||||
if self.textarea_output.toPlainText():
|
||||
self.check_console.setChecked(True)
|
||||
if self.textarea_details.toPlainText():
|
||||
self.check_details.setChecked(True)
|
||||
else:
|
||||
self._handle_console_option(False)
|
||||
self.comp_manager.set_component_visible(CHECK_CONSOLE, False)
|
||||
self.comp_manager.set_component_visible(CHECK_DETAILS, False)
|
||||
|
||||
def _update_action_output(self, output: str):
|
||||
self.textarea_output.appendPlainText(output)
|
||||
self.textarea_details.appendPlainText(output)
|
||||
|
||||
def _begin_action(self, action_label: str, action_id: int = None):
|
||||
self.thread_animate_progress.stop = False
|
||||
self.thread_animate_progress.start()
|
||||
self.ref_progress_bar.setVisible(True)
|
||||
self.progress_bar.setVisible(True)
|
||||
|
||||
if action_id is not None:
|
||||
self.comp_manager.save_states(action_id, only_visible=True)
|
||||
@@ -1149,7 +1144,7 @@ class ManageWindow(QWidget):
|
||||
self.thread_animate_progress.stop = True
|
||||
self.thread_animate_progress.wait(msecs=1000)
|
||||
|
||||
self.ref_progress_bar.setVisible(False)
|
||||
self.progress_bar.setVisible(False)
|
||||
self.progress_bar.setValue(0)
|
||||
self.progress_bar.setTextVisible(False)
|
||||
|
||||
@@ -1246,8 +1241,8 @@ class ManageWindow(QWidget):
|
||||
|
||||
if res.get('error'):
|
||||
self._handle_console_option(True)
|
||||
self.textarea_output.appendPlainText(res['error'])
|
||||
self.check_console.setChecked(True)
|
||||
self.textarea_details.appendPlainText(res['error'])
|
||||
self.check_details.setChecked(True)
|
||||
elif not res['history'].history:
|
||||
dialog.show_message(title=self.i18n['action.history.no_history.title'],
|
||||
body=self.i18n['action.history.no_history.body'].format(bold(res['history'].pkg.name)),
|
||||
@@ -1261,7 +1256,7 @@ class ManageWindow(QWidget):
|
||||
self._begin_action('{} {}'.format(self.i18n['manage_window.status.searching'], word if word else ''), action_id=action_id)
|
||||
|
||||
def search(self):
|
||||
word = self.inp_search.text().strip()
|
||||
word = self.search_bar.text().strip()
|
||||
if word:
|
||||
self._handle_console(False)
|
||||
self._begin_search(word, action_id=ACTION_SEARCH)
|
||||
@@ -1284,13 +1279,13 @@ class ManageWindow(QWidget):
|
||||
self.comp_manager.restore_state(ACTION_SEARCH)
|
||||
dialog.show_message(title=self.i18n['warning'].capitalize(), body=self.i18n[res['error']], type_=MessageType.WARNING)
|
||||
|
||||
def _ask_root_password(self, action: str, pkg: PackageView) -> Tuple[str, bool]:
|
||||
def _ask_root_password(self, action: str, pkg: PackageView) -> Tuple[Optional[str], bool]:
|
||||
pwd = None
|
||||
requires_root = self.manager.requires_root(action, pkg.model)
|
||||
|
||||
if not user.is_root() and requires_root:
|
||||
pwd, ok = ask_root_password(self.context, i18n=self.i18n, comp_manager=self.comp_manager)
|
||||
if not ok:
|
||||
valid, pwd = RootDialog.ask_password(self.context, i18n=self.i18n, comp_manager=self.comp_manager)
|
||||
if not valid:
|
||||
return pwd, False
|
||||
|
||||
return pwd, True
|
||||
@@ -1312,7 +1307,7 @@ class ManageWindow(QWidget):
|
||||
def _finish_install(self, res: dict):
|
||||
self._finish_action(action_id=ACTION_INSTALL)
|
||||
|
||||
console_output = self.textarea_output.toPlainText()
|
||||
console_output = self.textarea_details.toPlainText()
|
||||
|
||||
if console_output:
|
||||
log_path = '{}/install/{}/{}'.format(LOGS_PATH, res['pkg'].model.get_type(), res['pkg'].model.name)
|
||||
@@ -1323,9 +1318,9 @@ class ManageWindow(QWidget):
|
||||
with open(log_file, 'w+') as f:
|
||||
f.write(console_output)
|
||||
|
||||
self.textarea_output.appendPlainText(self.i18n['console.install_logs.path'].format('"{}"'.format(log_file)))
|
||||
self.textarea_details.appendPlainText(self.i18n['console.install_logs.path'].format('"{}"'.format(log_file)))
|
||||
except:
|
||||
self.textarea_output.appendPlainText("[warning] Could not write install log file to '{}'".format(log_path))
|
||||
self.textarea_details.appendPlainText("[warning] Could not write install log file to '{}'".format(log_path))
|
||||
|
||||
if res['success']:
|
||||
if self._can_notify_user():
|
||||
@@ -1385,6 +1380,9 @@ class ManageWindow(QWidget):
|
||||
self.pkgs_installed.insert(idx, PackageView(model, self.i18n))
|
||||
|
||||
self.update_custom_actions()
|
||||
self.table_apps.change_headers_policy(policy=QHeaderView.Stretch, maximized=self._maximized)
|
||||
self.table_apps.change_headers_policy(policy=QHeaderView.ResizeToContents, maximized=self._maximized)
|
||||
self._resize(accept_lower_width=False)
|
||||
else:
|
||||
self._show_console_errors()
|
||||
if self._can_notify_user():
|
||||
@@ -1393,19 +1391,19 @@ class ManageWindow(QWidget):
|
||||
def _update_progress(self, value: int):
|
||||
self.progress_bar.setValue(value)
|
||||
|
||||
def begin_execute_custom_action(self, pkg: PackageView, action: CustomSoftwareAction):
|
||||
if pkg is None and not dialog.ask_confirmation(title=self.i18n['confirmation'].capitalize(),
|
||||
body=self.i18n['custom_action.proceed_with'].capitalize().format('"{}"'.format(self.i18n[action.i18n_label_key])),
|
||||
icon=QIcon(action.icon_path) if action.icon_path else QIcon(resource.get_path('img/logo.svg')),
|
||||
i18n=self.i18n):
|
||||
def begin_execute_custom_action(self, pkg: Optional[PackageView], action: CustomSoftwareAction):
|
||||
if pkg is None and not ConfirmationDialog(title=self.i18n['confirmation'].capitalize(),
|
||||
body='<p>{}</p>'.format(self.i18n['custom_action.proceed_with'].capitalize().format(bold(self.i18n[action.i18n_label_key]))),
|
||||
icon=QIcon(action.icon_path) if action.icon_path else QIcon(resource.get_path('img/logo.svg')),
|
||||
i18n=self.i18n).ask():
|
||||
return False
|
||||
|
||||
pwd = None
|
||||
|
||||
if not user.is_root() and action.requires_root:
|
||||
pwd, ok = ask_root_password(self.context, i18n=self.i18n, comp_manager=self.comp_manager)
|
||||
valid, pwd = RootDialog.ask_password(self.context, i18n=self.i18n, comp_manager=self.comp_manager)
|
||||
|
||||
if not ok:
|
||||
if not valid:
|
||||
return
|
||||
|
||||
self._begin_action(action_label='{}{}'.format(self.i18n[action.i18n_status_key], ' {}'.format(pkg.model.name) if pkg else ''),
|
||||
@@ -1434,10 +1432,10 @@ class ManageWindow(QWidget):
|
||||
self._show_console_errors()
|
||||
|
||||
def _show_console_checkbox_if_output(self):
|
||||
if self.textarea_output.toPlainText():
|
||||
self.comp_manager.set_component_visible(CHECK_CONSOLE, True)
|
||||
if self.textarea_details.toPlainText():
|
||||
self.comp_manager.set_component_visible(CHECK_DETAILS, True)
|
||||
else:
|
||||
self.comp_manager.set_component_visible(CHECK_CONSOLE, False)
|
||||
self.comp_manager.set_component_visible(CHECK_DETAILS, False)
|
||||
|
||||
def show_settings(self):
|
||||
if self.settings_window:
|
||||
@@ -1450,8 +1448,7 @@ class ManageWindow(QWidget):
|
||||
qt_utils.centralize(self.settings_window)
|
||||
self.settings_window.show()
|
||||
|
||||
def _map_custom_action(self, action: CustomSoftwareAction) -> QAction:
|
||||
custom_action = QAction(self.i18n[action.i18n_label_key])
|
||||
def _map_custom_action(self, action: CustomSoftwareAction, parent: QWidget) -> QCustomMenuAction:
|
||||
|
||||
if action.icon_path:
|
||||
try:
|
||||
@@ -1459,20 +1456,21 @@ class ManageWindow(QWidget):
|
||||
icon = QIcon(action.icon_path)
|
||||
else:
|
||||
icon = QIcon.fromTheme(action.icon_path)
|
||||
|
||||
custom_action.setIcon(icon)
|
||||
|
||||
except:
|
||||
pass
|
||||
icon = None
|
||||
else:
|
||||
icon = None
|
||||
|
||||
custom_action.triggered.connect(lambda: self.begin_execute_custom_action(None, action))
|
||||
return custom_action
|
||||
return QCustomMenuAction(parent=parent,
|
||||
label=self.i18n[action.i18n_label_key],
|
||||
action=lambda: self.begin_execute_custom_action(None, action),
|
||||
icon=icon)
|
||||
|
||||
def show_custom_actions(self):
|
||||
if self.custom_actions:
|
||||
menu_row = QMenu()
|
||||
menu_row.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
actions = [self._map_custom_action(a) for a in self.custom_actions]
|
||||
actions = [self._map_custom_action(a, menu_row) for a in self.custom_actions]
|
||||
menu_row.addActions(actions)
|
||||
menu_row.adjustSize()
|
||||
menu_row.popup(QCursor.pos())
|
||||
@@ -1547,3 +1545,48 @@ class ManageWindow(QWidget):
|
||||
self.__add_category(cat)
|
||||
else:
|
||||
self._update_categories(pkg_categories)
|
||||
|
||||
def _map_theme_action(self, theme: ThemeMetadata, menu: QMenu) -> QCustomMenuAction:
|
||||
def _change_theme():
|
||||
set_theme(theme_key=theme.key, app=QApplication.instance(), logger=self.context.logger)
|
||||
self.thread_save_theme.theme_key = theme.key
|
||||
self.thread_save_theme.start()
|
||||
|
||||
return QCustomMenuAction(label=theme.get_i18n_name(self.i18n),
|
||||
action=_change_theme,
|
||||
parent=menu,
|
||||
tooltip=theme.get_i18n_description(self.i18n))
|
||||
|
||||
def show_themes(self):
|
||||
menu_row = QMenu()
|
||||
menu_row.setCursor(QCursor(Qt.PointingHandCursor))
|
||||
menu_row.addActions(self._map_theme_actions(menu_row))
|
||||
menu_row.adjustSize()
|
||||
menu_row.popup(QCursor.pos())
|
||||
menu_row.exec_()
|
||||
|
||||
def _map_theme_actions(self, menu: QMenu) -> List[QCustomMenuAction]:
|
||||
core_config = read_config()
|
||||
|
||||
current_theme_key, current_action = core_config['ui']['theme'], None
|
||||
|
||||
actions = []
|
||||
|
||||
for t in read_all_themes_metadata():
|
||||
if not t.abstract:
|
||||
action = self._map_theme_action(t, menu)
|
||||
|
||||
if current_action is None and current_theme_key is not None and current_theme_key == t.key:
|
||||
action.button.setProperty('current', 'true')
|
||||
current_action = action
|
||||
else:
|
||||
actions.append(action)
|
||||
|
||||
if not current_action:
|
||||
invalid_action = QCustomMenuAction(label=self.i18n['manage_window.bt_themes.option.invalid'], parent=menu)
|
||||
invalid_action.button.setProperty('current', 'true')
|
||||
current_action = invalid_action
|
||||
|
||||
actions.sort(key=lambda a: a.get_label())
|
||||
actions.insert(0, current_action)
|
||||
return actions
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="8.999999pt"
|
||||
viewBox="0 0 9.000001 8.999999"
|
||||
width="9.000001pt"
|
||||
version="1.1"
|
||||
id="svg5741"
|
||||
sodipodi:docname="app_actions.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||
<metadata
|
||||
id="metadata5747">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs5745" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview5743"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="8.9398501"
|
||||
inkscape:cx="-15.591871"
|
||||
inkscape:cy="19.009452"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5741"
|
||||
showguides="false" />
|
||||
<path
|
||||
d="M 7.3555147,3.879237 H 5.2449172 c -0.068563,0 -0.1241526,-0.055592 -0.1241526,-0.1241528 V 1.644485 c 0,-0.3428152 -0.2779494,-0.6207628 -0.6207638,-0.6207628 -0.3428146,0 -0.6207639,0.2779476 -0.6207639,0.6207628 v 2.1105988 c 0,0.068567 -0.05559,0.1241527 -0.1241527,0.1241527 H 1.6444865 c -0.3428146,0 -0.6207641,0.2779476 -0.6207641,0.6207625 0,0.3428152 0.2779495,0.6207635 0.6207641,0.6207635 H 3.755084 c 0.068562,0 0.1241527,0.055591 0.1241527,0.1241527 v 2.1105991 c 0,0.342815 0.2779494,0.6207625 0.6207637,0.6207625 0.3428147,0 0.6207639,-0.2779475 0.6207639,-0.6207625 V 5.2449164 c 0,-0.068568 0.05559,-0.1241527 0.1241527,-0.1241527 h 2.1105975 c 0.3428142,0 0.620764,-0.2779486 0.620764,-0.6207637 0,-0.342815 -0.2779498,-0.6207625 -0.6207638,-0.620763 z m 0,0"
|
||||
id="path5739"
|
||||
style="fill:none;fill-opacity:1;stroke:#91a069;stroke-width:0.75;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@@ -1,124 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 511.80277 512.00123"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="broom3.svg"
|
||||
width="511.80276"
|
||||
height="512.00122"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
|
||||
id="metadata937"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs935" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1360"
|
||||
inkscape:window-height="703"
|
||||
id="namedview933"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.12524439"
|
||||
inkscape:cx="-1824.7804"
|
||||
inkscape:cy="785.16823"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
<g
|
||||
id="g900"
|
||||
transform="translate(-0.09847376,2.5000937e-4)"
|
||||
style="fill:#ffffff">
|
||||
<g
|
||||
id="g898"
|
||||
style="fill:#ffffff">
|
||||
<path
|
||||
d="m 496.89,15.011 c -20.015,-20.016 -52.582,-20.014 -72.596,0 l -137.534,137.532 -2.945,-2.945 c -25.577,-25.577 -66.359,-28.076 -94.866,-5.809 L 5.968,286.702 c -3.447,2.692 -5.574,6.734 -5.841,11.1 -0.267,4.366 1.35,8.637 4.443,11.73 l 197.996,197.996 c 2.872,2.872 6.76,4.473 10.795,4.473 0.31,0 0.622,-0.01 0.934,-0.029 4.366,-0.268 8.408,-2.395 11.1,-5.841 L 368.308,323.15 c 22.264,-28.506 19.766,-69.29 -5.81,-94.867 l -3.14,-3.14 L 496.89,87.608 c 20.015,-20.015 20.015,-52.582 0,-72.597 z m -284.936,458.716 -44.515,-44.515 54.73,-60.219 c 5.671,-6.241 5.21,-15.897 -1.03,-21.569 -6.241,-5.671 -15.898,-5.211 -21.569,1.03 l -53.749,59.14 -41.317,-41.317 59.14,-53.749 c 6.24,-5.672 6.701,-15.329 1.03,-21.569 -5.673,-6.239 -15.327,-6.702 -21.569,-1.03 l -60.219,54.73 -44.515,-44.515 144.466,-112.832 141.95,141.95 z M 344.24,304.35 l -0.517,0.663 -136.639,-136.64 0.663,-0.517 c 16.367,-12.785 39.788,-11.35 54.474,3.336 l 13.741,13.741 51.004,51.004 13.937,13.937 c 14.688,14.687 16.122,38.107 3.337,54.476 z M 475.297,66.014 337.764,203.547 308.353,174.136 445.886,36.604 c 8.109,-8.109 21.303,-8.107 29.41,0 8.109,8.109 8.109,21.301 0.001,29.41 z"
|
||||
id="path896"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g902"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g904"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g906"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g908"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g910"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g912"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g914"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g916"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g918"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g920"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g922"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g924"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g926"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g928"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
<g
|
||||
id="g930"
|
||||
transform="translate(-0.09847376,2.5000937e-4)">
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.1 KiB |
@@ -1,62 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="8.999999pt"
|
||||
viewBox="0 0 9.000001 8.999999"
|
||||
width="9.000001pt"
|
||||
version="1.1"
|
||||
id="svg5741"
|
||||
sodipodi:docname="custom_actions.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||
<metadata
|
||||
id="metadata5747">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs5745" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview5743"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="8.9398501"
|
||||
inkscape:cx="-38.959936"
|
||||
inkscape:cy="23.4838"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg5741"
|
||||
showguides="false" />
|
||||
<path
|
||||
d="m 7.9266176,3.7550845 h -2.532717 c -0.082276,0 -0.1489831,-0.066711 -0.1489831,-0.1489834 v -2.532719 c 0,-0.41137817 -0.3335393,-0.74491533 -0.7449166,-0.74491533 -0.4113775,0 -0.7449167,0.33353716 -0.7449167,0.74491533 v 2.5327186 c 0,0.082281 -0.066708,0.1489832 -0.1489832,0.1489832 H 1.0733837 c -0.4113775,0 -0.74491684,0.3335371 -0.74491684,0.744915 0,0.4113782 0.33353934,0.7449162 0.74491684,0.7449162 h 2.532717 c 0.082274,0 0.1489833,0.066709 0.1489833,0.1489833 v 2.5327188 c 0,0.4113781 0.3335393,0.7449151 0.7449164,0.7449151 0.4113777,0 0.7449167,-0.333537 0.7449167,-0.7449151 V 5.3938998 c 0,-0.082281 0.066708,-0.1489833 0.1489832,-0.1489833 h 2.532717 c 0.4113771,0 0.7449168,-0.3335383 0.7449168,-0.7449164 0,-0.411378 -0.3335397,-0.744915 -0.7449165,-0.7449156 z m 0,0"
|
||||
id="path5739"
|
||||
style="fill:#000000;fill-opacity:0;stroke:#91a069;stroke-width:0.65693444;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@@ -1,130 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 24 24"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="disk.svg"
|
||||
width="24"
|
||||
height="24"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"><metadata
|
||||
id="metadata858"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs856">
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="731"
|
||||
id="namedview854"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="-0.3"
|
||||
inkscape:zoom="4.5416668"
|
||||
inkscape:cx="-3.1268656"
|
||||
inkscape:cy="2.0635535"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
|
||||
<g
|
||||
id="g823"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g825"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g827"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g829"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g831"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g833"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g835"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g837"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g839"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g841"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g843"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g845"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g847"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g849"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g851"
|
||||
transform="translate(-8.2464375,-22.829711)">
|
||||
</g>
|
||||
<g
|
||||
id="g1005"
|
||||
transform="matrix(0.94044416,0,0,0.94044416,0.71467014,0.71467014)"
|
||||
style="fill:none;stroke:#8d5fd3;stroke-width:2.07845044"><path
|
||||
id="path920"
|
||||
d="M 12,0.27929688 A 11.720572,11.720572 0 0 0 0.27929688,12 11.720572,11.720572 0 0 0 12,23.720703 11.720572,11.720572 0 0 0 23.720703,12 11.720572,11.720572 0 0 0 12,0.27929688 Z M 12,8.59375 A 3.4069197,3.4069195 0 0 1 15.40625,12 3.4069197,3.4069195 0 0 1 12,15.40625 3.4069197,3.4069195 0 0 1 8.59375,12 3.4069197,3.4069195 0 0 1 12,8.59375 Z"
|
||||
style="fill:none;stroke:#8d5fd3;stroke-width:2.07845044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647"
|
||||
inkscape:connector-curvature="0" /><ellipse
|
||||
cy="12"
|
||||
cx="12"
|
||||
id="ellipse998"
|
||||
style="fill:none;fill-opacity:0;stroke:#8d5fd3;stroke-width:2.07845044;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.94117647"
|
||||
rx="3.4069197"
|
||||
ry="3.4069195" /></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 40 KiB |
@@ -1,134 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 23.515307 24"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="ignore_update.svg"
|
||||
width="23.515306"
|
||||
height="24"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"><metadata
|
||||
id="metadata977"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs975" /><sodipodi:namedview
|
||||
inkscape:document-rotation="0"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview973"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="9.4874926"
|
||||
inkscape:cx="25.836555"
|
||||
inkscape:cy="15.198259"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
|
||||
<g
|
||||
id="g942"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g944"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g946"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g948"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g950"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g952"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g954"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g956"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g958"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g960"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g962"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g964"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g966"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g968"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g970"
|
||||
transform="translate(-99.310818,-31.505501)">
|
||||
</g>
|
||||
<g
|
||||
id="g982"><g
|
||||
id="g6"
|
||||
transform="matrix(0.90262437,0,0,0.97767784,0.02353571,-0.4674393)"
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#91a069;stroke-width:0.0521502;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"><path
|
||||
d="m 25,17 h -2 c -0.6,0 -1,0.4 -1,1 v 2.5 C 22,20.8 21.8,21 21.5,21 H 4.5 C 4.2,21 4,20.8 4,20.5 V 18 C 4,17.4 3.6,17 3,17 H 1 c -0.6,0 -1,0.4 -1,1 v 6 c 0,0.6 0.4,1 1,1 h 24 c 0.6,0 1,-0.4 1,-1 v -6 c 0,-0.6 -0.4,-1 -1,-1 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#91a069;stroke-width:0.0521502;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><path
|
||||
d="m 12.3,16.7 c 0.2,0.2 0.5,0.3 0.7,0.3 0.2,0 0.5,-0.1 0.7,-0.3 l 6,-6 C 19.9,10.5 20,10.3 20,10 20,9.7 19.9,9.5 19.7,9.3 L 18.3,7.9 C 18.1,7.7 17.9,7.6 17.6,7.6 c -0.3,0 -0.5,0.1 -0.7,0.3 l -1,1 C 15.6,9.2 15,9 15,8.5 V 2 C 15,1.4 14.6,1 14,1 H 12 C 11.4,1 11,1.4 11,2 V 8.6 C 11,9 10.5,9.3 10.1,9 L 9.1,8 C 8.9,7.8 8.7,7.7 8.4,7.7 8.1,7.7 7.9,7.8 7.7,8 L 6.3,9.4 C 6.1,9.6 6,9.8 6,10.1 c 0,0.3 0.1,0.5 0.3,0.7 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#91a069;stroke-width:0.0521502;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /></g><g
|
||||
transform="matrix(-0.05511385,0,0,0.05511385,23.515284,-1.6640481e-7)"
|
||||
style="fill:#ff0000"
|
||||
id="g940">
|
||||
<g
|
||||
style="fill:#ff0000"
|
||||
id="g938">
|
||||
<path
|
||||
style="fill:#ff0000"
|
||||
id="path936"
|
||||
d="M 213.333,0 C 95.467,0 0,95.467 0,213.333 0,331.199 95.467,426.666 213.333,426.666 331.199,426.666 426.667,331.2 426.667,213.333 426.667,95.466 331.2,0 213.333,0 Z M 42.667,213.333 c 0,-94.293 76.373,-170.667 170.667,-170.667 39.467,0 75.627,13.547 104.533,35.947 L 78.613,317.867 C 56.213,288.96 42.667,252.8 42.667,213.333 Z M 213.333,384 C 173.866,384 137.706,370.453 108.8,348.053 L 348.053,108.8 C 370.453,137.707 384,173.867 384,213.333 384,307.627 307.627,384 213.333,384 Z" />
|
||||
</g>
|
||||
</g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
@@ -1,120 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="12"
|
||||
height="12"
|
||||
viewBox="0 0 12 12"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="install.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
|
||||
id="metadata135"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs133" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview131"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="1.9124627"
|
||||
inkscape:cx="-35.595135"
|
||||
inkscape:cy="42.640588"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
<g
|
||||
id="g98"
|
||||
transform="scale(0.034381)"
|
||||
style="fill:#91a069;fill-opacity:1">
|
||||
<path
|
||||
d="m 349.03,141.226 v 66.579 c 0,5.012 -4.061,9.079 -9.079,9.079 H 216.884 v 123.067 c 0,5.019 -4.067,9.079 -9.079,9.079 h -66.579 c -5.009,0 -9.079,-4.061 -9.079,-9.079 V 216.884 H 9.079 C 4.063,216.884 0,212.817 0,207.805 v -66.579 c 0,-5.013 4.063,-9.079 9.079,-9.079 H 132.147 V 9.079 C 132.147,4.061 136.216,0 141.226,0 h 66.579 c 5.012,0 9.079,4.061 9.079,9.079 v 123.068 h 123.067 c 5.019,0 9.079,4.066 9.079,9.079 z"
|
||||
id="path96"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#91a069;fill-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
id="g100"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g102"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g104"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g106"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g108"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g110"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g112"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g114"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g116"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g118"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g120"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g122"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g124"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g126"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
<g
|
||||
id="g128"
|
||||
transform="translate(0,-337.03)">
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.0 KiB |
@@ -1,127 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 20 24"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="lock.svg"
|
||||
width="20"
|
||||
height="24"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14"><metadata
|
||||
id="metadata937"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs935">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1360"
|
||||
inkscape:window-height="703"
|
||||
id="namedview933"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.90509668"
|
||||
inkscape:cx="-149.6013"
|
||||
inkscape:cy="29.679244"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
<path
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.47244796"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path939"
|
||||
d="M 19.221328,9.0590556 H 17.594031 V 7.0984108 c 0,-3.7838458 -3.406592,-6.86218682 -7.5940312,-6.86218682 -4.1874394,0 -7.5940309,3.07834102 -7.5940309,6.86218682 V 9.0590556 H 0.77867292 c -0.29982928,0 -0.54244894,0.2192386 -0.54244894,0.4901724 v 12.25395 c 0,1.081301 0.97307212,1.960598 2.16974492,1.960598 H 17.594081 c 1.196623,0 2.169695,-0.879297 2.169695,-1.960645 V 9.549228 c 0,-0.2709338 -0.24262,-0.4901724 -0.542448,-0.4901724 z M 11.624143,19.298274 c 0.01694,0.138316 -0.03229,0.277138 -0.135066,0.381037 -0.102774,0.103851 -0.250044,0.163222 -0.404179,0.163222 H 8.9151528 c -0.1541362,0 -0.301406,-0.05937 -0.4041797,-0.163222 C 8.4081996,19.575458 8.3589226,19.436637 8.3759075,19.298274 L 8.718097,16.517704 C 8.1624267,16.152475 7.8303058,15.574718 7.8303058,14.940945 c 0,-1.081303 0.9730724,-1.960646 2.1697452,-1.960646 1.196672,0 2.169744,0.879297 2.169744,1.960646 0,0.633773 -0.33212,1.21153 -0.887792,1.576759 z M 14.339439,9.0590556 H 5.6605606 V 7.0984108 c 0,-2.1621453 1.946704,-3.9212433 4.3394392,-3.9212433 2.3927352,0 4.3394392,1.759098 4.3394392,3.9212433 z" /><path
|
||||
d="M 19.221328,9.0590556 H 17.594031 V 7.0984108 c 0,-3.7838458 -3.406592,-6.86218682 -7.5940312,-6.86218682 -4.1874394,0 -7.5940309,3.07834102 -7.5940309,6.86218682 V 9.0590556 H 0.77867292 c -0.29982928,0 -0.54244894,0.2192386 -0.54244894,0.4901724 v 12.25395 c 0,1.081301 0.97307212,1.960598 2.16974492,1.960598 H 17.594081 c 1.196623,0 2.169695,-0.879297 2.169695,-1.960645 V 9.549228 c 0,-0.2709338 -0.24262,-0.4901724 -0.542448,-0.4901724 z M 11.624143,19.298274 c 0.01694,0.138316 -0.03229,0.277138 -0.135066,0.381037 -0.102774,0.103851 -0.250044,0.163222 -0.404179,0.163222 H 8.9151528 c -0.1541362,0 -0.301406,-0.05937 -0.4041797,-0.163222 C 8.4081996,19.575458 8.3589226,19.436637 8.3759075,19.298274 L 8.718097,16.517704 C 8.1624267,16.152475 7.8303058,15.574718 7.8303058,14.940945 c 0,-1.081303 0.9730724,-1.960646 2.1697452,-1.960646 1.196672,0 2.169744,0.879297 2.169744,1.960646 0,0.633773 -0.33212,1.21153 -0.887792,1.576759 z M 14.339439,9.0590556 H 5.6605606 V 7.0984108 c 0,-2.1621453 1.946704,-3.9212433 4.3394392,-3.9212433 2.3927352,0 4.3394392,1.759098 4.3394392,3.9212433 z"
|
||||
id="path896"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ffffff;stroke:#ffffff;stroke-width:0.04834057" />
|
||||
<g
|
||||
id="g902"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g904"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g906"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g908"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g910"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g912"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g914"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g916"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g918"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g920"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g922"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g924"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g926"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g928"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
<g
|
||||
id="g930"
|
||||
transform="translate(-236.96506,-257.22244)">
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@@ -1,115 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 12 12"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="cross_red.svg"
|
||||
width="12"
|
||||
height="12"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata
|
||||
id="metadata1018"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1016" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="703"
|
||||
id="namedview1014"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
showborder="false"
|
||||
inkscape:zoom="1.7430481"
|
||||
inkscape:cx="39.29923"
|
||||
inkscape:cy="73.435604"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="260"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1" />
|
||||
<path
|
||||
id="XMLID_90_"
|
||||
d="M 0.18530763,10.025545 1.9744745,11.814702 C 2.093058,11.933327 2.2540227,12 2.4217347,12 2.5894888,12 2.7504115,11.93333 2.8689948,11.814702 L 5.9999843,8.6837266 9.1309735,11.814702 C 9.2495992,11.933327 9.4105217,12 9.5782337,12 c 0.167754,0 0.3286768,-0.06667 0.4473023,-0.185298 l 1.789167,-1.789157 c 0.247034,-0.2470354 0.247034,-0.6475284 0,-0.8945604 L 8.6837558,6.0000066 11.814703,2.8689866 C 11.933371,2.7503616 12,2.5894836 12,2.4217286 c 0,-0.167795 -0.06663,-0.328675 -0.185297,-0.4473 L 10.025578,0.18526863 c -0.2469922,-0.247032 -0.6475697,-0.247032 -0.8945622,4.3e-5 L 6.0000263,3.3162466 2.8689948,0.18531163 c -0.2469925,-0.247035 -0.6475699,-0.247035 -0.8945624,0 L 0.18530763,1.9744286 C 0.0666399,2.0930536 1.054262e-5,2.2539336 1.054262e-5,2.4216866 c 0,0.167755 0.06662935738,0.328635 0.18529708738,0.44726 l 3.13094717,3.131018 -3.13094717,3.13102 c -0.24707684,0.247032 -0.24707684,0.647525 0,0.8945604 z"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#ff0000;stroke-width:0.0421704" />
|
||||
<g
|
||||
id="g983"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g985"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g987"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g989"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g991"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g993"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g995"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g997"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g999"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g1001"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g1003"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g1005"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g1007"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g1009"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
<g
|
||||
id="g1011"
|
||||
transform="translate(2.5e-4,-272.56001)">
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@@ -1,133 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 12 12"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="settings.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
width="12"
|
||||
height="12"><metadata
|
||||
id="metadata1620"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1618" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview1616"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="29.5"
|
||||
inkscape:cx="4.1585718"
|
||||
inkscape:cy="4.9615377"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<g
|
||||
id="g1583"
|
||||
transform="matrix(0.02354106,0,0,0.02294584,-0.02630954,0.12586496)"
|
||||
style="fill:#b072d9;fill-opacity:1;stroke:#b072d9;stroke-width:10.97066879;stroke-opacity:1">
|
||||
<g
|
||||
id="g1581"
|
||||
style="fill:#b072d9;fill-opacity:1;stroke:#b072d9;stroke-width:10.97066879;stroke-opacity:1">
|
||||
<g
|
||||
id="g1579"
|
||||
style="fill:#b072d9;fill-opacity:1;stroke:#b072d9;stroke-width:10.97066879;stroke-opacity:1">
|
||||
<path
|
||||
d="m 496.659,312.128 -47.061,-36.8 c 0.619,-5.675 1.109,-12.309 1.109,-19.328 0,-7.019 -0.512,-13.653 -1.109,-19.328 l 47.104,-36.821 c 8.747,-6.912 11.157,-19.179 5.568,-29.397 L 453.331,85.782 C 447.976,76.033 435.966,71.574 425.022,75.606 L 369.491,97.899 C 358.867,90.219 347.71,83.734 336.168,78.55 L 327.72,19.649 C 326.334,8.448 316.606,0 305.107,0 h -98.133 c -11.499,0 -21.227,8.448 -22.592,19.435 l -8.469,59.115 c -11.179,5.056 -22.165,11.435 -33.28,19.371 L 86.953,75.564 C 76.308,71.404 64.19,75.799 58.857,85.569 l -49.003,84.8 c -5.781,9.771 -3.413,22.443 5.547,29.525 l 47.061,36.779 c -0.747,7.211 -1.109,13.461 -1.109,19.328 0,5.867 0.363,12.117 1.067,19.328 L 15.316,312.172 C 6.59,319.083 4.2,331.349 9.768,341.568 l 48.939,84.672 c 5.312,9.728 17.301,14.165 28.309,10.176 l 55.531,-22.293 c 10.624,7.659 21.803,14.144 33.344,19.349 l 8.448,58.88 c 1.387,11.2 11.115,19.648 22.613,19.648 h 98.133 c 11.499,0 21.227,-8.448 22.592,-19.435 l 8.469,-59.093 c 11.179,-5.056 22.165,-11.435 33.28,-19.371 l 55.68,22.357 c 10.603,4.117 22.763,-0.235 28.096,-10.005 l 49.195,-85.099 c 5.441,-9.983 3.051,-22.25 -5.738,-29.226 z m -12.907,18.773 -50.816,85.717 -61.077,-24.533 c -3.456,-1.387 -7.381,-0.853 -10.368,1.365 -13.227,9.899 -26.005,17.344 -39.104,22.699 -3.499,1.429 -5.995,4.608 -6.528,8.363 l -10.773,66.155 -99.563,-1.131 -9.323,-65.003 c -0.555,-3.755 -3.029,-6.933 -6.528,-8.363 -13.632,-5.589 -26.752,-13.205 -39.019,-22.635 -1.899,-1.472 -4.203,-2.219 -6.507,-2.219 -1.344,0 -2.688,0.235 -3.989,0.768 L 77.33,415.785 28.391,331.113 c -0.448,-0.832 -0.363,-1.792 0.149,-2.197 l 51.776,-40.469 c 2.944,-2.304 4.48,-6.016 4.011,-9.728 -1.131,-8.939 -1.643,-16.171 -1.643,-22.72 0,-6.549 0.533,-13.76 1.643,-22.72 0.469,-3.733 -1.067,-7.424 -4.011,-9.728 l -52.03,-42.431 50.816,-85.717 61.077,24.533 c 3.477,1.408 7.381,0.875 10.389,-1.365 13.205,-9.92 26.005,-17.344 39.104,-22.699 3.499,-1.451 5.973,-4.629 6.507,-8.363 l 10.795,-66.176 99.584,1.152 9.301,65.024 c 0.555,3.755 3.029,6.933 6.528,8.363 13.611,5.568 26.731,13.184 39.019,22.635 3.008,2.304 6.955,2.859 10.475,1.429 l 62.827,-23.701 48.939,84.672 c 0.448,0.832 0.363,1.771 -0.149,2.176 l -51.776,40.469 c -2.944,2.304 -4.48,5.995 -4.011,9.728 0.811,6.485 1.643,14.272 1.643,22.72 0,8.469 -0.832,16.235 -1.643,22.72 -0.469,3.712 1.067,7.424 4.011,9.728 l 51.712,40.448 c 0.553,0.448 0.66,1.408 0.318,2.005 z"
|
||||
id="path1575"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#b072d9;fill-opacity:1;stroke:#b072d9;stroke-width:10.97066879;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 256.019,149.333 c -58.816,0 -106.667,47.851 -106.667,106.667 0,58.816 47.851,106.667 106.667,106.667 58.816,0 106.667,-47.851 106.667,-106.667 0,-58.816 -47.851,-106.667 -106.667,-106.667 z m 0,192 c -47.061,0 -85.333,-38.272 -85.333,-85.333 0,-47.061 38.272,-85.333 85.333,-85.333 47.061,0 85.333,38.272 85.333,85.333 0,47.061 -38.272,85.333 -85.333,85.333 z"
|
||||
id="path1577"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#b072d9;fill-opacity:1;stroke:#b072d9;stroke-width:10.97066879;stroke-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g1585"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1587"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1589"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1591"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1593"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1595"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1597"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1599"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1601"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1603"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1605"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1607"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1609"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1611"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
<g
|
||||
id="g1613"
|
||||
transform="translate(-6.6814869,-500.02344)">
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.1 KiB |
@@ -1,160 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 24 24.000001"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="suggestions.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
|
||||
width="24"
|
||||
height="24"><metadata
|
||||
id="metadata3871"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs3869">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="731"
|
||||
id="namedview3867"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="3.3752738"
|
||||
inkscape:cx="-10.034104"
|
||||
inkscape:cy="7.9414737"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<g
|
||||
id="g10054"
|
||||
transform="matrix(0.5189189,0,0,0.5189189,1.0163982,0.00160744)"
|
||||
style="fill:#d4aa00;stroke:#d4aa00"><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 21.203142,10.467879 c -7.143366,0 -12.9794492,5.550416 -12.9794492,12.344126 0,3.552267 1.6341034,6.971323 4.3887352,9.280296 2.054301,1.953747 1.867546,6.12766 1.820858,6.172064 0,0.222016 0.04669,0.39963 0.233443,0.577243 0.140066,0.13321 0.373509,0.222017 0.560264,0.222017 h 11.90561 c 0.233444,0 0.420198,-0.08881 0.560264,-0.222017 0.140066,-0.13321 0.233444,-0.355227 0.233444,-0.577243 0,-0.0444 -0.233444,-4.218317 1.820858,-6.172064 0.04669,-0.0444 0.09338,-0.08881 0.140066,-0.13321 2.707942,-2.353376 4.295357,-5.683626 4.295357,-9.147086 0,-6.79371 -5.836083,-12.344126 -12.97945,-12.344126 z m 7.470187,20.469936 c -0.04669,0.0444 -0.140066,0.13321 -0.140066,0.177613 -1.820858,1.86494 -2.147678,4.92877 -2.194367,6.39408 H 16.0207 c -0.04669,-1.46531 -0.373509,-4.66235 -2.334433,-6.571693 -2.474499,-2.042554 -3.9218482,-5.017577 -3.9218482,-8.170213 0,-5.99445 5.0890652,-10.834413 11.3920352,-10.834413 6.30297,0 11.392035,4.839963 11.392035,10.834413 0,3.152636 -1.40066,6.127659 -3.87516,8.170213 z"
|
||||
id="path3812"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 21.156454,13.620515 c -0.420198,0 -0.793708,0.355227 -0.793708,0.754857 0,0.39963 0.37351,0.754857 0.793708,0.754857 4.715555,0 8.497337,3.641073 8.497337,8.081406 0,0.39963 0.37351,0.754857 0.793708,0.754857 0.420198,0 0.793707,-0.355227 0.793707,-0.754857 0.04669,-5.283997 -4.482112,-9.59112 -10.084752,-9.59112 z"
|
||||
id="path3814"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 24.79817,42.392024 h -7.283432 c -1.07384,0 -1.960924,0.843664 -1.960924,1.86494 0,1.021277 0.887084,1.86494 1.960924,1.86494 h 7.283432 c 1.073839,0 1.960924,-0.843663 1.960924,-1.86494 0,-1.06568 -0.887085,-1.86494 -1.960924,-1.86494 z m 0,2.175764 h -7.283432 c -0.186755,0 -0.37351,-0.13321 -0.37351,-0.355227 0,-0.222017 0.140066,-0.355227 0.37351,-0.355227 h 7.283432 c 0.186755,0 0.373509,0.13321 0.373509,0.355227 0,0.222017 -0.186754,0.355227 -0.373509,0.355227 z"
|
||||
id="path3818"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 21.156454,6.7824021 c 0.466886,0 0.793707,-0.3552266 0.793707,-0.7548566 V 0.87675898 c 0,-0.39962998 -0.373509,-0.75485664 -0.793707,-0.75485664 -0.420198,0 -0.793708,0.35522666 -0.793708,0.75485664 V 6.0275455 c 0,0.39963 0.37351,0.7548566 0.793708,0.7548566 z"
|
||||
id="path3820"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 34.369347,3.9405889 c -0.373509,-0.26642 -0.840396,-0.13321 -1.07384,0.1776133 l -2.988074,4.2627199 c -0.280132,0.3552266 -0.186755,0.8436633 0.186754,1.06568 0.140066,0.088807 0.280132,0.13321 0.420198,0.13321 0.280132,0 0.513576,-0.13321 0.653642,-0.3552267 L 34.556102,4.9618655 C 34.836234,4.6510422 34.742856,4.1626056 34.369347,3.9405889 Z"
|
||||
id="path3822"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 11.678654,9.4021987 c 0.140066,0 0.280132,-0.044403 0.420198,-0.13321 0.37351,-0.2220166 0.466887,-0.7104533 0.233444,-1.0656799 L 9.4375981,3.8961856 C 9.2041548,3.5409589 8.6905795,3.4521522 8.3170701,3.6741689 7.9435608,3.8961856 7.8501834,4.3846222 8.0836268,4.7398489 l 2.8946972,4.3071232 c 0.186755,0.26642 0.420198,0.3552266 0.70033,0.3552266 z"
|
||||
id="path3824"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="M 6.0293254,14.108952 1.3137699,11.666769 c -0.37350933,-0.177614 -0.88708468,-0.0444 -1.07383935,0.310823 -0.23344334,0.355227 -0.0933773,0.843663 0.32682068,1.021277 l 4.71555547,2.442183 c 0.140066,0.0444 0.2334433,0.08881 0.3735093,0.08881 0.280132,0 0.5602641,-0.13321 0.7003301,-0.39963 0.1867546,-0.355227 0.046689,-0.843664 -0.3268207,-1.021277 z"
|
||||
id="path3826"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#d4aa00;stroke:#d4aa00;stroke-width:0.25"
|
||||
d="m 42.119666,11.977592 c -0.186755,-0.355227 -0.70033,-0.488437 -1.07384,-0.310823 l -4.762244,2.442183 c -0.373509,0.177613 -0.513575,0.66605 -0.32682,1.021277 0.140066,0.26642 0.420198,0.39963 0.70033,0.39963 0.140066,0 0.280132,-0.0444 0.373509,-0.08881 l 4.762244,-2.442183 c 0.373509,-0.177614 0.513575,-0.66605 0.326821,-1.021277 z"
|
||||
id="path3828"
|
||||
inkscape:connector-curvature="0" /></g>
|
||||
<g
|
||||
id="g3836"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3838"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3840"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3842"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3844"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3846"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3848"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3850"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3852"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3854"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3856"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3858"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3860"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3862"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3864"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.2 KiB |
@@ -1,97 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="512.00006"
|
||||
viewBox="0 0 383.99996 384.37057"
|
||||
width="511.99994"
|
||||
version="1.1"
|
||||
id="svg4610"
|
||||
sodipodi:docname="customer-support_2.svg"
|
||||
inkscape:version="0.92.4 5da689c313, 2019-01-14">
|
||||
<metadata
|
||||
id="metadata4616">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs4614" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1360"
|
||||
inkscape:window-height="703"
|
||||
id="namedview4612"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
units="px"
|
||||
inkscape:zoom="0.16904657"
|
||||
inkscape:cx="1544.1159"
|
||||
inkscape:cy="-68.837126"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg4610" />
|
||||
<g
|
||||
id="g4636"
|
||||
transform="matrix(0.71430651,0,0,0.75810267,1364.318,373.14432)">
|
||||
<ellipse
|
||||
ry="253.1329"
|
||||
rx="268.67615"
|
||||
cy="-238.69989"
|
||||
cx="-1641.1974"
|
||||
id="path4620"
|
||||
style="fill:#b3b3b3;fill-opacity:1;stroke:#ffffff;stroke-width:0.75072366" />
|
||||
<g
|
||||
transform="matrix(0.86135478,0,0,0.86135478,-1800.0393,-561.71381)"
|
||||
id="g4627">
|
||||
<path
|
||||
d="m 1.1190198,220.85955 25.6150732,44.82226 c 0.864022,1.51463 2.310204,2.61043 4.001367,3.03452 l 23.897568,5.97419 81.963492,81.9608 9.05642,-9.05349 -83.246353,-83.24098 c -0.81924,-0.82185 -1.846583,-1.40399 -2.971391,-1.68584 l -22.962422,-5.76083 -21.808639,-38.18427 18.697635,-18.69702 38.201336,21.82899 5.763655,22.96167 c 0.279227,1.1274 0.864022,2.15735 1.683262,2.97656 l 83.246357,83.24361 9.05378,-9.05612 -81.963491,-81.96079 -5.974392,-23.88361 c -0.424108,-1.69374 -1.51994,-3.14251 -3.034612,-4.00914 L 35.511286,186.51847 c -2.499867,-1.42243 -5.645115,-1.00097 -7.683995,1.02994 L 2.2148518,213.16264 c -2.05995369,2.02564 -2.50776946,5.17605 -1.095832,7.69691 z m 0,0"
|
||||
id="path4600"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:0.67434704" />
|
||||
<path
|
||||
d="M 267.34562,311.82641 126.47061,452.6994 117.41419,443.64328 258.29183,302.77293 Z m 0,0"
|
||||
id="path4602"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:0.67434704" />
|
||||
<path
|
||||
d="m 101.81439,457.68317 c -1.15905,-1.92818 -3.240078,-3.10563 -5.489695,-3.10563 H 57.904719 c -2.246982,0 -4.330644,1.17745 -5.487063,3.10563 l -19.211305,32.01515 c -1.21964,2.02827 -1.21964,4.56494 0,6.59585 l 19.211305,32.01515 c 1.156419,1.92554 3.240081,3.10563 5.487063,3.10563 h 38.419976 c 2.249617,0 4.330645,-1.18009 5.489695,-3.10563 l 19.20867,-32.01515 c 1.21964,-2.03091 1.21964,-4.56758 0,-6.59585 z m -9.111735,60.92467 H 61.529394 l -15.367991,-25.6116 15.367991,-25.61422 h 31.173261 l 15.367985,25.61422 z m 0,0"
|
||||
id="path4604"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:0.67434704" />
|
||||
<path
|
||||
d="m 307.63852,339.31877 c 42.29226,0.14225 76.69507,-34.02762 76.83731,-76.31849 0.0211,-6.4378 -0.76919,-12.84926 -2.35235,-19.0895 -0.85348,-3.43227 -4.32801,-5.52113 -7.76038,-4.66767 -1.12745,0.28185 -2.15479,0.86399 -2.97666,1.6832 l -39.86089,39.83324 -31.62635,-10.53914 -10.54738,-31.6174 39.86089,-39.86747 c 2.49987,-2.50242 2.49723,-6.55634 -0.005,-9.05612 -0.82451,-0.82449 -1.86239,-1.40926 -2.99773,-1.68848 -41.01468,-10.38635 -82.68,14.44027 -93.0667,55.45096 -1.57789,6.2218 -2.36552,12.61746 -2.34445,19.03682 0.0158,5.04172 0.53475,10.06762 1.55682,15.00397 L 92.117859,417.71296 c -4.936512,-1.01941 -9.962588,-1.53833 -15.001835,-1.55677 -42.439783,0 -76.842586,34.40167 -76.842586,76.84005 0,42.43575 34.402803,76.83742 76.842586,76.83742 42.437146,0 76.839956,-34.40167 76.839956,-76.83742 -0.0158,-5.04171 -0.53738,-10.06762 -1.55682,-15.00397 l 33.57302,-33.57192 14.6831,14.68261 c 2.5025,2.49979 6.55392,2.49979 9.05642,0 l 3.20057,-3.2031 c 2.80807,-2.78953 7.34681,-2.78953 10.15488,0 2.80544,2.79744 2.81071,7.33868 0.0132,10.14402 -0.003,0.003 -0.008,0.008 -0.0132,0.0131 l -3.20056,3.20046 c -2.49987,2.49979 -2.49987,6.5537 0,9.05349 l 76.38686,76.38435 c 20.09114,20.27485 52.81331,20.42236 73.08884,0.33189 20.27289,-20.09046 20.42041,-52.8142 0.32927,-73.08642 -0.108,-0.11063 -0.21863,-0.22126 -0.32927,-0.3319 l -76.38687,-76.3817 c -2.49987,-2.49978 -6.55392,-2.49978 -9.05378,0 l -3.20057,3.20047 c -2.81071,2.79217 -7.34682,2.79217 -10.15752,0 -2.8028,-2.79744 -2.81071,-7.33868 -0.0132,-10.14138 0.005,-0.005 0.0105,-0.008 0.0132,-0.0131 l 3.2032,-3.2031 c 2.49987,-2.49978 2.49987,-6.5537 0,-9.05349 l -14.6831,-14.68261 33.57303,-33.57191 c 4.93651,1.0194 9.96259,1.54095 15.00184,1.55676 z m 25.15935,217.71041 c -4.65202,-0.008 -9.26452,-0.84819 -13.61887,-2.48398 l 50.0105,-50.01149 c 7.54702,20.07466 -2.60787,42.46472 -22.68319,50.01149 -4.3807,1.64633 -9.02481,2.48925 -13.70844,2.48398 z M 260.25432,390.60782 c -7.0913,8.45817 -5.97966,21.06509 2.47879,28.15352 7.43375,6.22971 18.26826,6.22443 25.6941,-0.0185 l 71.86129,71.92214 c 0.77973,0.78233 1.50941,1.60681 2.21538,2.44447 l -54.74946,54.74764 c -0.84031,-0.70331 -1.66482,-1.43296 -2.44718,-2.21529 l -71.91661,-71.91948 c 7.0913,-8.45817 5.97966,-21.06509 -2.4788,-28.15352 -7.43374,-6.23234 -18.27089,-6.22444 -25.69673,0.0158 l -10.24445,-10.24412 55.03658,-54.9531 z m 25.85742,-64.40172 -145.2636,145.22983 c -1.5937,1.59101 -2.23381,3.90114 -1.69116,6.08483 8.78509,34.49913 -12.06206,69.58831 -46.564962,78.37048 -34.50027,8.78481 -69.590603,-12.06166 -78.375698,-46.56343 -8.782462,-34.49912 12.064689,-69.5883 46.567592,-78.3731 10.436747,-2.6552 21.371359,-2.6552 31.808106,0 2.183761,0.53472 4.488696,-0.10537 6.085028,-1.68848 L 243.9064,284.03376 c 1.59106,-1.59101 2.23118,-3.90114 1.68326,-6.08219 -8.72451,-34.09611 11.84342,-68.80861 45.94065,-77.53546 6.44328,-1.64633 13.10784,-2.27852 19.74605,-1.86496 l -33.77849,33.79055 c -1.71487,1.71218 -2.31547,4.24884 -1.54892,6.54843 l 12.8049,38.42135 c 0.64012,1.90974 2.14162,3.41119 4.05405,4.04601 l 38.42262,12.80711 c 2.29703,0.76653 4.83377,0.16859 6.54864,-1.54359 l 33.7785,-33.77738 c 0.0764,1.22223 0.11591,2.4313 0.11591,3.63509 0.17912,35.184 -28.19661,63.85118 -63.38177,64.03294 -5.43965,0.0264 -10.86085,-0.64273 -16.12928,-1.9914 -2.18376,-0.54526 -4.49396,0.0922 -6.08503,1.6832 h 0.0342 z m 0,0"
|
||||
id="path4606"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:0.67434704" />
|
||||
<path
|
||||
d="m 331.3833,507.67622 -9.05642,9.05612 -64.03242,-64.0303 9.05379,-9.05612 z m 0,0"
|
||||
id="path4608"
|
||||
inkscape:connector-curvature="0"
|
||||
style="stroke-width:0.67434704" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 7.4 KiB |
@@ -1,96 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="24"
|
||||
viewBox="-40 0 18 18.000056"
|
||||
width="24"
|
||||
version="1.1"
|
||||
id="svg72"
|
||||
sodipodi:docname="uninstall.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)">
|
||||
<metadata
|
||||
id="metadata78">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs76" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="703"
|
||||
id="namedview74"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="5.7611241"
|
||||
inkscape:cx="40.648821"
|
||||
inkscape:cy="17.781204"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="260"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg72"
|
||||
units="px" />
|
||||
<g
|
||||
id="g5907"
|
||||
transform="matrix(0.50000001,0,0,0.49999997,-20.000045,0)">
|
||||
<g
|
||||
transform="matrix(0.10380557,0,0,0.08430914,-35.847729,0)"
|
||||
id="g84">
|
||||
<path
|
||||
d="m 192.40098,154.70443 c -5.52344,0 -10,4.47657 -10,10 v 189 c 0,5.51954 4.47656,10 10,10 5.52343,0 10,-4.48046 10,-10 v -189 c 0,-5.52343 -4.47657,-10 -10,-10 z m 0,0"
|
||||
id="path64"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 74.400978,154.70443 c -5.52344,0 -10,4.47657 -10,10 v 189 c 0,5.51954 4.47656,10 10,10 5.52344,0 10,-4.48046 10,-10 v -189 c 0,-5.52343 -4.47656,-10 -10,-10 z m 0,0"
|
||||
id="path66"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m -11.599024,127.1224 v 246.37891 c 0,14.5625 5.3398433,28.23828 14.6679683,38.05078 9.2851557,9.83984 22.2070317,15.42578 35.7304687,15.44922 H 228.00254 c 13.52734,-0.0234 26.44922,-5.60938 35.73047,-15.44922 9.32812,-9.8125 14.66797,-23.48828 14.66797,-38.05078 V 127.1224 C 296.94395,122.20053 308.95957,104.28647 306.4791,85.259126 303.99473,66.235689 287.7877,52.00522 268.6002,52.001314 h -51.19922 v -12.5 c 0.0586,-10.511719 -4.09766,-20.605469 -11.53907,-28.03125 -7.4414,-7.4218751 -17.55078,-11.55468758 -28.0625,-11.46875008 H 89.002538 C 78.490818,-0.08462358 68.381448,4.0481889 60.940038,11.470064 53.498632,18.895845 49.342382,28.989595 49.400976,39.501314 v 12.5 H -1.7982427 c -19.1875003,0.0039 -35.3945313,14.234375 -37.8789073,33.257812 -2.480468,19.027344 9.535157,36.941404 28.078126,41.863274 z M 228.00254,407.00131 H 38.799413 c -17.097656,0 -30.3984367,-14.6875 -30.3984367,-33.5 v -245.5 H 258.40098 v 245.5 c 0,18.8125 -13.30078,33.5 -30.39844,33.5 z M 69.400978,39.501314 c -0.0664,-5.207031 1.98047,-10.21875 5.67578,-13.894531 3.69141,-3.675781 8.71484,-5.695313 13.92578,-5.605469 h 88.796872 c 5.21094,-0.08984 10.23438,1.929688 13.92579,5.605469 3.69531,3.671875 5.74218,8.6875 5.67578,13.894531 v 12.5 H 69.400978 Z m -71.1992207,32.5 H 268.6002 c 9.9414,0 18,8.058594 18,18 0,9.941406 -8.0586,17.999996 -18,17.999996 H -1.7982427 c -9.9414073,0 -18.0000003,-8.05859 -18.0000003,-17.999996 0,-9.941406 8.058593,-18 18.0000003,-18 z m 0,0"
|
||||
id="path68"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
d="m 133.40098,154.70443 c -5.52344,0 -10,4.47657 -10,10 v 189 c 0,5.51954 4.47656,10 10,10 5.52343,0 10,-4.48046 10,-10 v -189 c 0,-5.52343 -4.47657,-10 -10,-10 z m 0,0"
|
||||
id="path70"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3791"
|
||||
d="m -32.347465,34.215765 c -1.136967,-0.263564 -1.85228,-0.770702 -2.285878,-1.620623 -0.244025,-0.478328 -0.252697,-0.85963 -0.252697,-11.110455 V 10.869559 h 12.888149 12.8881497 l -0.0028,10.577396 c -0.0027,10.017853 -0.01562,10.604942 -0.243951,11.098129 -0.295923,0.639162 -0.8228787,1.147628 -1.5106647,1.457656 -0.486498,0.219295 -1.201157,0.235997 -10.870308,0.254055 -5.692267,0.01062 -10.46674,-0.0078 -10.609942,-0.04103 z m 4.983091,-3.760996 0.289334,-0.202658 v -8.369266 c 0,-8.31107 -0.0019,-8.370969 -0.270765,-8.614305 -0.358608,-0.324535 -1.182796,-0.324535 -1.541404,0 -0.268882,0.243336 -0.270765,0.303235 -0.270765,8.614305 v 8.369266 l 0.289334,0.202658 c 0.159133,0.11146 0.497593,0.202656 0.752133,0.202656 0.25454,0 0.593,-0.0912 0.752133,-0.202656 z m 6.118617,0 0.289333,-0.202658 v -8.369266 c 0,-8.31107 -0.0019,-8.370969 -0.270764,-8.614305 -0.358608,-0.324535 -1.182797,-0.324535 -1.541404,0 -0.268883,0.243336 -0.270765,0.303235 -0.270765,8.614305 v 8.369266 l 0.289333,0.202658 c 0.159134,0.11146 0.497593,0.202656 0.752133,0.202656 0.25454,0 0.593001,-0.0912 0.752134,-0.202656 z m 6.118616,0 0.289334,-0.202658 v -8.369266 c 0,-8.31107 -0.0019,-8.370969 -0.270765,-8.614305 -0.358608,-0.324535 -1.182796,-0.324535 -1.541404,0 -0.268882,0.243336 -0.270765,0.303235 -0.270765,8.614305 v 8.369266 l 0.289334,0.202658 c 0.159132,0.11146 0.497593,0.202656 0.752133,0.202656 0.254539,0 0.593,-0.0912 0.752133,-0.202656 z"
|
||||
style="fill:#b3b3b3;stroke-width:0.13018332" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3793"
|
||||
d="m -36.877845,8.8644087 c -0.540224,-0.2384603 -0.844092,-0.6148864 -0.931583,-1.1540278 -0.06403,-0.3945707 -0.01083,-0.5268359 0.386094,-0.9599757 l 0.460354,-0.5023539 14.753284,-0.034506 c 10.894353,-0.025481 14.8480787,0.00467 15.1156987,0.115259 0.791461,0.3270622 1.121594,1.3085049 0.671312,1.9957216 -0.490508,0.7486088 0.06973,0.7229272 -15.6494407,0.7173712 -11.671083,-0.00413 -14.489515,-0.037913 -14.805719,-0.1774884 z"
|
||||
style="fill:#b3b3b3;stroke-width:0.13018332" />
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3795"
|
||||
d="m -28.586127,3.581076 c 0.04302,-0.5947544 0.131512,-0.8607897 0.373651,-1.1233362 0.63458,-0.6880588 0.750066,-0.7010134 6.249312,-0.7010134 4.435032,0 5.151954,0.027404 5.540514,0.2117885 0.718185,0.3408012 0.959962,0.7509159 0.959962,1.6283345 V 4.360393 h -6.589905 -6.589904 z"
|
||||
style="fill:#b3b3b3;stroke-width:0.13018332" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.6 KiB |
@@ -230,10 +230,12 @@ core.config.ui.auto_scale.tip=It activates the auto screen scale factor ( {} ).
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.hdpi.tip=If improvements related to HDPI resolutions should be activated
|
||||
core.config.ui.max_displayed=Applications displayed
|
||||
core.config.ui.max_displayed.tip=Maximum number of applications displayed on the table
|
||||
core.config.ui.max_displayed.tip=Maximum number of applications displayed on the table. Use 0 for no limit.
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Scale
|
||||
core.config.ui.scale_factor.tip=It defines the interface display scaling factor (Qt). Raise the value to raise the interface size. Restart required.
|
||||
core.config.ui.style.default=Default
|
||||
core.config.ui.system_theme=System theme
|
||||
core.config.ui.system_theme.tip=If the system's theme/stylesheet should be merged with {app}'s
|
||||
core.config.ui.tray.default_icon=Default icon
|
||||
core.config.ui.tray.default_icon.tip=The default icon for {app} displayed on the tray
|
||||
core.config.ui.tray.updates_icon=Update icon
|
||||
@@ -298,20 +300,23 @@ manage_window.bt.installed.text=instal·lada
|
||||
manage_window.bt.installed.tooltip=Feu clic aquí per a mostrar les aplicacions instal·lades
|
||||
manage_window.bt.refresh.text=Refresca
|
||||
manage_window.bt.refresh.tooltip=Carrega novament les dades quant a les aplicacions instal·lades
|
||||
manage_window.bt.suggestions.text=Suggeriments
|
||||
manage_window.bt.suggestions.tooltip=Feu clic aquí per a mostrar alguns suggeriments d’aplicacions
|
||||
manage_window.bt.upgrade.text=Actualitza
|
||||
manage_window.bt.upgrade.tooltip=Actualitza totes les aplicacions marcades
|
||||
manage_window.bt_custom_actions.tip=Click here to show more actions
|
||||
manage_window.bt_settings.tooltip=Feu clic aquí per mostrar la configuració
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Aplicacions
|
||||
manage_window.checkbox.show_details=Mostra detalls
|
||||
manage_window.columns.installed=Installed
|
||||
manage_window.columns.latest_version=Versió més recent
|
||||
manage_window.columns.update=Voleu actualitzar?
|
||||
manage_window.label.apps_displayed.tip=Applications displayed / available
|
||||
manage_window.label.updates=Actualitzacions
|
||||
manage_window.name_filter.placeholder=Filtra per nom
|
||||
manage_window.name_filter.tooltip=Escriviu aquí per a filtrar aplicacions per nom
|
||||
manage_window.name_filter.button_tooltip=Click here to filter apps by name
|
||||
manage_window.name_filter.placeholder=Nom
|
||||
manage_window.name_filter.tooltip=Type and press ENTER to filter apps by name
|
||||
manage_window.settings.about=Quant a
|
||||
manage_window.status.downgrading=S’està revertint
|
||||
manage_window.status.filtering=S’està filtrant
|
||||
@@ -352,9 +357,9 @@ popup.history.selected.tooltip=Versió actual
|
||||
popup.history.title=Historial
|
||||
popup.root.bad_password.body=La contrasenya és incorrecta
|
||||
popup.root.bad_password.last_try=S’han acabat els intents. S’ha cancel·lat l’operació.
|
||||
popup.root.bad_password.title=Error
|
||||
popup.root.continue=continuar
|
||||
popup.root.title=Requireix la vostra contrasenya per a continuar
|
||||
popup.root.continue=Continuar
|
||||
popup.root.msg=Requireix la vostra contrasenya per a continuar
|
||||
popup.root.title=Autenticació
|
||||
popup.screenshots.no_screenshot.body=no s’han pogut recuperar captures de pantalla del {}
|
||||
prepare.bt_hide_details=Hide details
|
||||
prepare.bt_icon.no_output=There are no progress details for this task to be displayed
|
||||
@@ -369,8 +374,7 @@ repository=dipòsit
|
||||
screenshots.bt_back.label=anterior
|
||||
screenshots.bt_next.label=següent
|
||||
screenshots.download.no_content=No hi ha contingut a mostrar
|
||||
screenshots.download.no_response=No s’ha trobat la imatge
|
||||
screenshots.download.running=s’està baixant la imatge
|
||||
screenshots.image.loading=Loading
|
||||
settings=configuració
|
||||
settings.changed.success.reboot=Restart now ?
|
||||
settings.changed.success.warning=Settings successfully changed. Some of them will only take effect after a restart.
|
||||
@@ -403,6 +407,7 @@ view.components.file_chooser.placeholder=Feu clic aquí per seleccionar
|
||||
warning=avís
|
||||
warning.update_available=There is a new {} version available ({}). Check out the news at {}.
|
||||
welcome=us donem la benvinguda
|
||||
window_manage.input_search.placeholder=Cerca
|
||||
window_manage.input_search.tooltip=Escriviu i premeu Intro per a cercar aplicacions
|
||||
window_manage.search_bar.button_tooltip=Click here to search for applications
|
||||
window_manage.search_bar.placeholder=Cerca
|
||||
window_manage.search_bar.tooltip=Escriviu i premeu Intro per a cercar aplicacions
|
||||
yes=sí
|
||||
@@ -229,10 +229,12 @@ core.config.ui.auto_scale.tip=Aktiviert den automatischen Skalierungsfaktor ({})
|
||||
core.config.ui.hdpi=HiDPI
|
||||
core.config.ui.hdpi.tip=Falls aktiviert werden Optimierungen für hochauflösende Displays vorgenommen
|
||||
core.config.ui.max_displayed=Anzahl der Anwendungen
|
||||
core.config.ui.max_displayed.tip=Maximale Anzahl von Anwendungen, die in der Tabelle angezeigt werden
|
||||
core.config.ui.max_displayed.tip=Maximale Anzahl von Anwendungen, die in der Tabelle angezeigt werden. Use 0 for no limit.
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Scale
|
||||
core.config.ui.scale_factor.tip=It defines the interface display scaling factor (Qt). Raise the value to raise the interface size. Restart required.
|
||||
core.config.ui.style.default=Default
|
||||
core.config.ui.system_theme=System theme
|
||||
core.config.ui.system_theme.tip=If the system's theme/stylesheet should be merged with {app}'s
|
||||
core.config.ui.tray.default_icon=Anwendungs-Icon
|
||||
core.config.ui.tray.default_icon.tip=The default icon for {app} displayed on the tray
|
||||
core.config.ui.tray.updates_icon=Icon bei Updates
|
||||
@@ -297,20 +299,23 @@ manage_window.bt.installed.text=installiert
|
||||
manage_window.bt.installed.tooltip=Installierte Anwendungen anzeigen
|
||||
manage_window.bt.refresh.text=Aktualisieren
|
||||
manage_window.bt.refresh.tooltip=Informationen über installierte Anwendungen aktualisieren
|
||||
manage_window.bt.suggestions.text=Vorschläge
|
||||
manage_window.bt.suggestions.tooltip=Vorschläge für Apps anzeigen
|
||||
manage_window.bt.upgrade.text=Upgraden
|
||||
manage_window.bt.upgrade.tooltip=Alle ausgewählten Anwendungen upgraden
|
||||
manage_window.bt_custom_actions.tip=Click here to show more actions
|
||||
manage_window.bt_settings.tooltip=Einstellungen anpassen
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.checkbox.show_details=Details anzeigen
|
||||
manage_window.columns.installed=Installed
|
||||
manage_window.columns.latest_version=Neueste Version
|
||||
manage_window.columns.update=Upgraden?
|
||||
manage_window.label.apps_displayed.tip=Applications displayed / available
|
||||
manage_window.label.updates=Updates
|
||||
manage_window.name_filter.placeholder=Nach Name filtern
|
||||
manage_window.name_filter.tooltip=Apps nach Name filtern
|
||||
manage_window.name_filter.button_tooltip=Click here to filter apps by name
|
||||
manage_window.name_filter.placeholder=Name
|
||||
manage_window.name_filter.tooltip=Type and press ENTER to filter apps by name
|
||||
manage_window.settings.about=Über
|
||||
manage_window.status.downgrading=Downgraden
|
||||
manage_window.status.filtering=Filtern
|
||||
@@ -351,9 +356,9 @@ popup.history.selected.tooltip=Aktuelle Version
|
||||
popup.history.title=Verlauf
|
||||
popup.root.bad_password.body=Ungültiges Passwort
|
||||
popup.root.bad_password.last_try=Zu viele Fehlversuche. Aktion abgebrochen.
|
||||
popup.root.bad_password.title=Fehler
|
||||
popup.root.continue=Fortfahren
|
||||
popup.root.title=Zum Fortfahren wird das Passwort benötigt.
|
||||
popup.root.msg=Zum Fortfahren wird das Passwort benötigt.
|
||||
popup.root.title=Authentifizierung
|
||||
popup.screenshots.no_screenshot.body={} Screenshots konnten nicht heruntergeladen werden.
|
||||
prepare.bt_hide_details=Hide details
|
||||
prepare.bt_icon.no_output=There are no progress details for this task to be displayed
|
||||
@@ -369,7 +374,7 @@ screenshots.bt_back.label=Zurück
|
||||
screenshots.bt_next.label=Fortfahren
|
||||
screenshots.download.no_content=Kein Inhalt
|
||||
screenshots.download.no_response=Screenshot nicht gefunden
|
||||
screenshots.download.running=Screenshot herunterladen
|
||||
screenshots.image.loading=Loading
|
||||
settings=Einstellungen
|
||||
settings.changed.success.reboot=Anwendung neustarten?
|
||||
settings.changed.success.warning=Einstellungen gespeichert. Einige werden erst beim nächsten Anwedungsstart sichtbar.
|
||||
@@ -402,6 +407,7 @@ view.components.file_chooser.placeholder=Auswählen
|
||||
warning=Warnung
|
||||
warning.update_available=There is a new {} version available ({}). Check out the news at {}.
|
||||
welcome=Willkommen
|
||||
window_manage.input_search.placeholder=Suchbegriff
|
||||
window_manage.input_search.tooltip=Suchbegriff eingeben und Enter drücken, um zu suchen
|
||||
window_manage.search_bar.button_tooltip=Click here to search for applications
|
||||
window_manage.search_bar.placeholder=Suchbegriff
|
||||
window_manage.search_bar.tooltip=Suchbegriff eingeben und Enter drücken, um zu suchen
|
||||
yes=Ja
|
||||
@@ -228,11 +228,13 @@ core.config.ui.auto_scale.tip=It activates the auto screen scale factor ( {} ).
|
||||
core.config.ui.auto_scale=Auto scale
|
||||
core.config.ui.hdpi.tip=If improvements related to HDPI resolutions should be activated
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.max_displayed.tip=Maximum number of applications displayed on the table
|
||||
core.config.ui.max_displayed.tip=Maximum number of applications displayed on the table. Use 0 for no limit.
|
||||
core.config.ui.max_displayed=Applications displayed
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Scale
|
||||
core.config.ui.scale_factor.tip=It defines the interface display scaling factor (Qt). Raise the value to raise the interface size. Restart required.
|
||||
core.config.ui.style.default=Default
|
||||
core.config.ui.system_theme=System theme
|
||||
core.config.ui.system_theme.tip=If the system's theme/stylesheet should be merged with {app}'s
|
||||
core.config.ui.tray.default_icon.tip=The default icon for {app} displayed on the tray
|
||||
core.config.ui.tray.default_icon=Default icon
|
||||
core.config.ui.tray.updates_icon.tip=The displayed icon when there are updates available
|
||||
@@ -298,20 +300,23 @@ manage_window.bt.installed.text=installed
|
||||
manage_window.bt.installed.tooltip=Click here to show the installed applications
|
||||
manage_window.bt.refresh.text=Refresh
|
||||
manage_window.bt.refresh.tooltip=Reload the data about installed applications
|
||||
manage_window.bt.suggestions.text=Suggestions
|
||||
manage_window.bt.suggestions.tooltip=Click here to show some applications suggestions
|
||||
manage_window.bt.upgrade.text=Upgrade
|
||||
manage_window.bt.upgrade.tooltip=Upgrade all checked applications
|
||||
manage_window.bt_custom_actions.tip=Click here to show more actions
|
||||
manage_window.bt_settings.tooltip=Click here to display the settings
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.checkbox.show_details=Show details
|
||||
manage_window.columns.installed=Installed
|
||||
manage_window.columns.latest_version=Latest Version
|
||||
manage_window.columns.update=Upgrade ?
|
||||
manage_window.label.apps_displayed.tip=Applications displayed / available
|
||||
manage_window.label.updates=Updates
|
||||
manage_window.name_filter.placeholder=Filter by name
|
||||
manage_window.name_filter.tooltip=Type here to filter apps by name
|
||||
manage_window.name_filter.button_tooltip=Click here to filter apps by name
|
||||
manage_window.name_filter.placeholder=Name
|
||||
manage_window.name_filter.tooltip=Type and press ENTER to filter apps by name
|
||||
manage_window.settings.about=About
|
||||
manage_window.status.downgrading=Downgrading
|
||||
manage_window.status.filtering=Filtering
|
||||
@@ -321,7 +326,7 @@ manage_window.status.ignore_updates_reverse=Reverting updates ignored from {}
|
||||
manage_window.status.info=Retrieving information
|
||||
manage_window.status.installed=Loading installed
|
||||
manage_window.status.installing=Installing
|
||||
manage_window.status.refreshing=Refreshing
|
||||
manage_window.status.refreshing=Refreshing apps
|
||||
manage_window.status.refreshing_app=Refreshing
|
||||
manage_window.status.running_app=Launching {}
|
||||
manage_window.status.screenshots=Retrieving {} screenshots
|
||||
@@ -352,9 +357,9 @@ popup.history.selected.tooltip=Current version
|
||||
popup.history.title=History
|
||||
popup.root.bad_password.body=Wrong password
|
||||
popup.root.bad_password.last_try=Attempts finished. Action cancelled.
|
||||
popup.root.bad_password.title=Error
|
||||
popup.root.continue=continue
|
||||
popup.root.title=Requires your password to continue
|
||||
popup.root.continue=Continue
|
||||
popup.root.msg=Requires your password to continue
|
||||
popup.root.title=Authentication
|
||||
popup.screenshots.no_screenshot.body=it was not possible to retrieve {} screenshots
|
||||
prepare.bt_hide_details=Hide details
|
||||
prepare.bt_icon.no_output=There are no progress details for this task to be displayed
|
||||
@@ -370,7 +375,7 @@ screenshots.bt_back.label=previous
|
||||
screenshots.bt_next.label=next
|
||||
screenshots.download.no_content=No content to display
|
||||
screenshots.download.no_response=Image not found
|
||||
screenshots.download.running=downloading image
|
||||
screenshots.image.loading=Loading
|
||||
settings.changed.success.reboot=Restart now ?
|
||||
settings.changed.success.warning=Settings successfully changed. Some of them will only take effect after a restart.
|
||||
settings.error=It was not possible to properly change all the settings
|
||||
@@ -403,6 +408,7 @@ view.components.file_chooser.placeholder=Click here to select
|
||||
warning=warning
|
||||
welcome=welcome
|
||||
warning.update_available=There is a new {} version available ({}). Check out the news at {}.
|
||||
window_manage.input_search.placeholder=Search
|
||||
window_manage.input_search.tooltip=Type and press ENTER to search for applications
|
||||
window_manage.search_bar.button_tooltip=Click here to search for applications
|
||||
window_manage.search_bar.placeholder=Search
|
||||
window_manage.search_bar.tooltip=Type and press ENTER to search for applications
|
||||
yes=yes
|
||||
|
||||
@@ -98,7 +98,7 @@ amount=cantidad
|
||||
and=y
|
||||
any=cualquiera
|
||||
app.name=nombre de la aplicación
|
||||
applications=applications
|
||||
applications=aplicaciones
|
||||
ask=preguntar
|
||||
ask.continue=¿Quiere continuar?
|
||||
author=autor
|
||||
@@ -230,10 +230,12 @@ core.config.ui.auto_scale.tip=Activa el factor de escala de pantalla automática
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.hdpi.tip=Si se deben activar las mejoras relacionadas con las resoluciones HDPI
|
||||
core.config.ui.max_displayed=Aplicaciones mostradas
|
||||
core.config.ui.max_displayed.tip=Número máximo de aplicaciones que se muestran en la tabla
|
||||
core.config.ui.max_displayed.tip=Número máximo de aplicaciones que se muestran en la tabla. Utilice 0 para no tener límite.
|
||||
core.config.ui.qt_style.tooltip=Estilo QT que se utilizará. Requiere reiniciar para que surta efecto.
|
||||
core.config.ui.scale_factor=Escala
|
||||
core.config.ui.scale_factor.tip=Define el factor de escala de visualización de la interfaz (Qt). Aumente el valor para aumentar el tamaño de la interfaz. Reinicio requerido.
|
||||
core.config.ui.style.default=Predeterminado
|
||||
core.config.ui.system_theme=Tema del sistema
|
||||
core.config.ui.system_theme.tip=Si el tema/hoja de estilo del sistema debe fusionarse con de {app}
|
||||
core.config.ui.tray.default_icon=Ícono predeterminado
|
||||
core.config.ui.tray.default_icon.tip=El icono predeterminado que se muestra en la bandeja
|
||||
core.config.ui.tray.updates_icon=Icono de actualización
|
||||
@@ -274,6 +276,7 @@ locale.ca=catalán
|
||||
locale.de=alemán
|
||||
locale.en=inglés
|
||||
locale.es=español
|
||||
locale.fr=francés
|
||||
locale.it=italiano
|
||||
locale.pt=portugués
|
||||
locale.ru=ruso
|
||||
@@ -298,20 +301,23 @@ manage_window.bt.installed.text=instaladas
|
||||
manage_window.bt.installed.tooltip=Pulse aquí para mostrar las aplicaciones instaladas
|
||||
manage_window.bt.refresh.text=Recargar
|
||||
manage_window.bt.refresh.tooltip=Recarga los datos sobre las aplicaciones instaladas
|
||||
manage_window.bt.suggestions.text=Sugerencias
|
||||
manage_window.bt.suggestions.tooltip=Pulse aquí para mostrar algunas sugerencias de aplicaciones
|
||||
manage_window.bt.upgrade.text=Actualizar
|
||||
manage_window.bt.upgrade.tooltip=Actualiza todas las aplicaciones marcadas
|
||||
manage_window.bt_custom_actions.tip=Pulse aquí para mostrar más acciones
|
||||
manage_window.bt_settings.tooltip=Pulse aquí para exhibir las configuraciones
|
||||
manage_window.bt_themes.tip=Pulse aquí para elegir un tema
|
||||
manage_window.bt_themes.option.invalid=Inválido
|
||||
manage_window.checkbox.only_apps=Aplicaciones
|
||||
manage_window.checkbox.show_details=Mostrar detalles
|
||||
manage_window.columns.installed=Instaladas
|
||||
manage_window.columns.latest_version=Versión más reciente
|
||||
manage_window.columns.update=¿Quiere actualizar?
|
||||
manage_window.label.apps_displayed.tip=Applicaciones mostradas / disponibles
|
||||
manage_window.label.updates=Actualizaciones
|
||||
manage_window.name_filter.placeholder=Filtrar por nombre
|
||||
manage_window.name_filter.tooltip=Escriba aquí para filtrar aplicaciones por nombre
|
||||
manage_window.name_filter.button_tooltip=Haga clic aquí para filtrar aplicaciones por nombre
|
||||
manage_window.name_filter.placeholder=Nombre
|
||||
manage_window.name_filter.tooltip=Escriba y oprima Intro para filtrar aplicaciones por nombre
|
||||
manage_window.settings.about=Acerca de
|
||||
manage_window.status.downgrading=Revirtiendo
|
||||
manage_window.status.filtering=Filtrando
|
||||
@@ -321,7 +327,7 @@ manage_window.status.ignore_updates_reverse=Revertir actualizaciones ignoradas d
|
||||
manage_window.status.info=Obteniendo información
|
||||
manage_window.status.installed=Cargando instalados
|
||||
manage_window.status.installing=Instalando
|
||||
manage_window.status.refreshing=Recargando
|
||||
manage_window.status.refreshing=Cargando applicaciones
|
||||
manage_window.status.refreshing_app=Actualizando
|
||||
manage_window.status.running_app=Ejecutando {}
|
||||
manage_window.status.screenshots=Obteniendo imágenes de {}
|
||||
@@ -352,9 +358,9 @@ popup.history.selected.tooltip=Versión actual
|
||||
popup.history.title=Histórico
|
||||
popup.root.bad_password.body=Contraseña incorrecta
|
||||
popup.root.bad_password.last_try=Intentos finalizados. Acción cancelada.
|
||||
popup.root.bad_password.title=Error
|
||||
popup.root.continue=continuar
|
||||
popup.root.title=Proporcione su contraseña para continuar
|
||||
popup.root.continue=Continuar
|
||||
popup.root.msg=Proporcione su contraseña para continuar
|
||||
popup.root.title=Autenticación
|
||||
popup.screenshots.no_screenshot.body=No fue posible recuperar las fotos de {}
|
||||
prepare.bt_hide_details=Ocultar detalles
|
||||
prepare.bt_icon.no_output=No hay detalles del progreso de esta tarea para mostrar
|
||||
@@ -371,7 +377,7 @@ screenshots.bt_back.label=anterior
|
||||
screenshots.bt_next.label=siguiente
|
||||
screenshots.download.no_content=No hay contenido para mostrar
|
||||
screenshots.download.no_response=No se encontró la imagen
|
||||
screenshots.download.running=descargando imagen
|
||||
screenshots.image.loading=Cargando
|
||||
settings=configuraciones
|
||||
settings.changed.success.reboot=¿Reiniciar ahora?
|
||||
settings.changed.success.warning=Las configuraciones se cambiaron con éxito. Algunas solo tendrán efecto después del reinicio.
|
||||
@@ -404,6 +410,7 @@ view.components.file_chooser.placeholder=Pulse aquí para seleccionar
|
||||
warning=aviso
|
||||
warning.update_available=Hay una nueva versión de {} disponible ({}). Vea las novedades en {}.
|
||||
welcome=bienvenido
|
||||
window_manage.input_search.placeholder=Buscar
|
||||
window_manage.input_search.tooltip=Escriba y oprima Intro para buscar aplicaciones
|
||||
window_manage.search_bar.button_tooltip=Haga clic aquí para buscar aplicaciones
|
||||
window_manage.search_bar.placeholder=Buscar
|
||||
window_manage.search_bar.tooltip=Escriba y oprima Intro para buscar aplicaciones
|
||||
yes=sí
|
||||
@@ -230,9 +230,9 @@ core.config.ui.hdpi.tip=Si les améliorations liées à HDPI doivent être activ
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.max_displayed.tip=Nombre maximal d'application affichées dans le tableau
|
||||
core.config.ui.max_displayed=Applications affichées
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Mettre à l'échelle
|
||||
core.config.ui.scale_factor.tip=Définit le facteur de mise à l'échelle (Qt). L'augmenter agrandit l'interface. Redémarrage nécessaire.
|
||||
core.config.ui.style.default=Défaut
|
||||
core.config.ui.tray.default_icon.tip=Icône par défaut pour {app} dans la barre système
|
||||
core.config.ui.tray.default_icon=Icône par dafaut
|
||||
core.config.ui.tray.updates_icon.tip=Icône affichée quand il y a des mises à jour disponibles
|
||||
@@ -303,6 +303,8 @@ manage_window.bt.upgrade.text=Mettre à jour
|
||||
manage_window.bt.upgrade.tooltip=Mettre à jour toutes les applications sélectionnées
|
||||
manage_window.bt_custom_actions.tip=Cliquez ici pour plus d'actions
|
||||
manage_window.bt_settings.tooltip=Cliquez ici pour afficher les paramètres
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.checkbox.show_details=Détails
|
||||
manage_window.columns.installed=Installé
|
||||
|
||||
@@ -230,10 +230,12 @@ core.config.ui.auto_scale.tip=It activates the auto screen scale factor ( {} ).
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.hdpi.tip=If improvements related to HDPI resolutions should be activated
|
||||
core.config.ui.max_displayed=Applications displayed
|
||||
core.config.ui.max_displayed.tip=Maximum number of applications displayed on the table
|
||||
core.config.ui.max_displayed.tip=Maximum number of applications displayed on the table. Use 0 for no limit.
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Scale
|
||||
core.config.ui.scale_factor.tip=It defines the interface display scaling factor (Qt). Raise the value to raise the interface size. Restart required.
|
||||
core.config.ui.style.default=Default
|
||||
core.config.ui.system_theme=System theme
|
||||
core.config.ui.system_theme.tip=If the system's theme/stylesheet should be merged with {app}'s
|
||||
core.config.ui.tray.default_icon=Default icon
|
||||
core.config.ui.tray.default_icon.tip=The default icon for {app} displayed on the tray
|
||||
core.config.ui.tray.updates_icon=Update icon
|
||||
@@ -299,20 +301,23 @@ manage_window.bt.installed.text=installato
|
||||
manage_window.bt.installed.tooltip=Clicca qui per mostrare le applicazioni installate
|
||||
manage_window.bt.refresh.text=Refresh
|
||||
manage_window.bt.refresh.tooltip=Ricarica i dati sulle applicazioni installate
|
||||
manage_window.bt.suggestions.text=Suggerimenti
|
||||
manage_window.bt.suggestions.tooltip=Clicca qui per mostrare alcuni suggerimenti sulle applicazioni
|
||||
manage_window.bt.upgrade.text=Aggiorna
|
||||
manage_window.bt.upgrade.tooltip=Aggiorna tutte le applicazioni controllate
|
||||
manage_window.bt_custom_actions.tip=Click here to show more actions
|
||||
manage_window.bt_settings.tooltip=Fai clic qui per visualizzare le impostazioni
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Apps
|
||||
manage_window.checkbox.show_details=Mostra dettagli
|
||||
manage_window.columns.installed=Installed
|
||||
manage_window.columns.latest_version=Ultima Versione
|
||||
manage_window.columns.update=Upgrade ?
|
||||
manage_window.label.apps_displayed.tip=Applications displayed / available
|
||||
manage_window.label.updates=Aggiornamenti
|
||||
manage_window.name_filter.button_tooltip=Click here to filter apps by name
|
||||
manage_window.name_filter.placeholder=Filtra per nome
|
||||
manage_window.name_filter.tooltip=Digita qui per filtrare le app per nome
|
||||
manage_window.name_filter.tooltip=Type and press ENTER to filter apps by name
|
||||
manage_window.settings.about=Informazione su
|
||||
manage_window.status.downgrading=Downgrading
|
||||
manage_window.status.filtering=Filtraggio
|
||||
@@ -353,9 +358,9 @@ popup.history.selected.tooltip=Version corrente
|
||||
popup.history.title=Cronlogia
|
||||
popup.root.bad_password.body=Password errata
|
||||
popup.root.bad_password.last_try=Tentativi conclusi. Azione annullata.
|
||||
popup.root.bad_password.title=Errore
|
||||
popup.root.continue=continuare
|
||||
popup.root.title=Richiede la tua password per continuare
|
||||
popup.root.continue=Continuare
|
||||
popup.root.msg=Richiede la tua password per continuare
|
||||
popup.root.title=Autenticazione
|
||||
popup.screenshots.no_screenshot.body=non è stato possibile recuperare {} schermate
|
||||
prepar_panel.bt_skip.label=saltare
|
||||
prepare.bt_hide_details=Hide details
|
||||
@@ -372,7 +377,7 @@ screenshots.bt_back.label=precedente
|
||||
screenshots.bt_next.label=prossimo
|
||||
screenshots.download.no_content=Nessun contenuto da visualizzare
|
||||
screenshots.download.no_response=Immagine non trovata
|
||||
screenshots.download.running=scaricare l'immagine
|
||||
screenshots.image.loading=Loading
|
||||
settings=impostazioni
|
||||
settings.changed.success.reboot=Restart now ?
|
||||
settings.changed.success.warning=Settings successfully changed. Some of them will only take effect after a restart.
|
||||
@@ -405,6 +410,7 @@ view.components.file_chooser.placeholder=Fai clic qui per selezionare
|
||||
warning=Avviso
|
||||
warning.update_available=There is a new {} version available ({}). Check out the news at {}.
|
||||
welcome=benvenuto
|
||||
window_manage.input_search.placeholder=Cerca
|
||||
window_manage.input_search.tooltip=Digitare e premere INVIO per cercare applicazioni
|
||||
window_manage.search_bar.button_tooltip=Click here to search for applications
|
||||
window_manage.search_bar.placeholder=Cerca
|
||||
window_manage.search_bar.tooltip=Digitare e premere INVIO per cercare applicazioni
|
||||
yes=si
|
||||
@@ -228,11 +228,13 @@ core.config.ui.auto_scale.tip=Ativa o fator de escala automático ( {} ). Corrig
|
||||
core.config.ui.auto_scale=Escala automática
|
||||
core.config.ui.hdpi.tip=Se melhorias para resoluções HDPI devem ser ativadas
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.max_displayed.tip=Número máximo de aplicativos exibidos na tabela
|
||||
core.config.ui.max_displayed.tip=Número máximo de aplicativos exibidos na tabela. Use 0 para não haver limite.
|
||||
core.config.ui.max_displayed=Aplicativos exibidos
|
||||
core.config.ui.qt_style.tooltip=Estilo QT a ser utilizado. Requer reinicialização para surtir efeito.
|
||||
core.config.ui.scale_factor=Escala
|
||||
core.config.ui.scale_factor.tip=Define o fator de escala de exibição da interface (Qt). Aumente o valor para aumentar o tamanho da interface. Reinicialização necessária.
|
||||
core.config.ui.style.default=Padrão
|
||||
core.config.ui.system_theme=Tema do sistema
|
||||
core.config.ui.system_theme.tip=Se o tema/folha de estilo do sistema deve ser mesclado com o do {app}
|
||||
core.config.ui.tray.default_icon.tip=O ícone padrão exibido na bandeja
|
||||
core.config.ui.tray.default_icon=Ícone padrão
|
||||
core.config.ui.tray.updates_icon.tip=O ícone exibido quando há atualizações disponíveis
|
||||
@@ -273,6 +275,7 @@ locale.ca=catalão
|
||||
locale.de=alemão
|
||||
locale.en=inglês
|
||||
locale.es=espanhol
|
||||
locale.fr=francês
|
||||
locale.it=italiano
|
||||
locale.pt=português
|
||||
locale.ru=russo
|
||||
@@ -297,20 +300,23 @@ manage_window.bt.installed.text=instalados
|
||||
manage_window.bt.installed.tooltip=Clique aqui para exibir os aplicativos instalados
|
||||
manage_window.bt.refresh.text=Recarregar
|
||||
manage_window.bt.refresh.tooltip=Recarrega os dados sobre os aplicativos instalados
|
||||
manage_window.bt.suggestions.text=Sugestões
|
||||
manage_window.bt.suggestions.tooltip=Clique aqui para exibir algumas sugestões de aplicativos
|
||||
manage_window.bt.upgrade.text=Atualizar
|
||||
manage_window.bt.upgrade.tooltip=Atualiza todos os aplicativos marcados
|
||||
manage_window.bt_custom_actions.tip=Clique aqui para exibir mais ações
|
||||
manage_window.bt_settings.tooltip=Clique aqui para exibir as configurações
|
||||
manage_window.bt_themes.tip=Clique aqui para escolher um tema
|
||||
manage_window.bt_themes.option.invalid=Inválido
|
||||
manage_window.checkbox.only_apps=Aplicativos
|
||||
manage_window.checkbox.show_details=Mostrar detalhes
|
||||
manage_window.columns.installed=Instalado
|
||||
manage_window.columns.latest_version=Última Versão
|
||||
manage_window.columns.update=Atualizar ?
|
||||
manage_window.label.apps_displayed.tip=Aplicações exibidas / disponíveis
|
||||
manage_window.label.updates=Atualizações
|
||||
manage_window.name_filter.button_tooltip=Clique aqui para filtrar aplicativos por nome
|
||||
manage_window.name_filter.placeholder=Filtrar por nome
|
||||
manage_window.name_filter.tooltip=Digite aqui para filtrar aplicativos pelo nome
|
||||
manage_window.name_filter.tooltip=Digite e pressione ENTER para filtrar aplicativos pelo nome
|
||||
manage_window.settings.about=Sobre
|
||||
manage_window.status.downgrading=Revertendo
|
||||
manage_window.status.filtering=Filtrando
|
||||
@@ -320,7 +326,7 @@ manage_window.status.ignore_updates_reverse=Revertendo atualizações ignoradas
|
||||
manage_window.status.info=Obtendo informação
|
||||
manage_window.status.installed=Carregando instalados
|
||||
manage_window.status.installing=Instalando
|
||||
manage_window.status.refreshing=Recarregando
|
||||
manage_window.status.refreshing=Carregando aplicativos
|
||||
manage_window.status.refreshing_app=Atualizando
|
||||
manage_window.status.running_app=Iniciando {}
|
||||
manage_window.status.screenshots=Obtendo imagens de {}
|
||||
@@ -351,9 +357,9 @@ popup.history.selected.tooltip=Versão atual
|
||||
popup.history.title=Histórico
|
||||
popup.root.bad_password.body=Senha incorreta
|
||||
popup.root.bad_password.last_try=Tentativas finalizadas. Ação cancelada.
|
||||
popup.root.bad_password.title=Erro
|
||||
popup.root.continue=prosseguir
|
||||
popup.root.title=Requer sua senha para prosseguir
|
||||
popup.root.continue=Prosseguir
|
||||
popup.root.msg=Requer sua senha para prosseguir
|
||||
popup.root.title=Autenticação
|
||||
popup.screenshots.no_screenshot.body=Não foi possível obter as fotos de {}
|
||||
prepare.bt_hide_details=Ocultar detalhes
|
||||
prepare.bt_icon.no_output=Não existe detalhes do progresso dessa tarefa para ser exibido
|
||||
@@ -365,11 +371,11 @@ proceed=continuar
|
||||
publisher.verified=verificado
|
||||
publisher=publicador
|
||||
repository=repositório
|
||||
screenshots.download.running=baixando imagem
|
||||
screenshots.bt_back.label=anterior
|
||||
screenshots.bt_next.label=próxima
|
||||
screenshots.download.no_content=Sem conteúdo para exibir
|
||||
screenshots.download.no_response=Imagem não encontrada
|
||||
screenshots.image.loading=Carregando
|
||||
settings.changed.success.reboot=Reiniciar agora ?
|
||||
settings.changed.success.warning=Configurações alteradas com sucesso ! Algumas delas só surtirão após a reinicialização.
|
||||
settings.error=Não foi possível alterar todas as configurações adequadamente
|
||||
@@ -402,6 +408,7 @@ view.components.file_chooser.placeholder=Clique aqui para selecionar
|
||||
warning=aviso
|
||||
warning.update_available=Há uma nova versão do {} disponível ({}). Confira as novidades em {}
|
||||
welcome=bem vindo
|
||||
window_manage.input_search.placeholder=Buscar
|
||||
window_manage.input_search.tooltip=Digite e pressione ENTER para buscar aplicativos
|
||||
window_manage.search_bar.button_tooltip=Clique aqui para buscar aplicativos
|
||||
window_manage.search_bar.placeholder=Buscar
|
||||
window_manage.search_bar.tooltip=Digite e pressione ENTER para buscar aplicativos
|
||||
yes=sim
|
||||
@@ -229,10 +229,12 @@ core.config.ui.auto_scale.tip=Он активирует автоматическ
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.hdpi.tip=Если улучшения, связанные с разрешением HDPI должны быть активированы
|
||||
core.config.ui.max_displayed=Отображаемые приложения
|
||||
core.config.ui.max_displayed.tip=Максимальное количество приложений, отображаемых в таблице
|
||||
core.config.ui.max_displayed.tip=Максимальное количество приложений, отображаемых в таблице. Use 0 for no limit.
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Scale
|
||||
core.config.ui.scale_factor.tip=It defines the interface display scaling factor (Qt). Raise the value to raise the interface size. Restart required.
|
||||
core.config.ui.style.default=Default
|
||||
core.config.ui.system_theme=System theme
|
||||
core.config.ui.system_theme.tip=If the system's theme/stylesheet should be merged with {app}'s
|
||||
core.config.ui.tray.default_icon=Значок по умолчанию
|
||||
core.config.ui.tray.default_icon.tip=Значок по умолчанию для {app}, отображаемый в трее
|
||||
core.config.ui.tray.updates_icon=Значок обновления
|
||||
@@ -297,20 +299,23 @@ manage_window.bt.installed.text=Установленные
|
||||
manage_window.bt.installed.tooltip=Нажмите здесь, чтобы показать установленные приложения
|
||||
manage_window.bt.refresh.text=Обновить список
|
||||
manage_window.bt.refresh.tooltip=Перезагрузите данные об установленных приложениях
|
||||
manage_window.bt.suggestions.text=Рекомендации
|
||||
manage_window.bt.suggestions.tooltip=Нажмите здесь, чтобы показать некоторые рекомендаваные приложения
|
||||
manage_window.bt.upgrade.text=Обновление
|
||||
manage_window.bt.upgrade.tooltip=Обновить все выбранные приложения
|
||||
manage_window.bt_custom_actions.tip=Нажмите здесь, чтобы показать больше действий
|
||||
manage_window.bt_settings.tooltip=Нажмите здесь, чтобы отобразить настройки
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Приложения
|
||||
manage_window.checkbox.show_details=Показать детали
|
||||
manage_window.columns.installed=Installed
|
||||
manage_window.columns.latest_version=Последняя версия
|
||||
manage_window.columns.update=Обновить?
|
||||
manage_window.label.apps_displayed.tip=Applications displayed / available
|
||||
manage_window.label.updates=Обновления
|
||||
manage_window.name_filter.button_tooltip=Click here to filter apps by name
|
||||
manage_window.name_filter.placeholder=Фильтр по имени
|
||||
manage_window.name_filter.tooltip=Введите здесь, чтобы фильтровать приложения по имени
|
||||
manage_window.name_filter.tooltip=Type and press ENTER to filter apps by name
|
||||
manage_window.settings.about=О программе
|
||||
manage_window.status.downgrading=Откатить
|
||||
manage_window.status.filtering=Фильтрация
|
||||
@@ -351,9 +356,9 @@ popup.history.selected.tooltip=Текущая версия
|
||||
popup.history.title=История версий
|
||||
popup.root.bad_password.body=Неправильный пароль
|
||||
popup.root.bad_password.last_try=Закончились попытки. Отмена действия.
|
||||
popup.root.bad_password.title=Ошибка
|
||||
popup.root.continue=Продолжить
|
||||
popup.root.title=Требуется ваш пароль, чтобы продолжить
|
||||
popup.root.msg=Требуется ваш пароль, чтобы продолжить
|
||||
popup.root.title=Аутентификация
|
||||
popup.screenshots.no_screenshot.body=не удалось получить скриншоты {}
|
||||
prepare.bt_hide_details=Hide details
|
||||
prepare.bt_icon.no_output=There are no progress details for this task to be displayed
|
||||
@@ -369,7 +374,7 @@ screenshots.bt_back.label=Предыдущий
|
||||
screenshots.bt_next.label=Следующий
|
||||
screenshots.download.no_content=Нет материалов для отображени
|
||||
screenshots.download.no_response=Изображение не найдено
|
||||
screenshots.download.running=Загрузка изображения
|
||||
screenshots.image.loading=Loading
|
||||
settings=Настройки
|
||||
settings.changed.success.reboot=Перезапустить сейчас?
|
||||
settings.changed.success.warning=Настройки успешно изменены. Некоторые из них вступят в силу только после перезагрузки.
|
||||
@@ -402,6 +407,7 @@ view.components.file_chooser.placeholder=Нажмите здесь, чтобы
|
||||
warning=Предупреждение
|
||||
warning.update_available=There is a new {} version available ({}). Check out the news at {}.
|
||||
welcome=Добро пожаловать!
|
||||
window_manage.input_search.placeholder=Поиск
|
||||
window_manage.input_search.tooltip=Введите и нажмите ENTER для поиска приложений
|
||||
window_manage.search_bar.button_tooltip=Click here to search for applications
|
||||
window_manage.search_bar.placeholder=Поиск
|
||||
window_manage.search_bar.tooltip=Введите и нажмите ENTER для поиска приложений
|
||||
yes=Да
|
||||
|
||||
@@ -228,11 +228,13 @@ core.config.ui.auto_scale.tip=Otomatik ekran ölçek faktörünü ( {} ) etkinle
|
||||
core.config.ui.auto_scale=Oto ölçekleme
|
||||
core.config.ui.hdpi.tip=HDPI çözünürlükleri ile ilgili iyileştirmeler etkinleştirilirse
|
||||
core.config.ui.hdpi=HDPI
|
||||
core.config.ui.max_displayed.tip=Tabloda görüntülenen azami uygulama sayısı
|
||||
core.config.ui.max_displayed.tip=Tabloda görüntülenen azami uygulama sayısı. Use 0 for no limit.
|
||||
core.config.ui.max_displayed=Görüntülenen uygulamalar
|
||||
core.config.ui.qt_style.tooltip=QT style to be used. Requires restarting to take effect.
|
||||
core.config.ui.scale_factor=Scale
|
||||
core.config.ui.scale_factor.tip=It defines the interface display scaling factor (Qt). Raise the value to raise the interface size. Restart required.
|
||||
core.config.ui.style.default=Default
|
||||
core.config.ui.system_theme=System theme
|
||||
core.config.ui.system_theme.tip=If the system's theme/stylesheet should be merged with {app}'s
|
||||
core.config.ui.tray.default_icon.tip=Tepside görüntülenen {app} için varsayılan simge
|
||||
core.config.ui.tray.default_icon=Varsayılan simge
|
||||
core.config.ui.tray.updates_icon.tip=Güncelleme mevcut olduğunda görüntülenen simge
|
||||
@@ -297,20 +299,23 @@ manage_window.bt.installed.text=yüklü
|
||||
manage_window.bt.installed.tooltip=Yüklü uygulamaları görmek için burayı tıkla
|
||||
manage_window.bt.refresh.text=Yenile
|
||||
manage_window.bt.refresh.tooltip=Yüklü uygulamalar hakkındaki verileri yeniden yükle
|
||||
manage_window.bt.suggestions.text=Önerilenler
|
||||
manage_window.bt.suggestions.tooltip=Bazı uygulama önerileri için burayı tıkla
|
||||
manage_window.bt.upgrade.text=Yükselt
|
||||
manage_window.bt.upgrade.tooltip=İşaretli tüm uygulamaları yükseltin
|
||||
manage_window.bt_custom_actions.tip=Daha fazla eylem için burayı tıkla
|
||||
manage_window.bt_settings.tooltip=Görünüm ayarları için burayı tıkla
|
||||
manage_window.bt_themes.tip=Click here to choose a theme
|
||||
manage_window.bt_themes.option.invalid=Invalid
|
||||
manage_window.checkbox.only_apps=Uygulamalar
|
||||
manage_window.checkbox.show_details=Detayları göster
|
||||
manage_window.columns.installed=Yüklü
|
||||
manage_window.columns.latest_version=Son sürüm
|
||||
manage_window.columns.update=Yükselt ?
|
||||
manage_window.label.apps_displayed.tip=Applications displayed / available
|
||||
manage_window.label.updates=Güncellemeler
|
||||
manage_window.name_filter.button_tooltip=Click here to filter apps by name
|
||||
manage_window.name_filter.placeholder=Filtre adı
|
||||
manage_window.name_filter.tooltip=Uygulamaları ada göre filtrelemek için buraya yazın
|
||||
manage_window.name_filter.tooltip=Type and press ENTER to filter apps by name
|
||||
manage_window.settings.about=Hakkında
|
||||
manage_window.status.downgrading=Düşürülüyor
|
||||
manage_window.status.filtering=Filtreleniyor
|
||||
@@ -351,9 +356,9 @@ popup.history.selected.tooltip=Mevcut sürüm
|
||||
popup.history.title=Geçmiş
|
||||
popup.root.bad_password.body=Yanlış şifre
|
||||
popup.root.bad_password.last_try=Çok sayıda yanlış deneme. İşlem iptal edildi.
|
||||
popup.root.bad_password.title=Hata
|
||||
popup.root.continue=devam
|
||||
popup.root.title=Devam etmek için şifre girmelisiniz
|
||||
popup.root.msg=Devam etmek için şifre girmelisiniz
|
||||
popup.root.title=Doğrulama
|
||||
popup.screenshots.no_screenshot.body={} ekran görüntüsünü almak mümkün değildi
|
||||
prepare.bt_hide_details=Hide details
|
||||
prepare.bt_icon.no_output=There are no progress details for this task to be displayed
|
||||
@@ -369,7 +374,7 @@ screenshots.bt_back.label=önceki
|
||||
screenshots.bt_next.label=sonraki
|
||||
screenshots.download.no_content=Görüntülenecek içerik yok
|
||||
screenshots.download.no_response=İmaj bulunamadı
|
||||
screenshots.download.running=imaj indiriliyor
|
||||
screenshots.image.loading=Loading
|
||||
settings.changed.success.reboot=Şimdi yeniden başlat ?
|
||||
settings.changed.success.warning=Ayarlar başarıyla değiştirildi ancak yeniden başlattıktan sonra devreye girecek.
|
||||
settings.error=Tüm ayarları düzgün bir şekilde değiştirmek mümkün olmadı
|
||||
@@ -402,6 +407,7 @@ view.components.file_chooser.placeholder=Seçmek için buraya tıkla
|
||||
warning=uyarı
|
||||
welcome=hoşgeldinis
|
||||
warning.update_available=Yeni bir {} sürümü var ({}). {} Adresindeki haberleri inceleyin.
|
||||
window_manage.input_search.placeholder=Ara
|
||||
window_manage.input_search.tooltip=Uygulama aramak için yazın ve ENTER tuşuna basın
|
||||
window_manage.search_bar.button_tooltip=Click here to search for applications
|
||||
window_manage.search_bar.placeholder=Ara
|
||||
window_manage.search_bar.tooltip=Uygulama aramak için yazın ve ENTER tuşuna basın
|
||||
yes=evet
|
||||
|
||||
6
bauh/view/resources/style/darcula/darcula.meta
Normal file
@@ -0,0 +1,6 @@
|
||||
name=Darcula
|
||||
description=Dark based on Darcula theme (JetBrains)
|
||||
description[pt]=Escuro baseada no tema Darcula (JetBrains)
|
||||
description[es]=Oscuro basado en el tema Darcula (JetBrains)
|
||||
version=1.0
|
||||
root_sheet=default
|
||||
433
bauh/view/resources/style/darcula/darcula.qss
Normal file
@@ -0,0 +1,433 @@
|
||||
QWidget, QWidget QToolTip {
|
||||
background-color: @outer_widget.background.color;
|
||||
color: @font.color;
|
||||
selection-background-color: @tab.font.color;
|
||||
}
|
||||
|
||||
QCheckBox::indicator:unchecked {
|
||||
image: url("@style_dir/img/checkbox_unchecked.svg");
|
||||
}
|
||||
|
||||
QCheckBox::indicator:unchecked:disabled {
|
||||
image: url("@style_dir/img/checkbox_unchecked_disabled.svg");
|
||||
}
|
||||
|
||||
QCheckBox::indicator:checked {
|
||||
image: url("@style_dir/img/checkbox_checked.svg");
|
||||
}
|
||||
|
||||
QCheckBox::indicator:checked:disabled {
|
||||
image: url("@style_dir/img/checkbox_checked_disabled.svg");
|
||||
}
|
||||
|
||||
QComboBox:focus, QSpinBox:focus, ManageWindow QComboBox:focus {
|
||||
border-color: @focus.border.color;
|
||||
color: @focus.border.color;
|
||||
}
|
||||
|
||||
QLineEdit:focus {
|
||||
border-color: @focus.border.color;
|
||||
}
|
||||
|
||||
QPushButton {
|
||||
border: 1px solid @pushbutton.border.color;
|
||||
border-radius: 5px;
|
||||
background-color: @pushbutton.background.color;
|
||||
}
|
||||
|
||||
QPushButton:disabled {
|
||||
background-color: @pushbutton.disabled.background.color;
|
||||
color: @pushbutton.disabled.font.color;
|
||||
}
|
||||
|
||||
QToolButton {
|
||||
border: none;
|
||||
}
|
||||
|
||||
QToolButton:hover {
|
||||
background-color: @toolbutton.hover.background.color;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
QLineEdit {
|
||||
selection-color: @menu.item.selected.font.color;
|
||||
selection-background-color: @menu.item.selected.background.color;
|
||||
background-color: @lineedit.background.color;
|
||||
border: 1px solid @lineedit.border.color;
|
||||
border-radius: 5px;
|
||||
padding: 3px;
|
||||
}
|
||||
|
||||
QPlainTextEdit {
|
||||
selection-color: @menu.item.selected.font.color;
|
||||
selection-background-color: @menu.item.selected.background.color;
|
||||
color: @font.color;
|
||||
background-color: @inner_widget.background.color;
|
||||
}
|
||||
|
||||
QScrollBar, QTableWidget QScrollBar {
|
||||
background-color: @inner_widget.background.color;
|
||||
}
|
||||
|
||||
QScrollBar::vertical{
|
||||
max-width: 10px;
|
||||
}
|
||||
|
||||
QScrollBar::handle {
|
||||
background-color: @scrollbar.handle.background.color;
|
||||
}
|
||||
|
||||
QScrollBar::add-line, QScrollBar::sub-line, QScrollBar::add-page, QScrollBar::sub-page {
|
||||
height: 0px;
|
||||
}
|
||||
|
||||
QComboBox, ManageWindow QComboBox, QSpinBox {
|
||||
border-color: @combobox.border.color;
|
||||
}
|
||||
|
||||
QComboxBox:!editable, QComboBox::drop-down {
|
||||
border-left: 0;
|
||||
}
|
||||
|
||||
QComboBox::down-arrow {
|
||||
image: url("@style_dir/img/arrow_down.svg");
|
||||
height: 10px;
|
||||
width: 10px;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
QSpinBox {
|
||||
selection-color: @menu.item.selected.font.color;
|
||||
selection-background-color: @menu.item.selected.background.color;
|
||||
}
|
||||
|
||||
QSpinBox::down-arrow {
|
||||
image: url("@style_dir/img/arrow_down.svg");
|
||||
}
|
||||
|
||||
QSpinBox::up-arrow {
|
||||
image: url("@style_dir/img/arrow_up.svg");
|
||||
}
|
||||
|
||||
QSpinBox::up-arrow:disabled, QSpinBox::up-arrow:off, QSpinBox::down-arrow:disabled, QSpinBox::down-arrow:off {
|
||||
image: none;
|
||||
}
|
||||
|
||||
QTableWidget {
|
||||
border: 1px solid @table.border.color;
|
||||
background-color: @inner_widget.background.color;
|
||||
selection-background-color: @table.selection.background.color;
|
||||
}
|
||||
|
||||
QTableWidget * {
|
||||
background-color: none;
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
QTableWidget QHeaderView {
|
||||
background-color: @outer_widget.background.color;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
QTableWidget QToolButton:hover {
|
||||
background-color: @table.button.hover.background.color;
|
||||
}
|
||||
|
||||
QComboBox, QComboBox QAbstractItemView, QMenu QAbstractItemView {
|
||||
selection-background-color: @menu.item.selected.background.color;
|
||||
selection-color: @menu.item.selected.font.color;
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
QMenu QPushButton {
|
||||
border-radius: 0px;
|
||||
}
|
||||
|
||||
QMenu QPushButton[current = "true"] {
|
||||
color: @color.yellow_dark;
|
||||
}
|
||||
|
||||
QMenu QPushButton:hover {
|
||||
background-color: @menu.item.selected.background.color;
|
||||
color: @menu.item.selected.font.color;
|
||||
}
|
||||
|
||||
QLabel[error = "true"] {
|
||||
color: @error.color;
|
||||
}
|
||||
|
||||
QPlainTextEdit[console = 'true'] {
|
||||
background: @console.background.color;
|
||||
color: @console.font.color;
|
||||
}
|
||||
|
||||
QTabBar::tab:selected {
|
||||
color: @tab.font.color;
|
||||
border: 1px solid @inner_widget.background.color;
|
||||
border-top-left-radius: 5px;
|
||||
border-top-right-radius: 5px;
|
||||
border-bottom: 2px solid @tab.underline.color;
|
||||
background-color: @tab.highlight.color;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
QProgressBar::chunk {
|
||||
background-color: @progressbar.fill.color;
|
||||
}
|
||||
|
||||
QSearchBar * {
|
||||
background-color: @outer_widget.background.color;
|
||||
}
|
||||
|
||||
QSearchBar QLabel#lb_left_corner {
|
||||
border-left-color: @lineedit.border.color;
|
||||
border-top-color: @lineedit.border.color;
|
||||
border-bottom-color: @lineedit.border.color;
|
||||
}
|
||||
|
||||
QSearchBar QLabel#lb_left_corner[focused = "true"] {
|
||||
border-left-color: @focus.border.color;
|
||||
border-top-color: @focus.border.color;
|
||||
border-bottom-color: @focus.border.color;
|
||||
}
|
||||
|
||||
QSearchBar QPushButton#search_button {
|
||||
qproperty-icon: url("@style_dir/img/search.svg");
|
||||
border-right-color: @lineedit.border.color;
|
||||
border-top-color: @lineedit.border.color;
|
||||
border-bottom-color: @lineedit.border.color;
|
||||
}
|
||||
|
||||
QSearchBar QPushButton#search_button[focused = "true"] {
|
||||
border-right-color: @focus.border.color;
|
||||
border-top-color: @focus.border.color;
|
||||
border-bottom-color: @focus.border.color;
|
||||
qproperty-icon: url("@style_dir/img/search_focused.svg");
|
||||
}
|
||||
|
||||
QSearchBar QLineEdit#inp_search {
|
||||
border-bottom-color: @lineedit.border.color;
|
||||
border-top-color: @lineedit.border.color;
|
||||
}
|
||||
|
||||
QSearchBar QLineEdit#inp_search:focus {
|
||||
border-bottom-color: @focus.border.color;
|
||||
border-top-color: @focus.border.color;
|
||||
}
|
||||
|
||||
QSearchBar#name_filter QPushButton#search_button {
|
||||
qproperty-icon: url("@style_dir/img/filter.svg");
|
||||
}
|
||||
|
||||
QSearchBar#name_filter QPushButton#search_button[focused = "true"] {
|
||||
qproperty-icon: url("@style_dir/img/filter_focused.svg");
|
||||
}
|
||||
|
||||
QPushButton#ok {
|
||||
background-color: @button_ok.background.color;
|
||||
color: @button_ok.font.color;
|
||||
border-color: @button_ok.background.color;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
PreparePanel QTableWidget#tasks {
|
||||
background-color: @inner_widget.background.color;
|
||||
}
|
||||
|
||||
PreparePanel QLabel#task_status[status = "done"], QLabel#task_progress[status = "done"] {
|
||||
color: @task.done.color;
|
||||
}
|
||||
|
||||
ManageWindow QSearchBar#name_filter {
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
QPushButton#bt_upgrade {
|
||||
qproperty-icon: url("@style_dir/img/update.svg");
|
||||
border: 0.5px solid @upgrade.color;
|
||||
background: @outer_widget.background.color;
|
||||
color: @upgrade.color;
|
||||
}
|
||||
|
||||
QPushButton#bt_upgrade:disabled {
|
||||
color: @font.color;
|
||||
border-color: @font.color;
|
||||
}
|
||||
|
||||
PackagesTable UpgradeToggleButton:disabled {
|
||||
color: @font.color;
|
||||
border-color: @font.color;
|
||||
}
|
||||
|
||||
PackagesTable QLabel#app_version[update = "true"] {
|
||||
color: @table.app_version.update.color;
|
||||
font-weight: @table.app_version.update.weight;
|
||||
}
|
||||
|
||||
PackagesTable QLabel#app_version:disabled[update = "true"] {
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
PackagesTable QLabel#app_version[ignored = "true"] {
|
||||
color: @table.app_version.update_ignored.color;
|
||||
}
|
||||
|
||||
PackagesTable QLabel#app_version:disabled[ignored = "true"] {
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
PackagesTable UpgradeToggleButton, ConfirmationDialog UpgradeToggleButton {
|
||||
qproperty-icon: url("@style_dir/img/update.svg");
|
||||
border: 0.5px solid @upgrade.color;
|
||||
border-radius: 2px;
|
||||
background-color: @outer_widget.background.color;
|
||||
}
|
||||
|
||||
PackagesTable UpgradeToggleButton[toggled = "false"] {
|
||||
qproperty-icon: url("@style_dir/img/update_unchecked.svg");
|
||||
background-color: @inner_widget.background.color;
|
||||
border-color: @outer_widget.background.color;
|
||||
}
|
||||
|
||||
PackagesTable UpgradeToggleButton[enabled = "false"] {
|
||||
background: @table.update_check.disabled.color;
|
||||
}
|
||||
|
||||
ManageWindow PackagesTable IconButton#app_info {
|
||||
qproperty-icon: url("@style_dir/img/about.svg");
|
||||
qproperty-iconSize: 13px 13px;
|
||||
}
|
||||
|
||||
QPushButton#bt_refresh {
|
||||
qproperty-icon: url("@style_dir/img/refresh.svg")
|
||||
}
|
||||
|
||||
QPushButton#bt_installed {
|
||||
qproperty-icon: url("@style_dir/img/installed.svg");
|
||||
}
|
||||
|
||||
ManageWindow PackagesTable IconButton#app_run {
|
||||
qproperty-icon: url("@style_dir/img/app_play.svg");
|
||||
}
|
||||
|
||||
ManageWindow PackagesTable IconButton#app_run[_enabled = "false"] {
|
||||
qproperty-icon: url("@style_dir/img/app_play_disabled.svg");
|
||||
}
|
||||
|
||||
ManageWindow IconButton#suggestions {
|
||||
qproperty-icon: url("@style_dir/img/suggestions.svg");
|
||||
}
|
||||
|
||||
ManageWindow IconButton#themes {
|
||||
qproperty-icon: url("@style_dir/img/themes.svg");
|
||||
}
|
||||
|
||||
ManageWindow PackagesTable IconButton#app_actions {
|
||||
qproperty-icon: url("@style_dir/img/menu.svg");
|
||||
}
|
||||
|
||||
ManageWindow IconButton#settings {
|
||||
qproperty-icon: url("@style_dir/img/settings.svg");
|
||||
}
|
||||
|
||||
PackagesTable IconButton#app_screenshots {
|
||||
qproperty-icon: url("@style_dir/img/camera.svg");
|
||||
}
|
||||
|
||||
ManageWindow PackagesTable IconButton#app_screenshots[_enabled = "false"] {
|
||||
qproperty-icon: url("@style_dir/img/camera_disabled.svg");
|
||||
}
|
||||
|
||||
ManageWindow IconButton#custom_actions {
|
||||
qproperty-icon: url("@style_dir/img/menu.svg");
|
||||
qproperty-iconSize: 16px 16px;
|
||||
}
|
||||
|
||||
ManageWindow IconButton#about {
|
||||
qproperty-icon: url("@style_dir/img/about.svg");
|
||||
qproperty-iconSize: 16px 16px;
|
||||
}
|
||||
|
||||
QMenu#app_actions QPushButton#app_history {
|
||||
qproperty-icon: url("@style_dir/img/history.svg");
|
||||
}
|
||||
|
||||
QMenu#app_actions QPushButton#app_downgrade {
|
||||
qproperty-icon: url("@style_dir/img/downgrade.svg");
|
||||
}
|
||||
|
||||
QMenu#app_actions QPushButton#ignore_updates {
|
||||
qproperty-icon: url("@style_dir/img/ignore_update.svg");
|
||||
}
|
||||
|
||||
QMenu#app_actions QPushButton#revert_ignore_updates {
|
||||
qproperty-icon: url("@style_dir/img/revert_update_ignored.svg");
|
||||
}
|
||||
|
||||
PackagesTable QLabel[publisher_known = "false"]{
|
||||
color: @table.app_publisher.unknown.font.color;
|
||||
}
|
||||
|
||||
PackagesTable QLabel:disabled[publisher_known = "false"]{
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
PackagesTable QLabel#icon_publisher_verified {
|
||||
qproperty-pixmap: url("@style_dir/img/verified.svg");
|
||||
}
|
||||
|
||||
PackagesTable QToolButton#bt_install {
|
||||
background-color: transparent;
|
||||
color: @table.bt_install.font.color;
|
||||
}
|
||||
|
||||
PackagesTable QToolButton#bt_install:hover, PackagesTable QToolButton#bt_uninstall:hover {
|
||||
background-color: @table.button.hover.background.color;
|
||||
}
|
||||
|
||||
PackagesTable QToolButton#bt_install:disabled {
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
PackagesTable QToolButton#bt_uninstall {
|
||||
background-color: transparent;
|
||||
color: @table.bt_uninstall.font.color;
|
||||
}
|
||||
|
||||
PackagesTable QToolButton#bt_uninstall:disabled {
|
||||
color: @font.color;
|
||||
}
|
||||
|
||||
QLabel[help_icon = "true"] {
|
||||
qproperty-pixmap: url("@style_dir/img/help.svg");
|
||||
}
|
||||
|
||||
QLabel[tip_icon = "true"] {
|
||||
qproperty-pixmap: url("@style_dir/img/help.svg");
|
||||
}
|
||||
|
||||
FormQt IconButton#clean_field {
|
||||
qproperty-icon: url("@style_dir/img/clean.svg");
|
||||
}
|
||||
|
||||
PreparePanel QLabel#task_status[status = "running"], QLabel#task_progress[status = "running"], QLabel#task_substatus {
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
HistoryDialog QTableWidget QLabel[even = "false"] {
|
||||
background-color: @outer_widget.background.color;
|
||||
}
|
||||
|
||||
HistoryDialog QTableWidget QLabel[outdated = "true"] {
|
||||
background-color: @history.version.outdated;
|
||||
color: @history.version.focus.color;
|
||||
}
|
||||
|
||||
HistoryDialog QTableWidget QLabel[outdated = "false"] {
|
||||
background-color: @history.version.updated;
|
||||
color: @history.version.focus.color;
|
||||
}
|
||||
|
||||
InfoDialog QPushButton#show {
|
||||
height: 16px;
|
||||
}
|
||||
50
bauh/view/resources/style/darcula/darcula.vars
Normal file
@@ -0,0 +1,50 @@
|
||||
button_ok.background.color=#365880
|
||||
button_ok.background.color=#4C708C
|
||||
button_ok.font.color=#BABBBB
|
||||
color.blue_light=#3592C4
|
||||
color.green_editor=#6A8759
|
||||
color.green_light=#499C54
|
||||
color.grey_blue=#A9B7C6
|
||||
color.grey_editor=#2B2B2B
|
||||
color.grey_panel=#3C3F41
|
||||
color.orange=#CC752F
|
||||
color.red=#FF6B68
|
||||
color.warning=@color.yellow_dark
|
||||
color.yellow_dark=#BE9117
|
||||
combobox.border.color=#5E6060
|
||||
console.background.color=@inner_widget.background.color
|
||||
console.font.color=#BBBBA8
|
||||
error.color=@color.red
|
||||
focus.border.color=#6591B2
|
||||
font.color=@color.grey_blue
|
||||
history.version.focus.color=white;
|
||||
history.version.outdated=@color.warning;
|
||||
history.version.updated=@color.green_light;
|
||||
inner_widget.background.color=@color.grey_editor
|
||||
lineedit.background.color=#45494A
|
||||
lineedit.border.color=#646464
|
||||
outer_widget.background.color=@color.grey_panel
|
||||
progressbar.fill.color=@color.blue_light
|
||||
pushbutton.background.color=#4C5052
|
||||
pushbutton.border.color=@combobox.border.color
|
||||
pushbutton.disabled.background.color=@color.grey_panel
|
||||
pushbutton.disabled.font.color=#737373
|
||||
menu.item.selected.background.color=#2F65CA
|
||||
menu.item.selected.font.color=white
|
||||
scrollbar.handle.background.color=#4D4D4D
|
||||
tab.font.color=@focus.border.color
|
||||
tab.highlight.color=#4E5254
|
||||
tab.underline.color=#4A88C7
|
||||
table.app_publisher.unknown.font.color=@color.red
|
||||
table.app_version.update.color=@color.yellow_dark
|
||||
table.app_version.update.weight=normal
|
||||
table.app_version.update_ignored.color=@color.yellow_dark
|
||||
table.border.color=#555555
|
||||
table.bt_install.font.color=@color.green_light
|
||||
table.bt_uninstall.font.color=@color.red
|
||||
table.update_check.disabled.color=@color.warning
|
||||
table.selection.background.color=#0D293E
|
||||
table.button.hover.background.color=#323232
|
||||
task.done.color=@color.green_editor
|
||||
toolbutton.hover.background.color=@pushbutton.background.color
|
||||
upgrade.color=@color.green_light
|
||||
@@ -9,12 +9,12 @@
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Capa_1"
|
||||
enable-background="new 0 0 512 512"
|
||||
height="12"
|
||||
viewBox="0 0 12 12"
|
||||
width="12"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
width="512"
|
||||
version="1.1"
|
||||
sodipodi:docname="info.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||
sodipodi:docname="about.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata877">
|
||||
<rdf:RDF>
|
||||
@@ -43,9 +43,9 @@
|
||||
id="namedview873"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="11.335805"
|
||||
inkscape:cx="23.192934"
|
||||
inkscape:cy="10.264189"
|
||||
inkscape:zoom="1.0019531"
|
||||
inkscape:cx="197.9376"
|
||||
inkscape:cy="236.73295"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -53,21 +53,22 @@
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g7850"
|
||||
transform="matrix(0.49966773,0,0,0.47688398,2.2068848,0.02497908)"
|
||||
style="stroke:#37abc8;stroke-width:1.53208435;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
transform="matrix(22.337858,0,0,21.3193,86.427173,-11.115837)"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
<circle
|
||||
cx="7.5912747"
|
||||
cy="21.699696"
|
||||
r="2.6452355"
|
||||
id="circle866"
|
||||
style="fill:none;stroke:#37abc8;stroke-width:1.53208435;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 7.591275,0.71366244 c -3.7923421,0 -6.8776126,3.08527056 -6.8776126,6.87761256 V 8.2525839 H 6.0041336 V 7.591275 c 0,-0.8751762 0.7119652,-1.5871414 1.5871414,-1.5871414 0.8751762,0 1.5871413,0.7119652 1.5871413,1.5871414 0,0.466355 -0.2046971,0.9077567 -0.5616717,1.2111211 L 4.9460394,11.923201 v 4.75005 h 5.2904716 v -2.303912 l 1.806519,-1.535868 c 1.541643,-1.310009 2.425858,-3.2206629 2.425858,-5.242196 0,-3.792342 -3.085271,-6.87761256 -6.877613,-6.87761256 z"
|
||||
id="path868"
|
||||
style="fill:none;stroke:#37abc8;stroke-width:1.53208435;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB |
27
bauh/view/resources/img/app_play.svg → bauh/view/resources/style/darcula/img/app_play.svg
Executable file → Normal file
@@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
@@ -13,12 +11,12 @@
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 12 12.000001"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="app_play.svg"
|
||||
width="12"
|
||||
height="12.000001"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata856"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
@@ -40,15 +38,16 @@
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="8.5156252"
|
||||
inkscape:cx="-22.346746"
|
||||
inkscape:cy="0.39055758"
|
||||
inkscape:zoom="0.75268204"
|
||||
inkscape:cx="17.928302"
|
||||
inkscape:cy="262.90412"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"><sodipodi:guide
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"><sodipodi:guide
|
||||
position="-35.66195,21.221316"
|
||||
orientation="0,1"
|
||||
id="guide829"
|
||||
@@ -83,11 +82,11 @@
|
||||
inkscape:locked="false" /></sodipodi:namedview>
|
||||
<g
|
||||
id="g819"
|
||||
transform="matrix(0.01280184,0,0,0.01280246,1.0874728,2.7151057)"
|
||||
style="fill:none;fill-opacity:1;stroke:#91a069;stroke-width:97.6398468;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
transform="matrix(0.837209,0,0,0.83724953,-65.454588,41.15345)"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:none;stroke-width:7.81119;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#91a069;stroke-width:97.6398468;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:none;stroke-width:7.81119;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 557.49784,206.99848 C 556.02332,209.32745 299.06055,50.553292 184.31451,-1.6920377 154.70662,-15.172888 152.32141,8.7631987 152.154,44.419264 c -0.8137,173.309056 -0.17793,416.751146 0,425.492356 0.73587,36.15214 -4.3986,60.9816 32.16051,42.58838 96.93285,-48.76779 383.3103,-210.32654 375.2762,-204.82682 68.97152,-41.77019 82.39599,-46.93515 -2.09287,-100.6747 z"
|
||||
id="path817"
|
||||
inkscape:connector-curvature="0"
|
||||
@@ -153,4 +152,4 @@
|
||||
id="g849"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.4 KiB |
159
bauh/view/resources/style/darcula/img/app_play_disabled.svg
Normal file
@@ -0,0 +1,159 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Layer_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="app_play_disabled.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata856"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs854" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview852"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.75268204"
|
||||
inkscape:cx="17.928302"
|
||||
inkscape:cy="262.90412"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"><sodipodi:guide
|
||||
position="-35.66195,21.221316"
|
||||
orientation="0,1"
|
||||
id="guide829"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="-36.043602,-2.7933623"
|
||||
orientation="0,1"
|
||||
id="guide831"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="-4.3371792,24.333243"
|
||||
orientation="1,0"
|
||||
id="guide833"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="11.662821,20.164435"
|
||||
orientation="1,0"
|
||||
id="guide835"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="-2.7812159,24.186454"
|
||||
orientation="1,0"
|
||||
id="guide947"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="-10.795895,-0.79703201"
|
||||
orientation="0,1"
|
||||
id="guide949"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="-17.107821,19.16627"
|
||||
orientation="0,1"
|
||||
id="guide951"
|
||||
inkscape:locked="false" /><sodipodi:guide
|
||||
position="19.706857,26.447004"
|
||||
orientation="1,0"
|
||||
id="guide836"
|
||||
inkscape:locked="false" /></sodipodi:namedview>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<g
|
||||
id="g3635"><g
|
||||
id="g819"
|
||||
transform="matrix(0.837209,0,0,0.83724953,-65.454588,41.15345)"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:none;stroke-width:7.81119;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
|
||||
<path
|
||||
style="fill:#499c54;fill-opacity:1;stroke:none;stroke-width:7.81119;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 557.49784,206.99848 C 556.02332,209.32745 299.06055,50.553292 184.31451,-1.6920377 154.70662,-15.172888 152.32141,8.7631987 152.154,44.419264 c -0.8137,173.309056 -0.17793,416.751146 0,425.492356 0.73587,36.15214 -4.3986,60.9816 32.16051,42.58838 96.93285,-48.76779 383.3103,-210.32654 375.2762,-204.82682 68.97152,-41.77019 82.39599,-46.93515 -2.09287,-100.6747 z"
|
||||
id="path817"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="csssscc" />
|
||||
</g><g
|
||||
id="g821"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g823"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g825"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g827"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g829"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g831"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g833"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g835"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g837"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g839"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g841"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g843"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g845"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g847"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><g
|
||||
id="g849"
|
||||
transform="translate(-156.96699,-497.23008)">
|
||||
</g><path
|
||||
style="fill:none;stroke:#ff6b68;stroke-width:71.9002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 56.555617,490.77868 368.65561,25.079795"
|
||||
id="path2768" /></g></svg>
|
||||
|
After Width: | Height: | Size: 4.8 KiB |
98
bauh/view/resources/style/darcula/img/arrow_down.svg
Normal file
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512.00002 512.00002"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="arrow_down.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512"><metadata
|
||||
id="metadata955"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs953">
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview951"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.90156256"
|
||||
inkscape:cx="279.80547"
|
||||
inkscape:cy="222.5558"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<polygon
|
||||
points="213.333,53.333 0,53.333 106.667,160 "
|
||||
id="polygon914"
|
||||
style="fill:#9a9da1;fill-opacity:1;stroke:none"
|
||||
transform="matrix(2.3589386,0,0,2.7687329,4.3802758,-39.331048)" />
|
||||
<g
|
||||
id="g920">
|
||||
</g>
|
||||
<g
|
||||
id="g922">
|
||||
</g>
|
||||
<g
|
||||
id="g924">
|
||||
</g>
|
||||
<g
|
||||
id="g926">
|
||||
</g>
|
||||
<g
|
||||
id="g928">
|
||||
</g>
|
||||
<g
|
||||
id="g930">
|
||||
</g>
|
||||
<g
|
||||
id="g932">
|
||||
</g>
|
||||
<g
|
||||
id="g934">
|
||||
</g>
|
||||
<g
|
||||
id="g936">
|
||||
</g>
|
||||
<g
|
||||
id="g938">
|
||||
</g>
|
||||
<g
|
||||
id="g940">
|
||||
</g>
|
||||
<g
|
||||
id="g942">
|
||||
</g>
|
||||
<g
|
||||
id="g944">
|
||||
</g>
|
||||
<g
|
||||
id="g946">
|
||||
</g>
|
||||
<g
|
||||
id="g948">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
98
bauh/view/resources/style/darcula/img/arrow_up.svg
Normal file
@@ -0,0 +1,98 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512.00002 512.00002"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="arrow_up.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512"><metadata
|
||||
id="metadata955"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs953">
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview951"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.90156256"
|
||||
inkscape:cx="279.80547"
|
||||
inkscape:cy="222.5558"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<polygon
|
||||
points="0,53.333 106.667,160 213.333,53.333 "
|
||||
id="polygon914"
|
||||
style="fill:#9a9da1;fill-opacity:1;stroke:none"
|
||||
transform="matrix(2.3589386,0,0,-2.7687329,4.3802758,551.33105)" />
|
||||
<g
|
||||
id="g920">
|
||||
</g>
|
||||
<g
|
||||
id="g922">
|
||||
</g>
|
||||
<g
|
||||
id="g924">
|
||||
</g>
|
||||
<g
|
||||
id="g926">
|
||||
</g>
|
||||
<g
|
||||
id="g928">
|
||||
</g>
|
||||
<g
|
||||
id="g930">
|
||||
</g>
|
||||
<g
|
||||
id="g932">
|
||||
</g>
|
||||
<g
|
||||
id="g934">
|
||||
</g>
|
||||
<g
|
||||
id="g936">
|
||||
</g>
|
||||
<g
|
||||
id="g938">
|
||||
</g>
|
||||
<g
|
||||
id="g940">
|
||||
</g>
|
||||
<g
|
||||
id="g942">
|
||||
</g>
|
||||
<g
|
||||
id="g944">
|
||||
</g>
|
||||
<g
|
||||
id="g946">
|
||||
</g>
|
||||
<g
|
||||
id="g948">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.0 KiB |
133
bauh/view/resources/style/darcula/img/camera.svg
Normal file
@@ -0,0 +1,133 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="camera.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata945"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs943">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview941"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="-0.3"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.70710681"
|
||||
inkscape:cx="219.53194"
|
||||
inkscape:cy="229.87388"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"><sodipodi:guide
|
||||
position="-51.953545,91.021149"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide2797"
|
||||
inkscape:locked="false" /></sodipodi:namedview>
|
||||
<g
|
||||
id="g11705"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-opacity:1"
|
||||
transform="matrix(43.147244,0,0,43.147244,-2.8834687,-2.883458)"><path
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-width:0.48546;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path900"
|
||||
d="m 0.36332022,3.9393295 v 5.7746849 c 0,0.8814256 0.6165838,1.5972526 1.37581018,1.5972526 h 8.5217406 c 0.759227,0 1.375809,-0.715827 1.375809,-1.5972526 V 3.9393295 c 0,-0.8386924 -0.586673,-1.5197948 -1.309089,-1.5197948 H 8.4962447 L 8.4525319,2.1978423 C 8.2753792,1.3084031 7.601278,0.68873272 6.8144437,0.68873272 H 5.183257 c -0.7845338,0 -1.4586347,0.61967038 -1.6380881,1.50910958 L 3.5014558,2.4195347 H 1.6724105 c -0.72241539,0 -1.30909028,0.6837749 -1.30909028,1.5197948 z M 3.7269231,3.0739286 c 0.1311388,0 0.2438725,-0.1041686 0.2737814,-0.2537458 L 4.0950326,2.3447471 C 4.214668,1.7544578 4.6610011,1.3431243 5.1832566,1.3431243 h 1.6311867 c 0.522255,0 0.9685884,0.4113335 1.0882243,1.0016228 l 0.094329,0.4754357 c 0.029907,0.1469049 0.1426426,0.2537458 0.2737816,0.2537458 H 10.32529 c 0.411822,0 0.745423,0.3872927 0.745423,0.8654009 v 5.7746849 c 0,0.5208416 -0.36351,0.9428586 -0.812143,0.9428586 H 1.7391304 c -0.4486338,0 -0.81214217,-0.422017 -0.81214217,-0.9428586 V 3.9393295 c 0,-0.4781082 0.33359947,-0.8654009 0.74542227,-0.8654009 z" /><path
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-width:0.467336;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path904"
|
||||
d="m 6.0000006,9.704335 c 1.4787617,0 2.6836788,-1.2963577 2.6836788,-2.8873384 0,-1.5909818 -1.2049171,-2.8873367 -2.6836788,-2.8873367 -1.478762,0 -2.6836789,1.2935499 -2.6836789,2.8873367 0,1.5937886 1.2049169,2.8873384 2.6836789,2.8873384 z m 0,-5.0872129 c 1.1266758,0 2.0447075,0.987698 2.0447075,2.1998745 0,1.2121784 -0.9180317,2.1998764 -2.0447075,2.1998764 -1.1266758,0 -2.0447076,-0.987698 -2.0447076,-2.1998764 0,-1.2121765 0.9180318,-2.1998745 2.0447076,-2.1998745 z" /></g>
|
||||
<g
|
||||
id="g910"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g912"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g914"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g916"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g918"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g920"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g922"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g924"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g926"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g928"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g930"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g932"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g934"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g936"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g938"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.2 KiB |
137
bauh/view/resources/style/darcula/img/camera_disabled.svg
Normal file
@@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="camera_disabled.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata945"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs943">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview941"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="-0.3"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="0.70710681"
|
||||
inkscape:cx="219.53194"
|
||||
inkscape:cy="229.87388"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"><sodipodi:guide
|
||||
position="-51.953545,91.021149"
|
||||
orientation="-0.70710678,0.70710678"
|
||||
id="guide2797"
|
||||
inkscape:locked="false" /></sodipodi:namedview>
|
||||
|
||||
<g
|
||||
id="g910"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g912"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g914"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g916"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g918"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g920"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g922"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g924"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g926"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g928"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g930"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g932"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g934"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g936"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g938"
|
||||
transform="matrix(1.1013612,0,0,1.1013612,-0.37597036,-486.86991)">
|
||||
</g>
|
||||
<g
|
||||
id="g4393"><g
|
||||
id="g11705"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-opacity:1"
|
||||
transform="matrix(43.147244,0,0,43.147244,-2.8834687,-2.883458)"><path
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-width:0.48546;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path900"
|
||||
d="m 0.36332022,3.9393295 v 5.7746849 c 0,0.8814256 0.6165838,1.5972526 1.37581018,1.5972526 h 8.5217406 c 0.759227,0 1.375809,-0.715827 1.375809,-1.5972526 V 3.9393295 c 0,-0.8386924 -0.586673,-1.5197948 -1.309089,-1.5197948 H 8.4962447 L 8.4525319,2.1978423 C 8.2753792,1.3084031 7.601278,0.68873272 6.8144437,0.68873272 H 5.183257 c -0.7845338,0 -1.4586347,0.61967038 -1.6380881,1.50910958 L 3.5014558,2.4195347 H 1.6724105 c -0.72241539,0 -1.30909028,0.6837749 -1.30909028,1.5197948 z M 3.7269231,3.0739286 c 0.1311388,0 0.2438725,-0.1041686 0.2737814,-0.2537458 L 4.0950326,2.3447471 C 4.214668,1.7544578 4.6610011,1.3431243 5.1832566,1.3431243 h 1.6311867 c 0.522255,0 0.9685884,0.4113335 1.0882243,1.0016228 l 0.094329,0.4754357 c 0.029907,0.1469049 0.1426426,0.2537458 0.2737816,0.2537458 H 10.32529 c 0.411822,0 0.745423,0.3872927 0.745423,0.8654009 v 5.7746849 c 0,0.5208416 -0.36351,0.9428586 -0.812143,0.9428586 H 1.7391304 c -0.4486338,0 -0.81214217,-0.422017 -0.81214217,-0.9428586 V 3.9393295 c 0,-0.4781082 0.33359947,-0.8654009 0.74542227,-0.8654009 z" /><path
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-width:0.467336;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path904"
|
||||
d="m 6.0000006,9.704335 c 1.4787617,0 2.6836788,-1.2963577 2.6836788,-2.8873384 0,-1.5909818 -1.2049171,-2.8873367 -2.6836788,-2.8873367 -1.478762,0 -2.6836789,1.2935499 -2.6836789,2.8873367 0,1.5937886 1.2049169,2.8873384 2.6836789,2.8873384 z m 0,-5.0872129 c 1.1266758,0 2.0447075,0.987698 2.0447075,2.1998745 0,1.2121784 -0.9180317,2.1998764 -2.0447075,2.1998764 -1.1266758,0 -2.0447076,-0.987698 -2.0447076,-2.1998764 0,-1.2121765 0.9180318,-2.1998745 2.0447076,-2.1998745 z" /></g><path
|
||||
style="fill:none;stroke:#ff6b68;stroke-width:63.1959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 26.042137,488.70107 475.61523,42.196708"
|
||||
id="path1254" /></g></svg>
|
||||
|
After Width: | Height: | Size: 5.5 KiB |
103
bauh/view/resources/style/darcula/img/checkbox_checked.svg
Normal file
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512.00002"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
inkscape:export-filename="/home/colin/checkbox_checked.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
sodipodi:docname="checkbox_checked.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.70710675"
|
||||
inkscape:cx="161.94503"
|
||||
inkscape:cy="162.11748"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:showpageshadow="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4203"
|
||||
enabled="false" />
|
||||
<sodipodi:guide
|
||||
position="-15,16"
|
||||
orientation="0,1"
|
||||
id="guide4205"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="16,22.000001"
|
||||
orientation="1,0"
|
||||
id="guide4207"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
id="g2109"
|
||||
transform="matrix(17.973676,0,0,17.973676,-31.578816,-17350.876)">
|
||||
<rect
|
||||
style="opacity:1;fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#6591b2;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3338"
|
||||
width="26"
|
||||
height="26"
|
||||
x="3"
|
||||
y="1023.3622"
|
||||
ry="4"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
style="opacity:1;fill:#6591b2;fill-opacity:1;stroke:#6591b2;stroke-width:1.29718;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4159"
|
||||
width="14.702817"
|
||||
height="14.702817"
|
||||
x="8.648592"
|
||||
y="1029.0107"
|
||||
rx="0"
|
||||
ry="2" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.1 KiB |
@@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512.00002"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
inkscape:export-filename="/home/colin/checkbox_checked.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
sodipodi:docname="checkbox_checked_disabled.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.70710675"
|
||||
inkscape:cx="161.94503"
|
||||
inkscape:cy="162.11748"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:showpageshadow="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4203"
|
||||
enabled="false" />
|
||||
<sodipodi:guide
|
||||
position="-15,16"
|
||||
orientation="0,1"
|
||||
id="guide4205"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="16,22.000001"
|
||||
orientation="1,0"
|
||||
id="guide4207"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<g
|
||||
id="g8210">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#a9b7c6;stroke-width:35.9474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3338"
|
||||
width="467.31558"
|
||||
height="467.31558"
|
||||
x="22.342213"
|
||||
y="1042.7043"
|
||||
ry="71.894707"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
<rect
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
style="fill:#a9b7c6;fill-opacity:1;stroke:#a9b7c6;stroke-width:23.3151;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect4159"
|
||||
width="264.26367"
|
||||
height="264.26367"
|
||||
x="123.86817"
|
||||
y="1144.2297"
|
||||
rx="0"
|
||||
ry="35.947353" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.0 KiB |
88
bauh/view/resources/style/darcula/img/checkbox_unchecked.svg
Normal file
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512.00002"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
inkscape:export-filename="/home/colin/checkbox_checked.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
sodipodi:docname="checkbox_unchecked.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.70710675"
|
||||
inkscape:cx="161.94503"
|
||||
inkscape:cy="162.11748"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:showpageshadow="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4203"
|
||||
enabled="false" />
|
||||
<sodipodi:guide
|
||||
position="-15,16"
|
||||
orientation="0,1"
|
||||
id="guide4205"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="16,22.000001"
|
||||
orientation="1,0"
|
||||
id="guide4207"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#5e6060;stroke-width:35.9474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3338"
|
||||
width="467.31558"
|
||||
height="467.31558"
|
||||
x="22.342213"
|
||||
y="1042.7043"
|
||||
ry="71.894707"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
@@ -0,0 +1,88 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512.00002"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
inkscape:export-filename="/home/colin/checkbox_checked.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90"
|
||||
sodipodi:docname="checkbox_unchecked_disabled.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.70710675"
|
||||
inkscape:cx="161.94503"
|
||||
inkscape:cy="162.11748"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
showguides="true"
|
||||
inkscape:guide-bbox="true"
|
||||
inkscape:document-rotation="0"
|
||||
inkscape:showpageshadow="false">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid4203"
|
||||
enabled="false" />
|
||||
<sodipodi:guide
|
||||
position="-15,16"
|
||||
orientation="0,1"
|
||||
id="guide4205"
|
||||
inkscape:locked="false" />
|
||||
<sodipodi:guide
|
||||
position="16,22.000001"
|
||||
orientation="1,0"
|
||||
id="guide4207"
|
||||
inkscape:locked="false" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(0,-1020.3622)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0;fill-rule:evenodd;stroke:#a9b7c6;stroke-width:35.9474;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="rect3338"
|
||||
width="467.31558"
|
||||
height="467.31558"
|
||||
x="22.342213"
|
||||
y="1042.7043"
|
||||
ry="71.894707"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
158
bauh/view/resources/style/darcula/img/clean.svg
Normal file
@@ -0,0 +1,158 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512"
|
||||
style="enable-background:new 0 0 512 512;"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="clean.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata55"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs53" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview51"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.79135193"
|
||||
inkscape:cx="322.4361"
|
||||
inkscape:cy="286.90481"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<g
|
||||
id="g4221"><g
|
||||
id="g6"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
<g
|
||||
id="g4"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1">
|
||||
<path
|
||||
d="m 496.89,15.011 c -20.015,-20.015 -52.583,-20.016 -72.598,0 L 308.353,130.95 380.951,203.548 496.89,87.609 c 20.015,-20.015 20.015,-52.583 0,-72.598 z"
|
||||
id="path2"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g><g
|
||||
id="g12"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
<g
|
||||
id="g10"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1">
|
||||
<path
|
||||
d="M 362.499,228.282 283.816,149.6 c -25.576,-25.576 -66.36,-28.074 -94.866,-5.81 l -3.621,2.828 180.151,180.151 2.828,-3.621 c 22.265,-28.505 19.766,-69.289 -5.809,-94.866 z"
|
||||
id="path8"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g><g
|
||||
id="g18"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
<g
|
||||
id="g16"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1">
|
||||
<path
|
||||
d="M 161.08,165.557 5.969,286.702 c -3.447,2.692 -5.574,6.734 -5.842,11.1 -0.267,4.367 1.351,8.637 4.444,11.731 l 49.873,49.873 82.911,-75.242 c 6.246,-5.667 15.921,-5.174 21.568,1.047 5.667,6.245 5.199,15.901 -1.046,21.568 l -81.815,74.247 55.012,55.012 74.247,-81.815 c 5.667,-6.245 15.324,-6.713 21.568,-1.046 6.247,5.692 6.713,15.324 1.046,21.568 l -75.242,82.911 49.873,49.873 c 3.093,3.093 7.364,4.711 11.731,4.444 4.366,-0.268 8.407,-2.395 11.1,-5.842 L 346.542,351.019 Z"
|
||||
id="path14"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1" />
|
||||
</g>
|
||||
</g><g
|
||||
id="g20"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g22"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g24"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g26"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g28"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g30"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g32"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g34"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g36"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g38"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g40"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g42"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g44"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g46"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g><g
|
||||
id="g48"
|
||||
style="fill:#ff6b68;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
transform="matrix(0.98116917,0,0,0.98116917,4.8208209,4.8202575)">
|
||||
</g></g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.7 KiB |
77
bauh/view/resources/style/darcula/img/downgrade.svg
Normal file
@@ -0,0 +1,77 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
viewBox="0 0 512 512"
|
||||
enable-background="new 0 0 26 26"
|
||||
id="svg8"
|
||||
sodipodi:docname="downgrade.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512">
|
||||
<metadata
|
||||
id="metadata14">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.56730769"
|
||||
inkscape:cx="154.91145"
|
||||
inkscape:cy="139.84916"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g6"
|
||||
transform="matrix(19.331463,0,0,20.93888,4.690981,-16.20544)"
|
||||
style="fill:#be9117;fill-opacity:1;stroke:#be9117;stroke-width:0.0520416;stroke-opacity:1">
|
||||
<path
|
||||
d="m 25,17 h -2 c -0.6,0 -1,0.4 -1,1 v 2.5 C 22,20.8 21.8,21 21.5,21 H 4.5 C 4.2,21 4,20.8 4,20.5 V 18 C 4,17.4 3.6,17 3,17 H 1 c -0.6,0 -1,0.4 -1,1 v 6 c 0,0.6 0.4,1 1,1 h 24 c 0.6,0 1,-0.4 1,-1 v -6 c 0,-0.6 -0.4,-1 -1,-1 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#be9117;fill-opacity:1;stroke:#be9117;stroke-width:0.0520416;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 12.3,16.7 c 0.2,0.2 0.5,0.3 0.7,0.3 0.2,0 0.5,-0.1 0.7,-0.3 l 6,-6 C 19.9,10.5 20,10.3 20,10 20,9.7 19.9,9.5 19.7,9.3 L 18.3,7.9 C 18.1,7.7 17.9,7.6 17.6,7.6 c -0.3,0 -0.5,0.1 -0.7,0.3 l -1,1 C 15.6,9.2 15,9 15,8.5 V 2 C 15,1.4 14.6,1 14,1 H 12 C 11.4,1 11,1.4 11,2 V 8.6 C 11,9 10.5,9.3 10.1,9 L 9.1,8 C 8.9,7.8 8.7,7.7 8.4,7.7 8.1,7.7 7.9,7.8 7.7,8 L 6.3,9.4 C 6.1,9.6 6,9.8 6,10.1 c 0,0.3 0.1,0.5 0.3,0.7 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#be9117;fill-opacity:1;stroke:#be9117;stroke-width:0.0520416;stroke-opacity:1" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(3.7795276,0,0,3.7795276,668.44512,-480.86859)"
|
||||
id="layer1"
|
||||
inkscape:label="Layer 1" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
108
bauh/view/resources/style/darcula/img/filter.svg
Normal file
@@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512.00002 512.00002"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="filter.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata1717"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1715" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview1713"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.67994117"
|
||||
inkscape:cx="416.65942"
|
||||
inkscape:cy="286.29615"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<path
|
||||
d="m 496.67267,76.836285 c 0,-24.97369 -25.79215,-43.560542 -78.85493,-56.826244 C 374.3748,9.1493067 316.90773,3.1681057 256.00119,3.1681057 c -60.9041,0 -118.3736,5.981201 -161.816529,16.8419353 C 41.121868,33.275743 15.32733,51.862595 15.32733,76.836285 c 0,9.240624 3.542636,17.605195 10.680722,25.151305 L 189.80713,300.66582 v 190.16485 c 0,6.22842 3.2186,12.01282 8.51098,15.29624 2.89698,1.79771 6.18761,2.70498 9.49023,2.70498 2.73138,0 5.46758,-0.62164 7.99495,-1.87212 l 96.18649,-47.67442 c 6.12041,-3.03381 9.99668,-9.27184 10.00628,-16.1051 l 0.1848,-142.50242 163.82069,-198.70225 c 7.13328,-7.543708 10.67112,-15.901074 10.67112,-25.139295 z M 111.03139,53.012277 c 39.6675,-8.926207 91.15097,-13.841734 144.9698,-13.841734 53.81885,0 105.30474,4.915527 144.96741,13.841734 43.80295,9.857468 56.11578,20.451778 59.06078,23.824008 -2.94738,3.37223 -15.25783,13.96654 -59.06078,23.824005 -39.66267,8.92622 -91.15096,13.84174 -144.96741,13.84174 -53.81643,0 -105.3023,-4.91552 -144.9698,-13.83933 C 67.230834,90.80523 54.915609,80.210909 51.970602,76.838689 54.915609,73.464055 67.230834,62.869745 111.03139,53.012277 Z M 290.30192,282.7534 c -2.65217,3.21862 -4.10668,7.25569 -4.11148,11.42719 l -0.18001,137.8005 -60.19847,29.83882 V 294.20458 c 0,-4.17868 -1.4521,-8.22776 -4.11148,-11.45118 L 99.909045,135.02822 c 42.708495,9.98948 97.811415,15.47865 156.092145,15.47865 58.28314,0 113.38367,-5.48917 156.09217,-15.47865 z"
|
||||
id="path1680"
|
||||
style="stroke-width:2.4;stroke-miterlimit:4;stroke-dasharray:none;fill:#afb1b3;fill-opacity:1" />
|
||||
<g
|
||||
id="g1682"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1684"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1686"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1688"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1690"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1692"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1694"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1696"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1698"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1700"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1702"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1704"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1706"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1708"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1710"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
108
bauh/view/resources/style/darcula/img/filter_focused.svg
Normal file
@@ -0,0 +1,108 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512.00002 512.00002"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="filter_focused.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata1717"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs1715" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview1713"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.67994117"
|
||||
inkscape:cx="416.65942"
|
||||
inkscape:cy="286.29615"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<path
|
||||
d="m 496.67267,76.836285 c 0,-24.97369 -25.79215,-43.560542 -78.85493,-56.826244 C 374.3748,9.1493067 316.90773,3.1681057 256.00119,3.1681057 c -60.9041,0 -118.3736,5.981201 -161.816529,16.8419353 C 41.121868,33.275743 15.32733,51.862595 15.32733,76.836285 c 0,9.240624 3.542636,17.605195 10.680722,25.151305 L 189.80713,300.66582 v 190.16485 c 0,6.22842 3.2186,12.01282 8.51098,15.29624 2.89698,1.79771 6.18761,2.70498 9.49023,2.70498 2.73138,0 5.46758,-0.62164 7.99495,-1.87212 l 96.18649,-47.67442 c 6.12041,-3.03381 9.99668,-9.27184 10.00628,-16.1051 l 0.1848,-142.50242 163.82069,-198.70225 c 7.13328,-7.543708 10.67112,-15.901074 10.67112,-25.139295 z M 111.03139,53.012277 c 39.6675,-8.926207 91.15097,-13.841734 144.9698,-13.841734 53.81885,0 105.30474,4.915527 144.96741,13.841734 43.80295,9.857468 56.11578,20.451778 59.06078,23.824008 -2.94738,3.37223 -15.25783,13.96654 -59.06078,23.824005 -39.66267,8.92622 -91.15096,13.84174 -144.96741,13.84174 -53.81643,0 -105.3023,-4.91552 -144.9698,-13.83933 C 67.230834,90.80523 54.915609,80.210909 51.970602,76.838689 54.915609,73.464055 67.230834,62.869745 111.03139,53.012277 Z M 290.30192,282.7534 c -2.65217,3.21862 -4.10668,7.25569 -4.11148,11.42719 l -0.18001,137.8005 -60.19847,29.83882 V 294.20458 c 0,-4.17868 -1.4521,-8.22776 -4.11148,-11.45118 L 99.909045,135.02822 c 42.708495,9.98948 97.811415,15.47865 156.092145,15.47865 58.28314,0 113.38367,-5.48917 156.09217,-15.47865 z"
|
||||
id="path1680"
|
||||
style="stroke-width:2.4;stroke-miterlimit:4;stroke-dasharray:none;fill:#6591b2;fill-opacity:1" />
|
||||
<g
|
||||
id="g1682"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1684"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1686"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1688"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1690"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1692"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1694"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1696"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1698"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1700"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1702"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1704"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1706"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1708"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
<g
|
||||
id="g1710"
|
||||
style="fill:#a9abac;fill-opacity:1">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
38
bauh/view/resources/img/about.svg → bauh/view/resources/style/darcula/img/help.svg
Executable file → Normal file
@@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
@@ -13,15 +11,15 @@
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="23.99629"
|
||||
height="24.016451"
|
||||
viewBox="0 0 23.99629 24.016451"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="about.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
|
||||
sodipodi:docname="help.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata933"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs931">
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
@@ -37,18 +35,19 @@
|
||||
inkscape:window-height="739"
|
||||
id="namedview929"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
showborder="true"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="8.0000001"
|
||||
inkscape:cx="-11.089885"
|
||||
inkscape:cy="21.17809"
|
||||
inkscape:zoom="0.70710679"
|
||||
inkscape:cx="406.89771"
|
||||
inkscape:cy="275.80808"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1" />
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
|
||||
<g
|
||||
id="g898"
|
||||
@@ -110,14 +109,7 @@
|
||||
id="g926"
|
||||
transform="translate(239.5083,-10.347359)">
|
||||
</g>
|
||||
<ellipse
|
||||
style="fill:#37abc8;fill-opacity:1;stroke:#37abc8;stroke-width:0.089;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
<path
|
||||
id="path939"
|
||||
cx="11.998145"
|
||||
cy="12.008225"
|
||||
rx="11.953516"
|
||||
ry="11.963586" /><path
|
||||
style="fill:#ffffff;stroke-width:0.40259773"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path894"
|
||||
d="m 11.827314,5.6932365 c 2.182771,0 4.331738,1.0061128 4.331738,3.4126472 0,2.2192483 -2.540932,3.0727113 -3.086624,3.8746213 -0.409672,0.596498 -0.272847,1.434657 -1.398439,1.434657 -0.733224,0 -1.091385,-0.596901 -1.091385,-1.143054 0,-2.032363 2.983603,-2.492324 2.983603,-4.1658216 0,-0.9211286 -0.612496,-1.4672811 -1.636273,-1.4672811 -2.1827713,0 -1.330428,2.2522746 -2.9836036,2.2522746 -0.5968012,0 -1.1090924,-0.3584629 -1.1090924,-1.0407506 -4.024e-4,-1.6739009 1.9091198,-3.1572928 3.990076,-3.1572928 z m -0.08491,9.8299375 c 0.766224,0 1.398438,0.630735 1.398438,1.40002 0,0.769285 -0.631007,1.400019 -1.398438,1.400019 -0.767431,0 -1.398841,-0.629928 -1.398841,-1.400019 0,-0.768883 0.63141,-1.40002 1.398841,-1.40002 z" /></svg>
|
||||
style="fill:#3592c4;fill-opacity:1;stroke:#3592c4;stroke-width:1.88256;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 255.87109 2.9414062 A 252.84608 253.05907 0 0 0 3.1542969 256 A 252.84608 253.05907 0 0 0 256 509.05859 A 252.84608 253.05907 0 0 0 508.8457 256 A 252.84608 253.05907 0 0 0 256 2.9414062 A 252.84608 253.05907 0 0 0 255.87109 2.9414062 z M 252.38672 122.42188 C 298.55766 122.42188 344.01367 143.70333 344.01367 194.60742 C 344.01367 241.54994 290.26733 259.60406 278.72461 276.56641 C 270.05905 289.1838 272.95161 306.91211 249.14258 306.91211 C 233.63311 306.91211 226.05859 294.28684 226.05859 282.73438 C 226.05859 239.74492 289.16797 230.01576 289.16797 194.61719 C 289.16797 175.13307 276.21203 163.58008 254.55664 163.58008 C 208.3857 163.58008 226.41598 211.2207 191.44727 211.2207 C 178.82347 211.2207 167.98633 203.63908 167.98633 189.20703 C 167.97733 153.79994 208.3694 122.42188 252.38672 122.42188 z M 250.58984 330.34961 C 266.79735 330.34961 280.16992 343.69063 280.16992 359.96289 C 280.16992 376.23515 266.82288 389.57812 250.58984 389.57812 C 234.35681 389.57812 221.00195 376.2522 221.00195 359.96289 C 221.00195 343.69914 234.35681 330.34961 250.58984 330.34961 z " /></svg>
|
||||
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.8 KiB |
73
bauh/view/resources/style/darcula/img/history.svg
Normal file
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Capa_1"
|
||||
enable-background="new 0 0 512 512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
width="512"
|
||||
version="1.1"
|
||||
sodipodi:docname="history.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata17">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs15" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview13"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.79135193"
|
||||
inkscape:cx="215.10201"
|
||||
inkscape:cy="280.98293"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g10"
|
||||
transform="matrix(0.97954423,0,0,0.97954423,5.2366771,5.2366771)"
|
||||
style="fill:#ffffff;fill-opacity:1">
|
||||
<path
|
||||
d="m 163.268,407.746 c -2.895,-0.211 -5.809,-0.317 -8.74,-0.317 h -101.801 -15 V 114.245 H 0 v 330.591 h 240.879 l -3.386,-3.345 c -20.156,-19.905 -46.244,-31.707 -74.225,-33.745 z"
|
||||
id="path2"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
<path
|
||||
d="M 154.528,67.164 H 67.727 v 310.265 h 86.802 c 31.445,0 61.437,9.769 86.472,27.849 V 104.69 l -3.507,-3.464 C 215.252,79.262 185.788,67.164 154.528,67.164 Z m 34.394,240.079 h -69.117 v -30 h 69.117 z m 0,-67.469 h -69.117 v -30 h 69.117 z m 0,-67.469 h -69.117 v -30 h 69.117 z"
|
||||
id="path4"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
<path
|
||||
d="M 444.273,377.429 V 67.164 h -86.802 c -31.26,0 -60.724,12.098 -82.966,34.063 L 271,104.69 v 300.587 c 25.035,-18.08 55.027,-27.849 86.472,-27.849 h 86.801 z M 323.078,142.305 h 69.117 v 30 h -69.117 z m 0,67.469 h 69.117 v 30 h -69.117 z m 0,67.469 h 69.117 v 30 h -69.117 z"
|
||||
id="path6"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
<path
|
||||
d="M 474.273,114.245 V 407.429 H 357.472 c -31.26,0 -60.724,12.097 -82.966,34.063 l -3.385,3.344 H 512 V 114.245 Z"
|
||||
id="path8"
|
||||
style="fill:#ffffff;fill-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.8 KiB |
72
bauh/view/resources/style/darcula/img/ignore_update.svg
Normal file
@@ -0,0 +1,72 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
viewBox="0 0 512 512"
|
||||
enable-background="new 0 0 26 26"
|
||||
id="svg8"
|
||||
sodipodi:docname="ignore_update.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512">
|
||||
<metadata
|
||||
id="metadata14">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs12" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview10"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.80229424"
|
||||
inkscape:cx="65.887412"
|
||||
inkscape:cy="257.44157"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg8"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<path
|
||||
d="m 488.01383,339.78278 h -38.66897 c -11.60069,0 -19.33449,8.37828 -19.33449,20.9457 v 52.36424 c 0,6.28371 -3.86689,10.47285 -9.66724,10.47285 H 91.656869 c -5.800346,0 -9.667243,-4.18914 -9.667243,-10.47285 v -52.36424 c 0,-12.56742 -7.733794,-20.9457 -19.334486,-20.9457 H 23.986168 c -11.600692,0 -19.334486,8.37828 -19.334486,20.9457 v 125.67418 c 0,12.56741 7.733794,20.94569 19.334486,20.94569 H 488.01383 c 11.60069,0 19.33449,-8.37828 19.33449,-20.94569 V 360.72848 c 0,-12.56742 -7.7338,-20.9457 -19.33449,-20.9457 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 242.46586,333.49908 c 3.8669,4.18913 9.66724,6.2837 13.53414,6.2837 3.8669,0 9.66724,-2.09457 13.53414,-6.2837 L 385.54106,207.8249 c 3.86689,-4.18914 5.80034,-8.37828 5.80034,-14.66199 0,-6.28371 -1.93345,-10.47285 -5.80034,-14.66199 l -27.06828,-29.32397 c -3.8669,-4.18914 -7.7338,-6.28371 -13.53414,-6.28371 -5.80035,0 -9.66725,2.09457 -13.53414,6.28371 l -19.33449,20.9457 c -5.80035,6.28371 -17.40104,2.09457 -17.40104,-8.37828 V 25.597344 c 0,-12.567418 -7.73379,-20.945696 -19.33448,-20.945696 h -38.66898 c -11.60069,0 -19.33448,8.378278 -19.33448,20.945696 V 163.83894 c 0,8.37828 -9.66725,14.66198 -17.40104,8.37828 l -19.33449,-20.9457 c -3.86689,-4.18914 -7.73379,-6.28371 -13.53414,-6.28371 -5.80034,0 -9.66724,2.09457 -13.53414,6.28371 l -27.06828,29.32397 c -3.86689,4.18914 -5.80034,8.37828 -5.80034,14.66199 0,6.28371 1.93345,10.47285 5.80034,14.66199 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:none;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
style="fill:none;stroke:#ff6b68;stroke-width:84.1598;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 34.308581,477.05063 476.22097,34.098708"
|
||||
id="path1411" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -9,12 +9,12 @@
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Capa_1"
|
||||
enable-background="new 0 0 512 512"
|
||||
height="12"
|
||||
viewBox="0 0 12 12"
|
||||
width="12"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
width="512"
|
||||
version="1.1"
|
||||
sodipodi:docname="app_info.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata877">
|
||||
<rdf:RDF>
|
||||
@@ -43,9 +43,9 @@
|
||||
id="namedview873"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="11.335805"
|
||||
inkscape:cx="23.192934"
|
||||
inkscape:cy="10.264189"
|
||||
inkscape:zoom="0.70848781"
|
||||
inkscape:cx="186.38588"
|
||||
inkscape:cy="282.80121"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -53,21 +53,22 @@
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g7850"
|
||||
transform="matrix(0.4246507,0,0,0.40528756,2.7763597,0.92203188)"
|
||||
style="stroke:#37abc8;stroke-width:1.53208435;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
transform="matrix(21.043431,0,0,20.083897,96.253524,4.3628939)"
|
||||
style="stroke:#3592c4;stroke-width:1.53208;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
|
||||
<circle
|
||||
cx="7.5912747"
|
||||
cy="21.699696"
|
||||
r="2.6452355"
|
||||
id="circle866"
|
||||
style="fill:none;stroke:#37abc8;stroke-width:1.53208435;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
style="fill:none;stroke:#3592c4;stroke-width:1.53208;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
|
||||
<path
|
||||
d="m 7.591275,0.71366244 c -3.7923421,0 -6.8776126,3.08527056 -6.8776126,6.87761256 V 8.2525839 H 6.0041336 V 7.591275 c 0,-0.8751762 0.7119652,-1.5871414 1.5871414,-1.5871414 0.8751762,0 1.5871413,0.7119652 1.5871413,1.5871414 0,0.466355 -0.2046971,0.9077567 -0.5616717,1.2111211 L 4.9460394,11.923201 v 4.75005 h 5.2904716 v -2.303912 l 1.806519,-1.535868 c 1.541643,-1.310009 2.425858,-3.2206629 2.425858,-5.242196 0,-3.792342 -3.085271,-6.87761256 -6.877613,-6.87761256 z"
|
||||
id="path868"
|
||||
style="fill:none;stroke:#37abc8;stroke-width:1.53208435;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
style="fill:none;stroke:#3592c4;stroke-width:1.53208;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
78
bauh/view/resources/style/darcula/img/installed.svg
Normal file
@@ -0,0 +1,78 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="Layer_1"
|
||||
enable-background="new 0 0 512 512"
|
||||
height="512"
|
||||
viewBox="0 0 512 512"
|
||||
width="512"
|
||||
version="1.1"
|
||||
sodipodi:docname="installed.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata19">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs17" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview15"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.79135193"
|
||||
inkscape:cx="136.26698"
|
||||
inkscape:cy="280.61282"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Layer_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g12"
|
||||
transform="matrix(0.99070052,0,0,0.99070052,2.3806669,2.3807133)"
|
||||
style="fill:#8888c6;fill-opacity:1">
|
||||
<path
|
||||
d=""
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#000000;stroke-width:32;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
id="path2" />
|
||||
<path
|
||||
d=""
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#000000;stroke-width:32;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10"
|
||||
id="path4" />
|
||||
<path
|
||||
d="M 236.94,237.109 6.94,140.267 C 3.645,138.879 0,141.299 0,144.875 v 258.899 c 0,6.542 3.983,12.426 10.058,14.855 l 223.085,89.234 c 3.284,1.314 6.857,-1.105 6.857,-4.642 V 241.717 c 0,-2.012 -1.206,-3.827 -3.06,-4.608 z"
|
||||
id="path6"
|
||||
style="fill:#8888c6;fill-opacity:1" />
|
||||
<path
|
||||
d="M 257.94,209.596 480.255,115.99 c 3.996,-1.682 4.103,-7.306 0.174,-9.139 L 262.766,5.275 c -4.289,-2.001 -9.243,-2.001 -13.532,0 L 31.571,106.851 c -3.929,1.833 -3.822,7.457 0.174,9.139 l 222.315,93.606 c 1.24,0.523 2.64,0.523 3.88,0 z"
|
||||
id="path8"
|
||||
style="fill:#8888c6;fill-opacity:1" />
|
||||
<path
|
||||
d="m 272,241.717 v 261.504 c 0,3.537 3.573,5.956 6.857,4.642 L 501.942,418.629 C 508.016,416.199 512,410.316 512,403.774 V 144.875 c 0,-3.576 -3.645,-5.996 -6.94,-4.608 l -230,96.842 c -1.854,0.781 -3.06,2.596 -3.06,4.608 z"
|
||||
id="path10"
|
||||
style="fill:#8888c6;fill-opacity:1" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
67
bauh/view/resources/style/darcula/img/menu.svg
Normal file
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
height="512pt"
|
||||
viewBox="0 -53 512 512"
|
||||
width="512pt"
|
||||
version="1.1"
|
||||
id="svg3664"
|
||||
sodipodi:docname="menu.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)">
|
||||
<metadata
|
||||
id="metadata3670">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs3668" />
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview3666"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.55957031"
|
||||
inkscape:cx="316.76091"
|
||||
inkscape:cy="367.53464"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg3664"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g1643">
|
||||
<path
|
||||
d="M 464.87025,61.99042 H 47.12974 c -10.481526,0 -18.988205,-14.107647 -18.988205,-31.490435 0,-17.382775 8.506679,-31.49042192 18.988205,-31.49042192 h 417.74051 c 10.48152,0 18.9882,14.10764692 18.9882,31.49042192 0,17.382788 -8.50668,31.490435 -18.9882,31.490435 z m 0,0"
|
||||
id="path3660"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke-width:1.52831" />
|
||||
<path
|
||||
d="M 464.87025,234.49042 H 47.12974 c -10.481526,0 -18.988205,-14.10765 -18.988205,-31.49044 0,-17.38277 8.506679,-31.49042 18.988205,-31.49042 h 417.74051 c 10.48152,0 18.9882,14.10765 18.9882,31.49042 0,17.38279 -8.50668,31.49044 -18.9882,31.49044 z m 0,0"
|
||||
id="path4046"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke-width:1.52831" />
|
||||
<path
|
||||
d="M 464.87025,406.99042 H 47.12974 c -10.481526,0 -18.988205,-14.10765 -18.988205,-31.49044 0,-17.38277 8.506679,-31.49042 18.988205,-31.49042 h 417.74051 c 10.48152,0 18.9882,14.10765 18.9882,31.49042 0,17.38279 -8.50668,31.49044 -18.9882,31.49044 z m 0,0"
|
||||
id="path4048"
|
||||
style="fill:#8888c6;fill-opacity:1;stroke-width:1.52831" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
33
bauh/view/resources/img/refresh.svg → bauh/view/resources/style/darcula/img/refresh.svg
Executable file → Normal file
@@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
@@ -13,12 +11,12 @@
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 23.999999 24"
|
||||
width="512"
|
||||
height="512"
|
||||
viewBox="0 0 511.99998 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="refresh.svg"
|
||||
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata45"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
@@ -32,13 +30,13 @@
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="731"
|
||||
inkscape:window-height="739"
|
||||
id="namedview41"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="1.9374833"
|
||||
inkscape:cx="-64.984391"
|
||||
inkscape:cy="25.848163"
|
||||
inkscape:zoom="0.48437083"
|
||||
inkscape:cx="133.71431"
|
||||
inkscape:cy="289.92474"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -46,24 +44,25 @@
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g8"
|
||||
transform="matrix(0.0488044,0,0,0.04558654,0.11053708,0.89443506)"
|
||||
style="fill:none;fill-opacity:1;stroke:#37abc8;stroke-width:39.24114227">
|
||||
transform="matrix(1.0938971,0,0,1.0217723,-10.489433,7.0809411)"
|
||||
style="fill:#3592c4;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<g
|
||||
id="g6"
|
||||
style="fill:none;fill-opacity:1;stroke:#37abc8;stroke-width:39.24114227">
|
||||
style="fill:#3592c4;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none">
|
||||
<path
|
||||
d="m 55.323,203.641 c 15.664,0 29.813,-9.405 35.872,-23.854 25.017,-59.604 83.842,-101.61 152.42,-101.61 37.797,0 72.449,12.955 100.23,34.442 l -21.775,3.371 c -7.438,1.153 -13.224,7.054 -14.232,14.512 -1.01,7.454 3.008,14.686 9.867,17.768 l 119.746,53.872 c 5.249,2.357 11.33,1.904 16.168,-1.205 4.83,-3.114 7.764,-8.458 7.796,-14.208 l 0.621,-131.943 c 0.042,-7.506 -4.851,-14.144 -12.024,-16.332 -7.185,-2.188 -14.947,0.589 -19.104,6.837 L 414.403,70.096 C 370.398,26.778 310.1,0 243.615,0 142.806,0 56.133,61.562 19.167,149.06 c -5.134,12.128 -3.84,26.015 3.429,36.987 7.269,10.976 19.556,17.594 32.727,17.594 z"
|
||||
id="path2"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;fill-opacity:1;stroke:#37abc8;stroke-width:39.24114227" />
|
||||
style="fill:#3592c4;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
<path
|
||||
d="m 464.635,301.184 c -7.27,-10.977 -19.558,-17.594 -32.728,-17.594 -15.664,0 -29.813,9.405 -35.872,23.854 -25.018,59.604 -83.843,101.61 -152.42,101.61 -37.798,0 -72.45,-12.955 -100.232,-34.442 l 21.776,-3.369 c 7.437,-1.153 13.223,-7.055 14.233,-14.514 1.009,-7.453 -3.008,-14.686 -9.867,-17.768 L 49.779,285.089 c -5.25,-2.356 -11.33,-1.905 -16.169,1.205 -4.829,3.114 -7.764,8.458 -7.795,14.207 l -0.622,131.943 c -0.042,7.506 4.85,14.144 12.024,16.332 7.185,2.188 14.948,-0.59 19.104,-6.839 l 16.505,-24.805 c 44.004,43.32 104.303,70.098 170.788,70.098 100.811,0 187.481,-61.561 224.446,-149.059 5.137,-12.128 3.843,-26.014 -3.425,-36.987 z"
|
||||
id="path4"
|
||||
inkscape:connector-curvature="0"
|
||||
style="fill:none;fill-opacity:1;stroke:#37abc8;stroke-width:39.24114227" />
|
||||
style="fill:#3592c4;fill-opacity:1;stroke:none;stroke-width:39.2413;stroke-miterlimit:4;stroke-dasharray:none" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
@@ -126,4 +125,4 @@
|
||||
id="g38"
|
||||
transform="translate(-15.027876,-464.19647)">
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@@ -11,12 +11,12 @@
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 23.515307 24"
|
||||
viewBox="0 0 512.00001 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="revert_update_ignored.svg"
|
||||
width="23.515306"
|
||||
height="24"
|
||||
inkscape:version="1.0 (4035a4fb49, 2020-05-01)"><metadata
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata977"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
@@ -30,8 +30,8 @@
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="871"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview973"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
@@ -39,9 +39,9 @@
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:zoom="6.7086704"
|
||||
inkscape:cx="48.469191"
|
||||
inkscape:cy="14.670878"
|
||||
inkscape:zoom="0.8385838"
|
||||
inkscape:cx="183.99219"
|
||||
inkscape:cy="298.52893"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
@@ -138,52 +138,52 @@
|
||||
id="g1633" /><g
|
||||
transform="matrix(0.0625,0,0,0.0625,5.3383307,-186.94071)"
|
||||
id="g1635" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g3479"
|
||||
transform="matrix(0.04614971,0,0,0.04614971,-0.05664347,0.18569731)"><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
transform="matrix(0.97444257,0,0,0.97444257,6.5433156,6.5431893)"><g
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g3455"><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2828"><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2826"><path
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="M 508.745,246.041 C 504.171,239.784 395.188,92.835 255.997,92.835 c -139.191,0 -248.179,146.949 -252.748,153.2 -4.332,5.936 -4.332,13.987 0,19.923 4.569,6.257 113.557,153.206 252.748,153.206 139.191,0 248.174,-146.95 252.748,-153.201 4.338,-5.935 4.338,-13.992 0,-19.922 z M 255.997,385.406 c -102.529,0 -191.33,-97.533 -217.617,-129.418 26.253,-31.913 114.868,-129.395 217.617,-129.395 102.524,0 191.319,97.516 217.617,129.418 -26.253,31.912 -114.868,129.395 -217.617,129.395 z"
|
||||
id="path2824" /></g></g><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2834"><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2832"><path
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 255.997,154.725 c -55.842,0 -101.275,45.433 -101.275,101.275 0,55.842 45.433,101.275 101.275,101.275 55.842,0 101.275,-45.433 101.275,-101.275 0,-55.842 -45.433,-101.275 -101.275,-101.275 z m 0,168.791 c -37.23,0 -67.516,-30.287 -67.516,-67.516 0,-37.229 30.287,-67.516 67.516,-67.516 37.229,0 67.516,30.287 67.516,67.516 0,37.229 -30.286,67.516 -67.516,67.516 z"
|
||||
id="path2830" /></g></g><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2836" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2838" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2840" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2842" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2844" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2846" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2848" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2850" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2852" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2854" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2856" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2858" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2860" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2862" /><g
|
||||
style="fill:#91a069;fill-opacity:1;stroke:#447821;stroke-width:8.06072238;stroke-miterlimit:4;stroke-dasharray:none"
|
||||
style="fill:#499c54;fill-opacity:1;stroke:#499c54;stroke-width:8.06072;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="g2864" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.3 KiB |
119
bauh/view/resources/style/darcula/img/search.svg
Normal file
@@ -0,0 +1,119 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="search.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512"><metadata
|
||||
id="metadata126"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs124" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview122"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.45254834"
|
||||
inkscape:cx="67.686957"
|
||||
inkscape:cy="197.98638"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="Search"
|
||||
transform="matrix(2.0004545,0,0,2.0004545,5.6311166,5.6311166)"
|
||||
style="fill:#afb1b3;fill-opacity:1">
|
||||
<path
|
||||
style="clip-rule:evenodd;fill:#afb1b3;fill-opacity:1;fill-rule:evenodd"
|
||||
d="m 244.186,214.604 -54.379,-54.378 c -0.289,-0.289 -0.628,-0.491 -0.93,-0.76 10.7,-16.231 16.945,-35.66 16.945,-56.554 C 205.822,46.075 159.747,0 102.911,0 46.075,0 0,46.075 0,102.911 c 0,56.835 46.074,102.911 102.91,102.911 20.895,0 40.323,-6.245 56.554,-16.945 0.269,0.301 0.47,0.64 0.759,0.929 l 54.38,54.38 c 8.169,8.168 21.413,8.168 29.583,0 8.168,-8.169 8.168,-21.413 0,-29.582 z M 102.911,170.146 c -37.134,0 -67.236,-30.102 -67.236,-67.235 0,-37.134 30.103,-67.236 67.236,-67.236 37.132,0 67.235,30.103 67.235,67.236 0,37.133 -30.103,67.235 -67.235,67.235 z"
|
||||
id="path88"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
<g
|
||||
id="g91"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g93"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g95"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g97"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g99"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g101"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g103"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g105"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g107"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g109"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g111"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g113"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g115"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g117"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
<g
|
||||
id="g119"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
33
bauh/view/resources/img/search.svg → bauh/view/resources/style/darcula/img/search_focused.svg
Executable file → Normal file
@@ -1,6 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
@@ -13,12 +11,12 @@
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 12 12"
|
||||
viewBox="0 0 512 512"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="search.svg"
|
||||
inkscape:version="0.92.3 (2405546, 2018-03-11)"
|
||||
width="12"
|
||||
height="12"><metadata
|
||||
sodipodi:docname="search_focused.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512"><metadata
|
||||
id="metadata126"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
@@ -35,24 +33,25 @@
|
||||
inkscape:window-height="739"
|
||||
id="namedview122"
|
||||
showgrid="false"
|
||||
showborder="false"
|
||||
inkscape:zoom="0.53133476"
|
||||
inkscape:cx="834.65593"
|
||||
inkscape:cy="-101.88082"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.45254834"
|
||||
inkscape:cx="67.686957"
|
||||
inkscape:cy="197.98638"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="260"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="Search"
|
||||
transform="scale(0.04794017)"
|
||||
style="fill:#999999">
|
||||
transform="matrix(2.0004545,0,0,2.0004545,5.6311166,5.6311166)"
|
||||
style="fill:#6591b2;fill-opacity:1">
|
||||
<path
|
||||
style="clip-rule:evenodd;fill:#999999;fill-rule:evenodd"
|
||||
style="clip-rule:evenodd;fill:#6591b2;fill-opacity:1;fill-rule:evenodd"
|
||||
d="m 244.186,214.604 -54.379,-54.378 c -0.289,-0.289 -0.628,-0.491 -0.93,-0.76 10.7,-16.231 16.945,-35.66 16.945,-56.554 C 205.822,46.075 159.747,0 102.911,0 46.075,0 0,46.075 0,102.911 c 0,56.835 46.074,102.911 102.91,102.911 20.895,0 40.323,-6.245 56.554,-16.945 0.269,0.301 0.47,0.64 0.759,0.929 l 54.38,54.38 c 8.169,8.168 21.413,8.168 29.583,0 8.168,-8.169 8.168,-21.413 0,-29.582 z M 102.911,170.146 c -37.134,0 -67.236,-30.102 -67.236,-67.235 0,-37.134 30.103,-67.236 67.236,-67.236 37.132,0 67.235,30.103 67.235,67.236 0,37.133 -30.103,67.235 -67.235,67.235 z"
|
||||
id="path88"
|
||||
inkscape:connector-curvature="0" />
|
||||
@@ -117,4 +116,4 @@
|
||||
id="g119"
|
||||
transform="translate(0,-238.312)">
|
||||
</g>
|
||||
</svg>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
102
bauh/view/resources/style/darcula/img/settings.svg
Normal file
@@ -0,0 +1,102 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512.00001 512.00001"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="settings.svg"
|
||||
width="512"
|
||||
height="512"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"><metadata
|
||||
id="metadata3467"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs3465" /><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview3463"
|
||||
showgrid="false"
|
||||
inkscape:zoom="0.94962159"
|
||||
inkscape:cx="386.84916"
|
||||
inkscape:cy="274.17305"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
inkscape:document-rotation="0" />
|
||||
<g
|
||||
id="g3430"
|
||||
style="fill:#8888c6;fill-opacity:1"
|
||||
transform="matrix(1.1874452,0,0,1.1874452,2.6781594,2.6787531)">
|
||||
<g
|
||||
id="g3428"
|
||||
style="fill:#8888c6;fill-opacity:1">
|
||||
<path
|
||||
d="m 416.8,269.44 -45.013,-35.307 c 0.853,-6.827 1.493,-13.76 1.493,-20.8 0,-7.04 -0.64,-13.973 -1.493,-20.8 l 45.12,-35.307 c 4.053,-3.2 5.227,-8.96 2.56,-13.653 L 376.8,69.653 c -2.667,-4.587 -8.213,-6.507 -13.013,-4.587 l -53.12,21.44 C 299.68,78.079 287.627,70.933 274.614,65.493 l -8,-56.533 C 265.653,3.947 261.28,0 255.947,0 h -85.333 c -5.333,0 -9.707,3.947 -10.56,8.96 l -8,56.533 c -13.013,5.44 -25.067,12.48 -36.053,21.013 l -53.12,-21.44 c -4.8,-1.813 -10.347,0 -13.013,4.587 L 7.2,143.573 c -2.667,4.587 -1.493,10.347 2.56,13.653 l 45.013,35.307 c -0.853,6.827 -1.493,13.76 -1.493,20.8 0,7.04 0.64,13.973 1.493,20.8 L 9.76,269.44 c -4.053,3.2 -5.227,8.96 -2.56,13.653 l 42.667,73.92 c 2.667,4.587 8.213,6.507 13.013,4.587 L 116,340.16 c 10.987,8.427 23.04,15.573 36.053,21.013 l 8,56.533 c 0.853,5.013 5.227,8.96 10.56,8.96 h 85.333 c 5.333,0 9.707,-3.947 10.56,-8.96 l 8,-56.533 c 13.013,-5.44 25.067,-12.48 36.053,-21.013 l 53.12,21.44 c 4.8,1.813 10.347,0 13.013,-4.587 l 42.667,-73.92 c 2.668,-4.586 1.494,-10.346 -2.559,-13.653 z M 213.28,288 c -41.28,0 -74.667,-33.387 -74.667,-74.667 0,-41.28 33.387,-74.666 74.667,-74.666 41.28,0 74.667,33.387 74.667,74.667 0,41.28 -33.387,74.666 -74.667,74.666 z"
|
||||
id="path3426"
|
||||
style="fill:#8888c6;fill-opacity:1" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g3432">
|
||||
</g>
|
||||
<g
|
||||
id="g3434">
|
||||
</g>
|
||||
<g
|
||||
id="g3436">
|
||||
</g>
|
||||
<g
|
||||
id="g3438">
|
||||
</g>
|
||||
<g
|
||||
id="g3440">
|
||||
</g>
|
||||
<g
|
||||
id="g3442">
|
||||
</g>
|
||||
<g
|
||||
id="g3444">
|
||||
</g>
|
||||
<g
|
||||
id="g3446">
|
||||
</g>
|
||||
<g
|
||||
id="g3448">
|
||||
</g>
|
||||
<g
|
||||
id="g3450">
|
||||
</g>
|
||||
<g
|
||||
id="g3452">
|
||||
</g>
|
||||
<g
|
||||
id="g3454">
|
||||
</g>
|
||||
<g
|
||||
id="g3456">
|
||||
</g>
|
||||
<g
|
||||
id="g3458">
|
||||
</g>
|
||||
<g
|
||||
id="g3460">
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.2 KiB |
137
bauh/view/resources/style/darcula/img/suggestions.svg
Normal file
@@ -0,0 +1,137 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="Capa_1"
|
||||
x="0px"
|
||||
y="0px"
|
||||
viewBox="0 0 512 512.00002"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="suggestions.svg"
|
||||
inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
|
||||
width="512"
|
||||
height="512"><metadata
|
||||
id="metadata3871"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs3869">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="739"
|
||||
id="namedview3867"
|
||||
showgrid="false"
|
||||
showborder="true"
|
||||
inkscape:zoom="0.42190923"
|
||||
inkscape:cx="312.48671"
|
||||
inkscape:cy="404.82957"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="Capa_1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:document-rotation="0" />
|
||||
|
||||
<g
|
||||
id="g3836"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3838"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3840"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3842"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3844"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3846"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3848"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3850"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3852"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3854"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3856"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3858"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3860"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3862"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g3864"
|
||||
transform="translate(-38.804984,-406.525)">
|
||||
</g>
|
||||
<g
|
||||
id="g1560"><path
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-width:25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 256.00003,16.916451 c -94.96346,0 -172.547989,73.786887 -172.547989,164.102049 0,47.2236 21.723669,92.67633 58.343579,123.37168 27.30975,25.97299 24.82703,81.46074 24.20637,82.05105 0,2.95145 0.62068,5.31264 3.10338,7.67382 1.86203,1.77075 4.9654,2.95149 7.44811,2.95149 h 158.27245 c 3.10338,0 5.58607,-1.18077 7.4481,-2.95149 1.86195,-1.77075 3.1034,-4.72237 3.1034,-7.67382 0,-0.59025 -3.1034,-56.07806 24.20636,-82.05105 0.62074,-0.59025 1.24147,-1.18076 1.86195,-1.77075 35.99923,-31.28563 57.10222,-75.55778 57.10222,-121.60081 0,-90.315153 -77.58454,-164.102041 -172.54801,-164.102041 z M 355.30824,289.0425 c -0.62073,0.59025 -1.86195,1.77101 -1.86195,2.36126 -24.20638,24.79241 -28.5511,65.52277 -29.17179,85.00251 H 187.10497 c -0.62069,-19.47982 -4.9654,-61.98105 -31.03381,-87.36377 -32.89583,-27.15359 -52.1368,-66.70333 -52.1368,-108.61431 0,-79.68983 67.65372,-144.031999 151.44501,-144.031999 83.79128,0 151.44499,64.342169 151.44499,144.031999 0,41.91098 -18.62028,81.46072 -51.51612,108.61431 z"
|
||||
id="path3812"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#6e6e6e;fill-opacity:1;stroke:#8888c6;stroke-width:25;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 303.79211,445.49876 h -96.82549 c -14.27556,0 -26.0684,11.21561 -26.0684,24.79241 0,13.57677 11.79284,24.79238 26.0684,24.79238 h 96.82549 c 14.27556,0 26.06841,-11.21561 26.06841,-24.79238 0,-14.1671 -11.79285,-24.79241 -26.06841,-24.79241 z m 0,28.92447 h -96.82549 c -2.48268,0 -4.96542,-1.77076 -4.96542,-4.72237 0,-2.95147 1.86203,-4.72236 4.96542,-4.72236 h 96.82549 c 2.48268,0 4.96541,1.77075 4.96541,4.72236 0,2.95149 -2.4827,4.72237 -4.96541,4.72237 z"
|
||||
id="path3818"
|
||||
inkscape:connector-curvature="0" /><path
|
||||
style="fill:#8888c6;fill-opacity:1;stroke:#8888c6;stroke-width:13.356;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 229.00434,88.827447 c -4.96865,0 -9.38524,4.200401 -9.38524,8.925851 0,4.725452 4.41659,8.925862 9.38524,8.925862 55.7594,0 100.47733,43.05411 100.47733,95.55912 0,4.72545 4.4166,8.92585 9.38525,8.92585 4.96866,0 9.38526,-4.2004 9.38526,-8.92585 0.5521,-62.48097 -52.99905,-113.410833 -119.24784,-113.410833 z"
|
||||
id="path3814"
|
||||
inkscape:connector-curvature="0" /></g></svg>
|
||||
|
After Width: | Height: | Size: 5.0 KiB |