/*=========================================================================

  Program:   Insight Segmentation & Registration Toolkit
  Module:    $RCSfile: CMakeSetupGUIImplementation.h,v $
  Language:  C++
  Date:      $Date: 2012/03/29 17:21:09 $
  Version:   $Revision: 1.1.1.1 $

  Copyright (c) 2002 Insight Consortium. All rights reserved.
  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.

     This software is distributed WITHOUT ANY WARRANTY; without even 
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/

#ifndef CMakeSetupGUIImplementation_h
#define CMakeSetupGUIImplementation_h

#include "CMakeSetupGUI.h"
#include "FLTKPropertyList.h"
#include <set>


/**
 *
 *  This class implements the virtual methods 
 *  declared in the GUI interface
 *
 */
   
class cmake;

class CMakeSetupGUIImplementation : public CMakeSetupGUI 
{

public:

  CMakeSetupGUIImplementation();
  virtual ~CMakeSetupGUIImplementation();
  virtual void Close( void );
  virtual void Show( void );
  virtual void UpdateData( bool option );
  virtual void BrowseForBinaryPath( void );
  virtual void BrowseForSourcePath( void );
  virtual void SetBinaryPath( const char * path );
  virtual void SetSourcePath( const char * path );
  virtual void SaveCacheFromGUI( void );
  virtual void LoadCacheFromDiskToGUI( void );
  virtual void FillCacheGUIFromCacheManager( void );
  virtual void FillCacheManagerFromCacheGUI( void );
        virtual void SetPathToExecutable( const char * path );
  virtual void LoadRecentDirectories(void);
  virtual void SaveRecentDirectories(void);
  virtual void ShowRecentBinaryDirectories(void);
  virtual void ShowRecentSourceDirectories(void);
  virtual void SelectOneRecentSourceDirectory(void);
  virtual void SelectOneRecentBinaryDirectory(void);
  virtual void UpdateListOfRecentDirectories(void);
  virtual void ClickOnConfigure(void);
  virtual void ClickOnOK(void);
  virtual void ClickOnCancel(void);
  virtual void RunCMake( bool generateProjectFiles );
  cmake *GetCMakeInstance() {return m_CMakeInstance; }
private:  
  virtual bool VerifyBinaryPath( const std::string & path ) const;
  virtual bool VerifySourcePath( const std::string & path ) const;
  virtual std::string ExpandPathAndMakeItAbsolute( const std::string & inputPath ) const;

private:
  fltk::PropertyList   m_CacheEntriesList;
  std::string          m_WhereBuild;
  std::string          m_WhereSource;
  std::string          m_PathToExecutable;
  std::string            m_GeneratorChoiceString;
  bool                 m_BuildPathChanged;
  
  std::set< std::string > m_RecentBinaryDirectories;
  std::set< std::string > m_RecentSourceDirectories;
  cmake *m_CMakeInstance;
};


#endif
