/***************************************************************************
 *   Copyright (C) 2005 by Jens Herden                                     *
 *   jens@tdewebdev.org                                                    *
 *                                                                         *
 *   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        *
 *   MERCHANTABILITY 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.,                                       *
 *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.             *
 ***************************************************************************/

#ifndef KDEVPROJECTVIEW_H
#define KDEVPROJECTVIEW_H

#include "fileinfo.h" 

#include <tqvaluelist.h>
#include <tqmap.h>
#include <tqguardedptr.h>

#include <kdevplugin.h>
#include <kurl.h>


class TQPopupMenu;
class TDEAction;
class TDESelectAction;
class KDialogBase;
class Context;
class ConfigWidgetProxy;
class FileListWidget;
class TDEToolBar;
class TQVBox;
class ToolbarGUIBuilder;



/**
Please read the README.dox file for more info about this part

this is a reimplementation of the project views in Quanta

@TODO find a way to control the toolbar again
@TODO save html parts too
FIXME at project open I get the default view and the open files at last close
*/
class ProjectviewPart: public KDevPlugin
{
  Q_OBJECT
  
public:
 
  typedef TQMap<TQString, FileInfoList> ViewMap;
//   typedef TQMap<KURL, FileInfo> FileInfoMap;
  
  
  ProjectviewPart(TQObject *parent, const char *name, const TQStringList &args);
  ~ProjectviewPart();
  
  // reimplemented from KDevPlugin
  void restorePartialProjectSession(const TQDomElement * el);
  void savePartialProjectSession(TQDomElement * el);
  
  /**
  * 
  * @return the current defaut view
  */
  inline TQString getDefaultView() const {return m_defaultProjectView;};
  
  /**
  * 
  * @param view new default view
  */
  inline void setDefaultView(const TQString& view) {m_defaultProjectView = view;};
  
  /**
  * get all current views
  * @return TQStringList of defined views
  */
  inline TQStringList getViewList() const {return m_projectViews.keys();};

private slots:
  void init();
  
  void insertConfigWidget(const KDialogBase *dlg, TQWidget *page, unsigned int pageNo);
  void contextMenu(TQPopupMenu *popup, const Context *context);
  void projectOpened();
  void projectClosed();
  
  /** Deletes a project view
    *
    * @param view name of the project view
    */
  void slotDeleteProjectView(const TQString &view);
  
  /**
    * Deletes the current project view
    */
  void slotDeleteProjectViewCurent();

  /**
    * Saves a project view
    *
    * @param askForName true = show a dialog for the name
    */
  void slotSaveAsProjectView(bool askForName = true);
  
  /** Saves the current project view
    */
  void slotSaveProjectView();
  
  /** Opens a project view
    *
    * @param view name of the project view
    */
  void slotOpenProjectView(const TQString &view);
  
private:
  /**
    * create and initialize the actions
    */
  void setupActions();
  
  /**
  * Change the actions according to the current available views
  */
  void adjustViewActions();
  
  /**
   * write the views to the plugin config file
   */
  void writeConfig();

  /**
   * read the views from the plugin config file
   */
  void readConfig();

  ViewMap m_projectViews;  //container for the views
  
  TDEAction *m_savePrjViewAction;
  TDEAction *m_newPrjViewAction;
  TDEAction *m_deleteCurrentPrjViewAction;
  TDESelectAction *m_openPrjViewAction;
  TDESelectAction *m_deletePrjViewAction;
  
  TQString m_currentProjectView;
  TQString m_defaultProjectView;  // load this after project loaded
  
  KURL m_projectBase;  // project base folder
  ConfigWidgetProxy *m_configProxy;

  TQGuardedPtr<TQWidget> m_widget;
  TQGuardedPtr<ToolbarGUIBuilder> m_guibuilder;
  TQWidget * m_toolbarWidget;
  
  bool m_restored;
};


#endif