Bug 194865 - ktimetracker filename call does not work
Summary: ktimetracker filename call does not work
Status: RESOLVED FIXED
Alias: None
Product: ktimetracker
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR normal
Target Milestone: ---
Assignee: Thorsten Staerk
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-06-01 13:46 UTC by Thorsten Staerk
Modified: 2009-09-21 14:43 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:
Sentry Crash Report:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Thorsten Staerk 2009-06-01 13:46:18 UTC
Version:            (using Devel)
OS:                Linux
Installed from:    Compiled sources

The call
 ktimetracker example.ics
should make ktimetracker start and load example.ics. Instead, ktimetracker loads the default file.
Comment 1 Thorsten Staerk 2009-06-01 15:17:06 UTC
See http://websvn.kde.org/?view=rev&revision=976294
Comment 2 Thorsten Staerk 2009-06-20 12:34:08 UTC
To give a start, here is how to add a task:
svn diff
Index: taskview.cpp
===================================================================
--- taskview.cpp        (revision 984143)
+++ taskview.cpp        (working copy)
@@ -455,6 +455,7 @@
     refresh();
   }
   for (int i=0; i<=columnCount(); i++) resizeColumnToContents(i);
+  addTask("hi",0,0);
   kDebug(5970) << "Leaving function";
 }

@@ -868,7 +869,7 @@
   setSortingEnabled(true);
   return taskuid;
 }
-
+
 void TaskView::newSubTask()
 {
   Task* task = currentItem();
Comment 3 Thorsten Staerk 2009-09-13 16:26:44 UTC
The problem seems to be that
 factory->create(this, "ktimetrackerpart" )
creates the part without telling which file to use
Comment 4 Thorsten Staerk 2009-09-15 21:33:00 UTC
The next problem is that 
((TimetrackerWidget) (m_part->widget())).openFile(icsfile);
must be
((TimetrackerWidget*) (m_part->widget()))->openFile(icsfile);
Comment 5 Thorsten Staerk 2009-09-15 21:48:09 UTC
This makes it better, but far from perfect. I need sleep(8*3600) now.

Index: ktimetrackerpart.cpp           
===================================================================
--- ktimetrackerpart.cpp        (revision 1022777)                 
+++ ktimetrackerpart.cpp        (working copy)                     
@@ -60,7 +60,7 @@                                                  
   setWidget( mMainWidget );                                       
   setXMLFile( "ktimetrackerui.rc" );                              
   makeMenus();                                                    
-  mMainWidget->openFile( KStandardDirs::locateLocal( "data",      
+  mMainWidget->openFile( KStandardDirs::locateLocal( "data",      
                         QString::fromLatin1( "ktimetracker/ktimetracker.ics" ) ) );
   emit setWindowCaption( KStandardDirs::locateLocal( "data", QString::fromLatin1( "ktimetracker/ktimetracker.ics" ) ) );
                                                                                                                         
Index: taskview.cpp                                                                                                      
===================================================================                                                      
--- taskview.cpp        (revision 1022777)                                                                               
+++ taskview.cpp        (working copy)                                                                                   
@@ -408,6 +408,7 @@                                                                                                      
                                                                                                                         
 void TaskView::load( const QString &fileName )                                                                          
 {                                                                                                                       
+  kDebug(5970) << "Entering function-filename=" << fileName;                                                            
   assert( !( fileName.isEmpty() ) );                                                                                    
                                                                                                                         
   // if the program is used as an embedded plugin for konqueror, there may be a need                                    
Index: mainwindow.cpp                                                                                                    
===================================================================                                                      
--- mainwindow.cpp      (revision 1022777)                                                                               
+++ mainwindow.cpp      (working copy)                                                                                   
@@ -62,19 +62,24 @@                                                                                                      
   {                                                                                                                     
     // now that the Part is loaded, we cast it to a Part to get                                                         
     // our hands on it                                                                                                  
+    kDebug(5970) << "calling factory->create";                                                                          
     m_part = static_cast<KParts::ReadWritePart *>                                                                       
        (factory->create(this, "ktimetrackerpart" ));                                                                    
+    kDebug(5970) << "called factory->create";                                                                           
                                                                                                                         
+    //((TimetrackerWidget*) (m_part->widget()))->                                                                       
+                                                                                                                        
     if (m_part)                                                                                                         
     {                                                                                                                   
       // tell the KParts::MainWindow that this is indeed                                                                
       // the main widget                                                                                                
       setCentralWidget(m_part->widget());                                                                               
-      ((TimetrackerWidget) (m_part->widget())).openFile(icsfile);                                                       
+      kDebug(5970) << "icsfile is "<<icsfile;                                                                           
       connect(configureAction, SIGNAL(triggered(bool)),                                                                 
         m_part->widget(), SLOT(showSettingsDialog()));                                                                  
       ((TimetrackerWidget *) (m_part->widget()))->setupActions( actionCollection() );                                   
-      setupGUI();                                                                                                       
+      ((TimetrackerWidget *) (m_part->widget()))->openFile(icsfile);                                                    
+       setupGUI();                                                                                                      
     }                                                                                                                   
   }                                                                                                                     
   else                                                                                                                  
Index: ktimetrackerpart.h                                                                                                
===================================================================                                                      
--- ktimetrackerpart.h  (revision 1022777)                                                                               
+++ ktimetrackerpart.h  (working copy)                                                                                   
@@ -53,6 +53,7 @@                                                                                                        
 public:                                                                                                                 
     ktimetrackerpart(QWidget *parentWidget, QObject *parent, const QVariantList&);                                      
                                                                                                                         
+    QString openfile(QString filename=QString());                                                                       
     TimetrackerWidget* MainWidget() { return mMainWidget; };                                                            
                                                                                                                         
     virtual ~ktimetrackerpart();                                                                                        
Index: timetrackerwidget.cpp                                                                                             
===================================================================                                                      
--- timetrackerwidget.cpp       (revision 1022777)                                                                       
+++ timetrackerwidget.cpp       (working copy)                                                                           
@@ -591,7 +591,7 @@                                                                                                      
   {                                                                                                                     
     taskView = qobject_cast< TaskView* >( d->mTabWidget->widget( i ) );                                                 
                                                                                                                         
-    if ( taskView->activeTasks().count() == 0 )                                                                         
+    if ( taskView && taskView->activeTasks().count() == 0 )                                                             
     {                                                                                                                   
       d->mTabWidget->setTabTextColor( i, palette().color( QPalette::Foreground ) );                                     
     }                                                                                                                   
Index: karmstorage.cpp                                                                                                   
===================================================================                                                      
--- karmstorage.cpp     (revision 1022777)                                                                               
+++ karmstorage.cpp     (working copy)                                                                                   
@@ -88,7 +88,7 @@                                                                                                        
 // loads data from filename into view. If no filename is given, filename from preferences is used.                      
 // filename might be of use if this program is run as embedded konqueror plugin.
 {
-  kDebug(5970) << "Entering function";
+  kDebug(5970) << "Entering function. filename=" << fileName;
   QString err;
   KEMailSettings settings;
   QString lFileName = fileName;
@@ -134,8 +134,8 @@

   QObject::connect (d->mCalendar, SIGNAL(resourceChanged(ResourceCalendar *)),
                    view, SLOT(iCalFileModified(ResourceCalendar *)));
-  d->mCalendar->setTimeSpec( KSystemTimeZones::local() );
-  d->mCalendar->setResourceName( QString::fromLatin1("KTimeTracker") );
+  //d->mCalendar->setTimeSpec( KSystemTimeZones::local() );
+  //d->mCalendar->setResourceName( QString::fromLatin1("KTimeTracker") );
   d->mCalendar->open();
   d->mCalendar->load();

Index: timetrackerwidget.h
===================================================================
--- timetrackerwidget.h (revision 1022777)
+++ timetrackerwidget.h (working copy)
@@ -49,10 +49,10 @@
       This function checks all (TaskView) mTabWidget->widget() to see if any task is open.
      */
     bool allEventsHaveEndTiMe();
-
+    void addTaskView( const QString &fileName = "" );
   private:
-    void addTaskView( const QString &fileName = "" );

+
     /**
       Opens a file dialog to save the current taskView.
Comment 6 Thorsten Staerk 2009-09-20 16:49:06 UTC
Now without crashes, but icons are greyed out when starting:

Index: ktimetrackerpart.cpp                                                     
===================================================================             
--- ktimetrackerpart.cpp        (revision 1025934)                              
+++ ktimetrackerpart.cpp        (working copy)                                  
@@ -60,10 +60,8 @@                                                              
   setWidget( mMainWidget );                                                    
   setXMLFile( "ktimetrackerui.rc" );                                           
   makeMenus();                                                                 
-  mMainWidget->openFile( KStandardDirs::locateLocal( "data",                   
-                        QString::fromLatin1( "ktimetracker/ktimetracker.ics" ) ) );                                                                            
-  emit setWindowCaption( KStandardDirs::locateLocal( "data", QString::fromLatin1( "ktimetracker/ktimetracker.ics" ) ) );                                       
                                                                                
+                                                                               
   if ( KTimeTrackerSettings::trayIcon() ) mTray = new TrayIcon( this );        
   else mTray = new TrayIcon( );                                                
                                                                                
Index: mainwindow.cpp                                                           
===================================================================             
--- mainwindow.cpp      (revision 1025934)                                      
+++ mainwindow.cpp      (working copy)                                          
@@ -70,7 +70,7 @@                                                               
       // tell the KParts::MainWindow that this is indeed                       
       // the main widget                                                       
       setCentralWidget(m_part->widget());                                      
-      ((TimetrackerWidget) (m_part->widget())).openFile(icsfile);              
+      ((TimetrackerWidget *) (m_part->widget()))->openFile(icsfile);           
       connect(configureAction, SIGNAL(triggered(bool)),                        
         m_part->widget(), SLOT(showSettingsDialog()));                         
       ((TimetrackerWidget *) (m_part->widget()))->setupActions( actionCollection() );                                                                          
Index: timetrackerwidget.cpp                                                    
===================================================================             
--- timetrackerwidget.cpp       (revision 1025934)                              
+++ timetrackerwidget.cpp       (working copy)                                  
@@ -434,7 +434,7 @@                                                             
 bool TimetrackerWidget::closeFile()                                            
 {                                                                              
   kDebug(5970) << "Entering TimetrackerWidget::closeFile";                     
-  TaskView *taskView = qobject_cast< TaskView* >( d->mTabWidget->currentWidget() );                                                                            
+  TaskView *taskView = (TaskView*)( d->mTabWidget->currentWidget() );

   // is it an unsaved file?
   if ( d->mIsNewVector.contains( taskView ) )
@@ -531,7 +531,7 @@
   kDebug(5970) << "Entering TimetrackerWidget::closeAllFiles";
   while ( d->mTabWidget->count() > 0 )
   {
-    TaskView *taskView = qobject_cast< TaskView* >( d->mTabWidget->widget( 0 ) );
+    TaskView *taskView = (TaskView*)( d->mTabWidget->widget( 0 ) );
     d->mTabWidget->setCurrentWidget( taskView );
     taskView->stopAllTimers();
     if ( !( closeFile() ) )
@@ -589,8 +589,7 @@
   TaskView *taskView;
   for ( int i = 0; i < d->mTabWidget->count(); ++i )
   {
-    taskView = qobject_cast< TaskView* >( d->mTabWidget->widget( i ) );
-
+    taskView = (TaskView*)( d->mTabWidget->widget( i ) );
     if ( taskView->activeTasks().count() == 0 )
     {
       d->mTabWidget->setTabTextColor( i, palette().color( QPalette::Foreground ) );
@@ -624,7 +623,7 @@

 void TimetrackerWidget::slotAddTask( const QString &taskName )
 {
-  TaskView *taskView = qobject_cast< TaskView* >( d->mTabWidget->currentWidget() );
+  TaskView *taskView = (TaskView*)( d->mTabWidget->currentWidget() );

   taskView->addTask( taskName, 0, 0, DesktopList(), 0 );
Comment 7 Thorsten Staerk 2009-09-20 19:55:29 UTC
SVN commit 1026062 by tstaerk:

Some code cleanup, e.g. do setCaption next to oPenFile().
CCBUGS:194865
--Thi line, and those below, will be ignored--

M    ktimetracker/mainwindow.cpp
M    ktimetracker/timetrackerwidget.cpp


 M  +2 -2      mainwindow.cpp  
 M  +4 -5      timetrackerwidget.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1026062
Comment 8 Thorsten Staerk 2009-09-21 10:13:09 UTC
SVN commit 1026234 by tstaerk:

Allow handing over a parameter to work on a specific iCalendar file.
This stopped working when mainwindow became a mere KParts::MainWindow.
I guess this cost 24 man hours programming time.
BUGS:194865


 M  +29 -26    ktimetrackerpart.cpp  
 M  +8 -2      ktimetrackerpart.h  
 M  +2 -2      mainwindow.cpp  
 M  +2 -2      mainwindow.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1026234
Comment 9 Thorsten Staerk 2009-09-21 14:43:12 UTC
SVN commit 1026315 by tstaerk:

Allow handing over a parameter to work on a specific iCalendar file.
Backport of 1026234.
CCBUGS:194865


 M  +29 -32    ktimetrackerpart.cpp  
 M  +8 -2      ktimetrackerpart.h  
 M  +2 -2      mainwindow.cpp  
 M  +2 -2      mainwindow.h  
 M  +1 -1      version.h  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1026315