Check-in [39304eb90b]
Overview
| Comment: | Introduce channel.fixed_size=[24,24] to constrain favicon CellRendererPixbuf. Works in conjunction to .img_resize= attribute for favicon/img converter. Set expand:False in default datamap[] for favicon cell. |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA1: |
39304eb90b41f27dc680fdf493b7174e |
| User & Date: | mario on 2015-05-24 08:52:13 |
| Other Links: | manifest | tags |
Context
|
2015-05-24
| ||
| 10:02 | Lighter highlight color: for plugin options. check-in: 160f4dd660 user: mario tags: trunk | |
| 08:52 | Introduce channel.fixed_size=[24,24] to constrain favicon CellRendererPixbuf. Works in conjunction to .img_resize= attribute for favicon/img converter. Set expand:False in default datamap[] for favicon cell. check-in: 39304eb90b user: mario tags: trunk | |
| 08:49 | Check for string length (.q) before starting cache/server search. Wrap channel+cat switching in ukit.do(). check-in: 708ecda3e9 user: mario tags: trunk | |
Changes
Modified channels/__init__.py from [54759d6b53] to [9cd47dabe0].
| ︙ | ︙ | |||
72 73 74 75 76 77 78 79 80 81 82 83 84 |
# Gtk widgets
gtk_list = None # Gtk widget for station treeview
gtk_cat = None # Gtk widget for category columns
ls = None # ListStore for station treeview
rowmap = None # Preserve streams-datamap
pix_entry = None # ListStore entry that contains favicon
img_resize = None # Rescale `img` references to icon size
# mapping of stream{} data into gtk treeview/treestore representation
datamap = [
# coltitle width [ datasrc key, type, renderer, attrs ] [cellrenderer2], ...
["", 20, ["state", str, "pixbuf", {}], ],
["Genre", 65, ['genre', str, "t", {}], ],
| > | | 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# Gtk widgets
gtk_list = None # Gtk widget for station treeview
gtk_cat = None # Gtk widget for category columns
ls = None # ListStore for station treeview
rowmap = None # Preserve streams-datamap
pix_entry = None # ListStore entry that contains favicon
img_resize = None # Rescale `img` references to icon size
fixed_size = [24,24] # Default height+width for favicons
# mapping of stream{} data into gtk treeview/treestore representation
datamap = [
# coltitle width [ datasrc key, type, renderer, attrs ] [cellrenderer2], ...
["", 20, ["state", str, "pixbuf", {}], ],
["Genre", 65, ['genre', str, "t", {}], ],
["Station Title",275, ["title", str, "text", {"strikethrough":11, "cell-background":12, "cell-background-set":13}], ["favicon", gtk.gdk.Pixbuf, "pixbuf", {"expand":False}], ],
["Now Playing", 185, ["playing", str, "text", {"strikethrough":11}], ], #{"width":20}
["Listeners", 45, ["listeners", int, "t", {"strikethrough":11}], ],
#["Max", 45, ["max", int, "t", {}], ],
["Bitrate", 35, ["bitrate", int, "t", {}], ],
["Homepage", 160, ["homepage", str, "t", {"underline":10}], ],
[False, 25, ["url", str, "t", {"strikethrough":11}], ],
[False, 20, ["format", str, None, {}], ],
|
| ︙ | ︙ | |||
183 184 185 186 187 188 189 |
# add to main menu
uikit.add_menu([parent.channelmenuitems], self.meta["title"], lambda w: parent.channel_switch_by_name(self.module) or 1)
# Just wraps uikit.columns() to retain liststore, rowmap and pix_entry
def columns(self, entries=None):
self.ls, self.rowmap, self.pix_entry = uikit.columns(
| | > | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 |
# add to main menu
uikit.add_menu([parent.channelmenuitems], self.meta["title"], lambda w: parent.channel_switch_by_name(self.module) or 1)
# Just wraps uikit.columns() to retain liststore, rowmap and pix_entry
def columns(self, entries=None):
self.ls, self.rowmap, self.pix_entry = uikit.columns(
self.gtk_list, self.datamap, entries,
show_favicons=True, fixed_size=self.fixed_size
)
# no longer using `conf.show_favicons`
# Statusbar stub (defers to parent/main window, if in GUI mode)
def status(self, *args, **kw):
if self.parent: self.parent.status(*args, **kw)
|
| ︙ | ︙ |
Modified contrib/reddit.py from [3ee971501f] to [74725ffeda].
| ︙ | ︙ | |||
46 47 48 49 50 51 52 |
class reddit (ChannelPlugin):
# control attributes
has_search = False
listformat = "srv"
audioformat = "video/youtube"
titles = dict(playing="submitter", listeners="votes", bitrate=False)
| > > | > | 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
class reddit (ChannelPlugin):
# control attributes
has_search = False
listformat = "srv"
audioformat = "video/youtube"
titles = dict(playing="submitter", listeners="votes", bitrate=False)
# favicon scaling (from reddit preview `img`)
img_resize = 32
fixed_size = [32,26]
# just subreddit names to extract from
categories = [
# static radio list
"radioreddit 📟",
# major subreddits
|
| ︙ | ︙ | |||
292 293 294 295 296 297 298 |
if not format:
if conf.reddit_keep_all:
state = "gtk-page-setup"
format = "url/http"
else:
log.DATA_SKIP(format, row["url"])
continue
| < | 295 296 297 298 299 300 301 302 303 304 305 306 307 308 |
if not format:
if conf.reddit_keep_all:
state = "gtk-page-setup"
format = "url/http"
else:
log.DATA_SKIP(format, row["url"])
continue
# repack into streams list
r.append(dict(
title = row["title"],
url = row["url"],
genre = re.findall("\[(.+?)\]", row["title"] + "[-]")[0],
playing = row["author"],
|
| ︙ | ︙ |
Modified uikit.py from [b587b433a7] to [a196775096].
| ︙ | ︙ | |||
82 83 84 85 86 87 88 |
#
# An according entries list then would contain a dictionary for each row:
# entries = [ {"titlerow":"first", "interndat":123}, {"titlerow":"..."}, ]
# Keys not mentioned in the datamap get ignored, and defaults are applied
# for missing cols. All values must already be in the correct type however.
#
@staticmethod
| | | | | | | | | | > > > > > < < < < < < < | 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
#
# An according entries list then would contain a dictionary for each row:
# entries = [ {"titlerow":"first", "interndat":123}, {"titlerow":"..."}, ]
# Keys not mentioned in the datamap get ignored, and defaults are applied
# for missing cols. All values must already be in the correct type however.
#
@staticmethod
def columns(widget, datamap=[], entries=None, show_favicons=True, pix_entry=False, fixed_size=24):
# create treeviewcolumns?
if not widget.get_column(0):
# loop through titles
datapos = 0
for n_col, desc in enumerate(datamap):
# check for title
if not isinstance(desc[0], str):
datapos += 1 # if there is none, this is just an undisplayed data column
continue
# new tvcolumn
col = gtk.TreeViewColumn(desc[0]) # title
col.set_resizable(True)
# width
if (desc[1] > 0):
col.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
col.set_fixed_width(desc[1])
# loop through cells
for var in range(2, len(desc)):
cell = desc[var]
# cell renderer
if (cell[2] == "pixbuf"):
rend = gtk.CellRendererPixbuf() # img cell
# stock icons
if cell[1] == str: # only match for literal `str`
cell[3]["stock_id"] = datapos
expand = False
# pixbufs
else:
pix_entry = datapos
cell[3]["pixbuf"] = datapos
if fixed_size:
if not isinstance(fixed_size, list):
fixed_size = [fixed_size, fixed_size]
rend.set_fixed_size(*fixed_size)
else:
rend = gtk.CellRendererText() # text cell
cell[3]["text"] = datapos
#col.set_sort_column_id(datapos) # only on textual cells
# attach cell to column
col.pack_end(rend, expand=cell[3].get("expand",True))
# apply attributes
for attr,val in list(cell[3].items()):
col.add_attribute(rend, attr, val)
# next
datapos += 1
#log.INFO(cell, len(cell))
# add column to treeview
widget.append_column(col)
# add data?
if (entries is not None):
#- expand datamap
vartypes = [] #(str, str, bool, str, int, int, gtk.gdk.Pixbuf, str, int)
rowmap = [] #["title", "desc", "bookmarked", "name", "count", "max", "img", ...]
for desc in datamap:
|
| ︙ | ︙ |