/* This file is part of the KDE project
   Copyright (C) 1998, 1999, 2000 Torben Weis <weis@kde.org>
   Copyright (C) 2002 - 2005 Dag Andersen <danders@get2net.dk>

   This library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either
   version 2 of the License, or (at your option) any later version.

   This library 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
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public License
   along with this library; see the file COPYING.LIB.  If not, write to
   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301, USA.
*/

#ifndef KPLATO_VIEW
#define KPLATO_VIEW

#include <KoView.h>
#include "kptcontext.h"

class TQListViewItem;
class TQPopupMenu;
class TQHBoxLayout;
class TQTabWidget;
class TQWidgetStack;

class TDEListView;
class KPrinter;
class TDEAction;
class TDEActionMenu;
class TDESelectAction;
class TDEToggleAction;
class TDERadioAction;
class KStatusBarLabel;

class DCOPObject;

namespace KPlato
{

class AccountsView;
class GanttView;
class PertView;
class ResourceView;
//class ReportView;
class Part;
class Node;
class Project;
class Relation;
class Context;

class View : public KoView {
    TQ_OBJECT
  

public:
    View(Part* part, TQWidget* parent=0, const char* name=0);
    ~View();
    /**
     * Support zooming.
     */
    virtual void setZoom(double zoom);

    Part *getPart()const;

    Project& getProject() const;

    virtual void setupPrinter(KPrinter &printer);
    virtual void print(KPrinter &printer);

    TQPopupMenu *popupMenu(const TQString& name);

    void projectCalculate();

    virtual DCOPObject* dcopObject();
   
    virtual bool setContext(Context &context);
    virtual void getContext(Context &context) const;

    void setTaskActionsEnabled(TQWidget *w, bool on);
    void setScheduleActionsEnabled();
    
public slots:
    void slotUpdate(bool calculate);
    void slotEditResource();
    void slotEditCut();
    void slotEditCopy();
    void slotEditPaste();
    void slotViewGantt();
    void slotViewExpected();
    void slotViewOptimistic();
    void slotViewPessimistic();
    
    void slotViewGanttResources();
    void slotViewGanttTaskName();
    void slotViewGanttTaskLinks();
    void slotViewGanttProgress();
    void slotViewGanttFloat();
    void slotViewGanttCriticalTasks();
    void slotViewGanttCriticalPath();
    void slotViewGanttNoInformation();
    void slotViewTaskAppointments();
    void slotViewPert();
    void slotViewResources();
    void slotViewResourceAppointments();
    void slotViewAccounts();
    void slotAddTask();
    void slotAddSubTask();
    void slotAddMilestone();
    void slotProjectEdit();
    void slotDefineWBS();
    void slotGenerateWBS();
    void slotConfigure();
    void slotAddRelation(Node *par, Node *child);
    void slotModifyRelation(Relation *rel);
    void slotAddRelation(Node *par, Node *child, int linkType);
    void slotModifyRelation(Relation *rel, int linkType);
  
    void setBaselineMode(bool on);
    
    void slotExportGantt(); // testing
    void setTaskActionsEnabled(bool on);
    
    void slotRenameNode(Node *node, const TQString& name);
    
    void slotPopupMenu(const TQString& menuname, const TQPoint & pos);
    
protected slots:
    void slotProjectCalendar();
    void slotProjectWorktime();
    void slotProjectCalculate();
    void slotProjectCalculateExpected();
    void slotProjectCalculateOptimistic();
    void slotProjectCalculatePessimistic();
    void slotProjectAccounts();
    void slotProjectResources();
    void slotViewReportDesign();
    void slotViewReports();

    void slotOpenNode();
    void slotTaskProgress();
    void slotDeleteTask();
    void slotIndentTask();
    void slotUnindentTask();
    void slotMoveTaskUp();
    void slotMoveTaskDown();

    void slotConnectNode();
    void slotChanged(TQWidget *);
    void slotChanged();

    void slotAboutToShow(TQWidget *widget);

#ifndef NDEBUG
    void slotPrintDebug();
    void slotPrintSelectedDebug();
    void slotPrintCalendarDebug();
    void slotPrintTestDebug();
#else
    static void slotPrintDebug() { };
    static void slotPrintSelectedDebug() { };
    static void slotPrintCalendarDebug() { };
    static void slotPrintTestDebug() { };
#endif

protected:
    virtual void updateReadWrite(bool readwrite);
    Node *currentTask();
    void updateView(TQWidget *widget);

private:
    GanttView *m_ganttview;
    TQHBoxLayout *m_ganttlayout;
    PertView *m_pertview;
    TQHBoxLayout *m_pertlayout;
    TQWidgetStack *m_tab;
    ResourceView *m_resourceview;
    AccountsView *m_accountsview;
//    ReportView *m_reportview;
    TQPtrList<TQString> m_reportTemplateFiles;

    bool m_baselineMode;
    
    int m_viewGrp;
    int m_defaultFontSize;
    int m_currentEstimateType;
    
    bool m_updateGanttview;
    bool m_updateResourceview;
    bool m_updateAccountsview;

    KStatusBarLabel *m_estlabel;

    DCOPObject* m_dcop;
    
    // ------ Edit
    TDEAction *actionCut;
    TDEAction *actionCopy;
    TDEAction *actionPaste;

    TDEAction *actionIndentTask;
    TDEAction *actionUnindentTask;
    TDEAction *actionMoveTaskUp;
    TDEAction *actionMoveTaskDown;
    
    // ------ View
    TDEAction *actionViewGantt;
    TDERadioAction *actionViewExpected;
    TDERadioAction *actionViewOptimistic;
    TDERadioAction *actionViewPessimistic;
    
    TDEToggleAction *actionViewGanttResources;
    TDEToggleAction *actionViewGanttTaskName;
    TDEToggleAction *actionViewGanttTaskLinks;
    TDEToggleAction *actionViewGanttProgress;
    TDEToggleAction *actionViewGanttFloat;
    TDEToggleAction *actionViewGanttCriticalTasks;
    TDEToggleAction *actionViewGanttCriticalPath;
    TDEToggleAction *actionViewGanttNotScheduled;
    TDEToggleAction *actionViewTaskAppointments;
    TDEAction *actionViewPert;
    TDEAction *actionViewResources;
    TDEToggleAction *actionViewResourceAppointments;
    TDEAction *actionViewAccounts;
    TDEAction *actionViewReports;
    
    // ------ Insert
    TDEAction *actionAddTask;
    TDEAction *actionAddSubtask;
    TDEAction *actionAddMilestone;
    
    // ------ Project
    TDEAction *actionEditMainProject;
    TDEAction *actionEditStandardWorktime;
    TDEAction *actionEditCalendar;
    TDEAction *actionEditAccounts;
    TDEAction *actionEditResources;
    TDEActionMenu *actionCalculate;
    TDEAction *actionCalculateExpected;
    TDEAction *actionCalculateOptimistic;
    TDEAction *actionCalculatePessimistic;
    // ------ Reports
    TDEAction *actionFirstpage;
    TDEAction *actionPriorpage;
    TDEAction *actionNextpage;
    TDEAction *actionLastpage;
    
    // ------ Tools
    TDEAction *actionDefineWBS;
    TDEAction *actionGenerateWBS;
    
    // ------ Export (testing)
    TDEAction *actionExportGantt;
    
    // ------ Settings
    TDEAction *actionConfigure;

    // ------ Popup
    TDEAction *actionOpenNode;
    TDEAction *actionTaskProgress;
    TDEAction *actionDeleteTask;
    TDEAction *actionEditResource;

    //Test
    TDEAction *actNoInformation;
};

} //Kplato namespace

#endif
