82
82
// should be only one manager
83
83
project->setCurrentSchedule( m_project->scheduleManagers().first()->scheduleId() );
85
connect( project, SIGNAL( changed() ), this, SLOT( projectChanged() ) );
85
connect( project, SIGNAL( projectChanged() ), this, SLOT( projectChanged() ) );
88
89
WorkPackage::~WorkPackage()
570
const Project *fromProject = wp->project();
571
Project *toProject = m_project;
572
const ScheduleManager *fromSm = fromProject->scheduleManagers().value( 0 );
574
ScheduleManager *toSm = toProject->scheduleManagers().value( 0 );
576
if ( fromSm->managerId() != toSm->managerId() || fromSm->scheduleId() != toSm->scheduleId() ) {
577
// rescheduled, update schedules
578
m->addCommand( new CopySchedulesCmd( *fromProject, *toProject ) );
569
580
if ( m->isEmpty() ) {
572
583
part->addCommand( m );
573
setModified( true ); // FIXME needs to follow redo/undo
724
734
m_wp->setSettings( m_oldvalue );
737
//---------------------
738
CopySchedulesCmd::CopySchedulesCmd( const Project &fromProject, Project &toProject, const QString &name )
739
: NamedCommand( name ),
740
m_project( toProject )
743
QDomElement e = olddoc.createElement( "old" );
744
olddoc.appendChild( e );
746
m_olddoc = olddoc.toString();
749
e = newdoc.createElement( "new" );
750
newdoc.appendChild( e );
751
fromProject.save( e );
752
m_newdoc = newdoc.toString();
754
void CopySchedulesCmd::execute()
758
void CopySchedulesCmd::unexecute()
763
void CopySchedulesCmd::load( const QString &doc )
769
KoXmlElement proj = d.documentElement().namedItem( "project").toElement();
770
Q_ASSERT( ! proj.isNull() );
771
KoXmlElement task = proj.namedItem( "task").toElement();
772
Q_ASSERT( ! task.isNull() );
773
KoXmlElement ts = task.namedItem( "schedules").namedItem( "schedule").toElement();
774
Q_ASSERT( ! ts.isNull() );
775
KoXmlElement ps = proj.namedItem( "schedules").namedItem( "plan" ).toElement();
776
Q_ASSERT( ! ps.isNull() );
778
XMLLoaderObject status;
779
status.setProject( &m_project );
780
status.setVersion( PLAN_FILE_SYNTAX_VERSION );
782
NodeSchedule *ns = new NodeSchedule();
783
if ( ns->loadXML( ts, status ) ) {
784
kDebug(planworkDbg())<<ns->name()<<ns->type()<<ns->id();
785
ns->setNode( m_project.childNode( 0 ) );
786
m_project.childNode( 0 )->addSchedule( ns );
791
// schedule manager next (includes main schedule and resource schedule)
792
ScheduleManager *sm = new ScheduleManager( m_project );
793
if ( sm->loadXML( ps, status ) ) {
794
m_project.addScheduleManager( sm );
800
m_project.setCurrentSchedule( sm->scheduleId() );
802
m_project.childNode( 0 )->changed();
805
void CopySchedulesCmd::clearSchedules()
807
foreach ( Schedule *s, m_project.schedules() ) {
808
m_project.takeSchedule( s );
810
foreach ( Schedule *s, m_project.childNode( 0 )->schedules() ) {
811
foreach ( Appointment *a, s->appointments() ) {
812
if ( a->resource() && a->resource()->resource() ) {
813
a->resource()->resource()->takeSchedule( a->resource() );
816
m_project.childNode( 0 )->takeSchedule( s );
818
foreach ( ScheduleManager *sm, m_project.scheduleManagers() ) {
819
m_project.takeScheduleManager( sm );
728
825
} //KPlatoWork namespace