/* 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 .
*/
# include <kprinter.h>
# include <kmessagebox.h>
# include <KoMainWindow.h>
# include <tqapplication.h>
# include <tqpainter.h>
# include <tqiconset.h>
# include <tqlayout.h>
# include <tqsplitter.h>
# include <tqcanvas.h>
# include <tqscrollview.h>
# include <tqcolor.h>
# include <tqlabel.h>
# include <tqstring.h>
# include <tqstringlist.h>
# include <tqvbox.h>
# include <tqgrid.h>
# include <tqsize.h>
# include <tqheader.h>
# include <tqtabwidget.h>
# include <tqwidgetstack.h>
# include <tqtimer.h>
# include <tqpopupmenu.h>
# include <tqpair.h>
# include <kiconloader.h>
# include <kaction.h>
# include <kstdaction.h>
# include <klocale.h>
# include <kdebug.h>
# include <klistview.h>
# include <kstdaccel.h>
# include <kaccelgen.h>
# include <tdeversion.h>
# include <kstatusbar.h>
# include <kxmlguifactory.h>
# include <kstandarddirs.h>
# include <kdesktopfile.h>
# include <kcommand.h>
# include <kfiledialog.h>
# include "kptview.h"
# include "kptaccountsview.h"
# include "kptfactory.h"
# include "kptmilestoneprogressdialog.h"
# include "kptnode.h"
# include "kptpart.h"
# include "kptproject.h"
# include "kptmainprojectdialog.h"
# include "kptprojectdialog.h"
# include "kpttask.h"
# include "kptsummarytaskdialog.h"
# include "kpttaskdialog.h"
# include "kpttaskprogressdialog.h"
# include "kptganttview.h"
# include "kptpertview.h"
//#include "kptreportview.h"
# include "kptdatetime.h"
# include "kptcommand.h"
# include "kptrelation.h"
# include "kptrelationdialog.h"
# include "kptresourceview.h"
# include "kptresourcedialog.h"
# include "kptresource.h"
# include "kptresourcesdialog.h"
# include "kptcalendarlistdialog.h"
# include "kptstandardworktimedialog.h"
# include "kptcanvasitem.h"
# include "kptconfigdialog.h"
# include "kptwbsdefinitiondialog.h"
# include "kptaccountsdialog.h"
# include "KDGanttView.h"
# include "KDGanttViewTaskItem.h"
# include "KPtViewIface.h"
namespace KPlato
{
View : : View ( Part * part , TQWidget * parent , const char * /*name*/ )
: KoView ( part , parent , " Main View " ) ,
m_ganttview ( 0 ) ,
m_gantttqlayout ( 0 ) ,
m_pertview ( 0 ) ,
m_perttqlayout ( 0 ) ,
// m_reportview(0),
m_baselineMode ( false ) ,
m_currentEstimateType ( Effort : : Use_Expected )
{
//kdDebug()<<k_funcinfo<<endl;
getProject ( ) . setCurrentSchedule ( Schedule : : Expected ) ;
setInstance ( Factory : : global ( ) ) ;
if ( ! part - > isReadWrite ( ) )
setXMLFile ( " kplato_readonly.rc " ) ;
else
setXMLFile ( " kplato.rc " ) ;
m_dcop = 0L ;
// build the DCOP object
dcopObject ( ) ;
m_tab = new TQWidgetStack ( this ) ;
TQVBoxLayout * tqlayout = new TQVBoxLayout ( this ) ;
tqlayout - > add ( m_tab ) ;
m_ganttview = new GanttView ( m_tab , part - > isReadWrite ( ) ) ;
m_tab - > addWidget ( m_ganttview ) ;
m_updateGanttview = false ;
m_ganttview - > draw ( getPart ( ) - > getProject ( ) ) ;
m_pertview = new PertView ( this , m_tab , tqlayout ) ;
m_tab - > addWidget ( m_pertview ) ;
m_resourceview = new ResourceView ( this , m_tab ) ;
m_updateResourceview = true ;
m_tab - > addWidget ( m_resourceview ) ;
m_accountsview = new AccountsView ( getProject ( ) , this , m_tab ) ;
m_updateAccountsview = true ;
m_tab - > addWidget ( m_accountsview ) ;
//m_reportview = new ReportView(this, m_tab);
//m_tab->addWidget(m_reportview);
connect ( m_tab , TQT_SIGNAL ( aboutToShow ( TQWidget * ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotAboutToShow ( TQWidget * ) ) ) ;
connect ( m_pertview , TQT_SIGNAL ( addRelation ( Node * , Node * ) ) , TQT_SLOT ( slotAddRelation ( Node * , Node * ) ) ) ;
connect ( m_pertview , TQT_SIGNAL ( modifyRelation ( Relation * ) ) , TQT_SLOT ( slotModifyRelation ( Relation * ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( enableActions ( bool ) ) , TQT_SLOT ( setTaskActionsEnabled ( bool ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( addRelation ( Node * , Node * , int ) ) , TQT_SLOT ( slotAddRelation ( Node * , Node * , int ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( modifyRelation ( Relation * , int ) ) , TQT_SLOT ( slotModifyRelation ( Relation * , int ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( modifyRelation ( Relation * ) ) , TQT_SLOT ( slotModifyRelation ( Relation * ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( itemDoubleClicked ( ) ) , TQT_SLOT ( slotOpenNode ( ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( itemRenamed ( Node * , const TQString & ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotRenameNode ( Node * , const TQString & ) ) ) ;
connect ( m_ganttview , TQT_SIGNAL ( requestPopupMenu ( const TQString & , const TQPoint & ) ) , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotPopupMenu ( const TQString & , const TQPoint & ) ) ) ;
connect ( m_resourceview , TQT_SIGNAL ( itemDoubleClicked ( ) ) , TQT_SLOT ( slotEditResource ( ) ) ) ;
// The menu items
// ------ Edit
actionCut = KStdAction : : cut ( TQT_TQOBJECT ( this ) , TQT_SLOT ( slotEditCut ( ) ) , actionCollection ( ) , " edit_cut " ) ;
actionCopy = KStdAction : : copy ( TQT_TQOBJECT ( this ) , TQT_SLOT ( slotEditCopy ( ) ) , actionCollection ( ) , " edit_copy " ) ;
actionPaste = KStdAction : : paste ( TQT_TQOBJECT ( this ) , TQT_SLOT ( slotEditPaste ( ) ) , actionCollection ( ) , " edit_paste " ) ;
actionIndentTask = new KAction ( i18n ( " Indent Task " ) , " indent_task " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotIndentTask ( ) ) , actionCollection ( ) , " indent_task " ) ;
actionUnindentTask = new KAction ( i18n ( " Unindent Task " ) , " unindent_task " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotUnindentTask ( ) ) , actionCollection ( ) , " unindent_task " ) ;
actionMoveTaskUp = new KAction ( i18n ( " Move Up " ) , " move_task_up " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotMoveTaskUp ( ) ) , actionCollection ( ) , " move_task_up " ) ;
actionMoveTaskDown = new KAction ( i18n ( " Move Down " ) , " move_task_down " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotMoveTaskDown ( ) ) , actionCollection ( ) , " move_task_down " ) ;
// ------ View
actionViewGantt = new KAction ( i18n ( " Gantt " ) , " gantt_chart " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGantt ( ) ) , actionCollection ( ) , " view_gantt " ) ;
TQString group = " EstimationType " ;
actionViewExpected = new KRadioAction ( i18n ( " Expected " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewExpected ( ) ) , actionCollection ( ) , " view_expected " ) ;
actionViewExpected - > setExclusiveGroup ( group ) ;
actionViewOptimistic = new KRadioAction ( i18n ( " Optimistic " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewOptimistic ( ) ) , actionCollection ( ) , " view_optimistic " ) ;
actionViewOptimistic - > setExclusiveGroup ( group ) ;
actionViewPessimistic = new KRadioAction ( i18n ( " Pessimistic " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewPessimistic ( ) ) , actionCollection ( ) , " view_pessimistic " ) ;
actionViewPessimistic - > setExclusiveGroup ( group ) ;
actionViewGanttResources = new KToggleAction ( i18n ( " Resources " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttResources ( ) ) , actionCollection ( ) , " view_gantt_showResources " ) ;
actionViewGanttTaskName = new KToggleAction ( i18n ( " Task Name " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttTaskName ( ) ) , actionCollection ( ) , " view_gantt_showTaskName " ) ;
actionViewGanttTaskLinks = new KToggleAction ( i18n ( " Task Links " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttTaskLinks ( ) ) , actionCollection ( ) , " view_gantt_showTaskLinks " ) ;
actionViewGanttProgress = new KToggleAction ( i18n ( " Progress " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttProgress ( ) ) , actionCollection ( ) , " view_gantt_showProgress " ) ;
actionViewGanttFloat = new KToggleAction ( i18n ( " Float " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttFloat ( ) ) , actionCollection ( ) , " view_gantt_showFloat " ) ;
actionViewGanttCriticalTasks = new KToggleAction ( i18n ( " Critical Tasks " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttCriticalTasks ( ) ) , actionCollection ( ) , " view_gantt_showCriticalTasks " ) ;
actionViewGanttCriticalPath = new KToggleAction ( i18n ( " Critical Path " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttCriticalPath ( ) ) , actionCollection ( ) , " view_gantt_showCriticalPath " ) ;
// actionViewGanttNotScheduled = new KToggleAction(i18n("Not Scheduled"), 0, 0, TQT_TQOBJECT(this), TQT_SLOT(slotViewGanttNotScheduled()), actionCollection(), "view_gantt_showNotScheduled");
actionViewTaskAppointments = new KToggleAction ( i18n ( " Show Allocations " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewTaskAppointments ( ) ) , actionCollection ( ) , " view_task_appointments " ) ;
actionViewPert = new KAction ( i18n ( " Network " ) , " pert_chart " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewPert ( ) ) , actionCollection ( ) , " view_pert " ) ;
actionViewResources = new KAction ( i18n ( " Resources " ) , " resources " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewResources ( ) ) , actionCollection ( ) , " view_resources " ) ;
actionViewResourceAppointments = new KToggleAction ( i18n ( " Show Allocations " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewResourceAppointments ( ) ) , actionCollection ( ) , " view_resource_appointments " ) ;
actionViewAccounts = new KAction ( i18n ( " Accounts " ) , " accounts " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewAccounts ( ) ) , actionCollection ( ) , " view_accounts " ) ;
//actionViewReports = new KAction(i18n("Reports"), "reports", 0, TQT_TQOBJECT(this), TQT_SLOT(slotViewReports()), actionCollection(), "view_reports");
// ------ Insert
actionAddTask = new KAction ( i18n ( " Task... " ) , " add_task " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotAddTask ( ) ) , actionCollection ( ) , " add_task " ) ;
actionAddSubtask = new KAction ( i18n ( " Sub-Task... " ) , " add_sub_task " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotAddSubTask ( ) ) , actionCollection ( ) , " add_sub_task " ) ;
actionAddMilestone = new KAction ( i18n ( " Milestone... " ) , " add_milestone " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotAddMilestone ( ) ) , actionCollection ( ) , " add_milestone " ) ;
// ------ Project
actionEditMainProject = new KAction ( i18n ( " Edit Main Project... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectEdit ( ) ) , actionCollection ( ) , " project_edit " ) ;
actionEditStandardWorktime = new KAction ( i18n ( " Edit Standard Worktime... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectWorktime ( ) ) , actionCollection ( ) , " project_worktime " ) ;
actionEditCalendar = new KAction ( i18n ( " Edit Calendar... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectCalendar ( ) ) , actionCollection ( ) , " project_calendar " ) ;
actionEditAccounts = new KAction ( i18n ( " Edit Accounts... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectAccounts ( ) ) , actionCollection ( ) , " project_accounts " ) ;
actionEditResources = new KAction ( i18n ( " Edit Resources... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectResources ( ) ) , actionCollection ( ) , " project_resources " ) ;
actionCalculate = new KActionMenu ( i18n ( " Calculate " ) , " project_calculate " , actionCollection ( ) , " project_calculate " ) ;
connect ( actionCalculate , TQT_SIGNAL ( activated ( ) ) , TQT_SLOT ( slotProjectCalculate ( ) ) ) ;
actionCalculateExpected = new KAction ( i18n ( " Expected " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectCalculateExpected ( ) ) , actionCollection ( ) , " project_calculate_expected " ) ;
actionCalculate - > insert ( actionCalculateExpected ) ;
actionCalculateOptimistic = new KAction ( i18n ( " Optimistic " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectCalculateOptimistic ( ) ) , actionCollection ( ) , " project_calculate_optimistic " ) ;
actionCalculate - > insert ( actionCalculateOptimistic ) ;
actionCalculatePessimistic = new KAction ( i18n ( " Pessimistic " ) , 0 , 0 , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotProjectCalculatePessimistic ( ) ) , actionCollection ( ) , " project_calculate_pessimistic " ) ;
actionCalculate - > insert ( actionCalculatePessimistic ) ;
/* // ------ Reports
actionFirstpage = KStdAction : : firstPage ( m_reportview , TQT_SLOT ( slotPrevPage ( ) ) , actionCollection ( ) , " go_firstpage " ) ;
connect ( m_reportview , TQT_SIGNAL ( setFirstPageActionEnabled ( bool ) ) , actionFirstpage , TQT_SLOT ( setEnabled ( bool ) ) ) ;
actionPriorpage = KStdAction : : prior ( m_reportview , TQT_SLOT ( slotPrevPage ( ) ) , actionCollection ( ) , " go_prevpage " ) ;
connect ( m_reportview , TQT_SIGNAL ( setPriorPageActionEnabled ( bool ) ) , actionPriorpage , TQT_SLOT ( setEnabled ( bool ) ) ) ;
actionNextpage = KStdAction : : next ( m_reportview , TQT_SLOT ( slotNextPage ( ) ) , actionCollection ( ) , " go_nextpage " ) ;
connect ( m_reportview , TQT_SIGNAL ( setNextPageActionEnabled ( bool ) ) , actionNextpage , TQT_SLOT ( setEnabled ( bool ) ) ) ;
actionLastpage = KStdAction : : lastPage ( m_reportview , TQT_SLOT ( slotLastPage ( ) ) , actionCollection ( ) , " go_lastpage " ) ;
connect ( m_reportview , TQT_SIGNAL ( setLastPageActionEnabled ( bool ) ) , actionLastpage , TQT_SLOT ( setEnabled ( bool ) ) ) ;
m_reportview - > enableNavigationBtn ( ) ; */
mainWindow ( ) - > toolBar ( " report " ) - > hide ( ) ;
// new KAction(i18n("Design..."), "report_design", 0, TQT_TQOBJECT(this),
// TQT_SLOT(slotReportDesign()), actionCollection(), "report_design");
// ------ Tools
actionDefineWBS =
new KAction ( i18n ( " Define WBS Pattern... " ) , " tools_define_wbs " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotDefineWBS ( ) ) , actionCollection ( ) , " tools_generate_wbs " ) ;
actionGenerateWBS =
new KAction ( i18n ( " Generate WBS Code " ) , " tools_generate_wbs " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotGenerateWBS ( ) ) , actionCollection ( ) , " tools_define_wbs " ) ;
// ------ Export (testing)
//actionExportGantt = new KAction(i18n("Export Ganttview"), "export_gantt", 0, TQT_TQOBJECT(this),
// TQT_SLOT(slotExportGantt()), actionCollection(), "export_gantt");
// ------ Settings
actionConfigure = new KAction ( i18n ( " Configure KPlato... " ) , " configure " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotConfigure ( ) ) , actionCollection ( ) , " configure " ) ;
// ------ Popup
actionOpenNode = new KAction ( i18n ( " Edit... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotOpenNode ( ) ) , actionCollection ( ) , " node_properties " ) ;
actionTaskProgress = new KAction ( i18n ( " Progress... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotTaskProgress ( ) ) , actionCollection ( ) , " task_progress " ) ;
actionDeleteTask = new KAction ( i18n ( " Delete Task " ) , " editdelete " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotDeleteTask ( ) ) , actionCollection ( ) , " delete_task " ) ;
actionEditResource = new KAction ( i18n ( " Edit Resource... " ) , " edit " , 0 , TQT_TQOBJECT ( this ) ,
TQT_SLOT ( slotEditResource ( ) ) , actionCollection ( ) , " edit_resource " ) ;
// ------------------- Actions with a key binding and no GUI item
// Temporary, till we get a menu entry
actNoInformation = new KAction ( " Toggle no information " , CTRL + SHIFT + Key_T , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotViewGanttNoInformation ( ) ) , actionCollection ( ) , " show_noinformation " ) ;
# ifndef NDEBUG
//new KAction("Print Debug", CTRL+SHIFT+Key_P, TQT_TQOBJECT(this), TQT_SLOT( slotPrintDebug()), actionCollection(), "print_debug");
new KAction ( " Print Debug " , CTRL + SHIFT + Key_P , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotPrintSelectedDebug ( ) ) , actionCollection ( ) , " print_debug " ) ;
new KAction ( " Print Calendar Debug " , CTRL + SHIFT + Key_C , TQT_TQOBJECT ( this ) , TQT_SLOT ( slotPrintCalendarDebug ( ) ) , actionCollection ( ) , " print_calendar_debug " ) ;
// new KAction("Print Test Debug", CTRL+SHIFT+Key_T, TQT_TQOBJECT(this), TQT_SLOT(slotPrintTestDebug()), actionCollection(), "print_test_debug");
KAction * actExportGantt = new KAction ( i18n ( " Export Gantt " ) , CTRL + SHIFT + Key_G ,
TQT_TQOBJECT ( this ) , TQT_SLOT ( slotExportGantt ( ) ) , actionCollection ( ) , " export_gantt " ) ;
# endif
// Stupid compilers ;)
# ifndef NDEBUG
/* Q_UNUSED( actPrintSelectedDebug );
Q_UNUSED ( actPrintCalendarDebug ) ; */
Q_UNUSED ( actExportGantt ) ;
# endif
m_estlabel = new KStatusBarLabel ( " " , 0 ) ;
addStatusBarItem ( m_estlabel , 0 , true ) ;
actionViewExpected - > setChecked ( true ) ; //TODO: context
setScheduleActionsEnabled ( ) ;
slotViewExpected ( ) ;
setTaskActionsEnabled ( false ) ;
}
View : : ~ View ( )
{
delete m_dcop ;
removeStatusBarItem ( m_estlabel ) ;
delete m_estlabel ;
}
DCOPObject * View : : dcopObject ( )
{
if ( ! m_dcop )
m_dcop = new ViewIface ( this ) ;
return m_dcop ;
}
Project & View : : getProject ( ) const
{
return getPart ( ) - > getProject ( ) ;
}
void View : : setZoom ( double zoom ) {
m_ganttview - > setZoom ( zoom ) ;
m_pertview - > setZoom ( zoom ) ;
}
void View : : setupPrinter ( KPrinter & /*printer*/ ) {
//kdDebug()<<k_funcinfo<<endl;
}
void View : : print ( KPrinter & printer ) {
//kdDebug()<<k_funcinfo<<endl;
if ( printer . previewOnly ( ) ) {
//HACK: KoMainWindow shows setup on print, but not on print preview!
if ( ! printer . setup ( ) ) {
return ;
}
}
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
{
m_ganttview - > print ( printer ) ;
}
else if ( m_tab - > visibleWidget ( ) = = m_pertview )
{
m_pertview - > print ( printer ) ;
}
else if ( m_tab - > visibleWidget ( ) = = m_resourceview )
{
m_resourceview - > print ( printer ) ;
}
else if ( m_tab - > visibleWidget ( ) = = m_accountsview )
{
m_accountsview - > print ( printer ) ;
}
// else if (m_tab->visibleWidget() == m_reportview)
// {
// m_reportview->print(printer);
// }
}
void View : : slotEditCut ( ) {
//kdDebug()<<k_funcinfo<<endl;
}
void View : : slotEditCopy ( ) {
//kdDebug()<<k_funcinfo<<endl;
}
void View : : slotEditPaste ( ) {
//kdDebug()<<k_funcinfo<<endl;
}
void View : : slotViewExpected ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_currentEstimateType = Effort : : Use_Expected ;
getProject ( ) . setCurrentSchedulePtr ( getProject ( ) . findSchedule ( Schedule : : Expected ) ) ;
slotUpdate ( false ) ;
}
void View : : slotViewOptimistic ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_currentEstimateType = Effort : : Use_Optimistic ;
getProject ( ) . setCurrentSchedulePtr ( getProject ( ) . findSchedule ( Schedule : : Optimistic ) ) ;
slotUpdate ( false ) ;
}
void View : : slotViewPessimistic ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_currentEstimateType = Effort : : Use_Pessimistic ;
getProject ( ) . setCurrentSchedulePtr ( getProject ( ) . findSchedule ( Schedule : : Pessimistic ) ) ;
slotUpdate ( false ) ;
}
void View : : slotViewGanttResources ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowResources ( actionViewGanttResources - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttTaskName ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowTaskName ( actionViewGanttTaskName - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttTaskLinks ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowTaskLinks ( actionViewGanttTaskLinks - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttProgress ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowProgress ( actionViewGanttProgress - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttFloat ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowPositiveFloat ( actionViewGanttFloat - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttCriticalTasks ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowCriticalTasks ( actionViewGanttCriticalTasks - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttCriticalPath ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowCriticalPath ( actionViewGanttCriticalPath - > isChecked ( ) ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGanttNoInformation ( ) {
kdDebug ( ) < < k_funcinfo < < m_ganttview - > showNoInformation ( ) < < endl ;
m_ganttview - > setShowNoInformation ( ! m_ganttview - > showNoInformation ( ) ) ; //Toggle
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewTaskAppointments ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_ganttview - > setShowAppointments ( actionViewTaskAppointments - > isChecked ( ) ) ;
m_updateGanttview = true ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview )
slotUpdate ( false ) ;
}
void View : : slotViewGantt ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_tab - > raiseWidget ( m_ganttview ) ;
}
void View : : slotViewPert ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_tab - > raiseWidget ( m_pertview ) ;
}
void View : : slotViewResources ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_tab - > raiseWidget ( m_resourceview ) ;
}
void View : : slotViewResourceAppointments ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_resourceview - > setShowAppointments ( actionViewResourceAppointments - > isChecked ( ) ) ;
m_updateResourceview = true ;
if ( m_tab - > visibleWidget ( ) = = m_resourceview )
slotUpdate ( false ) ;
}
void View : : slotViewAccounts ( ) {
//kdDebug()<<k_funcinfo<<endl;
m_tab - > raiseWidget ( m_accountsview ) ;
}
void View : : slotProjectEdit ( ) {
MainProjectDialog * dia = new MainProjectDialog ( getProject ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd ) {
getPart ( ) - > addCommand ( cmd ) ;
}
}
delete dia ;
}
void View : : slotProjectCalendar ( ) {
CalendarListDialog * dia = new CalendarListDialog ( getProject ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd ) {
//kdDebug()<<k_funcinfo<<"Modifying calendar(s)"<<endl;
getPart ( ) - > addCommand ( cmd ) ; //also executes
}
}
delete dia ;
}
void View : : slotProjectAccounts ( ) {
AccountsDialog * dia = new AccountsDialog ( getProject ( ) . accounts ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd ) {
//kdDebug()<<k_funcinfo<<"Modifying account(s)"<<endl;
getPart ( ) - > addCommand ( cmd ) ; //also executes
}
}
delete dia ;
}
void View : : slotProjectWorktime ( ) {
StandardWorktimeDialog * dia = new StandardWorktimeDialog ( getProject ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd ) {
//kdDebug()<<k_funcinfo<<"Modifying calendar(s)"<<endl;
getPart ( ) - > addCommand ( cmd ) ; //also executes
}
}
delete dia ;
}
void View : : slotProjectResources ( ) {
ResourcesDialog * dia = new ResourcesDialog ( getProject ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd ) {
//kdDebug()<<k_funcinfo<<"Modifying resources"<<endl;
getPart ( ) - > addCommand ( cmd ) ; //also executes
}
}
delete dia ;
}
void View : : slotProjectCalculate ( ) {
//kdDebug()<<k_funcinfo<<endl;
slotUpdate ( true ) ;
}
void View : : slotProjectCalculateExpected ( ) {
m_currentEstimateType = Effort : : Use_Expected ;
m_updateGanttview = true ;
m_updateResourceview = true ;
m_updateAccountsview = true ;
slotUpdate ( true ) ;
}
void View : : slotProjectCalculateOptimistic ( ) {
m_currentEstimateType = Effort : : Use_Optimistic ;
m_updateGanttview = true ;
m_updateResourceview = true ;
m_updateAccountsview = true ;
slotUpdate ( true ) ;
}
void View : : slotProjectCalculatePessimistic ( ) {
m_currentEstimateType = Effort : : Use_Pessimistic ;
m_updateGanttview = true ;
m_updateResourceview = true ;
m_updateAccountsview = true ;
slotUpdate ( true ) ;
}
void View : : projectCalculate ( ) {
if ( false /*getProject().actualEffort() > 0*/ ) {
// NOTE: This can be removed when proper baselining etc is implemented
if ( KMessageBox : : warningContinueCancel ( this , i18n ( " Progress information will be deleted if the project is recalculated. " ) , i18n ( " Calculate " ) , i18n ( " Calculate " ) ) = = KMessageBox : : Cancel ) {
return ;
}
}
TQApplication : : setOverrideCursor ( TQt : : waitCursor ) ;
Schedule * ns = getProject ( ) . findSchedule ( ( Schedule : : Type ) m_currentEstimateType ) ;
KCommand * cmd ;
if ( ns ) {
cmd = new RecalculateProjectCmd ( getPart ( ) , getProject ( ) , * ns , i18n ( " Calculate " ) ) ;
} else {
cmd = new CalculateProjectCmd ( getPart ( ) , getProject ( ) , i18n ( " Standard " ) , ( Effort : : Use ) m_currentEstimateType , i18n ( " Calculate " ) ) ;
}
getPart ( ) - > addCommand ( cmd ) ;
TQApplication : : restoreOverrideCursor ( ) ;
}
void View : : slotViewReportDesign ( ) {
//kdDebug()<<k_funcinfo<<endl;
}
void View : : slotViewReports ( ) {
//kdDebug()<<k_funcinfo<<endl;
//m_tab->raiseWidget(m_reportview);
}
void View : : slotAddSubTask ( ) {
// If we are positionend on the root project, then what we really want to
// do is to add a first project. We will silently accept the challenge
// and will not complain.
Task * node = getProject ( ) . createTask ( getPart ( ) - > config ( ) . taskDefaults ( ) , currentTask ( ) ) ;
TaskDialog * dia = new TaskDialog ( * node , getProject ( ) . accounts ( ) , getProject ( ) . standardWorktime ( ) , getProject ( ) . isBaselined ( ) ) ;
if ( dia - > exec ( ) ) {
Node * currNode = currentTask ( ) ;
if ( currNode )
{
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
m - > execute ( ) ; // do changes to task
delete m ;
SubtaskAddCmd * cmd = new SubtaskAddCmd ( getPart ( ) , & ( getProject ( ) ) , node , currNode , i18n ( " Add Subtask " ) ) ;
getPart ( ) - > addCommand ( cmd ) ; // add task to project
return ;
}
else
kdDebug ( ) < < k_funcinfo < < " Cannot insert new project. Hmm, no current node!? " < < endl ;
}
delete node ;
delete dia ;
}
void View : : slotAddTask ( ) {
Task * node = getProject ( ) . createTask ( getPart ( ) - > config ( ) . taskDefaults ( ) , currentTask ( ) ) ;
TaskDialog * dia = new TaskDialog ( * node , getProject ( ) . accounts ( ) , getProject ( ) . standardWorktime ( ) , getProject ( ) . isBaselined ( ) ) ;
if ( dia - > exec ( ) ) {
Node * currNode = currentTask ( ) ;
if ( currNode )
{
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
m - > execute ( ) ; // do changes to task
delete m ;
TaskAddCmd * cmd = new TaskAddCmd ( getPart ( ) , & ( getProject ( ) ) , node , currNode , i18n ( " Add Task " ) ) ;
getPart ( ) - > addCommand ( cmd ) ; // add task to project
return ;
}
else
kdDebug ( ) < < k_funcinfo < < " Cannot insert new task. Hmm, no current node!? " < < endl ;
}
delete node ;
delete dia ;
}
void View : : slotAddMilestone ( ) {
Task * node = getProject ( ) . createTask ( currentTask ( ) ) ;
node - > effort ( ) - > set ( Duration : : zeroDuration ) ;
TaskDialog * dia = new TaskDialog ( * node , getProject ( ) . accounts ( ) , getProject ( ) . standardWorktime ( ) , getProject ( ) . isBaselined ( ) ) ;
if ( dia - > exec ( ) ) {
Node * currNode = currentTask ( ) ;
if ( currNode )
{
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
m - > execute ( ) ; // do changes to task
delete m ;
TaskAddCmd * cmd = new TaskAddCmd ( getPart ( ) , & ( getProject ( ) ) , node , currNode , i18n ( " Add Milestone " ) ) ;
getPart ( ) - > addCommand ( cmd ) ; // add task to project
return ;
}
else
kdDebug ( ) < < k_funcinfo < < " Cannot insert new milestone. Hmm, no current node!? " < < endl ;
}
delete node ;
delete dia ;
}
void View : : slotDefineWBS ( ) {
//kdDebug()<<k_funcinfo<<endl;
WBSDefinitionDialog * dia = new WBSDefinitionDialog ( getPart ( ) - > wbsDefinition ( ) ) ;
dia - > exec ( ) ;
delete dia ;
}
void View : : slotGenerateWBS ( ) {
//kdDebug()<<k_funcinfo<<endl;
getPart ( ) - > generateWBS ( ) ;
slotUpdate ( false ) ;
}
void View : : slotConfigure ( ) {
//kdDebug()<<k_funcinfo<<endl;
ConfigDialog * dia = new ConfigDialog ( getPart ( ) - > config ( ) , getProject ( ) ) ;
dia - > exec ( ) ;
delete dia ;
}
Node * View : : currentTask ( )
{
Node * task = 0 ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview ) {
task = m_ganttview - > currentNode ( ) ;
}
else if ( m_tab - > visibleWidget ( ) = = m_pertview ) {
task = m_pertview - > currentNode ( ) ;
}
else if ( m_tab - > visibleWidget ( ) = = m_resourceview ) {
task = m_resourceview - > currentNode ( ) ;
}
if ( 0 ! = task ) {
return task ;
}
return & ( getProject ( ) ) ;
}
void View : : slotOpenNode ( ) {
//kdDebug()<<k_funcinfo<<endl;
Node * node = currentTask ( ) ;
if ( ! node )
return ;
switch ( node - > type ( ) ) {
case Node : : Type_Project : {
Project * project = dynamic_cast < Project * > ( node ) ;
MainProjectDialog * dia = new MainProjectDialog ( * project ) ;
if ( dia - > exec ( ) ) {
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
if ( m ) {
getPart ( ) - > addCommand ( m ) ;
}
}
delete dia ;
break ;
}
case Node : : Type_Subproject :
//TODO
break ;
case Node : : Type_Task : {
Task * task = dynamic_cast < Task * > ( node ) ;
TaskDialog * dia = new TaskDialog ( * task , getProject ( ) . accounts ( ) , getProject ( ) . standardWorktime ( ) , getProject ( ) . isBaselined ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
if ( m ) {
getPart ( ) - > addCommand ( m ) ;
}
}
delete dia ;
break ;
}
case Node : : Type_Milestone : {
// Use the normal task dialog for now.
// Maybe milestone should have it's own dialog, but we need to be able to
// enter a duration in case we accidentally set a tasks duration to zero
// and hence, create a milestone
Task * task = dynamic_cast < Task * > ( node ) ;
TaskDialog * dia = new TaskDialog ( * task , getProject ( ) . accounts ( ) , getProject ( ) . standardWorktime ( ) , getProject ( ) . isBaselined ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
if ( m ) {
getPart ( ) - > addCommand ( m ) ;
}
}
delete dia ;
break ;
}
case Node : : Type_Summarytask : {
Task * task = dynamic_cast < Task * > ( node ) ;
SummaryTaskDialog * dia = new SummaryTaskDialog ( * task ) ;
if ( dia - > exec ( ) ) {
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
if ( m ) {
getPart ( ) - > addCommand ( m ) ;
}
}
delete dia ;
break ;
}
default :
break ; // avoid warnings
}
}
void View : : slotTaskProgress ( ) {
//kdDebug()<<k_funcinfo<<endl;
Node * node = currentTask ( ) ;
if ( ! node )
return ;
switch ( node - > type ( ) ) {
case Node : : Type_Project : {
break ;
}
case Node : : Type_Subproject :
//TODO
break ;
case Node : : Type_Task : {
Task * task = dynamic_cast < Task * > ( node ) ;
TaskProgressDialog * dia = new TaskProgressDialog ( * task , getProject ( ) . standardWorktime ( ) ) ;
if ( dia - > exec ( ) ) {
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
if ( m ) {
getPart ( ) - > addCommand ( m ) ;
}
}
delete dia ;
break ;
}
case Node : : Type_Milestone : {
Task * task = dynamic_cast < Task * > ( node ) ;
MilestoneProgressDialog * dia = new MilestoneProgressDialog ( * task ) ;
if ( dia - > exec ( ) ) {
KCommand * m = dia - > buildCommand ( getPart ( ) ) ;
if ( m ) {
getPart ( ) - > addCommand ( m ) ;
}
}
delete dia ;
break ;
}
case Node : : Type_Summarytask : {
// TODO
break ;
}
default :
break ; // avoid warnings
}
}
void View : : slotDeleteTask ( )
{
//kdDebug()<<k_funcinfo<<endl;
Node * node = currentTask ( ) ;
if ( node = = 0 | | node - > getParent ( ) = = 0 ) {
kdDebug ( ) < < k_funcinfo < < ( node ? " Task is main project " : " No current task " ) < < endl ;
return ;
}
KMacroCommand * cmd = new KMacroCommand ( i18n ( " Delete Task " ) ) ;
cmd - > addCommand ( new NodeDeleteCmd ( getPart ( ) , node ) ) ;
TQPtrListIterator < Relation > it = node - > dependChildNodes ( ) ;
for ( ; it . current ( ) ; + + it ) {
cmd - > addCommand ( new DeleteRelationCmd ( getPart ( ) , it . current ( ) ) ) ;
}
it = node - > dependParentNodes ( ) ;
for ( ; it . current ( ) ; + + it ) {
cmd - > addCommand ( new DeleteRelationCmd ( getPart ( ) , it . current ( ) ) ) ;
}
getPart ( ) - > addCommand ( cmd ) ;
}
void View : : slotIndentTask ( )
{
//kdDebug()<<k_funcinfo<<endl;
Node * node = currentTask ( ) ;
if ( node = = 0 | | node - > getParent ( ) = = 0 ) {
kdDebug ( ) < < k_funcinfo < < ( node ? " Task is main project " : " No current task " ) < < endl ;
return ;
}
if ( getProject ( ) . canIndentTask ( node ) ) {
NodeIndentCmd * cmd = new NodeIndentCmd ( getPart ( ) , * node , i18n ( " Indent Task " ) ) ;
getPart ( ) - > addCommand ( cmd ) ;
}
}
void View : : slotUnindentTask ( )
{
//kdDebug()<<k_funcinfo<<endl;
Node * node = currentTask ( ) ;
if ( node = = 0 | | node - > getParent ( ) = = 0 ) {
kdDebug ( ) < < k_funcinfo < < ( node ? " Task is main project " : " No current task " ) < < endl ;
return ;
}
if ( getProject ( ) . canUnindentTask ( node ) ) {
NodeUnindentCmd * cmd = new NodeUnindentCmd ( getPart ( ) , * node , i18n ( " Unindent Task " ) ) ;
getPart ( ) - > addCommand ( cmd ) ;
}
}
void View : : slotMoveTaskUp ( )
{
//kdDebug()<<k_funcinfo<<endl;
Node * task = currentTask ( ) ;
if ( 0 = = task ) {
// is always != 0. At least we would get the Project, but you never know who might change that
// so better be careful
kdError ( ) < < k_funcinfo < < " No current task " < < endl ;
return ;
}
if ( Node : : Type_Project = = task - > type ( ) ) {
kdDebug ( ) < < k_funcinfo < < " The root node cannot be moved up " < < endl ;
return ;
}
if ( getProject ( ) . canMoveTaskUp ( task ) ) {
NodeMoveUpCmd * cmd = new NodeMoveUpCmd ( getPart ( ) , * task , i18n ( " Move Task Up " ) ) ;
getPart ( ) - > addCommand ( cmd ) ;
}
}
void View : : slotMoveTaskDown ( )
{
//kdDebug()<<k_funcinfo<<endl;
Node * task = currentTask ( ) ;
if ( 0 = = task ) {
// is always != 0. At least we would get the Project, but you never know who might change that
// so better be careful
return ;
}
if ( Node : : Type_Project = = task - > type ( ) ) {
kdDebug ( ) < < k_funcinfo < < " The root node cannot be moved down " < < endl ;
return ;
}
if ( getProject ( ) . canMoveTaskDown ( task ) ) {
NodeMoveDownCmd * cmd = new NodeMoveDownCmd ( getPart ( ) , * task , i18n ( " Move Task Down " ) ) ;
getPart ( ) - > addCommand ( cmd ) ;
}
}
void View : : slotAddRelation ( Node * par , Node * child ) {
//kdDebug()<<k_funcinfo<<endl;
Relation * rel = new Relation ( par , child ) ;
AddRelationDialog * dia = new AddRelationDialog ( rel , this ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd )
getPart ( ) - > addCommand ( cmd ) ;
} else {
delete rel ;
}
delete dia ;
}
void View : : slotAddRelation ( Node * par , Node * child , int linkType ) {
//kdDebug()<<k_funcinfo<<endl;
if ( linkType = = Relation : : FinishStart | |
linkType = = Relation : : StartStart | |
linkType = = Relation : : FinishFinish )
{
Relation * rel = new Relation ( par , child , static_cast < Relation : : Type > ( linkType ) ) ;
getPart ( ) - > addCommand ( new AddRelationCmd ( getPart ( ) , rel , i18n ( " Add Relation " ) ) ) ;
} else {
slotAddRelation ( par , child ) ;
}
}
void View : : slotModifyRelation ( Relation * rel ) {
//kdDebug()<<k_funcinfo<<endl;
ModifyRelationDialog * dia = new ModifyRelationDialog ( rel , this ) ;
if ( dia - > exec ( ) ) {
if ( dia - > relationIsDeleted ( ) ) {
getPart ( ) - > addCommand ( new DeleteRelationCmd ( getPart ( ) , rel , i18n ( " Delete Relation " ) ) ) ;
} else {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd ) {
getPart ( ) - > addCommand ( cmd ) ;
}
}
}
delete dia ;
}
void View : : slotModifyRelation ( Relation * rel , int linkType ) {
//kdDebug()<<k_funcinfo<<endl;
if ( linkType = = Relation : : FinishStart | |
linkType = = Relation : : StartStart | |
linkType = = Relation : : FinishFinish )
{
getPart ( ) - > addCommand ( new ModifyRelationTypeCmd ( getPart ( ) , rel , static_cast < Relation : : Type > ( linkType ) ) ) ;
} else {
slotModifyRelation ( rel ) ;
}
}
// testing
void View : : slotExportGantt ( ) {
//kdDebug()<<k_funcinfo<<endl;
if ( ! m_ganttview ) {
return ;
}
TQString fn = KFileDialog : : getSaveFileName ( TQString ( ) , TQString ( ) , this ) ;
if ( ! fn . isEmpty ( ) ) {
TQFile f ( fn ) ;
m_ganttview - > exportGantt ( TQT_TQIODEVICE ( & f ) ) ;
}
}
void View : : slotEditResource ( ) {
//kdDebug()<<k_funcinfo<<endl;
Resource * r = m_resourceview - > currentResource ( ) ;
if ( ! r )
return ;
ResourceDialog * dia = new ResourceDialog ( getProject ( ) , r ) ;
if ( dia - > exec ( ) ) {
KCommand * cmd = dia - > buildCommand ( getPart ( ) ) ;
if ( cmd )
getPart ( ) - > addCommand ( cmd ) ;
}
delete dia ;
}
void View : : updateReadWrite ( bool /*readwrite*/ ) {
}
Part * View : : getPart ( ) const {
return ( Part * ) koDocument ( ) ;
}
void View : : slotConnectNode ( ) {
//kdDebug()<<k_funcinfo<<endl;
/* NodeItem *curr = m_ganttview->currentItem();
if ( curr ) {
kdDebug ( ) < < k_funcinfo < < " node= " < < curr - > getNode ( ) . name ( ) < < endl ;
} */
}
TQPopupMenu * View : : popupMenu ( const TQString & name )
{
//kdDebug()<<k_funcinfo<<endl;
Q_ASSERT ( factory ( ) ) ;
if ( factory ( ) )
return ( ( TQPopupMenu * ) factory ( ) - > container ( name , this ) ) ;
return 0L ;
}
void View : : slotChanged ( TQWidget * )
{
//kdDebug()<<k_funcinfo<<endl;
slotUpdate ( false ) ;
}
void View : : slotChanged ( )
{
//kdDebug()<<k_funcinfo<<endl;
slotUpdate ( false ) ;
}
void View : : slotUpdate ( bool calculate )
{
//kdDebug()<<k_funcinfo<<"calculate="<<calculate<<endl;
if ( calculate )
projectCalculate ( ) ;
m_updateGanttview = true ;
m_updateResourceview = true ;
m_updateAccountsview = true ;
updateView ( m_tab - > visibleWidget ( ) ) ;
}
void View : : slotAboutToShow ( TQWidget * widget ) {
updateView ( widget ) ;
}
void View : : updateView ( TQWidget * widget )
{
TQApplication : : setOverrideCursor ( TQt : : waitCursor ) ;
setScheduleActionsEnabled ( ) ;
setTaskActionsEnabled ( false ) ;
mainWindow ( ) - > toolBar ( " report " ) - > hide ( ) ;
if ( widget = = m_ganttview )
{
//kdDebug()<<k_funcinfo<<"draw gantt"<<endl;
m_ganttview - > setShowExpected ( actionViewExpected - > isChecked ( ) ) ;
m_ganttview - > setShowOptimistic ( actionViewOptimistic - > isChecked ( ) ) ;
m_ganttview - > setShowPessimistic ( actionViewPessimistic - > isChecked ( ) ) ;
if ( m_updateGanttview )
m_ganttview - > drawChanges ( getProject ( ) ) ;
setTaskActionsEnabled ( widget , true ) ;
m_updateGanttview = false ;
}
else if ( widget = = m_pertview )
{
//kdDebug()<<k_funcinfo<<"draw pertview"<<endl;
m_pertview - > draw ( ) ;
}
else if ( widget = = m_resourceview )
{
//kdDebug()<<k_funcinfo<<"draw resourceview"<<endl;
if ( m_updateResourceview )
m_resourceview - > draw ( getPart ( ) - > getProject ( ) ) ;
m_updateResourceview = false ;
}
else if ( widget = = m_accountsview )
{
//kdDebug()<<k_funcinfo<<"draw accountsview"<<endl;
if ( m_updateAccountsview )
m_accountsview - > draw ( ) ;
m_updateAccountsview = false ;
}
/* else if (widget == m_reportview)
{
mainWindow ( ) - > toolBar ( " report " ) - > show ( ) ;
m_reportview - > enableNavigationBtn ( ) ;
} */
TQApplication : : restoreOverrideCursor ( ) ;
}
void View : : slotRenameNode ( Node * node , const TQString & name ) {
//kdDebug()<<k_funcinfo<<name<<endl;
if ( node ) {
NodeModifyNameCmd * cmd = new NodeModifyNameCmd ( getPart ( ) , * node , name , i18n ( " Modify Name " ) ) ;
getPart ( ) - > addCommand ( cmd ) ;
}
}
void View : : slotPopupMenu ( const TQString & menuname , const TQPoint & pos )
{
TQPopupMenu * menu = this - > popupMenu ( menuname ) ;
if ( menu )
menu - > exec ( pos ) ;
}
bool View : : setContext ( Context & context ) {
//kdDebug()<<k_funcinfo<<endl;
m_currentEstimateType = context . currentEstimateType ;
getProject ( ) . setCurrentSchedule ( context . currentSchedule ) ;
actionViewExpected - > setChecked ( context . actionViewExpected ) ;
actionViewOptimistic - > setChecked ( context . actionViewOptimistic ) ;
actionViewPessimistic - > setChecked ( context . actionViewPessimistic ) ;
m_ganttview - > setContext ( context . ganttview , getProject ( ) ) ;
// hmmm, can't decide if these should be here or actions moved to ganttview
actionViewGanttResources - > setChecked ( context . ganttview . showResources ) ;
actionViewGanttTaskName - > setChecked ( context . ganttview . showTaskName ) ;
actionViewGanttTaskLinks - > setChecked ( context . ganttview . showTaskLinks ) ;
actionViewGanttProgress - > setChecked ( context . ganttview . showProgress ) ;
actionViewGanttFloat - > setChecked ( context . ganttview . showPositiveFloat ) ;
actionViewGanttCriticalTasks - > setChecked ( context . ganttview . showCriticalTasks ) ;
actionViewGanttCriticalPath - > setChecked ( context . ganttview . showCriticalPath ) ;
m_pertview - > setContext ( context . pertview ) ;
m_resourceview - > setContext ( context . resourceview ) ;
m_accountsview - > setContext ( context . accountsview ) ;
// m_reportview->setContext(context.reportview);
if ( context . currentView = = " ganttview " ) {
m_ganttview - > setShowExpected ( actionViewExpected - > isChecked ( ) ) ;
m_ganttview - > setShowOptimistic ( actionViewOptimistic - > isChecked ( ) ) ;
m_ganttview - > setShowPessimistic ( actionViewPessimistic - > isChecked ( ) ) ;
slotViewGantt ( ) ;
} else if ( context . currentView = = " pertview " ) {
slotViewPert ( ) ;
} else if ( context . currentView = = " resourceview " ) {
slotViewResources ( ) ;
} else if ( context . currentView = = " accountsview " ) {
slotViewAccounts ( ) ;
} else if ( context . currentView = = " reportview " ) {
//slotViewReport();
} else {
slotViewGantt ( ) ;
}
slotUpdate ( false ) ;
return true ;
}
void View : : getContext ( Context & context ) const {
//kdDebug()<<k_funcinfo<<endl;
context . currentEstimateType = m_currentEstimateType ;
if ( getProject ( ) . currentSchedule ( ) )
context . currentSchedule = getProject ( ) . currentSchedule ( ) - > id ( ) ;
context . actionViewExpected = actionViewExpected - > isChecked ( ) ;
context . actionViewOptimistic = actionViewOptimistic - > isChecked ( ) ;
context . actionViewPessimistic = actionViewPessimistic - > isChecked ( ) ;
if ( m_tab - > visibleWidget ( ) = = m_ganttview ) {
context . currentView = " ganttview " ;
} else if ( m_tab - > visibleWidget ( ) = = m_pertview ) {
context . currentView = " pertview " ;
} else if ( m_tab - > visibleWidget ( ) = = m_resourceview ) {
context . currentView = " resourceview " ;
} else if ( m_tab - > visibleWidget ( ) = = m_accountsview ) {
context . currentView = " accountsview " ;
/* } else if (m_tab->visibleWidget() == m_reportview) {
context . currentView = " reportview " ; */
}
m_ganttview - > getContext ( context . ganttview ) ;
m_pertview - > getContext ( context . pertview ) ;
m_resourceview - > getContext ( context . resourceview ) ;
m_accountsview - > getContext ( context . accountsview ) ;
// m_reportview->getContext(context.reportview);
}
void View : : setBaselineMode ( bool /*on*/ ) {
//kdDebug()<<k_funcinfo<<endl;
/* m_baselineMode = on;
m_ganttview - > setReadWriteMode ( ! on ) ;
actionCut - > setEnabled ( ! on ) ;
actionCopy - > setEnabled ( ! on ) ;
actionPaste - > setEnabled ( ! on ) ;
actionDeleteTask - > setEnabled ( ! on ) ;
actionIndentTask - > setEnabled ( ! on ) ;
actionUnindentTask - > setEnabled ( ! on ) ;
actionMoveTaskUp - > setEnabled ( ! on ) ;
actionMoveTaskDown - > setEnabled ( ! on ) ;
actionAddTask - > setEnabled ( ! on ) ;
actionAddSubtask - > setEnabled ( ! on ) ;
actionAddMilestone - > setEnabled ( ! on ) ;
actionEditStandardWorktime - > setEnabled ( ! on ) ;
actionEditCalendar - > setEnabled ( ! on ) ;
actionEditResources - > setEnabled ( ! on ) ;
actionCalculate - > setEnabled ( ! on ) ;
actionEditResource - > setEnabled ( ! on ) ; */
}
// called when widget w is about to be shown
void View : : setTaskActionsEnabled ( TQWidget * w , bool on ) {
Node * n = 0 ;
if ( w = = m_ganttview ) {
n = m_ganttview - > currentNode ( ) ;
} // else pert, etc when implemented
actionAddTask - > setEnabled ( on ) ;
actionAddMilestone - > setEnabled ( on ) ;
// only enabled when we have a task selected
bool o = ( on & & n ) ;
actionAddSubtask - > setEnabled ( o ) ;
actionDeleteTask - > setEnabled ( o ) ;
actionMoveTaskUp - > setEnabled ( o & & getProject ( ) . canMoveTaskUp ( n ) ) ;
actionMoveTaskDown - > setEnabled ( o & & getProject ( ) . canMoveTaskDown ( n ) ) ;
actionIndentTask - > setEnabled ( o & & getProject ( ) . canIndentTask ( n ) ) ;
actionUnindentTask - > setEnabled ( o & & getProject ( ) . canUnindentTask ( n ) ) ;
}
void View : : setTaskActionsEnabled ( bool on ) {
setTaskActionsEnabled ( m_ganttview , on ) ; //FIXME if more than ganttview can do this
}
void View : : setScheduleActionsEnabled ( ) {
actionViewExpected - > setEnabled ( getProject ( ) . findSchedule ( Schedule : : Expected ) ) ;
actionViewOptimistic - > setEnabled ( getProject ( ) . findSchedule ( Schedule : : Optimistic ) ) ;
actionViewPessimistic - > setEnabled ( getProject ( ) . findSchedule ( Schedule : : Pessimistic ) ) ;
if ( getProject ( ) . notScheduled ( ) ) {
m_estlabel - > setText ( i18n ( " Not scheduled " ) ) ;
return ;
}
Schedule * ns = getProject ( ) . currentSchedule ( ) ;
if ( ns - > type ( ) = = Schedule : : Expected ) {
actionViewExpected - > setChecked ( true ) ;
m_estlabel - > setText ( i18n ( " Expected " ) ) ;
} else if ( ns - > type ( ) = = Schedule : : Optimistic ) {
actionViewOptimistic - > setChecked ( true ) ;
m_estlabel - > setText ( i18n ( " Optimistic " ) ) ;
} else if ( ns - > type ( ) = = Schedule : : Pessimistic ) {
actionViewPessimistic - > setChecked ( true ) ;
m_estlabel - > setText ( i18n ( " Pessimistic " ) ) ;
}
}
# ifndef NDEBUG
void View : : slotPrintDebug ( ) {
kdDebug ( ) < < " -------- Debug printout: Node list " < < endl ;
/* Node *curr = m_ganttview->currentNode();
if ( curr ) {
curr - > printDebug ( true , " " ) ;
} else */
getPart ( ) - > getProject ( ) . printDebug ( true , " " ) ;
}
void View : : slotPrintSelectedDebug ( ) {
Node * curr = m_ganttview - > currentNode ( ) ;
if ( curr ) {
kdDebug ( ) < < " -------- Debug printout: Selected node " < < endl ;
curr - > printDebug ( true , " " ) ;
} else
slotPrintDebug ( ) ;
}
void View : : slotPrintCalendarDebug ( ) {
kdDebug ( ) < < " -------- Debug printout: Node list " < < endl ;
/* Node *curr = m_ganttview->currentNode();
if ( curr ) {
curr - > printDebug ( true , " " ) ;
} else */
getPart ( ) - > getProject ( ) . printCalendarDebug ( " " ) ;
}
void View : : slotPrintTestDebug ( ) {
const TQStringList & lst = getPart ( ) - > xmlLoader ( ) . log ( ) ;
for ( TQStringList : : ConstIterator it = lst . constBegin ( ) ; it ! = lst . constEnd ( ) ; + + it ) {
kdDebug ( ) < < * it < < endl ;
}
// kdDebug()<<"------------Test 1---------------------"<<endl;
// {
// DateTime d1(TQDate(2006,1,2), TQTime(8,0,0));
// DateTime d2 = d1.addSecs(3600);
// Duration d = d2 - d1;
// bool b = d==Duration(0,0,0,3600);
// kdDebug()<<"1: Success="<<b<<" "<<d2.toString()<<"-"<<d1.toString()<<"="<<d.toString()<<endl;
// d = d1 - d2;
// b = d==Duration(0,0,0,3600);
// kdDebug()<<"2: Success="<<b<<" "<<d1.toString()<<"-"<<d2.toString()<<"="<<d.toString()<<endl;
// d2 = d2.addDays(-2);
// d = d1 - d2;
// b = d==Duration(2,0,0)-Duration(0,0,0,3600);
// kdDebug()<<"3: Success="<<b<<" "<<d1.toString()<<"-"<<d2.toString()<<"="<<d.toString()<<endl;
// d = d2 - d1;
// b = d==Duration(2,0,0)-Duration(0,0,0,3600);
// kdDebug()<<"4: Success="<<b<<" "<<d2.toString()<<"-"<<d1.toString()<<"="<<d.toString()<<endl;
// kdDebug()<<endl;
// b = (d2 + d)==d1;
// kdDebug()<<"5: Success="<<b<<" "<<d2<<"+"<<d.toString()<<"="<<d1<<endl;
// b = (d1 - d)==d2;
// kdDebug()<<"6: Success="<<b<<" "<<d1<<"-"<<d.toString()<<"="<<d2<<endl;
// } // end test 1
// kdDebug()<<endl;
// kdDebug()<<"------------Test 2 Single calendar-----------------"<<endl;
// {
// Calendar *t = new Calendar("Test 2");
// TQDate wdate(2006,1,2);
// DateTime before = DateTime(wdate.addDays(-1));
// DateTime after = DateTime(wdate.addDays(1));
// TQTime t1(8,0,0);
// TQTime t2(10,0,0);
// DateTime wdt1(wdate, t1);
// DateTime wdt2(wdate, t2);
// CalendarDay *day = new CalendarDay(TQDate(2006,1,2), Map::Working);
// day->addInterval(TQPair<TQTime, TQTime>(t1, t2));
// if (!t->addDay(day)) {
// kdDebug()<<"Failed to add day"<<endl;
// delete day;
// delete t;
// return;
// }
// kdDebug()<<"Added date="<<day->date().toString()<<" "<<day->startOfDay().toString()<<" - "<<day->endOfDay()<<endl;
// kdDebug()<<"Found date="<<day->date().toString()<<" "<<day->startOfDay().toString()<<" - "<<day->endOfDay()<<endl;
//
// CalendarDay *d = t->findDay(wdate);
// bool b = (day == d);
// kdDebug()<<"1: Success="<<b<<" Find same day"<<endl;
//
// DateTime dt = t->firstAvailableAfter(after, after.addDays(10));
// b = !dt.isValid();
// kdDebug()<<"2: Success="<<b<<" firstAvailableAfter("<<after<<"): ="<<dt<<endl;
//
// dt = t->firstAvailableBefore(before, before.addDays(-10));
// b = !dt.isValid();
// kdDebug()<<"3: Success="<<b<<" firstAvailableBefore("<<before.toString()<<"): ="<<dt<<endl;
//
// dt = t->firstAvailableAfter(before, after);
// b = dt == wdt1;
// kdDebug()<<"4: Success="<<b<<" firstAvailableAfter("<<before<<"): ="<<dt<<endl;
//
// dt = t->firstAvailableBefore(after, before);
// b = dt == wdt2;
// kdDebug()<<"5: Success="<<b<<" firstAvailableBefore("<<after<<"): ="<<dt<<endl;
//
// b = t->hasInterval(before, after);
// kdDebug()<<"6: Success="<<b<<" hasInterval("<<before<<", "<<after<<")"<<endl;
//
// b = !t->hasInterval(after, after.addDays(1));
// kdDebug()<<"7: Success="<<b<<" !hasInterval("<<after<<", "<<after.addDays(1)<<")"<<endl;
//
// b = !t->hasInterval(before, before.addDays(-1));
// kdDebug()<<"8: Success="<<b<<" !hasInterval("<<before<<", "<<before.addDays(-1)<<")"<<endl;
//
// Duration e1(0, 2, 0); // 2 hours
// Duration e2 = t->effort(before, after);
// b = e1==e2;
// kdDebug()<<"9: Success="<<b<<" effort"<<e1.toString()<<" = "<<e2.toString()<<endl;
//
// delete t;
// }// end test 2
//
// kdDebug()<<endl;
// kdDebug()<<"------------Test 3 Parent calendar-----------------"<<endl;
// {
// Calendar *t = new Calendar("Test 3");
// Calendar *p = new Calendar("Test 3 parent");
// t->setParent(p);
// TQDate wdate(2006,1,2);
// DateTime before = DateTime(wdate.addDays(-1));
// DateTime after = DateTime(wdate.addDays(1));
// TQTime t1(8,0,0);
// TQTime t2(10,0,0);
// DateTime wdt1(wdate, t1);
// DateTime wdt2(wdate, t2);
// CalendarDay *day = new CalendarDay(TQDate(2006,1,2), Map::Working);
// day->addInterval(TQPair<TQTime, TQTime>(t1, t2));
// if (!p->addDay(day)) {
// kdDebug()<<"Failed to add day"<<endl;
// delete day;
// delete t;
// return;
// }
// kdDebug()<<"Added date="<<day->date().toString()<<" "<<day->startOfDay().toString()<<" - "<<day->endOfDay().toString()<<endl;
// kdDebug()<<"Found date="<<day->date().toString()<<" "<<day->startOfDay().toString()<<" - "<<day->endOfDay().toString()<<endl;
//
// CalendarDay *d = p->findDay(wdate);
// bool b = (day == d);
// kdDebug()<<"1: Success="<<b<<" Find same day"<<endl;
//
// DateTime dt = t->firstAvailableAfter(after, after.addDays(10));
// b = !dt.isValid();
// kdDebug()<<"2: Success="<<b<<" firstAvailableAfter("<<after.toString()<<"): ="<<!b<<endl;
//
// dt = t->firstAvailableBefore(before, before.addDays(-10));
// b = !dt.isValid();
// kdDebug()<<"3: Success="<<b<<" firstAvailableBefore("<<before.toString()<<"): ="<<!b<<endl;
//
// dt = t->firstAvailableAfter(before, after);
// b = dt == wdt1;
// kdDebug()<<"4: Success="<<b<<" firstAvailableAfter("<<before.toString()<<"): ="<<dt.toString()<<endl;
//
// dt = t->firstAvailableBefore(after, before);
// b = dt == wdt2;
// kdDebug()<<"5: Success="<<b<<" firstAvailableBefore("<<after.toString()<<"): ="<<dt.toString()<<endl;
//
// b = t->hasInterval(before, after);
// kdDebug()<<"6: Success="<<b<<" hasInterval("<<before.toString()<<", "<<after<<")"<<endl;
//
// b = !t->hasInterval(after, after.addDays(1));
// kdDebug()<<"7: Success="<<b<<" !hasInterval("<<after.toString()<<", "<<after.addDays(1)<<")"<<endl;
//
// b = !t->hasInterval(before, before.addDays(-1));
// kdDebug()<<"8: Success="<<b<<" !hasInterval("<<before.toString()<<", "<<before.addDays(-1)<<")"<<endl;
// Duration e1(0, 2, 0); // 2 hours
// Duration e2 = t->effort(before, after);
// b = e1==e2;
// kdDebug()<<"9: Success="<<b<<" effort "<<e1.toString()<<"=="<<e2.toString()<<endl;
//
// delete t;
// delete p;
// }// end test 3
// kdDebug()<<endl;
// kdDebug()<<"------------Test 4 Parent calendar/weekdays-------------"<<endl;
// {
// TQTime t1(8,0,0);
// TQTime t2(10,0,0);
// Calendar *p = new Calendar("Test 4 parent");
// CalendarDay *wd1 = p->weekday(0); // monday
// if (wd1 == 0) {
// kdDebug()<<"Failed to get weekday"<<endl;
// }
// wd1->setState(Map::NonWorking);
//
// CalendarDay *wd2 = p->weekday(2); // wednesday
// if (wd2 == 0) {
// kdDebug()<<"Failed to get weekday"<<endl;
// }
// wd2->addInterval(TQPair<TQTime, TQTime>(t1, t2));
// wd2->setState(Map::Working);
//
// Calendar *t = new Calendar("Test 4");
// t->setParent(p);
// TQDate wdate(2006,1,2); // monday jan 2
// DateTime before = DateTime(wdate.addDays(-4)); //Thursday dec 29
// DateTime after = DateTime(wdate.addDays(4)); // Friday jan 6
// DateTime wdt1(wdate, t1);
// DateTime wdt2(TQDate(2006, 1, 4), t2); // Wednesday
// CalendarDay *day = new CalendarDay(TQDate(2006,1,2), Map::Working);
// day->addInterval(TQPair<TQTime, TQTime>(t1, t2));
// if (!p->addDay(day)) {
// kdDebug()<<"Failed to add day"<<endl;
// delete day;
// delete t;
// return;
// }
// kdDebug()<<"Added date="<<day->date().toString()<<" "<<day->startOfDay().toString()<<" - "<<day->endOfDay().toString()<<endl;
// kdDebug()<<"Found date="<<day->date().toString()<<" "<<day->startOfDay().toString()<<" - "<<day->endOfDay().toString()<<endl;
//
// CalendarDay *d = p->findDay(wdate);
// bool b = (day == d);
// kdDebug()<<"1: Success="<<b<<" Find same day"<<endl;
//
// DateTime dt = t->firstAvailableAfter(after, after.addDays(10));
// b = (dt.isValid() && dt == DateTime(TQDate(2006,1,11), t1));
// kdDebug()<<"2: Success="<<b<<" firstAvailableAfter("<<after<<"): ="<<dt<<endl;
//
// dt = t->firstAvailableBefore(before, before.addDays(-10));
// b = (dt.isValid() && dt == DateTime(TQDate(2005, 12, 28), t2));
// kdDebug()<<"3: Success="<<b<<" firstAvailableBefore("<<before.toString()<<"): ="<<dt<<endl;
//
// dt = t->firstAvailableAfter(before, after);
// b = dt == wdt1; // We find the day jan 2
// kdDebug()<<"4: Success="<<b<<" firstAvailableAfter("<<before.toString()<<"): ="<<dt.toString()<<endl;
//
// dt = t->firstAvailableBefore(after, before);
// b = dt == wdt2; // We find the weekday (wednesday)
// kdDebug()<<"5: Success="<<b<<" firstAvailableBefore("<<after.toString()<<"): ="<<dt.toString()<<endl;
//
// b = t->hasInterval(before, after);
// kdDebug()<<"6: Success="<<b<<" hasInterval("<<before.toString()<<", "<<after<<")"<<endl;
//
// b = !t->hasInterval(after, after.addDays(1));
// kdDebug()<<"7: Success="<<b<<" !hasInterval("<<after.toString()<<", "<<after.addDays(1)<<")"<<endl;
//
// b = !t->hasInterval(before, before.addDays(-1));
// kdDebug()<<"8: Success="<<b<<" !hasInterval("<<before.toString()<<", "<<before.addDays(-1)<<")"<<endl;
// Duration e1(0, 4, 0); // 2 hours
// Duration e2 = t->effort(before, after);
// b = e1==e2;
// kdDebug()<<"9: Success="<<b<<" effort "<<e1.toString()<<"="<<e2.toString()<<endl;
//
// TQPair<DateTime, DateTime> r = t->firstInterval(before, after);
// b = r.first == wdt1; // We find the monday jan 2
// kdDebug()<<"10: Success="<<b<<" firstInterval("<<before<<"): ="<<r.first<<", "<<r.second<<endl;
// r = t->firstInterval(r.second, after);
// b = r.first == DateTime(TQDate(2006, 1, 4),t1); // We find the wednesday jan 4
// kdDebug()<<"11: Success="<<b<<" firstInterval("<<r.second<<"): ="<<r.first<<", "<<r.second<<endl;
//
// delete t;
// delete p;
// }// end test 4
}
# endif
} //KPlato namespace
# include "kptview.moc"