Program Listing for File ViewerManager.hpp

Return to documentation for file (include/dish2/web/ViewerManager.hpp)

#pragma once
#ifndef DISH2_WEB_VIEWERMANAGER_HPP_INCLUDE
#define DISH2_WEB_VIEWERMANAGER_HPP_INCLUDE

namespace dish2 {

// base case
template<typename... SubsequentViewers> struct ViewerManager {

  template<typename... Args> ViewerManager( Args&&... args ) {}

  void Redraw() {}

};

// adapted from https://stackoverflow.com/a/35284581
template<typename FirstViewer, typename... SubsequentViewers>
struct ViewerManager<FirstViewer, SubsequentViewers...> {

  using subsequent_viewers_t = dish2::ViewerManager<SubsequentViewers...>;

  FirstViewer first_viewer;
  ViewerManager<SubsequentViewers...> subsequent_viewers;

  template<typename... Args>
  ViewerManager( Args&&... args )
  : first_viewer( std::forward<Args>( args )... )
  , subsequent_viewers( std::forward<Args>( args )... )
  {}

  void Redraw() {
    if ( first_viewer.IsActivated() ) first_viewer.Redraw();
    subsequent_viewers.Redraw();
  }

};

} // namespace dish2

#endif // #ifndef DISH2_WEB_VIEWERMANAGER_HPP_INCLUDE