This may be relevant: https://stackoverflow.com/questions/26121737/qt-stylesheet-background-image-from-filepath
"Be careful, though, because the path is relative to the CWD <https://en.wikipedia.org/wiki/Current_working_directory> at runtime, which the user might change." So I would test using pwd, and if CWD does not equal loadDir, set it to loadDir. Or, perhaps, just change CWD to loadDir. This *might* explain why I was getting the transparent boxes sometimes and not at others. Chris On Thursday, March 15, 2018 at 6:40:57 AM UTC-7, Edward K. Ream wrote: > > On Thu, Mar 15, 2018 at 7:45 AM, Edward K. Ream <[email protected] > <javascript:>> wrote: > >> >> Contrary to your statement in #808, the recommended css is: >> > > Sorry, I was confused. In #808 talk about other css. You say: > > This is the Leo recommended css to add an image to the background. > > QTextEdit#richTextEdit { > background-image: url(dark/logo.png); > } > > ... > > The following *does *work... > > QTextEdit#richTextEdit { > background-image: url(/home/chris/leo-editor/leo/themes/dark/logo.png); > } > > ... > > [This *doesn't* work] > > QTextEdit#richTextEdit { > background-image: url(~/leo-editor/leo/themes/dark/logo.png); > } > > Ok. This definitely *is* a teachable moment. > > We programmers often have to understand the process by which things > happen. We try to shield users when we can, not always successfully. > > Themes are a middle ground. Theme designers (devs) sometimes can act like > users, and sometimes they must know all the grungy details. > > In this case, the principle is that the *final* stylesheet must have > absolute url's everywhere. That is, Qt is going to look *in one place > only* for each piece of data. > > In *my *case, print-style-sheet shows the following: > > QTreeView::branch:closed:has-children{ > image: > url(C:/leo.repo/leo-editor/leo/Icons/nodes-dark/triangles/closed.png); > } > QTreeView::branch:open:has-children{ > image: url(C:/leo.repo/leo-editor/leo/Icons/nodes-dark/triangles/open.png); > } > > Which means that (some part of) Leo has resolved: > > @string tree-image-closed = nodes-dark/triangles/closed.png > @string tree-image-open = nodes-dark/triangles/open.png > > to full paths. The question is, which parts (of Leo) convert relative > paths to absolute paths? > *Basic Skill 1* > > The relevant code turns out to be ssm.expand_css_constants & helpers. > > I could have found this by finding the StyleSheetManager (ssm) class in > qt_gui.py. A non-word search on "class style" finds this class. > > So the first basic skill is knowing the classes that are relevant to the > task at hand. For themes, the two classes are the ssm class and the > LoadManager (LM) class in leoApp.py. > > *Basic Skill 2* > > I'm working on themes at present, so I had clones of most of the relevant > code in an organizer node. I named this node "#766: Create Theme menu, > etc." > > This node was already the last top-level node of the outline, but it could > have been near the bottom of *another *organizer node called "Recent > code". The recent code organizer hides nodes so I don't get overwhelmed by > all the stuff on my plate. > > The second basic skill is to keep clones of your recent work, where you > can find them easily. > > *ssm.expand_css_constants * > > To recap, the theme designer (dev) must ensure that stylesheets contain > only absolute urls. > > The dev could encode those url's directly in the stylesheet, but that > would make the stylesheet limited to a particular environment. So devs > will use settings, and the css will include @constants referencing those > settings. Like this: > > QTreeView::branch:closed:has-children{ > image: @tree-image-closed; > } > > In short, ssm.expand_css_constants replaces those @constant with absolute > urls. > > *A hack that must be generalized* > > Now we come to one of Leo's best features/conventions: > > *A method's children are its helper methods* > > Indeed, this was the first Aha in Leo's history: webs are outlines in > disguise. It was very difficult to see that Knuth's sections were organized > (in his mind only!) as an outline. Leo makes this explicit. > > This matter a great deal! I *always* forget implementation details, but > the helpers show me where the details lie. > > In this case, one of ssm.expand_css_constants's children is > ssm.set_indicator_paths. Here is its docstring: > > In the stylesheet, replace (if they exist):: > image: @tree-image-closed > image: @tree-image-open > by:: > url(path/closed.png) > url(path/open.png) > > path can be relative to ~ or to leo/Icons. > > ... > > And voila, we see: > > A. Where absolute urls get created. > > B. Why only certain paths work. > > C. How this "hacky" method might/must be extended to handle other > @constants. > > *Summary* > > It's much slower to explain all this than to do it. *Processes are easier > than descriptions*. > > I want you to learn the processes involved, not the details. > > ssm.set_indicator_paths must look in more places for icons. One way to > reduce the need for herding cats is to create common utility methods. I'll > look into this. > > Leo's tree-handling code resolves icon boxes completely independently of > stylesheets. It may be that this *other* code needs generalization to > handle theme. FYI, the code is qt_gui.getImageImageFinder. I didn't > remember this code, I found it in a recent clone. > > HTH. > > Edward > -- You received this message because you are subscribed to the Google Groups "leo-editor" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/leo-editor. For more options, visit https://groups.google.com/d/optout.
