OSDN Git Service

>>965, fix: don't close tab & don't update subject list
authorikemo <ikemo@56b19765-1e22-0410-a548-a0f45d66c51a>
Sat, 10 Jul 2004 08:01:58 +0000 (08:01 +0000)
committerikemo <ikemo@56b19765-1e22-0410-a548-a0f45d66c51a>
Sat, 10 Jul 2004 08:01:58 +0000 (08:01 +0000)
git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/kita/kita/trunk@1231 56b19765-1e22-0410-a548-a0f45d66c51a

12 files changed:
TODO
kita/src/favoritelistview.cpp
kita/src/favoritelistview.h
kita/src/kitasubjecttabwidget.cpp
kita/src/kitasubjecttabwidget.h
kita/src/kitasubjectview.cpp
kita/src/kitasubjectview.h
kita/src/kitathreadtabwidget.cpp
kita/src/kitathreadtabwidget.h
kita/src/libkita/signalcollection.h
kita/src/part/kitathreadview.cpp
kita/src/part/kitathreadview.h

diff --git a/TODO b/TODO
index cc173da..5182d49 100644 (file)
--- a/TODO
+++ b/TODO
@@ -48,6 +48,7 @@
 ¡¦¤ªµ¤¤ËÆþ¤ê¤ò¥Ä¥ê¡¼¤Ëɽ¼¨
 
 ¥Ð¥°
+¡¦¤´¤ßÈ¢¤ò¥¯¥ê¥Ã¥¯¤¹¤ë¤È¥¦¥£¥ó¥É¥¦¤¬ÊĤ¸¤é¤ì¤ë¤¬¡¢¥¿¥¤¥È¥ë¤¬ÊѤï¤é¤Ê¤¤
 ¡¦¤ªµ¤¤ËÆþ¤ê¤ò¥¯¥ê¥Ã¥¯¤·¤¿¤È¤­¤Ë¾ðÊ󤬹¹¿·¤µ¤ì¤ë¤¬¡¢
 ÁªÂò¾ðÊó¤Þ¤Ç¾Ã¤¨¤ë¤Î¤¬µ¤»ý¤Á°­¤¤¡£
 ¡¦NetAccess::download¤È¤«¤¬deprecated¤Ë¤Ê¤Ã¤Æ¤ë¡£
index a18717a..24bc73c 100644 (file)
@@ -14,6 +14,7 @@
 #include "libkita/kita_misc.h"
 #include "libkita/threadinfo.h"
 #include "libkita/signalcollection.h"
+#include "libkita/parsemisc.h"
 
 #include <qmap.h>
 #include <qapplication.h>
@@ -46,6 +47,9 @@ FavoriteListView::FavoriteListView( QWidget* parent, const char* name )
              signalCollection, SIGNAL( openBoardRequested( const QString&, bool ) ) );
     connect( signalCollection, SIGNAL( favoritesUpdated() ),
              SLOT( update() ) );
+
+    connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
+             SLOT( slotUpdateSubject( const KURL& ) ) );  
 }
 
 FavoriteListView::~FavoriteListView()
@@ -107,10 +111,12 @@ void FavoriteListView::loadThread( QListViewItem* item )
     }
 }
 
-void FavoriteListView::updateThread( const Kita::Thread* updated_thread )
+void FavoriteListView::slotUpdateSubject( const KURL& url )
 {
+    KURL datURL = Kita::ParseMisc::parseURLonly( url );
+    Kita::Thread* updated_thread = Kita::Thread::getByURLNew( datURL );
     for ( QListViewItem * item = subjectList->firstChild(); item; item = item->nextSibling() ) {
-        if ( item->text( Col_DatURL ) == updated_thread->datURL() ) {
+        if ( item->text( Col_DatURL ) == datURL.prettyURL() ) {
             int resNum = updated_thread->resNum();
             int readNum = KitaThreadInfo::readNum( updated_thread->datURL() );
             item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
index 9657802..02b1275 100644 (file)
@@ -39,7 +39,7 @@ public:
     ~FavoriteListView();
 
 public slots:
-    void updateThread( const Kita::Thread* updated_thread );
+    void slotUpdateSubject( const KURL& url );
     
     /**
      *
index 3109c93..fd5428f 100644 (file)
@@ -44,8 +44,6 @@ KitaSubjectTabWidget::KitaSubjectTabWidget( QWidget* parent, const char* name, W
              SLOT( deleteView( KitaSubjectView* ) ) );
     connect( signalCollection, SIGNAL( openBoardRequested( const QString&, bool ) ),
              SLOT( loadBoard( const QString&, bool ) ) );
-    connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
-             SLOT( slotUpdateSubjectTab( const KURL& ) ) );
 }
 
 KitaSubjectTabWidget::~KitaSubjectTabWidget()
@@ -80,24 +78,6 @@ void KitaSubjectTabWidget::loadBoard( const QString& boardURL, bool withNewTab )
     showPage( m_latestView );
 }
 
-void KitaSubjectTabWidget::slotUpdateSubjectTab( const KURL& datURL )
-{
-    Kita::Thread* thread = Kita::Thread::getByURL( datURL.prettyURL() );
-    for ( int i = 0; i < count(); i++ )
-    {
-        QWidget* widget = page( i );
-        // TODO: class¤ÇȽÄꤷ¤è¤¦¡£
-        if ( QString::compare( widget->name(), "favoriteTab" ) == 0 )
-        {
-            static_cast<FavoriteListView*>( widget ) ->updateThread( thread );
-        }
-        else
-        {
-            static_cast<KitaSubjectView*>( widget ) ->updateThread( thread );
-        }
-    }
-}
-
 void KitaSubjectTabWidget::connectSignals( Kita::ThreadListView* view )
 {
     connect( view, SIGNAL( showThreadRequested( const QString&, bool ) ),
index 7829994..5d00834 100644 (file)
@@ -30,7 +30,6 @@ public:
 
 public slots:
     void loadBoard( const QString&, bool withNewTab = false );
-    void slotUpdateSubjectTab( const KURL& datURL );
     void reloadSubjectList();
 
 private:
index f0e5b6b..1b5a060 100644 (file)
@@ -42,6 +42,8 @@
 #include "libkita/kitaconfig.h"
 #include "libkita/favoritethreads.h"
 #include "libkita/datmanager.h"
+#include "libkita/parsemisc.h"
+#include "libkita/signalcollection.h"
 #include "part/kita2ch.h"
 
 KitaSubjectView::KitaSubjectView( QWidget* parent, const char* name )
@@ -54,6 +56,12 @@ KitaSubjectView::KitaSubjectView( QWidget* parent, const char* name )
              SLOT( loadThread( QListViewItem* ) ) );
     connect( ReloadButton, SIGNAL( clicked() ),
              SLOT( reloadSubject() ) );
+
+    Kita::SignalCollection* signalCollection = Kita::SignalCollection::getInstance();
+    connect( signalCollection, SIGNAL( updateSubjectTab( const KURL& ) ),
+             SLOT( slotUpdateSubject( const KURL& ) ) );
+    connect( this, SIGNAL( closeThreadTab( const KURL& ) ),
+            signalCollection, SIGNAL( closeThreadTab( const KURL& ) ));
 }
 
 KitaSubjectView::~KitaSubjectView()
@@ -209,14 +217,16 @@ void KitaSubjectView::setFont( const QFont& font )
     subjectList->setFont( font );
 }
 
-void KitaSubjectView::updateThread( const Kita::Thread* updated_thread )
+void KitaSubjectView::slotUpdateSubject( const KURL& url )
 {
+    KURL datURL = Kita::ParseMisc::parseURLonly( url );
+    Kita::Thread* updated_thread = Kita::Thread::getByURLNew( datURL );
     for ( QListViewItem * item = subjectList->firstChild(); item; item = item->nextSibling() ) {
-        if ( item->text( Col_DatURL ) == updated_thread->datURL() ) {
+        if ( item->text( Col_DatURL ) == datURL.prettyURL() ) {
             int resNum = updated_thread->resNum();
             int readNum = KitaThreadInfo::readNum( updated_thread->datURL() );
             item->setText( Col_ResNum, QString( "%1" ).arg( resNum, 4 ) );
-            item->setText( Col_Read, QString( "%1" ).arg( readNum, 4 ) );
+           item->setText( Col_Read, ( readNum > 0 ) ? QString( "%1" ).arg( readNum, 4 ) : QString( "" ) );
             item->setText( Col_Unread, readNum > 0 && resNum != readNum ? QString( "%1" ).arg( resNum - readNum, 4 ) : QString( "" ) );
 
             switch ( item->text( Col_MarkOrder ).toInt() ) {
@@ -237,6 +247,7 @@ void KitaSubjectView::updateThread( const Kita::Thread* updated_thread )
                 m_readNum++;
                 item->setText( Col_MarkOrder, QString::number( ts_read ) );
             } else {
+               item->setPixmap( Col_Mark, NULL );
                 item->setText( Col_MarkOrder, QString::number( ts_normal ) );
             }
             UpdateKindLabel();
@@ -301,5 +312,7 @@ void KitaSubjectView::deleteLog( const KURL& url )
             == QMessageBox::Ok )
     {
         Kita::DatManager::deleteCache( url, this );
+         emit closeThreadTab( url );
+         slotUpdateSubject( url );
     }
 }
index 8ef5154..8582298 100644 (file)
@@ -37,7 +37,7 @@ public slots:
     void reloadSubject();
     void loadBoard( const QString& boardURL );
     void setFont( const QFont& font );
-    void updateThread( const Kita::Thread* thread );
+    void slotUpdateSubject( const KURL& url );
 
 private:
     QString m_boardURL;
@@ -51,6 +51,7 @@ private slots:
 
 signals:
     void loadBoardCompleted( const KURL& );
+    void closeThreadTab( const KURL& );
 };
 
 #endif
index 1ff3f6f..2dff656 100644 (file)
@@ -52,11 +52,9 @@ KitaThreadTabWidget::KitaThreadTabWidget( QWidget* parent, const char* name, WFl
     if ( view ) {
         m_viewList.append( view );
         addTab( view, "thread" );
-        connectSignals( view );
     }
-    connect( this, SIGNAL( currentChanged ( QWidget * ) ),
-             SLOT( slotCurrentChanged ( QWidget * ) ) );
 
+    connectSignals();
 }
 
 KitaThreadTabWidget::~KitaThreadTabWidget()
@@ -98,7 +96,6 @@ void KitaThreadTabWidget::showThread( const QString& url, bool withNewTab )
 
         if ( newView ) {
             addTab( newView, getTabLabel( threadName ) );
-            connectSignals( newView );
             newView->showThread( datURL, num );
             showPage( newView );
             m_viewList.append( newView );
@@ -151,8 +148,11 @@ void KitaThreadTabWidget::showAlternativeView( const KURL& url, const QString& l
     }
 }
 
-void KitaThreadTabWidget::connectSignals( KitaThreadView* )
+void KitaThreadTabWidget::connectSignals()
 {
+    connect( this, SIGNAL( currentChanged ( QWidget * ) ),
+             SLOT( slotCurrentChanged ( QWidget * ) ) );
+    
     Kita::SignalCollection* signalCollection = Kita::SignalCollection::getInstance();
     connect( this, SIGNAL( setMainStatusbar( const QString& ) ),
              signalCollection, SIGNAL( setMainStatusbar( const QString& ) ) );
@@ -160,6 +160,10 @@ void KitaThreadTabWidget::connectSignals( KitaThreadView* )
              signalCollection, SIGNAL( setMainCaption( const QString& ) ) );
     connect( signalCollection, SIGNAL( updateThreadTab( const KURL& ) ),
              this, SLOT( slotUpdateThreadTab( const KURL& ) ) );
+    connect( signalCollection, SIGNAL( closeCurrentThreadTab() ),
+             SLOT( closeCurrentTab() ));
+    connect( signalCollection, SIGNAL( closeThreadTab( const KURL& ) ),
+             SLOT( slotCloseThreadTab( const KURL& )));
 }
 
 KitaThreadView* KitaThreadTabWidget::findView( const QString& threadURL )
@@ -204,7 +208,6 @@ void KitaThreadTabWidget::deleteView( QWidget* v )
         if ( view ) {
             m_viewList.append( view );
             addTab( view, "thread" );
-            connectSignals( view );
 
             showPage( view );
             emit setMainStatusbar( "" );
@@ -225,7 +228,30 @@ void KitaThreadTabWidget::reloadThread()
 
 void KitaThreadTabWidget::closeCurrentTab()
 {
-    deleteView( static_cast<KitaThreadView *>( currentPage() ) );
+    QWidget * view = currentPage();
+    CloseCurrentThreadTabEvent* e = new CloseCurrentThreadTabEvent( indexOf( view ) );
+    QApplication::postEvent( this, e );  // Qt will delete it when done
+}
+
+/* public slot */
+void KitaThreadTabWidget::slotCloseThreadTab( const KURL& url )
+{
+    KURL datURL = Kita::ParseMisc::parseURLonly( url );
+    QWidget * view = findView( Kita::DatManager::threadURL( datURL ) );
+    if( view ){
+       CloseCurrentThreadTabEvent* e = new CloseCurrentThreadTabEvent( indexOf( view ) );
+       QApplication::postEvent( this, e );  // Qt will delete it when done
+    }
+}
+
+/* Calling deleteView from KitaThreadView will be the
+   cause of crash.  So you need to call deleteView
+   via custom event.                                   */ /* protected */
+void KitaThreadTabWidget::customEvent( QCustomEvent * e )
+{
+    if ( e->type() == EVENT_CloseCurrentThreadTab ) {
+       deleteView ( page( static_cast< CloseCurrentThreadTabEvent* >(e)->getIndex() ) );
+    }
 }
 
 KitaThreadTabBar::KitaThreadTabBar( QWidget* parent, const char* name )
@@ -282,8 +308,9 @@ const QString KitaThreadTabWidget::getTabLabel( const QString &name )
         return title;
 }
 
-void KitaThreadTabWidget::slotUpdateThreadTab( const KURL& datURL )
+void KitaThreadTabWidget::slotUpdateThreadTab( const KURL& url )
 {
+    KURL datURL = Kita::ParseMisc::parseURLonly( url );
     Kita::Thread* thread = Kita::Thread::getByURL( datURL.prettyURL() );
     KitaThreadView * view = findView( thread->url() );
     if ( view )
index 6c81ea4..24bc04b 100644 (file)
@@ -47,19 +47,23 @@ public slots:
     void focusSearchCombo();
     void slotCurrentChanged( QWidget* );
     void closeCurrentTab();
+    void slotCloseThreadTab( const KURL& url );
     void showAlternativeView( const KURL&, const QString&, const QString& );
 
 
 private:
-    void connectSignals( KitaThreadView* );
+    void connectSignals();
     KitaThreadView* createView();
     QPtrList<KitaThreadView> m_viewList;
     KitaThreadView* findView( const QString& threadURL );
     const QString getTabLabel( const QString &name );
 
 private slots:
-    void slotUpdateThreadTab( const KURL& datURL );
+    void slotUpdateThreadTab( const KURL& url );
 
+protected:
+    virtual void customEvent( QCustomEvent * e );  
 signals:
     void setMainStatusbar( const QString& );
     void setMainCaption( const QString& );
@@ -81,4 +85,24 @@ signals:
     void deleteMenuSelected( QWidget* );
 };
 
+
+/*------------------------------------------------------------------*/
+#include <qevent.h>
+
+#define EVENT_CloseCurrentThreadTab ( QEvent::User + 100 )
+
+
+class CloseCurrentThreadTabEvent : public QCustomEvent
+{
+    int pageindex;
+
+  public:
+
+    CloseCurrentThreadTabEvent( int idx )
+       : QCustomEvent( EVENT_CloseCurrentThreadTab ), pageindex( idx ){}
+
+    const int getIndex() const { return pageindex; }
+};
+
+
 #endif
index 362beb7..08d7a3d 100644 (file)
@@ -37,11 +37,13 @@ namespace Kita
         void openBoardRequested( const QString& boardURL, bool withNewTab );
         void favoritesUpdated();
 
-       /* to : KitaSubjectTabWidget */
-       void updateSubjectTab( const KURL& datURL );
+       /* to : KitaSubjectView, FavoriteListView */
+       void updateSubjectTab( const KURL& url );
 
        /* to : KitaThreadTabWidget */
-       void updateThreadTab( const KURL& datURL );
+       void updateThreadTab( const KURL& url );
+       void closeThreadTab( const KURL& url );
+       void closeCurrentThreadTab();
        
        /* to : KitaMainWindow */
        void setMainURLLine( const KURL& url );
index 9617244..94fecd3 100644 (file)
@@ -140,6 +140,8 @@ KitaThreadView::KitaThreadView( QWidget* parent, const char* name )
              signalCollection, SIGNAL( openBoardRequested( const QString&, bool ) ) );
     connect( this, SIGNAL( setMainCaption( const QString& ) ),
              signalCollection, SIGNAL( setMainCaption( const QString& ) ) );
+    connect( this, SIGNAL( closeThreadTab( const KURL& ) ),
+             signalCollection, SIGNAL( closeThreadTab( const KURL& ) ));
 
     m_viewmode = VIEWMODE_PARENT;
     m_rescode = 200;
@@ -724,13 +726,16 @@ void KitaThreadView::slotComboActivated( int index )
 
 void KitaThreadView::slotDeleteButtonClicked()
 {
-    if ( QMessageBox::warning( this,
+    if ( !m_datURL.isEmpty()
+        && QMessageBox::warning( this,
                                "Kita",
                                "Do you want to delete Log ?",
                                QMessageBox::Ok, QMessageBox::Cancel | QMessageBox::Default )
             == QMessageBox::Ok )
     {
         Kita::DatManager::deleteCache( threadURL(), this );
+       emit closeThreadTab( m_datURL );
+       emit updateSubjectTab( m_datURL );
     }
 }
 
index c215df9..c53e17b 100644 (file)
@@ -133,6 +133,7 @@ signals:
     void bookmarked( const QString& datURL, bool on );
     void openBoardRequested( const QString& URL, bool useTab );
     void showThreadCompleted(); /* to KitaThreadPart */
+    void closeThreadTab( const KURL& url );
 };
 
 namespace Kita