If I evaluate e.g. SystemDialogInput["Color"] and choose a colour, lets say red, the output cell shows RGBColor[1,0,0].
To view the font panel I can evaluate FrontEndTokenExecute["FontPanel"]. If I have some text highlighted somewhere I can change the font styling of the highlighted text (or cell) from the system panel that appears from the FrontEndTokenExecute. What I am wondering is if there is a way to programmatically return the chosen font settings analogous to how SystemDialogInput["Color"] returns the chosen color. For example, evaluate some code that includes choosing font settings within the system font panel, lets say manually choose Arial 12pt bold in the font panel,

and return e.g.
{FontFamily->"Arial",FontSize->12,FontWeight->Bold}
Just so we're clear I'm talking about doing this without any highlighted text or cell in the notebook. One of the problems seems to be -- on a Mac at least -- that the font is only selected if you have highlighted something in the notebook. There are some examples like this in the documentation (ref/CurrentValue):
Style["xxxx", FontFamily :> CurrentValue["ControlsFontFamily"],
FontSize :> CurrentValue["ControlsFontSize"]]
This suggest that an answer is possible if the appropriate argument to CurrentValue exists but "ControlsFontFamily" and "PanelFontFamily" are not the right arguments in this case.
Also is it possible to programmatically list all fonts available on a particular computer?
Edit
@kguler has provided an answer to the final sentence and second part of my question -- this could be used to build my own font panel. I have run @Heike's code and got this (screen grab) on Mac OS X 10.6.8 with Mma 8.0.4. Note the shadowing of PropertyValue with ref/PropertyValue.



