Spoolman support close #1060
Refactor post_requrest Switching to TreeView More spool info redesign toggle buttons Allow spoolman while printing Styling checkbox as switch render Toggle switch-like Fixed wrong timezones Filtering spools Removed translations of Spoolman Spool image can be overided in theme Added switch-on/off symbols to toggle rename iter to i to avoid shadowing built-in function remove redundant parenthesis convert spoolcompare to static merge check and treeview shared props reduce spacing of buttons very useful for vertical/portrait fix issue with remainings add spoolman shortcut to extrude Using backports.zoneinfo for python < 3.9 use decorators for properties extract format_date function change top row last used sort rebase on upstream Fix for never used spools Co-authored-by: alfrix <alfredomonclus@gmail.com>
@ -35,18 +35,19 @@ class KlippyRest:
|
||||
def get_thumbnail_stream(self, thumbnail):
|
||||
return self.send_request(f"server/files/gcodes/{thumbnail}", json=False)
|
||||
|
||||
def send_request(self, method, json=True):
|
||||
def _do_request(self, method, request_method, data=None, json=None, json_response=True):
|
||||
url = f"{self.endpoint}/{method}"
|
||||
headers = {} if self.api_key is False else {"x-api-key": self.api_key}
|
||||
data = False
|
||||
response_data = False
|
||||
try:
|
||||
response = requests.get(url, headers=headers, timeout=3)
|
||||
callee = getattr(requests, request_method)
|
||||
response = callee(url, json=json, data=data, headers=headers, timeout=3)
|
||||
response.raise_for_status()
|
||||
if json:
|
||||
if json_response:
|
||||
logging.debug(f"Sending request to {url}")
|
||||
data = response.json()
|
||||
response_data = response.json()
|
||||
else:
|
||||
data = response.content
|
||||
response_data = response.content
|
||||
except requests.exceptions.HTTPError as h:
|
||||
self.status = self.format_status(h)
|
||||
except requests.exceptions.ConnectionError as c:
|
||||
@ -59,11 +60,17 @@ class KlippyRest:
|
||||
self.status = self.format_status(r)
|
||||
except Exception as e:
|
||||
self.status = self.format_status(e)
|
||||
if data:
|
||||
if response_data:
|
||||
self.status = ''
|
||||
else:
|
||||
logging.error(self.status.replace('\n', '>>'))
|
||||
return data
|
||||
return response_data
|
||||
|
||||
def post_request(self, method, data=None, json=None, json_response=True):
|
||||
return self._do_request(method, "post", data, json, json_response)
|
||||
|
||||
def send_request(self, method, json=True):
|
||||
return self._do_request(method, "get", json_response=json)
|
||||
|
||||
@staticmethod
|
||||
def format_status(status):
|
||||
|
@ -173,7 +173,7 @@ class KlipperScreenConfig:
|
||||
strs = (
|
||||
'moonraker_api_key', 'moonraker_host', 'titlebar_name_type',
|
||||
'screw_positions', 'power_devices', 'titlebar_items', 'z_babystep_values',
|
||||
'extrude_distances', "extrude_speeds",
|
||||
'extrude_distances', "extrude_speeds", "camera_url", "spoolman",
|
||||
)
|
||||
numbers = (
|
||||
'moonraker_port', 'move_speed_xy', 'move_speed_z',
|
||||
@ -188,7 +188,9 @@ class KlipperScreenConfig:
|
||||
# This section may be deprecated in favor of moving this options under the printer section
|
||||
numbers = ('rotation', '')
|
||||
strs = ('screw_positions', '')
|
||||
elif section.startswith('graph') or section.startswith('displayed_macros'):
|
||||
elif section.startswith('graph')\
|
||||
or section.startswith('displayed_macros')\
|
||||
or section.startswith('spoolman'):
|
||||
bools = [f'{option}' for option in config[section]]
|
||||
elif section.startswith('z_calibrate_position'):
|
||||
# This section may be deprecated in favor of moving this options under the printer section
|
||||
@ -487,6 +489,7 @@ class KlipperScreenConfig:
|
||||
|
||||
extra_sections = [i for i in self.config.sections() if i.startswith("displayed_macros")]
|
||||
extra_sections.extend([i for i in self.config.sections() if i.startswith("graph")])
|
||||
extra_sections.extend([i for i in self.config.sections() if i.startswith("spoolman")])
|
||||
for section in extra_sections:
|
||||
for item in self.config.options(section):
|
||||
value = self.config[section].getboolean(item, fallback=True)
|
||||
|
@ -281,3 +281,15 @@ enable: {{ moonraker_connected }}
|
||||
name: KlipperScreen
|
||||
icon: settings
|
||||
panel: settings
|
||||
|
||||
[menu __main more spoolman]
|
||||
name: Spoolman
|
||||
icon: spoolman
|
||||
panel: spoolman
|
||||
enable: {{ printer.spoolman }}
|
||||
|
||||
[menu __print spoolman]
|
||||
name: Spoolman
|
||||
icon: spoolman
|
||||
panel: spoolman
|
||||
enable: {{ printer.spoolman }}
|
||||
|
@ -26,6 +26,7 @@ class Printer:
|
||||
self.tempstore_size = 1200
|
||||
self.cameras = []
|
||||
self.available_commands = {}
|
||||
self.spoolman = False
|
||||
|
||||
def reinit(self, printer_info, data):
|
||||
self.config = data['configfile']['config']
|
||||
@ -37,6 +38,7 @@ class Printer:
|
||||
self.fancount = 0
|
||||
self.output_pin_count = 0
|
||||
self.tempstore = {}
|
||||
self.spoolman = False
|
||||
self.busy = False
|
||||
if not self.store_timeout:
|
||||
self.store_timeout = GLib.timeout_add_seconds(1, self._update_temp_store)
|
||||
@ -236,6 +238,7 @@ class Printer:
|
||||
"pause_resume": {"is_paused": self.state == "paused"},
|
||||
"power_devices": {"count": len(self.get_power_devices())},
|
||||
"cameras": {"count": len(self.cameras)},
|
||||
"spoolman": self.spoolman
|
||||
}
|
||||
}
|
||||
|
||||
@ -364,3 +367,7 @@ class Printer:
|
||||
temp = 0
|
||||
self.tempstore[device][x].append(temp)
|
||||
return True
|
||||
|
||||
def enable_spoolman(self):
|
||||
logging.info("Enabling Spoolman")
|
||||
self.spoolman = True
|
||||
|
@ -39,6 +39,7 @@ class Panel(ScreenPanel):
|
||||
'unload': self._gtk.Button("arrow-up", _("Unload"), "color2"),
|
||||
'retract': self._gtk.Button("retract", _("Retract"), "color1"),
|
||||
'temperature': self._gtk.Button("heat-up", _("Temperature"), "color4"),
|
||||
'spoolman': self._gtk.Button("spoolman", "Spoolman", "color3"),
|
||||
}
|
||||
self.buttons['extrude'].connect("clicked", self.extrude, "+")
|
||||
self.buttons['load'].connect("clicked", self.load_unload, "+")
|
||||
@ -48,7 +49,10 @@ class Panel(ScreenPanel):
|
||||
"name": "Temperature",
|
||||
"panel": "temperature"
|
||||
})
|
||||
|
||||
self.buttons['spoolman'].connect("clicked", self.menu_item_clicked, {
|
||||
"name": "Spoolman",
|
||||
"panel": "spoolman"
|
||||
})
|
||||
extgrid = self._gtk.HomogeneousGrid()
|
||||
limit = 5
|
||||
i = 0
|
||||
@ -66,6 +70,8 @@ class Panel(ScreenPanel):
|
||||
i += 1
|
||||
if i < (limit - 1):
|
||||
extgrid.attach(self.buttons['temperature'], i + 1, 0, 1, 1)
|
||||
if i < (limit - 2) and self._printer.spoolman:
|
||||
extgrid.attach(self.buttons['spoolman'], i + 2, 0, 1, 1)
|
||||
|
||||
distgrid = Gtk.Grid()
|
||||
for j, i in enumerate(self.distances):
|
||||
@ -163,7 +169,7 @@ class Panel(ScreenPanel):
|
||||
|
||||
def enable_buttons(self, enable):
|
||||
for button in self.buttons:
|
||||
if button == "temperature":
|
||||
if button in ("temperature", "spoolman"):
|
||||
continue
|
||||
self.buttons[button].set_sensitive(enable)
|
||||
|
||||
|
416
panels/spoolman.py
Normal file
@ -0,0 +1,416 @@
|
||||
import os.path
|
||||
import pathlib
|
||||
import logging
|
||||
import gi
|
||||
|
||||
gi.require_version("Gtk", "3.0")
|
||||
from gi.repository import Gtk, GdkPixbuf, GObject, Pango, Gdk
|
||||
from ks_includes.screen_panel import ScreenPanel
|
||||
from ks_includes.KlippyRest import KlippyRest
|
||||
from datetime import datetime
|
||||
|
||||
try:
|
||||
from zoneinfo import ZoneInfo
|
||||
except ImportError:
|
||||
from backports.zoneinfo import ZoneInfo
|
||||
|
||||
|
||||
def format_date(date):
|
||||
try:
|
||||
return datetime.strptime(date, '%Y-%m-%dT%H:%M:%S.%f').replace(tzinfo=ZoneInfo('UTC'))
|
||||
except ValueError:
|
||||
try:
|
||||
return datetime.strptime(date, '%Y-%m-%dT%H:%M:%S').replace(tzinfo=ZoneInfo('UTC'))
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
|
||||
class SpoolmanVendor:
|
||||
id: int
|
||||
name: str
|
||||
registered: datetime = None
|
||||
|
||||
def __init__(self, **entries):
|
||||
self.__dict__.update(entries)
|
||||
for date in ["registered"]:
|
||||
if date in entries:
|
||||
self.__setattr__(date, format_date(entries[date]))
|
||||
|
||||
|
||||
class SpoolmanFilament:
|
||||
article_number: str
|
||||
color_hex: str
|
||||
comment: str
|
||||
density: float
|
||||
diameter: float
|
||||
id: int
|
||||
material: str
|
||||
name: str
|
||||
price: float
|
||||
registered: datetime = None
|
||||
settings_bed_temp: int
|
||||
settings_extruder_temp: int
|
||||
spool_weight: float
|
||||
vendor: SpoolmanVendor = None
|
||||
weight: float
|
||||
|
||||
def __init__(self, **entries):
|
||||
self.__dict__.update(entries)
|
||||
if "vendor" in entries:
|
||||
self.vendor = SpoolmanVendor(**(entries["vendor"]))
|
||||
for date in ["registered"]:
|
||||
if date in entries:
|
||||
self.__setattr__(date, format_date(entries[date]))
|
||||
|
||||
|
||||
class SpoolmanSpool(GObject.GObject):
|
||||
archived: bool
|
||||
id: int
|
||||
remaining_length: float
|
||||
remaining_weight: float
|
||||
used_length: float
|
||||
used_weight: float
|
||||
lot_nr: str
|
||||
filament: SpoolmanFilament = None
|
||||
first_used: datetime = None
|
||||
last_used: datetime = None
|
||||
registered: datetime = None
|
||||
_icon: Gtk.Image = None
|
||||
theme_path: str = None
|
||||
_spool_icon: str = None
|
||||
|
||||
def __init__(self, **entries):
|
||||
GObject.GObject.__init__(self)
|
||||
self.__dict__.update(entries)
|
||||
if "filament" in entries:
|
||||
self.filament = SpoolmanFilament(**(entries["filament"]))
|
||||
for date in ["first_used", "last_used", "registered"]:
|
||||
if date in entries:
|
||||
self.__setattr__(date, format_date(entries[date]))
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
result = self.filament.name
|
||||
if self.filament.vendor:
|
||||
result = " ".join([self.filament.vendor.name, "-", result])
|
||||
return result
|
||||
|
||||
@property
|
||||
def icon(self):
|
||||
if self._icon is None:
|
||||
if SpoolmanSpool._spool_icon is None:
|
||||
klipperscreendir = pathlib.Path(__file__).parent.resolve().parent
|
||||
_spool_icon_path = os.path.join(
|
||||
klipperscreendir, "styles", SpoolmanSpool.theme_path, "images", "spool.svg"
|
||||
)
|
||||
if not os.path.isfile(_spool_icon_path):
|
||||
_spool_icon_path = os.path.join(klipperscreendir, "styles", "spool.svg")
|
||||
SpoolmanSpool._spool_icon = pathlib.Path(_spool_icon_path).read_text()
|
||||
|
||||
loader = GdkPixbuf.PixbufLoader()
|
||||
loader.write(
|
||||
SpoolmanSpool._spool_icon.replace('var(--filament-color)', f'#{self.filament.color_hex}').encode()
|
||||
)
|
||||
loader.close()
|
||||
self._icon = loader.get_pixbuf()
|
||||
return self._icon
|
||||
|
||||
|
||||
class Panel(ScreenPanel):
|
||||
apiClient: KlippyRest
|
||||
_active_spool_id: int = None
|
||||
|
||||
@staticmethod
|
||||
def spool_compare_id(model, row1, row2, user_data):
|
||||
spool1 = model.get_value(row1, 0)
|
||||
spool2 = model.get_value(row2, 0)
|
||||
return spool1.id - spool2.id
|
||||
|
||||
@staticmethod
|
||||
def spool_compare_date(model, row1, row2, user_data):
|
||||
spool1 = model.get_value(row1, 0)
|
||||
spool2 = model.get_value(row2, 0)
|
||||
return 1 if (spool1.last_used or datetime.min).replace(tzinfo=None) > \
|
||||
(spool2.last_used or datetime.min).replace(tzinfo=None) else -1
|
||||
|
||||
def _on_material_filter_changed(self, sender):
|
||||
treeiter = sender.get_active_iter()
|
||||
if treeiter is not None:
|
||||
model = sender.get_model()
|
||||
self._filters["material"] = model[treeiter][0]
|
||||
self._filterable.refilter()
|
||||
|
||||
def __init__(self, screen, title):
|
||||
super().__init__(screen, title)
|
||||
self.apiClient = screen.apiclient
|
||||
if self._config.get_main_config().getboolean("24htime", True):
|
||||
self.timeFormat = '%Y-%m-%d %H:%M'
|
||||
else:
|
||||
self.timeFormat = '%Y-%m-%d %I:%M %p'
|
||||
|
||||
SpoolmanSpool.theme_path = screen.theme
|
||||
GObject.type_register(SpoolmanSpool)
|
||||
self._filters = {}
|
||||
self._model = Gtk.TreeStore(SpoolmanSpool.__gtype__)
|
||||
self._materials = Gtk.ListStore(str, str)
|
||||
|
||||
self._filterable = self._model.filter_new()
|
||||
self._filterable.set_visible_func(self._filter_spools)
|
||||
|
||||
sortable = Gtk.TreeModelSort(self._filterable)
|
||||
sortable.set_sort_func(0, self.spool_compare_id)
|
||||
sortable.set_sort_func(1, self.spool_compare_date)
|
||||
|
||||
self.scroll = self._gtk.ScrolledWindow()
|
||||
|
||||
sbox = Gtk.Box(spacing=0)
|
||||
sbox.set_vexpand(False)
|
||||
|
||||
clear_active_spool = self._gtk.Button("cancel", _("Clear"), "color2", self.bts, Gtk.PositionType.LEFT, 1)
|
||||
clear_active_spool.get_style_context().add_class("buttons_slim")
|
||||
clear_active_spool.connect('clicked', self.clear_active_spool)
|
||||
|
||||
refresh = self._gtk.Button("refresh", style="color1", scale=.66)
|
||||
refresh.get_style_context().add_class("buttons_slim")
|
||||
refresh.connect('clicked', self.load_spools)
|
||||
|
||||
sort_btn_id = self._gtk.Button(None, _("ID"), "color4", self.bts, Gtk.PositionType.RIGHT, 1)
|
||||
sort_btn_id.connect("clicked", self.change_sort, "id")
|
||||
sort_btn_id.get_style_context().add_class("buttons_slim")
|
||||
|
||||
sort_btn_used = self._gtk.Button(None, _("Last Used"), "color3", self.bts, Gtk.PositionType.RIGHT, 1)
|
||||
sort_btn_used.connect("clicked", self.change_sort, "last_used")
|
||||
sort_btn_used.get_style_context().add_class("buttons_slim")
|
||||
|
||||
switch = Gtk.Switch()
|
||||
switch.set_hexpand(False)
|
||||
switch.set_vexpand(False)
|
||||
switch.set_active(self._config.get_config().getboolean("spoolman", "hide_archived", fallback=True))
|
||||
switch.connect("notify::active", self.switch_config_option, "spoolman", "hide_archived", self.load_spools)
|
||||
|
||||
name = Gtk.Label()
|
||||
name.set_markup(_("Archived"))
|
||||
name.set_halign(Gtk.Align.START)
|
||||
name.set_valign(Gtk.Align.CENTER)
|
||||
name.set_line_wrap(True)
|
||||
name.set_line_wrap_mode(Pango.WrapMode.WORD_CHAR)
|
||||
|
||||
archived = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL)
|
||||
archived.set_valign(Gtk.Align.CENTER)
|
||||
archived.add(name)
|
||||
archived.add(switch)
|
||||
|
||||
sbox.pack_start(sort_btn_id, True, True, 0)
|
||||
sbox.pack_start(sort_btn_used, True, True, 0)
|
||||
sbox.pack_start(clear_active_spool, True, True, 0)
|
||||
sbox.pack_start(refresh, True, True, 0)
|
||||
sbox.pack_start(archived, False, False, 5)
|
||||
sbox.set_hexpand(True)
|
||||
sbox.set_vexpand(False)
|
||||
|
||||
filter_box = Gtk.ListBox()
|
||||
filter_box.set_selection_mode(Gtk.SelectionMode.NONE)
|
||||
_filter = Gtk.Expander(label=_("Filter"))
|
||||
_filter.add(filter_box)
|
||||
|
||||
row = Gtk.ListBoxRow()
|
||||
hbox = Gtk.Box(orientation=Gtk.Orientation.HORIZONTAL, spacing=5)
|
||||
row.add(hbox)
|
||||
|
||||
label = Gtk.Label(_("Material"))
|
||||
_material_filter = Gtk.ComboBox()
|
||||
_material_filter.set_model(self._materials)
|
||||
_material_filter.connect("changed", self._on_material_filter_changed)
|
||||
cellrenderertext = Gtk.CellRendererText()
|
||||
_material_filter.pack_start(cellrenderertext, True)
|
||||
_material_filter.add_attribute(cellrenderertext, "text", 1)
|
||||
|
||||
hbox.pack_start(label, False, True, 0)
|
||||
hbox.pack_start(_material_filter, True, True, 0)
|
||||
|
||||
filter_box.add(row)
|
||||
|
||||
self.main = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=0)
|
||||
self.main.set_vexpand(True)
|
||||
self.main.pack_start(sbox, False, False, 0)
|
||||
self.main.pack_start(_filter, False, True, 0)
|
||||
self.main.pack_start(self.scroll, True, True, 0)
|
||||
|
||||
self.load_spools()
|
||||
self.get_active_spool()
|
||||
self._treeview = Gtk.TreeView(model=sortable)
|
||||
self._treeview.set_headers_visible(False)
|
||||
self._treeview.set_show_expanders(False)
|
||||
|
||||
text_renderer = Gtk.CellRendererText()
|
||||
pixbuf_renderer = Gtk.CellRendererPixbuf()
|
||||
pixbuf_renderer.set_padding(5, 5)
|
||||
checkbox_renderer = Gtk.CellRendererToggle()
|
||||
column_id = Gtk.TreeViewColumn(cell_renderer=text_renderer)
|
||||
column_id.set_cell_data_func(
|
||||
text_renderer,
|
||||
lambda column, cell, model, it, data:
|
||||
self._set_cell_background(cell, model.get_value(it, 0)) and
|
||||
cell.set_property('text', f'{model.get_value(it, 0).id}')
|
||||
)
|
||||
column_id.set_sort_column_id(0)
|
||||
|
||||
column_icon = Gtk.TreeViewColumn(cell_renderer=pixbuf_renderer)
|
||||
column_icon.set_cell_data_func(
|
||||
pixbuf_renderer,
|
||||
lambda column, cell, model, it, data:
|
||||
self._set_cell_background(cell, model.get_value(it, 0)) and
|
||||
cell.set_property('pixbuf', model.get_value(it, 0).icon)
|
||||
)
|
||||
|
||||
column_spool = Gtk.TreeViewColumn(cell_renderer=text_renderer)
|
||||
column_spool.set_expand(True)
|
||||
column_spool.set_cell_data_func(
|
||||
text_renderer,
|
||||
lambda column, cell, model, it, data:
|
||||
self._set_cell_background(cell, model.get_value(it, 0)) and
|
||||
cell.set_property('markup', self._get_filament_formated(model.get_value(it, 0)))
|
||||
)
|
||||
|
||||
column_last_used = Gtk.TreeViewColumn(cell_renderer=text_renderer)
|
||||
column_last_used.set_visible(False)
|
||||
column_last_used.set_sort_column_id(1)
|
||||
|
||||
column_material = Gtk.TreeViewColumn(cell_renderer=text_renderer)
|
||||
column_material.set_cell_data_func(
|
||||
text_renderer,
|
||||
lambda column, cell, model, it, data:
|
||||
self._set_cell_background(cell, model.get_value(it, 0)) and
|
||||
cell.set_property('text', model.get_value(it, 0).filament.material)
|
||||
)
|
||||
|
||||
checkbox_renderer.connect("toggled", self._set_active_spool)
|
||||
column_toggle_active_spool = Gtk.TreeViewColumn(cell_renderer=checkbox_renderer)
|
||||
column_toggle_active_spool.set_cell_data_func(
|
||||
checkbox_renderer,
|
||||
lambda column, cell, model, it, data:
|
||||
self._set_cell_background(cell, model.get_value(it, 0)) and
|
||||
cell.set_property('active', model.get_value(it, 0).id == self._active_spool_id)
|
||||
)
|
||||
|
||||
self._treeview.append_column(column_id)
|
||||
self._treeview.append_column(column_icon)
|
||||
self._treeview.append_column(column_spool)
|
||||
self._treeview.append_column(column_last_used)
|
||||
self._treeview.append_column(column_material)
|
||||
self._treeview.append_column(column_toggle_active_spool)
|
||||
|
||||
self.current_sort_widget = sort_btn_id
|
||||
sort_btn_used.clicked()
|
||||
|
||||
self.scroll.add(self._treeview)
|
||||
self.content.add(self.main)
|
||||
|
||||
def _filter_spools(self, model, i, data):
|
||||
spool: SpoolmanSpool = model[i][0]
|
||||
matches = True
|
||||
if ("material" in self._filters) and (self._filters["material"] is not None):
|
||||
matches &= spool.filament.material == self._filters["material"]
|
||||
return matches
|
||||
|
||||
def _set_cell_background(self, cell, spool: SpoolmanSpool):
|
||||
cell.set_property('cell-background-rgba', Gdk.RGBA(1, 1, 1, .1) if spool.id == self._active_spool_id else None)
|
||||
return True
|
||||
|
||||
def _get_filament_formated(self, spool: SpoolmanSpool):
|
||||
if spool.id == self._active_spool_id:
|
||||
result = f'<big><b>{spool.name}</b></big>\n'
|
||||
else:
|
||||
result = f'<big>{spool.name}</big>\n'
|
||||
if spool.last_used:
|
||||
result += f'{_("Last used")}:<b> {spool.last_used.astimezone():{self.timeFormat}}</b>\n'
|
||||
if hasattr(spool, "remaining_weight"):
|
||||
result += f'{_("Remaining weight")}: <b>{round(spool.remaining_weight, 2)} g</b>\n'
|
||||
if hasattr(spool, "remaining_length"):
|
||||
result += f'{_("Remaining length")}: <b>{round(spool.remaining_length / 1000, 2)} m</b>\n'
|
||||
|
||||
return result.strip()
|
||||
|
||||
def _set_active_spool(self, sender, path):
|
||||
model = self._treeview.get_model()
|
||||
it = model.get_iter(path)
|
||||
spool = model.get_value(it, 0)
|
||||
if spool.id == self._active_spool_id:
|
||||
self.clear_active_spool()
|
||||
else:
|
||||
self.set_active_spool(spool)
|
||||
|
||||
def change_sort(self, widget, sort_type):
|
||||
self.current_sort_widget.set_image(None)
|
||||
self.current_sort_widget = widget
|
||||
if sort_type == "id":
|
||||
logging.info("Sorting by ID")
|
||||
column = 0
|
||||
elif sort_type == "last_used":
|
||||
logging.info("Sorting by Last Used")
|
||||
column = 1
|
||||
else:
|
||||
logging.error("Unknown sort type")
|
||||
return
|
||||
if self._treeview.get_column(column).get_sort_order() == Gtk.SortType.DESCENDING:
|
||||
new_sort_order = Gtk.SortType.ASCENDING
|
||||
else:
|
||||
new_sort_order = Gtk.SortType.DESCENDING
|
||||
self._treeview.get_column(column).set_sort_order(new_sort_order)
|
||||
self._treeview.get_model().set_sort_column_id(column, new_sort_order)
|
||||
icon = "arrow-down" if new_sort_order == Gtk.SortType.DESCENDING else "arrow-up"
|
||||
widget.set_image(self._gtk.Image(icon, self._gtk.img_scale * self.bts))
|
||||
|
||||
def process_update(self, action, data):
|
||||
if action == "notify_active_spool_set":
|
||||
self._active_spool_id = data['spool_id']
|
||||
self._treeview.get_model().foreach(lambda store, treepath, treeiter:
|
||||
store.row_changed(treepath, treeiter)
|
||||
)
|
||||
self._treeview.queue_draw()
|
||||
|
||||
def load_spools(self, data=None):
|
||||
hide_archived = self._config.get_config().getboolean("spoolman", "hide_archived", fallback=True)
|
||||
self._model.clear()
|
||||
self._materials.clear()
|
||||
spools = self.apiClient.post_request("server/spoolman/proxy", json={
|
||||
"request_method": "GET",
|
||||
"path": f"/v1/spool?allow_archived={not hide_archived}",
|
||||
})
|
||||
if not spools or "result" not in spools:
|
||||
self._screen.show_error_modal("Exception when trying to fetch spools")
|
||||
return
|
||||
|
||||
materials = []
|
||||
for spool in spools["result"]:
|
||||
spoolObject = SpoolmanSpool(**spool)
|
||||
self._model.append(None, [spoolObject])
|
||||
if spoolObject.filament.material not in materials:
|
||||
materials.append(spoolObject.filament.material)
|
||||
|
||||
materials.sort()
|
||||
self._materials.append([None, _("All")])
|
||||
for material in materials:
|
||||
self._materials.append([material, material])
|
||||
|
||||
def clear_active_spool(self, sender: Gtk.Button = None):
|
||||
result = self.apiClient.post_request("server/spoolman/spool_id", json={})
|
||||
if not result:
|
||||
self._screen.show_error_modal("Exception when setting active spool")
|
||||
return
|
||||
|
||||
def set_active_spool(self, spool: SpoolmanSpool):
|
||||
result = self.apiClient.post_request("server/spoolman/spool_id", json={
|
||||
"spool_id": spool.id
|
||||
})
|
||||
if not result:
|
||||
self._screen.show_error_modal("Exception when setting active spool")
|
||||
return
|
||||
|
||||
def get_active_spool(self) -> SpoolmanSpool:
|
||||
result = self.apiClient.send_request("server/spoolman/spool_id")
|
||||
if not result:
|
||||
self._screen.show_error_modal("Exception when getting active spool")
|
||||
return
|
||||
self._active_spool_id = result["result"]["spool_id"]
|
||||
return self._active_spool_id
|
14
screen.py
@ -894,6 +894,8 @@ class KlipperScreen(Gtk.Window):
|
||||
self.files.initialize()
|
||||
self.files.refresh_files()
|
||||
|
||||
self.init_spoolman()
|
||||
|
||||
logging.info("Printer initialized")
|
||||
self.initialized = True
|
||||
self.reinit_count = 0
|
||||
@ -919,6 +921,18 @@ class KlipperScreen(Gtk.Window):
|
||||
logging.info(f"Temperature store size: {self.printer.tempstore_size}")
|
||||
except KeyError:
|
||||
logging.error("Couldn't get the temperature store size")
|
||||
return False
|
||||
|
||||
def init_spoolman(self):
|
||||
server_config = self.apiclient.send_request("server/config")
|
||||
if server_config:
|
||||
try:
|
||||
server_config["result"]["config"]["spoolman"]
|
||||
self.printer.enable_spoolman()
|
||||
except KeyError:
|
||||
logging.warning("Not using Spoolman")
|
||||
|
||||
return False
|
||||
|
||||
def show_keyboard(self, entry=None, event=None):
|
||||
if self.keyboard is not None:
|
||||
|
@ -7,4 +7,5 @@ PyGObject==3.44.1
|
||||
python-mpv==0.5.2;python_version<"3.10"
|
||||
python-mpv==1.0.4;python_version>="3.10"
|
||||
six==1.16.0
|
||||
dbus-python==1.3.2
|
||||
dbus-python==1.3.2
|
||||
backports.zoneinfo;python_version<"3.9"
|
||||
|
@ -11,11 +11,41 @@ button:disabled {
|
||||
opacity: .2;
|
||||
}
|
||||
|
||||
list row,
|
||||
treeview.view,
|
||||
window {
|
||||
background-color: #13181C;
|
||||
-gtk-icon-shadow: none;
|
||||
}
|
||||
|
||||
switch slider {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
switch, treeview.view check {
|
||||
margin: 0.75em;
|
||||
min-width: 6em;
|
||||
min-height: 3em;
|
||||
border: 0;
|
||||
border-radius: 3em;
|
||||
}
|
||||
|
||||
treeview.view check {
|
||||
background-color: rgb(32,41,47);
|
||||
-gtk-icon-source: -gtk-icontheme("switch-off-symbolic");
|
||||
background-repeat: no-repeat;
|
||||
background-position: left center;
|
||||
background-size : 3em 3em;
|
||||
background-image: image(url("./styles/circle.svg"));
|
||||
-gtk-icon-transform: translateX(1.5em);
|
||||
}
|
||||
treeview.view check:checked {
|
||||
background-color : rgb(53,132,228);
|
||||
background-position: right center;
|
||||
-gtk-icon-source: -gtk-icontheme("switch-on-symbolic");
|
||||
-gtk-icon-transform: translateX(-1.5em);
|
||||
}
|
||||
|
||||
button {
|
||||
background-image: none;
|
||||
background-color: #13181C;
|
||||
@ -110,18 +140,6 @@ combobox arrow {
|
||||
min-width: 1em;
|
||||
}
|
||||
|
||||
switch {
|
||||
margin: 0.75em;
|
||||
min-width: 6em;
|
||||
min-height: 3em;
|
||||
border: 0;
|
||||
border-radius: 3em;
|
||||
}
|
||||
|
||||
switch slider {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
entry {
|
||||
font-size: 1em;
|
||||
background-color: #20292F;
|
||||
|
10
styles/circle.svg
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg
|
||||
width="120"
|
||||
height="120"
|
||||
viewBox="0 0 120 120"
|
||||
>
|
||||
<circle cx="60" cy="60" r="60" fill="#fff" />
|
||||
</svg>
|
||||
|
||||
|
After Width: | Height: | Size: 160 B |
90
styles/colorized/images/spool.svg
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 235 500"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="23.5"
|
||||
height="50"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg29"
|
||||
sodipodi:docname="spool.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs33">
|
||||
<filter
|
||||
id="a"
|
||||
y="-0.0018966793"
|
||||
height="1.0037934"
|
||||
x="-0.0018966793"
|
||||
width="1.1618461">
|
||||
<feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="0.10000221"
|
||||
id="feGaussianBlur8" />
|
||||
<feOffset
|
||||
dx="20"
|
||||
result="oBlur"
|
||||
id="feOffset10" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity=".67"
|
||||
id="feFlood12" />
|
||||
<feComposite
|
||||
in2="oBlur"
|
||||
operator="in"
|
||||
id="feComposite14" />
|
||||
<feMerge
|
||||
id="feMerge20">
|
||||
<feMergeNode
|
||||
id="feMergeNode16" />
|
||||
<feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode18" />
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview31"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:zoom="4.8861079"
|
||||
inkscape:cx="-43.183655"
|
||||
inkscape:cy="-3.172259"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg29" />
|
||||
<path
|
||||
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#586e75;fill-rule:nonzero;opacity:1;fill-opacity:1"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
|
||||
id="path2"
|
||||
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
|
||||
|
||||
|
||||
|
||||
<path
|
||||
id="path6"
|
||||
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
|
||||
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
|
||||
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
|
||||
id="path2-3-7"
|
||||
style="fill:#586e75;fill-opacity:1;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="m 37.460938,0.2734375 c -20.52086,0 -37.1875005,111.8926925 -37.1875005,249.7656225 0,137.87293 16.6666405,249.78516 37.1875005,249.78516 h 13.955078 c 20.520859,0 37.167968,-111.91223 37.167968,-249.78516 0,-137.87293 -16.647109,-249.7656225 -37.167968,-249.7656225 z"
|
||||
sodipodi:nodetypes="csccscc" /><path
|
||||
id="path1437"
|
||||
style="fill:#eee8d5;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>
|
After Width: | Height: | Size: 4.1 KiB |
90
styles/colorized/images/spoolman.svg
Normal file
@ -0,0 +1,90 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
xml:space="preserve"
|
||||
id="svg8"
|
||||
sodipodi:docname="spoolman.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||
id="namedview8"
|
||||
pagecolor="#002b36"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="6.0682618"
|
||||
inkscape:cx="7.0860489"
|
||||
inkscape:cy="35.183057"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="g6874"
|
||||
showgrid="false" />
|
||||
<desc
|
||||
id="desc1">Created with Fabric.js 5.3.0</desc>
|
||||
<defs
|
||||
id="defs1">
|
||||
</defs>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<g
|
||||
id="g6874"
|
||||
transform="matrix(1.4222222,0,0,1.4222222,-13.51111,-13.51111)"><path
|
||||
style="fill:#eee8d5;fill-opacity:0.98039216;opacity:1;fill-rule:nonzero;stroke:#598ec7;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="M 0,-22.46181 C 12.39892,-22.46181 22.46181,-12.39892 22.46181,0 22.46181,12.39892 12.39892,22.46181 0,22.46181 -12.39892,22.46181 -22.46181,12.39892 -22.46181,0 -22.46181,-12.39892 -12.39892,-22.46181 0,-22.46181 Z"
|
||||
stroke-linecap="round"
|
||||
id="path2"
|
||||
transform="matrix(0.84518453,0,0,0.84518453,32,32)" /><path
|
||||
style="fill:#586e75;opacity:1;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="m -33.16071,25.30347 c -2.10604,-0.58976 -3.86115,-2.04871 -4.82582,-4.01152 -0.96468,-1.96281 -1.04757,-4.24361 -0.22794,-6.27128 v 0 0 c 9.79269,-24.22569 29.00311,-43.43631 53.2287,-53.22926 l 0.03335,-0.01348 v 0 c 2.01944,-0.81634 4.29102,-0.73379 6.24588,0.22696 1.95487,0.96076 3.40792,2.70876 3.99529,4.80627 l 12.7099,45.38722 v 0 c 2.03963,7.28353 -0.008,15.10088 -5.35637,20.44924 -5.34836,5.34836 -13.16571,7.396 -20.44924,5.35637 z"
|
||||
stroke-linecap="round"
|
||||
id="path7"
|
||||
transform="matrix(0.18910872,0.05067153,-0.05067153,0.18910872,25.816351,21.133363)" /><path
|
||||
style="fill:#073642;opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
transform="matrix(0.18910872,0.05067153,-0.05067153,0.18910872,27.045413,23.226732)"
|
||||
d="m -29.98183,19.80196 0.80996,-2.70728 v 0 c 6.78179,-22.66818 24.70577,-40.28047 47.48943,-46.6636 l 1.56961,-0.43974 9.32685,33.48202 v 0 c 2.02905,7.28401 -0.03025,15.09606 -5.38634,20.4333 -5.35609,5.33724 -13.17535,7.36899 -20.45217,5.31427 z"
|
||||
stroke-linecap="round"
|
||||
id="path8" /><path
|
||||
style="fill:#586e75;opacity:1;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="m -33.16071,25.30347 c -2.10604,-0.58976 -3.86115,-2.04871 -4.82582,-4.01152 -0.96468,-1.96281 -1.04757,-4.24361 -0.22794,-6.27128 v 0 0 c 9.79269,-24.22569 29.00311,-43.43631 53.2287,-53.22926 l 0.03335,-0.01348 v 0 c 2.01944,-0.81634 4.29102,-0.73379 6.24588,0.22696 1.95487,0.96076 3.40792,2.70876 3.99529,4.80627 l 12.7099,45.38722 v 0 c 2.03963,7.28353 -0.008,15.10088 -5.35637,20.44924 -5.34836,5.34836 -13.16571,7.396 -20.44924,5.35637 z"
|
||||
stroke-linecap="round"
|
||||
id="path5"
|
||||
transform="matrix(-0.05067153,-0.18910872,0.18910872,-0.05067153,25.903038,43.124789)" /><path
|
||||
style="fill:#073642;opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
transform="matrix(-0.05067153,-0.18910872,0.18910872,-0.05067153,27.101418,41.013706)"
|
||||
d="m -29.98183,19.80196 0.80996,-2.70728 v 0 c 6.78179,-22.66818 24.70577,-40.28047 47.48943,-46.6636 l 1.56961,-0.43974 9.32685,33.48202 v 0 c 2.02905,7.28401 -0.03025,15.09606 -5.38634,20.4333 -5.35609,5.33724 -13.17535,7.36899 -20.45217,5.31427 z"
|
||||
stroke-linecap="round"
|
||||
id="path6" /><path
|
||||
style="fill:#586e75;opacity:1;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="m -33.16071,25.30347 c -2.10604,-0.58976 -3.86115,-2.04871 -4.82582,-4.01152 -0.96468,-1.96281 -1.04757,-4.24361 -0.22794,-6.27128 v 0 0 c 9.79269,-24.22569 29.00311,-43.43631 53.2287,-53.22926 l 0.03335,-0.01348 v 0 c 2.01944,-0.81634 4.29102,-0.73379 6.24588,0.22696 1.95487,0.96076 3.40792,2.70876 3.99529,4.80627 l 12.7099,45.38722 v 0 c 2.03963,7.28353 -0.008,15.10088 -5.35637,20.44924 -5.34836,5.34836 -13.16571,7.396 -20.44924,5.35637 z"
|
||||
stroke-linecap="round"
|
||||
id="path3"
|
||||
transform="matrix(-0.13843719,0.13843719,-0.13843719,-0.13843719,44.656252,32)" /><path
|
||||
style="fill:#073642;opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
vector-effect="non-scaling-stroke"
|
||||
transform="matrix(-0.13843719,0.13843719,-0.13843719,-0.13843719,42.228811,32.017714)"
|
||||
d="m -29.98183,19.80196 0.80996,-2.70728 v 0 c 6.78179,-22.66818 24.70577,-40.28047 47.48943,-46.6636 l 1.56961,-0.43974 9.32685,33.48202 v 0 c 2.02905,7.28401 -0.03025,15.09606 -5.38634,20.4333 -5.35609,5.33724 -13.17535,7.36899 -20.45217,5.31427 z"
|
||||
stroke-linecap="round"
|
||||
id="path4" /></g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.0 KiB |
@ -5,6 +5,8 @@
|
||||
color: #fdf6e3; /*base3*/
|
||||
}
|
||||
|
||||
list row,
|
||||
treeview.view,
|
||||
window {
|
||||
background-color: #002b36; /*base03*/
|
||||
}
|
||||
@ -78,10 +80,12 @@ combobox box button {
|
||||
border-color: #002b36; /*base03*/
|
||||
}
|
||||
|
||||
treeview.view check,
|
||||
switch {
|
||||
background-color: #073642; /* base02 */
|
||||
}
|
||||
|
||||
treeview.view check:checked,
|
||||
switch:checked {
|
||||
background-color: #859900; /*solarized-green*/
|
||||
}
|
||||
|
86
styles/material-dark/images/spool.svg
Normal file
@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 235 500"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="23.5"
|
||||
height="50"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg29"
|
||||
sodipodi:docname="spool.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs33">
|
||||
<filter
|
||||
id="a"
|
||||
y="-0.0018966793"
|
||||
height="1.0037934"
|
||||
x="-0.0018966793"
|
||||
width="1.1618461">
|
||||
<feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="0.10000221"
|
||||
id="feGaussianBlur8" />
|
||||
<feOffset
|
||||
dx="20"
|
||||
result="oBlur"
|
||||
id="feOffset10" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity=".67"
|
||||
id="feFlood12" />
|
||||
<feComposite
|
||||
in2="oBlur"
|
||||
operator="in"
|
||||
id="feComposite14" />
|
||||
<feMerge
|
||||
id="feMerge20">
|
||||
<feMergeNode
|
||||
id="feMergeNode16" />
|
||||
<feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode18" />
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview31"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:zoom="9.7722158"
|
||||
inkscape:cx="-26.299051"
|
||||
inkscape:cy="22.256979"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg29" />
|
||||
<path
|
||||
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#e2e2e2;fill-rule:nonzero;opacity:1;fill-opacity:1"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
|
||||
id="path2"
|
||||
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
|
||||
|
||||
|
||||
|
||||
<path
|
||||
id="path6"
|
||||
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
|
||||
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
|
||||
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
|
||||
id="path1437"
|
||||
style="fill:#e2e2e2;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
|
||||
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>
|
After Width: | Height: | Size: 3.6 KiB |
69
styles/material-dark/images/spoolman.svg
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg1152"
|
||||
sodipodi:docname="spoolman.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="path2-9"
|
||||
style="opacity:1;fill:#e2e2e2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="M 12,2 C 6.480016,2 2,6.480016 2,12 2,17.519984 6.480016,22 12,22 17.519984,22 22,17.519984 22,12 22,6.480016 17.519984,2 12,2 Z m 0.172164,2.920284 0.03545,3.584346 c 0.0077,0.779735 -0.405463,1.502942 -1.081453,1.891637 -0.675989,0.388696 -1.509524,0.382264 -2.179542,-0.01664 L 5.875148,8.550923 6.028505,8.302804 C 7.309093,6.225785 9.564436,4.949446 12.004344,4.921727 Z m 5.958478,3.458478 0.138166,0.256799 c 1.158459,2.147536 1.13591,4.73871 -0.06004,6.865597 l -0.08247,0.146846 -3.121383,-1.76143 c -0.679122,-0.383199 -1.098741,-1.103183 -1.097367,-1.882957 0.0014,-0.779774 0.423408,-1.498537 1.103877,-1.87934 z m -8.056279,5.066551 c 0.376542,-0.0015 0.753548,0.09526 1.090857,0.290798 0.674617,0.391078 1.086115,1.115548 1.075665,1.895255 l -0.04774,3.574219 -0.291522,-0.008 C 9.46257,19.127075 7.229788,17.811511 5.985825,15.712341 l -0.08608,-0.144676 3.08666,-1.822916 C 9.322117,13.54648 9.697827,13.446797 10.074368,13.44527 Z" />
|
||||
<defs
|
||||
id="defs1156"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13">
|
||||
<path
|
||||
id="path13"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect13"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13-5">
|
||||
<path
|
||||
id="path13-3"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
|
||||
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1154"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.5961941"
|
||||
inkscape:cx="-2.7196415"
|
||||
inkscape:cy="-9.4643523"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1152"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
@ -4,6 +4,8 @@
|
||||
color: #e2e2e2;
|
||||
}
|
||||
|
||||
list row,
|
||||
treeview.view,
|
||||
window {
|
||||
background-color: #121212;
|
||||
}
|
||||
@ -75,10 +77,12 @@ combobox box button {
|
||||
border-color: #121212;
|
||||
}
|
||||
|
||||
treeview.view check,
|
||||
switch {
|
||||
background-color: #1f1f1f;
|
||||
}
|
||||
|
||||
treeview.view check:checked,
|
||||
switch:checked {
|
||||
background-color: #849900;
|
||||
}
|
||||
|
86
styles/material-darker/images/spool.svg
Normal file
@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 235 500"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="23.5"
|
||||
height="50"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg29"
|
||||
sodipodi:docname="spool.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs33">
|
||||
<filter
|
||||
id="a"
|
||||
y="-0.0018966793"
|
||||
height="1.0037934"
|
||||
x="-0.0018966793"
|
||||
width="1.1618461">
|
||||
<feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="0.10000221"
|
||||
id="feGaussianBlur8" />
|
||||
<feOffset
|
||||
dx="20"
|
||||
result="oBlur"
|
||||
id="feOffset10" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity=".67"
|
||||
id="feFlood12" />
|
||||
<feComposite
|
||||
in2="oBlur"
|
||||
operator="in"
|
||||
id="feComposite14" />
|
||||
<feMerge
|
||||
id="feMerge20">
|
||||
<feMergeNode
|
||||
id="feMergeNode16" />
|
||||
<feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode18" />
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview31"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:zoom="9.7722158"
|
||||
inkscape:cx="-26.299051"
|
||||
inkscape:cy="22.256979"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg29" />
|
||||
<path
|
||||
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#e2e2e2;fill-rule:nonzero;opacity:1;fill-opacity:1"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
|
||||
id="path2"
|
||||
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
|
||||
|
||||
|
||||
|
||||
<path
|
||||
id="path6"
|
||||
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
|
||||
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
|
||||
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
|
||||
id="path1437"
|
||||
style="fill:#e2e2e2;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
|
||||
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>
|
After Width: | Height: | Size: 3.6 KiB |
69
styles/material-darker/images/spoolman.svg
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg1152"
|
||||
sodipodi:docname="spoolman.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="path2-9"
|
||||
style="opacity:1;fill:#e2e2e2;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="M 12,2 C 6.480016,2 2,6.480016 2,12 2,17.519984 6.480016,22 12,22 17.519984,22 22,17.519984 22,12 22,6.480016 17.519984,2 12,2 Z m 0.172164,2.920284 0.03545,3.584346 c 0.0077,0.779735 -0.405463,1.502942 -1.081453,1.891637 -0.675989,0.388696 -1.509524,0.382264 -2.179542,-0.01664 L 5.875148,8.550923 6.028505,8.302804 C 7.309093,6.225785 9.564436,4.949446 12.004344,4.921727 Z m 5.958478,3.458478 0.138166,0.256799 c 1.158459,2.147536 1.13591,4.73871 -0.06004,6.865597 l -0.08247,0.146846 -3.121383,-1.76143 c -0.679122,-0.383199 -1.098741,-1.103183 -1.097367,-1.882957 0.0014,-0.779774 0.423408,-1.498537 1.103877,-1.87934 z m -8.056279,5.066551 c 0.376542,-0.0015 0.753548,0.09526 1.090857,0.290798 0.674617,0.391078 1.086115,1.115548 1.075665,1.895255 l -0.04774,3.574219 -0.291522,-0.008 C 9.46257,19.127075 7.229788,17.811511 5.985825,15.712341 l -0.08608,-0.144676 3.08666,-1.822916 C 9.322117,13.54648 9.697827,13.446797 10.074368,13.44527 Z" />
|
||||
<defs
|
||||
id="defs1156"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13">
|
||||
<path
|
||||
id="path13"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect13"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13-5">
|
||||
<path
|
||||
id="path13-3"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
|
||||
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1154"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.5961941"
|
||||
inkscape:cx="-2.7196415"
|
||||
inkscape:cy="-9.4643523"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1152"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
</svg>
|
After Width: | Height: | Size: 4.9 KiB |
@ -5,6 +5,8 @@
|
||||
font-family: RobotoMedium;
|
||||
}
|
||||
|
||||
list row,
|
||||
treeview.view,
|
||||
window {
|
||||
background-color: #121212;
|
||||
}
|
||||
@ -59,10 +61,12 @@ combobox box button {
|
||||
border-color: #121212;
|
||||
}
|
||||
|
||||
treeview.view check,
|
||||
switch {
|
||||
background-color: #1c1c1c;
|
||||
}
|
||||
|
||||
treeview.view check:checked,
|
||||
switch:checked {
|
||||
background-color: #2f5631;
|
||||
}
|
||||
|
86
styles/material-light/images/spool.svg
Normal file
@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 235 500"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="23.5"
|
||||
height="50"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg29"
|
||||
sodipodi:docname="spool.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs33">
|
||||
<filter
|
||||
id="a"
|
||||
y="-0.0018966793"
|
||||
height="1.0037934"
|
||||
x="-0.0018966793"
|
||||
width="1.1618461">
|
||||
<feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="0.10000221"
|
||||
id="feGaussianBlur8" />
|
||||
<feOffset
|
||||
dx="20"
|
||||
result="oBlur"
|
||||
id="feOffset10" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity=".67"
|
||||
id="feFlood12" />
|
||||
<feComposite
|
||||
in2="oBlur"
|
||||
operator="in"
|
||||
id="feComposite14" />
|
||||
<feMerge
|
||||
id="feMerge20">
|
||||
<feMergeNode
|
||||
id="feMergeNode16" />
|
||||
<feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode18" />
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview31"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:zoom="9.7722158"
|
||||
inkscape:cx="-18.112576"
|
||||
inkscape:cy="20.926677"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg29" />
|
||||
<path
|
||||
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#000000;fill-rule:nonzero;opacity:1;fill-opacity:1"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
|
||||
id="path2"
|
||||
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
|
||||
|
||||
|
||||
|
||||
<path
|
||||
id="path6"
|
||||
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill:var(--filament-color)"
|
||||
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
|
||||
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
|
||||
id="path1437"
|
||||
style="fill:#000000;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
|
||||
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>
|
After Width: | Height: | Size: 3.6 KiB |
68
styles/material-light/images/spoolman.svg
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
id="svg1152"
|
||||
sodipodi:docname="spoolman.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="path2-9"
|
||||
style="opacity:1;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
d="M 12,2 C 6.480016,2 2,6.480016 2,12 2,17.519984 6.480016,22 12,22 17.519984,22 22,17.519984 22,12 22,6.480016 17.519984,2 12,2 Z m 0.172164,2.920284 0.03545,3.584346 c 0.0077,0.779735 -0.405463,1.502942 -1.081453,1.891637 -0.675989,0.388696 -1.509524,0.382264 -2.179542,-0.01664 L 5.875148,8.550923 6.028505,8.302804 C 7.309093,6.225785 9.564436,4.949446 12.004344,4.921727 Z m 5.958478,3.458478 0.138166,0.256799 c 1.158459,2.147536 1.13591,4.73871 -0.06004,6.865597 l -0.08247,0.146846 -3.121383,-1.76143 c -0.679122,-0.383199 -1.098741,-1.103183 -1.097367,-1.882957 0.0014,-0.779774 0.423408,-1.498537 1.103877,-1.87934 z m -8.056279,5.066551 c 0.376542,-0.0015 0.753548,0.09526 1.090857,0.290798 0.674617,0.391078 1.086115,1.115548 1.075665,1.895255 l -0.04774,3.574219 -0.291522,-0.008 C 9.46257,19.127075 7.229788,17.811511 5.985825,15.712341 l -0.08608,-0.144676 3.08666,-1.822916 C 9.322117,13.54648 9.697827,13.446797 10.074368,13.44527 Z" />
|
||||
<defs
|
||||
id="defs1156">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13">
|
||||
<path
|
||||
id="path13"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect13"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13-5">
|
||||
<path
|
||||
id="path13-3"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1154"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.5961941"
|
||||
inkscape:cx="-30.895127"
|
||||
inkscape:cy="-9.4643523"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1152"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
</svg>
|
After Width: | Height: | Size: 5.0 KiB |
@ -4,6 +4,8 @@
|
||||
color: black;
|
||||
}
|
||||
|
||||
list row,
|
||||
treeview.view,
|
||||
window {
|
||||
background-color: #FAFAFA;
|
||||
}
|
||||
@ -88,10 +90,12 @@ combobox box button {
|
||||
border-color: #BDBDBD;
|
||||
}
|
||||
|
||||
treeview.view check,
|
||||
switch {
|
||||
background-color: #BDBDBD;
|
||||
}
|
||||
|
||||
treeview.view check:checked,
|
||||
switch:checked {
|
||||
background-color: #C5E1A5;
|
||||
}
|
||||
|
19
styles/spool.svg
Normal file
@ -0,0 +1,19 @@
|
||||
<svg viewBox="0 0 235 500" preserveAspectRatio="xMinYMin meet" width="23.5" height="50" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#343434;fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="matrix(.58757 0 0 3.94769 197.135 250.047)" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
|
||||
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:var(--filament-color);fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="matrix(.38158 0 0 3.46232 197.135 250.047)" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
|
||||
<path style="stroke:#000;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:var(--filament-color);fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="matrix(2.07364 0 0 3.3577 117.295 250.047)" d="M-38.503-65.24h77.006V65.24h-77.006z"/>
|
||||
<g transform="matrix(.58757 0 0 3.94769 37.454 250.047)">
|
||||
<filter id="a" y="-.057" height="1.114" x="-.057" width="1.272">
|
||||
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
|
||||
<feOffset dx="20" result="oBlur"/>
|
||||
<feFlood flood-color="rgb(0,0,0)" flood-opacity=".67"/>
|
||||
<feComposite in2="oBlur" operator="in"/>
|
||||
<feMerge>
|
||||
<feMergeNode/>
|
||||
<feMergeNode in="SourceGraphic"/>
|
||||
</feMerge>
|
||||
</filter>
|
||||
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#343434;fill-rule:nonzero;opacity:1;filter:url(#a)" vector-effect="non-scaling-stroke" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
|
||||
<path style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#111;fill-rule:nonzero;opacity:1" vector-effect="non-scaling-stroke" transform="scale(.41452)" d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"/>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
86
styles/z-bolt/images/spool.svg
Normal file
@ -0,0 +1,86 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
viewBox="0 0 235 500"
|
||||
preserveAspectRatio="xMinYMin meet"
|
||||
width="23.5"
|
||||
height="50"
|
||||
xml:space="preserve"
|
||||
version="1.1"
|
||||
id="svg29"
|
||||
sodipodi:docname="spool.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||
id="defs33">
|
||||
<filter
|
||||
id="a"
|
||||
y="-0.0018966793"
|
||||
height="1.0037934"
|
||||
x="-0.0018966793"
|
||||
width="1.1618461">
|
||||
<feGaussianBlur
|
||||
in="SourceAlpha"
|
||||
stdDeviation="0.10000221"
|
||||
id="feGaussianBlur8" />
|
||||
<feOffset
|
||||
dx="20"
|
||||
result="oBlur"
|
||||
id="feOffset10" />
|
||||
<feFlood
|
||||
flood-color="rgb(0,0,0)"
|
||||
flood-opacity=".67"
|
||||
id="feFlood12" />
|
||||
<feComposite
|
||||
in2="oBlur"
|
||||
operator="in"
|
||||
id="feComposite14" />
|
||||
<feMerge
|
||||
id="feMerge20">
|
||||
<feMergeNode
|
||||
id="feMergeNode16" />
|
||||
<feMergeNode
|
||||
in="SourceGraphic"
|
||||
id="feMergeNode18" />
|
||||
</feMerge>
|
||||
</filter>
|
||||
|
||||
|
||||
</defs><sodipodi:namedview
|
||||
id="namedview31"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
showgrid="false"
|
||||
showguides="false"
|
||||
inkscape:zoom="6.9100001"
|
||||
inkscape:cx="-24.023155"
|
||||
inkscape:cy="33.068017"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg29" />
|
||||
<path
|
||||
style="stroke:#6e0b30;stroke-width:0;stroke-dasharray:none;stroke-linecap:butt;stroke-dashoffset:0;stroke-linejoin:miter;stroke-miterlimit:4;fill:#ffffff;fill-rule:nonzero;opacity:1;fill-opacity:1"
|
||||
vector-effect="non-scaling-stroke"
|
||||
d="M0-63.27c34.925 0 63.27 28.345 63.27 63.27 0 34.925-28.345 63.27-63.27 63.27-34.925 0-63.27-28.345-63.27-63.27 0-34.925 28.345-63.27 63.27-63.27z"
|
||||
id="path2"
|
||||
transform="matrix(.58757 0 0 3.94769 197.135 250.047)" />
|
||||
|
||||
|
||||
|
||||
<path
|
||||
id="path6"
|
||||
style="opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1;fill:var(--filament-color)"
|
||||
d="M 38.499405 -65.244196 C 38.492933 -65.244196 38.487037 -65.238439 38.480567 -65.238379 L -30.060214 -65.238379 C -24.441657 -52.676289 -20.575458 -28.328491 -20.575458 -0.0023639694 C -20.575458 28.325864 -24.440974 52.676521 -30.060214 65.239468 L 38.499405 65.239468 C 44.926102 65.239468 50.141071 36.010765 50.141071 -0.0023639694 C 50.141071 -36.015493 44.926102 -65.244196 38.499405 -65.244196 z "
|
||||
transform="matrix(2.07364,0,0,3.3577,117.295,250.047)" /><path
|
||||
id="path1437"
|
||||
style="fill:#ffffff;fill-rule:nonzero;stroke:#6e0b30;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
|
||||
d="m 37.46094,0.2734375 c -20.52086,0 -37.1875,111.8926925 -37.1875,249.7656225 0,137.87293 16.66664,249.78516 37.1875,249.78516 20.52086,0 37.16797,-111.91223 37.16797,-249.78516 C 74.62891,112.16613 57.9818,0.2734375 37.46094,0.2734375 Z m 0,146.2304725 c 8.50631,0 15.41015,46.38406 15.41015,103.53515 0,57.1511 -6.90384,103.53516 -15.41015,103.53516 -8.50631,0 -15.41016,-46.38406 -15.41016,-103.53516 0,-57.15109 6.90385,-103.53515 15.41016,-103.53515 z" /></svg>
|
After Width: | Height: | Size: 3.6 KiB |
68
styles/z-bolt/images/spoolman.svg
Normal file
@ -0,0 +1,68 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
version="1.1"
|
||||
width="64"
|
||||
height="64"
|
||||
viewBox="0 0 64 64"
|
||||
id="svg1152"
|
||||
sodipodi:docname="spoolman.svg"
|
||||
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<path
|
||||
id="path2-9"
|
||||
style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:3.00001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;-inkscape-stroke:none;stop-color:#000000;stop-opacity:1"
|
||||
d="M 32,3.4999997 C 16.268045,3.4999997 3.4999997,16.268045 3.4999997,32 3.4999997,47.731954 16.268045,60.5 32,60.5 47.731954,60.5 60.5,47.731954 60.5,32 60.5,16.268045 47.731954,3.4999997 32,3.4999997 Z m 0.490666,8.3228093 0.101035,10.215386 c 0.02195,2.222245 -1.15557,4.283385 -3.082141,5.391166 -1.92657,1.107783 -4.302144,1.089452 -6.211695,-0.04743 l -8.753693,-5.211806 0.437068,-0.707139 c 3.649674,-5.919504 10.077402,-9.55707 17.03114,-9.636068 z m 16.981663,9.856662 0.393773,0.731878 c 3.301608,6.120477 3.237344,13.505323 -0.171114,19.566951 l -0.235039,0.418511 -8.895941,-5.020076 c -1.935498,-1.092116 -3.131412,-3.144071 -3.127497,-5.366427 0.004,-2.222355 1.206713,-4.27083 3.146049,-5.356118 z M 26.511934,36.119142 c 1.073145,-0.0043 2.147612,0.271491 3.108943,0.828774 1.922658,1.114573 3.095428,3.179311 3.065645,5.401477 l -0.136059,10.186524 -0.830838,-0.0228 C 24.768324,52.312164 18.404896,48.562805 14.859601,42.580172 l -0.245329,-0.412327 8.796982,-5.195311 c 0.956779,-0.565066 2.027552,-0.849163 3.100694,-0.853514 z" />
|
||||
<defs
|
||||
id="defs1156">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13">
|
||||
<path
|
||||
id="path13"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
<inkscape:path-effect
|
||||
effect="powerclip"
|
||||
id="path-effect13"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
inverse="true"
|
||||
flatten="false"
|
||||
hide_clip="false"
|
||||
message="Use fill-rule evenodd on <b>fill and stroke</b> dialog if no flatten result after convert clip to paths." />
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath13-5">
|
||||
<path
|
||||
id="path13-3"
|
||||
style="display:block;opacity:1;fill:#bebebe;fill-rule:nonzero;stroke:#ffffff;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
inkscape:label="bean1_fg"
|
||||
d="m -13.757715,-7.7471481 0.343537,-0.55719 v 0 c 2.876446,-4.6653799 7.9428216,-7.5315019 13.42331996,-7.5937639 l 0.37756065,-0.0043 0.0795148,8.0507248 v 0 c 0.0172956,1.7514341 -0.91182739,3.3759065 -2.43022861,4.2489907 -1.5184012,0.8730843 -3.3897584,0.8588954 -4.8947484,-0.037114 z M 0.4322926,16.185974 -0.22201757,16.167056 v 0 C -5.7005765,16.00867 -10.715899,13.054123 -13.510068,8.3390037 l -0.192495,-0.3248328 6.9323756,-4.0942248 v 0 c 1.5081376,-0.8906958 3.3795333,-0.8982879 4.894848,-0.019866 1.51531394,0.8784316 2.43870418,2.5061695 2.41523158,4.2575347 z m 13.3375784,-24.319362 0.310774,0.5761074 v 0 c 2.602114,4.8237643 2.551061,10.6444349 -0.135267,15.4218159 L 13.76031,8.1936583 6.7484202,4.2371568 v 0 C 5.2229859,3.3764201 4.2807128,1.7595388 4.2838,0.00802386 4.2868948,-1.7434936 5.2348557,-3.3570423 6.7633174,-4.2123972 Z" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview1154"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:pageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
showgrid="false"
|
||||
inkscape:zoom="4.5961941"
|
||||
inkscape:cx="-3.807498"
|
||||
inkscape:cy="-0.54392829"
|
||||
inkscape:window-width="1600"
|
||||
inkscape:window-height="826"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg1152"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:deskcolor="#505050" />
|
||||
</svg>
|
After Width: | Height: | Size: 5.2 KiB |
@ -2,6 +2,8 @@
|
||||
color: white;
|
||||
}
|
||||
|
||||
list row,
|
||||
treeview.view,
|
||||
window {
|
||||
background-color: #13181C;
|
||||
}
|
||||
@ -53,10 +55,11 @@ combobox box button {
|
||||
border-color: #cccccc;
|
||||
}
|
||||
|
||||
treeview.view check,
|
||||
switch {
|
||||
background-color: #20292F;
|
||||
}
|
||||
|
||||
treeview.view check:checked,
|
||||
switch:checked {
|
||||
background-color: #3584e4;
|
||||
}
|
||||
|