Forcing a skin updateDisplayList ?

Having got over my previous HSlider trackSkin issue, I have a new problem. I want to redraw my track skin in response to the sliders value change. If I derive my own class from HSlider I can see the slider's updateDisplayList function gets called when the slider value changes, but the skin's updateDisplayList only gets called when the control is initially laid out.
How do I invalidate the skin so that it will then call its updateDisplayList?
Cheers

Hi,
I think you have to extend slider and force invalidation. Something like
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
            super.updateDisplayList(unscaledWidth, unscaledHeight);
            this.mx_internal::innerSlider.getChildAt(0).invalidateDisplayList();

Similar Messages

  • Problems concerning sonata playlists and freevo cover art

    Hi!
    I'm setting up a media center PC and I'm having some problems with the playlists created by sonata. Another problem I have is not getting freevo to download cover art.
    First: When ever I try to make a playlist through the "Current" tab in Sonata it creates a m3u file with every song that's listed in the current window. I'm used to being able to pick one or a couple of songs and then adding it a specified playlist. Is this impossible in sonata? And if I try to play the m3u file created (the one with every song listed) through freevo I get a message that the directory is empty. What am I doing wrong??
    Second: I'm having big problems getting freevo to download cover art to my music. I can download info on movies from imdb, but info for the music doesn't work. I store the cover art downloaded by sonata in the different album folders and these covers show up in freevo. But if I have to play every new song i download first in sonata to get the cover art working in freevo I'll go crazy. It's supposed to work the same way in freevo as in sonata isn't it???
    It also seems that mplayer can't play m3u files. Using the mentioned sonata made m3u file in mplayer does nothing. Mplayer starts but nothing happens.
    My goal is to be able to make playlists through sonata and then play these lists using freevo. I don't want to get up from the couch. 
    Here's my local_conf.py:
    # -*- coding: iso-8859-1 -*-
    # local_conf.py - System configuration
    # $Id: local_conf.py.example 10508 2008-03-12 07:24:34Z duncan $
    # Notes:
    # This file contains your freevo settings, overriding the settings in
    # freevo_config.py. freevo_config.py, which is usually installed in
    # /usr/share/freevo, contains all the core settings. To change the settings copy
    # this file to ~/.freevo/local_conf.py or /etc/freevo/local_conf.py
    # It does not contain all the possible settings that you can change, see
    # freevo_config.py for all the possible settings. Also it does not contain
    # settings for the plug-ins, plug-ins contain their configuration information and
    # the can be listed with:
    # | freevo plugins -l
    # and the settings can se shown with
    # | freevo plugins -i <name of plug-in>
    # E.g.: when you want a alsa as mplayer audio out, just put in local_conf.py:
    # | MPLAYER_AO_DEV = 'alsa9'
    # The vertical line indicates code.
    # This is no normal config file, it's Python code. Because of that, you
    # need to follow some rules to avoid crashes. The examples should explain
    # the settings, but make sure a line starting with a variable has NO SPACES OR
    # TABS at the beginning.
    # Freevo - A Home Theater PC framework
    # Copyright (C) 2002 Krister Lagerstrom, et al.
    # Please see the file freevo/Docs/CREDITS for a complete list of authors.
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; either version 2 of the License, or
    # (at your option) any later version.
    # This program is distributed in the hope that it will be useful, but
    # WITHOUT ANY WARRANTY; without even the implied warranty of MER-
    # CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
    # Public License for more details.
    # You should have received a copy of the GNU General Public License along
    # with this program; if not, write to the Free Software Foundation, Inc.,
    # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
    CONFIG_VERSION = 5.23
    # ======================================================================
    # General freevo settings:
    # ======================================================================
    # LOCALE='iso-8859-15'
    # AUDIO_DEVICE = '/dev/dsp' # e.g.: /dev/dsp0, /dev/audio, /dev/alsa/?
    # AUDIO_INPUT_DEVICE = '/dev/dsp1' # e.g.: /dev/dsp0, /dev/audio, /dev/alsa/?
    # MIXER_MAJOR_CTRL = 'VOL' # Freevo takes control over one audio ctrl
    # 'VOL', 'PCM' 'OGAIN' etc.
    # MIXER_MAJOR_MUTE_CTRL = 'PCM' # used in alsamixer.py There are systems where
    # volume and mute use different controls
    # MIXER_DEVICE = '/dev/mixer' # mixer device
    # MIXER_CONTROL_ALL = 1 # Should Freevo take complete control of audio
    # MIXER_VOLUME_MAX = 90 # Set what you want maximum volume level to be.
    # MIXER_VOLUME_DEFAULT = 40 # Set default volume level.
    # MIXER_VOLUME_TV_IN = 60 # Set this to your preferred level 0-100.
    # MIXER_VOLUME_VCR_IN = 90 # If you use different input from TV
    # MIXER_VOLUME_RADIO_IN = 80 # Set this to your preferred level 0-100.
    START_FULLSCREEN_X = 1 # Start in fullscreen mode if using x11 or xv.
    # SYS_SHUTDOWN_CONFIRM = 1 # ask before shutdown
    # Physical ROM drives, multiple ones can be specified
    # by adding comma-seperated and quoted entries.
    # Format [ ('mountdir1', 'devicename1', 'displayed name1'),
    # ('mountdir2', 'devicename2', 'displayed name2'), ...]
    # Set to None to autodetect drives in during startup from /etc/fstab,
    # set to [] to disable rom drive support at all
    # ROM_DRIVES = None
    # Hide discs from the wrong menu (e.g. VCDs in audio menu) and empty discs.
    HIDE_UNUSABLE_DISCS = 1
    # Attempt to set the speed of the ROM drive. A good value for keeping the
    # drive silent while playing movies is 8.
    # ROM_SPEED = 0
    # Perform a whole system shutdown at SHUTDOWN! Useful for standalone boxes.
    # SYS_SHUTDOWN_ENABLE = 0
    # Command to execute to shutdown the system
    # SYS_SHUTDOWN_CMD = "sudo shutdown -h now"
    # SYS_RESTART_CMD = "sudo shutdown -r now"
    # ======================================================================
    # AUTOSHUTDOWN CONFIGURATION
    # ======================================================================
    # replace the default shutdown plugin
    # plugin.remove('shutdown')
    # plugin.activate('autoshutdown', level=90)
    # activate the timer
    # plugin.activate('autoshutdown.autoshutdowntimer')
    # -- autoshutdown menu item configuration --
    # SYS_SHUTDOWN_CONFIRM
    # Set to True to popup dialog boxes for confirmation.
    # this applies to menu items only.
    # AUTOSHUTDOWN_CONFIRM = True
    # -- autoshutdown timer configuration --
    # TIMER_TIMEOUT
    # Set the timeout in minutes after which the system
    # is shutdown. The allowed idle time and the running
    # processes (see below) are evaluated to determine if
    # a shutdown is allowed. Menu navigation in freevo will
    # reset the timer.
    # AUTOSHUTDOWN_TIMER_TIMEOUT=30
    # -- autoshutdown behaviour configuration --
    # PRETEND
    # Set to True to disable the actual shutdown command.
    # AUTOSHUTDOWN_PRETEND = False
    # PROCESS_LIST
    # List the processes that will prevent an automatic
    # shutdown. If there are important programs that
    # should not be interrupted, then add them to this
    # list. Set to None if a shutdown is always allowed.
    # AUTOSHUTDOWN_PROCESS_LIST = [
    # 'emerge',
    # 'tvgids',
    # 'transcode',
    # 'cdrecord',
    # 'mplayer',
    # 'top'
    # DEFAULT_WAKEUP_TIME
    # Set the default time at which to wakeup if there
    # are no recordings scheduled. The time is specified
    # in localtime 24 hour format. Set to None to disable
    # default wakeup time.
    # AUTOSHUTDOWN_DEFAULT_WAKEUP_TIME = "13:00"
    # FORCE_DEFAULT_WAKEUP
    # Set to True to always wakeup at the default wakeup
    # time. Set to False to only wakeup at the default
    # wakeup time when no recordings are scheduled.
    # AUTOSHUTDOWN_FORCE_DEFAULT_WAKEUP = True
    # ALLOWED_IDLE_TIME
    # The number of minutes that may be spent idle until
    # the next scheduled recording or default wakeup. That
    # is, if the gap between "now" and the next recording
    # or default wakeup is less than the allowed idle time
    # then a shutdown is not performed but the system is
    # left running. If the period from now to the next
    # recording or default wakeup is more than the allowed
    # idle time, then the system is shut down and a wakeup
    # is scheduled. Use this to minimize the number of
    # shutdown/boot sequences when many short programs are
    # recorded in a short period of time. Note that this
    # variable is used by both the timer and the menu.
    # AUTOSHUTDOWN_ALLOWED_IDLE_TIME = 45
    # -- Choice of wakeup method
    # The wakeup can be done via acpi-alarm or nvram-wakeup.
    # AUTOSHUTDOWN_METHOD = 'acpi'
    # AUTOSHUTDOWN_METHOD = 'nvram'
    # -- autoshutdown acpi-alarm configuration
    # This method uses the wakeup on alarm function that most BIOSs have.
    # The wakeup time is set by a simple
    # "echo 2004-08-02 20:15:00 >/proc/acpi/alarm"
    # On most mainbords you will have to ENABLE "Wake on Timer", "Resume on Alarm",
    # "RTC Alarm Resume" or similar things for the acpi wakeup method to work.
    # If you want to use acpi, you need to create a small script:
    # !/bin/sh
    # echo "$1" >/proc/acpi/alarm
    # You have to be root or use sudo for this to work.
    # AUTOSHUTDOWN_WAKEUP_CMD = sudo /PATH/TO/set_acpi.sh
    # -- autoshutdown nvram-wakeup configuration --
    # The nvram-wakeup utility is used to write the
    # wakeup alarm to the RTC in bios. Read the
    # nvram-wakeup documentation about this topic,
    # a working nvram-wakeup configuration is needed.
    # WAKEUP_CMD / NVRAM_OPT
    # Path to nvram-wakeup and options. Options can
    # be used to specify a config file.
    # AUTOSHUTDOWN_WAKEUP_CMD = "/usr/bin/nvram-wakeup"
    # AUTOSHUTDOWN_NVRAM_OPT = "--syslog"
    # WAKEUP_NEEDS_REBOOT
    # Set to True if the bios needs a reboot to catch
    # up with the rtc alarm that nvram-wakeup sets. The
    # boot loader options should be set too. Read the
    # nvram-wakeup documentation about this topic.
    # AUTOSHUTDOWN_BIOS_NEEDS_REBOOT = True
    # -- if the bios needs a reboot --
    # BOOT_LOADER
    # Set to "GRUB" or "LILO" Only needed if bios needs
    # a reboot to initialize the RTC wakeup call.
    # AUTOSHUTDOWN_BOOT_LOADER = "GRUB"
    # REMOUNT_BOOT_CMD / REMOUNT_BOOT_OPT
    # Grub needs to write to /boot/grub/grub.conf. Set
    # the command and options to remount the /boot
    # partition writeable. Set to None if this is not
    # needed.
    # AUTOSHUTDOWN_REMOUNT_BOOT_CMD = "/bin/mount"
    # AUTOSHUTDOWN_REMOUNT_BOOT_OPT = "/boot -o remount,rw"
    # GRUB_CMD / GRUB_OPT
    # Grub-set-default command and options that will
    # reboot and poweroff the system.
    # AUTOSHUTDOWN_GRUB_CMD = "/sbin/grub-set-default 0"
    # AUTOSHUTDOWN_GRUB_OPT = "0"
    # LILO_CMD / LILO_OPT
    # Lilo command with options that will reboot and
    # poweroff the system.
    # AUTOSHUTDOWN_LILO_CMD = "/sbin/lilo"
    # AUTOSHUTDOWN_LILO_OPT = "-R PowerOff"
    # ======================================================================
    # Events
    # ======================================================================
    # You can add more keybindings by adding them to the correct hash.
    # e.g. If you want to send 'contrast -100' to mplayer by pressing the '1' key,
    # just add the following line:
    # EVENTS['video']['1'] = Event(VIDEO_SEND_MPLAYER_CMD, arg='contrast -100')
    # See src/event.py for a list of all possible events.
    # Some events to jump to menus
    # EVENTS['menu']['GUIDE'] = Event(MENU_GOTO_TVGUIDE) # Not working
    # EVENTS['menu']['VIDEOS'] = Event(MENU_GOTO_VIDEOS)
    # EVENTS['menu']['MUSIC'] = Event(MENU_GOTO_MUSIC)
    # EVENTS['menu']['PICTURES'] = Event(MENU_GOTO_IMAGES)
    # EVENTS['menu']['GAMES'] = Event(MENU_GOTO_GAMES)
    # EVENTS['menu']['RADIO'] = Event(MENU_GOTO_RADIO) # Not working
    # EVENTS['menu']['POWER'] = Event(MENU_GOTO_SHUTDOWN)
    # Use arrow keys for back and select (alternate way of navigating)
    # MENU_ARROW_NAVIGATION = False
    # Process keyboard events from SDL. You want this unless you use only lirc
    # or event devices below.
    # USE_SDL_KEYBOARD = True
    # Keymap to map keyboard keys to event strings. You can also add new keys
    # here, e.g. KEYMAP[key.K_x] = 'SUBTITLE'. The K_-names are defined by pygame.
    # List of /dev/input/event# devices to monitor. You can specify either the
    # device node (e.g. '/dev/input/event1') or the name of the device (e.g.
    # 'ATI Remote Wonder II'). If you monitor your keyboard both here and with
    # USE_SDL_KEYBOARD, then you will get duplicate events.
    EVENT_DEVS = []
    # Keymap to map input events to event strings. You can change current mappings
    # and add new ones here, e.g. EVENTMAP['KEY_COFFEE'] = 'SUBTITLE'. Key names
    # are defined by the Linux input layer (input.h). An axis is described by a
    # pair, one for positive and one for negative movement, e.g.
    # EVENTMAP['REL_Z'] = ('LEFT', 'RIGHT')
    # Use Internet resources to fetch information?
    # For example, Freevo can use CDDB for album information,
    # the IMDB movie database for movie info, and Amazon for cover searches.
    # Set this to 0 if your computer isn't connected to a network.
    USE_NETWORK = 1
    # Directory location to save files when the normal filesystem
    # doesn't allow saving. This directory can save covers and fxd files
    # for read only filesystems like ROM drives. Set this variable to your
    # old MOVIE_DATA_DIR if you have one. It needs to be set to a directory
    # Freevo can write to.
    # OVERLAY_DIR = os.path.join(FREEVO_CACHEDIR, 'vfs')
    # Umask setting for all files.
    # 022 means only the user has write access. If you share your Freevo
    # installation with different users, set this to 002
    # UMASK = 022
    # Suffix for playlist files
    PLAYLIST_SUFFIX = [ 'm3u' ]
    # Use md5 in mmpython to create unique disc ids. Enable this if you have
    # problems with different discs having the same id.
    # MMPYTHON_CREATE_MD5_ID = 0
    # Keep metadata in memory
    # Setting this variable will keep all cache files in memory. Startup will be
    # slower, but for large directories, this will speed up the display.
    # 0 = Only keep current dir in memory. Use this if you have too much data
    # and not enough RAM
    # 1 = Once loaded, keep cachefile for directory in memory
    # 2 = Load all cachefiles on startup
    # WARNING: you should not run 'freevo cache' when freevo is running.
    # MEDIAINFO_USE_MEMORY = 1
    # Cache images. This uses a lot of disc space but it's a huge speed
    # enhancement. The images will be cached in OVERLAY_DIR
    CACHE_IMAGES = 1
    # ======================================================================
    # Plugins:
    # ======================================================================
    # Remove undesired plugins by setting plugin.remove(code).
    # You can also use the name to remove a plugin. But if you do that,
    # all instances of this plugin will be removed.
    # Examples:
    # plugin.remove(plugin_tv) or
    # plugin.remove('tv') will remove the tv module from the main menu
    # plugin.remove(rom_plugins['image']) will remove the rom drives from the
    # image main menu,
    # plugin.remove('rom_drives.rom_items') will remove the rom drives from all
    # menus
    # See freevo_config.py for a list of loaded plugins
    plugin.remove('tv')
    plugin.remove('headlines')
    plugin.remove('idlebar.tv')
    plugin.remove('idlebar.diskfree')
    plugin.remove('file_ops')
    plugin.remove('tv.generic_record')
    plugin.remove('tv.view_recordings')
    plugin.remove('tv.mplayer')
    plugin.remove('tv.manual_record')
    plugin.remove('tv.scheduled_recordings')
    plugin.remove('tv.view_favorites')
    plugin.remove('video.moviecovers')
    # User setup
    plugin.activate('audio.coversearch')
    # plugin.activate('video.moviecovers')
    plugin.activate('video.details')
    # list of regexp to be ignored on a disc label
    IMDB_REMOVE_FROM_LABEL = ('season[\._ -][0-9]+', 'disc[\._ -][0-9]+',
    'd[\._ -][0-9]+', 'german')
    # list of words to ignore when searching based on a filename
    IMDB_REMOVE_FROM_SEARCHSTRING = ('the', 'a')
    # When searching for a movie title in imdb, should the result be
    # autoaccepted if it is only one hit?
    # 0 = show menu even if it is only one hit (gives you an opportunity to cancel)
    # 1 = autoaccept
    IMDB_AUTOACCEPT_SINGLE_HIT = 1
    SCREENSAVER_DELAY = 30 # of seconds to wait to start saver.
    SCREENSAVER_CYCLE_TIME = 60 # of seconds to run a screensaver before starting another saver.
    plugin.activate('screensaver')
    # Use ivtv_record instead if you have an ivtv based card (PVR-250/350)
    # and want freevo to do everthing for you. TV_SETTINGS must be set
    # correctly. To use you need to set the following two lines:
    # plugin.remove('tv.generic_record')
    # plugin_record = plugin.activate('tv.ivtv_record')
    # Enable this for joystick support:
    # plugin.activate('joy')
    # Headlines
    # You are free to use any rss feeds in the HEADLINES_LOCATIONS below
    # These are just working examples for the Freevo feeds.
    # To turn off Headlines add plugin.remove('headlines')
    # plugin.activate('headlines', level=45)
    # HEADLINES_LOCATIONS = [
    # ('Freevo news releases', 'http://sourceforge.net/export/rss2_projnews.php?group_id=46652'),
    # ('Freevo file releases', 'http://sourceforge.net/export/rss2_projfiles.php?group_id=46652'),
    # ('Freevo summary+stats', 'http://sourceforge.net/export/rss2_projsummary.php?group_id=46652'),
    # ('Freevo donors', 'http://sourceforge.net/export/rss2_projdonors.php?group_id=46652'),
    # CD Ripping
    # CD_RIP_TMP_DIR = '/tmp/'
    # CD_RIP_TMP_NAME = 'track_%(track)s_being_ripped'
    # CD_RIP_PN_PREF = '%(artist)s/%(album)s/%(track)s - %(song)s'
    # CD_RIP_CDPAR_OPTS = '-s'
    # CD_RIP_LAME_OPTS = '--vbr-new -b 192 -h'
    # CD_RIP_OGG_OPTS = '-m 128'
    # CD_RIP_FLAC_OPTS = '-8'
    # CD_RIP_CASE = None # Can be title, upper, lower
    # CD_RIP_REPLACE_SPACE = None # Can be '_', '-', etc.
    # CD Burning
    # CDBURN_AUDIO_DAO = 1
    # CDBURN_MKISOFS_PATH = '/usr/bin/mkisofs'
    # CDBURN_CDRECORD_PATH = '/usr/bin/cdrecord'
    # CDBURN_TEMP_DIR='/tmp/'
    # CDBURN_DEV = '/dev/cdrom'
    # CDBURN_SPEED = 32
    # Re-encode
    # This plug-in transcodes a video to a different format
    # plugin.activate('video.reencode')
    # REENCODE_CONTAINER = 'avi'
    # REENCODE_RESOLUTION = 'Optimal'
    # REENCODE_VIDEOCODEC = 'XviD'
    # REENCODE_VIDEOBITRATE = 1000
    # REENCODE_AUDIOCODEC = 'MPEG 1 Layer 3 (mp3)'
    # REENCODE_AUDIOBITRATE = 128
    # REENCODE_NUMPASSES = 1
    # REENCODE_VIDEOFILTER = None
    # Freevo Music Player Daemon
    # http://www.musicpd.org/
    # plugin.activate('mpd')
    # Freevo Bluetooth Phone Settings
    # This plugin uses The Python bindings for Bluez bluetooth stack.
    # It can be downloaded from http://org.csail.mit.edu/pybluez/download.html
    # or installed with the package manager of your operating system.
    # To this plugin to work you need the j2me midlet installed in a compatible
    # phone.
    # plugin.activate('freevused')
    # if RFCOMM port is already binded wait this seconds to retry binding
    # FVUSED_BIND_TIMEOUT = 30
    # Translation of commands from j2me client to events of Freevo
    # FVUSED_CMDS = {
    # 'PREV': 'UP', # 1st row left
    # 'STRT': 'SELECT', # 1nd row center
    # 'NEXT': 'DOWN', # 1st row right
    # 'RWND': 'LEFT', # 2nd row left
    # 'PAUS': 'PAUSE', # 2nd row center
    # 'FFWD': 'RIGHT', # 2nd row right
    # 'VOL-': 'MIXER_VOLDOWN', # 3rd row left
    # 'STOP': 'EXIT', # 3rd row center
    # 'VOL+': 'MIXER_VOLUP', # 3rd row right
    # 'VOLM': 'MIXER_VOLMUTE', # 4th row left
    # 'SLCT': 'ENTER', # 4th row center
    # 'MAIN': 'MENU' # 4th row right
    # Freevo Button Bar Plug-in
    # plugin.activate('buttonbar')
    # You'll also need to map the 'RED', 'GREEN', 'YELLOW'
    # and 'BLUE' events to keys for example (don't use this
    # it overrides some default keys)
    # KEYMAP[key.K_F5] = 'RED'
    # KEYMAP[key.K_F6] = 'GREEN' #Already mapped to record
    # KEYMAP[key.K_F7] = 'YELLOW'
    # KEYMAP[key.K_F8] = 'BLUE'
    # Freevo Screensaver Plug-in
    # SCREENSAVER_DELAY = 120 # of seconds to wait to start saver.
    # SCREENSAVER_CYCLE_TIME = 60 # of seconds to run a screensaver before starting another saver.
    # plugin.activate('screensaver')
    # plugin.activate('screensaver.balls') # Bouncing balls all over the screen
    # plugin.activate('screensaver.bouncing_freevo') # The freevo logo bouncing around the screen
    # ======================================================================
    # Freevo directory settings:
    # ======================================================================
    # You can change all this variables in the folder.fxd on a per folder
    # basis
    # Example:
    # <freevo>
    # <folder title="Title of the directory" img-cover="nice-cover.png">
    # <setvar name="directory_autoplay_single_item" val="0"/>
    # <info>
    # <content>A small description of the directory</content>
    # </info>
    # </folder>
    # </freevo>
    # Should directories sorted by date instead of filename?
    # 0 = No, always sort by filename.
    # 1 = Yes, sort by date
    # 2 = No, don't sory by date for normal directories,
    # but sort by date for TV_RECORD_DIR.
    DIRECTORY_SORT_BY_DATE = 0
    # Should directory items be sorted in reverse order?
    # DIRECTORY_REVERSE_SORT = 0
    # Should we use "smart" sorting?
    # Smart sorting ignores the word "The" in item names.
    DIRECTORY_SMART_SORT = 1
    # Should files in directories have smart names?
    # This removes the first part of the names when identical
    # DIRECTORY_SMART_NAMES = 1
    # Should Freevo autoplay an item if only one item is in the directory?
    DIRECTORY_AUTOPLAY_SINGLE_ITEM = 0
    # Force the skin to use a specific layout number. -1 == no force. The layout
    # toggle with DISPLAY will be disabled
    # DIRECTORY_FORCE_SKIN_LAYOUT = -1
    # Format string for the audio item names.
    # Possible strings:
    # a=artist, n=tracknumber, t=title, y=year, f=filename
    # Example:
    # This will show the title and the track number:
    # DIRECTORY_AUDIO_FORMAT_STRING = '%(n)s - %(t)s'
    # DIRECTORY_AUDIO_FORMAT_STRING = '%(t)s'
    # Use media id tags to generate the name of the item. This should be
    # enabled all the time. It should only be disabled for directories with
    # broken tags.
    DIRECTORY_USE_MEDIAID_TAG_NAMES = 1
    # The following settings determine which features are available for
    # which media types.
    # If you set this variable in a folder.fxd, the value is 1 (enabled)
    # or 0 (disabled).
    # Examples:
    # To enable autoplay for audio and image files:
    # DIRECTORY_AUTOPLAY_ITEMS = [ 'audio', 'image' ]
    # To disable autoplay entirely:
    # DIRECTORY_AUTOPLAY_ITEMS = []
    # Make all items a playlist. So when one is finished, the next one will
    # start. It's also possible to browse through the list with UP and DOWN
    # DIRECTORY_CREATE_PLAYLIST = [ 'audio', 'image' ]
    # Add playlist files ('m3u') to the directory
    # DIRECTORY_ADD_PLAYLIST_FILES = [ 'audio', 'image' ]
    # Add the item 'Random Playlist' to the directory
    # DIRECTORY_ADD_RANDOM_PLAYLIST = [ 'audio' ]
    # Make 'Play' not 'Browse' the default action when only items and not
    # subdirectories are in the directory
    # DIRECTORY_AUTOPLAY_ITEMS = [ ]
    # ======================================================================
    # Freevo movie settings:
    # ======================================================================
    # Where the movie files can be found.
    # This is a list of items (e.g. directories, fxd files). The items themselves
    # can also be a list of (title, file)
    VIDEO_ITEMS = [
    ('movies', '/home/per/movies'),
    ('movies extra', '/extra/movies'),
    ('tv', '/home/per/tv'),
    ('tv extra', '/extra/tv'),
    # Some people access movies on a different machine using an automounter.
    # To avoid timeouts, you can specify the machine name in the directory
    # to check if the machine is alive first
    # Directory myserver:/files/server-stuff will show the item for the
    # directory /files/server-stuff if the computer myserver is alive.
    # The list of filename suffixes that are used to match the files that
    # are played wih MPlayer.
    # VIDEO_MPLAYER_SUFFIX = [ 'avi', 'mpg', 'mpeg', 'wmv', 'bin', 'rm',
    # 'divx', 'ogm', 'vob', 'asf', 'm2v', 'm2p',
    # 'mp4', 'viv', 'nuv', 'mov', 'iso',
    # 'nsv', 'mkv' ]
    # The list of filename suffixes that are used to match the files that
    # are played wih Xine.
    # VIDEO_XINE_SUFFIX = [ 'avi', 'mpg', 'mpeg', 'rm', 'divx', 'ogm',
    # 'asf', 'm2v', 'm2p', 'mp4', 'mov', 'cue' ]
    # Preferred video player
    VIDEO_PREFERED_PLAYER = 'mplayer'
    # Only scan OVERLAY_DIR and VIDEO_SHOW_DATA_DIR for fxd files containing
    # information about a disc. If you only have the fxd files for discs in
    # one of this directories (and subdirectories), set this to 1, it will
    # speed up startup, 0 may be needed if you have fxd files with disc links
    # in your normal movie tree.
    # VIDEO_ONLY_SCAN_DATADIR = 1
    # try to detect a movie with more than one file and join them as one
    # item
    VIDEO_AUTOJOIN = 1
    # try to find out if deinterlacing is needed or not
    # VIDEO_DEINTERLACE = None
    # Instruct player to use XVMC for playback
    # VIDEO_USE_XVMC = None
    # Pass field dominance parameter to MPlayer
    # VIDEO_FIELD_DOMINANCE = None
    # PRE and POST playing commands. Set these to a runnable command if
    # you wish to do something before and after playing a video, like
    # dimming the lights
    # VIDEO_PRE_PLAY = None
    # VIDEO_POST_PLAY = None
    # ======================================================================
    # Freevo audio settings:
    # ======================================================================
    # Where the Audio (mp3, ogg) files can be found.
    # This is a list of items (e.g. directories, fxd files). The items themselves
    # can also be a list of (title, file)
    # To add webradio support, add fxd/webradio.fxd to this list
    AUDIO_ITEMS = [
    ('music', '/home/per/music'),
    ('music extra', '/extra/music'),
    ('playlists', '/home/per/.mpd/playlists'),
    # The list of filename suffixes that are used to match the files that
    # are played as audio.
    # AUDIO_SUFFIX = [ 'mp3', 'ogg', 'wav','m4a', 'wma', 'aac', 'flac', 'mka' ]
    # Regular expression used to recognize filenames which are likely to be
    # covers for an album
    # This will match front.jpg and cover-f.jpg, but not back.jpg nor cover-b.jpg:
    # AUDIO_COVER_REGEXP = 'front|-f'
    # Format strings used to seach for audio cover images.
    # Fist matching GIF, JPG or PNG image will be used as cover.
    # Examples:
    # AUDIO_COVER_FORMAT_STRINGS = [ 'cover-%(artist)s-%(album)s', 'mycover' ]
    # AUDIO_COVER_FORMAT_STRINGS = [ '%(album)s', '../covers/%(album)s', '../covers/nocover' ]
    # Preferred audio player
    AUDIO_PREFERED_PLAYER = 'mplayer'
    # Show video files in the audio menu (for music-videos)
    AUDIO_SHOW_VIDEOFILES = False
    # ======================================================================
    # Freevo image viewer settings:
    # ======================================================================
    # Where image files can be found.
    # This is a list of items (e.g. directories, fxd files). The items itself
    # can also be a list of (title, file)
    IMAGE_ITEMS = [
    ('pictures', '/home/per/pictures'),
    # The list of filename suffixes that are used to match the files that
    # are used for the image viewer.
    # IMAGE_SUFFIX = [ 'jpg','gif','png','jpeg','bmp','tiff','psd' ]
    # The viewer now supports a new type of menu entry, a slideshow file.
    # It also has the slideshow alarm signal handler for automated shows.
    # It uses a new configuration option:
    # IMAGE_SSHOW_SUFFIX = [ 'ssr' ]
    # The viewer can exclude certain types of images based on the regular expression list
    # eg IMAGE_EXCLUDE = [('thm','tn_')]
    # IMAGE_EXCLUDE = None
    # Mode of the blending effect in the image viewer between two images
    # Possible values are:
    # None: no blending
    # -1 random effect
    # 0 alpha blending
    # 1 wipe effect
    IMAGEVIEWER_BLEND_MODE = -1
    # When viewing images on a TV screen where the pixels are not square
    # the images need to be scaled according to the aspect ratio of the TV
    # Use this setting for 16x9 TVs
    # IMAGEVIEWER_ASPECT = (float(1024) / float(720))
    # Use this setting for 4x3 TVs
    # IMAGEVIEWER_ASPECT = (float(768) / float(720))
    # Use this setting for Monitors including HDTVs
    # IMAGEVIEWER_ASPECT = 1.0
    # IMAGEVIEWER_ASPECT = 1.0
    # ======================================================================
    # Freevo games settings:
    # ======================================================================
    # MAME is an emulator for old arcade video games. It supports almost
    # 2000 different games! The actual emulator is not included in Freevo,
    # you'll need to download and install it separately. The main MAME
    # website is at http://www.mame.net, but the version that is used here
    # is at http://x.mame.net since the regular MAME is for Windows.
    # SNES stands for Super Nintendo Entertainment System. Freevo relies
    # on other programs that are not included in Freevo to play these games.
    # NEW GAMES SYSTEM :
    # =================
    # The GAMES_ITEMS structure is now build as follows :
    # <NAME>, <FOLDER>, (<TYPE>, <COMMAND_PATH>, <COMMAND_ARGS>, <IMAGE_PATH>, \
    # [<FILE_SUFFIX_FOR_GENERIC>])
    # where :
    # - <TYPE> : Internal game types (MAME or SNES) or
    # generic one (GENERIC)
    # - <COMMAND_PATH> : Emulator command
    # - <COMMAND_ARGS> : Arguments for the emulator
    # - <IMAGE_PATH> : Optionnal path to the picture
    # - <FILE_SUFFIX_FOR_GENERIC> : If the folder use the GENERIC
    # type, then you must specify here
    # the file suffix used by the emulator
    # GAMES_ITEMS = [
    # ('MAME', '/home/media/games/xmame/roms',
    # ('MAME', '/usr/local/bin/xmame.SDL', '-fullscreen -modenumber 6',
    # '/home/media/games/xmame/shots', None)),
    # ('SUPER NINTENDO', '/home/media/games/snes/roms',
    # ('SNES', '/usr/local/bin/zsnes', '-m -r 3 -k 100 -cs -u', '', None )),
    # ('Visual Boy Advance', '/home/media/games/vba/roms/',
    # ('GENERIC', '/usr/local/vba/VisualBoyAdvance', ' ', '', [ 'gba' ] )),
    # ('MEGADRIVE', '/home/media/games/megadrive/roms',
    # ('GENESIS', '/usr/local/bin/generator-svgalib', '', '', '' ))
    # GAMES_ITEMS = None
    # These settings are used for the MAME arcade emulator:
    # Priority of the game process
    # 0 = Don't change the priority
    # >0 - Lower priority
    # <0 - Higher priority
    # GAMES_NICE = -20
    # MAME cache directory
    # GAMES_MAME_CACHE = '%s/romlist-%s.pickled' % (FREEVO_CACHEDIR, os.getuid())
    # ======================================================================
    # Freevo SKIN settings:
    # ======================================================================
    # XML file for the skin. If SKIN_XML_FILE is set, this skin will be
    # used, otherwise the skin will rememeber the last choosen skin.
    # SKIN_XML_FILE = 'blurr'
    # Select a way when to switch to text view even if a image menu is there
    # 1 = Force text view when all items have the same image and there are no
    # directories
    # 2 = Ignore the directories, always switch to text view when all images
    # are the same
    # SKIN_FORCE_TEXTVIEW_STYLE = 1
    # Force text view for the media menu
    # (The media menu is the first menu displayed for video, audio, images
    # and games).
    # SKIN_MEDIAMENU_FORCE_TEXTVIEW = 0
    # ======================================================================
    # Freevo OSD settings:
    # ======================================================================
    # System Path to search for fonts not included in the Freevo distribution
    # OSD_EXTRA_FONT_PATH = [ '/usr/share/fonts/truetype' ]
    # Font aliases
    # All names must be lowercase! All alternate fonts must be in './share/fonts/'
    # OSD_FONT_ALIASES = { 'arial_bold.ttf' : 'VeraBd.ttf' }
    # For non-european character sets the OSD_FORCE_FONTNAME and
    # OSD_FORCE_FONTSIZE can be set. The size is a scaling ratio, ie 1.2.
    # Setting OSD_FORCE_FONTNAME='batang.ttf' and OSD_FORCE_FONTSIZE=1.0
    # allows Korean characters.
    # OSD_FORCE_FONTNAME = None
    # OSD_FORCE_FONTSIZE = None
    # Number of seconds to wait until the busy icon is shown in the menu.
    # Busy icon can also be shown right away when there is more than a certain
    # number of files in a directory.
    # Set this to None to disable this.
    # (seconds, files)
    # OSD_BUSYICON_TIMER = (0.7, 200)
    # Number of pixels to move the display to centre the OSD on the display
    # OSD_OVERSCAN_LEFT = OSD_OVERSCAN_RIGHT = 0
    # OSD_OVERSCAN_TOP = OSD_OVERSCAN_BOTTOM = 0
    # Setting the cursors when freevo is run in fullscreen mode
    # OSD_X11_CURSORS = '/usr/lib/X11/cursors/black.cursor /usr/lib/X11/cursors/blank.cursor'
    # Execute a script on OSD startup.
    # OSD_SDL_EXEC_AFTER_STARTUP = ""
    # Execute a script on OSD close.
    # OSD_SDL_EXEC_AFTER_CLOSE = ""
    # Stop the osd before playing a movie with xine or mplayer. Some output
    # devices need this. After playback, the osd will be restored
    # OSD_STOP_WHEN_PLAYING = 0
    # Dim text that doesn't fit instead of using ellipses.
    # OSD_DIM_TEXT = 1
    # OSD sound effects
    # OSD_SOUNDS_ENABLED=False
    # OSD_SOUNDS= {
    # 'menu.navigate': None,
    # 'menu.back_one': None,
    # 'menu.select' : None
    # ======================================================================
    # Freevo remote control settings:
    # ======================================================================
    # Location of the lircrc file
    # For remote control support, Freevo needs a lircrc file, like this:
    # begin
    # prog = freevo
    # button = select
    # config = SELECT
    # end
    # Check contrib/lirc for examples and helpers/freevo2lirc.pl for a converter
    # script.
    # LIRCRC = '/etc/freevo/lircrc'
    # Joystick support
    # 0 = Disable joystick support
    # 1 = Use js0,
    # 2 = Use js1,
    # ... etc
    # JOY_DEV = 0
    # JOY_SENS = 32000
    # JOY_LOCKFILE = /path/to/joystick/lockfile
    # Freevo can support as many buttons as your controller has
    # as long as there is a corresponding entry in JOY_CMDS.
    # You will also need to plugin.activate('joy').
    # FYI: new kernels use /dev/input/jsX, but joy.py will fall back on /dev/jsX
    # JOY_CMDS = {
    # 'up' : 'UP',
    # 'down' : 'DOWN',
    # 'left' : 'LEFT',
    # 'right' : 'RIGHT',
    # 'button 1' : 'PLAY',
    # 'button 2' : 'PAUSE',
    # 'button 3' : 'STOP',
    # 'button 4' : 'ENTER',
    # Here are the PS3 joy stick mappings
    # JOY_CMDS = {
    # 'button 5' : 'UP',
    # 'button 7' : 'DOWN',
    # 'button 8' : 'LEFT',
    # 'button 6' : 'RIGHT',
    # 'up' : 'UP',
    # 'down' : 'DOWN',
    # 'left' : 'LEFT',
    # 'right' : 'RIGHT',
    # 'button 14' : 'SELECT', # <circle>
    # 'button 16' : 'EXIT', # <square>
    # 'button 15' : 'STOP', # <x>
    # 'button 1' : 'ENTER', # <select>
    # 'button 11' : 'VOL+', # <L1>
    # 'button 9' : 'VOL-', # <L2>
    # 'button 2' : 'MUTE', # <L3>
    # 'button 10' : 'MUTE', # <R2>
    # 'button 4' : 'PLAY', # <start>
    # 'button 13' : 'PLAY', # <start>
    # 'button 17' : 'MENU', # <ps>
    # ======================================================================
    # TVtime settings:
    # ======================================================================
    # Location of the TV time program
    # Default: Use the value in freevo.conf
    # TVTIME_CMD = CONF.tvtime
    # ======================================================================
    # MPlayer settings:
    # ======================================================================
    # MPLAYER_AO_DEV = 'oss:/dev/dsp' # e.g.: oss,sdl,alsa, see mplayer docs
    # MPLAYER_VO_DEV_OPTS = '' # e.g.: ':some_var=vcal'
    # DVD_LANG_PREF = 'en,se,no' # Order of preferred languages on DVD.
    # DVD_SUBTITLE_PREF = '' # Order of preferred subtitles on DVD.
    # Priority of mplayer process. 0 is unchanged, <0 is higher prio, >0 lower prio.
    # prio <0 has no effect unless run as root.
    # MPLAYER_NICE = -20
    # Mplayer options to use the software scaler. If your CPU is fast enough, you
    # might try a software scaler. You can disable it later for some larger files
    # with the mplayer option '-nosws'. If you have -framedrop or -hardframedrop
    # as mplayer option, the software scaler will also not be used.
    # A good value for this variable is:
    # MPLAYER_SOFTWARE_SCALER = "-subfont-text-scale 5 -fs -sws 2 -vf scale=%s:-3,"\
    # "expand=%s:%s " % ( CONF.width, CONF.width, CONF.height )
    # older versions of mplayer may need
    # MPLAYER_SOFTWARE_SCALER = '-xy %s -sws 2 -vop scale:-1:-1:-1:100' % CONF.width
    # MPLAYER_SOFTWARE_SCALER = ''
    # Mplayer arguments for different media formats. (eg DVDs, CDs, AVI files, etc)
    # Uses a default value if nothing else matches.
    # MPLAYER_ARGS = { 'dvd' : '-cache 8192',
    # 'vcd' : '-cache 4096',
    # 'cd' : '-cache 1024 -cdda speed=2',
    # 'tv' : '-nocache',
    # 'ivtv' : '-cache 8192',
    # 'avi' : '-cache 5000 -idx',
    # 'rm' : '-cache 5000 -forceidx',
    # 'rmvb' : '-cache 5000 -forceidx',
    # 'webcam' : 'tv:// -tv driver=v4l:width=352:height=288:outfmt=yuy2:device=/dev/video2',
    # 'default': '-cache 5000'
    # Number of seconds before seek value times out. This is used when
    # seeking a specified number of minutes into a movie. If you make
    # a mistake or change your mind, the seek value will timeout after
    # this many seconds.
    # MPLAYER_SEEK_TIMEOUT = 8
    # Autocrop files when playing. This is useful for files in 4:3 with black
    # bars on a 16:9 tv
    # MPLAYER_AUTOCROP = 0
    # Try to set correct 'delay' and 'mc' values for mplayer based on the delay
    # from mmpython.
    # This should correct av sync problems with mplayer for some files, but
    # may also break things. (I don't know, that's why it's disabled by default).
    # WARNING: When seeking, the playback is out of sync for some seconds!
    # MPLAYER_SET_AUDIO_DELAY = 0
    # Mplayer video filter for interlaced or progressive videos. If you have
    # a slow pc, do not use post processing
    # MPLAYER_VF_INTERLACED = ''
    # MPLAYER_VF_PROGRESSIVE = 'pp=fd'
    # For pal and dvb-t recordings, the following looks good
    # MPLAYER_VF_INTERLACED = 'pp=md/de,phase=U'
    # MPLAYER_VF_INTERLACED = 'pp=de/fd'
    # MPLAYER_VF_PROGRESSIVE = 'pp=de'
    # For the autodetect TOP/BOTTOM field first in mplayer
    # (if this feature present in mplayer)
    # MPLAYER_HAS_FIELD_DOMINANCE = 1
    # ======================================================================
    # Xine settings:
    # ======================================================================
    # You need xine-ui version greater 0.9.21 to use the all the features
    # of the xine plugin
    # XINE_VO_DEV = 'xv'
    # XINE_COMMAND = '%s --auto-play=fq --hide-gui --borderless --geometry %sx%s+0+0 --no-splash' % \
    # (CONF.xine, CONF.width, CONF.height)
    # XINE_ARGS_DEF = "--no-lirc --post='pp:quality=10;expand'"
    # XINE_AO_DEV = 'oss' # alsa or oss
    # Set to False if xine doesn't have '--no-lirc' option
    # XINE_HAS_NO_LIRC = True
    # Set to True is xine supports get_time this enables the position to be saved
    # XINE_BOOKMARK = False
    # ======================================================================
    # Freevo TV settings:
    # ======================================================================
    # This is where recorded video is written.
    # XXX the path doesn't work from the www cgi scripts!
    # TV_RECORD_DIR = None
    # This will enable duplicate recording detection
    # TV_RECORD_DUPLICATE_DETECTION = True
    # This will enable only new episodes to be recorded
    # TV_RECORD_ONLY_NEW_DETECTION = True
    # ================================================================================
    # Watching TV
    # ================================================================================
    # XXX You must change this to fit your local conditions!
    # NORM: ntsc, pal, secam
    # INPUT: television, composite1
    # CHANLIST: One of the following:
    # us-bcast, us-cable, us-cable-hrc, japan-bcast, japan-cable, europe-west,
    # europe-east, italy, newzealand, australia, ireland, france, china-bcast,
    # southafrica, argentina, canada-cable, russia
    # TV_SETTINGS = 'NORM INPUT CHANLIST DEVICE'
    # Video input device
    # Usually /dev/video0, but might be /dev/video1 instead for multiple boards.
    # FreeBSD uses the Brooktree TV-card driver, not V4L.
    # TV_DRIVER = 'v4l'
    # TV_DEVICE = '/dev/video0'
    # TV_INPUT = 0
    # ================================================================================
    # Listening to radio
    # ================================================================================
    # Radio device default is None, /dev/video24 for ivtv
    # RADIO_DEVICE = '/dev/radio'
    # Radio commands:
    # plugin.activate('audio.radioplayer')
    # plugin.activate('audio.radio')
    # for fmtools
    # RADIO_CMD = 'fm'
    # RADIO_CMD_START = (RADIO_CMD + ' -d %s ' % RADIO_DEVICE + ' -q %s 65535')
    # RADIO_CMD_STOP = (RADIO_CMD + ' -d %s ' % RADIO_DEVICE + ' -q off')
    # for ivtv-radio
    # RADIO_CMD = '/usr/bin/ivtv-radio -d /dev/radio0 -i /dev/video24'
    # RADIO_STATIONS = [
    # ('DRS 1', '94.80'),
    # ('VIRUS', '104.30'),
    # (u'Radio Zürisee', '90.20'),
    # Additional options to pass to mplayer in TV mode.
    # eg. To turn off deinterlacing:
    # TV_OPTS = '-vop pp=ci'
    # TV_OPTS = ''
    # TV_SETTINGS = '%s television %s %s' % (CONF.tv, CONF.chanlist, TV_DEVICE)
    # Size (in MB) of the timeshift buffer. (ie: how long you can pause tv for.)
    # This is set to a low default because the default buffer location is
    # under FREEVO_CACHEDIR and we don't want to blow /var or /tmp.
    # TIMESHIFT_BUFFER_SIZE = 128
    # TIMESHIFT_ENCODE_CMD = 'mp1e -m3 -c%s -p%s -r14,100' % \
    # (TV_SETTINGS.split()[3], AUDIO_INPUT_DEVICE)
    # TIMESHIFT_BUFFER = '%s/timeshift.mpeg' % FREEVO_CACHEDIR
    # TV_DATE_FORMAT = '%e-%b' # Day-Month: 11-Jun
    # TV_TIME_FORMAT = '%H:%M' # Hour-Minute 14:05
    # TV_DATETIME_FORMAT = '%A %b %d %I:%M %p' # Thursday September 24 8:54 am
    # This is the filename format for files recorded using Freevo.
    # You can use any of the strftime variables in it, provided you
    # put two '%%' at the beginning.
    # Some examples:
    # %%A - Full weekday name.
    # %%H - Hour (24-hour clock) as a decimal number [00,23].
    # %%M - Minute as a decimal number [00,59].
    # %%m - Month as a decimal number [01,12].
    # %%d - Day of the month as a decimal number [01,31].
    # %%p - Locale's equivalent of either AM or PM.
    # More can be found at: http://www.python.org/doc/current/lib/module-time.html
    # TV_RECORD_FILE_MASK = '%%m-%%d %%H:%%M %(progname)s - %(title)s'
    # If using the persistent recordserver
    # TV_RECORD_SCHEDULE = FREEVO_STATICDIR + '/schedule.pickle'
    # TV_RECORD_FAVORITES = FREEVO_STATICDIR + '/favorites.pickle'
    # TV_RECORD_FAVORITES_LIST = FREEVO_STATICDIR + '/favorites.txt'
    # RECORDSERVER_IP = 'localhost'
    # RECORDSERVER_PORT = 18001
    # RECORDSERVER_SECRET = 'secret1'
    # If the recordserver runs as root, set the uid to the given one
    # after startup. The gui must also match one of the users group ids
    # RECORDSERVER_UID = 0
    # RECORDSERVER_UID = 0
    # Remove old recordings if GB free is less than specified value
    # RECORDSERVER_CLEANUP_THRESHOLD = 0
    # start every recording X minutes before scheduled,
    # and stop X minutes after scheduled - default to zero minutes.
    # This must be a value in seconds although at the moment only has
    # the percision of one minute.
    # TV_RECORD_PADDING_PRE = 0
    # TV_RECORD_PADDING_POST = 0
    # Number of minutes before or after the start time of a favorite where
    # a program matching the name, day of week etc should still be considered a
    # favorite. For example a favorite has a start time of 21.00, but the program
    # has been brought forward by the broadcaster by 10 minutes to 20.50, with
    # a margin of less than 10 this program will not be recorded as the start time
    # is outside the margin. But if the margin is set at 10 minutes or greater this
    # program will be considered a favorite and recorded. Probably about 45 minutes
    # is the best bet, better a false positive than a false negative.
    # TV_RECORD_FAVORITE_MARGIN = 45
    # PRE and POST recording commands. Set these to a runnable command if
    # you wish to have special mixer settings or video post processing.
    # VCR_PRE_REC = None
    # VCR_POST_REC = None
    # VCR_AUDIO = (':adevice=%s' % AUDIO_DEVICE +
    # ':audiorate=32000' + # 44100 for better sound
    # ':forceaudio:forcechan=1:' + # Forced mono for bug in my driver
    # 'buffersize=64') # 64MB capture buffer, change?
    # TV capture size for viewing and recording. Max 768x480 for NTSC,
    # 768x576 for PAL. Set lower if you have a slow computer!
    # For the 'tvtime' TV viewing application, only the horizontal size is used.
    # Set the horizontal size to 400 or 480 if you have a slow (~500MHz) computer,
    # it still looks OK, and the picture will not be as jerky.
    # The vertical size is always either fullscreen or 480/576 (NTSC/PAL)
    # for tvtime.
    # TV_VIEW_SIZE = (640, 480)
    # TV_REC_SIZE = (320, 240) # Default for slower computers
    # Input formats for viewing and recording. The format affect viewing
    # and recording performance. It is specific to your hardware, so read
    # the MPlayer docs and experiment with mplayer to see which one fits
    # your computer best.
    # TV_VIEW_OUTFMT = 'yuy2' # Better quality, slower on pure FB/X11
    # TV_REC_OUTFMT = 'yuy2'
    # XXX Please see the mencoder docs for more info about the settings
    # XXX below. Some stuff must be changed (adevice), others probably
    # XXX should be ("Change"), or could be in some cases ("change?")
    # VCR_CMD = (CONF.mencoder + ' ' +
    # 'tv:// ' + # New mplayer requires this.
    # '-tv driver=%s:input=%d' % (TV_DRIVER, TV_INPUT) +
    # ':norm=%s' % CONF.tv +
    # ':channel=%(channel)s' + # Filled in by Freevo
    # ':chanlist=%s' % CONF.chanlist +
    # ':width=%d:height=%d' % (TV_REC_SIZE[0], TV_REC_SIZE[1]) +
    # ':outfmt=%s' % TV_REC_OUTFMT +
    # ':device=%s' % TV_DEVICE +
    # VCR_AUDIO + # set above
    # ' -ovc lavc -lavcopts ' + # Mencoder lavcodec video codec
    # 'vcodec=mpeg4' + # lavcodec mpeg-4
    # ':vbitrate=1200:' + # Change lower/higher, bitrate
    # 'keyint=30 ' + # Keyframe every 10 secs, change?
    # '-oac mp3lame -lameopts ' + # Use Lame for MP3 encoding, must be enabled in mencoder!
    # 'br=128:cbr:mode=3 ' + # MP3 const. bitrate, 128 kbit/s
    # '-ffourcc divx ' + # Force 'divx' ident, better compat.
    # '-endpos %(seconds)s ' + # only mencoder uses this so do it here.
    # '-o %(filename)s') # Filled in by Freevo
    # TV_VIDEO_GROUPS setting to handles multiple arbitrary groups of devices
    # for viewing or recording. It is possible to have different Freevo
    # channels use different Video Groups.
    # See the wiki for more details:
    # http://doc.freevo.org/MultiTunerConfig
    # http://doc.freevo.org/Analoguemulti
    # This example is when you have one IVTV type card installed
    # TV_VIDEO_GROUPS = [
    # VideoGroup(vdev=TV_DEVICE,
    # adev=AUDIO_DEVICE,
    # input_type='tuner 1',
    # input_num=0,
    # tuner_norm=CONF.tv,
    # tuner_chanlist=CONF.chanlist,
    # group_type = 'ivtv',
    # desc='PVR-350 Video Group'),
    # This example is for two normal TV cards to allow you to use one card to
    # view a programme and the other card to record at the same time
    # TV_VIDEO_GROUPS = [
    # # Use this group for watching tv
    # VideoGroup(vdev='/dev/video0',
    # adev=None,
    # input_type='tuner 1',
    # tuner_norm=CONF.tv,
    # tuner_chanlist=CONF.chanlist,
    # desc='Watching Video Group',
    # record_group=1),
    # # Use this group for recording tv
    # VideoGroup(vdev='/dev/video1',
    # adev=None,
    # input_type='tuner 1',
    # tuner_norm=CONF.tv,
    # tuner_chanlist=CONF.chanlist,
    # desc='Recording Video Group',
    # record_group=None),
    # Settings for ivtv based cards such as the WinTV PVR-250/350.
    # TODO: Add descriptions and valid settings for each option.
    # bitrate in bps
    # stream type
    # Options are: 0 (mpeg2_ps), 1 (mpeg2_ts), 2 (mpeg1), 3 (mpeg2_pes_av),
    # 5 (mpeg2_pes_v), 7 (mpeg2_pes_a), 10 (dvd)
    # TV_IVTV_OPTIONS = {
    # 'input' : 4,
    # 'resolution' : '720x480',
    # 'aspect' : 2,
    # 'audio_bitmask' : 233,
    # 'bframes' : 3,
    # 'bitrate_mode' : 1,
    # 'bitrate' : 4000000,
    # 'bitrate_peak' : 4000000,
    # 'dnr_mode' : 0,
    # 'dnr_spatial' : 0,
    # 'dnr_temporal' : 0,
    # 'dnr_type' : 0,
    # 'framerate' : 0,
    # 'framespergop' : 15,
    # 'gop_closure' : 1,
    # 'pulldown' : 0,
    # 'stream_type' : 10,
    # TV Channels. This list contains a mapping from the displayed channel name
    # to the actual channel name as used by the TV watching application.
    # The display name must match the names from the XMLTV guide,
    # and the TV channel name must be what the tuner expects (usually a number).
    # The TV menu is supposed to be supported by the XMLTV application for
    # up to date listings, but can be used without it to just display
    # the available channels.
    # This list also determines the order in which the channels are displayed!
    # N.B.: You must delete the XMLTV cache file (e.g. /var/cache/freevo/TV.xml.pickled)
    # if you make changes here and restart!
    # Format: [('xmltv channel id', 'freevo display name', 'tv channel name'), ...]
    # If this variable is set to None (default), Freevo will try to auto-detect
    # the channel list based on the xmltv file. This doesn't work for all
    # xmltv grabber, e.g. the German list doesn't contain station lists. In this
    # case Freevo will output the possible list for you to add them manually.
    # If auto-detection doesn't work or you want to edit the list, run
    # freevo tv_grab -query.
    # Setting this variable to [] will deactivate the tv guide. If you don't have
    # a tv card, you may also want to add plugin.remove('tv') to remove the whole
    # tv menu.
    # All channels listed here will be displayed on the TV menu, even if they're
    # not present in the XMLTV listing.
    # Timedependent channels:
    # The TV_CHANNELS-list can look like this:
    # TV_CHANNELS = [('21', 'SVT1', 'E5'),
    # ('22', 'SVT2', 'E3'),
    # ('26', 'TV3', 'E10'),
    # ('27', 'TV4', 'E6'),
    # ('10', 'Kanal 5', 'E7'),
    # ('60', 'Fox Kids', 'E8', ('1234567','0600','1659')),
    # ('16', 'TV6', 'E8', ('1234567','1700','2359'),
    # ('1234567','0000','0300')),
    # ('14', 'MTV Europe', 'E11') ]
    # As you can see the list takes optional tuples:
    # ( 'DAYS', 'START','END')
    # 1234567 in days means all days.
    # 12345 would mean monday to friday.
    # It will display "Fox Kids" from 06:00 to 16:59 and "TV6" from 17:00 to 03:00.
    # 03:00 to 06:00 it won't be displayed at all.
    # TV_CHANNELS = None
    # A lambda function to sort the TV_CHANNELS
    #TV_CHANNELS_COMPARE = lambda a, b: cmp(int(a[2]), int(b[2]))
    # TV_FREQUENCY_TABLE - This is only used when Freevo changes the channel natively.
    # This is only the case if you are using V4L2 and any of the following plugins:
    # timeshift, ivtv_record, ivtv_basic_tv.
    # For the standard frequancy tables see src/tv/freq.py. To add your own just
    # replace tuner_id in the following example with a valid tuner id (ie: '5' or
    # 'BBC1') and a frequency in KHz. You may have as many entries as you like,
    # anything here will simply override a corresponding entry in your standard
    # frequency table and you can also have entries here that are not present in
    # there.
    # TV_FREQUENCY_TABLE = {
    # 'tuner_id' : 55250,
    # Program to grab xmltv listings. To get a grabber, you need to download
    # xmltv. A possible value for users in the USA is tv_grab_na
    # Use the tv_grab helper to grab the listings and cache them. Start
    # 'freevo tv_grab --help' for more informations.
    # XMLTV_GRABBER = ''
    # If you want to run tv_sort on your listings add the path to tv_sort here.
    # tv_sort will make sure all your programs have proper stop times, otherwise
    # programs might get cut off at midnight.
    # XMLTV_SORT = ''
    # Number of days the grabber should get
    # XMLTV_DAYS = 3
    ## ONLY ADJUST THIS IF YOUR GUIDE TIMES ARE INCORRECT ##
    # GMT offset for XMLTV feeds that don't contain timezone information
    # An example of this is the OzTivo feed which has the timestamps
    # in the XML pre-adjusted for your timezone
    # XMLTV_TIMEZONE='+0100'
    # ======================================================================
    # Freevo builtin commdetect server settings:
    # ======================================================================
    # COMMDETECTSERVER_UID = 0
    # COMMDETECTSERVER_GID = 0
    # COMMDETECTSERVER_IP = 'localhost'
    # COMMDETECTSERVER_PORT = 6667
    # ======================================================================
    # Freevo builtin rss server settings:
    # ======================================================================
    # RSSSERVER_UID = 0
    # RSSSERVER_GID = 0
    # RSS_CHECK_INTERVAL = 3600
    # RSS_FEEDS = '/etc/freevo/rss.feeds'
    # RSS_VIDEO = '/media/video'
    # RSS_AUDIO = '/media/podcasts'
    # ======================================================================
    # Freevo builtin WWW server settings:
    # ======================================================================
    # To activate the built in web server, uncomment the following line
    # plugin.activate('www')
    # Web server port number. 80 is the standard port, but is often
    # taken already by apache, and cannot be used unless the server
    # runs as root. Port 8080 is the default, change to 80 if
    # needed.
    # WEBSERVER_PORT = 8080
    # Username / Password combinations to login to the web interface.
    # WWW_USERS = {
    # "user1" : "changeme",
    # "optional" : "changeme2"
    # Divide the TV guide into intervals of this length (in minutes)
    # WWW_GUIDE_INTERVAL = 30
    # Precision for TV guide (in minutes)
    # WWW_GUIDE_PRECISION = 5 #
    # Show this many blocks at once
    # WWW_GUIDE_COLS = 6
    # WWW_STYLESHEET = 'styles/main.css'
    # WWW_JAVASCRIPT = 'scripts/display_prog-head.js'
    # Integrate personal web pages into the web server
    # WWW_PERSONAL_PAGE = [
    # ('My Page', 'a single personal web page', 'page.html'),
    # ('My Site', 'site description', 'site/'),
    # ======================================================================
    # Internal stuff, you shouldn't change anything here unless you know
    # what you are doing
    # ======================================================================
    # Config for xml support in the movie browser
    # the regexp has to be with ([0-9]|[0-9][0-9]) so we can get the numbers
    # VIDEO_SHOW_REGEXP = "s?([0-9]|[0-9][0-9])[xe]([0-9]|[0-9][0-9])[^0-9]"
    # Remote control daemon. The server is in the Freevo main application,
    # and the client is a standalone application in rc_client/
    # ENABLE_NETWORK_REMOTE = 0
    # REMOTE_CONTROL_HOST = '127.0.0.1'
    # REMOTE_CONTROL_PORT = 16310
    # Remote control daemon. Similar to the one above, but uses TCP instead
    # of UDP. It is possible to send commands with a telnet client.
    # ENABLE_TCP_NETWORK_REMOTE = 0
    # REMOTE_CONTROL_TCP_HOST = '127.0.0.1'
    # REMOTE_CONTROL_TCP_PORT = 16311
    # XMLTV File
    # This is the XMLTV file that can be optionally used for TV listings
    # XMLTV_FILE = '/tmp/TV.xml'
    # XML TV Logo Location
    # Use the "makelogos.py" script to download all the
    # Station logos into a directory. And then put the path
    # to those logos here
    # TV_LOGOS = OS_CACHEDIR + '/xmltv/logos'
    # ======================================================================
    # Idlebar and plugins
    # These are the default idlebar settings, there are many more see:
    # freevo plugins -l for a complete list
    # To turn off use plugin.remove('idlebar.cdstatus')
    # clock display
    # %A - Full weekday name.
    # %a - Abbreviated weekday name.
    # %B - Full month name
    # %b - Abbreviated month name
    # %I - Hour (12-hour clock) as a decimal number [01,12].
    # %H - Hour (24-hour clock) as a decimal number [00,23].
    # %M - Minute as a decimal number [00,59].
    # %m - Month as a decimal number [01,12].
    # %b - Name of Month
    # %d - Day of the month as a decimal number [01,31].
    # %p - Locale's equivalent of either AM or PM.
    # %y - Year without century as a decimal number [00,99].
    # %Y - Year with century as a decimal number.
    # ======================================================================
    # plugin.activate('idlebar')
    # plugin.activate('idlebar.tv', level=20)
    # plugin.activate('idlebar.cdstatus', level=25)
    # plugin.activate('idlebar.diskfree', level=30)
    # plugin.activate('idlebar.clock', level=50)
    # CLOCK_FORMAT = '%a %d %H:%M'
    # Debugging and logging settings
    # logging can be one of:
    # CRITICAL, ERROR, WARNING, INFO, DEBUG or NOTSET
    # debugging is a number from 0 to 9, 0 is no debugging 9 is most
    # LOGGING = logging.DEBUG
    # LOGGING_RECORDSERVER = logging.DEBUG
    # DEBUG = 1
    # messages go to stdout
    # DEBUG_STDOUT = 0
    # messages from starting a child application
    # DEBUG_CHILDAPP = 1
    # timing messages
    # DEBUG_TIME = 0
    I've been reading wikis and googling now the entire weekend so I hope someone here can help me.

    Perre wrote:I'm used to being able to pick one or a couple of songs and then adding it a specified playlist. Is this impossible in sonata?
    It's clearly not impossible, just different than you expect. Create your playlist as you want it to appear in the Current tab (meaning don't dump every single song from your library in there, just the ones you want) and then save the playlist.
    Perre wrote:And if I try to play the m3u file created (the one with every song listed) through freevo I get a message that the directory is empty. What am I doing wrong??
    Look at save_absolute_paths_in_playlists in your mpd.conf.

  • Applying Gradient through css in spark application of gumbo

    I want to apply gradient colors just like we did in flex 3 using css.
    How to achieve the same for s:Application ?

    That changed in the new architecture:
    you need to drop something like this in your main app or create a new skin for the main app and drop it in there:
        <!-- background -->
        <s:Rect left="0" right="0" top="0" bottom="0">
            <s:fill>
                <s:LinearGradient>
                    <s:GradientEntry ratio="0" color="#ff00ff"/>
                    <s:GradientEntry ratio="1" color="#00ff00"/>
                </s:LinearGradient>
            </s:fill>
        </s:Rect>
    Need to play with the gradient but ration and color values but you get the picture...
    The old way does not apply anymore as far as I can tell ...
    You can define your own backgroundGradientColor read it in the custom skin updateDisplayList and do the drawing yourself, but I am not sure it is worth the effort.
    C

  • How to force updatedisplaylist in a skin when custom property changes

    Hi Folks,
    I have created a custom component based on a Spark Button.  In that custom component I have added a single, public, bindable property - let's call it Fred.
    I also have a custom skin, based on the Spark Button skin.  It's basically just like the delivered skin, just a bit different graphics stuff.  I have applied the custom skin to the custom button component.  So far, so good.  However...
    When a user action causes the Fred property to change on a custom button instance, I need my custom skin to re-draw something.  It appears that I need the skin's updateDisplayList function to fire.  Unfortunately, it appears that the only time that it fires is when "real" properties are changed, like 'left' or 'width'.  How can I get the custom skin to updateDisplayList when this fake, custom property changes?
    p.s. - the custom skin can 'read' the custom Fred property just fine.  And, if I set the Fred property and then 'mouse over' the custom button instance, the updateDisplayList fires...too late of course, but it does fire.
    I have read the docs, but there is not much written about updateDisplayList, or when it fires, or how to make it fire.
    Thanks,
    -David

    Good question...in my skin's 'creationComplete' event I call a function in the skin.  That function 'evaluates' the host component's Fred propertey, and based on what it finds, it draws some stuff:
    protected function doSpecialDrawing():void
         var hostFred:String = hostComponent.Fred;
         if (hostFred == "certain_value")
              //set some property in one of the path objects in my skin to a certain value
         else if (hostFred == "other_value")
              //set some property in one of the path objects in my skin to some other value
    When I created the skin, I did not anticipate the need to dynamically respond to setting the Fred property/value.
    I've placed a call to the 'doSpecialDrawing' function inside the skin's updateDisplayList, but unfortunately, the updateDisplayList does not seem to get called in real-time when I set the Fred property in a custom button instance.
    I'm all ears here... still a beginner/novice with Flex...
    Thanks,
    -David

  • Forcing custom itemRenderer to updateDisplayList?

    Hi, I'm new to flex, and was having some trouble.
    In my project, I have a DataGrid, and a
    BarChart->BarSeries. The DataGrid and the BarSeries share the
    same DataProvider. I've made a custom itemRenderer, so that I can
    click on Bars in the BarSeries and have them be highlighted in
    black. This is done by having the itemRenderer listen for a CLICK
    event, changing a variable that stores what color I want, then
    calling invalidateDisplayList() to have updateDisplayList update
    the display.
    Since DataGrid and BarSeries share the same DataProvider,
    elements in the DataGrid match up with elements in the BarSeries.
    Therefore, I would like to be able to have a user click on an item
    in the DataGrid, and have the associated bar in the BarSeries chart
    become highlighted. However, I can't find a way to get the
    itemRenderer to call updateDisplayList from outside of the
    itemRenderer itself. I thought that calling invalidateDisplayList()
    using the BarChart's id or the BarSeries id would force the
    itemRenderer for the BarSeries to call updateDisplayList() and
    update itself, but by using the debug feature, I have found that it
    does not do this. Does anyone have any advice for how I would be
    able to click on a DataGrid item and have it highlight the
    corresponding item in the BarChart?
    Thanks!

    Hi, I'm new to flex, and was having some trouble.
    In my project, I have a DataGrid, and a
    BarChart->BarSeries. The DataGrid and the BarSeries share the
    same DataProvider. I've made a custom itemRenderer, so that I can
    click on Bars in the BarSeries and have them be highlighted in
    black. This is done by having the itemRenderer listen for a CLICK
    event, changing a variable that stores what color I want, then
    calling invalidateDisplayList() to have updateDisplayList update
    the display.
    Since DataGrid and BarSeries share the same DataProvider,
    elements in the DataGrid match up with elements in the BarSeries.
    Therefore, I would like to be able to have a user click on an item
    in the DataGrid, and have the associated bar in the BarSeries chart
    become highlighted. However, I can't find a way to get the
    itemRenderer to call updateDisplayList from outside of the
    itemRenderer itself. I thought that calling invalidateDisplayList()
    using the BarChart's id or the BarSeries id would force the
    itemRenderer for the BarSeries to call updateDisplayList() and
    update itself, but by using the debug feature, I have found that it
    does not do this. Does anyone have any advice for how I would be
    able to click on a DataGrid item and have it highlight the
    corresponding item in the BarChart?
    Thanks!

  • UpdateDisplayList doesn't work for skin when called from hostcomponent

    I have skin class where I have overrided updateDisplayList like this:
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {
         switch (hostComponent.index) {
                case 0:
                  part.right = 100;
                  part.top = 100;
                  break;
                case 1:
                  part.right = 50;
                  part.top = 50;
                  break;
    every time I update index in hostcomponent, I want to call the updateDisplayList in skin so I have done this:
    public function set index(value:int):void {
            _index = value;
            invalidateDisplayList(); // doesn't work
            //updateDisplayList(); // doesn't work either      
    ... but this does not work. Can you please help me figure out what the problem is? Thanks.

    Is index in the host component?  Maybe you need
        skin.invalidateDisplayList()

  • Interesting skin sizing scenario

    Hi folks.  I'm getting behavior that I wouldn't expect and I'm just wondering if someone can give me some logical reasoning behind it.  I've found some workarounds so I'm okay there I'm more just wanting to learn what the purpose is behind how things are happening.
    Here's the main app file:
    <?xml version="1.0" encoding="utf-8"?>
    <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
                                xmlns:s="library://ns.adobe.com/flex/spark"
                                xmlns:mx="library://ns.adobe.com/flex/mx">
         <fx:Declarations>
              <!-- Place non-visual elements (e.g., services, value objects) here -->
         </fx:Declarations>
         <s:Group width="100" height="100">
              <s:SkinnableContainer skinClass="MySkin" width="50%" height="50%"/>
         </s:Group>
    </s:WindowedApplication>
    Here's the MySkin file:
    <?xml version="1.0" encoding="utf-8"?>
    <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled="0.5">
        <fx:Metadata>
        <![CDATA[
             * @copy spark.skins.spark.ApplicationSkin#hostComponent
            [HostComponent("spark.components.SkinnableContainer")]
        ]]>
        </fx:Metadata>
        <fx:Script>
            <![CDATA[        
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
                    super.updateDisplayList(unscaledWidth, unscaledHeight);
              trace(unscaledWidth, unscaledHeight);
            ]]>       
        </fx:Script>
        <s:states>
            <s:State name="normal" />
            <s:State name="disabled" />
        </s:states>
        <s:Rect width="200" height="200">
              <s:fill>
                   <s:SolidColor color="#ff0000"/>
              </s:fill>
         </s:Rect>
    </s:Skin>
    So, pop quiz...what would you expect unscaledWidth and unscaledHeight to trace out in the skin?
    Answer is: 200 x 200 (the size of the internal rect).  However, I would expect 50 x 50 because that's the size the component will actually be taking up in the parent's layout.  Am I crazy?
    Thanks.
    Aaron

    Hi,
    In this case, the Rect inside the skin forces the measuredMinWidth/measuredMinHeight to be 200/200, causing the unscaledWidth/unscaledHeight to be 200/200 as well. measuredMinWidth/measuredMinHeight just mean in this case the minimum width and height that fits every element into your skin.This is because on your SkinnableContainer, there are only percent sizes (which indicate that the size is flexible) and so the measured minimums are taken into account. However, if you set width/height on your SkinnableContainer to be explicit values (like 50/50), then the SkinnableContainer will size to those values instead. To avoid these cases, I would suggest not using explicit widths and heights in your skin and instead using constraints (left/right/top/bottom) or percent sizes. Then, you can size the component in your application without worry.
    I'd be interested to hear what use case you have for using explicit sizing inside your skin. And please let me know if the explanation is unclear!
    Thanks,
    -Kevin

  • How do I apply programmatic skins for completely custom drawn components of a Flex library project?

    Hello folks,
    I am looking for best practices advice when (1) creating
    custom components and (2) styling and skinning.
    I already know how to skin a component part of the Flex
    framework. I can make a class extending ProgrammaticSkin and have
    my component skinned using CSS to link the component with the
    reference to my custom class.
    However what about those cases when you are completely
    creating a component from scratch?
    Imagine a "Freehand Drawing Canvas" component that allows the
    user to draw on it and has some buttons to set color styles, line
    styles, etc., or imagine a "Screen Flow Gallery" component that
    displays visual objects in a fashion similar to Cover Flow in the
    Mac.
    In many components I am aware you may reuse other components
    part of the Flex framework but I am trying to picture an scenario
    where you would need to draw everything yourself because there just
    isn't something to base it upon so you will end up drawing it from
    scratch.
    To learn how instead of building one of those components I
    mentioned previously I decided to start with something simple that
    would illustrate this like a LiteButton component that will behave
    just like the Flex mx.controls.Button but will extend UIComponent
    and be completely custom drawn.
    The component will have a default look and will also be
    style-able and skin-able. I will provide styles for users of the
    component to modify and regarding skinning anyone can create a
    custom ProgrammaticSkin adding its own drawing logic and link it to
    the component via CSS with the ClassReference applied to the skin
    selector.
    So far so good and it's clear what I want to achieve. I
    actually know how to do most of the stuff here but I have one
    single problem.
    Here is my question, where should I put my custom drawing
    logic? If I do it in the updateDisplayList inside the class
    extending UIComponent it works, however I thought that it would be
    a better practice to do it using programmatic skins, that way I
    could provide different skin themes for my component set.
    The problem is that I can't make the programmatic work in
    this scenario. I tried instantiating the custom programmatic skin
    during the updateDisplayList of the LiteButton component and adding
    it to my display object via addChild but that didn't do anything. I
    also tried creating a "default.css" stylesheet and tried to use
    ClassReference as I would normally do to skin an already existing
    component (or composite component as well) but that didn't do
    anything either.
    So how do I apply programmatic skins for completely custom
    drawn components of my Flex library project?
    I could do it inside the updateDisplayList of the LiteButton
    class extending UIComponent but again I would like to provide
    different theme sets for my components so it makes sense using
    programmatic skins.

    "jbucaran" <[email protected]> wrote in
    message
    news:[email protected]...
    > Hello folks,
    >
    > I am looking for best practices advice when (1) creating
    custom components
    > and
    > (2) styling and skinning.
    >
    > I already know how to skin a component part of the Flex
    framework. I can
    > make
    > a class extending ProgrammaticSkin and have my component
    skinned using CSS
    > to
    > link the component with the reference to my custom
    class.
    >
    > However what about those cases when you are completely
    creating a
    > component
    > from scratch?
    >
    > Imagine a "Freehand Drawing Canvas" component that
    allows the user to draw
    > on
    > it and has some buttons to set color styles, line
    styles, etc., or imagine
    > a
    > "Screen Flow Gallery" component that displays visual
    objects in a fashion
    > similar to Cover Flow in the Mac.
    >
    > In many components I am aware you may reuse other
    components part of the
    > Flex
    > framework but I am trying to picture an scenario where
    you would need to
    > draw
    > everything yourself because there just isn't something
    to base it upon so
    > you
    > will end up drawing it from scratch.
    This may help with that
    http://livedocs.adobe.com/flex/3/html/help.html?content=skinstyle_3.html
    > To learn how instead of building one of those components
    I mentioned
    > previously I decided to start with something simple that
    would illustrate
    > this
    > like a LiteButton component that will behave just like
    the Flex
    > mx.controls.Button but will extend UIComponent and be
    completely custom
    > drawn.
    >
    > The component will have a default look and will also be
    style-able and
    > skin-able. I will provide styles for users of the
    component to modify and
    > regarding skinning anyone can create a custom
    ProgrammaticSkin adding its
    > own
    > drawing logic and link it to the component via CSS with
    the ClassReference
    > applied to the skin selector.
    >
    > So far so good and it's clear what I want to achieve.
    Actually after
    > playing
    > with the weekend and today I know how to do most of the
    stuff but I have
    > one
    > single problem. So here is my question, where should I
    provide my custom
    > drawing logic? If I do it in the updateDisplayList
    inside the class
    > extending
    > UIComponent it works, however I thought that it would be
    a better practice
    > to
    > do it using programmatic skins, that way I could provide
    different skin
    > themes
    > for my component set.
    These aren't mutually exclusive. When you provide a skin with
    a
    TypeSelector, you have to add it to the display list
    somewhere, and this is
    typically done in updateDisplayList or addChildren. I prefer
    to do it in
    updateDisplayList, because you can then change it if the
    style changes.
    > The problem is that I can't make the programmatic work
    in this scenario. I
    > tried instantiating the custom programmatic skin during
    the
    > updateDisplayList
    > of the LiteButton component and adding it to my display
    object via
    > addChild but
    > that didn't do anything.
    Exactly what did you do?
    > I also tried creating a "default.css" stylesheet and
    > tried to use ClassReference as I would normally do to
    skin an already
    > existing
    > component (or composite component as well) but that
    didn't do anything
    > either.
    I've never had any problem using an approach similar to
    this...but I will
    say that I couldn't see any advantage in creating a
    default.css style sheet,
    since it's not really default in the way that the one that
    comes with Flex
    is. It's much more obvious to anyone using your component
    what's going on
    there if you create a style sheet where they're likely to
    spot it.
    > So how do I apply programmatic skins with the default
    look for custom
    > drawn
    > components?
    It seems like your approach is fine, but maybe you've made a
    mistake in your
    implementation.
    > I could do it inside the updateDisplayList of the
    LiteButton class
    > extending
    > UIComponent but again I would like to provide different
    theme sets for my
    > components so it makes sense using programmatic skins.
    You might want to consider also adding an instance of
    HaloBorder to your
    component. That brings a lot of functionality with it.
    HTH;
    Amy

  • Problem with css reload (custom adf skin)

    I have defined a custom skin but changes in the css does not immediately show in the page. I have not figured out what triggers a rreload of the css. When I delete the generated css from the embedded OC4J a new one i immediately created but with the old values.

    Hello,
    This depends on the version of ADF your using.
    If its 10G, as far as I know, changes will only get picked up after a redeploy and even then you need to force the browser to re download the css (using a force refresh, shift + F5 or the refresh key normally)
    If its 11G, the redeploy should not be needed as long as you force a browser refresh.
    As long as the previously mentioned context parameter is present:
      <context-param>
        <description>If this parameter is true, there will be an automatic check of the modification date of your JSPs, and saved state will be discarded when JSP's change. It will also automatically check if your skinning css files have changed without you having to restart the server. This makes development easier, but adds overhead. For this reason this parameter should be set to false when your application is deployed.</description>
        <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
        <param-value>true</param-value>
      </context-param>-Anton

  • Problem using images in a button skin

    So, I have a weird problem. I need to be able to see a button in design mode. My button is a custom component (a ButtonBase) with a skin. So, I left is a tiny bit of the default skin so that you can see what it looked like in design mode. Now, the paths to the images that will be used for the various states of the button are binded to strings passed from another subcomponent. There was no other way to get what we needed done, so it stays messy. Anyway, I don't get things to display correctly. Here's the code, and after an image for what I'm getting:
    [CODE]
    <s:SparkSkin xmlns:fx="http://ns.adobe.com/mxml/2009"
                             xmlns:s="library://ns.adobe.com/flex/spark"
                             xmlns:fb="http://ns.adobe.com/flashbuilder/2009"
                             xmlns:mx="library://ns.adobe.com/flex/mx"
                             minWidth="21" minHeight="21" alpha.disabled="0.5"
                             preinitialize="initImageVars()" creationComplete="init()">
        <!-- host component -->
        <fx:Metadata>
            <![CDATA[
            [HostComponent("customComponents.ToggleButtonCustom")]
            ]]>
        </fx:Metadata>
        <!-- states -->
        <s:states>
            <s:State name="up" />
            <s:State name="down" />
            <s:State name="selected" />
            <s:State name="disabled" />
            <s:State name="over" />
        </s:states>
        <fx:Script>
            <![CDATA[        
                import mx.controls.Alert;
                /* First thing's first: we need to initialize our global and accessable components. */
                [Bindable]
                public var upButtonPath:String = "";
                [Bindable]
                public var downButtonPath:String = "";
                [Bindable]
                public var activeButtonPath:String = "";
                [Bindable]
                public var disabledButtonPath:String = "";
                [Bindable]
                protected var label:String = "";
                private function initImageVars():void
                    upButtonPath = "assets/" + this.hostComponent.upButtonPath;
                    downButtonPath = "assets/" + this.hostComponent.downButtonPath;
                    activeButtonPath = "assets/" + this.hostComponent.activeButtonPath;
                    disabledButtonPath = "assets/" + this.hostComponent.disabledButtonPath;
                private function init():void
                    /* Give values to public variables */
                    //upButtonPath = "Up.png";
                    //downButtonPath = "Down.png";
                    //activeButtonPath = "Active.png";
                    label = this.hostComponent.label;
                /* Define the skin elements that should not be colorized. For button, the graphics are colorized but the label is not. */
                static private const exclusions:Array = ["labelDisplay"];
                override public function get colorizeExclusions():Array {return exclusions;}
                override protected function initializationComplete():void
                    useChromeColor = true;
                    super.initializationComplete();
                private var cornerRadius:Number = 2;
            ]]>       
        </fx:Script>
        <!-- layer 1: fill -->
        <s:Rect id="fill" left="1" right="1" top="1" bottom="1" radiusX="2">
            <s:fill>
                <s:LinearGradient rotation="90">
                    <s:GradientEntry color="0xFFFFFF"
                                                     color.down="0xAAAAAA"
                                                     color.selected="0xBBBDBD"
                                                     alpha="0.85" />
                    <s:GradientEntry color="0xD8D8D8"
                                                     color.down="0x929496"
                                                     color.selected="0x9FA0A1"
                                                     alpha="0.85" />
                </s:LinearGradient>
            </s:fill>
        </s:Rect>
        <mx:ViewStack id="buttonImage" x="0" y="0"
                                    selectedIndex="0" selectedIndex.down="1" selectedIndex.selected="2"    selectedIndex.disabled="3">
            <s:NavigatorContent id="upState">
                <mx:Image source="{upButtonPath}" width="500" height="500" />
            </s:NavigatorContent>
            <s:NavigatorContent id="downState">
                <mx:Image source="{downButtonPath}" />
            </s:NavigatorContent>
            <s:NavigatorContent id="activeSate">
                <mx:Image source="{activeButtonPath}" />
            </s:NavigatorContent>
            <s:NavigatorContent id="disabledState">
                <mx:Image source="{disabledButtonPath}" />
            </s:NavigatorContent>
        </mx:ViewStack>
        <s:Label id="labelDisplay" text="{label}"
                         textAlign="center"
                         verticalAlign="middle"
                         maxDisplayedLines="3"
                         horizontalCenter="0" verticalCenter="1"
                         left="10" right="10" top="2" bottom="2">
        </s:Label>
    </s:SparkSkin>
    [/CODE]
    That gives me this image:
    And if I use the following code to resize it, I get this:
    [CODE]
    /* From the component, called from init(), which is called on creationComplete */
    private function resizeEverything():void
      var dummyImage:Image = new Image();
      var pathToDummy:String = "assets" + upButtonPath;
      dummyImage.source = pathToDummy;
      thisBtn.height = dummyImage.height;
      thisBtn.width = dummyImage.width;
      dummyImage = null;
    [/CODE]
    If you have any idea what to do with this, let me know. I set the buttons to the exact height and width of the images I'm using when I first call them. I don't know how else to manage this. I want the faded white to be an exact mirror of the image, so that designers (not me) can move them around on design mode. Thank you!

    Figured it out. The images I was given had large amounts of padding, and when I tried to auto-resize the buttons, Flash could never grab the image and therefore couldn't size off it, so the size of the component was forced to 0,0. It's all good now.

  • 10.1.3.1: Skinning... how to disable the .x0 t.x9999 in the generated CSS?

    Hi All,
    when you have a ADF Faces you'll get a generated CSS file eventually when you run. It however contains generated short names for all the styles (.x0 and counting up). However we'd like to dynamically change the colors for components during runtime. We created a JSP file that output CSS code and include that in the head. However sometimes a component will have the styleclass .x1 some times and sometimes .x3 or something else. Is there anyway to force the components to use the .AFInputField class names?
    Or even better to dynamically generate the CSS file (at runtime) that ADF parses for a skin?
    Regards,
    Robert

    Hmm.. found something... add this to your web.xml
    <context-param>
    <param-name>oracle.adfinternal.view.faces.DISABLE_CONTENT_COMPRESSION</param-name>
    <param-value>true</param-value>
    </context-param>
    And no more .x classnames will be generated... Don't know if it has other disastrous effects though.... anybody an idea?

  • Creative Zen Touch Skin PLEEEAASSEEE HELP!!!

    Who out there wants a skin for their Creative Zen Touch? Who is tired of the monopoly that Vaja cases has and forces you to buy their horrific case for 70 Big Ones? Who is tired of the Creative Case that is included and is extremely bulky and doesnt even have a screen to see what you are doing? Are you not tired of having to take the Zen Touch of the cases everytime you want to do something? Are you tired of users that have Iri'ver and Apple's Ipod having infinite accessory choices while you are limited to 2 case choices? If your answers to these questions were yes, this is the new movement for you. This movement will bombard companies like Iskin and xSkin with emails asking them to provide a Creative Zen touch alternati've for cases that are protecti've, photogenic, and sleek. This method works because Iskin and xskin want to make $$$ and with more emails they know they will make more money. My Ipod counterparts show off their Ipods and protecti've them with the xskin exo3 which is only 0.7mm thick, and cannot defend my creative zen touch because I have a bulky case that makes it 3 times as big. With a skin, my creative will be protected from scratchs, perfect for style points, and i dont have to take it out of a case everytime I want to change anything. This movement worked on the Iri'ver site where they overloaded the system with emails for Iri'ver skin requests, and 3 months later, Iskin rolls out a skin for the Iri'ver. We can do the same. I encourage you to assist me in this movement so we can bring the Creative Zen Touch to the top of all mp3 players trampling the Ipod and Iri'ver alltogether. Now whos with me? Its time for action because we are the Acti've Creative Zen Touch Users
    We are sending emails to these sites
    http://www.iskin.com/store/I2feedback.tpl
    On this site fill in your name and email and then paste this message (below) into the comment zone:
    The Creative Zen Touch Skin Movement
    This is the Creative Movement brought to you by Creative Zen Touch users. We have had enough with the horrible cases that are offered to us as choices. We are look to towards you for salvation. We kindly ask that you create a skin for the Creative Zen Touch, our forums are overloaded with request. The market for a skin for the Zen Touch has great potential to grow and we offer you as our first choice to do so. We are tired of the Ipod and Iri'ver users who can show off their sleek mp3 player complimented by a sleek skin and a screen protector. We wish we can do the same. We want to level the playing field for all mp3 players and we are asking you to do so. I have talked to over 80,000 creative zen touch users via the Creative Forum and they are all urging for a skin and are willing to buy it. That is a great potential market you have in front of you. Thank you for your deep consideration. This movement is lead by Creative user dmai7.
    - Your Concerned and Ambitious Customer

    my god, THANK YOU FOR SOMEONE SAYING THIS, man, they got em out there, but only in the UK, and i dont know about you, but i li've in the US and im dying for the exspect skins to be in the us, can SOMEONE please tell me where to get them in the US or someone make them, cmon guys at creative, if they can do it, you sure can

  • Is there a option to allow firefox to work better with other aplication in fullscreen mode, becouse in present FF force other app to hide

    Is there any way so FF in full screen mode do not force other application to hide? i would like to use full screen mode more often but for instance it force my winamp to hide and i cant switch music or use any other app that i would like to at the same time when I'm browsing the web. I think it would be very usefull for many ppl who brows pictures etc. and for navigation they use mouse commands.
    Thanks.

    offcorse i know that but fullscreen mode hide status bar, tabs etc and show it when i move my mouse on it and thats why i like it it hide all what i dont need but i need winamp and switchin alt tab all the time its not fun when in can be placed on the down corner, when wimamp skin is transparent. i woud like to have such a option (for instance in about:config.

  • Skins that effect the host component behaviour.

    There was an interesting question that was raised in the pre-release forums about what is the appropriate way to handle animations between the skin and its host. Basically the issue was if there is an animation in the host and another in the skin what would be the best way to code it so that both animations ran in parallel, My thoughts are why not do it all in the skin. this example animates a container by resizing it and centering it in the application.
    I figured it would be an interesting topic for those that are trying adding extra component functionality into the skin.
    @PD - Maybe you could apply a little of your magic to something like this and add it your blog.
    David
    The App
    =============================================================
    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
      xmlns:s="library://ns.adobe.com/flex/spark"
      xmlns:mx="library://ns.adobe.com/flex/halo"
      creationComplete="application1_creationCompleteHandler(event)" width="100%" height="100%">
    <s:layout>
    <s:BasicLayout/>
    </s:layout>
    <fx:Script>
    <![CDATA[
    import mx.collections.ArrayCollection;
    import mx.events.FlexEvent;
    protected function application1_creationCompleteHandler(event:FlexEvent):void
    menu1.verticalCenter=height/2*-1 + 35; 
    menu1.horizontalCenter=width/2*-1 + 110;
    ]]>
    </fx:Script>
    <s:SkinnableContainer id="menu1" left="10" top="10" width="200" height="50"
    skinClass="SkinnableContainerSkin2" backgroundColor="#A16969">
    </s:SkinnableContainer>
    </s:Application>
    =============================================================
    The Skin
    =============================================================
    <?xml version="1.0" encoding="utf-8"?>
    <s:Skin xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:fb="http://ns.adobe.com/flashbuilder/2009" alpha.disabled="0.5" creationComplete="skin1_creationCompleteHandler(event)">
    <fx:Declarations>
    <s:Parallel id="sizer">
    <s:Animate target="{hostComponent}" duration="2000" repeatCount="1">
    <s:SimpleMotionPath id="setheight" property="height" valueTo="500"/>
    </s:Animate>
    <s:Animate target="{hostComponent}" duration="2000" repeatCount="1">
    <s:SimpleMotionPath id="setvertical" property="verticalCenter" valueTo="0"/>
    </s:Animate>
    <s:Animate target="{hostComponent}" duration="2000" repeatCount="1">
    <s:SimpleMotionPath id="sethorizontal" property="horizontalCenter" valueTo="0"/>
    </s:Animate>
    </s:Parallel>
    </fx:Declarations>
    <fx:Metadata>
        <![CDATA[
            [HostComponent("spark.components.SkinnableContainer")]
        ]]>
        </fx:Metadata>
        <fx:Script fb:purpose="styling">
            <![CDATA[       
    import mx.events.FlexEvent;
    import mx.core.FlexGlobals;
    private var Vert:int;
    private var Horz:int;
                override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number) : void
                    bgFill.color = getStyle("backgroundColor");
                    bgFill.alpha = getStyle("backgroundAlpha");
                    super.updateDisplayList(unscaledWidth, unscaledHeight);
    protected function resizeMe(e:MouseEvent): void
    Vert = int(FlexGlobals.topLevelApplication.contentGroup.height/2*-1)+35;
    Horz = int(FlexGlobals.topLevelApplication.contentGroup.width/2*-1)+110;
    if (hostComponent.height < 51)
    setheight.valueTo=500;
    setvertical.valueTo=0;
    sethorizontal.valueTo=0;
    else
    setheight.valueTo=50;
    setvertical.valueTo=Vert;
    sethorizontal.valueTo=Horz;
    sizer.play();
    protected function skin1_creationCompleteHandler(event:FlexEvent):void
    Vert = int(FlexGlobals.topLevelApplication.contentGroup.height/2*-1);
    Horz = int(FlexGlobals.topLevelApplication.contentGroup.width/2*-1);
            ]]>       
        </fx:Script>
        <s:states>
            <s:State name="normal" />
            <s:State name="disabled" />
        </s:states>
        <s:Rect left="0" right="0" top="0" bottom="0">
            <s:fill>
                <s:SolidColor id="bgFill" color="0x00DDDD"/>
            </s:fill>
        </s:Rect>
        <s:Group id="contentGroup" left="0" right="0" top="0" bottom="0" minWidth="0" minHeight="0" click="resizeMe(event)">
            <s:layout>
                <s:BasicLayout/>
            </s:layout>
        </s:Group>
    </s:Skin>

    This is a good question.
    There's no hard and fast rule to apply which says "this belongs in the skin" vs. "this belongs in the component".  Similarly, there are also no hard and fast rules around when to use a the new skinning architecture vs. just creating a custom component.  Just do whatever you feel comfortable with and makes your job easier.  At the end of the day, it's about productivity and not living up to ideals.  That said, there are probably some easier and more logical ways to do some things.
    On the skinning architecture vs. custom component debate, with a SkinnableComponent we have a clear separation of the component properties and behavior on one side and the look and feel of the component on the Skin side.  Also, there's a clear contract we use to talk back and forth to one another.  The reason for the separation between the Skin and the SkinnableComponent is so that we can have one Button SkinnableComponent and multiple Skins for that Button which all tweak the visual appearance of it.
    It doesn't make sense for every component to be skinnable.  If you know what your component is going to be and look like and don't need the extra flexibility skinning provides, then you can get rid of the extra overhead that skinning requires (like having 2 classes).  An example custom component is:
    <s:Group>
    <s:Rect>
    </s:Rect>
    <mx:Image src="..." />
    <s:Panel skinClass="myCustomSkinClass">
    </s:Panel>
    </s:Group>
    If you want more flexibility and want the ability to easily change the look and feel of the component (i.e. skin it), then you'd extend SkinnableComponent, fill out the skinning lifecycle methods, and create a default Skin for its appearance.
    Now, when you're building a SkinnableComponent, there's always a question of what to put in the component vs. what to put in the skin.  In general, we try to put the core properties and behaviors in the component and anything visual in the skin.  However, another guideline to consider is whether all skins would want this behavior.  If so, then it makes sense (and makes your life easier) to put it in the SkinnableComponent rather than the Skin.  We do this in the framework for components like VSlider, where the logic for positioning the y-axis of the thumb is in the component and not the skin, even though it's a "visual" thing.  We also have discussed how we would build up a ColorPicker component, and I think the way we would go about it is by putting a lot of the "visual" logic in the component because otherwise we'd have to duplicate it across all skins.
    Now, the other question you guys are asking here are "when do I bake effects (or any behavior) in to the component (either in the skin or in the SkinnableComponent AS class) vs. when do I declare effects alongside the component".  Again, I think the answer to that is whether you want all your components to have this behavior.  If that was the case, then I'd lose no sleep baking it in to the component.  However, if it's not the case, then I'd make the end-developer delcare it when they use your component, like:
    <s:MyCustomComponent id="myComponent" />
    <s:Resize id="resizer" widthTo="100" heightTo="50" target="{myComponent}"/>
    I would think most of the time, you probably wouldn't want to bake an effect like that in to the component, especially because it has some sizing information on it.  However, we have some effects baked in to some of the framework components, like when the thumb of a Slider moves around due to someone clicking on the track.  I think it's fine that it's baked in to the component, but I do think it should probably be stylable so that a user can customize it (that's on our list of lower-priority things to do btw).
    The framework has definitely evolved.  I think we started out with a more purist attitude and wanted a clear separation between the skin and the component.  However, as we built out components, we realized it's not always practical to do that.  Similarly, we wanted our skins to be pure MXML; however, for usability reasons, we decided that our skins should be styleable, and that requires a little bit of ActionScript code.  Border is a great example where it doesn't really follow a lot of these guidelines, but it's just a styleable component; however, this component makes other people's jobs easier.  At the end of the day, it's about productivity and usability, and hopefully the Spark architecture is a step in the right direction.
    Anyways, I hope that helps some.  These are just some guidelines.  As people play around with the architecture more, I'm sure some other people will have some good advice to share as well.
    -Ryan

  • Spark Classes and Skins not being included when running FlexUnit task via Ant

    I have a series of unit tests that run on a spark component. This spark component has a custom skin defined for it, and that is working beautifully.
    Inside that component is a spark list... By default, after digging into the list code, spark lists should use a default skin called "BorderContainerSkin". When I run the application that uses this component directly (whether compiled via FlashBuilder or via Ant/Hudson), the component itself runs and looks exactly like I would expect. When I run my unit tests in the browser (via Run As Web Application command on my TestRunner), the unit tests all perform as expected.
    However, when I run the FlexUnit tests via Ant (either through windows non-headless, or linux headless), an exception is thrown with the following error:
    Error: Skin for FromToList132.FromToListSkin133.VGroup134.fromList cannot be found.
        at spark.components.supportClasses::SkinnableComponent/attachSkin()[E:\dev\4.x\frameworks\pr ojects\spark\src\spark\components\supportClasses\SkinnableComponent.as:632]
        at spark.components.supportClasses::SkinnableComponent/validateSkinChange()[E:\dev\4.x\frame works\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as:405]
        at spark.components.supportClasses::SkinnableComponent/commitProperties()[E:\dev\4.x\framewo rks\projects\spark\src\spark\components\supportClasses\SkinnableComponent.as:419]
        at spark.components.supportClasses::ListBase/commitProperties()[E:\dev\4.x\frameworks\projec ts\spark\src\spark\components\supportClasses\ListBase.as:785]
        at spark.components::List/commitProperties()[E:\dev\4.x\frameworks\projects\spark\src\spark\ components\List.as:907]
        at mx.core::UIComponent/validateProperties()[E:\dev\4.x\frameworks\projects\framework\src\mx \core\UIComponent.as:7933]
        at mx.managers::LayoutManager/validateProperties()[E:\dev\4.x\frameworks\projects\framework\ src\mx\managers\LayoutManager.as:572]
        at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.x\frameworks\projects\framewo rk\src\mx\managers\LayoutManager.as:730]
        at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.x\frameworks\projects \framework\src\mx\managers\LayoutManager.as:1072]
    (Note: fromList is the id of the spark list used in the FromToList component.)
    The issue is that the "BorderContainerSkin" class isn't ever getting imported along the way. I did several things that worked to "fix" the problem, but they are all hacky and don't explain the root problem:
    1- If I explicitly import that skin into my test file, then everything works great.
    2- If I add the <includes> directive into my mxmlc task in the Ant file, and again specifically call out that skin class, then again it will work.
    However, how would I know what skins from the spark library are going to get included and which aren't? How would I know that a default skin isn't included or where to find it or even what it is?
    It seems like either I'm missing something in my Ant file or there is a serious bug here with the FlexUnit task. Can anyone shed light on if this is a known issue, any permanent fixes (that don't involve keeping track of a long list of strings of class references), or anything that I might be missing?
    Thank you for any help!

    Guessing the ant tasks aren't forcing the include of the spark skins libraries... which is a little silly. I would assume the compiler would take care of this but it is something we can investigate...
    Not 100% sure as to why, but this is what it sounds like.
    Mike

Maybe you are looking for

  • How do you use one managed session bean from another?

    Hello - I am a complete newbie to JSF coming from Struts 1. My question is how do you use one managed bean from the method of another one? I think this would be a common senario. For example I put a bean in session scope when a user logs in and in a

  • I can't open the RAW files from my new Nikon D4s camera in photoshop? How do I download the latest software for RAW files?

    I can't open the RAW files from my new Nikon D4s camera in photoshop? How do I download the latest software for RAW files? Cheers!

  • List of SD ,FICO and Retail cubes and Reports

    Hi, I need list of Cubes and Reports related to SD,FICO and retail. <removed by moderator> Regards, Shiva Kumar G.C Edited by: Siegfried Szameitat on Nov 12, 2008 11:21 AM

  • Beryl-settings won't open

    I just did a fresh install of arch, and then installed beryl, but beryl-settings won't open [root@arch etc]# beryl-settings (beryl-settings:3789): Gtk-WARNING **: Locale not supported by C library. Using the fallback 'C' locale. Traceback (most recen

  • Insane bug with URLs

    It started with my class GalleryImage which had url and path member (image http url and filesystem path). Now it is public class GalleryPict {     public-init var ipath:String;     public var path:String; }I am reading in background thread informatio