Index: views_slideshow_plugin_style_slideshow.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views_slideshow/Attic/views_slideshow_plugin_style_slideshow.inc,v
retrieving revision 1.1.2.1.2.9.2.2
diff -u -p -r1.1.2.1.2.9.2.2 views_slideshow_plugin_style_slideshow.inc
--- views_slideshow_plugin_style_slideshow.inc	6 Jun 2010 05:03:07 -0000	1.1.2.1.2.9.2.2
+++ views_slideshow_plugin_style_slideshow.inc	12 Sep 2010 03:45:17 -0000
@@ -97,4 +97,12 @@ class views_slideshow_plugin_style_slide
       call_user_func_array($function, array(&$form, &$form_state, &$this));
     }
   }
+  
+  function options_submit($form, &$form_state) {
+    module_load_all_includes('views_slideshow.inc');
+    foreach (module_implements('views_slideshow_options_form_submit') as $module) {
+      $function = $module . '_views_slideshow_options_form_submit';
+      call_user_func_array($function, array($form, &$form_state));
+    }
+  }
 }
Index: contrib/views_slideshow_cycle/views-slideshow-cycle.tpl.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views_slideshow/contrib/views_slideshow_cycle/Attic/views-slideshow-cycle.tpl.php,v
retrieving revision 1.1.2.2
diff -u -p -r1.1.2.2 views-slideshow-cycle.tpl.php
--- contrib/views_slideshow_cycle/views-slideshow-cycle.tpl.php	28 Jul 2010 06:32:45 -0000	1.1.2.2
+++ contrib/views_slideshow_cycle/views-slideshow-cycle.tpl.php	12 Sep 2010 03:45:17 -0000
@@ -7,36 +7,38 @@
  */
 ?>
 
-<?php if ($controls_location == 'top' || $pager_location == 'top' || $slide_counter_location == 'top'): ?>
-  <div class="views-slideshow-controls-top clear-block">
-    <?php if ($slide_counter_location == 'top') { ?>
-      <?php print $slide_counter; ?>
-    <?php } ?>
-    
-    <?php if ($controls_location == 'top') { ?>
-      <?php print $controls; ?>
-    <?php } ?>
-    
-    <?php if ($pager_location == 'top') { ?>
-      <?php print $pager; ?>
-    <?php } ?>
-  </div>
-<?php endif; ?>
-
-<?php print $slideshow; ?>
-
-<?php if ($controls_location == 'bottom' || $pager_location == 'bottom' || $slide_counter_location == 'bottom'): ?>
-  <div class="views-slideshow-controls-bottom clear-block">
-    <?php if ($pager_location == 'bottom') { ?>
-      <?php print $pager; ?>
-    <?php } ?>
-    
-    <?php if ($controls_location == 'bottom') { ?>
-      <?php print $controls; ?>
-    <?php } ?>
-    
-    <?php if ($slide_counter_location == 'bottom') { ?>
-      <?php print $slide_counter; ?>
-    <?php } ?>
-  </div>
-<?php endif; ?>
+<div class="skin-<?php print $options['views_slideshow_cycle']['skin']; ?>">
+  <?php if ($controls_location == 'top' || $pager_location == 'top' || $slide_counter_location == 'top'): ?>
+    <div class="views-slideshow-controls-top clear-block">
+      <?php if ($slide_counter_location == 'top') { ?>
+        <?php print $slide_counter; ?>
+      <?php } ?>
+      
+      <?php if ($controls_location == 'top') { ?>
+        <?php print $controls; ?>
+      <?php } ?>
+      
+      <?php if ($pager_location == 'top') { ?>
+        <?php print $pager; ?>
+      <?php } ?>
+    </div>
+  <?php endif; ?>
+  
+  <?php print $slideshow; ?>
+  
+  <?php if ($controls_location == 'bottom' || $pager_location == 'bottom' || $slide_counter_location == 'bottom'): ?>
+    <div class="views-slideshow-controls-bottom clear-block">
+      <?php if ($pager_location == 'bottom') { ?>
+        <?php print $pager; ?>
+      <?php } ?>
+      
+      <?php if ($controls_location == 'bottom') { ?>
+        <?php print $controls; ?>
+      <?php } ?>
+      
+      <?php if ($slide_counter_location == 'bottom') { ?>
+        <?php print $slide_counter; ?>
+      <?php } ?>
+    </div>
+  <?php endif; ?>
+</div>
Index: contrib/views_slideshow_cycle/views_slideshow_cycle.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views_slideshow/contrib/views_slideshow_cycle/Attic/views_slideshow_cycle.module,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 views_slideshow_cycle.module
--- contrib/views_slideshow_cycle/views_slideshow_cycle.module	28 Jul 2010 06:32:45 -0000	1.1.2.3
+++ contrib/views_slideshow_cycle/views_slideshow_cycle.module	12 Sep 2010 03:45:17 -0000
@@ -94,3 +94,14 @@ function views_slideshow_cycle_help($pat
       return $output;
   }
 }
+
+/**
+ * Implementation of hook_views_cycle_skins().
+ */
+function views_slideshow_cycle_views_slideshow_cycle_skins() {
+  $skins['default'] = array(
+    'title' => t('Default'),
+  );
+
+  return $skins;
+}
Index: contrib/views_slideshow_cycle/views_slideshow_cycle.theme.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views_slideshow/contrib/views_slideshow_cycle/Attic/views_slideshow_cycle.theme.inc,v
retrieving revision 1.1.2.6
diff -u -p -r1.1.2.6 views_slideshow_cycle.theme.inc
--- contrib/views_slideshow_cycle/views_slideshow_cycle.theme.inc	11 Sep 2010 17:35:04 -0000	1.1.2.6
+++ contrib/views_slideshow_cycle/views_slideshow_cycle.theme.inc	12 Sep 2010 03:45:17 -0000
@@ -69,6 +69,15 @@ function template_preprocess_views_slide
     $settings['vss_id'] = $vss_id;  
   }
 
+  // Enqueue any stylesheets set for the skin on this view are added.
+  $skin_path = drupal_get_path('module', $options['views_slideshow_cycle']['skin_info']['module']);
+  if ($options['views_slideshow_cycle']['skin_info']['path']) {
+    $skin_path .= '/'. $options['views_slideshow_cycle']['skin_info']['path'];
+  }
+  foreach ($options['views_slideshow_cycle']['skin_info']['stylesheets'] as $stylesheet) {
+    drupal_add_css($skin_path .'/'. $stylesheet);
+  }
+  
   drupal_add_js(array('viewsSlideshowCycle' => array('#views_slideshow_cycle_main_' . $vss_id => $settings)), 'setting');
 
   $hidden_elements = theme('views_slideshow_cycle_no_display_section', $view, $rows, $vss_id, $options['mode']);
@@ -97,6 +106,18 @@ function template_preprocess_views_slide
   if ($cycle['slide_counter']) {
     $vars['slide_counter'] = theme('views_slideshow_cycle_slide_counter', $vss_id, $view, $options);
   }
+  
+  if (isset($options['views_slideshow_cycle']['skin_info']['pager_location'])) {
+    $vars['pager_location'] = $options['views_slideshow_cycle']['skin_info']['pager_location'];
+  }
+  
+  if (isset($options['views_slideshow_cycle']['skin_info']['controls_location'])) {
+    $vars['controls_location'] = $options['views_slideshow_cycle']['skin_info']['controls_location'];
+  }
+  
+  if (isset($options['views_slideshow_cycle']['skin_info']['slide_counter_location'])) {
+    $vars['slide_counter_location'] = $options['views_slideshow_cycle']['skin_info']['slide_counter_location'];
+  }
 }
 
 /**
@@ -105,12 +126,15 @@ function template_preprocess_views_slide
  * @ingroup themeable
  */
 function theme_views_slideshow_cycle_no_display_section($view, $rows, $vss_id, $mode) {
-  // Retrive the number of itmes per frame
-  if (isset($view->display_handler->display->display_options['style_options']['views_slideshow_cycle']['items_per_slide']) && $view->display_handler->display->display_options['style_options']['views_slideshow_cycle']['items_per_slide'] > 0) {
-    $items_per_slide = $view->display_handler->display->display_options['style_options']['views_slideshow_cycle']['items_per_slide'];
+  $styles = $view->display_handler->display->display_options['style_options']['views_slideshow_cycle'];
+  $styles_default = $view->display['default']->display_options['style_options']['views_slideshow_cycle'];
+  
+  // Retrive the number of items per frame
+  if (isset($styles['items_per_slide']) && $styles['items_per_slide'] > 0) {
+    $items_per_slide = $styles['items_per_slide'];
   }
-  elseif (isset($view->display['default']->display_options['style_options']['views_slideshow_cycle']['items_per_slide']) && $view->display['default']->display_options['style_options']['views_slideshow_cycle']['items_per_slide'] > 0) {
-    $items_per_slide = $view->display['default']->display_options['style_options']['views_slideshow_cycle']['items_per_slide'];
+  elseif (isset($styles_default['items_per_slide']) && $styles_default['items_per_slide'] > 0) {
+    $items_per_slide = $styles_default['items_per_slide'];
   }
   else {
     $items_per_slide = 1;
Index: contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views_slideshow/contrib/views_slideshow_cycle/Attic/views_slideshow_cycle.views_slideshow.inc,v
retrieving revision 1.1.2.8
diff -u -p -r1.1.2.8 views_slideshow_cycle.views_slideshow.inc
--- contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc	11 Sep 2010 17:35:04 -0000	1.1.2.8
+++ contrib/views_slideshow_cycle/views_slideshow_cycle.views_slideshow.inc	12 Sep 2010 03:45:17 -0000
@@ -163,6 +163,27 @@ function views_slideshow_cycle_views_sli
 
 function views_slideshow_cycle_views_slideshow_options_form(&$form, &$form_state, &$view) {
   
+  // Style
+  $form['views_slideshow_cycle']['style'] = array(
+    '#value' => '<h2>' . t('Style') . '</h2>',
+  );
+  
+  // Get a list of all available stylesheet plugins.
+  $skin_info = views_slideshow_cycle_get_skins();
+  foreach ($skin_info as $skin => $info) {
+    $skins[$skin] = $info['title'];
+  }
+  asort($skins);
+
+  // And now our own form additions.
+  $form['views_slideshow_cycle']['skin'] = array(
+    '#type' => 'select',
+    '#title' => t('Skin'),
+    '#options' => $skins,
+    '#default_value' => $view->options['views_slideshow_cycle']['skin'],
+    '#description' => t('Select the skin to use for this display.  Skins allow for easily swappable layouts of things like next/prev links and thumbnails.  Note that not all skins support thumbnails, so mis-matching skins and thumbnails may lead to unpredictable results.'),
+  );
+  
   // Transition
   $form['views_slideshow_cycle']['transition'] = array(
     '#value' => '<h2>' . t('Transition') . '</h2>',
@@ -640,3 +661,39 @@ function views_slideshow_cycle_views_sli
     form_error($form['views_slideshow_cycle']['remember_slide_days'], t('!setting must be numeric!',array('Slide days')));
   }
 }
+
+function views_slideshow_cycle_views_slideshow_options_form_submit($form, &$form_state) {
+  // In addition to the skin, we also pre-save the definition that
+  // correspond to it.  That lets us avoid a hook lookup on every page.
+  $skins = views_slideshow_cycle_get_skins();
+  $form_state['values']['style_options']['views_slideshow_cycle']['skin_info'] = $skins[$form_state['values']['style_options']['views_slideshow_cycle']['skin']];
+}
+
+/**
+ * Retrieve a list of all available skins in the system.
+ */
+function views_slideshow_cycle_get_skins() {
+  static $skins;
+
+  if (empty($skins)) {
+    $skins = array();
+    foreach (module_implements('views_slideshow_cycle_skins') as $module) {
+      $skin_items = call_user_func($module .'_views_slideshow_cycle_skins');
+      if (isset($skin_items) && is_array($skin_items)) {
+        foreach (array_keys($skin_items) as $skin) {
+          // Ensure that the definition is complete, so we don't need lots
+          // of error checking later.
+          $skin_items[$skin] += array(
+            'title' => t('Untitled skin'),
+            'module' => $module,
+            'path' => '',
+            'stylesheets' => array(),
+          );
+        }
+        $skins = array_merge($skins, $skin_items);
+      }
+    }
+  }
+
+  return $skins;
+}
